blob: a91f85d03e766e34063f1853a9df0ca146eab02e [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Eiffel syntax file
2" Language: Eiffel
Bram Moolenaarc8734422012-06-01 22:38:45 +02003" Maintainer: Jocelyn Fiat <jfiat@eiffel.com>
4" Previous maintainer: Reimer Behrends <behrends@cse.msu.edu>
5" Contributions from: Thilo Six
6"
7" URL: https://github.com/eiffelhub/vim-eiffel
Bram Moolenaar071d4272004-06-13 20:20:40 +00008" 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 Moolenaarc8734422012-06-01 22:38:45 +020016let s:keepcpo= &cpo
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010017set 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
Bram Moolenaarc8734422012-06-01 22:38:45 +020046syn keyword eiffelTopStruct note indexing feature creation inherit
Bram Moolenaar071d4272004-06-13 20:20:40 +000047syn 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")
Bram Moolenaarc8734422012-06-01 22:38:45 +020054 syn match eiffelAgent "\<agent\>"
55 syn match eiffelConvert "\<convert\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000056 syn match eiffelCreate "\<create\>"
57 syn match eiffelTopStruct contained "\<create\>"
Bram Moolenaarc8734422012-06-01 22:38:45 +020058 syn match eiffelTopStruct contained "\<convert\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000059 syn match eiffelGenericCreate contained "\<create\>"
60 syn match eiffelTopStruct "^create\>"
61 syn region eiffelGenericDecl transparent matchgroup=eiffelBrackets contained start="\[" end="\]" contains=ALLBUT,eiffelCreate,eiffelTopStruct,eiffelGeneric,eiffelBracketError,eiffelStringEscape,eiffelStringError,eiffelBrackets
62 syn region eiffelClassHeader start="^class\>" end="$" contains=ALLBUT,eiffelCreate,eiffelGenericCreate,eiffelGeneric,eiffelStringEscape,eiffelStringError,eiffelBrackets
63endif
Bram Moolenaarc8734422012-06-01 22:38:45 +020064syn keyword eiffelDeclaration is do once deferred unique local attribute assign
65syn keyword eiffelDeclaration attached detachable Unique
Bram Moolenaar071d4272004-06-13 20:20:40 +000066syn keyword eiffelProperty expanded obsolete separate frozen
67syn keyword eiffelProperty prefix infix
68syn keyword eiffelInheritClause rename redefine undefine select export as
69syn keyword eiffelAll all
Bram Moolenaarc8734422012-06-01 22:38:45 +020070syn keyword eiffelKeyword external alias some
Bram Moolenaar071d4272004-06-13 20:20:40 +000071syn keyword eiffelStatement if else elseif inspect
72syn keyword eiffelStatement when then
73syn match eiffelAssertion "\<require\(\s\+else\)\=\>"
74syn match eiffelAssertion "\<ensure\(\s\+then\)\=\>"
75syn keyword eiffelAssertion check
76syn keyword eiffelDebug debug
Bram Moolenaarc8734422012-06-01 22:38:45 +020077syn keyword eiffelStatement across from until loop
Bram Moolenaar071d4272004-06-13 20:20:40 +000078syn keyword eiffelAssertion variant
79syn match eiffelAssertion "\<invariant\>"
80syn match eiffelTopStruct "^invariant\>"
81syn keyword eiffelException rescue retry
82
83syn keyword eiffelPredefined Current Void Result Precursor
84
85" Operators
86syn match eiffelOperator "\<and\(\s\+then\)\=\>"
87syn match eiffelOperator "\<or\(\s\+else\)\=\>"
88syn keyword eiffelOperator xor implies not
89syn keyword eiffelOperator strip old
90syn keyword eiffelOperator Strip
91syn match eiffelOperator "\$"
92syn match eiffelCreation "!"
93syn match eiffelExport "[{}]"
94syn match eiffelArray "<<"
95syn match eiffelArray ">>"
96syn match eiffelConstraint "->"
97syn match eiffelOperator "[@#|&][^ \e\t\b%]*"
98
99" Special classes
100syn keyword eiffelAnchored like
101syn keyword eiffelBitType BIT
102
103" Constants
104if !exists("eiffel_pedantic")
105 syn keyword eiffelBool true false
106endif
107syn keyword eiffelBool True False
108syn region eiffelString start=+"+ skip=+%"+ end=+"+ contains=eiffelStringEscape,eiffelStringError
109syn match eiffelStringEscape contained "%[^/]"
110syn match eiffelStringEscape contained "%/\d\+/"
111syn match eiffelStringEscape contained "^[ \t]*%"
112syn match eiffelStringEscape contained "%[ \t]*$"
113syn match eiffelStringError contained "%/[^0-9]"
114syn match eiffelStringError contained "%/\d\+[^0-9/]"
115syn match eiffelBadConstant "'\(%[^/]\|%/\d\+/\|[^'%]\)\+'"
116syn match eiffelBadConstant "''"
117syn match eiffelCharacter "'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=eiffelStringEscape
118syn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\>"
119syn match eiffelNumber "\<[01]\+[bB]\>"
120syn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\="
121syn match eiffelNumber "-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\="
122syn match eiffelComment "--.*" contains=eiffelTodo
123
124syn case match
125
126" Case sensitive stuff
127
128syn keyword eiffelTodo contained TODO XXX FIXME
129syn match eiffelClassName "\<[A-Z][A-Z0-9_]*\>"
130
131" Catch mismatched parentheses
132syn match eiffelParenError ")"
133syn region eiffelParen transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape
134
Bram Moolenaarc8734422012-06-01 22:38:45 +0200135if exists("eiffel_fold")
136" setlocal foldmethod=indent
137" syn sync fromstart
138endif
139
Bram Moolenaar071d4272004-06-13 20:20:40 +0000140" Should suffice for even very long strings and expressions
141syn sync lines=40
142
143" Define the default highlighting.
144" For version 5.7 and earlier: only when not done already
145" For version 5.8 and later: only when an item doesn't have highlighting yet
146if version >= 508 || !exists("did_eiffel_syntax_inits")
147 if version < 508
148 let did_eiffel_syntax_inits = 1
149 command -nargs=+ HiLink hi link <args>
150 else
151 command -nargs=+ HiLink hi def link <args>
152 endif
153
154 HiLink eiffelKeyword Statement
155 HiLink eiffelProperty Statement
156 HiLink eiffelInheritClause Statement
157 HiLink eiffelStatement Statement
158 HiLink eiffelDeclaration Statement
159 HiLink eiffelAssertion Statement
160 HiLink eiffelDebug Statement
161 HiLink eiffelException Statement
162 HiLink eiffelGenericCreate Statement
163
Bram Moolenaarc8734422012-06-01 22:38:45 +0200164 HiLink eiffelAgent Statement
165 HiLink eiffelConvert Statement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000166
167 HiLink eiffelTopStruct PreProc
168
169 HiLink eiffelAll Special
170 HiLink eiffelAnchored Special
171 HiLink eiffelBitType Special
172
173
174 HiLink eiffelBool Boolean
175 HiLink eiffelString String
176 HiLink eiffelCharacter Character
177 HiLink eiffelClassName Type
178 HiLink eiffelNumber Number
179
180 HiLink eiffelStringEscape Special
181
182 HiLink eiffelOperator Special
183 HiLink eiffelArray Special
184 HiLink eiffelExport Special
185 HiLink eiffelCreation Special
186 HiLink eiffelBrackets Special
187 HiLink eiffelGeneric Special
188 HiLink eiffelGenericDecl Special
189 HiLink eiffelConstraint Special
190 HiLink eiffelCreate Special
191
192 HiLink eiffelPredefined Constant
193
194 HiLink eiffelComment Comment
195
196 HiLink eiffelError Error
197 HiLink eiffelBadConstant Error
198 HiLink eiffelStringError Error
199 HiLink eiffelParenError Error
200 HiLink eiffelBracketError Error
201
202 HiLink eiffelTodo Todo
203
204 delcommand HiLink
205endif
206
207let b:current_syntax = "eiffel"
208
Bram Moolenaarc8734422012-06-01 22:38:45 +0200209let &cpo = s:keepcpo
210unlet s:keepcpo
211
Bram Moolenaar071d4272004-06-13 20:20:40 +0000212" vim: ts=8