1" Eiffel syntax file 2" Language: Eiffel 3" Maintainer: Reimer Behrends <[email protected]> 4" With much input from Jocelyn Fiat <[email protected]> 5" See http://www.cse.msu.edu/~behrends/vim/ for the most current version. 6" Last Change: 2011 Dec 31 by Thilo Six 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 16let s:cpo_save = &cpo 17set cpo&vim 18 19" 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 46syn keyword eiffelTopStruct indexing feature creation inherit 47syn 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") 54 syn match eiffelCreate "\<create\>" 55 syn match eiffelTopStruct contained "\<create\>" 56 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 61syn keyword eiffelDeclaration is do once deferred unique local 62syn keyword eiffelDeclaration Unique 63syn keyword eiffelProperty expanded obsolete separate frozen 64syn keyword eiffelProperty prefix infix 65syn keyword eiffelInheritClause rename redefine undefine select export as 66syn keyword eiffelAll all 67syn keyword eiffelKeyword external alias 68syn 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 74syn keyword eiffelStatement from until loop 75syn 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 132" Should suffice for even very long strings and expressions 133syn sync lines=40 134 135" Define the default highlighting. 136" For version 5.7 and earlier: only when not done already 137" For version 5.8 and later: only when an item doesn't have highlighting yet 138if version >= 508 || !exists("did_eiffel_syntax_inits") 139 if version < 508 140 let did_eiffel_syntax_inits = 1 141 command -nargs=+ HiLink hi link <args> 142 else 143 command -nargs=+ HiLink hi def link <args> 144 endif 145 146 HiLink eiffelKeyword Statement 147 HiLink eiffelProperty Statement 148 HiLink eiffelInheritClause Statement 149 HiLink eiffelStatement Statement 150 HiLink eiffelDeclaration Statement 151 HiLink eiffelAssertion Statement 152 HiLink eiffelDebug Statement 153 HiLink eiffelException Statement 154 HiLink eiffelGenericCreate Statement 155 156 157 HiLink eiffelTopStruct PreProc 158 159 HiLink eiffelAll Special 160 HiLink eiffelAnchored Special 161 HiLink eiffelBitType Special 162 163 164 HiLink eiffelBool Boolean 165 HiLink eiffelString String 166 HiLink eiffelCharacter Character 167 HiLink eiffelClassName Type 168 HiLink eiffelNumber Number 169 170 HiLink eiffelStringEscape Special 171 172 HiLink eiffelOperator Special 173 HiLink eiffelArray Special 174 HiLink eiffelExport Special 175 HiLink eiffelCreation Special 176 HiLink eiffelBrackets Special 177 HiLink eiffelGeneric Special 178 HiLink eiffelGenericDecl Special 179 HiLink eiffelConstraint Special 180 HiLink eiffelCreate Special 181 182 HiLink eiffelPredefined Constant 183 184 HiLink eiffelComment Comment 185 186 HiLink eiffelError Error 187 HiLink eiffelBadConstant Error 188 HiLink eiffelStringError Error 189 HiLink eiffelParenError Error 190 HiLink eiffelBracketError Error 191 192 HiLink eiffelTodo Todo 193 194 delcommand HiLink 195endif 196 197let b:current_syntax = "eiffel" 198 199let &cpo = s:cpo_save 200unlet s:cpo_save 201" vim: ts=8 202