]> gitweb.factorcode.org Git - factor.git/commitdiff
FUEL: Font lock and indent support for alien parsing words.
authorJose A. Ortega Ruiz <jao@gnu.org>
Sun, 25 Jan 2009 12:49:10 +0000 (13:49 +0100)
committerJose A. Ortega Ruiz <jao@gnu.org>
Sun, 25 Jan 2009 12:49:10 +0000 (13:49 +0100)
misc/fuel/fuel-font-lock.el
misc/fuel/fuel-syntax.el

index 4b3607b96deaca32ed2008d0dd4319b25a05e454..86ae94fe8af52894e01f8b36165cde1f321f93bc 100644 (file)
              (save-excursion
                (goto-char (nth 8 state))
                (beginning-of-line)
-               (cond ((looking-at "USING: ") 'factor-font-lock-vocabulary-name)
+               (cond ((looking-at "USING: ")
+                      'factor-font-lock-vocabulary-name)
                      ((looking-at "\\(TUPLE\\|SYMBOLS\\|VARS\\): ")
                       'factor-font-lock-symbol)
+                     ((looking-at "C-ENUM:\\( \\|\n\\)")
+                      'factor-font-lock-constant)
                      (t 'default))))
-            ((char-equal c ?U) 'factor-font-lock-parsing-word)
+            ((or (char-equal c ?U) (char-equal c ?C))
+             'factor-font-lock-parsing-word)
             ((char-equal c ?\() 'factor-font-lock-stack-effect)
             ((char-equal c ?\") 'factor-font-lock-string)
             (t 'factor-font-lock-comment)))))
@@ -91,6 +95,8 @@
 (defconst fuel-font-lock--font-lock-keywords
   `((,fuel-syntax--stack-effect-regex . 'factor-font-lock-stack-effect)
     (,fuel-syntax--brace-words-regex 1 'factor-font-lock-parsing-word)
+    (,fuel-syntax--alien-function-regex (1 'factor-font-lock-type-name)
+                                        (2 'factor-font-lock-word))
     (,fuel-syntax--vocab-ref-regexp  2 'factor-font-lock-vocabulary-name)
     (,fuel-syntax--constructor-decl-regex (1 'factor-font-lock-word)
                                           (2 'factor-font-lock-type-name)
     (,fuel-syntax--getter-regex . 'factor-font-lock-getter-word)
     (,fuel-syntax--symbol-definition-regex 2 'factor-font-lock-symbol)
     (,fuel-syntax--bad-string-regex . 'factor-font-lock-invalid-syntax)
-    ("\\(P\\|SBUF\\)\"" 1 'factor-font-lock-parsing-word)
+    ("\\_<\\(P\\|SBUF\\|DLL\\)\"" 1 'factor-font-lock-parsing-word)
     (,fuel-syntax--parsing-words-regex . 'factor-font-lock-parsing-word)))
 
 (defun fuel-font-lock--font-lock-setup (&optional keywords no-syntax)
index 6f33eb2993f5cb6575b82886f03981b9d570e3b7..a095e70256275fa4ec089a498d11ffa1c5756fc8 100644 (file)
 ;;; Regexps galore:
 
 (defconst fuel-syntax--parsing-words
-  '(":" "::" ";" "<<" "<PRIVATE" ">>"
-    "ABOUT:" "ALIAS:" "ARTICLE:"
+  '(":" "::" ";" "&:" "<<" "<PRIVATE" ">>"
+    "ABOUT:" "ALIAS:" "ALIEN:" "ARTICLE:"
     "B" "BIN:"
-    "C:" "C-STRUCT:" "C-UNION:" "CHAR:" "CONSTANT:" "call-next-method"
+    "C:" "C-ENUM:" "C-STRUCT:" "C-UNION:" "CHAR:" "CONSTANT:" "call-next-method"
     "DEFER:"
     "ERROR:" "EXCLUDE:"
-    "f" "FORGET:" "FROM:"
+    "f" "FORGET:" "FROM:" "FUNCTION:"
     "GENERIC#" "GENERIC:"
     "HELP:" "HEX:" "HOOK:"
     "IN:" "initial:" "INSTANCE:" "INTERSECTION:"
+    "LIBRARY:"
     "M:" "MACRO:" "MACRO::" "MAIN:" "MATH:" "MEMO:" "MEMO:" "METHOD:" "MIXIN:"
     "OCT:"
     "POSTPONE:" "PREDICATE:" "PRIMITIVE:" "PRIVATE>" "PROVIDE:"
    '("IN:" "USE:" "FROM:" "EXCLUDE:" "QUALIFIED:" "QUALIFIED-WITH:")))
 
 (defconst fuel-syntax--int-constant-def-regex
-  (fuel-syntax--second-word-regex '("CHAR:" "BIN:" "HEX:" "OCT:")))
+  (fuel-syntax--second-word-regex '("ALIEN:" "CHAR:" "BIN:" "HEX:" "OCT:")))
 
 (defconst fuel-syntax--type-definition-regex
-  (fuel-syntax--second-word-regex '("MIXIN:" "TUPLE:" "SINGLETON:" "UNION:")))
+  (fuel-syntax--second-word-regex
+   '("C-STRUCT:" "C-UNION:" "MIXIN:" "TUPLE:" "SINGLETON:" "UNION:")))
 
 (defconst fuel-syntax--tuple-decl-regex
   "^TUPLE: +\\([^ \n]+\\) +< +\\([^ \n]+\\)\\_>")
 (defconst fuel-syntax--setter-regex "\\_<>>.+?\\_>")
 
 (defconst fuel-syntax--symbol-definition-regex
-  (fuel-syntax--second-word-regex '("SYMBOL:" "VAR:")))
+  (fuel-syntax--second-word-regex '("&:" "SYMBOL:" "VAR:")))
 
 (defconst fuel-syntax--stack-effect-regex
   "\\( ( .* )\\)\\|\\( (( .* ))\\)")
 
 (defconst fuel-syntax--sub-vocab-regex "^<\\([^ \n]+\\) *$")
 
+(defconst fuel-syntax--alien-function-regex
+  "\\_<FUNCTION: \\(\\w+\\) \\(\\w+\\)")
+
 (defconst fuel-syntax--indent-def-starts '("" ":"
-                                           "FROM"
+                                           "C-ENUM" "C-STRUCT" "C-UNION"
+                                           "FROM" "FUNCTION:"
                                            "INTERSECTION:"
                                            "M" "MACRO" "MACRO:"
                                            "MEMO" "MEMO:" "METHOD"
                                               "VARS"))
 
 (defconst fuel-syntax--indent-def-start-regex
-  (format "^\\(%s:\\) " (regexp-opt fuel-syntax--indent-def-starts)))
+  (format "^\\(%s:\\)\\( \\|\n\\)" (regexp-opt fuel-syntax--indent-def-starts)))
 
 (defconst fuel-syntax--no-indent-def-start-regex
   (format "^\\(%s:\\) " (regexp-opt fuel-syntax--no-indent-def-starts)))
                 "GENERIC:" "GENERIC#"
                 "HELP:" "HEX:" "HOOK:"
                 "IN:" "INSTANCE:"
+                "LIBRARY:"
                 "MAIN:" "MATH:" "MIXIN:"
                 "OCT:"
                 "POSTPONE:" "PRIVATE>" "<PRIVATE"
     (" \\((\\)( \\([^\n]*\\) )\\()\\)\\( \\|\n\\)" (1 "<b") (2 "w") (3 ">b"))
     (" \\((\\) \\([^\n]*\\) \\()\\)\\( \\|\n\\)" (1 "<b") (2 "w") (3 ">b"))
     ;; Strings
+    ("\\( \\|^\\)\\(DLL\\|P\\|SBUF\\)\\(\"\\)[^\n\r\f]*\\(\"\\)\\( \\|\n\\)"
+     (3 "\"") (4 "\""))
     ("\\( \\|^\\)\\(\"\\)[^\n\r\f]*\\(\"\\)\\( \\|\n\\)" (2 "\"") (3 "\""))
     ("\\_<<\\(\"\\)\\_>" (1 "<b"))
     ("\\_<\\(\"\\)>\\_>" (1 ">b"))
     ;; Multiline constructs
     ("\\_<\\(U\\)SING: \\(;\\)" (1 "<b") (2 ">b"))
     ("\\_<USING:\\( \\)" (1 "<b"))
+    ("\\_<\\(C\\)-ENUM: \\(;\\)" (1 "<b") (2 ">b"))
+    ("\\_<C-ENUM:\\( \\|\n\\)" (1 "<b"))
     ("\\_<TUPLE: +\\w+? +< +\\w+? *\\( \\|\n\\)\\([^;]\\|$\\)" (1 "<b"))
     ("\\_<\\(TUPLE\\|SYMBOLS\\|VARS\\): +\\w+? *\\( \\|\n\\)\\([^;<\n]\\|\\_>\\)"
      (2 "<b"))