summaryrefslogtreecommitdiff
path: root/runtime/syntax/eiffel.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/eiffel.vim')
-rw-r--r--runtime/syntax/eiffel.vim196
1 files changed, 196 insertions, 0 deletions
diff --git a/runtime/syntax/eiffel.vim b/runtime/syntax/eiffel.vim
new file mode 100644
index 000000000..af6eee98a
--- /dev/null
+++ b/runtime/syntax/eiffel.vim
@@ -0,0 +1,196 @@
+" Eiffel syntax file
+" Language: Eiffel
+" Maintainer: Reimer Behrends <behrends@cse.msu.edu>
+" With much input from Jocelyn Fiat <fiat@eiffel.com>
+" See http://www.cse.msu.edu/~behrends/vim/ for the most current version.
+" Last Change: 2001 May 09
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" 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 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 eiffelCreate "\<create\>"
+ syn match eiffelTopStruct contained "\<create\>"
+ 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
+syn keyword eiffelDeclaration 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
+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 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
+
+" Should suffice for even very long strings and expressions
+syn sync lines=40
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_eiffel_syntax_inits")
+ if version < 508
+ let did_eiffel_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink eiffelKeyword Statement
+ HiLink eiffelProperty Statement
+ HiLink eiffelInheritClause Statement
+ HiLink eiffelStatement Statement
+ HiLink eiffelDeclaration Statement
+ HiLink eiffelAssertion Statement
+ HiLink eiffelDebug Statement
+ HiLink eiffelException Statement
+ HiLink eiffelGenericCreate Statement
+
+
+ HiLink eiffelTopStruct PreProc
+
+ HiLink eiffelAll Special
+ HiLink eiffelAnchored Special
+ HiLink eiffelBitType Special
+
+
+ HiLink eiffelBool Boolean
+ HiLink eiffelString String
+ HiLink eiffelCharacter Character
+ HiLink eiffelClassName Type
+ HiLink eiffelNumber Number
+
+ HiLink eiffelStringEscape Special
+
+ HiLink eiffelOperator Special
+ HiLink eiffelArray Special
+ HiLink eiffelExport Special
+ HiLink eiffelCreation Special
+ HiLink eiffelBrackets Special
+ HiLink eiffelGeneric Special
+ HiLink eiffelGenericDecl Special
+ HiLink eiffelConstraint Special
+ HiLink eiffelCreate Special
+
+ HiLink eiffelPredefined Constant
+
+ HiLink eiffelComment Comment
+
+ HiLink eiffelError Error
+ HiLink eiffelBadConstant Error
+ HiLink eiffelStringError Error
+ HiLink eiffelParenError Error
+ HiLink eiffelBracketError Error
+
+ HiLink eiffelTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "eiffel"
+
+" vim: ts=8