summaryrefslogtreecommitdiffstats
path: root/runtime/syntax/eiffel.vim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--runtime/syntax/eiffel.vim199
1 files changed, 199 insertions, 0 deletions
diff --git a/runtime/syntax/eiffel.vim b/runtime/syntax/eiffel.vim
new file mode 100644
index 0000000..c663487
--- /dev/null
+++ b/runtime/syntax/eiffel.vim
@@ -0,0 +1,199 @@
+" Eiffel syntax file
+" Language: Eiffel
+" Maintainer: Jocelyn Fiat <jfiat@eiffel.com>
+" Previous maintainer: Reimer Behrends <behrends@cse.msu.edu>
+" 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 "\<class\>"
+syn match eiffelKeyword "\<end\>"
+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 "\<agent\>"
+ syn match eiffelConvert "\<convert\>"
+ syn match eiffelCreate "\<create\>"
+ syn match eiffelTopStruct contained "\<create\>"
+ syn match eiffelTopStruct contained "\<convert\>"
+ syn match eiffelGenericCreate contained "\<create\>"
+ 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 "\<require\(\s\+else\)\=\>"
+syn match eiffelAssertion "\<ensure\(\s\+then\)\=\>"
+syn keyword eiffelAssertion check
+syn keyword eiffelDebug debug
+syn keyword eiffelStatement across from until loop
+syn keyword eiffelAssertion variant
+syn match eiffelAssertion "\<invariant\>"
+syn match eiffelTopStruct "^invariant\>"
+syn keyword eiffelException rescue retry
+
+syn keyword eiffelPredefined Current Void Result Precursor
+
+" Operators
+syn match eiffelOperator "\<and\(\s\+then\)\=\>"
+syn match eiffelOperator "\<or\(\s\+else\)\=\>"
+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