xref: /vim-8.2.3635/runtime/syntax/eiffel.vim (revision f37506f6)
1071d4279SBram Moolenaar" Eiffel syntax file
2071d4279SBram Moolenaar" Language:	Eiffel
3c873442bSBram Moolenaar" Maintainer: Jocelyn Fiat <[email protected]>
4c873442bSBram Moolenaar" Previous maintainer:	Reimer Behrends <[email protected]>
5c873442bSBram Moolenaar" Contributions from: Thilo Six
6c873442bSBram Moolenaar"
7c873442bSBram Moolenaar" URL: https://github.com/eiffelhub/vim-eiffel
889bcfda6SBram Moolenaar" quit when a syntax file was already loaded
989bcfda6SBram Moolenaarif exists("b:current_syntax")
10071d4279SBram Moolenaar  finish
11071d4279SBram Moolenaarendif
12071d4279SBram Moolenaar
13c873442bSBram Moolenaarlet s:keepcpo= &cpo
146ee8d89cSBram Moolenaarset cpo&vim
156ee8d89cSBram Moolenaar
16071d4279SBram Moolenaar" Option handling
17071d4279SBram Moolenaar
18071d4279SBram Moolenaarif exists("eiffel_ignore_case")
19071d4279SBram Moolenaar  syn case ignore
20071d4279SBram Moolenaarelse
21071d4279SBram Moolenaar  syn case match
22071d4279SBram Moolenaar  if exists("eiffel_pedantic") || exists("eiffel_strict")
23071d4279SBram Moolenaar    syn keyword eiffelError	current void result precursor none
24071d4279SBram Moolenaar    syn keyword eiffelError	CURRENT VOID RESULT PRECURSOR None
25071d4279SBram Moolenaar    syn keyword eiffelError	TRUE FALSE
26071d4279SBram Moolenaar  endif
27071d4279SBram Moolenaar  if exists("eiffel_pedantic")
28071d4279SBram Moolenaar    syn keyword eiffelError	true false
29071d4279SBram Moolenaar    syn match eiffelError	"\<[a-z_]\+[A-Z][a-zA_Z_]*\>"
30071d4279SBram Moolenaar    syn match eiffelError	"\<[A-Z][a-z_]*[A-Z][a-zA-Z_]*\>"
31071d4279SBram Moolenaar  endif
32071d4279SBram Moolenaar  if exists("eiffel_lower_case_predef")
33071d4279SBram Moolenaar    syn keyword eiffelPredefined current void result precursor
34071d4279SBram Moolenaar  endif
35071d4279SBram Moolenaarendif
36071d4279SBram Moolenaar
37071d4279SBram Moolenaarif exists("eiffel_hex_constants")
38071d4279SBram Moolenaar  syn match  eiffelNumber	"\d[0-9a-fA-F]*[xX]"
39071d4279SBram Moolenaarendif
40071d4279SBram Moolenaar
41071d4279SBram Moolenaar" Keyword definitions
42071d4279SBram Moolenaar
43c873442bSBram Moolenaarsyn keyword eiffelTopStruct	note indexing feature creation inherit
44071d4279SBram Moolenaarsyn match   eiffelTopStruct	"\<class\>"
45071d4279SBram Moolenaarsyn match   eiffelKeyword	"\<end\>"
46071d4279SBram Moolenaarsyn match   eiffelTopStruct	"^end\>\(\s*--\s\+class\s\+\<[A-Z][A-Z0-9_]*\>\)\=" contains=eiffelClassName
47071d4279SBram Moolenaarsyn match   eiffelBrackets	"[[\]]"
48071d4279SBram Moolenaarsyn match eiffelBracketError	"\]"
49071d4279SBram Moolenaarsyn region eiffelGeneric	transparent matchgroup=eiffelBrackets start="\[" end="\]" contains=ALLBUT,eiffelBracketError,eiffelGenericDecl,eiffelStringError,eiffelStringEscape,eiffelGenericCreate,eiffelTopStruct
50071d4279SBram Moolenaarif exists("eiffel_ise")
51c873442bSBram Moolenaar  syn match   eiffelAgent	"\<agent\>"
52c873442bSBram Moolenaar  syn match   eiffelConvert	"\<convert\>"
53071d4279SBram Moolenaar  syn match   eiffelCreate	"\<create\>"
54071d4279SBram Moolenaar  syn match   eiffelTopStruct	contained "\<create\>"
55c873442bSBram Moolenaar  syn match   eiffelTopStruct	contained "\<convert\>"
56071d4279SBram Moolenaar  syn match   eiffelGenericCreate  contained "\<create\>"
57071d4279SBram Moolenaar  syn match   eiffelTopStruct	"^create\>"
58071d4279SBram Moolenaar  syn region  eiffelGenericDecl	transparent matchgroup=eiffelBrackets contained start="\[" end="\]" contains=ALLBUT,eiffelCreate,eiffelTopStruct,eiffelGeneric,eiffelBracketError,eiffelStringEscape,eiffelStringError,eiffelBrackets
59071d4279SBram Moolenaar  syn region  eiffelClassHeader	start="^class\>" end="$" contains=ALLBUT,eiffelCreate,eiffelGenericCreate,eiffelGeneric,eiffelStringEscape,eiffelStringError,eiffelBrackets
60071d4279SBram Moolenaarendif
61c873442bSBram Moolenaarsyn keyword eiffelDeclaration	is do once deferred unique local attribute assign
62c873442bSBram Moolenaarsyn keyword eiffelDeclaration	attached detachable Unique
63071d4279SBram Moolenaarsyn keyword eiffelProperty	expanded obsolete separate frozen
64071d4279SBram Moolenaarsyn keyword eiffelProperty	prefix infix
65071d4279SBram Moolenaarsyn keyword eiffelInheritClause	rename redefine undefine select export as
66071d4279SBram Moolenaarsyn keyword eiffelAll		all
67c873442bSBram Moolenaarsyn keyword eiffelKeyword	external alias some
68071d4279SBram Moolenaarsyn keyword eiffelStatement	if else elseif inspect
69071d4279SBram Moolenaarsyn keyword eiffelStatement	when then
70071d4279SBram Moolenaarsyn match   eiffelAssertion	"\<require\(\s\+else\)\=\>"
71071d4279SBram Moolenaarsyn match   eiffelAssertion	"\<ensure\(\s\+then\)\=\>"
72071d4279SBram Moolenaarsyn keyword eiffelAssertion	check
73071d4279SBram Moolenaarsyn keyword eiffelDebug		debug
74c873442bSBram Moolenaarsyn keyword eiffelStatement	across from until loop
75071d4279SBram Moolenaarsyn keyword eiffelAssertion	variant
76071d4279SBram Moolenaarsyn match   eiffelAssertion	"\<invariant\>"
77071d4279SBram Moolenaarsyn match   eiffelTopStruct	"^invariant\>"
78071d4279SBram Moolenaarsyn keyword eiffelException	rescue retry
79071d4279SBram Moolenaar
80071d4279SBram Moolenaarsyn keyword eiffelPredefined	Current Void Result Precursor
81071d4279SBram Moolenaar
82071d4279SBram Moolenaar" Operators
83071d4279SBram Moolenaarsyn match   eiffelOperator	"\<and\(\s\+then\)\=\>"
84071d4279SBram Moolenaarsyn match   eiffelOperator	"\<or\(\s\+else\)\=\>"
85071d4279SBram Moolenaarsyn keyword eiffelOperator	xor implies not
86071d4279SBram Moolenaarsyn keyword eiffelOperator	strip old
87071d4279SBram Moolenaarsyn keyword eiffelOperator	Strip
88071d4279SBram Moolenaarsyn match   eiffelOperator	"\$"
89071d4279SBram Moolenaarsyn match   eiffelCreation	"!"
90071d4279SBram Moolenaarsyn match   eiffelExport	"[{}]"
91071d4279SBram Moolenaarsyn match   eiffelArray		"<<"
92071d4279SBram Moolenaarsyn match   eiffelArray		">>"
93071d4279SBram Moolenaarsyn match   eiffelConstraint	"->"
94071d4279SBram Moolenaarsyn match   eiffelOperator	"[@#|&][^ \e\t\b%]*"
95071d4279SBram Moolenaar
96071d4279SBram Moolenaar" Special classes
97071d4279SBram Moolenaarsyn keyword eiffelAnchored	like
98071d4279SBram Moolenaarsyn keyword eiffelBitType	BIT
99071d4279SBram Moolenaar
100071d4279SBram Moolenaar" Constants
101071d4279SBram Moolenaarif !exists("eiffel_pedantic")
102071d4279SBram Moolenaar  syn keyword eiffelBool	true false
103071d4279SBram Moolenaarendif
104071d4279SBram Moolenaarsyn keyword eiffelBool		True False
105071d4279SBram Moolenaarsyn region  eiffelString	start=+"+ skip=+%"+ end=+"+ contains=eiffelStringEscape,eiffelStringError
106071d4279SBram Moolenaarsyn match   eiffelStringEscape	contained "%[^/]"
107071d4279SBram Moolenaarsyn match   eiffelStringEscape	contained "%/\d\+/"
108071d4279SBram Moolenaarsyn match   eiffelStringEscape	contained "^[ \t]*%"
109071d4279SBram Moolenaarsyn match   eiffelStringEscape	contained "%[ \t]*$"
110071d4279SBram Moolenaarsyn match   eiffelStringError	contained "%/[^0-9]"
111071d4279SBram Moolenaarsyn match   eiffelStringError	contained "%/\d\+[^0-9/]"
112071d4279SBram Moolenaarsyn match   eiffelBadConstant	"'\(%[^/]\|%/\d\+/\|[^'%]\)\+'"
113071d4279SBram Moolenaarsyn match   eiffelBadConstant	"''"
114071d4279SBram Moolenaarsyn match   eiffelCharacter	"'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=eiffelStringEscape
115071d4279SBram Moolenaarsyn match   eiffelNumber	"-\=\<\d\+\(_\d\+\)*\>"
116071d4279SBram Moolenaarsyn match   eiffelNumber	"\<[01]\+[bB]\>"
117071d4279SBram Moolenaarsyn match   eiffelNumber	"-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\="
118071d4279SBram Moolenaarsyn match   eiffelNumber	"-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\="
119071d4279SBram Moolenaarsyn match   eiffelComment	"--.*" contains=eiffelTodo
120071d4279SBram Moolenaar
121071d4279SBram Moolenaarsyn case match
122071d4279SBram Moolenaar
123071d4279SBram Moolenaar" Case sensitive stuff
124071d4279SBram Moolenaar
125071d4279SBram Moolenaarsyn keyword eiffelTodo		contained TODO XXX FIXME
126071d4279SBram Moolenaarsyn match   eiffelClassName	"\<[A-Z][A-Z0-9_]*\>"
127071d4279SBram Moolenaar
128071d4279SBram Moolenaar" Catch mismatched parentheses
129071d4279SBram Moolenaarsyn match eiffelParenError	")"
130071d4279SBram Moolenaarsyn region eiffelParen		transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape
131071d4279SBram Moolenaar
132c873442bSBram Moolenaarif exists("eiffel_fold")
133c873442bSBram Moolenaar"    setlocal foldmethod=indent
134c873442bSBram Moolenaar"    syn sync fromstart
135c873442bSBram Moolenaarendif
136c873442bSBram Moolenaar
137071d4279SBram Moolenaar" Should suffice for even very long strings and expressions
138071d4279SBram Moolenaarsyn sync lines=40
139071d4279SBram Moolenaar
140071d4279SBram Moolenaar" Define the default highlighting.
14189bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
142071d4279SBram Moolenaar
143*f37506f6SBram Moolenaarhi def link eiffelKeyword		Statement
144*f37506f6SBram Moolenaarhi def link eiffelProperty		Statement
145*f37506f6SBram Moolenaarhi def link eiffelInheritClause	Statement
146*f37506f6SBram Moolenaarhi def link eiffelStatement	Statement
147*f37506f6SBram Moolenaarhi def link eiffelDeclaration	Statement
148*f37506f6SBram Moolenaarhi def link eiffelAssertion	Statement
149*f37506f6SBram Moolenaarhi def link eiffelDebug		Statement
150*f37506f6SBram Moolenaarhi def link eiffelException	Statement
151*f37506f6SBram Moolenaarhi def link eiffelGenericCreate	Statement
152071d4279SBram Moolenaar
153*f37506f6SBram Moolenaarhi def link eiffelAgent		Statement
154*f37506f6SBram Moolenaarhi def link eiffelConvert		Statement
155071d4279SBram Moolenaar
156*f37506f6SBram Moolenaarhi def link eiffelTopStruct	PreProc
157071d4279SBram Moolenaar
158*f37506f6SBram Moolenaarhi def link eiffelAll		Special
159*f37506f6SBram Moolenaarhi def link eiffelAnchored		Special
160*f37506f6SBram Moolenaarhi def link eiffelBitType		Special
161071d4279SBram Moolenaar
162071d4279SBram Moolenaar
163*f37506f6SBram Moolenaarhi def link eiffelBool		Boolean
164*f37506f6SBram Moolenaarhi def link eiffelString		String
165*f37506f6SBram Moolenaarhi def link eiffelCharacter	Character
166*f37506f6SBram Moolenaarhi def link eiffelClassName	Type
167*f37506f6SBram Moolenaarhi def link eiffelNumber		Number
168071d4279SBram Moolenaar
169*f37506f6SBram Moolenaarhi def link eiffelStringEscape	Special
170071d4279SBram Moolenaar
171*f37506f6SBram Moolenaarhi def link eiffelOperator		Special
172*f37506f6SBram Moolenaarhi def link eiffelArray		Special
173*f37506f6SBram Moolenaarhi def link eiffelExport		Special
174*f37506f6SBram Moolenaarhi def link eiffelCreation		Special
175*f37506f6SBram Moolenaarhi def link eiffelBrackets		Special
176*f37506f6SBram Moolenaarhi def link eiffelGeneric		Special
177*f37506f6SBram Moolenaarhi def link eiffelGenericDecl	Special
178*f37506f6SBram Moolenaarhi def link eiffelConstraint	Special
179*f37506f6SBram Moolenaarhi def link eiffelCreate		Special
180071d4279SBram Moolenaar
181*f37506f6SBram Moolenaarhi def link eiffelPredefined	Constant
182071d4279SBram Moolenaar
183*f37506f6SBram Moolenaarhi def link eiffelComment		Comment
184071d4279SBram Moolenaar
185*f37506f6SBram Moolenaarhi def link eiffelError		Error
186*f37506f6SBram Moolenaarhi def link eiffelBadConstant	Error
187*f37506f6SBram Moolenaarhi def link eiffelStringError	Error
188*f37506f6SBram Moolenaarhi def link eiffelParenError	Error
189*f37506f6SBram Moolenaarhi def link eiffelBracketError	Error
190071d4279SBram Moolenaar
191*f37506f6SBram Moolenaarhi def link eiffelTodo		Todo
192071d4279SBram Moolenaar
193071d4279SBram Moolenaar
194071d4279SBram Moolenaarlet b:current_syntax = "eiffel"
195071d4279SBram Moolenaar
196c873442bSBram Moolenaarlet &cpo = s:keepcpo
197c873442bSBram Moolenaarunlet s:keepcpo
198c873442bSBram Moolenaar
199071d4279SBram Moolenaar" vim: ts=8
200