blob: 0ee5ea091fed08c8357b5612bed114f230cab3f1 [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
142command -nargs=+ HiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200144HiLink eiffelKeyword Statement
145HiLink eiffelProperty Statement
146HiLink eiffelInheritClause Statement
147HiLink eiffelStatement Statement
148HiLink eiffelDeclaration Statement
149HiLink eiffelAssertion Statement
150HiLink eiffelDebug Statement
151HiLink eiffelException Statement
152HiLink eiffelGenericCreate Statement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000153
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200154HiLink eiffelAgent Statement
155HiLink eiffelConvert Statement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000156
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200157HiLink eiffelTopStruct PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200159HiLink eiffelAll Special
160HiLink eiffelAnchored Special
161HiLink eiffelBitType Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162
163
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200164HiLink eiffelBool Boolean
165HiLink eiffelString String
166HiLink eiffelCharacter Character
167HiLink eiffelClassName Type
168HiLink eiffelNumber Number
Bram Moolenaar071d4272004-06-13 20:20:40 +0000169
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200170HiLink eiffelStringEscape Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200172HiLink eiffelOperator Special
173HiLink eiffelArray Special
174HiLink eiffelExport Special
175HiLink eiffelCreation Special
176HiLink eiffelBrackets Special
177HiLink eiffelGeneric Special
178HiLink eiffelGenericDecl Special
179HiLink eiffelConstraint Special
180HiLink eiffelCreate Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000181
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200182HiLink eiffelPredefined Constant
Bram Moolenaar071d4272004-06-13 20:20:40 +0000183
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200184HiLink eiffelComment Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200186HiLink eiffelError Error
187HiLink eiffelBadConstant Error
188HiLink eiffelStringError Error
189HiLink eiffelParenError Error
190HiLink eiffelBracketError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200192HiLink eiffelTodo Todo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000193
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200194delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195
196let b:current_syntax = "eiffel"
197
Bram Moolenaarc8734422012-06-01 22:38:45 +0200198let &cpo = s:keepcpo
199unlet s:keepcpo
200
Bram Moolenaar071d4272004-06-13 20:20:40 +0000201" vim: ts=8