Merge branch 'master' into new_ui

db4
Slava Pestov 2009-01-25 17:07:02 -06:00
commit 577fde6e91
6 changed files with 150 additions and 111 deletions

View File

@ -302,6 +302,8 @@ IN: regexp-tests
[ "1.2.3.4" ] [ "1.2.3.4" ]
[ "1ABC2DEF3GHI4JK" R/ [A-Z]+/ "." re-replace ] unit-test [ "1ABC2DEF3GHI4JK" R/ [A-Z]+/ "." re-replace ] unit-test
[ "-- title --" ] [ "== title ==" "=" <regexp> "-" re-replace ] unit-test
/* /*
! FIXME ! FIXME
[ f ] [ "ab" "a(?!b)" <regexp> first-match ] unit-test [ f ] [ "ab" "a(?!b)" <regexp> first-match ] unit-test

View File

@ -1,4 +1,4 @@
FUEL, Factor's Ultimate Emacs Library -*- org -*- FUEL, Factor's Ultimate Emacs Library
------------------------------------- -------------------------------------
FUEL provides a complete environment for your Factor coding pleasure FUEL provides a complete environment for your Factor coding pleasure
@ -29,47 +29,46 @@ beast.
* Basic usage * Basic usage
*** Running the listener *** Running the listener
If you're using the default factor binary and images locations inside If you're using the default factor binary and images locations inside
the Factor's source tree, that should be enough to start using FUEL. the Factor's source tree, that should be enough to start using FUEL.
Editing any file with the extension .factor will put you in Editing any file with the extension .factor will put you in
factor-mode; try C-hm for a summary of available commands. factor-mode; try C-hm for a summary of available commands.
To start the listener, try M-x run-factor. To start the listener, try M-x run-factor.
By default, FUEL will try to use the binary and image files in the By default, FUEL will try to use the binary and image files in the
factor installation directory. You can customize them with: factor installation directory. You can customize them with:
(setq fuel-listener-factor-binary <full path to factor>) (setq fuel-listener-factor-binary <full path to factor>)
(setq fuel-listener-factor-image <full path to factor image>) (setq fuel-listener-factor-image <full path to factor image>)
Many aspects of the environment can be customized: Many aspects of the environment can be customized:
M-x customize-group fuel will show you how many. M-x customize-group fuel will show you how many.
*** Faster listener startup *** Faster listener startup
On startup, run-factor loads the fuel vocabulary, which can take a On startup, run-factor loads the fuel vocabulary, which can take a
while. If you want to speedup the load process, type 'save' in the while. If you want to speedup the load process, type 'save' in the
listener prompt just after invoking run-factor. This will save a listener prompt just after invoking run-factor. This will save a
factor image (overwriting the current one) with all the needed factor image (overwriting the current one) with all the needed
vocabs. vocabs.
*** Connecting to a running Factor *** Connecting to a running Factor
'run-factor' starts a new factor listener process managed by Emacs. 'run-factor' starts a new factor listener process managed by Emacs.
If you prefer to start Factor externally, you can also connect If you prefer to start Factor externally, you can also connect
remotely from Emacs. Here's how to proceed: remotely from Emacs. Here's how to proceed:
- In the factor listener, run FUEL: - In the factor listener, run FUEL: "fuel" run
"fuel" run This will start a server listener in port 9000.
This will start a server listener in port 9000. - Switch to Emacs and issue the command 'M-x connect-to-factor'.
- Switch to Emacs and issue the command 'M-x connect-to-factor'.
That's it; you should be up and running. See the help for That's it; you should be up and running. See the help for
'connect-to-factor' for how to use a different port. 'connect-to-factor' for how to use a different port.
*** Vocabulary creation *** Vocabulary creation
FUEL offers a basic interface with Factor's scaffolding utilities. FUEL offers a basic interface to Factor's scaffolding utilities.
To create a new vocabulary directory and associated files: To create a new vocabulary directory and associated files:
M-x fuel-scaffold-vocab M-x fuel-scaffold-vocab
@ -81,91 +80,107 @@ beast.
* Quick key reference * Quick key reference
(Triple chords ending in a single letter <x> accept also C-<x> (e.g. Triple chords ending in a single letter <x> accept also C-<x> (e.g.
C-cC-eC-r is the same as C-cC-er)). C-cC-eC-r is the same as C-cC-er).
*** In factor source files: *** In factor source files:
- C-cz : switch to listener Commands in parenthesis can be invoked interactively with
- C-co : cycle between code, tests and docs factor files M-x <command>, not necessarily in a factor buffer.
- C-cs : switch to other factor buffer (M-x fuel-switch-to-buffer)
- C-cr : switch to listener and refresh all loaded vocabs
- C-x4s : switch to other factor buffer in other window
- C-x5s : switch to other factor buffer in other frame
- M-. : edit word at point in Emacs (see fuel-edit-word-method custom var) |-----------------+------------------------------------------------------------|
- M-, : go back to where M-. was last invoked | C-cz | switch to listener (run-factor) |
- M-TAB : complete word at point | C-co | cycle between code, tests and docs files |
- C-cC-eu : update USING: line | C-cr | switch to listener and refresh all loaded vocabs |
- C-cC-ev : edit vocabulary (M-x fuel-edit-vocabulary) | C-cs | switch to other factor buffer (fuel-switch-to-buffer) |
- C-cC-ew : edit word (M-x fuel-edit-word-at-point) | C-x4s | switch to other factor buffer in other window |
- C-cC-ed : edit word's doc (M-x fuel-edit-word-at-point) | C-x5s | switch to other factor buffer in other frame |
|-----------------+------------------------------------------------------------|
- C-cC-er : eval region | M-. | edit word at point in Emacs (fuel-edit-word) |
- C-M-r, C-cC-ee : eval region, extending it to definition boundaries | M-, | go back to where M-. was last invoked |
- C-M-x, C-cC-ex : eval definition around point | M-TAB | complete word at point |
- C-ck, C-cC-ek : run file | C-cC-eu | update USING: line (fuel-update-usings) |
| C-cC-ev | edit vocabulary (fuel-edit-vocabulary) |
- C-cC-da : toggle autodoc mode | C-cC-ew | edit word (fuel-edit-word-at-point) |
- C-cC-dd : help for word at point | C-cC-ed | edit word's doc (C-u M-x fuel-edit-word-doc-at-point) |
- C-cC-ds : short help word at point |-----------------+------------------------------------------------------------|
- C-cC-de : show stack effect of current sexp (with prefix, region) | C-cC-er | eval region |
- C-cC-dp : find words containing given substring (M-x fuel-apropos) | C-M-r, C-cC-ee | eval region, extending it to definition boundaries |
- C-cC-dv : show words in current file (with prefix, ask for vocab) | C-M-x, C-cC-ex | eval definition around point |
| C-ck, C-cC-ek | run file (fuel-run-file) |
- C-cM-<, C-cC-d< : show callers of word or vocabulary at point |-----------------+------------------------------------------------------------|
(M-x fuel-show-callers, M-x fuel-vocab-usage) | C-cC-da | toggle autodoc mode (fuel-autodoc-mode) |
- C-cM->, C-cC-d> : show callees of word or vocabulary at point | C-cC-dd | help for word at point (fuel-help) |
(M-x fuel-show-callees, M-x fuel-vocab-uses) | C-cC-ds | short help word at point (fuel-help-short) |
| C-cC-de | show stack effect of current sexp (with prefix, region) |
- C-cC-xs : extract innermost sexp (up to point) as a separate word | C-cC-dp | find words containing given substring (fuel-apropos) |
- C-cC-xr : extract region as a separate word | C-cC-dv | show words in current file (with prefix, ask for vocab) |
- C-cC-xi : replace word at point by its definition |-----------------+------------------------------------------------------------|
- C-cC-xv : extract region as a separate vocabulary | C-cM-<, C-cC-d< | show callers of word or vocabulary at point |
- C-cC-xw : rename all uses of a word | | (fuel-show-callers, fuel-vocab-usage) |
| C-cM->, C-cC-d> | show callees of word or vocabulary at point |
| | (fuel-show-callees, fuel-vocab-uses) |
|-----------------+------------------------------------------------------------|
| C-cC-xs | extract innermost sexp (up to point) as a separate word |
| | (fuel-refactor-extract-sexp) |
| C-cC-xr | extract region as a separate word |
| | (fuel-refactor-extract-region) |
| C-cC-xv | extract region as a separate vocabulary |
| | (fuel-refactor-extract-vocab) |
| C-cC-xi | replace word by its definition (fuel-refactor-inline-word) |
| C-cC-xw | rename all uses of a word (fuel-refactor-rename-word) |
|-----------------+------------------------------------------------------------|
*** In the listener: *** In the listener:
- TAB : complete word at point |------+----------------------------------------------------------|
- M-. : edit word at point in Emacs | TAB | complete word at point |
- C-cr : refresh all loaded vocabs | M-. | edit word at point in Emacs |
- C-ca : toggle autodoc mode | C-cr | refresh all loaded vocabs |
- C-cp : find words containing given substring (M-x fuel-apropos) | C-ca | toggle autodoc mode |
- C-cs : toggle stack mode | C-cp | find words containing given substring (M-x fuel-apropos) |
- C-cv : edit vocabulary | C-cs | toggle stack mode |
- C-ch : help for word at point | C-cv | edit vocabulary |
- C-ck : run file | C-ch | help for word at point |
| C-ck | run file |
|------+----------------------------------------------------------|
*** In the debugger (it pops up upon eval/compilation errors): *** In the debugger (it pops up upon eval/compilation errors):
- g : go to error |---------+-------------------------------------|
- <digit> : invoke nth restart | g | go to error |
- w/e/l : invoke :warnings, :errors, :linkage | <digit> | invoke nth restart |
- q : bury buffer | w/e/l | invoke :warnings, :errors, :linkage |
| q | bury buffer |
|---------+-------------------------------------|
*** In the help browser: *** In the help browser:
- h : help for word at point |-----------+----------------------------------------------------------|
- v : help for a vocabulary | h | help for word at point |
- a : find words containing given substring (M-x fuel-apropos) | v | help for a vocabulary |
- e : edit current article | a | find words containing given substring (M-x fuel-apropos) |
- ba : bookmark current page | e | edit current article |
- bb : display bookmarks | ba | bookmark current page |
- bd : delete bookmark at point | bb | display bookmarks |
- n/p : next/previous page | bd | delete bookmark at point |
- l : previous page | n/p | next/previous page |
- SPC/S-SPC : scroll up/down | l | previous page |
- TAB/S-TAB : next/previous link | SPC/S-SPC | scroll up/down |
- k : kill current page and go to previous or next | TAB/S-TAB | next/previous link |
- r : refresh page | k | kill current page and go to previous or next |
- c : clean browsing history | r | refresh page |
- M-. : edit word at point in Emacs | c | clean browsing history |
- C-cz : switch to listener | M-. | edit word at point in Emacs |
- q : bury buffer | C-cz | switch to listener |
| q | bury buffer |
|-----------+----------------------------------------------------------|
*** In crossref buffers *** In crossref buffers
- TAB/BACKTAB : navigate links |-----------------+-----------------------------|
- RET/mouse click : follow link | TAB/BACKTAB | navigate links |
- h : show help for word at point | RET/mouse click | follow link |
- q : bury buffer | h | show help for word at point |
| q | bury buffer |
|-----------------+-----------------------------|

View File

@ -32,6 +32,7 @@
(case (car sexp) (case (car sexp)
(:array (factor--seq 'V{ '} (cdr sexp))) (:array (factor--seq 'V{ '} (cdr sexp)))
(:seq (factor--seq '{ '} (cdr sexp))) (:seq (factor--seq '{ '} (cdr sexp)))
(:tuple (factor--seq 'T{ '} (cdr sexp)))
(:quote (format "\\ %s" (factor `(:factor ,(cadr sexp))))) (:quote (format "\\ %s" (factor `(:factor ,(cadr sexp)))))
(:quotation (factor--seq '\[ '\] (cdr sexp))) (:quotation (factor--seq '\[ '\] (cdr sexp)))
(:using (factor `(USING: ,@(cdr sexp) :end))) (:using (factor `(USING: ,@(cdr sexp) :end)))

View File

@ -79,11 +79,15 @@
(save-excursion (save-excursion
(goto-char (nth 8 state)) (goto-char (nth 8 state))
(beginning-of-line) (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\\): ") ((looking-at "\\(TUPLE\\|SYMBOLS\\|VARS\\): ")
'factor-font-lock-symbol) 'factor-font-lock-symbol)
((looking-at "C-ENUM:\\( \\|\n\\)")
'factor-font-lock-constant)
(t 'default)))) (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-stack-effect)
((char-equal c ?\") 'factor-font-lock-string) ((char-equal c ?\") 'factor-font-lock-string)
(t 'factor-font-lock-comment))))) (t 'factor-font-lock-comment)))))
@ -91,6 +95,8 @@
(defconst fuel-font-lock--font-lock-keywords (defconst fuel-font-lock--font-lock-keywords
`((,fuel-syntax--stack-effect-regex . 'factor-font-lock-stack-effect) `((,fuel-syntax--stack-effect-regex . 'factor-font-lock-stack-effect)
(,fuel-syntax--brace-words-regex 1 'factor-font-lock-parsing-word) (,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--vocab-ref-regexp 2 'factor-font-lock-vocabulary-name)
(,fuel-syntax--constructor-decl-regex (1 'factor-font-lock-word) (,fuel-syntax--constructor-decl-regex (1 'factor-font-lock-word)
(2 'factor-font-lock-type-name) (2 'factor-font-lock-type-name)
@ -119,7 +125,7 @@
(,fuel-syntax--getter-regex . 'factor-font-lock-getter-word) (,fuel-syntax--getter-regex . 'factor-font-lock-getter-word)
(,fuel-syntax--symbol-definition-regex 2 'factor-font-lock-symbol) (,fuel-syntax--symbol-definition-regex 2 'factor-font-lock-symbol)
(,fuel-syntax--bad-string-regex . 'factor-font-lock-invalid-syntax) (,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))) (,fuel-syntax--parsing-words-regex . 'factor-font-lock-parsing-word)))
(defun fuel-font-lock--font-lock-setup (&optional keywords no-syntax) (defun fuel-font-lock--font-lock-setup (&optional keywords no-syntax)

View File

@ -156,7 +156,7 @@
(defvar fuel-markup--maybe-nl nil)) (defvar fuel-markup--maybe-nl nil))
(defun fuel-markup--print (e) (defun fuel-markup--print (e)
(cond ((null e)) (cond ((null e) (insert "f"))
((stringp e) (fuel-markup--insert-string e)) ((stringp e) (fuel-markup--insert-string e))
((and (listp e) (symbolp (car e)) ((and (listp e) (symbolp (car e))
(assoc (car e) fuel-markup--printers)) (assoc (car e) fuel-markup--printers))
@ -253,8 +253,12 @@
(insert (cadr e)))) (insert (cadr e))))
(defun fuel-markup--snippet (e) (defun fuel-markup--snippet (e)
(let ((snip (format "%s" (cadr e)))) (insert (mapconcat '(lambda (s)
(insert (fuel-font-lock--factor-str snip)))) (if (stringp s)
(fuel-font-lock--factor-str s)
(fuel-markup--print-str s)))
(cdr e)
" ")))
(defun fuel-markup--code (e) (defun fuel-markup--code (e)
(fuel-markup--insert-nl-if-nb) (fuel-markup--insert-nl-if-nb)
@ -285,7 +289,7 @@
(fuel-markup--snippet (cons '$snippet (cdr e)))) (fuel-markup--snippet (cons '$snippet (cdr e))))
(defun fuel-markup--link (e) (defun fuel-markup--link (e)
(let* ((link (nth 1 e)) (let* ((link (or (nth 1 e) 'f))
(type (or (nth 3 e) (if (symbolp link) 'word 'article))) (type (or (nth 3 e) (if (symbolp link) 'word 'article)))
(label (or (nth 2 e) (label (or (nth 2 e)
(and (eq type 'article) (and (eq type 'article)

View File

@ -43,16 +43,17 @@
;;; Regexps galore: ;;; Regexps galore:
(defconst fuel-syntax--parsing-words (defconst fuel-syntax--parsing-words
'(":" "::" ";" "<<" "<PRIVATE" ">>" '(":" "::" ";" "&:" "<<" "<PRIVATE" ">>"
"ABOUT:" "ALIAS:" "ARTICLE:" "ABOUT:" "ALIAS:" "ALIEN:" "ARTICLE:"
"B" "BIN:" "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:" "DEFER:"
"ERROR:" "EXCLUDE:" "ERROR:" "EXCLUDE:"
"f" "FORGET:" "FROM:" "f" "FORGET:" "FROM:" "FUNCTION:"
"GENERIC#" "GENERIC:" "GENERIC#" "GENERIC:"
"HELP:" "HEX:" "HOOK:" "HELP:" "HEX:" "HOOK:"
"IN:" "initial:" "INSTANCE:" "INTERSECTION:" "IN:" "initial:" "INSTANCE:" "INTERSECTION:"
"LIBRARY:"
"M:" "MACRO:" "MACRO::" "MAIN:" "MATH:" "MEMO:" "MEMO:" "METHOD:" "MIXIN:" "M:" "MACRO:" "MACRO::" "MAIN:" "MATH:" "MEMO:" "MEMO:" "METHOD:" "MIXIN:"
"OCT:" "OCT:"
"POSTPONE:" "PREDICATE:" "PRIMITIVE:" "PRIVATE>" "PROVIDE:" "POSTPONE:" "PREDICATE:" "PRIMITIVE:" "PRIVATE>" "PROVIDE:"
@ -117,10 +118,11 @@
'("IN:" "USE:" "FROM:" "EXCLUDE:" "QUALIFIED:" "QUALIFIED-WITH:"))) '("IN:" "USE:" "FROM:" "EXCLUDE:" "QUALIFIED:" "QUALIFIED-WITH:")))
(defconst fuel-syntax--int-constant-def-regex (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 (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 (defconst fuel-syntax--tuple-decl-regex
"^TUPLE: +\\([^ \n]+\\) +< +\\([^ \n]+\\)\\_>") "^TUPLE: +\\([^ \n]+\\) +< +\\([^ \n]+\\)\\_>")
@ -131,7 +133,7 @@
(defconst fuel-syntax--setter-regex "\\_<>>.+?\\_>") (defconst fuel-syntax--setter-regex "\\_<>>.+?\\_>")
(defconst fuel-syntax--symbol-definition-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--stack-effect-regex
"\\( ( .* )\\)\\|\\( (( .* ))\\)") "\\( ( .* )\\)\\|\\( (( .* ))\\)")
@ -144,8 +146,12 @@
(defconst fuel-syntax--sub-vocab-regex "^<\\([^ \n]+\\) *$") (defconst fuel-syntax--sub-vocab-regex "^<\\([^ \n]+\\) *$")
(defconst fuel-syntax--alien-function-regex
"\\_<FUNCTION: \\(\\w+\\) \\(\\w+\\)")
(defconst fuel-syntax--indent-def-starts '("" ":" (defconst fuel-syntax--indent-def-starts '("" ":"
"FROM" "C-ENUM" "C-STRUCT" "C-UNION"
"FROM" "FUNCTION:"
"INTERSECTION:" "INTERSECTION:"
"M" "MACRO" "MACRO:" "M" "MACRO" "MACRO:"
"MEMO" "MEMO:" "METHOD" "MEMO" "MEMO:" "METHOD"
@ -158,7 +164,7 @@
"VARS")) "VARS"))
(defconst fuel-syntax--indent-def-start-regex (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 (defconst fuel-syntax--no-indent-def-start-regex
(format "^\\(%s:\\) " (regexp-opt fuel-syntax--no-indent-def-starts))) (format "^\\(%s:\\) " (regexp-opt fuel-syntax--no-indent-def-starts)))
@ -181,6 +187,7 @@
"GENERIC:" "GENERIC#" "GENERIC:" "GENERIC#"
"HELP:" "HEX:" "HOOK:" "HELP:" "HEX:" "HOOK:"
"IN:" "INSTANCE:" "IN:" "INSTANCE:"
"LIBRARY:"
"MAIN:" "MATH:" "MIXIN:" "MAIN:" "MATH:" "MIXIN:"
"OCT:" "OCT:"
"POSTPONE:" "PRIVATE>" "<PRIVATE" "POSTPONE:" "PRIVATE>" "<PRIVATE"
@ -247,12 +254,16 @@
(" \\((\\)( \\([^\n]*\\) )\\()\\)\\( \\|\n\\)" (1 "<b") (2 "w") (3 ">b")) (" \\((\\)( \\([^\n]*\\) )\\()\\)\\( \\|\n\\)" (1 "<b") (2 "w") (3 ">b"))
(" \\((\\) \\([^\n]*\\) \\()\\)\\( \\|\n\\)" (1 "<b") (2 "w") (3 ">b")) (" \\((\\) \\([^\n]*\\) \\()\\)\\( \\|\n\\)" (1 "<b") (2 "w") (3 ">b"))
;; Strings ;; Strings
("\\( \\|^\\)\\(DLL\\|P\\|SBUF\\)\\(\"\\)[^\n\r\f]*\\(\"\\)\\( \\|\n\\)"
(3 "\"") (4 "\""))
("\\( \\|^\\)\\(\"\\)[^\n\r\f]*\\(\"\\)\\( \\|\n\\)" (2 "\"") (3 "\"")) ("\\( \\|^\\)\\(\"\\)[^\n\r\f]*\\(\"\\)\\( \\|\n\\)" (2 "\"") (3 "\""))
("\\_<<\\(\"\\)\\_>" (1 "<b")) ("\\_<<\\(\"\\)\\_>" (1 "<b"))
("\\_<\\(\"\\)>\\_>" (1 ">b")) ("\\_<\\(\"\\)>\\_>" (1 ">b"))
;; Multiline constructs ;; Multiline constructs
("\\_<\\(U\\)SING: \\(;\\)" (1 "<b") (2 ">b")) ("\\_<\\(U\\)SING: \\(;\\)" (1 "<b") (2 ">b"))
("\\_<USING:\\( \\)" (1 "<b")) ("\\_<USING:\\( \\)" (1 "<b"))
("\\_<\\(C\\)-ENUM: \\(;\\)" (1 "<b") (2 ">b"))
("\\_<C-ENUM:\\( \\|\n\\)" (1 "<b"))
("\\_<TUPLE: +\\w+? +< +\\w+? *\\( \\|\n\\)\\([^;]\\|$\\)" (1 "<b")) ("\\_<TUPLE: +\\w+? +< +\\w+? *\\( \\|\n\\)\\([^;]\\|$\\)" (1 "<b"))
("\\_<\\(TUPLE\\|SYMBOLS\\|VARS\\): +\\w+? *\\( \\|\n\\)\\([^;<\n]\\|\\_>\\)" ("\\_<\\(TUPLE\\|SYMBOLS\\|VARS\\): +\\w+? *\\( \\|\n\\)\\([^;<\n]\\|\\_>\\)"
(2 "<b")) (2 "<b"))