1" Vim syntax file
2" Language:         JFlex
3" Maintainer:       Gerwin Klein <lsf@jflex.de>
4
5" Thanks to Michael Brailsford for help and suggestions
6
7" Quit when a syntax file was already loaded	{{{
8if exists("b:current_syntax")
9	finish
10endif
11"}}}
12
13" Include java syntax {{{
14if version >= 600
15	runtime! syntax/java.vim
16	unlet b:current_syntax
17else
18	so $VIMRUNTIME/syntax/java.vim
19endif
20"}}}
21
22syn cluster jflexOptions contains=jflexOption,jflexCodeInclude,jflexComment,jflexMacroIdent,jflexMacroRegExp,jflexOptionError
23syn cluster jflexRules contains=jflexRule,jflexComment,jflexActionCode,jflexRuleStates,jflexRegExp
24
25" java code section
26syn region jflexStart start="/\*\|//\|import\|package\|class"me=s end="^%%"me=e-2 contains=@javaTop nextgroup=jflexOptionReg
27
28" %%
29" options
30syn region jflexOptionReg matchgroup=jflexSectionSep start="^%%" end="^%%"me=e-2 contains=@jflexOptions nextgroup=jflexRulesReg
31
32syn match jflexOptionError "%\i*" contained
33
34syn match jflexOption "^\(%s\|%x\)" contained
35syn match jflexOption "^%state" contained
36syn match jflexOption "^%states" contained
37syn match jflexOption "^%xstate" contained
38syn match jflexOption "^%xstates" contained
39syn match jflexOption "^%char" contained
40syn match jflexOption "^%line" contained
41syn match jflexOption "^%column" contained
42syn match jflexOption "^%byaccj" contained
43syn match jflexOption "^%cup" contained
44syn match jflexOption "^%cupsym" contained
45syn match jflexOption "^%cupdebug" contained
46syn match jflexOption "^%eofclose" contained
47syn match jflexOption "^%class" contained
48syn match jflexOption "^%function" contained
49syn match jflexOption "^%type" contained
50syn match jflexOption "^%integer" contained
51syn match jflexOption "^%int" contained
52syn match jflexOption "^%intwrap" contained
53syn match jflexOption "^%yyeof" contained
54syn match jflexOption "^%notunix" contained
55syn match jflexOption "^%7bit" contained
56syn match jflexOption "^%8bit" contained
57syn match jflexOption "^%full" contained
58syn match jflexOption "^%16bit" contained
59syn match jflexOption "^%unicode" contained
60syn match jflexOption "^%caseless" contained
61syn match jflexOption "^%ignorecase" contained
62syn match jflexOption "^%implements" contained
63syn match jflexOption "^%extends" contained
64syn match jflexOption "^%public" contained
65syn match jflexOption "^%apiprivate" contained
66syn match jflexOption "^%final" contained
67syn match jflexOption "^%abstract" contained
68syn match jflexOption "^%debug" contained
69syn match jflexOption "^%standalone" contained
70syn match jflexOption "^%pack" contained
71syn match jflexOption "^%include" contained
72syn match jflexOption "^%buffer" contained
73syn match jflexOption "^%initthrow" contained
74syn match jflexOption "^%eofthrow" contained
75syn match jflexOption "^%yylexthrow" contained
76syn match jflexOption "^%throws" contained
77syn match jflexOption "^%scannerror" contained
78
79syn match jflexMacroIdent "\I\i*\s*="me=e-1 contained nextgroup=jflexMacroRegExp
80
81syn region jflexMacroRegExp matchgroup=jflexOperator start="=" end="^\(%\|\I\|\i\|/\)"me=e-1 contains=NONE contained
82
83syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%{" end="^%}" contains=@javaTop contained
84syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%init{" end="^%init}" contains=@javaTop contained
85syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%initthrow{" end="^%initthrow}" contains=@javaTop contained
86syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%eof{" end="^%eof}" contains=@javaTop contained
87syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%eofthrow{" end="^%eofthrow}" contains=@javaTop contained
88syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%yylexthrow{" end="^%yylexthrow}" contains=@javaTop contained
89syn region jflexCodeInclude matchgroup=jflexCodeIncludeMark start="^%eofval{" end="^%eofval}" contains=@javaTop contained
90
91" rules (end pattern shouldn't occur, if it does anyway we just stay in jflexRulesReg)
92syn region jflexRulesReg matchgroup=jflexSectionSep start="^%%" end="^%%"me=e-2 contains=@jflexRules
93
94" at first everything but strings is a regexp
95syn match jflexRegExp "\([^\" \t]\|\\\"\)\+" contained
96
97" take out comments
98syn match jflexComment "//.*" contained
99syn region jflexComment start="/\*" end="\*/" contained contains=jflexComment
100
101" lex states
102syn match jflexRuleStates "<\s*\I\i*\(\s*,\s*\I\i*\)*\s*>" contained skipnl skipwhite nextgroup=jflexStateGroup
103
104" action code (only after states braces and macro use)
105syn region jflexActionCode matchgroup=Delimiter start="{" end="}" contained contains=@javaTop,jflexJavaBraces
106
107" macro use
108syn match jflexRegExp "{\s*\I\i*\s*}" contained
109
110" state braces (only active after <state>)
111syn region jflexStateGroup matchgroup=jflexRuleStates start="{$" start="{\s" end="}" contained contains=@jflexRules
112
113" string
114syn region jflexRegExp matchgroup=String start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
115
116" not to be confused with a state
117syn match jflexRegExp "<<EOF>>" contained
118
119" escape sequence
120syn match jflexRegExp "\\." contained
121
122
123" keep braces in actions balanced
124syn region jflexJavaBraces start="{" end="}" contained contains=@javaTop,jflexJavaBraces
125
126
127" syncing
128syn sync clear
129syn sync minlines=10
130syn sync match jflexSync grouphere jflexOptionReg "^%[a-z]"
131syn sync match jflexSync grouphere jflexRulesReg "^<"
132
133
134" highlighting
135hi link jflexOption      Special
136hi link jflexMacroIdent  Ident
137hi link jflexMacroRegExp Macro
138hi link jflexOptionError Error
139hi link jflexComment     Comment
140hi link jflexOperator    Operator
141hi link jflexRuleStates  Special
142hi link jflexRegExp      Function
143hi jflexSectionSep guifg=yellow ctermfg=yellow guibg=blue ctermbg=blue gui=bold cterm=bold
144hi link jflexCodeIncludeMark jflexSectionSep
145
146let b:current_syntax="jflex"
147