1" Eiffel syntax file 2" Language: Eiffel 3" Maintainer: Jocelyn Fiat <[email protected]> 4" Previous maintainer: Reimer Behrends <[email protected]> 5" Contributions from: Thilo Six 6" 7" URL: https://github.com/eiffelhub/vim-eiffel 8" quit when a syntax file was already loaded 9if exists("b:current_syntax") 10 finish 11endif 12 13let s:keepcpo= &cpo 14set cpo&vim 15 16" 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 43syn keyword eiffelTopStruct note indexing feature creation inherit 44syn 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") 51 syn match eiffelAgent "\<agent\>" 52 syn match eiffelConvert "\<convert\>" 53 syn match eiffelCreate "\<create\>" 54 syn match eiffelTopStruct contained "\<create\>" 55 syn match eiffelTopStruct contained "\<convert\>" 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 attribute assign 62syn keyword eiffelDeclaration attached detachable 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 some 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 across 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 132if exists("eiffel_fold") 133" setlocal foldmethod=indent 134" syn sync fromstart 135endif 136 137" Should suffice for even very long strings and expressions 138syn sync lines=40 139 140" Define the default highlighting. 141" Only when an item doesn't have highlighting yet 142 143hi 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 152 153hi def link eiffelAgent Statement 154hi def link eiffelConvert Statement 155 156hi def link eiffelTopStruct PreProc 157 158hi def link eiffelAll Special 159hi def link eiffelAnchored Special 160hi def link eiffelBitType Special 161 162 163hi def link eiffelBool Boolean 164hi def link eiffelString String 165hi def link eiffelCharacter Character 166hi def link eiffelClassName Type 167hi def link eiffelNumber Number 168 169hi def link eiffelStringEscape Special 170 171hi 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 180 181hi def link eiffelPredefined Constant 182 183hi def link eiffelComment Comment 184 185hi def link eiffelError Error 186hi def link eiffelBadConstant Error 187hi def link eiffelStringError Error 188hi def link eiffelParenError Error 189hi def link eiffelBracketError Error 190 191hi def link eiffelTodo Todo 192 193 194let b:current_syntax = "eiffel" 195 196let &cpo = s:keepcpo 197unlet s:keepcpo 198 199" vim: ts=8 200