emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[nongnu] externals/caml b5bf207 160/197: update caml-font.el to deal wit


From: Stefan Monnier
Subject: [nongnu] externals/caml b5bf207 160/197: update caml-font.el to deal with the quoted string syntax
Date: Sat, 21 Nov 2020 01:19:58 -0500 (EST)

branch: externals/caml
commit b5bf207a675ae93def1ebed4eb47754d3aff1a58
Author: Damien Doligez <damien.doligez@inria.fr>
Commit: Damien Doligez <damien.doligez@inria.fr>

    update caml-font.el to deal with the quoted string syntax
---
 caml-font.el | 44 ++++++++++++++++++++++++++++++++++++--------
 1 file changed, 36 insertions(+), 8 deletions(-)

diff --git a/caml-font.el b/caml-font.el
index 40bee0a..9c28e01 100644
--- a/caml-font.el
+++ b/caml-font.el
@@ -172,23 +172,28 @@
   "'\\(\015\012\\|[\012\015]\\)"
 )
 
+; match an opening delimiter for a quoted string
+(defconst caml-font-quoted-string-start-re
+  "{\\([a-z]*\\)|"
+)
+
 ; match any token or sequence of tokens that cannot contain a
-; quote, double quote, a start of comment, or a newline
+; quote, double quote, a start of comment or quoted string, or a newline
 ; note: this is only to go faster than one character at a time
 (defconst caml-font-other-re
-  "[^A-Za-z_0-9\012\015\300-\326\330-\366\370-\377'\"(]+"
+  "[^A-Za-z_0-9\012\015\300-\326\330-\366\370-\377'\"({]+"
 )
 
 ; match any sequence of non-special characters in a comment
 ; note: this is only to go faster than one character at a time
 (defconst caml-font-other-comment-re
-  "[^(*\"'\012\015]+"
+  "[^{(*\"'\012\015]+"
 )
 
 ; match any sequence of non-special characters in a string
 ; note: this is only to go faster than one character at a time
 (defconst caml-font-other-string-re
-  "[^\\\"\012\015]"
+  "[^|\\\"\012\015]"
 )
 
 ; match a newline
@@ -230,8 +235,9 @@
 ; depth is the depth of nested comments at this point
 ;   it must be a non-negative integer
 ; st can be:
-;   nil  -- we are in the base state
-;   t    -- we are within a string
+;   nil      -- we are in the base state
+;   t        -- we are within a string
+;   a string -- we are within a quoted string and st is the closing delimiter
 
 (defun caml-font-annotate (st depth)
   (let ((continue t))
@@ -254,6 +260,11 @@
                              'syntax-table (string-to-syntax "|"))
           (goto-char (match-end 0))
           (setq st t))
+         ((caml-font-looking-at caml-font-quoted-string-start-re)
+          (put-text-property (point) (1+ (point))
+                             'syntax-table (string-to-syntax "|"))
+          (goto-char (match-end 0))
+          (setq st (concat "|" (match-string 1) "}")))
          ((caml-font-looking-at "(\\*")
           (put-text-property (point) (1+ (point))
                              'syntax-table (string-to-syntax "!"))
@@ -297,7 +308,7 @@
           (remove-text-properties (point) (1+ (point))
                                   '(syntax-table nil caml-font-state nil))
           (goto-char (1+ (point))))))
-       (t                     ; string state inside or outside a comment
+       ((equal st t)                ; string state inside or outside a comment
         (cond
          ((caml-font-looking-at "\"")
           (when (= depth 0)
@@ -315,7 +326,24 @@
          (t
           (remove-text-properties (point) (1+ (point))
                                   '(syntax-table nil caml-font-state nil))
-          (goto-char (1+ (point)))))))))
+          (goto-char (1+ (point))))))
+       ((stringp st)        ; quoted-string state inside or outside comment
+        (cond
+         ((caml-font-looking-at st)
+          (when (= depth 0)
+            (put-text-property (1- (match-end 0)) (match-end 0)
+                               'syntax-table (string-to-syntax "|")))
+          (goto-char (match-end 0))
+          (setq st nil))
+         ((caml-font-looking-at caml-font-other-string-re)
+          (goto-char (match-end 0)))
+         (t
+          (remove-text-properties (point) (1+ (point))
+                                  '(syntax-table nil caml-font-state nil))
+          (goto-char (1+ (point))))))
+       (t                ; should not happen
+          (remove-text-properties (point) (1+ (point))
+                                  '(syntax-table nil caml-font-state nil))))))
 )
 
 ; This is the hook function for font-lock-extend-after-change-function



reply via email to

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