blob: e98a6d3f3629126fa4b7e3f9d4c9dc5f988ee5c4 [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>
James McCoy48c823c2025-07-06 17:59:40 +02006" Last Change: 2025 Jul 05
Bram Moolenaarbe4e0162023-02-02 13:59:48 +00007" 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
Viktor Szépedbf749b2023-10-16 09:53:37 +020025" Common separators
Bram Moolenaarc572da52017-08-27 16:52:01 +020026syn match debControlComma ",[ \t]*"
27syn match debControlSpace "[ \t]"
Bram Moolenaar071d4272004-06-13 20:20:40 +000028
James McCoy48c823c2025-07-06 17:59:40 +020029runtime! syntax/shared/debarchitectures.vim
Bram Moolenaar07d87792014-07-19 14:04:47 +020030
Bram Moolenaar071d4272004-06-13 20:20:40 +000031" Define some common expressions we can use later on
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010032syn keyword debcontrolArchitecture contained all any
James McCoy48c823c2025-07-06 17:59:40 +020033exe 'syn keyword debcontrolArchitecture contained '. join(g:debArchitectureKernelAnyArch)
34exe 'syn keyword debcontrolArchitecture contained '. join(g:debArchitectureAnyKernelArch)
35exe 'syn keyword debcontrolArchitecture contained '. join(g:debArchitectureArchs)
Bram Moolenaar07d87792014-07-19 14:04:47 +020036
Bram Moolenaar3132cdd2020-11-05 20:41:49 +010037" Keep in sync with https://metadata.ftp-master.org/sections.822
38" 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 +010039let s:sections = [
40 \ 'admin', 'cli-mono', 'comm', 'database', 'debian-installer', 'debug'
41 \, 'devel', 'doc', 'editors', 'education', 'electronics', 'embedded'
Bram Moolenaar3132cdd2020-11-05 20:41:49 +010042 \, 'fonts', 'games', 'gnome', 'gnu-r', 'gnustep', 'golang', 'graphics'
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010043 \, 'hamradio', 'haskell', 'httpd', 'interpreters', 'introspection'
Bram Moolenaar3132cdd2020-11-05 20:41:49 +010044 \, 'java', 'javascript', 'kde', 'kernel', 'libdevel', 'libs', 'lisp'
45 \, 'localization', 'mail', 'math', 'metapackages', 'misc', 'net', 'news'
46 \, 'ocaml', 'oldlibs', 'otherosfs', 'perl', 'php', 'python', 'raku'
47 \, 'ruby', 'rust', 'science', 'shells', 'sound', 'tasks', 'tex', 'text'
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010048 \, 'utils', 'vcs', 'video', 'web', 'x11', 'xfce', 'zope'
49 \ ]
50
51syn keyword debcontrolMultiArch contained no foreign allowed same
Bram Moolenaar8c8de832008-06-24 22:58:06 +000052syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010053syn keyword debcontrolPriority contained extra important optional required standard
Bram Moolenaar3132cdd2020-11-05 20:41:49 +010054exe '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 +010055syn keyword debcontrolPackageType contained udeb deb
Bram Moolenaar071d4272004-06-13 20:20:40 +000056syn match debcontrolVariable contained "\${.\{-}}"
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010057syn keyword debcontrolDmUpload contained yes
58syn keyword debcontrolYesNo contained yes no
59syn match debcontrolR3 contained "\<\%(no\|binary-targets\|[[:graph:]]\+/[[:graph:]]\+\%( \+[[:graph:]]\+/[[:graph:]]\+\)*\)\>"
60
61unlet s:sections
Bram Moolenaar071d4272004-06-13 20:20:40 +000062
Bram Moolenaar8c8de832008-06-24 22:58:06 +000063" A URL (using the domain name definitions from RFC 1034 and 1738), right now
64" only enforce protocol and some sanity on the server/path part;
65syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
66syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
67syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$"
Bram Moolenaarf2571c62015-06-09 19:44:55 +020068syn 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 +000069
Bram Moolenaar071d4272004-06-13 20:20:40 +000070" An email address
71syn match debcontrolEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
72syn match debcontrolEmail "<.\{-}>"
73
Bram Moolenaar8c8de832008-06-24 22:58:06 +000074" #-Comments
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020075syn match debcontrolComment "^#.*$" contains=@Spell
Bram Moolenaar8c8de832008-06-24 22:58:06 +000076
77syn case ignore
78
Bram Moolenaar72540672018-02-09 22:00:53 +010079" Handle all fields from deb-src-control(5)
Bram Moolenaar071d4272004-06-13 20:20:40 +000080
Bram Moolenaarfa3b7232021-12-24 13:18:38 +000081" Catch-all for the legal fields
82syn 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 -030083syn 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 +000084syn region debcontrolMultiFieldSpell matchgroup=debcontrolKey start="^Description: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell
85
Bram Moolenaar071d4272004-06-13 20:20:40 +000086" Fields for which we do strict syntax checking
Bram Moolenaar72540672018-02-09 22:00:53 +010087syn region debcontrolStrictField matchgroup=debcontrolKey start="^Architecture: *" end="$" contains=debcontrolArchitecture,debcontrolSpace oneline
88syn region debcontrolStrictField matchgroup=debcontrolKey start="^Multi-Arch: *" end="$" contains=debcontrolMultiArch oneline
89syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Package\|Source\): *" end="$" contains=debcontrolName oneline
90syn region debcontrolStrictField matchgroup=debcontrolKey start="^Priority: *" end="$" contains=debcontrolPriority oneline
91syn region debcontrolStrictField matchgroup=debcontrolKey start="^Section: *" end="$" contains=debcontrolSection oneline
92syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XC-\)\=Package-Type: *" end="$" contains=debcontrolPackageType oneline
93syn region debcontrolStrictField matchgroup=debcontrolKey start="^Homepage: *" end="$" contains=debcontrolHTTPUrl oneline keepend
Bram Moolenaarfa3b7232021-12-24 13:18:38 +000094syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\): *" end="$" contains=debcontrolHTTPUrl oneline keepend
95syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Svn: *" end="$" contains=debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
96syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Cvs: *" end="$" contains=debcontrolVcsCvs oneline keepend
97syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Git: *" end="$" contains=debcontrolVcsGit oneline keepend
Bram Moolenaar72540672018-02-09 22:00:53 +010098syn region debcontrolStrictField matchgroup=debcontrolKey start="^Rules-Requires-Root: *" end="$" contains=debcontrolR3 oneline
99syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Build-\)\=Essential: *" end="$" contains=debcontrolYesNo oneline
100
101syn region debcontrolStrictField matchgroup=debcontrolDeprecatedKey start="^\%(XS-\)\=DM-Upload-Allowed: *" end="$" contains=debcontrolDmUpload oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102
Bram Moolenaar071d4272004-06-13 20:20:40 +0000103" Associate our matches and regions with pretty colours
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200104hi def link debcontrolKey Keyword
105hi def link debcontrolField Normal
106hi def link debcontrolStrictField Error
107hi def link debcontrolDeprecatedKey Error
108hi def link debcontrolMultiField Normal
109hi def link debcontrolArchitecture Normal
110hi def link debcontrolMultiArch Normal
111hi def link debcontrolName Normal
112hi def link debcontrolPriority Normal
113hi def link debcontrolSection Normal
114hi def link debcontrolPackageType Normal
115hi def link debcontrolVariable Identifier
116hi def link debcontrolEmail Identifier
117hi def link debcontrolVcsSvn Identifier
118hi def link debcontrolVcsCvs Identifier
119hi def link debcontrolVcsGit Identifier
120hi def link debcontrolHTTPUrl Identifier
121hi def link debcontrolDmUpload Identifier
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +0100122hi def link debcontrolYesNo Identifier
123hi def link debcontrolR3 Identifier
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200124hi def link debcontrolComment Comment
125hi def link debcontrolElse Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000126
Bram Moolenaar85eee132018-05-06 17:57:30 +0200127let b:current_syntax = 'debcontrol'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000128
Bram Moolenaar07d87792014-07-19 14:04:47 +0200129let &cpo = s:cpo_save
130unlet s:cpo_save
131
Bram Moolenaar071d4272004-06-13 20:20:40 +0000132" vim: ts=8 sw=2