3 " Maintainer: Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
4 " Last Change: Sep 11, 2009
6 " URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
9 " lex_uses_cpp : if this variable exists, then C++ is loaded rather than C
11 " For version 5.x: Clear all syntax items
12 " For version 6.x: Quit when a syntax file was already loaded
15 elseif exists("b:current_syntax")
19 " Read the C/C++ syntax to start with
21 if exists("lex_uses_cpp")
22 runtime! syntax/cpp.vim
26 unlet b:current_syntax
28 if exists("lex_uses_cpp")
29 so <sfile>:p:h/cpp.vim
39 "I'd prefer to use lex.* , but vim doesn't handle forward definitions yet
40 syn 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
41 syn 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
43 " Abbreviations Section
45 syn region lexAbbrvBlock fold start="^\(\h\+\s\|%{\)" end="^\ze%%$" skipnl nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment,lexStartState
47 syn region lexAbbrvBlock start="^\(\h\+\s\|%{\)" end="^\ze%%$" skipnl nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment,lexStartState
49 syn match lexAbbrv "^\I\i*\s"me=e-1 skipwhite contained nextgroup=lexAbbrvRegExp
50 syn match lexAbbrv "^%[sx]" contained
51 syn match lexAbbrvRegExp "\s\S.*$"lc=1 contained nextgroup=lexAbbrv,lexInclude
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
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
62 "%% : Patterns {Actions}
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
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
74 syn match lexPatTag "^<\I\i*\(,\I\i*\)*>" contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
75 syn match lexPatTagZone "^<\I\i*\(,\I\i*\)*>\s*\ze{" contained nextgroup=lexPatTagZoneStart
76 syn match lexPatTag +^<\I\i*\(,\I\i*\)*>*\(\\\\\)*\\"+ contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
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
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
84 syn match lexPatCodeLine ".*$" contained contains=ALLBUT,@lexListGroup
85 syn match lexMorePat "\s*|\s*$" skipnl contained nextgroup=lexPat,lexPatTag,lexPatComment
86 syn match lexPatSep "\s\+" contained nextgroup=lexMorePat,lexPatCode,lexPatCodeLine
87 syn match lexSlashQuote +\(\\\\\)*\\"+ contained
89 syn region lexPatCode matchgroup=Delimiter start="{" end="}" fold skipnl contained contains=ALLBUT,@lexListPatCodeGroup
91 syn region lexPatCode matchgroup=Delimiter start="{" end="}" skipnl contained contains=ALLBUT,@lexListPatCodeGroup
94 syn keyword lexCFunctions BEGIN input unput woutput yyleng yylook yytext
95 syn keyword lexCFunctions ECHO output winput wunput yyless yymore yywrap
97 " <c.vim> includes several ALLBUTs; these have to be treated so as to exclude lex* groups
98 syn cluster cParenGroup add=lex.*
99 syn cluster cDefineGroup add=lex.*
100 syn cluster cPreProcGroup add=lex.*
101 syn cluster cMultiGroup add=lex.*
105 syn sync minlines=300
106 syn sync match lexSyncPat grouphere lexPatBlock "^%[a-zA-Z]"
107 syn sync match lexSyncPat groupthere lexPatBlock "^<$"
108 syn sync match lexSyncPat groupthere lexPatBlock "^%%$"
110 " The default highlighting.
111 hi def link lexAbbrvComment lexPatComment
112 hi def link lexBrace lexPat
113 hi def link lexPatTagZone lexPatTag
114 hi def link lexSlashQuote lexPat
116 hi def link lexAbbrvRegExp Macro
117 hi def link lexAbbrv SpecialChar
118 hi def link lexCFunctions Function
119 hi def link lexMorePat SpecialChar
120 hi def link lexPatComment Comment
121 hi def link lexPat Function
122 hi def link lexPatString Function
123 hi def link lexPatTag Special
124 hi def link lexSep Delimiter
125 hi def link lexStartState Statement
127 let b:current_syntax = "lex"