     "MEMO:" "MEMO:" "METHOD:" "MIXIN:"
     "NAN:"
     "POSTPONE:" "PRIMITIVE:" "PRIVATE>" "PROTOCOL:" "PROVIDE:"
-    "read-only" "RENAME:" "REQUIRE:"  "REQUIRES:"
+    "read-only" "REQUIRE:"  "REQUIRES:"
     "SINGLETON:" "SINGLETONS:" "SLOT:" "SPECIALIZED-ARRAY:"
     "SPECIALIZED-ARRAYS:" "STRING:" "SYNTAX:"
     "TYPED:" "TYPED::"

;; [parsing-word] [vocab-word]
(defconst factor-vocab-ref-regex
  (factor-second-word-regex
   '("IN:" "USE:" "EXCLUDE:" "QUALIFIED:" "QUALIFIED-WITH:")))

(defconst factor-using-lines-regex "^\\(USING:\\)[ \n]+\\([^;\t]*\\);")

;; [parsing-word] [symbol-word]
(defconst factor-symbol-definition-regex
  (factor-second-word-regex
   '("&:" "CONSTANT:" "DESTRUCTOR:" "FORGET:" "HELP:" "LIBRARY:"
     "MAIN:" "STRING:" "SYMBOL:" "VAR:")))

;; [parsing-word] [symbol-word]* ;
(defconst factor-symbols-lines-regex "^\\(SYMBOLS:\\)[ \n]+\\([^;\t]*\\);")

(defconst factor-int-constant-def-regex
  (factor-second-word-regex '("ALIEN:" "CHAR:" "NAN:")))

(defconst factor-type-definition-regex
  (factor-second-word-regex
   '("C-STRUCT:" "C-UNION:" "COM-INTERFACE:" "MIXIN:" "SINGLETON:"
     "SPECIALIZED-ARRAY:" "STRUCT:" "UNION-STRUCT:")))

(defconst factor-error-regex
  (factor-second-word-regex '("ERROR:")))

(defconst factor-constructor-regex
  "<[^ >]+>")

(defconst factor-getter-regex
  "\\_<\\(?:\\sw\\|\\s_\\)+>>\\_>")

(defconst factor-setter-regex
  "\\_<>>\\(?:\\sw\\|\\s_\\)+\\_>")

(defconst factor-stack-effect-regex
  "\\( ( [^)]* )\\)\\|\\( (( [^)]* ))\\)")

    ;; definition that is terminated with ";" is searched for words
    ;; that are slot names which are highlighted with the face
    ;; factor-font-lock-symbol.

    (,(format
       "\\(%s:\\)[ \n]+%s\\(?:[ \n]+\\(<\\)[ \n]+%s\\)?"
       (regexp-opt '("BUILTIN"
                     "ENUM"
                     "PROTOCOL"
                     "STRUCT"
                     "TUPLE"
                     "UNION"
                     "UNION-STRUCT"))
       symbol
       symbol)
     (1 'factor-font-lock-parsing-word)
     (2 'factor-font-lock-type-name)
     (3 'factor-font-lock-parsing-word nil t)
     (4 'factor-font-lock-type-name nil t)
     ;; A slot is either a single symbol or a sequence along the
     ;; lines: { foo initial: "bar }
     ("\\(\\(?:\\sw\\|\\s_\\)+\\)\\|\\(?:{[ \n]+\\(\\(?:\\sw\\|\\s_\\)+\\)[^}]+\\)"
