PageRenderTime 52ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/vim73/syntax/haskell.vim

https://gitlab.com/shinvdu/vim_win_config
Vim Script | 194 lines | 120 code | 17 blank | 57 comment | 10 complexity | ae7d95ec578d2cb30c42bde3f1bcbff6 MD5 | raw file
  1. " Vim syntax file
  2. " Language: Haskell
  3. " Maintainer: Haskell Cafe mailinglist <haskell-cafe@haskell.org>
  4. " Last Change: 2008 Dec 15
  5. " Original Author: John Williams <jrw@pobox.com>
  6. "
  7. " Thanks to Ryan Crumley for suggestions and John Meacham for
  8. " pointing out bugs. Also thanks to Ian Lynagh and Donald Bruce Stewart
  9. " for providing the inspiration for the inclusion of the handling
  10. " of C preprocessor directives, and for pointing out a bug in the
  11. " end-of-line comment handling.
  12. "
  13. " Options-assign a value to these variables to turn the option on:
  14. "
  15. " hs_highlight_delimiters - Highlight delimiter characters--users
  16. " with a light-colored background will
  17. " probably want to turn this on.
  18. " hs_highlight_boolean - Treat True and False as keywords.
  19. " hs_highlight_types - Treat names of primitive types as keywords.
  20. " hs_highlight_more_types - Treat names of other common types as keywords.
  21. " hs_highlight_debug - Highlight names of debugging functions.
  22. " hs_allow_hash_operator - Don't highlight seemingly incorrect C
  23. " preprocessor directives but assume them to be
  24. " operators
  25. "
  26. " 2004 Feb 19: Added C preprocessor directive handling, corrected eol comments
  27. " cleaned away literate haskell support (should be entirely in
  28. " lhaskell.vim)
  29. " 2004 Feb 20: Cleaned up C preprocessor directive handling, fixed single \
  30. " in eol comment character class
  31. " 2004 Feb 23: Made the leading comments somewhat clearer where it comes
  32. " to attribution of work.
  33. " 2008 Dec 15: Added comments as contained element in import statements
  34. " Remove any old syntax stuff hanging around
  35. if version < 600
  36. syn clear
  37. elseif exists("b:current_syntax")
  38. finish
  39. endif
  40. " (Qualified) identifiers (no default highlighting)
  41. syn match ConId "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=\<[A-Z][a-zA-Z0-9_']*\>"
  42. syn match VarId "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=\<[a-z][a-zA-Z0-9_']*\>"
  43. " Infix operators--most punctuation characters and any (qualified) identifier
  44. " enclosed in `backquotes`. An operator starting with : is a constructor,
  45. " others are variables (e.g. functions).
  46. syn match hsVarSym "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[-!#$%&\*\+/<=>\?@\\^|~.][-!#$%&\*\+/<=>\?@\\^|~:.]*"
  47. syn match hsConSym "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=:[-!#$%&\*\+./<=>\?@\\^|~:]*"
  48. syn match hsVarSym "`\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[a-z][a-zA-Z0-9_']*`"
  49. syn match hsConSym "`\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[A-Z][a-zA-Z0-9_']*`"
  50. " Reserved symbols--cannot be overloaded.
  51. syn match hsDelimiter "(\|)\|\[\|\]\|,\|;\|_\|{\|}"
  52. " Strings and constants
  53. syn match hsSpecialChar contained "\\\([0-9]\+\|o[0-7]\+\|x[0-9a-fA-F]\+\|[\"\\'&\\abfnrtv]\|^[A-Z^_\[\\\]]\)"
  54. syn match hsSpecialChar contained "\\\(NUL\|SOH\|STX\|ETX\|EOT\|ENQ\|ACK\|BEL\|BS\|HT\|LF\|VT\|FF\|CR\|SO\|SI\|DLE\|DC1\|DC2\|DC3\|DC4\|NAK\|SYN\|ETB\|CAN\|EM\|SUB\|ESC\|FS\|GS\|RS\|US\|SP\|DEL\)"
  55. syn match hsSpecialCharError contained "\\&\|'''\+"
  56. syn region hsString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=hsSpecialChar
  57. syn match hsCharacter "[^a-zA-Z0-9_']'\([^\\]\|\\[^']\+\|\\'\)'"lc=1 contains=hsSpecialChar,hsSpecialCharError
  58. syn match hsCharacter "^'\([^\\]\|\\[^']\+\|\\'\)'" contains=hsSpecialChar,hsSpecialCharError
  59. syn match hsNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>"
  60. syn match hsFloat "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>"
  61. " Keyword definitions. These must be patters instead of keywords
  62. " because otherwise they would match as keywords at the start of a
  63. " "literate" comment (see lhs.vim).
  64. syn match hsModule "\<module\>"
  65. syn match hsImport "\<import\>.*"he=s+6 contains=hsImportMod,hsLineComment,hsBlockComment
  66. syn match hsImportMod contained "\<\(as\|qualified\|hiding\)\>"
  67. syn match hsInfix "\<\(infix\|infixl\|infixr\)\>"
  68. syn match hsStructure "\<\(class\|data\|deriving\|instance\|default\|where\)\>"
  69. syn match hsTypedef "\<\(type\|newtype\)\>"
  70. syn match hsStatement "\<\(do\|case\|of\|let\|in\)\>"
  71. syn match hsConditional "\<\(if\|then\|else\)\>"
  72. " Not real keywords, but close.
  73. if exists("hs_highlight_boolean")
  74. " Boolean constants from the standard prelude.
  75. syn match hsBoolean "\<\(True\|False\)\>"
  76. endif
  77. if exists("hs_highlight_types")
  78. " Primitive types from the standard prelude and libraries.
  79. syn match hsType "\<\(Int\|Integer\|Char\|Bool\|Float\|Double\|IO\|Void\|Addr\|Array\|String\)\>"
  80. endif
  81. if exists("hs_highlight_more_types")
  82. " Types from the standard prelude libraries.
  83. syn match hsType "\<\(Maybe\|Either\|Ratio\|Complex\|Ordering\|IOError\|IOResult\|ExitCode\)\>"
  84. syn match hsMaybe "\<Nothing\>"
  85. syn match hsExitCode "\<\(ExitSuccess\)\>"
  86. syn match hsOrdering "\<\(GT\|LT\|EQ\)\>"
  87. endif
  88. if exists("hs_highlight_debug")
  89. " Debugging functions from the standard prelude.
  90. syn match hsDebug "\<\(undefined\|error\|trace\)\>"
  91. endif
  92. " Comments
  93. syn match hsLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$"
  94. syn region hsBlockComment start="{-" end="-}" contains=hsBlockComment
  95. syn region hsPragma start="{-#" end="#-}"
  96. " C Preprocessor directives. Shamelessly ripped from c.vim and trimmed
  97. " First, see whether to flag directive-like lines or not
  98. if (!exists("hs_allow_hash_operator"))
  99. syn match cError display "^\s*\(%:\|#\).*$"
  100. endif
  101. " Accept %: for # (C99)
  102. syn region cPreCondit start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=cComment,cCppString,cCommentError
  103. syn match cPreCondit display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
  104. syn region cCppOut start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2
  105. syn region cCppOut2 contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cCppSkip
  106. syn region cCppSkip contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cCppSkip
  107. syn region cIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
  108. syn match cIncluded display contained "<[^>]*>"
  109. syn match cInclude display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded
  110. syn cluster cPreProcGroup contains=cPreCondit,cIncluded,cInclude,cDefine,cCppOut,cCppOut2,cCppSkip,cCommentStartError
  111. syn region cDefine matchgroup=cPreCondit start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$"
  112. syn region cPreProc matchgroup=cPreCondit start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend
  113. syn region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=cCommentStartError,cSpaceError contained
  114. syntax match cCommentError display "\*/" contained
  115. syntax match cCommentStartError display "/\*"me=e-1 contained
  116. syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial contained
  117. " Define the default highlighting.
  118. " For version 5.7 and earlier: only when not done already
  119. " For version 5.8 and later: only when an item doesn't have highlighting yet
  120. if version >= 508 || !exists("did_hs_syntax_inits")
  121. if version < 508
  122. let did_hs_syntax_inits = 1
  123. command -nargs=+ HiLink hi link <args>
  124. else
  125. command -nargs=+ HiLink hi def link <args>
  126. endif
  127. HiLink hsModule hsStructure
  128. HiLink hsImport Include
  129. HiLink hsImportMod hsImport
  130. HiLink hsInfix PreProc
  131. HiLink hsStructure Structure
  132. HiLink hsStatement Statement
  133. HiLink hsConditional Conditional
  134. HiLink hsSpecialChar SpecialChar
  135. HiLink hsTypedef Typedef
  136. HiLink hsVarSym hsOperator
  137. HiLink hsConSym hsOperator
  138. HiLink hsOperator Operator
  139. if exists("hs_highlight_delimiters")
  140. " Some people find this highlighting distracting.
  141. HiLink hsDelimiter Delimiter
  142. endif
  143. HiLink hsSpecialCharError Error
  144. HiLink hsString String
  145. HiLink hsCharacter Character
  146. HiLink hsNumber Number
  147. HiLink hsFloat Float
  148. HiLink hsConditional Conditional
  149. HiLink hsLiterateComment hsComment
  150. HiLink hsBlockComment hsComment
  151. HiLink hsLineComment hsComment
  152. HiLink hsComment Comment
  153. HiLink hsPragma SpecialComment
  154. HiLink hsBoolean Boolean
  155. HiLink hsType Type
  156. HiLink hsMaybe hsEnumConst
  157. HiLink hsOrdering hsEnumConst
  158. HiLink hsEnumConst Constant
  159. HiLink hsDebug Debug
  160. HiLink cCppString hsString
  161. HiLink cCommentStart hsComment
  162. HiLink cCommentError hsError
  163. HiLink cCommentStartError hsError
  164. HiLink cInclude Include
  165. HiLink cPreProc PreProc
  166. HiLink cDefine Macro
  167. HiLink cIncluded hsString
  168. HiLink cError Error
  169. HiLink cPreCondit PreCondit
  170. HiLink cComment Comment
  171. HiLink cCppSkip cCppOut
  172. HiLink cCppOut2 cCppOut
  173. HiLink cCppOut Comment
  174. delcommand HiLink
  175. endif
  176. let b:current_syntax = "haskell"
  177. " Options for vi: ts=8 sw=2 sts=2 nowrap noexpandtab ft=vim