Update runtime files
[MacVim.git] / runtime / syntax / lex.vim
blob68ae63273599e04c67af57584c0a368ffec6761e
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
8 " Option:
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
13 if version < 600
14   syntax clear
15 elseif exists("b:current_syntax")
16   finish
17 endif
19 " Read the C/C++ syntax to start with
20 if 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
27 else
28   if exists("lex_uses_cpp")
29     so <sfile>:p:h/cpp.vim
30   else
31     so <sfile>:p:h/c.vim
32   endif
33 endif
35 " --- ========= ---
36 " --- Lex stuff ---
37 " --- ========= ---
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
44 if has("folding")
45  syn region lexAbbrvBlock       fold start="^\(\h\+\s\|%{\)"    end="^\ze%%$"   skipnl  nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment,lexStartState
46 else
47  syn region lexAbbrvBlock       start="^\(\h\+\s\|%{\)" end="^\ze%%$"   skipnl  nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment,lexStartState
48 endif
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
52 if 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
56 else
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
60 endif
62 "%% : Patterns {Actions}
63 if 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
68 else
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
73 endif
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
77 if 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
80 else
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
83 endif
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
88 if has("folding")
89  syn region lexPatCode matchgroup=Delimiter start="{" end="}"   fold    skipnl contained contains=ALLBUT,@lexListPatCodeGroup
90 else
91  syn region lexPatCode matchgroup=Delimiter start="{" end="}"           skipnl contained contains=ALLBUT,@lexListPatCodeGroup
92 endif
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.*
103 " Synchronization
104 syn sync clear
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"
129 " vim:ts=10