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 142command -nargs=+ HiLink hi def link <args> 143 144HiLink 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 153 154HiLink eiffelAgent Statement 155HiLink eiffelConvert Statement 156 157HiLink eiffelTopStruct PreProc 158 159HiLink eiffelAll Special 160HiLink eiffelAnchored Special 161HiLink eiffelBitType Special 162 163 164HiLink eiffelBool Boolean 165HiLink eiffelString String 166HiLink eiffelCharacter Character 167HiLink eiffelClassName Type 168HiLink eiffelNumber Number 169 170HiLink eiffelStringEscape Special 171 172HiLink 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 181 182HiLink eiffelPredefined Constant 183 184HiLink eiffelComment Comment 185 186HiLink eiffelError Error 187HiLink eiffelBadConstant Error 188HiLink eiffelStringError Error 189HiLink eiffelParenError Error 190HiLink eiffelBracketError Error 191 192HiLink eiffelTodo Todo 193 194delcommand HiLink 195 196let b:current_syntax = "eiffel" 197 198let &cpo = s:keepcpo 199unlet s:keepcpo 200 201" vim: ts=8 202