Allow entities to be terminated by {}

This commit is contained in:
Carsten Dominik 2010-04-07 15:32:31 +02:00
parent 33fbdf0522
commit 007c7bc64b
2 changed files with 40 additions and 12 deletions

View File

@ -1,5 +1,11 @@
2010-04-07 Carsten Dominik <carsten.dominik@gmail.com>
* org-latex.el (org-export-latex-preprocess): Do not yet protect
defined entities - these will be taken care of later.
(org-export-latex-special-chars): Post-process entity replacement.
(org-export-latex-fontify-headline): Do not yet protect defined
entities - these will be taken care of later.
* org-entities.el (org-entities-user): Fix typo.
* org.el (org-prepare-agenda-buffers): Uniquify TODO keywords

View File

@ -1312,7 +1312,7 @@ links, keywords, lists, tables, fixed-width"
;; the beginning of the buffer - inserting "\n" is safe here though.
(insert "\n" string)
(goto-char (point-min))
(let ((re (concat "\\\\[a-zA-Z]+"
(let ((re (concat "\\\\\\([a-zA-Z]+\\)"
"\\(?:<[^<>\n]*>\\)*"
"\\(?:\\[[^][\n]*?\\]\\)*"
"\\(?:<[^<>\n]*>\\)*"
@ -1320,8 +1320,12 @@ links, keywords, lists, tables, fixed-width"
(org-create-multibrace-regexp "{" "}" 3)
"\\)\\{1,3\\}")))
(while (re-search-forward re nil t)
(unless (save-excursion (goto-char (match-beginning 0))
(equal (char-after (point-at-bol)) ?#))
(unless (or
;; check for comment line
(save-excursion (goto-char (match-beginning 0))
(equal (char-after (point-at-bol)) ?#))
;; Check if this is a defined entity, so that is may need conversion
(org-entity-get (match-string 1)))
(add-text-properties (match-beginning 0) (match-end 0)
'(org-protected t)))))
(when (plist-get org-export-latex-options-plist :emphasize)
@ -1406,6 +1410,17 @@ See the `org-export-latex.el' code for a complete conversion table."
(match-string 1)
(or (match-string 3) "")))
"") t t)
(when (and (get-text-property (1- (point)) 'org-entity)
(looking-at "{}"))
;; OK, this was an entity replacement, and the user
;; had terminated the entity with {}. Make sure
;; {} is protected as well, and remove the extra {}
;; inserted by the conversion.
(put-text-property (point) (+ 2 (point)) 'org-protected t)
(if (save-excursion (goto-char (max (- (point) 2) (point-min)))
(looking-at "{}"))
(replace-match ""))
(forward-char 2))
(backward-char 1))
((member (match-string 2) '("_" "^"))
(replace-match (or (save-match-data
@ -1472,12 +1487,14 @@ Convert CHAR depending on STRING-BEFORE and STRING-AFTER."
The conversion is made depending of STRING-BEFORE and STRING-AFTER."
(let ((ass (org-entity-get string-after)))
(cond
(ass (if (nth 2 ass)
(concat string-before
(org-export-latex-protect-string
(concat "$" (nth 1 ass) "$")))
(concat string-before (org-export-latex-protect-string
(nth 1 ass)))))
(ass (org-add-props
(if (nth 2 ass)
(concat string-before
(org-export-latex-protect-string
(concat "$" (nth 1 ass) "$")))
(concat string-before (org-export-latex-protect-string
(nth 1 ass))))
nil 'org-entity t))
((and (not (string-match "^[ \n\t]" string-after))
(not (string-match "[ \t]\\'\\|^" string-before)))
;; backslash is inside a word
@ -2029,14 +2046,19 @@ The conversion is made depending of STRING-BEFORE and STRING-AFTER."
;; Protect LaTeX commands like \command[...]{...} or \command{...}
(goto-char (point-min))
(let ((re (concat
"\\\\[a-zA-Z]+"
"\\\\\\([a-zA-Z]+\\)"
"\\(?:<[^<>\n]*>\\)*"
"\\(?:\\[[^][\n]*?\\]\\)*"
"\\(?:<[^<>\n]*>\\)*"
"\\(" (org-create-multibrace-regexp "{" "}" 3) "\\)\\{1,3\\}")))
(while (re-search-forward re nil t)
(unless (save-excursion (goto-char (match-beginning 0))
(equal (char-after (point-at-bol)) ?#))
(unless (or
;; check for comment line
(save-excursion (goto-char (match-beginning 0))
(equal (char-after (point-at-bol)) ?#))
;; Check if this is a defined entity, so that is may need conversion
(org-entity-get (match-string 1))
)
(add-text-properties (match-beginning 0) (match-end 0)
'(org-protected t)))))