blob: af6eee98a362543fd4570b0d30d956734a442ee8 [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.
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