eiffel.vim (6926B)
1 " Eiffel syntax file 2 " Language: Eiffel 3 " Maintainer: Jocelyn Fiat <jfiat@eiffel.com> 4 " Previous maintainer: Reimer Behrends <behrends@cse.msu.edu> 5 " Contributions from: Thilo Six 6 " 7 " URL: https://github.com/eiffelhub/vim-eiffel 8 " quit when a syntax file was already loaded 9 if exists("b:current_syntax") 10 finish 11 endif 12 13 let s:keepcpo= &cpo 14 set cpo&vim 15 16 " Option handling 17 18 if exists("eiffel_ignore_case") 19 syn case ignore 20 else 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 35 endif 36 37 if exists("eiffel_hex_constants") 38 syn match eiffelNumber "\d[0-9a-fA-F]*[xX]" 39 endif 40 41 " Keyword definitions 42 43 syn keyword eiffelTopStruct note indexing feature creation inherit 44 syn match eiffelTopStruct "\<class\>" 45 syn match eiffelKeyword "\<end\>" 46 syn match eiffelTopStruct "^end\>\(\s*--\s\+class\s\+\<[A-Z][A-Z0-9_]*\>\)\=" contains=eiffelClassName 47 syn match eiffelBrackets "[[\]]" 48 syn match eiffelBracketError "\]" 49 syn region eiffelGeneric transparent matchgroup=eiffelBrackets start="\[" end="\]" contains=ALLBUT,eiffelBracketError,eiffelGenericDecl,eiffelStringError,eiffelStringEscape,eiffelGenericCreate,eiffelTopStruct 50 if 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 60 endif 61 syn keyword eiffelDeclaration is do once deferred unique local attribute assign 62 syn keyword eiffelDeclaration attached detachable Unique 63 syn keyword eiffelProperty expanded obsolete separate frozen 64 syn keyword eiffelProperty prefix infix 65 syn keyword eiffelInheritClause rename redefine undefine select export as 66 syn keyword eiffelAll all 67 syn keyword eiffelKeyword external alias some 68 syn keyword eiffelStatement if else elseif inspect 69 syn keyword eiffelStatement when then 70 syn match eiffelAssertion "\<require\(\s\+else\)\=\>" 71 syn match eiffelAssertion "\<ensure\(\s\+then\)\=\>" 72 syn keyword eiffelAssertion check 73 syn keyword eiffelDebug debug 74 syn keyword eiffelStatement across from until loop 75 syn keyword eiffelAssertion variant 76 syn match eiffelAssertion "\<invariant\>" 77 syn match eiffelTopStruct "^invariant\>" 78 syn keyword eiffelException rescue retry 79 80 syn keyword eiffelPredefined Current Void Result Precursor 81 82 " Operators 83 syn match eiffelOperator "\<and\(\s\+then\)\=\>" 84 syn match eiffelOperator "\<or\(\s\+else\)\=\>" 85 syn keyword eiffelOperator xor implies not 86 syn keyword eiffelOperator strip old 87 syn keyword eiffelOperator Strip 88 syn match eiffelOperator "\$" 89 syn match eiffelCreation "!" 90 syn match eiffelExport "[{}]" 91 syn match eiffelArray "<<" 92 syn match eiffelArray ">>" 93 syn match eiffelConstraint "->" 94 syn match eiffelOperator "[@#|&][^ \e\t\b%]*" 95 96 " Special classes 97 syn keyword eiffelAnchored like 98 syn keyword eiffelBitType BIT 99 100 " Constants 101 if !exists("eiffel_pedantic") 102 syn keyword eiffelBool true false 103 endif 104 syn keyword eiffelBool True False 105 syn region eiffelString start=+"+ skip=+%"+ end=+"+ contains=eiffelStringEscape,eiffelStringError 106 syn match eiffelStringEscape contained "%[^/]" 107 syn match eiffelStringEscape contained "%/\d\+/" 108 syn match eiffelStringEscape contained "^[ \t]*%" 109 syn match eiffelStringEscape contained "%[ \t]*$" 110 syn match eiffelStringError contained "%/[^0-9]" 111 syn match eiffelStringError contained "%/\d\+[^0-9/]" 112 syn match eiffelBadConstant "'\(%[^/]\|%/\d\+/\|[^'%]\)\+'" 113 syn match eiffelBadConstant "''" 114 syn match eiffelCharacter "'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=eiffelStringEscape 115 syn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\>" 116 syn match eiffelNumber "\<[01]\+[bB]\>" 117 syn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\=" 118 syn match eiffelNumber "-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\=" 119 syn match eiffelComment "--.*" contains=eiffelTodo 120 121 syn case match 122 123 " Case sensitive stuff 124 125 syn keyword eiffelTodo contained TODO XXX FIXME 126 syn match eiffelClassName "\<[A-Z][A-Z0-9_]*\>" 127 128 " Catch mismatched parentheses 129 syn match eiffelParenError ")" 130 syn region eiffelParen transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape 131 132 if exists("eiffel_fold") 133 " setlocal foldmethod=indent 134 " syn sync fromstart 135 endif 136 137 " Should suffice for even very long strings and expressions 138 syn sync lines=40 139 140 " Define the default highlighting. 141 " Only when an item doesn't have highlighting yet 142 143 hi def link eiffelKeyword Statement 144 hi def link eiffelProperty Statement 145 hi def link eiffelInheritClause Statement 146 hi def link eiffelStatement Statement 147 hi def link eiffelDeclaration Statement 148 hi def link eiffelAssertion Statement 149 hi def link eiffelDebug Statement 150 hi def link eiffelException Statement 151 hi def link eiffelGenericCreate Statement 152 153 hi def link eiffelAgent Statement 154 hi def link eiffelConvert Statement 155 156 hi def link eiffelTopStruct PreProc 157 158 hi def link eiffelAll Special 159 hi def link eiffelAnchored Special 160 hi def link eiffelBitType Special 161 162 163 hi def link eiffelBool Boolean 164 hi def link eiffelString String 165 hi def link eiffelCharacter Character 166 hi def link eiffelClassName Type 167 hi def link eiffelNumber Number 168 169 hi def link eiffelStringEscape Special 170 171 hi def link eiffelOperator Special 172 hi def link eiffelArray Special 173 hi def link eiffelExport Special 174 hi def link eiffelCreation Special 175 hi def link eiffelBrackets Special 176 hi def link eiffelGeneric Special 177 hi def link eiffelGenericDecl Special 178 hi def link eiffelConstraint Special 179 hi def link eiffelCreate Special 180 181 hi def link eiffelPredefined Constant 182 183 hi def link eiffelComment Comment 184 185 hi def link eiffelError Error 186 hi def link eiffelBadConstant Error 187 hi def link eiffelStringError Error 188 hi def link eiffelParenError Error 189 hi def link eiffelBracketError Error 190 191 hi def link eiffelTodo Todo 192 193 194 let b:current_syntax = "eiffel" 195 196 let &cpo = s:keepcpo 197 unlet s:keepcpo 198 199 " vim: ts=8