blob: c6634871cc002423567719ae12851ae75ae91158 [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 Moolenaar89bcfda2016-08-30 23:26:57 +02008" quit when a syntax file was already loaded
9if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000010 finish
11endif
12
Bram Moolenaarc8734422012-06-01 22:38:45 +020013let s:keepcpo= &cpo
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010014set cpo&vim
15
Bram Moolenaar071d4272004-06-13 20:20:40 +000016" 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
Bram Moolenaarc8734422012-06-01 22:38:45 +020043syn keyword eiffelTopStruct note indexing feature creation inherit
Bram Moolenaar071d4272004-06-13 20:20:40 +000044syn 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")
Bram Moolenaarc8734422012-06-01 22:38:45 +020051 syn match eiffelAgent "\<agent\>"
52 syn match eiffelConvert "\<convert\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000053 syn match eiffelCreate "\<create\>"
54 syn match eiffelTopStruct contained "\<create\>"
Bram Moolenaarc8734422012-06-01 22:38:45 +020055 syn match eiffelTopStruct contained "\<convert\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000056 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
Bram Moolenaarc8734422012-06-01 22:38:45 +020061syn keyword eiffelDeclaration is do once deferred unique local attribute assign
62syn keyword eiffelDeclaration attached detachable Unique
Bram Moolenaar071d4272004-06-13 20:20:40 +000063syn keyword eiffelProperty expanded obsolete separate frozen
64syn keyword eiffelProperty prefix infix
65syn keyword eiffelInheritClause rename redefine undefine select export as
66syn keyword eiffelAll all
Bram Moolenaarc8734422012-06-01 22:38:45 +020067syn keyword eiffelKeyword external alias some
Bram Moolenaar071d4272004-06-13 20:20:40 +000068syn 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
Bram Moolenaarc8734422012-06-01 22:38:45 +020074syn keyword eiffelStatement across from until loop
Bram Moolenaar071d4272004-06-13 20:20:40 +000075syn 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
Bram Moolenaarc8734422012-06-01 22:38:45 +0200132if exists("eiffel_fold")
133" setlocal foldmethod=indent
134" syn sync fromstart
135endif
136
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137" Should suffice for even very long strings and expressions
138syn sync lines=40
139
140" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200141" Only when an item doesn't have highlighting yet
Bram Moolenaar071d4272004-06-13 20:20:40 +0000142
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200143hi def link eiffelKeyword Statement
144hi def link eiffelProperty Statement
145hi def link eiffelInheritClause Statement
146hi def link eiffelStatement Statement
147hi def link eiffelDeclaration Statement
148hi def link eiffelAssertion Statement
149hi def link eiffelDebug Statement
150hi def link eiffelException Statement
151hi def link eiffelGenericCreate Statement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200153hi def link eiffelAgent Statement
154hi def link eiffelConvert Statement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000155
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200156hi def link eiffelTopStruct PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000157
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200158hi def link eiffelAll Special
159hi def link eiffelAnchored Special
160hi def link eiffelBitType Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161
162
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200163hi def link eiffelBool Boolean
164hi def link eiffelString String
165hi def link eiffelCharacter Character
166hi def link eiffelClassName Type
167hi def link eiffelNumber Number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200169hi def link eiffelStringEscape Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000170
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200171hi def link eiffelOperator Special
172hi def link eiffelArray Special
173hi def link eiffelExport Special
174hi def link eiffelCreation Special
175hi def link eiffelBrackets Special
176hi def link eiffelGeneric Special
177hi def link eiffelGenericDecl Special
178hi def link eiffelConstraint Special
179hi def link eiffelCreate Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000180
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200181hi def link eiffelPredefined Constant
Bram Moolenaar071d4272004-06-13 20:20:40 +0000182
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200183hi def link eiffelComment Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000184
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200185hi def link eiffelError Error
186hi def link eiffelBadConstant Error
187hi def link eiffelStringError Error
188hi def link eiffelParenError Error
189hi def link eiffelBracketError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000190
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200191hi def link eiffelTodo Todo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000192
Bram Moolenaar071d4272004-06-13 20:20:40 +0000193
194let b:current_syntax = "eiffel"
195
Bram Moolenaarc8734422012-06-01 22:38:45 +0200196let &cpo = s:keepcpo
197unlet s:keepcpo
198
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199" vim: ts=8