blob: e5bc69ada71624630d9d1b527f9601b6cfff61e4 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Eiffel syntax file
2" Language: Eiffel
3" Maintainer: Reimer Behrends <behrends@cse.msu.edu>
4" With much input from Jocelyn Fiat <fiat@eiffel.com>
5" See http://www.cse.msu.edu/~behrends/vim/ for the most current version.
Bram Moolenaar6ee8d892012-01-10 14:55:01 +01006" Last Change: 2011 Dec 31 by Thilo Six
Bram Moolenaar071d4272004-06-13 20:20:40 +00007
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
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010016let s:cpo_save = &cpo
17set cpo&vim
18
Bram Moolenaar071d4272004-06-13 20:20:40 +000019" 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
Bram Moolenaar6ee8d892012-01-10 14:55:01 +0100199let &cpo = s:cpo_save
200unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000201" vim: ts=8