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