1" Vim syntax file 2" Language: Lex 3" Maintainer: Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz> 4" Last Change: Sep 11, 2009 5" Version: 10 6" URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax 7" 8" Option: 9" lex_uses_cpp : if this variable exists, then C++ is loaded rather than C 10 11" For version 5.x: Clear all syntax items 12" For version 6.x: Quit when a syntax file was already loaded 13if version < 600 14 syntax clear 15elseif exists("b:current_syntax") 16 finish 17endif 18 19" Read the C/C++ syntax to start with 20if version >= 600 21 if exists("lex_uses_cpp") 22 runtime! syntax/cpp.vim 23 else 24 runtime! syntax/c.vim 25 endif 26 unlet b:current_syntax 27else 28 if exists("lex_uses_cpp") 29 so <sfile>:p:h/cpp.vim 30 else 31 so <sfile>:p:h/c.vim 32 endif 33endif 34 35" --- ========= --- 36" --- Lex stuff --- 37" --- ========= --- 38 39"I'd prefer to use lex.* , but vim doesn't handle forward definitions yet 40syn cluster lexListGroup contains=lexAbbrvBlock,lexAbbrv,lexAbbrv,lexAbbrvRegExp,lexInclude,lexPatBlock,lexPat,lexBrace,lexPatString,lexPatTag,lexPatTag,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,lexPatCode,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError 41syn cluster lexListPatCodeGroup contains=lexAbbrvBlock,lexAbbrv,lexAbbrv,lexAbbrvRegExp,lexInclude,lexPatBlock,lexPat,lexBrace,lexPatTag,lexPatTag,lexPatTagZoneStart,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError 42 43" Abbreviations Section 44if has("folding") 45 syn region lexAbbrvBlock fold start="^\(\h\+\s\|%{\)" end="^\ze%%$" skipnl nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment,lexStartState 46else 47 syn region lexAbbrvBlock start="^\(\h\+\s\|%{\)" end="^\ze%%$" skipnl nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment,lexStartState 48endif 49syn match lexAbbrv "^\I\i*\s"me=e-1 skipwhite contained nextgroup=lexAbbrvRegExp 50syn match lexAbbrv "^%[sx]" contained 51syn match lexAbbrvRegExp "\s\S.*$"lc=1 contained nextgroup=lexAbbrv,lexInclude 52if has("folding") 53 syn region lexInclude fold matchgroup=lexSep start="^%{" end="%}" contained contains=ALLBUT,@lexListGroup 54 syn region lexAbbrvComment fold start="^\s\+/\*" end="\*/" contains=@Spell 55 syn region lexStartState fold matchgroup=lexAbbrv start="^%\a\+" end="$" contained 56else 57 syn region lexInclude matchgroup=lexSep start="^%{" end="%}" contained contains=ALLBUT,@lexListGroup 58 syn region lexAbbrvComment start="^\s\+/\*" end="\*/" contains=@Spell 59 syn region lexStartState matchgroup=lexAbbrv start="^%\a\+" end="$" contained 60endif 61 62"%% : Patterns {Actions} 63if has("folding") 64 syn region lexPatBlock fold matchgroup=Todo start="^%%$" matchgroup=Todo end="^%%$" skipnl skipwhite contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat 65 syn region lexPat fold start=+\S+ skip="\\\\\|\\." end="\s"me=e-1 contained nextgroup=lexMorePat,lexPatSep contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace 66 syn region lexBrace fold start="\[" skip=+\\\\\|\\+ end="]" contained 67 syn region lexPatString fold matchgroup=String start=+"+ skip=+\\\\\|\\"+ matchgroup=String end=+"+ contained 68else 69 syn region lexPatBlock matchgroup=Todo start="^%%$" matchgroup=Todo end="^%%$" skipnl skipwhite contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat 70 syn region lexPat start=+\S+ skip="\\\\\|\\." end="\s"me=e-1 contained nextgroup=lexMorePat,lexPatSep contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace 71 syn region lexBrace start="\[" skip=+\\\\\|\\+ end="]" contained 72 syn region lexPatString matchgroup=String start=+"+ skip=+\\\\\|\\"+ matchgroup=String end=+"+ contained 73endif 74syn match lexPatTag "^<\I\i*\(,\I\i*\)*>" contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep 75syn match lexPatTagZone "^<\I\i*\(,\I\i*\)*>\s*\ze{" contained nextgroup=lexPatTagZoneStart 76syn match lexPatTag +^<\I\i*\(,\I\i*\)*>*\(\\\\\)*\\"+ contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep 77if has("folding") 78 syn region lexPatTagZoneStart matchgroup=lexPatTag fold start='{' end='}' contained contains=lexPat,lexPatComment 79 syn region lexPatComment start="\s\+/\*" end="\*/" fold skipnl contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell 80else 81 syn region lexPatTagZoneStart matchgroup=lexPatTag start='{' end='}' contained contains=lexPat,lexPatComment 82 syn region lexPatComment start="\s\+/\*" end="\*/" skipnl contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell 83endif 84syn match lexPatCodeLine ".*$" contained contains=ALLBUT,@lexListGroup 85syn match lexMorePat "\s*|\s*$" skipnl contained nextgroup=lexPat,lexPatTag,lexPatComment 86syn match lexPatSep "\s\+" contained nextgroup=lexMorePat,lexPatCode,lexPatCodeLine 87syn match lexSlashQuote +\(\\\\\)*\\"+ contained 88if has("folding") 89 syn region lexPatCode matchgroup=Delimiter start="{" end="}" fold skipnl contained contains=ALLBUT,@lexListPatCodeGroup 90else 91 syn region lexPatCode matchgroup=Delimiter start="{" end="}" skipnl contained contains=ALLBUT,@lexListPatCodeGroup 92endif 93 94syn keyword lexCFunctions BEGIN input unput woutput yyleng yylook yytext 95syn keyword lexCFunctions ECHO output winput wunput yyless yymore yywrap 96 97" <c.vim> includes several ALLBUTs; these have to be treated so as to exclude lex* groups 98syn cluster cParenGroup add=lex.* 99syn cluster cDefineGroup add=lex.* 100syn cluster cPreProcGroup add=lex.* 101syn cluster cMultiGroup add=lex.* 102 103" Synchronization 104syn sync clear 105syn sync minlines=300 106syn sync match lexSyncPat grouphere lexPatBlock "^%[a-zA-Z]" 107syn sync match lexSyncPat groupthere lexPatBlock "^<$" 108syn sync match lexSyncPat groupthere lexPatBlock "^%%$" 109 110" The default highlighting. 111hi def link lexAbbrvComment lexPatComment 112hi def link lexBrace lexPat 113hi def link lexPatTagZone lexPatTag 114hi def link lexSlashQuote lexPat 115 116hi def link lexAbbrvRegExp Macro 117hi def link lexAbbrv SpecialChar 118hi def link lexCFunctions Function 119hi def link lexMorePat SpecialChar 120hi def link lexPatComment Comment 121hi def link lexPat Function 122hi def link lexPatString Function 123hi def link lexPatTag Special 124hi def link lexSep Delimiter 125hi def link lexStartState Statement 126 127let b:current_syntax = "lex" 128 129" vim:ts=10 130