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