100a927d6SBram Moolenaar" Vim syntax file 200a927d6SBram Moolenaar" Language: Haskell Cabal Build file 37c63fbc4SBram Moolenaar" Author: Vincent Berthoux <[email protected]> 47c63fbc4SBram Moolenaar" Maintainer: Marcin Szamotulski <[email protected]> 57c63fbc4SBram Moolenaar" Previous Maintainer: Vincent Berthoux <[email protected]> 600a927d6SBram Moolenaar" File Types: .cabal 7*23515b4eSBram Moolenaar" Last Change: 21 Nov 2020 87c63fbc4SBram Moolenaar" v1.5: Incorporated changes from 97c63fbc4SBram Moolenaar" https://github.com/sdiehl/haskell-vim-proto/blob/master/vim/syntax/cabal.vim 107c63fbc4SBram Moolenaar" Use `syn keyword` instead of `syn match`. 117c63fbc4SBram Moolenaar" Added cabalStatementRegion to limit matches of keywords, which fixes 127c63fbc4SBram Moolenaar" the highlighting of description's value. 137c63fbc4SBram Moolenaar" Added cabalVersionRegion to limit the scope of cabalVersionOperator 147c63fbc4SBram Moolenaar" and cabalVersion matches. 157c63fbc4SBram Moolenaar" Added cabalLanguage keyword. 167c63fbc4SBram Moolenaar" Added calbalTitle, cabalAuthor and cabalMaintainer syntax groups. 177c63fbc4SBram Moolenaar" Added ! and ^>= operators (calbal 2.0) 187c63fbc4SBram Moolenaar" Added build-type keywords 197c63fbc4SBram Moolenaar" v1.4: Add benchmark support, thanks to Simon Meier 2000a927d6SBram Moolenaar" v1.3: Updated to the last version of cabal 2100a927d6SBram Moolenaar" Added more highlighting for cabal function, true/false 2200a927d6SBram Moolenaar" and version number. Also added missing comment highlighting. 2300a927d6SBram Moolenaar" Cabal known compiler are highlighted too. 2400a927d6SBram Moolenaar" 2500a927d6SBram Moolenaar" V1.2: Added cpp-options which was missing. Feature implemented 2600a927d6SBram Moolenaar" by GHC, found with a GHC warning, but undocumented. 2700a927d6SBram Moolenaar" Whatever... 2800a927d6SBram Moolenaar" 2900a927d6SBram Moolenaar" v1.1: Fixed operator problems and added ftdetect file 3000a927d6SBram Moolenaar" (thanks to Sebastian Schwarz) 3100a927d6SBram Moolenaar" 3200a927d6SBram Moolenaar" v1.0: Cabal syntax in vimball format 3300a927d6SBram Moolenaar" (thanks to Magnus Therning) 3400a927d6SBram Moolenaar 3589bcfda6SBram Moolenaar" quit when a syntax file was already loaded 3689bcfda6SBram Moolenaarif exists("b:current_syntax") 3700a927d6SBram Moolenaar finish 3800a927d6SBram Moolenaarendif 3900a927d6SBram Moolenaar 407c63fbc4SBram Moolenaar" this file uses line continuation 417c63fbc4SBram Moolenaarlet s:cpo_save = &cpo 427c63fbc4SBram Moolenaarset cpo&vim 437c63fbc4SBram Moolenaar 447c63fbc4SBram Moolenaar" set iskeyword for this syntax script 457c63fbc4SBram Moolenaarsyn iskeyword @,48-57,192-255,- 467c63fbc4SBram Moolenaar 477c63fbc4SBram Moolenaar" Case sensitive matches 487c63fbc4SBram Moolenaarsyn case match 4900a927d6SBram Moolenaar 5000a927d6SBram Moolenaarsyn keyword cabalConditional if else 5100a927d6SBram Moolenaarsyn keyword cabalFunction os arche impl flag 5200a927d6SBram Moolenaarsyn match cabalComment /--.*$/ 5300a927d6SBram Moolenaar 547c63fbc4SBram Moolenaar" Case insensitive matches 557c63fbc4SBram Moolenaarsyn case ignore 5600a927d6SBram Moolenaar 577c63fbc4SBram Moolenaarsyn keyword cabalCategory contained 587c63fbc4SBram Moolenaar \ executable 597c63fbc4SBram Moolenaar \ library 607c63fbc4SBram Moolenaar \ benchmark 617c63fbc4SBram Moolenaar \ test-suite 627c63fbc4SBram Moolenaar \ source-repository 637c63fbc4SBram Moolenaar \ flag 647c63fbc4SBram Moolenaar \ custom-setup 654f4d51a9SBram Moolenaar \ common 667c63fbc4SBram Moolenaarsyn match cabalCategoryTitle contained /[^{]*\ze{\?/ 677c63fbc4SBram Moolenaarsyn match cabalCategoryRegion 687c63fbc4SBram Moolenaar \ contains=cabalCategory,cabalCategoryTitle 697c63fbc4SBram Moolenaar \ nextgroup=cabalCategory skipwhite 704f4d51a9SBram Moolenaar \ /^\c\s*\(contained\|executable\|library\|benchmark\|test-suite\|source-repository\|flag\|custom-setup\|common\)\+\s*\%(.*$\|$\)/ 717c63fbc4SBram Moolenaarsyn keyword cabalTruth true false 7200a927d6SBram Moolenaar 737c63fbc4SBram Moolenaar" cabalStatementRegion which limits the scope of cabalStatement keywords, this 747c63fbc4SBram Moolenaar" way they are not highlighted in description. 757c63fbc4SBram Moolenaarsyn region cabalStatementRegion start=+^\s*\(--\)\@<!\k\+\s*:+ end=+:+ 767c63fbc4SBram Moolenaarsyn keyword cabalStatement contained containedin=cabalStatementRegion 777c63fbc4SBram Moolenaar \ default-language 787c63fbc4SBram Moolenaar \ default-extensions 797c63fbc4SBram Moolenaar \ author 804f4d51a9SBram Moolenaar \ autogen-modules 81*23515b4eSBram Moolenaar \ asm-sources 82*23515b4eSBram Moolenaar \ asm-options 837c63fbc4SBram Moolenaar \ branch 847c63fbc4SBram Moolenaar \ bug-reports 857c63fbc4SBram Moolenaar \ build-depends 867c63fbc4SBram Moolenaar \ build-tools 87*23515b4eSBram Moolenaar \ build-tools-depends 887c63fbc4SBram Moolenaar \ build-type 897c63fbc4SBram Moolenaar \ buildable 907c63fbc4SBram Moolenaar \ c-sources 917c63fbc4SBram Moolenaar \ cabal-version 927c63fbc4SBram Moolenaar \ category 937c63fbc4SBram Moolenaar \ cc-options 947c63fbc4SBram Moolenaar \ copyright 95*23515b4eSBram Moolenaar \ cmm-sources 96*23515b4eSBram Moolenaar \ cmm-options 977c63fbc4SBram Moolenaar \ cpp-options 98*23515b4eSBram Moolenaar \ cxx-sources 997c63fbc4SBram Moolenaar \ data-dir 1007c63fbc4SBram Moolenaar \ data-files 1017c63fbc4SBram Moolenaar \ default 102*23515b4eSBram Moolenaar \ default-extensions 1037c63fbc4SBram Moolenaar \ description 1047c63fbc4SBram Moolenaar \ executable 1057c63fbc4SBram Moolenaar \ exposed-modules 1067c63fbc4SBram Moolenaar \ exposed 1077c63fbc4SBram Moolenaar \ extensions 108*23515b4eSBram Moolenaar \ extra-bundled-libraries 1097c63fbc4SBram Moolenaar \ extra-doc-files 110*23515b4eSBram Moolenaar \ extra-dynamic-library-flavours 111*23515b4eSBram Moolenaar \ extra-framework-dirs 112*23515b4eSBram Moolenaar \ extra-ghci-libraries 1137c63fbc4SBram Moolenaar \ extra-lib-dirs 1147c63fbc4SBram Moolenaar \ extra-libraries 115*23515b4eSBram Moolenaar \ extra-library-flavours 1167c63fbc4SBram Moolenaar \ extra-source-files 117*23515b4eSBram Moolenaar \ extra-tmp-files 1187c63fbc4SBram Moolenaar \ for example 1197c63fbc4SBram Moolenaar \ frameworks 1207c63fbc4SBram Moolenaar \ ghc-options 1217c63fbc4SBram Moolenaar \ ghc-prof-options 1227c63fbc4SBram Moolenaar \ ghc-shared-options 123*23515b4eSBram Moolenaar \ ghcjs-options 124*23515b4eSBram Moolenaar \ ghcjs-prof-options 125*23515b4eSBram Moolenaar \ ghcjs-shared-options 1267c63fbc4SBram Moolenaar \ homepage 127*23515b4eSBram Moolenaar \ hs-source-dir 1287c63fbc4SBram Moolenaar \ hs-source-dirs 1297c63fbc4SBram Moolenaar \ hugs-options 1304f4d51a9SBram Moolenaar \ import 1317c63fbc4SBram Moolenaar \ include-dirs 1327c63fbc4SBram Moolenaar \ includes 1337c63fbc4SBram Moolenaar \ install-includes 134*23515b4eSBram Moolenaar \ js-sources 1357c63fbc4SBram Moolenaar \ ld-options 1367c63fbc4SBram Moolenaar \ license 1377c63fbc4SBram Moolenaar \ license-file 1387c63fbc4SBram Moolenaar \ location 1397c63fbc4SBram Moolenaar \ main-is 1407c63fbc4SBram Moolenaar \ maintainer 1417c63fbc4SBram Moolenaar \ manual 142*23515b4eSBram Moolenaar \ mixins 1437c63fbc4SBram Moolenaar \ module 1447c63fbc4SBram Moolenaar \ name 1457c63fbc4SBram Moolenaar \ nhc98-options 1467c63fbc4SBram Moolenaar \ other-extensions 147*23515b4eSBram Moolenaar \ other-language 148*23515b4eSBram Moolenaar \ other-languages 1497c63fbc4SBram Moolenaar \ other-modules 1507c63fbc4SBram Moolenaar \ package-url 1517c63fbc4SBram Moolenaar \ pkgconfig-depends 1527c63fbc4SBram Moolenaar \ setup-depends 1537c63fbc4SBram Moolenaar \ stability 1547c63fbc4SBram Moolenaar \ subdir 1557c63fbc4SBram Moolenaar \ synopsis 1567c63fbc4SBram Moolenaar \ tag 1577c63fbc4SBram Moolenaar \ tested-with 1587c63fbc4SBram Moolenaar \ type 1597c63fbc4SBram Moolenaar \ version 1607c63fbc4SBram Moolenaar \ virtual-modules 16100a927d6SBram Moolenaar 1627c63fbc4SBram Moolenaar" operators and version operators 1637c63fbc4SBram Moolenaarsyn match cabalOperator /&&\|||\|!/ 1647c63fbc4SBram Moolenaarsyn match cabalVersionOperator contained 1657c63fbc4SBram Moolenaar \ /!\|==\|\^\?>=\|<=\|<\|>/ 1667c63fbc4SBram Moolenaar" match version: `[%]\@<!` is to exclude `%20` in http addresses. 1677c63fbc4SBram Moolenaarsyn match cabalVersion contained 1687c63fbc4SBram Moolenaar \ /[%$_-]\@<!\<\d\+\%(\.\d\+\)*\%(\.\*\)\?\>/ 1697c63fbc4SBram Moolenaar" cabalVersionRegion which limits the scope of cabalVersion pattern. 1707c63fbc4SBram Moolenaarsyn match cabalVersionRegionA 1717c63fbc4SBram Moolenaar \ contains=cabalVersionOperator,cabalVersion 1727c63fbc4SBram Moolenaar \ keepend 1737c63fbc4SBram Moolenaar \ /\%(==\|\^\?>=\|<=\|<\|>\)\s*\d\+\%(\.\d\+\)*\%(\.\*\)\?\>/ 1747c63fbc4SBram Moolenaar" version inside `version: ...` 1757c63fbc4SBram Moolenaarsyn match cabalVersionRegionB 1767c63fbc4SBram Moolenaar \ contains=cabalStatementRegion,cabalVersionOperator,cabalVersion 1777c63fbc4SBram Moolenaar \ /^\s*\%(cabal-\)\?version\s*:.*$/ 1787c63fbc4SBram Moolenaar 1797c63fbc4SBram Moolenaarsyn keyword cabalLanguage Haskell98 Haskell2010 1807c63fbc4SBram Moolenaar 1817c63fbc4SBram Moolenaar" title region 1827c63fbc4SBram Moolenaarsyn match cabalName contained /:\@<=.*/ 1837c63fbc4SBram Moolenaarsyn match cabalNameRegion 1847c63fbc4SBram Moolenaar \ contains=cabalStatementRegion,cabalName 1857c63fbc4SBram Moolenaar \ nextgroup=cabalStatementRegion 1867c63fbc4SBram Moolenaar \ oneline 1877c63fbc4SBram Moolenaar \ /^\c\s*name\s*:.*$/ 1887c63fbc4SBram Moolenaar 1897c63fbc4SBram Moolenaar" author region 1907c63fbc4SBram Moolenaarsyn match cabalAuthor contained /:\@<=.*/ 1917c63fbc4SBram Moolenaarsyn match cabalAuthorRegion 1927c63fbc4SBram Moolenaar \ contains=cabalStatementRegion,cabalStatement,cabalAuthor 1937c63fbc4SBram Moolenaar \ nextgroup=cabalStatementRegion 1947c63fbc4SBram Moolenaar \ oneline 1957c63fbc4SBram Moolenaar \ /^\c\s*author\s*:.*$/ 1967c63fbc4SBram Moolenaar 1977c63fbc4SBram Moolenaar" maintainer region 1987c63fbc4SBram Moolenaarsyn match cabalMaintainer contained /:\@<=.*/ 1997c63fbc4SBram Moolenaarsyn match cabalMaintainerRegion 2007c63fbc4SBram Moolenaar \ contains=cabalStatementRegion,cabalStatement,cabalMaintainer 2017c63fbc4SBram Moolenaar \ nextgroup=cabalStatementRegion 2027c63fbc4SBram Moolenaar \ oneline 2037c63fbc4SBram Moolenaar \ /^\c\s*maintainer\s*:.*$/ 2047c63fbc4SBram Moolenaar 2057c63fbc4SBram Moolenaar" license region 2067c63fbc4SBram Moolenaarsyn match cabalLicense contained /:\@<=.*/ 2077c63fbc4SBram Moolenaarsyn match cabalLicenseRegion 2087c63fbc4SBram Moolenaar \ contains=cabalStatementRegion,cabalStatement,cabalLicense 2097c63fbc4SBram Moolenaar \ nextgroup=cabalStatementRegion 2107c63fbc4SBram Moolenaar \ oneline 2117c63fbc4SBram Moolenaar \ /^\c\s*license\s*:.*$/ 2127c63fbc4SBram Moolenaar 2137c63fbc4SBram Moolenaar" license-file region 2147c63fbc4SBram Moolenaarsyn match cabalLicenseFile contained /:\@<=.*/ 2157c63fbc4SBram Moolenaarsyn match cabalLicenseFileRegion 2167c63fbc4SBram Moolenaar \ contains=cabalStatementRegion,cabalStatement,cabalLicenseFile 2177c63fbc4SBram Moolenaar \ nextgroup=cabalStatementRegion 2187c63fbc4SBram Moolenaar \ oneline 2197c63fbc4SBram Moolenaar \ /^\c\s*license-file\s*:.*$/ 2207c63fbc4SBram Moolenaar 2217c63fbc4SBram Moolenaar" tested-with region with compilers and versions 2227c63fbc4SBram Moolenaarsyn keyword cabalCompiler contained ghc nhc yhc hugs hbc helium jhc lhc 2237c63fbc4SBram Moolenaarsyn match cabalTestedWithRegion 2247c63fbc4SBram Moolenaar \ contains=cabalStatementRegion,cabalStatement,cabalCompiler,cabalVersionRegionA 2257c63fbc4SBram Moolenaar \ nextgroup=cabalStatementRegion 2267c63fbc4SBram Moolenaar \ oneline 2277c63fbc4SBram Moolenaar \ /^\c\s*tested-with\s*:.*$/ 2287c63fbc4SBram Moolenaar 2297c63fbc4SBram Moolenaar" build type keywords 2307c63fbc4SBram Moolenaarsyn keyword cabalBuildType contained 2317c63fbc4SBram Moolenaar \ simple custom configure 2327c63fbc4SBram Moolenaarsyn match cabalBuildTypeRegion 2337c63fbc4SBram Moolenaar \ contains=cabalStatementRegion,cabalStatement,cabalBuildType 2347c63fbc4SBram Moolenaar \ nextgroup=cabalStatementRegion 2357c63fbc4SBram Moolenaar \ /^\c\s*build-type\s*:.*$/ 23600a927d6SBram Moolenaar 23700a927d6SBram Moolenaar" Define the default highlighting. 23889bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet 2397c63fbc4SBram Moolenaarhi def link cabalName Title 2407c63fbc4SBram Moolenaarhi def link cabalAuthor Normal 2417c63fbc4SBram Moolenaarhi def link cabalMaintainer Normal 2427c63fbc4SBram Moolenaarhi def link cabalCategoryTitle Title 2437c63fbc4SBram Moolenaarhi def link cabalLicense Normal 2447c63fbc4SBram Moolenaarhi def link cabalLicenseFile Normal 2457c63fbc4SBram Moolenaarhi def link cabalBuildType Keyword 246f37506f6SBram Moolenaarhi def link cabalVersion Number 247f37506f6SBram Moolenaarhi def link cabalTruth Boolean 248f37506f6SBram Moolenaarhi def link cabalComment Comment 249f37506f6SBram Moolenaarhi def link cabalStatement Statement 2507c63fbc4SBram Moolenaarhi def link cabalLanguage Type 251f37506f6SBram Moolenaarhi def link cabalCategory Type 252f37506f6SBram Moolenaarhi def link cabalFunction Function 253f37506f6SBram Moolenaarhi def link cabalConditional Conditional 254f37506f6SBram Moolenaarhi def link cabalOperator Operator 2557c63fbc4SBram Moolenaarhi def link cabalVersionOperator Operator 256f37506f6SBram Moolenaarhi def link cabalCompiler Constant 25700a927d6SBram Moolenaar 25800a927d6SBram Moolenaarlet b:current_syntax = "cabal" 25900a927d6SBram Moolenaar 2607c63fbc4SBram Moolenaarlet &cpo = s:cpo_save 2617c63fbc4SBram Moolenaarunlet! s:cpo_save 2627c63fbc4SBram Moolenaar 26300a927d6SBram Moolenaar" vim: ts=8 264