xref: /vim-8.2.3635/runtime/syntax/eiffel.vim (revision 6ee8d89c)
1" Eiffel syntax file
2" Language:	Eiffel
3" Maintainer:	Reimer Behrends <[email protected]>
4"		With much input from Jocelyn Fiat <[email protected]>
5" See http://www.cse.msu.edu/~behrends/vim/ for the most current version.
6" Last Change:	2011 Dec 31 by Thilo Six
7
8" For version 5.x: Clear all syntax items
9" For version 6.x: Quit when a syntax file was already loaded
10if version < 600
11  syntax clear
12elseif exists("b:current_syntax")
13  finish
14endif
15
16let s:cpo_save = &cpo
17set cpo&vim
18
19" Option handling
20
21if exists("eiffel_ignore_case")
22  syn case ignore
23else
24  syn case match
25  if exists("eiffel_pedantic") || exists("eiffel_strict")
26    syn keyword eiffelError	current void result precursor none
27    syn keyword eiffelError	CURRENT VOID RESULT PRECURSOR None
28    syn keyword eiffelError	TRUE FALSE
29  endif
30  if exists("eiffel_pedantic")
31    syn keyword eiffelError	true false
32    syn match eiffelError	"\<[a-z_]\+[A-Z][a-zA_Z_]*\>"
33    syn match eiffelError	"\<[A-Z][a-z_]*[A-Z][a-zA-Z_]*\>"
34  endif
35  if exists("eiffel_lower_case_predef")
36    syn keyword eiffelPredefined current void result precursor
37  endif
38endif
39
40if exists("eiffel_hex_constants")
41  syn match  eiffelNumber	"\d[0-9a-fA-F]*[xX]"
42endif
43
44" Keyword definitions
45
46syn keyword eiffelTopStruct	indexing feature creation inherit
47syn match   eiffelTopStruct	"\<class\>"
48syn match   eiffelKeyword	"\<end\>"
49syn match   eiffelTopStruct	"^end\>\(\s*--\s\+class\s\+\<[A-Z][A-Z0-9_]*\>\)\=" contains=eiffelClassName
50syn match   eiffelBrackets	"[[\]]"
51syn match eiffelBracketError	"\]"
52syn region eiffelGeneric	transparent matchgroup=eiffelBrackets start="\[" end="\]" contains=ALLBUT,eiffelBracketError,eiffelGenericDecl,eiffelStringError,eiffelStringEscape,eiffelGenericCreate,eiffelTopStruct
53if exists("eiffel_ise")
54  syn match   eiffelCreate	"\<create\>"
55  syn match   eiffelTopStruct	contained "\<create\>"
56  syn match   eiffelGenericCreate  contained "\<create\>"
57  syn match   eiffelTopStruct	"^create\>"
58  syn region  eiffelGenericDecl	transparent matchgroup=eiffelBrackets contained start="\[" end="\]" contains=ALLBUT,eiffelCreate,eiffelTopStruct,eiffelGeneric,eiffelBracketError,eiffelStringEscape,eiffelStringError,eiffelBrackets
59  syn region  eiffelClassHeader	start="^class\>" end="$" contains=ALLBUT,eiffelCreate,eiffelGenericCreate,eiffelGeneric,eiffelStringEscape,eiffelStringError,eiffelBrackets
60endif
61syn keyword eiffelDeclaration	is do once deferred unique local
62syn keyword eiffelDeclaration	Unique
63syn keyword eiffelProperty	expanded obsolete separate frozen
64syn keyword eiffelProperty	prefix infix
65syn keyword eiffelInheritClause	rename redefine undefine select export as
66syn keyword eiffelAll		all
67syn keyword eiffelKeyword	external alias
68syn keyword eiffelStatement	if else elseif inspect
69syn keyword eiffelStatement	when then
70syn match   eiffelAssertion	"\<require\(\s\+else\)\=\>"
71syn match   eiffelAssertion	"\<ensure\(\s\+then\)\=\>"
72syn keyword eiffelAssertion	check
73syn keyword eiffelDebug		debug
74syn keyword eiffelStatement	from until loop
75syn keyword eiffelAssertion	variant
76syn match   eiffelAssertion	"\<invariant\>"
77syn match   eiffelTopStruct	"^invariant\>"
78syn keyword eiffelException	rescue retry
79
80syn keyword eiffelPredefined	Current Void Result Precursor
81
82" Operators
83syn match   eiffelOperator	"\<and\(\s\+then\)\=\>"
84syn match   eiffelOperator	"\<or\(\s\+else\)\=\>"
85syn keyword eiffelOperator	xor implies not
86syn keyword eiffelOperator	strip old
87syn keyword eiffelOperator	Strip
88syn match   eiffelOperator	"\$"
89syn match   eiffelCreation	"!"
90syn match   eiffelExport	"[{}]"
91syn match   eiffelArray		"<<"
92syn match   eiffelArray		">>"
93syn match   eiffelConstraint	"->"
94syn match   eiffelOperator	"[@#|&][^ \e\t\b%]*"
95
96" Special classes
97syn keyword eiffelAnchored	like
98syn keyword eiffelBitType	BIT
99
100" Constants
101if !exists("eiffel_pedantic")
102  syn keyword eiffelBool	true false
103endif
104syn keyword eiffelBool		True False
105syn region  eiffelString	start=+"+ skip=+%"+ end=+"+ contains=eiffelStringEscape,eiffelStringError
106syn match   eiffelStringEscape	contained "%[^/]"
107syn match   eiffelStringEscape	contained "%/\d\+/"
108syn match   eiffelStringEscape	contained "^[ \t]*%"
109syn match   eiffelStringEscape	contained "%[ \t]*$"
110syn match   eiffelStringError	contained "%/[^0-9]"
111syn match   eiffelStringError	contained "%/\d\+[^0-9/]"
112syn match   eiffelBadConstant	"'\(%[^/]\|%/\d\+/\|[^'%]\)\+'"
113syn match   eiffelBadConstant	"''"
114syn match   eiffelCharacter	"'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=eiffelStringEscape
115syn match   eiffelNumber	"-\=\<\d\+\(_\d\+\)*\>"
116syn match   eiffelNumber	"\<[01]\+[bB]\>"
117syn match   eiffelNumber	"-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\="
118syn match   eiffelNumber	"-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\="
119syn match   eiffelComment	"--.*" contains=eiffelTodo
120
121syn case match
122
123" Case sensitive stuff
124
125syn keyword eiffelTodo		contained TODO XXX FIXME
126syn match   eiffelClassName	"\<[A-Z][A-Z0-9_]*\>"
127
128" Catch mismatched parentheses
129syn match eiffelParenError	")"
130syn region eiffelParen		transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape
131
132" Should suffice for even very long strings and expressions
133syn sync lines=40
134
135" Define the default highlighting.
136" For version 5.7 and earlier: only when not done already
137" For version 5.8 and later: only when an item doesn't have highlighting yet
138if version >= 508 || !exists("did_eiffel_syntax_inits")
139  if version < 508
140    let did_eiffel_syntax_inits = 1
141    command -nargs=+ HiLink hi link <args>
142  else
143    command -nargs=+ HiLink hi def link <args>
144  endif
145
146  HiLink eiffelKeyword		Statement
147  HiLink eiffelProperty		Statement
148  HiLink eiffelInheritClause	Statement
149  HiLink eiffelStatement	Statement
150  HiLink eiffelDeclaration	Statement
151  HiLink eiffelAssertion	Statement
152  HiLink eiffelDebug		Statement
153  HiLink eiffelException	Statement
154  HiLink eiffelGenericCreate	Statement
155
156
157  HiLink eiffelTopStruct	PreProc
158
159  HiLink eiffelAll		Special
160  HiLink eiffelAnchored		Special
161  HiLink eiffelBitType		Special
162
163
164  HiLink eiffelBool		Boolean
165  HiLink eiffelString		String
166  HiLink eiffelCharacter	Character
167  HiLink eiffelClassName	Type
168  HiLink eiffelNumber		Number
169
170  HiLink eiffelStringEscape	Special
171
172  HiLink eiffelOperator		Special
173  HiLink eiffelArray		Special
174  HiLink eiffelExport		Special
175  HiLink eiffelCreation		Special
176  HiLink eiffelBrackets		Special
177  HiLink eiffelGeneric		Special
178  HiLink eiffelGenericDecl	Special
179  HiLink eiffelConstraint	Special
180  HiLink eiffelCreate		Special
181
182  HiLink eiffelPredefined	Constant
183
184  HiLink eiffelComment		Comment
185
186  HiLink eiffelError		Error
187  HiLink eiffelBadConstant	Error
188  HiLink eiffelStringError	Error
189  HiLink eiffelParenError	Error
190  HiLink eiffelBracketError	Error
191
192  HiLink eiffelTodo		Todo
193
194  delcommand HiLink
195endif
196
197let b:current_syntax = "eiffel"
198
199let &cpo = s:cpo_save
200unlet s:cpo_save
201" vim: ts=8
202