"CONSULT:" "call-next-method"
"EBNF:" ";EBNF" "ENUM:" "ERROR:"
"FOREIGN-ATOMIC-TYPE:" "FOREIGN-ENUM-TYPE:" "FOREIGN-RECORD-TYPE:" "FUNCTION-ALIAS:"
- "GAME:" "GIR:"
+ "GIR:"
"GLSL-SHADER:" "GLSL-PROGRAM:"
"HINTS:"
"initial:" "INTERSECTION:" "IMPLEMENT-STRUCTS:"
"METHOD:"
"PRIVATE>" "PROTOCOL:" "PROVIDE:"
"read-only" "REQUIRE:" "REQUIRES:"
- "SINGLETONS:" "SLOT:"
+ "SLOT:"
"SPECIALIZED-ARRAYS:" "STRING:" "SYNTAX:"
"TYPED:" "TYPED::"
"UNIFORM-TUPLE:"
(defconst factor-bad-string-regex
"\\_<\"[^>]\\([^\"\n]\\|\\\\\"\\)*\n")
+(defconst factor-word-starters
+ '(":" "::" "GENERIC:" "GENERIC#" "DEFER:" "HOOK:"
+ "MACRO:" "MACRO::" "MATH:" "MEMO:" "MEMO::"
+ "POSTPONE:" "PRIMITIVE:" "SYNTAX:" "TYPED:" "TYPED::"))
+
(defconst factor-word-definition-regex
(concat
- (format "\\_<\\(\\(?:%s\\)?[:#]\\)"
- (regexp-opt
- '(":" "GENERIC" "DEFER" "HOOK" "MACRO" "MATH" "MEMO" "MEMO:"
- "POSTPONE" "PRIMITIVE" "SYNTAX" "TYPED" "TYPED:")))
+ (format "\\_<\\(%s\\)" (regexp-opt factor-word-starters))
ws+ symbol))
;; [parsing-word] [vocab-word]
;; [parsing-word] [symbol-word]
(defconst factor-symbol-definition-regex
(syntax-and-1-symbol
- '("&" "CONSTANT" "DESTRUCTOR" "FORGET" "HELP" "LIBRARY"
+ '("&" "CONSTANT" "DESTRUCTOR" "FORGET" "GAME" "HELP" "LIBRARY"
"MAIN" "MAIN-WINDOW" "STRING" "SYMBOL" "VAR")))
;; [parsing-word] [symbol-word]* ;
(defconst factor-symbols-lines-regex
(concat (syntax-begin '("SYMBOLS")) ws+ symbols-to-semicolon))
-;; (defconst factor-int-constant-def-regex
-;; (syntax-and-1-symbol '("ALIEN" "CHAR" "NAN")))
+(defconst factor-types-lines-regex
+ (concat (syntax-begin '("SINGLETONS")) ws+ symbols-to-semicolon))
(defconst factor-type-definition-regex
(syntax-and-1-symbol
symbol ws+
"\\(=>\\)" ws+ symbols-to-semicolon))
+(defconst factor-predicate-regex
+ (concat (syntax-begin '("PREDICATE")) ws+ symbol ws+ "\\(<\\)" ws+ symbol))
+
(defconst factor-group-name-to-face
#s(hash-table test equal data
("C" 'factor-font-lock-comment
,(factor-syntax factor-word-definition-regex '("P" "W"))
,(factor-syntax (syntax-and-2-symbols '("ALIAS")) '("P" "W" "W"))
,(factor-syntax (syntax-and-1-symbol '("ALIEN" "CHAR" "NAN")) '("P" "CT"))
+ ,(factor-syntax factor-types-lines-regex '("P" "T"))
(,factor-integer-regex . 'factor-font-lock-number)
(,factor-float-regex . 'factor-font-lock-number)
(,factor-ratio-regex . 'factor-font-lock-ratio)
nil
(1 'factor-font-lock-symbol nil t)
(2 'factor-font-lock-symbol nil t)))
- ;; Highlights predicates
- (,(format "\\(PREDICATE\\):[ \n]%s[ \n]<[ \n]%s" symbol symbol)
- (1 'factor-font-lock-parsing-word)
- (2 'factor-font-lock-type-name)
- (3 'factor-font-lock-type-name))
+ ,(factor-syntax factor-predicate-regex '("P" "T" "P" "T"))
;; Highlights alien function definitions. Types in stack effect
;; declarations are given a bold face.
(,(format "\\(\\(?:GL-\\)?FUNCTION\\|CALLBACK\\):[ \n]+%s[ \n]+%s[ \n]+" symbol symbol)