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