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