summaryrefslogtreecommitdiffstats
path: root/syntax/cabal.vim
diff options
context:
space:
mode:
Diffstat (limited to 'syntax/cabal.vim')
-rw-r--r--syntax/cabal.vim188
1 files changed, 46 insertions, 142 deletions
diff --git a/syntax/cabal.vim b/syntax/cabal.vim
index f0ede997..7a48a638 100644
--- a/syntax/cabal.vim
+++ b/syntax/cabal.vim
@@ -1,151 +1,55 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haskell') == -1
-" Vim syntax file
-" Language: Cabal
-" Author: Tristan Ravitch
-" Version: 0.0.1
+" syntax highlighting for cabal
+"
+" author: raichoo (raichoo@googlemail.com)
if version < 600
- syntax clear
-elseif exists('b:current_syntax')
+ syn clear
+elseif exists("b:current_syntax")
finish
endif
-syn sync minlines=50 maxlines=200
-syn case ignore
-
-" Top-level package keywords
-syn match cabalKey '^name:'
-syn match cabalKey '^version:'
-syn match cabalKey '^cabal-version:'
-syn match cabalKey '^build-type:'
-syn match cabalKey '^license:'
-syn match cabalKey '^license-file:'
-syn match cabalKey '^copyright:'
-syn match cabalKey '^author:'
-syn match cabalKey '^maintainer:'
-syn match cabalKey '^stability:'
-syn match cabalKey '^homepage:'
-syn match cabalKey '^bug-reports:'
-syn match cabalKey '^package-url:'
-syn match cabalKey '^synopsis:'
-syn match cabalKey '^description:'
-syn match cabalKey '^category:'
-syn match cabalKey '^tested-with:'
-syn match cabalKey '^data-files:'
-syn match cabalKey '^data-dir:'
-syn match cabalKey '^extra-source-files:'
-syn match cabalKey '^extra-tmp-files:'
-
-" Other keywords
-syn match cabalLit '\(:\s*\)\@<=\(true\|false\)'
-
-" Library-specifics
-syn region cabalLibraryR start='^library\(\s\|$\)\@=' end='^\w' transparent keepend contains=cabalLibrayKey,cabalBuildKey,cabalCondition,cabalOperator
-syn match cabalLibraryKey '^library\(\s\|$\)\@='
-syn match cabalLibraryKey '\(^\s\+\)\@<=exposed-modules:'
-syn match cabalLibraryKey '\(^\s\+\)\@<=exposed:'
-
-" Executable-specifics
-syn region cabalExeR start='^executable\s\@=' end='^\w' transparent keepend contains=cabalExeKey,cabalBuildKey,cabalCondition,cabalOperator,cabalBuildableName
-syn match cabalExeKey '^executable\s\@='
-syn match cabalExeKey '\(^\s\+\)\@<=main-is:'
-
-" Test-specifics
-syn region cabalTestR start='^test-suite\s\@=' end='^\w' transparent keepend contains=cabalTestKey,cabalBuildKey,cabalCondition,cabalOperator,cabalBuildableName
-syn match cabalTestKey '^test-suite\s\@='
-syn match cabalTestKey '\(^\s\+\)\@<=type:'
-syn match cabalTestKey '\(^\s\+\)\@<=main-is:'
-syn match cabalTestKey '\(^\s\+\)\@<=test-module:'
-
-" Benchmark-specifics
-syn region cabalBenchR start='^benchmark\s\@=' end='^\w' transparent keepend contains=cabalBenchKey,cabalBuildKey,cabalCondition,cabalOperator,cabalBuildableName
-syn match cabalBenchKey '^benchmark\s\@='
-syn match cabalBenchKey '\(^\s\+\)\@<=type:'
-syn match cabalBenchKey '\(^\s\+\)\@<=main-is:'
-
-syn match cabalBuildableName '\(^\(^benchmark\|test-suite\|executable\)\s\+\)\@<=\w\+'
-
-" General build info
-syn match cabalBuildKey '\(^\s\+\)\@<=default-language:'
-syn match cabalBuildKey '\(^\s\+\)\@<=build-depends:'
-syn match cabalBuildKey '\(^\s\+\)\@<=other-modules:'
-syn match cabalBuildKey '\(^\s\+\)\@<=hs-source-dirs:'
-syn match cabalBuildKey '\(^\s\+\)\@<=extensions:'
-syn match cabalBuildKey '\(^\s\+\)\@<=build-tools:'
-syn match cabalBuildKey '\(^\s\+\)\@<=buildable:'
-syn match cabalBuildKey '\(^\s\+\)\@<=ghc-options:'
-syn match cabalBuildKey '\(^\s\+\)\@<=ghc-prof-options:'
-syn match cabalBuildKey '\(^\s\+\)\@<=ghc-shared-options:'
-syn match cabalBuildKey '\(^\s\+\)\@<=hugs-options:'
-syn match cabalBuildKey '\(^\s\+\)\@<=nch98-options:'
-syn match cabalBuildKey '\(^\s\+\)\@<=includes:'
-syn match cabalBuildKey '\(^\s\+\)\@<=install-includes:'
-syn match cabalBuildKey '\(^\s\+\)\@<=include-dirs:'
-syn match cabalBuildKey '\(^\s\+\)\@<=c-sources:'
-syn match cabalBuildKey '\(^\s\+\)\@<=extra-libraries:'
-syn match cabalBuildKey '\(^\s\+\)\@<=extra-lib-dirs:'
-syn match cabalBuildKey '\(^\s\+\)\@<=cc-options:'
-syn match cabalBuildKey '\(^\s\+\)\@<=cpp-options:'
-syn match cabalBuildKey '\(^\s\+\)\@<=ld-options:'
-syn match cabalBuildKey '\(^\s\+\)\@<=pkgconfig-depends:'
-syn match cabalBuildKey '\(^\s\+\)\@<=frameworks:'
-
-syn region cabalFlagR start='^flag\s\@=' end='^\w' transparent keepend contains=cabalFlagKey,cabalCondition,cabalFlag
-syn match cabalFlagKey '^flag\s\@='
-syn match cabalFlagKey '\(^\s\+\)\@<=description:'
-syn match cabalFlagKey '\(^\s\+\)\@<=default:'
-syn match cabalFlagKey '\(^\s\+\)\@<=manual:'
-syn match cabalFlag '\(flag\s\+\)\@<=\w\+'
-syn match cabalFlag '\(flag(\)\@<=\w\+)\@='
-
-syn region cabalSourceR start='^source-repository' end='^\w' transparent keepend contains=cabalSourceKey
-syn match cabalSourceKey '^source-repository\s\@='
-syn match cabalSourceKey '\(^\s\+\)\@<=type:'
-syn match cabalSourceKey '\(^\s\+\)\@<=location:'
-syn match cabalSourceKey '\(^\s\+\)\@<=module:'
-syn match cabalSourceKey '\(^\s\+\)\@<=branch:'
-syn match cabalSourceKey '\(^\s\+\)\@<=tag:'
-syn match cabalSourceKey '\(^\s\+\)\@<=subdir:'
-
-syn match cabalCondition '\(^\s\+\)\@<=if\((\|\s\)\@='
-syn match cabalCondition '\(^\s\+\)\@<=else\($\|\s\)\@='
-syn match cabalCondition '\(^\s\+\)\@<=if\((\|\s\)\@='
-syn match cabalCondition '\(^\s\+\)\@<=else\($\|\s\)\@='
-syn match cabalOperator '\W\@<=os\((.\+)\)\@='
-syn match cabalOperator '\W\@<=arch\((.\+)\)\@='
-syn match cabalOperator '\W\@<=impl\((.\+)\)\@='
-syn match cabalOperator '\W\@<=flag\((.\+)\)\@='
-syn match cabalOperator '\(^\s*--.*\)\@<!\(<\|>\|=\|||\|&&\)'
-
-syn match cabalComment '--.*$' contains=@Spell
-
-if version >= 508 || !exists('did_cabal_syntax_inits')
- if version < 508
- let did_cabal_syntax_inits = 1
- command -nargs=+ HiLink hi link <args>
- else
- command -nargs=+ HiLink hi def link <args>
- endif
-
- HiLink cabalBuildableName Structure
- HiLink cabalFlag Special
- HiLink cabalComment Comment
- HiLink cabalCondition Conditional
- HiLink cabalSourceKey Keyword
- HiLink cabalOperator Operator
- HiLink cabalKey Keyword
- HiLink cabalLibraryKey Keyword
- HiLink cabalTestKey Keyword
- HiLink cabalExeKey Keyword
- HiLink cabalBenchKey Keyword
- HiLink cabalBuildKey Keyword
- HiLink cabalFlagKey Keyword
- HiLink cabalLit Constant
-
- delcommand HiLink
-endif
-
-let b:current_syntax = 'cabal'
+syn match cabalLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$" contains=@Spell
+syn match cabalIdentifier "[A-Za-z\-]*" contained
+syn match cabalOperator "[<=>&|!]"
+syn match cabalColon ":" contained
+syn match cabalNumber "\<[0-9][0-9\.*]*\>"
+syn match cabalDelimiter "[,()]"
+syn keyword cabalBool True False
+syn keyword cabalConditional if else
+syn match cabalCompilerFlag "\s\+-[^ -][^ ]*"
+syn match cabalDocBulletPoint "^\s\+\*"
+syn match cabalDocHeadline "^\s\+=.*$"
+syn match cabalDocCode "^\s\+>.*$"
+syn match cabalDocNewline "^\s\+\.\s*$"
+syn match cabalSection "^\c\(executable\|library\|flag\|source-repository\|test-suite\|benchmark\)"
+syn match cabalEntry "^\s*[A-Za-z][a-zA-Z\-]*:" contains=cabalIdentifier,cabalColon
+
+syn region cabalDescription start="^\s*[dD]escription:" end="^\<" keepend
+ \ contains=
+ \ cabalEntry,
+ \ cabalLineComment,
+ \ cabalDocBulletPoint,
+ \ cabalDocHeadline,
+ \ cabalDocNewline,
+ \ cabalDocCode
+
+highlight def link cabalIdentifier Identifier
+highlight def link cabalLineComment Comment
+highlight def link cabalOperator Operator
+highlight def link cabalColon Operator
+highlight def link cabalNumber Number
+highlight def link cabalSection Structure
+highlight def link cabalDelimiter Delimiter
+highlight def link cabalBool Boolean
+highlight def link cabalCompilerFlag Macro
+highlight def link cabalConditional Conditional
+highlight def link cabalDocBulletPoint Structure
+highlight def link cabalDocHeadline Include
+highlight def link cabalDocNewline Operator
+highlight def link cabalDocCode Macro
+
+let b:current_syntax = "cabal"
endif