>From af36beb67d385dcb9afbca107248d16e3be3e2b7 Mon Sep 17 00:00:00 2001 From: Ikumi Keita Date: Fri, 3 May 2019 14:59:50 +0900 Subject: [PATCH] Improve comment syntax handling in docTeX mode * font-latex.el (font-latex-set-syntactic-keywords): (font-latex-doctex-^^A): Assign comment ender syntax to the first "^" of ^^A, not its preceding character. Begin style b comment with the second "^". These fix bug#35140. (font-latex-doctex-keywords): Add an entry so as to give the correct fontification to the first "^" above. (font-latex-find-matching-close): Add comments. --- font-latex.el | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/font-latex.el b/font-latex.el index 486f39fe..cf84f261 100644 --- a/font-latex.el +++ b/font-latex.el @@ -1053,7 +1053,7 @@ have changed." (setq font-latex-doctex-syntactic-keywords (append font-latex-syntactic-keywords ;; For docTeX comment-in-doc. - `(("\\(\\^\\)\\^A" (1 (font-latex-doctex-^^A))))))) + '(("\\^\\(\\^\\)A" (1 (font-latex-doctex-^^A))))))) ;;; Syntactic fontification @@ -1464,6 +1464,10 @@ ignored during the search." ;; XXX: Do not look up syntax-table properties since they may ;; be misleading, e.g. in the case of "{foo}^^A" where the ;; closing brace gets a comment end syntax. + ;; (Comment added on May 2019): This particular example is no + ;; longer a problem with the modification on + ;; `font-latex-doctex-^^A'. Not sure there are other cases + ;; that we can not rely on syntax property. (parse-sexp-lookup-properties nil)) (or (condition-case nil @@ -2173,27 +2177,32 @@ END marks boundaries for searching for quotation ends." (defvar font-latex-doctex-keywords (append font-latex-keywords-2 - '(("^%<[^>]*>" (0 font-latex-doctex-preprocessor-face t))))) + '(("^%<[^>]*>" (0 font-latex-doctex-preprocessor-face t)) + ("\\(\\^\\)\\^A" (1 (get-text-property (match-end 1) 'face) t))))) ;; Copy and adaptation of `doctex-font-lock-^^A' in `tex-mode.el' of ;; CVS Emacs (March 2004) (defun font-latex-doctex-^^A () (if (eq (char-after (line-beginning-position)) ?\%) (progn + ;; Assign comment ender syntax to the first "^" of ^^A. It + ;; used to be assigned to the character just before the "^", + ;; but that sometimes caused trouble because the closing brace + ;; in "{foo}^^A" didn't get the close paren syntax. See + ;; comment in `font-latex-find-matching-close' and bug#35140. + ;; There is a hack in `font-latex-doctex-keywords' to restore + ;; the correct fontification of this "^". (put-text-property - (1- (match-beginning 1)) (match-beginning 1) 'syntax-table - (if (= (1+ (line-beginning-position)) (match-beginning 1)) - ;; The `%' is a single-char comment, which Emacs - ;; syntax-table can't deal with. We could turn it - ;; into a non-comment, or use `\n%' or `%^' as the comment. - ;; Instead, we include it in the ^^A comment. - (eval-when-compile (string-to-syntax "< b")) - (eval-when-compile (string-to-syntax ">")))) + (match-beginning 0) (match-beginning 1) 'syntax-table + (eval-when-compile (string-to-syntax ">"))) + ;; Make the EOL as the boundary of the style b comment which + ;; begins with ^^A. (let ((end (line-end-position))) (if (< end (point-max)) (put-text-property end (1+ end) 'syntax-table (eval-when-compile (string-to-syntax "> b"))))) + ;; Begin style b comment with the second "^" of ^^A. (eval-when-compile (string-to-syntax "< b"))))) ;; Copy and adaptation of `doctex-font-lock-syntactic-face-function' -- 2.21.0