xref: /vim-8.2.3635/runtime/syntax/lex.vim (revision 071d4279)
1" Vim syntax file
2" Language:	Lex
3" Maintainer:	Dr. Charles E. Campbell, Jr. <[email protected]>
4" Last Change:	Sep 02, 2003
5" Version:	4
6" URL:	http://www.erols.com/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 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" --- Lex stuff ---
36
37"I'd prefer to use lex.* , but it doesn't handle forward definitions yet
38syn 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
39syn cluster lexListPatCodeGroup	contains=lexAbbrvBlock,lexAbbrv,lexAbbrv,lexAbbrvRegExp,lexInclude,lexPatBlock,lexPat,lexBrace,lexPatTag,lexPatTag,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError
40
41" Abbreviations Section
42syn region lexAbbrvBlock	start="^\([a-zA-Z_]\+\t\|%{\)" end="^%%$"me=e-2	skipnl	nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment
43syn match  lexAbbrv		"^\I\i*\s"me=e-1			skipwhite	contained nextgroup=lexAbbrvRegExp
44syn match  lexAbbrv		"^%[sx]"					contained
45syn match  lexAbbrvRegExp	"\s\S.*$"lc=1				contained nextgroup=lexAbbrv,lexInclude
46syn region lexInclude	matchgroup=lexSep	start="^%{" end="%}"	contained	contains=ALLBUT,@lexListGroup
47syn region lexAbbrvComment	start="^\s\+/\*"	end="\*/"			contains=@Spell
48
49"%% : Patterns {Actions}
50syn region lexPatBlock	matchgroup=Todo	start="^%%$" matchgroup=Todo end="^%%$"	skipnl skipwhite contains=lexPat,lexPatTag,lexPatComment
51syn region lexPat		start=+\S+ skip="\\\\\|\\."	end="\s"me=e-1	contained nextgroup=lexMorePat,lexPatSep contains=lexPatString,lexSlashQuote,lexBrace
52syn region lexBrace	start="\[" skip=+\\\\\|\\+		end="]"		contained
53syn region lexPatString	matchgroup=String start=+"+	skip=+\\\\\|\\"+	matchgroup=String end=+"+	contained
54syn match  lexPatTag	"^<\I\i*\(,\I\i*\)*>*"			contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
55syn match  lexPatTag	+^<\I\i*\(,\I\i*\)*>*\(\\\\\)*\\"+		contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
56syn region lexPatComment	start="^\s*/\*" end="\*/"		skipnl	contained contains=cTodo nextgroup=lexPatComment,lexPat,lexPatString,lexPatTag,@Spell
57syn match  lexPatCodeLine	".*$"					contained contains=ALLBUT,@lexListGroup
58syn match  lexMorePat	"\s*|\s*$"			skipnl	contained nextgroup=lexPat,lexPatTag,lexPatComment
59syn match  lexPatSep	"\s\+"					contained nextgroup=lexMorePat,lexPatCode,lexPatCodeLine
60syn match  lexSlashQuote	+\(\\\\\)*\\"+				contained
61syn region lexPatCode matchgroup=Delimiter start="{" matchgroup=Delimiter end="}"	skipnl contained contains=ALLBUT,@lexListPatCodeGroup
62
63syn keyword lexCFunctions	BEGIN	input	unput	woutput	yyleng	yylook	yytext
64syn keyword lexCFunctions	ECHO	output	winput	wunput	yyless	yymore	yywrap
65
66" <c.vim> includes several ALLBUTs; these have to be treated so as to exclude lex* groups
67syn cluster cParenGroup	add=lex.*
68syn cluster cDefineGroup	add=lex.*
69syn cluster cPreProcGroup	add=lex.*
70syn cluster cMultiGroup	add=lex.*
71
72" Synchronization
73syn sync clear
74syn sync minlines=300
75syn sync match lexSyncPat	grouphere  lexPatBlock	"^%[a-zA-Z]"
76syn sync match lexSyncPat	groupthere lexPatBlock	"^<$"
77syn sync match lexSyncPat	groupthere lexPatBlock	"^%%$"
78
79" The default highlighting.
80hi def link lexSlashQuote	lexPat
81hi def link lexBrace	lexPat
82hi def link lexAbbrvComment	lexPatComment
83
84hi def link lexAbbrv	SpecialChar
85hi def link lexAbbrvRegExp	Macro
86hi def link lexCFunctions	Function
87hi def link lexMorePat	SpecialChar
88hi def link lexPat		Function
89hi def link lexPatComment	Comment
90hi def link lexPatString	Function
91hi def link lexPatTag	Special
92hi def link lexSep		Delimiter
93
94let b:current_syntax = "lex"
95
96" vim:ts=10
97