aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--haskell.vim68
1 files changed, 68 insertions, 0 deletions
diff --git a/haskell.vim b/haskell.vim
new file mode 100644
index 00000000..0084630c
--- /dev/null
+++ b/haskell.vim
@@ -0,0 +1,68 @@
+" Attempt to add haddock highlighting for haskell comments
+" It should be placed in ~/.vim/after/syntax/haskell.vim
+" Brad Bowman <haddock.vim@bereft.net>
+
+syn match hsHdocChunk "$\i\+" contained
+syn match hsHdocMod /"\(\i\|[.]\)\+"/ contained
+syn match hsHdocLink "'\(\i\|[.#]\)\+'" contained
+syn region hsHdocAnchor start="\\\@<!#" skip="\\#" end="\\\@<!#" contained oneline
+" I think emphasis can span multiple lines
+syn region hsHdocEm start="\\\@<!/" skip="\\/" end="\\\@!/" contained oneline
+syn region hsHdocURL start="\\\@<!<" end="\\\@<!>" contained oneline
+syn region hsHdocCode start="\\\@<!@" skip="\\@" end="\\\@<!@" contained oneline
+syn region hsHdocBCodeBlock start="^@\(\s\|$\)" end="^@\s*$" contained
+syn region hsHdocLCodeBlock start="\(^\s*--\s*\)\@<=@\s*$" end="\(^\s*--\s*\)\@<=@\s*$" contained
+syn match hsHdocBHeading "^\s*\*\+" contained
+syn match hsHdocLHeading "\(^\s*--\s*\)\@<=\*\+" contained
+syn match hsHdocBTracks "^\s*>" contained
+" match only the > using a look-behind
+syn match hsHdocLTracks "\(^\s*--\s*\)\@<=>" contained
+
+" todo: numbered lists, mark haddock start separately
+"syn match hsHdocStart "\([$^|]\|\*\+\)" contained
+
+syn cluster hsHdocSpecial
+ \ contains=hsHdocMod,hsHdocLink,hsHdocEm,hsHdocCode,hsHdocURL,
+ \ hsHdocAnchor,hsHdocChunk
+
+syn region hsHdocDef start="^\s*\(--\)\?\s*\[" end="\]" contained contains=hsHdocSpecial
+
+syn region hsHdocLines start="--\s*\([$\^|]\|\*\+\)"
+ \ skip="^\s*\(--.*\)$"
+ \ end="^\s*\(\$\|--\)\@!"
+ \ contains=@hsHdocSpecial,hsHdocLTracks,hsHdocLHeading,hsHdocLCodeBlock,hsHdocDef
+syn region hsHdocBlock start="{-\s*\([$\^|]\|\*\+\)" end="-}"
+ \ contains=@hsHdocSpecial,hsHdocBTracks,hsHdocBHeading,hsHdocBCodeBlock,hsHdocDef
+
+syn sync minlines=20
+
+if version >= 508 || !exists("did_haddock_syntax_inits")
+ if version < 508
+ let did_haddock_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink hsHdocLines hsHdoc
+ HiLink hsHdocBlock hsHdoc
+ HiLink hsHdoc PreProc
+ HiLink hsHdocAnchor Special
+ HiLink hsHdocChunk Special
+ HiLink hsHdocMod Special
+ HiLink hsHdocLink Special
+ HiLink hsHdocEm Special
+ HiLink hsHdocURL Special
+ HiLink hsHdocCode Special
+ HiLink hsHdocLHeading Special
+ HiLink hsHdocBHeading Special
+ HiLink hsHdocLTracks Special
+ HiLink hsHdocBTracks Special
+ HiLink hsHdocBCodeBlock Special
+ HiLink hsHdocLCodeBlock Special
+ HiLink hsHdocSpecial Special
+
+ delcommand HiLink
+endif
+
+" Options for vi: sw=2 sts=2 nowrap ft=vim