emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master e7e92dc: Fix merge of sgml-syntax-propertize-rules


From: Noam Postavsky
Subject: [Emacs-diffs] master e7e92dc: Fix merge of sgml-syntax-propertize-rules
Date: Wed, 15 May 2019 19:05:45 -0400 (EDT)

branch: master
commit e7e92dc5d24ac3bcde69732bab6a6c3c0d9de97b
Author: Noam Postavsky <address@hidden>
Commit: Noam Postavsky <address@hidden>

    Fix merge of sgml-syntax-propertize-rules
    
    During the merge of emacs-26, the sgml-syntax-propertize-rules part of
    2019-01-17 "* lisp/textmodes/sgml-mode.el: Try and fix bug#33887." got
    lost in the conflict against 2019-05-09 "Recognize single quote
    attribute values in nxml and sgml (Bug#35381)".
    * lisp/textmodes/sgml-mode.el (sgml-syntax-propertize-rules): Reapply
    the 2019-01-17 change to speed up sgml-syntax-propertize-rules, taking
    into account the 2019-05-09 which means we have to handle single
    quotes as well.
---
 lisp/textmodes/sgml-mode.el | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 6dc1b9e..11b3053 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -339,12 +339,21 @@ Any terminating `>' or `/' is not matched.")
      ("--[ \t\n]*\\(>\\)" (1 "> b"))
      ("\\(<\\)[?!]" (1 (prog1 "|>"
                          (sgml-syntax-propertize-inside end))))
-     ;; Quotes outside of tags should not introduce strings.
-     ;; Be careful to call `syntax-ppss' on a position before the one we're
-     ;; going to change, so as not to need to flush the data we just computed.
-     ("[\"']" (0 (if (prog1 (zerop (car (syntax-ppss (match-beginning 0))))
-                       (goto-char (match-end 0)))
-                     (string-to-syntax ".")))))))
+     ;; Quotes outside of tags should not introduce strings which end up
+     ;; hiding tags.  We used to test every quote and mark it as "."
+     ;; if it's outside of tags, but there are too many quotes and
+     ;; the resulting number of calls to syntax-ppss made it too slow
+     ;; (bug#33887), so we're now careful to leave alone any pair
+     ;; of quotes that doesn't hold a < or > char, which is the vast majority.
+     ("\\(?:\\(1:\"\\)[^\"<>]*[<>\"]\\|\\(1:'\\)[^'<>]*[<>']\\)"
+      (1 (unless (memq (char-before) '(?\' ?\"))
+           ;; Be careful to call `syntax-ppss' on a position before the one
+           ;; we're going to change, so as not to need to flush the data we
+           ;; just computed.
+           (if (prog1 (zerop (car (syntax-ppss (match-beginning 0))))
+                 (goto-char (1- (match-end 0))))
+               (string-to-syntax ".")))))
+     )))
 
 (defun sgml-syntax-propertize (start end)
   "Syntactic keywords for `sgml-mode'."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]