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

    Factorize a68-font-lock-keywords-common
---
 a68-mode.el | 116 +++++++++++++++++++++++++++++++-----------------------------
 1 file changed, 59 insertions(+), 57 deletions(-)

diff --git a/a68-mode.el b/a68-mode.el
index f7b48f0382..0dfcc5361a 100644
--- a/a68-mode.el
+++ b/a68-mode.el
@@ -133,6 +133,65 @@
         'upper
       'supper)))
 
+;;;; Font-lock keywords.
+
+(defconst a68-font-lock-keywords-common
+  (list
+   ;; String breaks.  Apostrophe is not (currently) a worthy character
+   ;; out of strings, so for now we can just match it anywhere.
+   '("\\('[nrft']\\)\\|\\('(.*?)\\)" 0 ''a68-string-break-face prepend)
+   '("\\(''\\|[^']\\)\\('[^nrft'(]\\)" 2 ''font-lock-warning-face prepend)
+   ;; Two or more consecutive underscore characters are always
+   ;; illegal in this stropping regime.
+   (cons "_[_]+" ''font-lock-warning-face))
+  "Font-lock keywords expressions common to all stropping regimes. ")
+
+(defconst a68-font-lock-keywords-upper
+  (append
+   a68-font-lock-keywords-common
+   (list (cons (rx word-start
+                   (eval `(or ,@a68-keywords-upper))
+                   word-end)
+               ''font-lock-keyword-face)
+         (cons (rx word-start
+                   (eval `(or ,@a68-std-modes-upper))
+                   word-end)
+               ''font-lock-type-face)
+         (cons (rx word-start
+                   (or "TRUE" "FALSE")
+                   word-end)
+               ''font-lock-constant-face)
+         '("\\<\\([A-Z]+[A-Z_]*\\>\\)\\(_+\\)?"
+           (1 'font-lock-type-face)
+           (2 'font-lock-warning-face nil t))
+         (cons "\\('\\w*'\\)"
+               ''font-lock-variable-name-face)))
+   "Highlighting expressions for Algol 68 mode in UPPER stropping.")
+
+(defconst a68-font-lock-keywords-supper
+  (append
+   a68-font-lock-keywords-common
+   (list
+    (cons (rx word-start
+              (eval `(or ,@a68-keywords-supper))
+              word-end)
+          ''font-lock-keyword-face)
+    (cons (rx word-start
+              (eval `(or ,@a68-std-modes-supper))
+              word-end)
+          ''font-lock-type-face)
+    (cons (rx word-start
+              (or "true" "false")
+              word-end)
+          ''font-lock-constant-face)
+    ;; Tags.
+    (cons "\\<[a-z]\\([a-z]_\\)*\\>" ''font-lock-variable-name-face)
+    ;; By convention operators have only upper-letter names.
+    (cons "\\<\\([A-Z]+\\>\\)" ''font-lock-keyword-face)
+    ;; Mode names use ThisCase.
+    (cons "\\<\\([A-Z][A-Za-z_]*\\>\\)" ''font-lock-type-face)))
+   "Highlighting expressions for Algol 68 mode in SUPPER stropping.")
+
 ;;;; UPPER stropping
 
 (eval-and-compile
@@ -163,34 +222,6 @@
       "UNSAFE" "ASSERT")
     "List of Algol 68 keywords in UPPER stropping."))
 
-(defconst a68-font-lock-keywords-upper
-  (list
-   (cons (rx word-start
-             (eval `(or ,@a68-keywords-upper))
-             word-end)
-         ''font-lock-keyword-face)
-   (cons (rx word-start
-             (eval `(or ,@a68-std-modes-upper))
-             word-end)
-         ''font-lock-type-face)
-   (cons (rx word-start
-             (or "TRUE" "FALSE")
-             word-end)
-         ''font-lock-constant-face)
-   ;; String breaks.  Apostrophe is not (currently) a worthy character
-   ;; out of strings, so for now we can just match it anywhere.
-   '("[^']\\('[^nrft'(]\\)" 1 ''font-lock-warning-face)
-   '("\\(''\\|[^']\\)\\('[^nrft'(]\\)" 2 ''font-lock-warning-face prepend)
-   ;; Two or more consecutive underscore characters are always
-   ;; illegal in this stropping regime.
-   (cons "_[_]+" ''font-lock-warning-face)
-   '("\\<\\([A-Z]+[A-Z_]*\\>\\)\\(_+\\)?"
-     (1 'font-lock-type-face)
-      (2 'font-lock-warning-face nil t))
-   (cons "\\('\\w*'\\)"
-         ''font-lock-variable-name-face))
-  "Highlighting expressions for Algol 68 mode in UPPER stropping.")
-
 (defvar a68--smie-grammar-upper
   (smie-prec2->grammar
    (smie-bnf->prec2 '((id)
@@ -348,35 +379,6 @@
       "do" "od" "unsafe" "assert")
     "List of Algol 68 keywords in SUPPER stropping."))
 
-(defconst a68-font-lock-keywords-supper
-  (list
-   (cons (rx word-start
-             (eval `(or ,@a68-keywords-supper))
-             word-end)
-         ''font-lock-keyword-face)
-   (cons (rx word-start
-             (eval `(or ,@a68-std-modes-supper))
-             word-end)
-         ''font-lock-type-face)
-   (cons (rx word-start
-             (or "true" "false")
-             word-end)
-         ''font-lock-constant-face)
-   ;; String breaks.  Apostrophe is not (currently) a worthy character
-   ;; out of strings, so for now we can just match it anywhere.
-   '("\\('[nrft']\\)\\|\\('(.*?)\\)" 0 ''a68-string-break-face prepend)
-   '("\\(''\\|[^']\\)\\('[^nrft'(]\\)" 2 ''font-lock-warning-face prepend)
-   ;; Two or more consecutive underscore characters are always
-   ;; illegal in this stropping regime.
-   (cons "_[_]+" ''font-lock-warning-face)
-   ;; Tags.
-   (cons "\\<[a-z]\\([a-z]_\\)*\\>" ''font-lock-variable-name-face)
-   ;; By convention operators have only upper-letter names.
-   (cons "\\<\\([A-Z]+\\>\\)" ''font-lock-keyword-face)
-   ;; Mode names use ThisCase.
-   (cons "\\<\\([A-Z][A-Za-z_]*\\>\\)" ''font-lock-type-face))
-  "Highlighting expressions for Algol 68 mode in SUPPER stropping.")
-
 (defvar a68--smie-grammar-supper
   (smie-prec2->grammar
    (smie-bnf->prec2 '((id)

Reply via email to