blob: b1bc9f8bfe2d2a7f65abce6ff347498a87d3a362 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar00a927d2010-05-14 23:24:24 +02002" Language: Debian control files
Bram Moolenaard68071d2006-05-02 22:08:30 +00003" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
4" Former Maintainers: Gerfried Fuchs <alfie@ist.org>
5" Wichert Akkerman <wakkerma@debian.org>
Bram Moolenaarf37506f2016-08-31 22:22:10 +02006" Last Change: 2016 Aug 30
Bram Moolenaar256972a2015-12-29 19:10:25 +01007" URL: https://anonscm.debian.org/cgit/pkg-vim/vim.git/plain/runtime/syntax/debcontrol.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +00008
9" Standard syntax initialization
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020010if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000011 finish
12endif
13
Bram Moolenaar07d87792014-07-19 14:04:47 +020014let s:cpo_save = &cpo
15set cpo&vim
16
Bram Moolenaar8c8de832008-06-24 22:58:06 +000017" Should match case except for the keys of each field
18syn case match
19
Bram Moolenaar071d4272004-06-13 20:20:40 +000020" Everything that is not explicitly matched by the rules below
21syn match debcontrolElse "^.*$"
22
23" Common seperators
24syn match debControlComma ", *"
25syn match debControlSpace " "
26
Bram Moolenaar07d87792014-07-19 14:04:47 +020027let s:kernels = '\%(linux\|hurd\|kfreebsd\|knetbsd\|kopensolaris\|netbsd\)'
28let s:archs = '\%(alpha\|amd64\|armeb\|armel\|armhf\|arm64\|avr32\|hppa\|i386'
Bram Moolenaarf37506f2016-08-31 22:22:10 +020029 \ . '\|ia64\|lpia\|m32r\|m68k\|mipsel\|mips64el\|mips\|powerpcspe\|powerpc\|ppc64el'
Bram Moolenaar07d87792014-07-19 14:04:47 +020030 \ . '\|ppc64\|s390x\|s390\|sh3eb\|sh3\|sh4eb\|sh4\|sh\|sparc64\|sparc\|x32\)'
31let s:pairs = 'hurd-i386\|kfreebsd-i386\|kfreebsd-amd64\|knetbsd-i386\|kopensolaris-i386\|netbsd-alpha\|netbsd-i386'
32
Bram Moolenaar071d4272004-06-13 20:20:40 +000033" Define some common expressions we can use later on
Bram Moolenaar07d87792014-07-19 14:04:47 +020034exe 'syn match debcontrolArchitecture contained "\%(all\|'. s:kernels .'-any\|\%(any-\)\='. s:archs .'\|'. s:pairs .'\|any\)"'
35
36unlet s:kernels s:archs s:pairs
37
Bram Moolenaar251e1912011-06-19 05:09:16 +020038syn match debcontrolMultiArch contained "\%(no\|foreign\|allowed\|same\)"
Bram Moolenaar8c8de832008-06-24 22:58:06 +000039syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +000040syn match debcontrolPriority contained "\(extra\|important\|optional\|required\|standard\)"
Bram Moolenaar369b6f52017-01-17 12:22:32 +010041syn match debcontrolSection contained "\v((contrib|non-free|non-US/main|non-US/contrib|non-US/non-free|restricted|universe|multiverse)/)?(admin|cli-mono|comm|database|debian-installer|debug|devel|doc|editors|education|electronics|embedded|fonts|games|gnome|gnustep|gnu-r|graphics|hamradio|haskell|httpd|interpreters|introspection|java|javascript|kde|kernel|libs|libdevel|lisp|localization|mail|math|metapackages|misc|net|news|ocaml|oldlibs|otherosfs|perl|php|python|ruby|rust|science|shells|sound|text|tex|utils|vcs|video|web|x11|xfce|zope)"
Bram Moolenaar8c8de832008-06-24 22:58:06 +000042syn match debcontrolPackageType contained "u\?deb"
Bram Moolenaar071d4272004-06-13 20:20:40 +000043syn match debcontrolVariable contained "\${.\{-}}"
Bram Moolenaarc236c162008-07-13 17:41:49 +000044syn match debcontrolDmUpload contained "\cyes"
Bram Moolenaar071d4272004-06-13 20:20:40 +000045
Bram Moolenaar8c8de832008-06-24 22:58:06 +000046" A URL (using the domain name definitions from RFC 1034 and 1738), right now
47" only enforce protocol and some sanity on the server/path part;
48syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
49syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
50syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$"
Bram Moolenaarf2571c62015-06-09 19:44:55 +020051syn match debcontrolVcsGit contained "\v%(git|https?)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?%(\s+-b\s+[^ ~^:?*[\\]+)?$"
Bram Moolenaar8c8de832008-06-24 22:58:06 +000052
Bram Moolenaar071d4272004-06-13 20:20:40 +000053" An email address
54syn match debcontrolEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
55syn match debcontrolEmail "<.\{-}>"
56
Bram Moolenaar8c8de832008-06-24 22:58:06 +000057" #-Comments
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020058syn match debcontrolComment "^#.*$" contains=@Spell
Bram Moolenaar8c8de832008-06-24 22:58:06 +000059
60syn case ignore
61
Bram Moolenaar071d4272004-06-13 20:20:40 +000062" List of all legal keys
Bram Moolenaarac7bd632013-03-19 11:35:58 +010063syn match debcontrolKey contained "^\%(Source\|Package\|Section\|Priority\|\%(XSBC-Original-\)\=Maintainer\|Uploaders\|Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|Standards-Version\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Essential\|Architecture\|Multi-Arch\|Description\|Bugs\|Origin\|X[SB]-Python-Version\|Homepage\|\(XS-\)\=Vcs-\(Browser\|Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\)\|\%(XC-\)\=Package-Type\): *"
64
65syn match debcontrolDeprecatedKey contained "^\%(\%(XS-\)\=DM-Upload-Allowed\): *"
Bram Moolenaar071d4272004-06-13 20:20:40 +000066
67" Fields for which we do strict syntax checking
68syn region debcontrolStrictField start="^Architecture" end="$" contains=debcontrolKey,debcontrolArchitecture,debcontrolSpace oneline
Bram Moolenaar251e1912011-06-19 05:09:16 +020069syn region debcontrolStrictField start="^Multi-Arch" end="$" contains=debcontrolKey,debcontrolMultiArch oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +000070syn region debcontrolStrictField start="^\(Package\|Source\)" end="$" contains=debcontrolKey,debcontrolName oneline
71syn region debcontrolStrictField start="^Priority" end="$" contains=debcontrolKey,debcontrolPriority oneline
72syn region debcontrolStrictField start="^Section" end="$" contains=debcontrolKey,debcontrolSection oneline
Bram Moolenaar251e1912011-06-19 05:09:16 +020073syn region debcontrolStrictField start="^\%(XC-\)\=Package-Type" end="$" contains=debcontrolKey,debcontrolPackageType oneline
Bram Moolenaar8c8de832008-06-24 22:58:06 +000074syn region debcontrolStrictField start="^Homepage" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
Bram Moolenaar5c736222010-01-06 20:54:52 +010075syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\)" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
76syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Svn" end="$" contains=debcontrolKey,debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
77syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Cvs" end="$" contains=debcontrolKey,debcontrolVcsCvs oneline keepend
78syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Git" end="$" contains=debcontrolKey,debcontrolVcsGit oneline keepend
Bram Moolenaarac7bd632013-03-19 11:35:58 +010079syn region debcontrolStrictField start="^\%(XS-\)\=DM-Upload-Allowed" end="$" contains=debcontrolDeprecatedKey,debcontrolDmUpload oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +000080
81" Catch-all for the other legal fields
Bram Moolenaar5c736222010-01-06 20:54:52 +010082syn region debcontrolField start="^\%(\%(XSBC-Original-\)\=Maintainer\|Standards-Version\|Essential\|Bugs\|Origin\|X[SB]-Python-Version\|\%(XS-\)\=Vcs-Mtn\):" end="$" contains=debcontrolKey,debcontrolVariable,debcontrolEmail oneline
Bram Moolenaar00a927d2010-05-14 23:24:24 +020083syn region debcontrolMultiField start="^\%(Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Uploaders\|Description\):" skip="^ " end="^$"me=s-1 end="^[^ #]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020084syn region debcontrolMultiFieldSpell start="^\%(Description\):" skip="^ " end="^$"me=s-1 end="^[^ #]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +000085
86" Associate our matches and regions with pretty colours
Bram Moolenaarf37506f2016-08-31 22:22:10 +020087hi def link debcontrolKey Keyword
88hi def link debcontrolField Normal
89hi def link debcontrolStrictField Error
90hi def link debcontrolDeprecatedKey Error
91hi def link debcontrolMultiField Normal
92hi def link debcontrolArchitecture Normal
93hi def link debcontrolMultiArch Normal
94hi def link debcontrolName Normal
95hi def link debcontrolPriority Normal
96hi def link debcontrolSection Normal
97hi def link debcontrolPackageType Normal
98hi def link debcontrolVariable Identifier
99hi def link debcontrolEmail Identifier
100hi def link debcontrolVcsSvn Identifier
101hi def link debcontrolVcsCvs Identifier
102hi def link debcontrolVcsGit Identifier
103hi def link debcontrolHTTPUrl Identifier
104hi def link debcontrolDmUpload Identifier
105hi def link debcontrolComment Comment
106hi def link debcontrolElse Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000107
108let b:current_syntax = "debcontrol"
109
Bram Moolenaar07d87792014-07-19 14:04:47 +0200110let &cpo = s:cpo_save
111unlet s:cpo_save
112
Bram Moolenaar071d4272004-06-13 20:20:40 +0000113" vim: ts=8 sw=2