branch: externals/a68-mode
commit a28364db11b0d4b89ee5a869eea350dfb9cd1459
Author: Jose E. Marchesi <jose.march...@oracle.com>
Commit: Jose E. Marchesi <jose.march...@oracle.com>

    Recognize -dectag- inserts in lexers
---
 a68-mode.el | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)

diff --git a/a68-mode.el b/a68-mode.el
index b2d9bddd4c..d0cf4779d8 100644
--- a/a68-mode.el
+++ b/a68-mode.el
@@ -935,6 +935,22 @@ standard prelude described in the Revised Report.")
                           a68-std-modes-supper))))
       (goto-char (match-end 0))
       "-label-")
+     ;; We consider that any tag following a bold word or a standard
+     ;; moe is a defining identifier.  We are not handling many case
+     ;; that would require more extensive parsing, such as tags
+     ;; following commas.
+     ((looking-at "\\<[a-z]+\\>")
+      (let* ((end (match-end 0))
+             (tag (buffer-substring-no-properties (match-beginning 0) end))
+             (token (if (or (looking-back "[A-Z][A-Za-z_]+[ \t\n]+" (pos-bol))
+                            (and (looking-back "\\<\\([a-z][a-z_]*\\)\\>[ 
\t\n]+" (pos-bol))
+                                 (member (buffer-substring-no-properties 
(match-beginning 1)
+                                                                         
(match-end 1))
+                                         a68-std-modes-supper)))
+                        "-dectag-"
+                      tag)))
+        (goto-char end)
+        token))
      ;; defining-modal-indications "mode MODE" are preceded by either (
      ;; or , in formal-parameter packs.
      ((looking-at "\\<mode\\>")
@@ -1071,6 +1087,17 @@ standard prelude described in the Revised Report.")
                           a68-std-modes-supper))))
       (goto-char (match-beginning 0))
       "-label-")
+     ((looking-back "\\<[a-z]+\\>" (pos-bol))
+      (let ((tag (buffer-substring-no-properties (match-beginning 0)
+                                                 (match-end 0))))
+        (goto-char (match-beginning 0))
+        (if (or (looking-back "[A-Z][A-Za-z_]+[ \t\n]+" (pos-bol))
+                (and (looking-back "\\<\\([a-z][a-z_]*\\)\\>[ \t\n]+" 
(pos-bol))
+                     (member (buffer-substring-no-properties (match-beginning 
1)
+                                                             (match-end 1))
+                             a68-std-modes-supper)))
+            "-dectag-"
+          tag)))
      ((looking-back "\\<mode\\>" (- (point) 4))
       (goto-char (- (point) 4))
       (if (looking-back "[(,][ \t\n]*" nil)
@@ -1251,6 +1278,22 @@ UPPER stropping version."
      ((looking-at "\\<[a-z]+:")
       (goto-char (match-end 0))
       "-label-")
+     ;; We consider that any tag following a bold word or a standard
+     ;; moe is a defining identifier.  We are not handling many case
+     ;; that would require more extensive parsing, such as tags
+     ;; following commas.
+     ((looking-at "\\<[a-z]+\\>")
+      (let* ((end (match-end 0))
+             (tag (buffer-substring-no-properties (match-beginning 0) end))
+             (token (if (or (looking-back "[A-Z][A-Z_]+[ \t\n]+" (pos-bol))
+                            (and (looking-back "\\<\\([a-z][a-z_]*\\)\\>[ 
\t\n]+" (pos-bol))
+                                 (member (buffer-substring-no-properties 
(match-beginning 1)
+                                                                         
(match-end 1))
+                                         a68-std-modes-upper)))
+                        "-dectag-"
+                      tag)))
+        (goto-char end)
+        token))
      ;; defining-modal-indications "mode MODE" are preceded by either
      ;; ( or , in formal-parameter packs.
      ((looking-at "\\<MODE\\>")
@@ -1382,6 +1425,17 @@ UPPER stropping version."
      ((looking-back "\\<[a-z]+:" (pos-bol))
       (goto-char (match-beginning 0))
       "-label-")
+     ((looking-back "\\<[a-z]+\\>" (pos-bol))
+      (let ((tag (buffer-substring-no-properties (match-beginning 0)
+                                                 (match-end 0))))
+        (goto-char (match-beginning 0))
+        (if (or (looking-back "[A-Z][A-Z_]+[ \t\n]+" (pos-bol))
+                (and (looking-back "\\<\\([a-z][a-z_]*\\)\\>[ \t\n]+" 
(pos-bol))
+                     (member (buffer-substring-no-properties (match-beginning 
1)
+                                                             (match-end 1))
+                             a68-std-modes-upper)))
+            "-dectag-"
+          tag)))
      ((looking-back "\\<MODE\\>" (- (point) 4))
       (goto-char (- (point) 4))
       (if (looking-back "[(,][ \t\n]*" nil)

Reply via email to