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" 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:keepcpo= &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 note 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 eiffelAgent "\<agent\>" 55 syn match eiffelConvert "\<convert\>" 56 syn match eiffelCreate "\<create\>" 57 syn match eiffelTopStruct contained "\<create\>" 58 syn match eiffelTopStruct contained "\<convert\>" 59 syn match eiffelGenericCreate contained "\<create\>" 60 syn match eiffelTopStruct "^create\>" 61 syn region eiffelGenericDecl transparent matchgroup=eiffelBrackets contained start="\[" end="\]" contains=ALLBUT,eiffelCreate,eiffelTopStruct,eiffelGeneric,eiffelBracketError,eiffelStringEscape,eiffelStringError,eiffelBrackets 62 syn region eiffelClassHeader start="^class\>" end="$" contains=ALLBUT,eiffelCreate,eiffelGenericCreate,eiffelGeneric,eiffelStringEscape,eiffelStringError,eiffelBrackets 63endif 64syn keyword eiffelDeclaration is do once deferred unique local attribute assign 65syn keyword eiffelDeclaration attached detachable Unique 66syn keyword eiffelProperty expanded obsolete separate frozen 67syn keyword eiffelProperty prefix infix 68syn keyword eiffelInheritClause rename redefine undefine select export as 69syn keyword eiffelAll all 70syn keyword eiffelKeyword external alias some 71syn keyword eiffelStatement if else elseif inspect 72syn keyword eiffelStatement when then 73syn match eiffelAssertion "\<require\(\s\+else\)\=\>" 74syn match eiffelAssertion "\<ensure\(\s\+then\)\=\>" 75syn keyword eiffelAssertion check 76syn keyword eiffelDebug debug 77syn keyword eiffelStatement across from until loop 78syn keyword eiffelAssertion variant 79syn match eiffelAssertion "\<invariant\>" 80syn match eiffelTopStruct "^invariant\>" 81syn keyword eiffelException rescue retry 82 83syn keyword eiffelPredefined Current Void Result Precursor 84 85" Operators 86syn match eiffelOperator "\<and\(\s\+then\)\=\>" 87syn match eiffelOperator "\<or\(\s\+else\)\=\>" 88syn keyword eiffelOperator xor implies not 89syn keyword eiffelOperator strip old 90syn keyword eiffelOperator Strip 91syn match eiffelOperator "\$" 92syn match eiffelCreation "!" 93syn match eiffelExport "[{}]" 94syn match eiffelArray "<<" 95syn match eiffelArray ">>" 96syn match eiffelConstraint "->" 97syn match eiffelOperator "[@#|&][^ \e\t\b%]*" 98 99" Special classes 100syn keyword eiffelAnchored like 101syn keyword eiffelBitType BIT 102 103" Constants 104if !exists("eiffel_pedantic") 105 syn keyword eiffelBool true false 106endif 107syn keyword eiffelBool True False 108syn region eiffelString start=+"+ skip=+%"+ end=+"+ contains=eiffelStringEscape,eiffelStringError 109syn match eiffelStringEscape contained "%[^/]" 110syn match eiffelStringEscape contained "%/\d\+/" 111syn match eiffelStringEscape contained "^[ \t]*%" 112syn match eiffelStringEscape contained "%[ \t]*$" 113syn match eiffelStringError contained "%/[^0-9]" 114syn match eiffelStringError contained "%/\d\+[^0-9/]" 115syn match eiffelBadConstant "'\(%[^/]\|%/\d\+/\|[^'%]\)\+'" 116syn match eiffelBadConstant "''" 117syn match eiffelCharacter "'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=eiffelStringEscape 118syn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\>" 119syn match eiffelNumber "\<[01]\+[bB]\>" 120syn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\=" 121syn match eiffelNumber "-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\=" 122syn match eiffelComment "--.*" contains=eiffelTodo 123 124syn case match 125 126" Case sensitive stuff 127 128syn keyword eiffelTodo contained TODO XXX FIXME 129syn match eiffelClassName "\<[A-Z][A-Z0-9_]*\>" 130 131" Catch mismatched parentheses 132syn match eiffelParenError ")" 133syn region eiffelParen transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape 134 135if exists("eiffel_fold") 136" setlocal foldmethod=indent 137" syn sync fromstart 138endif 139 140" Should suffice for even very long strings and expressions 141syn sync lines=40 142 143" Define the default highlighting. 144" For version 5.7 and earlier: only when not done already 145" For version 5.8 and later: only when an item doesn't have highlighting yet 146if version >= 508 || !exists("did_eiffel_syntax_inits") 147 if version < 508 148 let did_eiffel_syntax_inits = 1 149 command -nargs=+ HiLink hi link <args> 150 else 151 command -nargs=+ HiLink hi def link <args> 152 endif 153 154 HiLink eiffelKeyword Statement 155 HiLink eiffelProperty Statement 156 HiLink eiffelInheritClause Statement 157 HiLink eiffelStatement Statement 158 HiLink eiffelDeclaration Statement 159 HiLink eiffelAssertion Statement 160 HiLink eiffelDebug Statement 161 HiLink eiffelException Statement 162 HiLink eiffelGenericCreate Statement 163 164 HiLink eiffelAgent Statement 165 HiLink eiffelConvert Statement 166 167 HiLink eiffelTopStruct PreProc 168 169 HiLink eiffelAll Special 170 HiLink eiffelAnchored Special 171 HiLink eiffelBitType Special 172 173 174 HiLink eiffelBool Boolean 175 HiLink eiffelString String 176 HiLink eiffelCharacter Character 177 HiLink eiffelClassName Type 178 HiLink eiffelNumber Number 179 180 HiLink eiffelStringEscape Special 181 182 HiLink eiffelOperator Special 183 HiLink eiffelArray Special 184 HiLink eiffelExport Special 185 HiLink eiffelCreation Special 186 HiLink eiffelBrackets Special 187 HiLink eiffelGeneric Special 188 HiLink eiffelGenericDecl Special 189 HiLink eiffelConstraint Special 190 HiLink eiffelCreate Special 191 192 HiLink eiffelPredefined Constant 193 194 HiLink eiffelComment Comment 195 196 HiLink eiffelError Error 197 HiLink eiffelBadConstant Error 198 HiLink eiffelStringError Error 199 HiLink eiffelParenError Error 200 HiLink eiffelBracketError Error 201 202 HiLink eiffelTodo Todo 203 204 delcommand HiLink 205endif 206 207let b:current_syntax = "eiffel" 208 209let &cpo = s:keepcpo 210unlet s:keepcpo 211 212" vim: ts=8 213