home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 February / OpenLinux 2.3 CD.iso / live / usr / share / vim / syntax / eiffel.vim < prev    next >
Encoding:
Text File  |  1999-08-10  |  5.4 KB  |  159 lines

  1. " Eiffel syntax file
  2. " Language:    Eiffel
  3. " Maintainer:    Reimer Behrends <reimer.behrends@usa.net>
  4. "               With much input from Jocelyn Fiat <fiat@eiffel.com>
  5. " Last change:    1998 March 26
  6.  
  7. " Remove any old syntax stuff hanging around
  8.  
  9. syn clear
  10.  
  11. " Option handling
  12.  
  13. if exists("eiffel_ignore_case")
  14.   syn case ignore
  15. else
  16.   syn case match
  17.   if exists("eiffel_pedantic")
  18.     syn keyword eiffelError          current void result precursor none
  19.     syn keyword eiffelError          CURRENT VOID RESULT PRECURSOR None
  20.   endif
  21.   if exists("eiffel_lower_case_predef")
  22.     syn keyword eiffelPredefined     current void result precursor
  23.   endif
  24. endif
  25.  
  26. if exists("eiffel_hex_constants")
  27.   syn match  eiffelNumber          "\d[0-9a-fA-F]*[xX]"
  28. endif
  29.  
  30. " Keyword definitions
  31.  
  32. syn keyword eiffelTopStruct      indexing class feature creation inherit
  33. syn match   eiffelKeyword     "\<end\>"
  34. syn match   eiffelTopStruct      "^end\>\(\s*--\s\+class\s\+\<[A-Z][A-Z0-9_]*\>\)\=" contains=eiffelClassName
  35. syn keyword eiffelDeclaration    is do once deferred unique local
  36. syn keyword eiffelDeclaration    Unique
  37. syn keyword eiffelProperty       expanded obsolete separate frozen
  38. syn keyword eiffelProperty       prefix infix
  39. syn keyword eiffelInheritClause  rename redefine undefine select export as
  40. syn keyword eiffelAll            all
  41. syn keyword eiffelKeyword        external alias
  42. syn keyword eiffelStatement      if else elseif inspect
  43. syn keyword eiffelStatement      when then 
  44. syn match   eiffelAssertion      "\<require\(\s\+else\)\=\>"
  45. syn match   eiffelAssertion      "\<ensure\(\s\+then\)\=\>"
  46. syn keyword eiffelAssertion      check
  47. syn keyword eiffelDebug          debug
  48. syn keyword eiffelStatement      from until loop
  49. syn keyword eiffelAssertion      variant
  50. syn match   eiffelAssertion      "\<invariant\>"
  51. syn match   eiffelTopStruct      "^invariant\>"
  52. syn keyword eiffelException      rescue retry
  53.  
  54. syn keyword eiffelPredefined     Current Void Result Precursor
  55.  
  56. " Operators
  57. syn match   eiffelOperator       "\<and\(\s\+then\)\=\>"
  58. syn match   eiffelOperator       "\<or\(\s\+else\)\=\>"
  59. syn keyword eiffelOperator       xor implies not
  60. syn keyword eiffelOperator       strip old
  61. syn keyword eiffelOperator     Strip
  62. syn match   eiffelOperator       "\$"
  63. syn match   eiffelBrackets       "[[\]]"
  64. syn match   eiffelCreation       "!"
  65. syn match   eiffelExport         "[{}]"
  66. syn match   eiffelArray          "<<"
  67. syn match   eiffelArray          ">>"
  68. syn match   eiffelConstraint     "->"
  69. syn match   eiffelOperator       "[@#|&][^ \e\t\b%]*"
  70.  
  71. " Special classes
  72. syn keyword eiffelAnchored     like
  73. syn keyword eiffelBitType        BIT
  74.  
  75. " Constants
  76. syn keyword eiffelBool           true false
  77. syn keyword eiffelBool         True False
  78. syn region  eiffelString         start=+"+ skip=+%"+ end=+"+ contains=eiffelEscape,eiffelStringError
  79. syn match   eiffelEscape     contained "%[^/]"
  80. syn match   eiffelEscape     contained "%/\d\+/"
  81. syn match   eiffelEscape     contained "^[ \t]*%"
  82. syn match   eiffelEscape     contained "%[ \t]*$"
  83. syn match   eiffelStringError    contained "%/[^0-9]"
  84. syn match   eiffelStringError    contained "%/\d\+[^0-9/]"
  85. syn match   eiffelBadConstant    "'\(%[^/]\|%/\d\+/\|[^'%]\)\+'"
  86. syn match   eiffelBadConstant    "''"
  87. syn match   eiffelCharacter      "'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=eiffelEscape
  88. syn match   eiffelNumber         "-\=\<\d\+\(_\d\+\)*\>"
  89. syn match   eiffelNumber         "\<[01]\+[bB]\>"
  90. syn match   eiffelNumber         "-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\="
  91. syn match   eiffelNumber         "-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\="
  92. syn match   eiffelComment        "--.*" contains=eiffelTodo
  93.  
  94. syn case match
  95.  
  96. " Case sensitive stuff
  97.  
  98. syn keyword eiffelTodo           contained TODO XXX FIXME
  99. syn match   eiffelClassName      "\<[A-Z][A-Z0-9_]*\>"
  100.  
  101. " Catch mismatched parentheses
  102. syn match eiffelParenError       ")"
  103. syn match eiffelBracketError     "\]"
  104. syn region eiffelGeneric         transparent matchgroup=eiffelBrackets start="\[" end="\]" contains=ALLBUT,eiffelBracketError
  105. syn region eiffelParen           transparent start="(" end=")" contains=ALLBUT,eiffelParenError
  106.  
  107. " Should suffice for even very long strings and expressions
  108. syn sync lines=40
  109.  
  110. if !exists("did_eiffel_syntax_inits")
  111.   let did_eiffel_syntax_inits = 1
  112.   " The default methods for hilighting.  Can be overridden later
  113.   hi link eiffelKeyword        Statement
  114.   hi link eiffelProperty    Statement
  115.   hi link eiffelInheritClause    Statement
  116.   hi link eiffelStatement    Statement
  117.   hi link eiffelDeclaration    Statement
  118.   hi link eiffelAssertion    Statement
  119.   hi link eiffelDebug        Statement
  120.   hi link eiffelException    Statement
  121.  
  122.   hi link eiffelTopStruct    PreProc
  123.  
  124.   hi link eiffelAll        Special
  125.   hi link eiffelAnchored    Special
  126.   hi link eiffelBitType        Special
  127.  
  128.   hi link eiffelEscape        Special
  129.  
  130.   hi link eiffelBool        Boolean
  131.   hi link eiffelString        String
  132.   hi link eiffelCharacter    Character
  133.   hi link eiffelClassName    Type
  134.   hi link eiffelNumber        Number
  135.  
  136.   hi link eiffelOperator    Special
  137.   hi link eiffelArray        Special
  138.   hi link eiffelExport        Special
  139.   hi link eiffelCreation    Special
  140.   hi link eiffelBrackets    Special
  141.   hi link eiffelConstraint    Special
  142.  
  143.   hi link eiffelPredefined    Constant
  144.  
  145.   hi link eiffelComment        Comment
  146.  
  147.   hi link eiffelError        Error
  148.   hi link eiffelBadConstant    Error
  149.   hi link eiffelStringError    Error
  150.   hi link eiffelParenError    Error
  151.   hi link eiffelBracketError    Error
  152.  
  153.   hi link eiffelTodo        Todo
  154. endif
  155.  
  156. let b:current_syntax = "eiffel"
  157.  
  158. " vim: ts=8
  159.