]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix problem in HTML with bracketed characters
authorStephen Berman <stephen.berman@gmx.net>
Mon, 14 Jun 2021 12:57:57 +0000 (14:57 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Mon, 14 Jun 2021 12:57:57 +0000 (14:57 +0200)
* lisp/textmodes/sgml-mode.el (sgml-tag-syntax-table): Use bracket
syntax for all Unicode bracket characters (bug#43941).

lisp/textmodes/sgml-mode.el
test/lisp/textmodes/sgml-mode-tests.el

index d5930e82df3ed0296547c64e9da5a3de25451a28..fda00ec367ef64736aaf5a587f977083476b701e 100644 (file)
@@ -190,8 +190,19 @@ This takes effect when first loading the `sgml-mode' library.")
   "Syntax table used in SGML mode.  See also `sgml-specials'.")
 
 (defconst sgml-tag-syntax-table
-  (let ((table (sgml-make-syntax-table sgml-specials)))
-    (dolist (char '(?\( ?\) ?\{ ?\} ?\[ ?\] ?$ ?% ?& ?* ?+ ?/))
+  (let ((table (sgml-make-syntax-table sgml-specials))
+       brackets)
+    (map-char-table
+     (lambda (key value)
+       (setq brackets (cons (list
+                            (if (consp key)
+                                (list (car key) (cdr key))
+                              key)
+                            value)
+                           brackets)))
+     (unicode-property-table-internal 'paired-bracket))
+    (setq brackets (delete-dups (flatten-tree brackets)))
+    (dolist (char (append brackets (list ?$ ?% ?& ?* ?+ ?/)))
       (modify-syntax-entry char "." table))
     (unless (memq ?' sgml-specials)
       ;; Avoid that skipping a tag backwards skips any "'" prefixing it.
index 697c96c78e5d087854a58bcefa27cf237105800b..39d44e8f68300935b184ce6dcec2b710015cccaf 100644 (file)
@@ -204,5 +204,32 @@ The point is set to the beginning of the buffer."
     (should (= 1 (- (car (syntax-ppss (1- (point-max))))
                     (car (syntax-ppss (point-max))))))))
 
+(ert-deftest sgml-test-brackets ()
+  "Test fontification of apostrophe preceded by paired-bracket character."
+  (let (brackets results)
+    (map-char-table
+     (lambda (key value)
+       (setq brackets (cons (list
+                            (if (consp key)
+                                (list (car key) (cdr key))
+                              key)
+                            value)
+                           brackets)))
+     (unicode-property-table-internal 'paired-bracket))
+    (setq brackets (delete-dups (flatten-tree brackets)))
+    (setq brackets (append brackets (list ?$ ?% ?& ?* ?+ ?/)))
+    (with-temp-buffer
+      (while brackets
+       (let ((char (string (pop brackets))))
+         (insert (concat "<p>" char "'s</p>\n"))))
+      (html-mode)
+      (font-lock-ensure (point-min) (point-max))
+      (goto-char (point-min))
+      (while (not (eobp))
+       (goto-char (next-single-char-property-change (point) 'face))
+       (let ((val (get-text-property (point) 'face)))
+         (when val
+           (should-not (eq val 'font-lock-string-face))))))))
+
 (provide 'sgml-mode-tests)
 ;;; sgml-mode-tests.el ends here