1071d4279SBram Moolenaar" Eiffel syntax file 2071d4279SBram Moolenaar" Language: Eiffel 3c873442bSBram Moolenaar" Maintainer: Jocelyn Fiat <[email protected]> 4c873442bSBram Moolenaar" Previous maintainer: Reimer Behrends <[email protected]> 5c873442bSBram Moolenaar" Contributions from: Thilo Six 6c873442bSBram Moolenaar" 7c873442bSBram Moolenaar" URL: https://github.com/eiffelhub/vim-eiffel 889bcfda6SBram Moolenaar" quit when a syntax file was already loaded 989bcfda6SBram Moolenaarif exists("b:current_syntax") 10071d4279SBram Moolenaar finish 11071d4279SBram Moolenaarendif 12071d4279SBram Moolenaar 13c873442bSBram Moolenaarlet s:keepcpo= &cpo 146ee8d89cSBram Moolenaarset cpo&vim 156ee8d89cSBram Moolenaar 16071d4279SBram Moolenaar" Option handling 17071d4279SBram Moolenaar 18071d4279SBram Moolenaarif exists("eiffel_ignore_case") 19071d4279SBram Moolenaar syn case ignore 20071d4279SBram Moolenaarelse 21071d4279SBram Moolenaar syn case match 22071d4279SBram Moolenaar if exists("eiffel_pedantic") || exists("eiffel_strict") 23071d4279SBram Moolenaar syn keyword eiffelError current void result precursor none 24071d4279SBram Moolenaar syn keyword eiffelError CURRENT VOID RESULT PRECURSOR None 25071d4279SBram Moolenaar syn keyword eiffelError TRUE FALSE 26071d4279SBram Moolenaar endif 27071d4279SBram Moolenaar if exists("eiffel_pedantic") 28071d4279SBram Moolenaar syn keyword eiffelError true false 29071d4279SBram Moolenaar syn match eiffelError "\<[a-z_]\+[A-Z][a-zA_Z_]*\>" 30071d4279SBram Moolenaar syn match eiffelError "\<[A-Z][a-z_]*[A-Z][a-zA-Z_]*\>" 31071d4279SBram Moolenaar endif 32071d4279SBram Moolenaar if exists("eiffel_lower_case_predef") 33071d4279SBram Moolenaar syn keyword eiffelPredefined current void result precursor 34071d4279SBram Moolenaar endif 35071d4279SBram Moolenaarendif 36071d4279SBram Moolenaar 37071d4279SBram Moolenaarif exists("eiffel_hex_constants") 38071d4279SBram Moolenaar syn match eiffelNumber "\d[0-9a-fA-F]*[xX]" 39071d4279SBram Moolenaarendif 40071d4279SBram Moolenaar 41071d4279SBram Moolenaar" Keyword definitions 42071d4279SBram Moolenaar 43c873442bSBram Moolenaarsyn keyword eiffelTopStruct note indexing feature creation inherit 44071d4279SBram Moolenaarsyn match eiffelTopStruct "\<class\>" 45071d4279SBram Moolenaarsyn match eiffelKeyword "\<end\>" 46071d4279SBram Moolenaarsyn match eiffelTopStruct "^end\>\(\s*--\s\+class\s\+\<[A-Z][A-Z0-9_]*\>\)\=" contains=eiffelClassName 47071d4279SBram Moolenaarsyn match eiffelBrackets "[[\]]" 48071d4279SBram Moolenaarsyn match eiffelBracketError "\]" 49071d4279SBram Moolenaarsyn region eiffelGeneric transparent matchgroup=eiffelBrackets start="\[" end="\]" contains=ALLBUT,eiffelBracketError,eiffelGenericDecl,eiffelStringError,eiffelStringEscape,eiffelGenericCreate,eiffelTopStruct 50071d4279SBram Moolenaarif exists("eiffel_ise") 51c873442bSBram Moolenaar syn match eiffelAgent "\<agent\>" 52c873442bSBram Moolenaar syn match eiffelConvert "\<convert\>" 53071d4279SBram Moolenaar syn match eiffelCreate "\<create\>" 54071d4279SBram Moolenaar syn match eiffelTopStruct contained "\<create\>" 55c873442bSBram Moolenaar syn match eiffelTopStruct contained "\<convert\>" 56071d4279SBram Moolenaar syn match eiffelGenericCreate contained "\<create\>" 57071d4279SBram Moolenaar syn match eiffelTopStruct "^create\>" 58071d4279SBram Moolenaar syn region eiffelGenericDecl transparent matchgroup=eiffelBrackets contained start="\[" end="\]" contains=ALLBUT,eiffelCreate,eiffelTopStruct,eiffelGeneric,eiffelBracketError,eiffelStringEscape,eiffelStringError,eiffelBrackets 59071d4279SBram Moolenaar syn region eiffelClassHeader start="^class\>" end="$" contains=ALLBUT,eiffelCreate,eiffelGenericCreate,eiffelGeneric,eiffelStringEscape,eiffelStringError,eiffelBrackets 60071d4279SBram Moolenaarendif 61c873442bSBram Moolenaarsyn keyword eiffelDeclaration is do once deferred unique local attribute assign 62c873442bSBram Moolenaarsyn keyword eiffelDeclaration attached detachable Unique 63071d4279SBram Moolenaarsyn keyword eiffelProperty expanded obsolete separate frozen 64071d4279SBram Moolenaarsyn keyword eiffelProperty prefix infix 65071d4279SBram Moolenaarsyn keyword eiffelInheritClause rename redefine undefine select export as 66071d4279SBram Moolenaarsyn keyword eiffelAll all 67c873442bSBram Moolenaarsyn keyword eiffelKeyword external alias some 68071d4279SBram Moolenaarsyn keyword eiffelStatement if else elseif inspect 69071d4279SBram Moolenaarsyn keyword eiffelStatement when then 70071d4279SBram Moolenaarsyn match eiffelAssertion "\<require\(\s\+else\)\=\>" 71071d4279SBram Moolenaarsyn match eiffelAssertion "\<ensure\(\s\+then\)\=\>" 72071d4279SBram Moolenaarsyn keyword eiffelAssertion check 73071d4279SBram Moolenaarsyn keyword eiffelDebug debug 74c873442bSBram Moolenaarsyn keyword eiffelStatement across from until loop 75071d4279SBram Moolenaarsyn keyword eiffelAssertion variant 76071d4279SBram Moolenaarsyn match eiffelAssertion "\<invariant\>" 77071d4279SBram Moolenaarsyn match eiffelTopStruct "^invariant\>" 78071d4279SBram Moolenaarsyn keyword eiffelException rescue retry 79071d4279SBram Moolenaar 80071d4279SBram Moolenaarsyn keyword eiffelPredefined Current Void Result Precursor 81071d4279SBram Moolenaar 82071d4279SBram Moolenaar" Operators 83071d4279SBram Moolenaarsyn match eiffelOperator "\<and\(\s\+then\)\=\>" 84071d4279SBram Moolenaarsyn match eiffelOperator "\<or\(\s\+else\)\=\>" 85071d4279SBram Moolenaarsyn keyword eiffelOperator xor implies not 86071d4279SBram Moolenaarsyn keyword eiffelOperator strip old 87071d4279SBram Moolenaarsyn keyword eiffelOperator Strip 88071d4279SBram Moolenaarsyn match eiffelOperator "\$" 89071d4279SBram Moolenaarsyn match eiffelCreation "!" 90071d4279SBram Moolenaarsyn match eiffelExport "[{}]" 91071d4279SBram Moolenaarsyn match eiffelArray "<<" 92071d4279SBram Moolenaarsyn match eiffelArray ">>" 93071d4279SBram Moolenaarsyn match eiffelConstraint "->" 94071d4279SBram Moolenaarsyn match eiffelOperator "[@#|&][^ \e\t\b%]*" 95071d4279SBram Moolenaar 96071d4279SBram Moolenaar" Special classes 97071d4279SBram Moolenaarsyn keyword eiffelAnchored like 98071d4279SBram Moolenaarsyn keyword eiffelBitType BIT 99071d4279SBram Moolenaar 100071d4279SBram Moolenaar" Constants 101071d4279SBram Moolenaarif !exists("eiffel_pedantic") 102071d4279SBram Moolenaar syn keyword eiffelBool true false 103071d4279SBram Moolenaarendif 104071d4279SBram Moolenaarsyn keyword eiffelBool True False 105071d4279SBram Moolenaarsyn region eiffelString start=+"+ skip=+%"+ end=+"+ contains=eiffelStringEscape,eiffelStringError 106071d4279SBram Moolenaarsyn match eiffelStringEscape contained "%[^/]" 107071d4279SBram Moolenaarsyn match eiffelStringEscape contained "%/\d\+/" 108071d4279SBram Moolenaarsyn match eiffelStringEscape contained "^[ \t]*%" 109071d4279SBram Moolenaarsyn match eiffelStringEscape contained "%[ \t]*$" 110071d4279SBram Moolenaarsyn match eiffelStringError contained "%/[^0-9]" 111071d4279SBram Moolenaarsyn match eiffelStringError contained "%/\d\+[^0-9/]" 112071d4279SBram Moolenaarsyn match eiffelBadConstant "'\(%[^/]\|%/\d\+/\|[^'%]\)\+'" 113071d4279SBram Moolenaarsyn match eiffelBadConstant "''" 114071d4279SBram Moolenaarsyn match eiffelCharacter "'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=eiffelStringEscape 115071d4279SBram Moolenaarsyn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\>" 116071d4279SBram Moolenaarsyn match eiffelNumber "\<[01]\+[bB]\>" 117071d4279SBram Moolenaarsyn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\=" 118071d4279SBram Moolenaarsyn match eiffelNumber "-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\=" 119071d4279SBram Moolenaarsyn match eiffelComment "--.*" contains=eiffelTodo 120071d4279SBram Moolenaar 121071d4279SBram Moolenaarsyn case match 122071d4279SBram Moolenaar 123071d4279SBram Moolenaar" Case sensitive stuff 124071d4279SBram Moolenaar 125071d4279SBram Moolenaarsyn keyword eiffelTodo contained TODO XXX FIXME 126071d4279SBram Moolenaarsyn match eiffelClassName "\<[A-Z][A-Z0-9_]*\>" 127071d4279SBram Moolenaar 128071d4279SBram Moolenaar" Catch mismatched parentheses 129071d4279SBram Moolenaarsyn match eiffelParenError ")" 130071d4279SBram Moolenaarsyn region eiffelParen transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape 131071d4279SBram Moolenaar 132c873442bSBram Moolenaarif exists("eiffel_fold") 133c873442bSBram Moolenaar" setlocal foldmethod=indent 134c873442bSBram Moolenaar" syn sync fromstart 135c873442bSBram Moolenaarendif 136c873442bSBram Moolenaar 137071d4279SBram Moolenaar" Should suffice for even very long strings and expressions 138071d4279SBram Moolenaarsyn sync lines=40 139071d4279SBram Moolenaar 140071d4279SBram Moolenaar" Define the default highlighting. 14189bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet 142071d4279SBram Moolenaar 143*f37506f6SBram Moolenaarhi def link eiffelKeyword Statement 144*f37506f6SBram Moolenaarhi def link eiffelProperty Statement 145*f37506f6SBram Moolenaarhi def link eiffelInheritClause Statement 146*f37506f6SBram Moolenaarhi def link eiffelStatement Statement 147*f37506f6SBram Moolenaarhi def link eiffelDeclaration Statement 148*f37506f6SBram Moolenaarhi def link eiffelAssertion Statement 149*f37506f6SBram Moolenaarhi def link eiffelDebug Statement 150*f37506f6SBram Moolenaarhi def link eiffelException Statement 151*f37506f6SBram Moolenaarhi def link eiffelGenericCreate Statement 152071d4279SBram Moolenaar 153*f37506f6SBram Moolenaarhi def link eiffelAgent Statement 154*f37506f6SBram Moolenaarhi def link eiffelConvert Statement 155071d4279SBram Moolenaar 156*f37506f6SBram Moolenaarhi def link eiffelTopStruct PreProc 157071d4279SBram Moolenaar 158*f37506f6SBram Moolenaarhi def link eiffelAll Special 159*f37506f6SBram Moolenaarhi def link eiffelAnchored Special 160*f37506f6SBram Moolenaarhi def link eiffelBitType Special 161071d4279SBram Moolenaar 162071d4279SBram Moolenaar 163*f37506f6SBram Moolenaarhi def link eiffelBool Boolean 164*f37506f6SBram Moolenaarhi def link eiffelString String 165*f37506f6SBram Moolenaarhi def link eiffelCharacter Character 166*f37506f6SBram Moolenaarhi def link eiffelClassName Type 167*f37506f6SBram Moolenaarhi def link eiffelNumber Number 168071d4279SBram Moolenaar 169*f37506f6SBram Moolenaarhi def link eiffelStringEscape Special 170071d4279SBram Moolenaar 171*f37506f6SBram Moolenaarhi def link eiffelOperator Special 172*f37506f6SBram Moolenaarhi def link eiffelArray Special 173*f37506f6SBram Moolenaarhi def link eiffelExport Special 174*f37506f6SBram Moolenaarhi def link eiffelCreation Special 175*f37506f6SBram Moolenaarhi def link eiffelBrackets Special 176*f37506f6SBram Moolenaarhi def link eiffelGeneric Special 177*f37506f6SBram Moolenaarhi def link eiffelGenericDecl Special 178*f37506f6SBram Moolenaarhi def link eiffelConstraint Special 179*f37506f6SBram Moolenaarhi def link eiffelCreate Special 180071d4279SBram Moolenaar 181*f37506f6SBram Moolenaarhi def link eiffelPredefined Constant 182071d4279SBram Moolenaar 183*f37506f6SBram Moolenaarhi def link eiffelComment Comment 184071d4279SBram Moolenaar 185*f37506f6SBram Moolenaarhi def link eiffelError Error 186*f37506f6SBram Moolenaarhi def link eiffelBadConstant Error 187*f37506f6SBram Moolenaarhi def link eiffelStringError Error 188*f37506f6SBram Moolenaarhi def link eiffelParenError Error 189*f37506f6SBram Moolenaarhi def link eiffelBracketError Error 190071d4279SBram Moolenaar 191*f37506f6SBram Moolenaarhi def link eiffelTodo Todo 192071d4279SBram Moolenaar 193071d4279SBram Moolenaar 194071d4279SBram Moolenaarlet b:current_syntax = "eiffel" 195071d4279SBram Moolenaar 196c873442bSBram Moolenaarlet &cpo = s:keepcpo 197c873442bSBram Moolenaarunlet s:keepcpo 198c873442bSBram Moolenaar 199071d4279SBram Moolenaar" vim: ts=8 200