" Eiffel syntax file " Language: Eiffel " Maintainer: Jocelyn Fiat " Previous maintainer: Reimer Behrends " Contributions from: Thilo Six " " URL: https://github.com/eiffelhub/vim-eiffel " quit when a syntax file was already loaded if exists("b:current_syntax") finish endif let s:keepcpo= &cpo set cpo&vim " Option handling if exists("eiffel_ignore_case") syn case ignore else syn case match if exists("eiffel_pedantic") || exists("eiffel_strict") syn keyword eiffelError current void result precursor none syn keyword eiffelError CURRENT VOID RESULT PRECURSOR None syn keyword eiffelError TRUE FALSE endif if exists("eiffel_pedantic") syn keyword eiffelError true false syn match eiffelError "\<[a-z_]\+[A-Z][a-zA_Z_]*\>" syn match eiffelError "\<[A-Z][a-z_]*[A-Z][a-zA-Z_]*\>" endif if exists("eiffel_lower_case_predef") syn keyword eiffelPredefined current void result precursor endif endif if exists("eiffel_hex_constants") syn match eiffelNumber "\d[0-9a-fA-F]*[xX]" endif " Keyword definitions syn keyword eiffelTopStruct note indexing feature creation inherit syn match eiffelTopStruct "\" syn match eiffelKeyword "\" syn match eiffelTopStruct "^end\>\(\s*--\s\+class\s\+\<[A-Z][A-Z0-9_]*\>\)\=" contains=eiffelClassName syn match eiffelBrackets "[[\]]" syn match eiffelBracketError "\]" syn region eiffelGeneric transparent matchgroup=eiffelBrackets start="\[" end="\]" contains=ALLBUT,eiffelBracketError,eiffelGenericDecl,eiffelStringError,eiffelStringEscape,eiffelGenericCreate,eiffelTopStruct if exists("eiffel_ise") syn match eiffelAgent "\" syn match eiffelConvert "\" syn match eiffelCreate "\" syn match eiffelTopStruct contained "\" syn match eiffelTopStruct contained "\" syn match eiffelGenericCreate contained "\" syn match eiffelTopStruct "^create\>" syn region eiffelGenericDecl transparent matchgroup=eiffelBrackets contained start="\[" end="\]" contains=ALLBUT,eiffelCreate,eiffelTopStruct,eiffelGeneric,eiffelBracketError,eiffelStringEscape,eiffelStringError,eiffelBrackets syn region eiffelClassHeader start="^class\>" end="$" contains=ALLBUT,eiffelCreate,eiffelGenericCreate,eiffelGeneric,eiffelStringEscape,eiffelStringError,eiffelBrackets endif syn keyword eiffelDeclaration is do once deferred unique local attribute assign syn keyword eiffelDeclaration attached detachable Unique syn keyword eiffelProperty expanded obsolete separate frozen syn keyword eiffelProperty prefix infix syn keyword eiffelInheritClause rename redefine undefine select export as syn keyword eiffelAll all syn keyword eiffelKeyword external alias some syn keyword eiffelStatement if else elseif inspect syn keyword eiffelStatement when then syn match eiffelAssertion "\" syn match eiffelAssertion "\" syn keyword eiffelAssertion check syn keyword eiffelDebug debug syn keyword eiffelStatement across from until loop syn keyword eiffelAssertion variant syn match eiffelAssertion "\" syn match eiffelTopStruct "^invariant\>" syn keyword eiffelException rescue retry syn keyword eiffelPredefined Current Void Result Precursor " Operators syn match eiffelOperator "\" syn match eiffelOperator "\" syn keyword eiffelOperator xor implies not syn keyword eiffelOperator strip old syn keyword eiffelOperator Strip syn match eiffelOperator "\$" syn match eiffelCreation "!" syn match eiffelExport "[{}]" syn match eiffelArray "<<" syn match eiffelArray ">>" syn match eiffelConstraint "->" syn match eiffelOperator "[@#|&][^ \e\t\b%]*" " Special classes syn keyword eiffelAnchored like syn keyword eiffelBitType BIT " Constants if !exists("eiffel_pedantic") syn keyword eiffelBool true false endif syn keyword eiffelBool True False syn region eiffelString start=+"+ skip=+%"+ end=+"+ contains=eiffelStringEscape,eiffelStringError syn match eiffelStringEscape contained "%[^/]" syn match eiffelStringEscape contained "%/\d\+/" syn match eiffelStringEscape contained "^[ \t]*%" syn match eiffelStringEscape contained "%[ \t]*$" syn match eiffelStringError contained "%/[^0-9]" syn match eiffelStringError contained "%/\d\+[^0-9/]" syn match eiffelBadConstant "'\(%[^/]\|%/\d\+/\|[^'%]\)\+'" syn match eiffelBadConstant "''" syn match eiffelCharacter "'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=eiffelStringEscape syn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\>" syn match eiffelNumber "\<[01]\+[bB]\>" syn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\=" syn match eiffelNumber "-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\=" syn match eiffelComment "--.*" contains=eiffelTodo syn case match " Case sensitive stuff syn keyword eiffelTodo contained TODO XXX FIXME syn match eiffelClassName "\<[A-Z][A-Z0-9_]*\>" " Catch mismatched parentheses syn match eiffelParenError ")" syn region eiffelParen transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape if exists("eiffel_fold") " setlocal foldmethod=indent " syn sync fromstart endif " Should suffice for even very long strings and expressions syn sync lines=40 " Define the default highlighting. " Only when an item doesn't have highlighting yet hi def link eiffelKeyword Statement hi def link eiffelProperty Statement hi def link eiffelInheritClause Statement hi def link eiffelStatement Statement hi def link eiffelDeclaration Statement hi def link eiffelAssertion Statement hi def link eiffelDebug Statement hi def link eiffelException Statement hi def link eiffelGenericCreate Statement hi def link eiffelAgent Statement hi def link eiffelConvert Statement hi def link eiffelTopStruct PreProc hi def link eiffelAll Special hi def link eiffelAnchored Special hi def link eiffelBitType Special hi def link eiffelBool Boolean hi def link eiffelString String hi def link eiffelCharacter Character hi def link eiffelClassName Type hi def link eiffelNumber Number hi def link eiffelStringEscape Special hi def link eiffelOperator Special hi def link eiffelArray Special hi def link eiffelExport Special hi def link eiffelCreation Special hi def link eiffelBrackets Special hi def link eiffelGeneric Special hi def link eiffelGenericDecl Special hi def link eiffelConstraint Special hi def link eiffelCreate Special hi def link eiffelPredefined Constant hi def link eiffelComment Comment hi def link eiffelError Error hi def link eiffelBadConstant Error hi def link eiffelStringError Error hi def link eiffelParenError Error hi def link eiffelBracketError Error hi def link eiffelTodo Todo let b:current_syntax = "eiffel" let &cpo = s:keepcpo unlet s:keepcpo " vim: ts=8