1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:    Debian control files
37254067eSBram Moolenaar" Maintainer:  Debian Vim Maintainers
4d68071d8SBram Moolenaar" Former Maintainers: Gerfried Fuchs <[email protected]>
5d68071d8SBram Moolenaar"                     Wichert Akkerman <[email protected]>
6*3132cdddSBram Moolenaar" Last Change: 2020 Oct 26
77254067eSBram Moolenaar" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debcontrol.vim
8071d4279SBram Moolenaar
9071d4279SBram Moolenaar" Standard syntax initialization
1085eee130SBram Moolenaarif exists('b:current_syntax')
11071d4279SBram Moolenaar  finish
12071d4279SBram Moolenaarendif
13071d4279SBram Moolenaar
1407d87790SBram Moolenaarlet s:cpo_save = &cpo
1507d87790SBram Moolenaarset cpo&vim
1607d87790SBram Moolenaar
178c8de839SBram Moolenaar" Should match case except for the keys of each field
188c8de839SBram Moolenaarsyn case match
198c8de839SBram Moolenaar
207f2e9d7cSBram Moolenaarsyn iskeyword @,48-57,-,/
217f2e9d7cSBram Moolenaar
22071d4279SBram Moolenaar" Everything that is not explicitly matched by the rules below
23071d4279SBram Moolenaarsyn match debcontrolElse "^.*$"
24071d4279SBram Moolenaar
25071d4279SBram Moolenaar" Common seperators
26c572da5fSBram Moolenaarsyn match debControlComma ",[ \t]*"
27c572da5fSBram Moolenaarsyn match debControlSpace "[ \t]"
28071d4279SBram Moolenaar
297f2e9d7cSBram Moolenaarlet s:kernels = ['linux', 'hurd', 'kfreebsd', 'knetbsd', 'kopensolaris', 'netbsd']
307f2e9d7cSBram Moolenaarlet s:archs = [
317f2e9d7cSBram Moolenaar      \ 'alpha', 'amd64', 'armeb', 'armel', 'armhf', 'arm64', 'avr32', 'hppa'
327f2e9d7cSBram Moolenaar      \, 'i386', 'ia64', 'lpia', 'm32r', 'm68k', 'mipsel', 'mips64el', 'mips'
33d473c8c1SBram Moolenaar      \, 'powerpcspe', 'powerpc', 'ppc64el', 'ppc64', 'riscv64', 's390x', 's390', 'sh3eb'
347f2e9d7cSBram Moolenaar      \, 'sh3', 'sh4eb', 'sh4', 'sh', 'sparc64', 'sparc', 'x32'
357f2e9d7cSBram Moolenaar      \ ]
367f2e9d7cSBram Moolenaarlet s:pairs = [
377f2e9d7cSBram Moolenaar      \ 'hurd-i386', 'kfreebsd-i386', 'kfreebsd-amd64', 'knetbsd-i386'
387f2e9d7cSBram Moolenaar      \, 'kopensolaris-i386', 'netbsd-alpha', 'netbsd-i386'
397f2e9d7cSBram Moolenaar      \ ]
4007d87790SBram Moolenaar
41071d4279SBram Moolenaar" Define some common expressions we can use later on
427f2e9d7cSBram Moolenaarsyn keyword debcontrolArchitecture contained all any
43d2f3a8b8SBram Moolenaarexe 'syn keyword debcontrolArchitecture contained '. join(map(copy(s:kernels), {k,v -> v .'-any'}))
44d2f3a8b8SBram Moolenaarexe 'syn keyword debcontrolArchitecture contained '. join(map(copy(s:archs), {k,v -> 'any-'.v}))
457f2e9d7cSBram Moolenaarexe 'syn keyword debcontrolArchitecture contained '. join(s:archs)
467f2e9d7cSBram Moolenaarexe 'syn keyword debcontrolArchitecture contained '. join(s:pairs)
4707d87790SBram Moolenaar
4807d87790SBram Moolenaarunlet s:kernels s:archs s:pairs
4907d87790SBram Moolenaar
50*3132cdddSBram Moolenaar" Keep in sync with https://metadata.ftp-master.org/sections.822
51*3132cdddSBram Moolenaar" curl -q https://metadata.ftp-master.debian.org/sections.822 2>/dev/null| grep-dctrl -n --not -FSection -sSection  / -
527f2e9d7cSBram Moolenaarlet s:sections = [
537f2e9d7cSBram Moolenaar      \ 'admin', 'cli-mono', 'comm', 'database', 'debian-installer', 'debug'
547f2e9d7cSBram Moolenaar      \, 'devel', 'doc', 'editors', 'education', 'electronics', 'embedded'
55*3132cdddSBram Moolenaar      \, 'fonts', 'games', 'gnome', 'gnu-r', 'gnustep', 'golang', 'graphics'
567f2e9d7cSBram Moolenaar      \, 'hamradio', 'haskell', 'httpd', 'interpreters', 'introspection'
57*3132cdddSBram Moolenaar      \, 'java', 'javascript', 'kde', 'kernel', 'libdevel', 'libs', 'lisp'
58*3132cdddSBram Moolenaar      \, 'localization', 'mail', 'math', 'metapackages', 'misc', 'net', 'news'
59*3132cdddSBram Moolenaar      \, 'ocaml', 'oldlibs', 'otherosfs', 'perl', 'php', 'python', 'raku'
60*3132cdddSBram Moolenaar      \, 'ruby', 'rust', 'science', 'shells', 'sound', 'tasks', 'tex', 'text'
617f2e9d7cSBram Moolenaar      \, 'utils', 'vcs', 'video', 'web', 'x11', 'xfce', 'zope'
627f2e9d7cSBram Moolenaar      \ ]
637f2e9d7cSBram Moolenaar
647f2e9d7cSBram Moolenaarsyn keyword debcontrolMultiArch contained no foreign allowed same
658c8de839SBram Moolenaarsyn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
667f2e9d7cSBram Moolenaarsyn keyword debcontrolPriority contained extra important optional required standard
67*3132cdddSBram Moolenaarexe 'syn match debcontrolSection contained "\%(\%(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\|restricted\|universe\|multiverse\)/\)\=\<\%('.join(s:sections, '\|').'\)\>"'
687f2e9d7cSBram Moolenaarsyn keyword debcontrolPackageType contained udeb deb
69071d4279SBram Moolenaarsyn match debcontrolVariable contained "\${.\{-}}"
707f2e9d7cSBram Moolenaarsyn keyword debcontrolDmUpload contained yes
717f2e9d7cSBram Moolenaarsyn keyword debcontrolYesNo contained yes no
727f2e9d7cSBram Moolenaarsyn match debcontrolR3 contained "\<\%(no\|binary-targets\|[[:graph:]]\+/[[:graph:]]\+\%( \+[[:graph:]]\+/[[:graph:]]\+\)*\)\>"
737f2e9d7cSBram Moolenaar
747f2e9d7cSBram Moolenaarunlet s:sections
75071d4279SBram Moolenaar
768c8de839SBram Moolenaar" A URL (using the domain name definitions from RFC 1034 and 1738), right now
778c8de839SBram Moolenaar" only enforce protocol and some sanity on the server/path part;
788c8de839SBram Moolenaarsyn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
798c8de839SBram Moolenaarsyn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
808c8de839SBram Moolenaarsyn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$"
81f2571c61SBram Moolenaarsyn match debcontrolVcsGit contained "\v%(git|https?)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?%(\s+-b\s+[^ ~^:?*[\\]+)?$"
828c8de839SBram Moolenaar
83071d4279SBram Moolenaar" An email address
84071d4279SBram Moolenaarsyn match	debcontrolEmail	"[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
85071d4279SBram Moolenaarsyn match	debcontrolEmail	"<.\{-}>"
86071d4279SBram Moolenaar
878c8de839SBram Moolenaar" #-Comments
883a0d8090SBram Moolenaarsyn match debcontrolComment "^#.*$" contains=@Spell
898c8de839SBram Moolenaar
908c8de839SBram Moolenaarsyn case ignore
918c8de839SBram Moolenaar
927254067eSBram Moolenaar" Handle all fields from deb-src-control(5)
93071d4279SBram Moolenaar
94071d4279SBram Moolenaar" Fields for which we do strict syntax checking
957254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^Architecture: *" end="$" contains=debcontrolArchitecture,debcontrolSpace oneline
967254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^Multi-Arch: *" end="$" contains=debcontrolMultiArch oneline
977254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Package\|Source\): *" end="$" contains=debcontrolName oneline
987254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^Priority: *" end="$" contains=debcontrolPriority oneline
997254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^Section: *" end="$" contains=debcontrolSection oneline
1007254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XC-\)\=Package-Type: *" end="$" contains=debcontrolPackageType oneline
1017254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^Homepage: *" end="$" contains=debcontrolHTTPUrl oneline keepend
1027254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\): *" end="$" contains=debcontrolHTTPUrl oneline keepend
1037254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-Svn: *" end="$" contains=debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
1047254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-Cvs: *" end="$" contains=debcontrolVcsCvs oneline keepend
1057254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-Git: *" end="$" contains=debcontrolVcsGit oneline keepend
1067254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^Rules-Requires-Root: *" end="$" contains=debcontrolR3 oneline
1077254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Build-\)\=Essential: *" end="$" contains=debcontrolYesNo oneline
1087254067eSBram Moolenaar
1097254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolDeprecatedKey start="^\%(XS-\)\=DM-Upload-Allowed: *" end="$" contains=debcontrolDmUpload oneline
110071d4279SBram Moolenaar
111071d4279SBram Moolenaar" Catch-all for the other legal fields
1127254067eSBram Moolenaarsyn region debcontrolField matchgroup=debcontrolKey start="^\%(\%(XSBC-Original-\)\=Maintainer\|Standards-Version\|Bugs\|Origin\|X[SB]-Python-Version\|\%(XS-\)\=Vcs-Mtn\|\%(XS-\)\=Testsuite\%(-Triggers\)\=\|Build-Profiles\|Tag\|Subarchitecture\|Kernel-Version\|Installer-Menu-Item\): " end="$" contains=debcontrolVariable,debcontrolEmail oneline
1137254067eSBram Moolenaarsyn region debcontrolMultiField matchgroup=debcontrolKey start="^\%(Build-\%(Conflicts\|Depends\)\%(-Arch\|-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Breaks\|Enhances\|Replaces\|Conflicts\|Provides\|Built-Using\|Uploaders\|X[SBC]\{0,3\}\%(Private-\)\=-[-a-zA-Z0-9]\+\): *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment
1147254067eSBram Moolenaarsyn region debcontrolMultiFieldSpell matchgroup=debcontrolKey start="^Description: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell
115071d4279SBram Moolenaar
116071d4279SBram Moolenaar" Associate our matches and regions with pretty colours
117f37506f6SBram Moolenaarhi def link debcontrolKey           Keyword
118f37506f6SBram Moolenaarhi def link debcontrolField         Normal
119f37506f6SBram Moolenaarhi def link debcontrolStrictField   Error
120f37506f6SBram Moolenaarhi def link debcontrolDeprecatedKey Error
121f37506f6SBram Moolenaarhi def link debcontrolMultiField    Normal
122f37506f6SBram Moolenaarhi def link debcontrolArchitecture  Normal
123f37506f6SBram Moolenaarhi def link debcontrolMultiArch     Normal
124f37506f6SBram Moolenaarhi def link debcontrolName          Normal
125f37506f6SBram Moolenaarhi def link debcontrolPriority      Normal
126f37506f6SBram Moolenaarhi def link debcontrolSection       Normal
127f37506f6SBram Moolenaarhi def link debcontrolPackageType   Normal
128f37506f6SBram Moolenaarhi def link debcontrolVariable      Identifier
129f37506f6SBram Moolenaarhi def link debcontrolEmail         Identifier
130f37506f6SBram Moolenaarhi def link debcontrolVcsSvn        Identifier
131f37506f6SBram Moolenaarhi def link debcontrolVcsCvs        Identifier
132f37506f6SBram Moolenaarhi def link debcontrolVcsGit        Identifier
133f37506f6SBram Moolenaarhi def link debcontrolHTTPUrl       Identifier
134f37506f6SBram Moolenaarhi def link debcontrolDmUpload      Identifier
1357f2e9d7cSBram Moolenaarhi def link debcontrolYesNo         Identifier
1367f2e9d7cSBram Moolenaarhi def link debcontrolR3            Identifier
137f37506f6SBram Moolenaarhi def link debcontrolComment       Comment
138f37506f6SBram Moolenaarhi def link debcontrolElse          Special
139071d4279SBram Moolenaar
14085eee130SBram Moolenaarlet b:current_syntax = 'debcontrol'
141071d4279SBram Moolenaar
14207d87790SBram Moolenaarlet &cpo = s:cpo_save
14307d87790SBram Moolenaarunlet s:cpo_save
14407d87790SBram Moolenaar
145071d4279SBram Moolenaar" vim: ts=8 sw=2
146