blob: b86d51bf66cad9bcde38af103b7647919ccaa09b [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>
Guilherme Puida677cd952024-03-28 05:56:50 -03006" Last Change: 2024 Mar 26
Christian Brabandt1ded4112025-06-13 20:11:42 +02007" 2025 Jun 13 by Vim Project (add hurd-amd64 arch #17525)
Bram Moolenaarbe4e0162023-02-02 13:59:48 +00008" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debcontrol.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +00009
10" Standard syntax initialization
Bram Moolenaar85eee132018-05-06 17:57:30 +020011if exists('b:current_syntax')
Bram Moolenaar071d4272004-06-13 20:20:40 +000012 finish
13endif
14
Bram Moolenaar07d87792014-07-19 14:04:47 +020015let s:cpo_save = &cpo
16set cpo&vim
17
Bram Moolenaar8c8de832008-06-24 22:58:06 +000018" Should match case except for the keys of each field
19syn case match
20
Bram Moolenaar3f32a5f2022-05-12 20:34:15 +010021syn iskeyword @,48-57,-
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010022
Bram Moolenaar071d4272004-06-13 20:20:40 +000023" Everything that is not explicitly matched by the rules below
24syn match debcontrolElse "^.*$"
25
Viktor Szépedbf749b2023-10-16 09:53:37 +020026" Common separators
Bram Moolenaarc572da52017-08-27 16:52:01 +020027syn match debControlComma ",[ \t]*"
28syn match debControlSpace "[ \t]"
Bram Moolenaar071d4272004-06-13 20:20:40 +000029
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010030let s:kernels = ['linux', 'hurd', 'kfreebsd', 'knetbsd', 'kopensolaris', 'netbsd']
31let s:archs = [
32 \ 'alpha', 'amd64', 'armeb', 'armel', 'armhf', 'arm64', 'avr32', 'hppa'
James McCoyec97edc2023-12-23 05:23:39 -050033 \, 'i386', 'ia64', 'loong64', 'lpia', 'm32r', 'm68k', 'mipsel', 'mips64el', 'mips'
Bram Moolenaard473c8c2018-08-11 18:00:22 +020034 \, 'powerpcspe', 'powerpc', 'ppc64el', 'ppc64', 'riscv64', 's390x', 's390', 'sh3eb'
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010035 \, 'sh3', 'sh4eb', 'sh4', 'sh', 'sparc64', 'sparc', 'x32'
36 \ ]
37let s:pairs = [
Christian Brabandt1ded4112025-06-13 20:11:42 +020038 \ 'hurd-i386', 'hurd-amd64', 'kfreebsd-i386', 'kfreebsd-amd64', 'knetbsd-i386'
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010039 \, 'kopensolaris-i386', 'netbsd-alpha', 'netbsd-i386'
40 \ ]
Bram Moolenaar07d87792014-07-19 14:04:47 +020041
Bram Moolenaar071d4272004-06-13 20:20:40 +000042" Define some common expressions we can use later on
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010043syn keyword debcontrolArchitecture contained all any
Bram Moolenaard2f3a8b2018-06-19 14:35:59 +020044exe 'syn keyword debcontrolArchitecture contained '. join(map(copy(s:kernels), {k,v -> v .'-any'}))
45exe 'syn keyword debcontrolArchitecture contained '. join(map(copy(s:archs), {k,v -> 'any-'.v}))
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010046exe 'syn keyword debcontrolArchitecture contained '. join(s:archs)
47exe 'syn keyword debcontrolArchitecture contained '. join(s:pairs)
Bram Moolenaar07d87792014-07-19 14:04:47 +020048
49unlet s:kernels s:archs s:pairs
50
Bram Moolenaar3132cdd2020-11-05 20:41:49 +010051" Keep in sync with https://metadata.ftp-master.org/sections.822
52" 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 +010053let s:sections = [
54 \ 'admin', 'cli-mono', 'comm', 'database', 'debian-installer', 'debug'
55 \, 'devel', 'doc', 'editors', 'education', 'electronics', 'embedded'
Bram Moolenaar3132cdd2020-11-05 20:41:49 +010056 \, 'fonts', 'games', 'gnome', 'gnu-r', 'gnustep', 'golang', 'graphics'
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010057 \, 'hamradio', 'haskell', 'httpd', 'interpreters', 'introspection'
Bram Moolenaar3132cdd2020-11-05 20:41:49 +010058 \, 'java', 'javascript', 'kde', 'kernel', 'libdevel', 'libs', 'lisp'
59 \, 'localization', 'mail', 'math', 'metapackages', 'misc', 'net', 'news'
60 \, 'ocaml', 'oldlibs', 'otherosfs', 'perl', 'php', 'python', 'raku'
61 \, 'ruby', 'rust', 'science', 'shells', 'sound', 'tasks', 'tex', 'text'
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010062 \, 'utils', 'vcs', 'video', 'web', 'x11', 'xfce', 'zope'
63 \ ]
64
65syn keyword debcontrolMultiArch contained no foreign allowed same
Bram Moolenaar8c8de832008-06-24 22:58:06 +000066syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010067syn keyword debcontrolPriority contained extra important optional required standard
Bram Moolenaar3132cdd2020-11-05 20:41:49 +010068exe '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 +010069syn keyword debcontrolPackageType contained udeb deb
Bram Moolenaar071d4272004-06-13 20:20:40 +000070syn match debcontrolVariable contained "\${.\{-}}"
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010071syn keyword debcontrolDmUpload contained yes
72syn keyword debcontrolYesNo contained yes no
73syn match debcontrolR3 contained "\<\%(no\|binary-targets\|[[:graph:]]\+/[[:graph:]]\+\%( \+[[:graph:]]\+/[[:graph:]]\+\)*\)\>"
74
75unlet s:sections
Bram Moolenaar071d4272004-06-13 20:20:40 +000076
Bram Moolenaar8c8de832008-06-24 22:58:06 +000077" A URL (using the domain name definitions from RFC 1034 and 1738), right now
78" only enforce protocol and some sanity on the server/path part;
79syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
80syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
81syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$"
Bram Moolenaarf2571c62015-06-09 19:44:55 +020082syn 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 +000083
Bram Moolenaar071d4272004-06-13 20:20:40 +000084" An email address
85syn match debcontrolEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
86syn match debcontrolEmail "<.\{-}>"
87
Bram Moolenaar8c8de832008-06-24 22:58:06 +000088" #-Comments
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020089syn match debcontrolComment "^#.*$" contains=@Spell
Bram Moolenaar8c8de832008-06-24 22:58:06 +000090
91syn case ignore
92
Bram Moolenaar72540672018-02-09 22:00:53 +010093" Handle all fields from deb-src-control(5)
Bram Moolenaar071d4272004-06-13 20:20:40 +000094
Bram Moolenaarfa3b7232021-12-24 13:18:38 +000095" Catch-all for the legal fields
96syn 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
Guilherme Puida677cd952024-03-28 05:56:50 -030097syn region debcontrolMultiField matchgroup=debcontrolKey start="^\%(Build-\%(Conflicts\|Depends\)\%(-Arch\|-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Breaks\|Enhances\|Replaces\|Conflicts\|Provides\|Built-Using\|Static-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
Bram Moolenaarfa3b7232021-12-24 13:18:38 +000098syn region debcontrolMultiFieldSpell matchgroup=debcontrolKey start="^Description: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell
99
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100" Fields for which we do strict syntax checking
Bram Moolenaar72540672018-02-09 22:00:53 +0100101syn region debcontrolStrictField matchgroup=debcontrolKey start="^Architecture: *" end="$" contains=debcontrolArchitecture,debcontrolSpace oneline
102syn region debcontrolStrictField matchgroup=debcontrolKey start="^Multi-Arch: *" end="$" contains=debcontrolMultiArch oneline
103syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Package\|Source\): *" end="$" contains=debcontrolName oneline
104syn region debcontrolStrictField matchgroup=debcontrolKey start="^Priority: *" end="$" contains=debcontrolPriority oneline
105syn region debcontrolStrictField matchgroup=debcontrolKey start="^Section: *" end="$" contains=debcontrolSection oneline
106syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XC-\)\=Package-Type: *" end="$" contains=debcontrolPackageType oneline
107syn region debcontrolStrictField matchgroup=debcontrolKey start="^Homepage: *" end="$" contains=debcontrolHTTPUrl oneline keepend
Bram Moolenaarfa3b7232021-12-24 13:18:38 +0000108syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\): *" end="$" contains=debcontrolHTTPUrl oneline keepend
109syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Svn: *" end="$" contains=debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
110syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Cvs: *" end="$" contains=debcontrolVcsCvs oneline keepend
111syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Git: *" end="$" contains=debcontrolVcsGit oneline keepend
Bram Moolenaar72540672018-02-09 22:00:53 +0100112syn region debcontrolStrictField matchgroup=debcontrolKey start="^Rules-Requires-Root: *" end="$" contains=debcontrolR3 oneline
113syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Build-\)\=Essential: *" end="$" contains=debcontrolYesNo oneline
114
115syn region debcontrolStrictField matchgroup=debcontrolDeprecatedKey start="^\%(XS-\)\=DM-Upload-Allowed: *" end="$" contains=debcontrolDmUpload oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000116
Bram Moolenaar071d4272004-06-13 20:20:40 +0000117" Associate our matches and regions with pretty colours
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200118hi def link debcontrolKey Keyword
119hi def link debcontrolField Normal
120hi def link debcontrolStrictField Error
121hi def link debcontrolDeprecatedKey Error
122hi def link debcontrolMultiField Normal
123hi def link debcontrolArchitecture Normal
124hi def link debcontrolMultiArch Normal
125hi def link debcontrolName Normal
126hi def link debcontrolPriority Normal
127hi def link debcontrolSection Normal
128hi def link debcontrolPackageType Normal
129hi def link debcontrolVariable Identifier
130hi def link debcontrolEmail Identifier
131hi def link debcontrolVcsSvn Identifier
132hi def link debcontrolVcsCvs Identifier
133hi def link debcontrolVcsGit Identifier
134hi def link debcontrolHTTPUrl Identifier
135hi def link debcontrolDmUpload Identifier
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +0100136hi def link debcontrolYesNo Identifier
137hi def link debcontrolR3 Identifier
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200138hi def link debcontrolComment Comment
139hi def link debcontrolElse Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000140
Bram Moolenaar85eee132018-05-06 17:57:30 +0200141let b:current_syntax = 'debcontrol'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000142
Bram Moolenaar07d87792014-07-19 14:04:47 +0200143let &cpo = s:cpo_save
144unlet s:cpo_save
145
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146" vim: ts=8 sw=2