home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / runtime / syntax / eiffel.vim < prev    next >
Encoding:
Text File  |  2012-05-31  |  7.3 KB  |  213 lines

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