blob: c79b702f9223aebed090cc306a36f86ea8ee968d [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 Moolenaar72540672018-02-09 22:00:53 +01003" Maintainer: Debian Vim Maintainers
Bram Moolenaard68071d2006-05-02 22:08:30 +00004" Former Maintainers: Gerfried Fuchs <alfie@ist.org>
5" Wichert Akkerman <wakkerma@debian.org>
Bram Moolenaarbe4e0162023-02-02 13:59:48 +00006" Last Change: 2023 Jan 16
7" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debcontrol.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +00008
9" Standard syntax initialization
Bram Moolenaar85eee132018-05-06 17:57:30 +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 Moolenaar3f32a5f2022-05-12 20:34:15 +010020syn iskeyword @,48-57,-
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010021
Bram Moolenaar071d4272004-06-13 20:20:40 +000022" Everything that is not explicitly matched by the rules below
23syn match debcontrolElse "^.*$"
24
25" Common seperators
Bram Moolenaarc572da52017-08-27 16:52:01 +020026syn match debControlComma ",[ \t]*"
27syn match debControlSpace "[ \t]"
Bram Moolenaar071d4272004-06-13 20:20:40 +000028
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010029let s:kernels = ['linux', 'hurd', 'kfreebsd', 'knetbsd', 'kopensolaris', 'netbsd']
30let s:archs = [
31 \ 'alpha', 'amd64', 'armeb', 'armel', 'armhf', 'arm64', 'avr32', 'hppa'
32 \, 'i386', 'ia64', 'lpia', 'm32r', 'm68k', 'mipsel', 'mips64el', 'mips'
Bram Moolenaard473c8c2018-08-11 18:00:22 +020033 \, 'powerpcspe', 'powerpc', 'ppc64el', 'ppc64', 'riscv64', 's390x', 's390', 'sh3eb'
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010034 \, 'sh3', 'sh4eb', 'sh4', 'sh', 'sparc64', 'sparc', 'x32'
35 \ ]
36let s:pairs = [
37 \ 'hurd-i386', 'kfreebsd-i386', 'kfreebsd-amd64', 'knetbsd-i386'
38 \, 'kopensolaris-i386', 'netbsd-alpha', 'netbsd-i386'
39 \ ]
Bram Moolenaar07d87792014-07-19 14:04:47 +020040
Bram Moolenaar071d4272004-06-13 20:20:40 +000041" Define some common expressions we can use later on
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010042syn keyword debcontrolArchitecture contained all any
Bram Moolenaard2f3a8b2018-06-19 14:35:59 +020043exe 'syn keyword debcontrolArchitecture contained '. join(map(copy(s:kernels), {k,v -> v .'-any'}))
44exe 'syn keyword debcontrolArchitecture contained '. join(map(copy(s:archs), {k,v -> 'any-'.v}))
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010045exe 'syn keyword debcontrolArchitecture contained '. join(s:archs)
46exe 'syn keyword debcontrolArchitecture contained '. join(s:pairs)
Bram Moolenaar07d87792014-07-19 14:04:47 +020047
48unlet s:kernels s:archs s:pairs
49
Bram Moolenaar3132cdd2020-11-05 20:41:49 +010050" Keep in sync with https://metadata.ftp-master.org/sections.822
51" curl -q https://metadata.ftp-master.debian.org/sections.822 2>/dev/null| grep-dctrl -n --not -FSection -sSection / -
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010052let s:sections = [
53 \ 'admin', 'cli-mono', 'comm', 'database', 'debian-installer', 'debug'
54 \, 'devel', 'doc', 'editors', 'education', 'electronics', 'embedded'
Bram Moolenaar3132cdd2020-11-05 20:41:49 +010055 \, 'fonts', 'games', 'gnome', 'gnu-r', 'gnustep', 'golang', 'graphics'
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010056 \, 'hamradio', 'haskell', 'httpd', 'interpreters', 'introspection'
Bram Moolenaar3132cdd2020-11-05 20:41:49 +010057 \, 'java', 'javascript', 'kde', 'kernel', 'libdevel', 'libs', 'lisp'
58 \, 'localization', 'mail', 'math', 'metapackages', 'misc', 'net', 'news'
59 \, 'ocaml', 'oldlibs', 'otherosfs', 'perl', 'php', 'python', 'raku'
60 \, 'ruby', 'rust', 'science', 'shells', 'sound', 'tasks', 'tex', 'text'
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010061 \, 'utils', 'vcs', 'video', 'web', 'x11', 'xfce', 'zope'
62 \ ]
63
64syn keyword debcontrolMultiArch contained no foreign allowed same
Bram Moolenaar8c8de832008-06-24 22:58:06 +000065syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010066syn keyword debcontrolPriority contained extra important optional required standard
Bram Moolenaar3132cdd2020-11-05 20:41:49 +010067exe 'syn match debcontrolSection contained "\%(\%(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\|restricted\|universe\|multiverse\)/\)\=\<\%('.join(s:sections, '\|').'\)\>"'
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010068syn keyword debcontrolPackageType contained udeb deb
Bram Moolenaar071d4272004-06-13 20:20:40 +000069syn match debcontrolVariable contained "\${.\{-}}"
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010070syn keyword debcontrolDmUpload contained yes
71syn keyword debcontrolYesNo contained yes no
72syn match debcontrolR3 contained "\<\%(no\|binary-targets\|[[:graph:]]\+/[[:graph:]]\+\%( \+[[:graph:]]\+/[[:graph:]]\+\)*\)\>"
73
74unlet s:sections
Bram Moolenaar071d4272004-06-13 20:20:40 +000075
Bram Moolenaar8c8de832008-06-24 22:58:06 +000076" A URL (using the domain name definitions from RFC 1034 and 1738), right now
77" only enforce protocol and some sanity on the server/path part;
78syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
79syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
80syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$"
Bram Moolenaarf2571c62015-06-09 19:44:55 +020081syn 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 +000082
Bram Moolenaar071d4272004-06-13 20:20:40 +000083" An email address
84syn match debcontrolEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
85syn match debcontrolEmail "<.\{-}>"
86
Bram Moolenaar8c8de832008-06-24 22:58:06 +000087" #-Comments
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020088syn match debcontrolComment "^#.*$" contains=@Spell
Bram Moolenaar8c8de832008-06-24 22:58:06 +000089
90syn case ignore
91
Bram Moolenaar72540672018-02-09 22:00:53 +010092" Handle all fields from deb-src-control(5)
Bram Moolenaar071d4272004-06-13 20:20:40 +000093
Bram Moolenaarfa3b7232021-12-24 13:18:38 +000094" Catch-all for the legal fields
95syn 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
96syn 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
97syn region debcontrolMultiFieldSpell matchgroup=debcontrolKey start="^Description: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell
98
Bram Moolenaar071d4272004-06-13 20:20:40 +000099" Fields for which we do strict syntax checking
Bram Moolenaar72540672018-02-09 22:00:53 +0100100syn region debcontrolStrictField matchgroup=debcontrolKey start="^Architecture: *" end="$" contains=debcontrolArchitecture,debcontrolSpace oneline
101syn region debcontrolStrictField matchgroup=debcontrolKey start="^Multi-Arch: *" end="$" contains=debcontrolMultiArch oneline
102syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Package\|Source\): *" end="$" contains=debcontrolName oneline
103syn region debcontrolStrictField matchgroup=debcontrolKey start="^Priority: *" end="$" contains=debcontrolPriority oneline
104syn region debcontrolStrictField matchgroup=debcontrolKey start="^Section: *" end="$" contains=debcontrolSection oneline
105syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XC-\)\=Package-Type: *" end="$" contains=debcontrolPackageType oneline
106syn region debcontrolStrictField matchgroup=debcontrolKey start="^Homepage: *" end="$" contains=debcontrolHTTPUrl oneline keepend
Bram Moolenaarfa3b7232021-12-24 13:18:38 +0000107syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\): *" end="$" contains=debcontrolHTTPUrl oneline keepend
108syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Svn: *" end="$" contains=debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
109syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Cvs: *" end="$" contains=debcontrolVcsCvs oneline keepend
110syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Git: *" end="$" contains=debcontrolVcsGit oneline keepend
Bram Moolenaar72540672018-02-09 22:00:53 +0100111syn region debcontrolStrictField matchgroup=debcontrolKey start="^Rules-Requires-Root: *" end="$" contains=debcontrolR3 oneline
112syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Build-\)\=Essential: *" end="$" contains=debcontrolYesNo oneline
113
114syn region debcontrolStrictField matchgroup=debcontrolDeprecatedKey start="^\%(XS-\)\=DM-Upload-Allowed: *" end="$" contains=debcontrolDmUpload oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115
Bram Moolenaar071d4272004-06-13 20:20:40 +0000116" Associate our matches and regions with pretty colours
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200117hi def link debcontrolKey Keyword
118hi def link debcontrolField Normal
119hi def link debcontrolStrictField Error
120hi def link debcontrolDeprecatedKey Error
121hi def link debcontrolMultiField Normal
122hi def link debcontrolArchitecture Normal
123hi def link debcontrolMultiArch Normal
124hi def link debcontrolName Normal
125hi def link debcontrolPriority Normal
126hi def link debcontrolSection Normal
127hi def link debcontrolPackageType Normal
128hi def link debcontrolVariable Identifier
129hi def link debcontrolEmail Identifier
130hi def link debcontrolVcsSvn Identifier
131hi def link debcontrolVcsCvs Identifier
132hi def link debcontrolVcsGit Identifier
133hi def link debcontrolHTTPUrl Identifier
134hi def link debcontrolDmUpload Identifier
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +0100135hi def link debcontrolYesNo Identifier
136hi def link debcontrolR3 Identifier
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200137hi def link debcontrolComment Comment
138hi def link debcontrolElse Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139
Bram Moolenaar85eee132018-05-06 17:57:30 +0200140let b:current_syntax = 'debcontrol'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141
Bram Moolenaar07d87792014-07-19 14:04:47 +0200142let &cpo = s:cpo_save
143unlet s:cpo_save
144
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145" vim: ts=8 sw=2