blob: 945812f25cfe751d6549dd4d50eb6cb949aaeded [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 Moolenaar72540672018-02-09 22:00:53 +01006" Last Change: 2018 Jan 06
7" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/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 Moolenaar7f2e9d72017-11-11 20:58:53 +010020syn iskeyword @,48-57,-,/
21
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'
33 \, 'powerpcspe', 'powerpc', 'ppc64el', 'ppc64', 's390x', 's390', 'sh3eb'
34 \, '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
43exe 'syn keyword debcontrolArchitecture contained '. join(map(s:kernels, {k,v -> v .'-any'}))
44exe 'syn keyword debcontrolArchitecture contained '. join(map(s:archs, {k,v -> 'any-'.v}))
45exe '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 Moolenaar7f2e9d72017-11-11 20:58:53 +010050let s:sections = [
51 \ 'admin', 'cli-mono', 'comm', 'database', 'debian-installer', 'debug'
52 \, 'devel', 'doc', 'editors', 'education', 'electronics', 'embedded'
53 \, 'fonts', 'games', 'gnome', 'gnustep', 'gnu-r', 'golang', 'graphics'
54 \, 'hamradio', 'haskell', 'httpd', 'interpreters', 'introspection'
Bram Moolenaar72540672018-02-09 22:00:53 +010055 \, 'java\%(script\)\=', 'kde', 'kernel', 'libs', 'libdevel', 'lisp'
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010056 \, 'localization', 'mail', 'math', 'metapackages', 'misc', 'net'
57 \, 'news', 'ocaml', 'oldlibs', 'otherosfs', 'perl', 'php', 'python'
58 \, 'ruby', 'rust', 'science', 'shells', 'sound', 'text', 'tex'
59 \, 'utils', 'vcs', 'video', 'web', 'x11', 'xfce', 'zope'
60 \ ]
61
62syn keyword debcontrolMultiArch contained no foreign allowed same
Bram Moolenaar8c8de832008-06-24 22:58:06 +000063syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010064syn keyword debcontrolPriority contained extra important optional required standard
65exe 'syn match debcontrolSection contained "\%(\%(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\|restricted\|universe\|multiverse\)/\)\=\%('.join(s:sections, '\|').'\)"'
66syn keyword debcontrolPackageType contained udeb deb
Bram Moolenaar071d4272004-06-13 20:20:40 +000067syn match debcontrolVariable contained "\${.\{-}}"
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +010068syn keyword debcontrolDmUpload contained yes
69syn keyword debcontrolYesNo contained yes no
70syn match debcontrolR3 contained "\<\%(no\|binary-targets\|[[:graph:]]\+/[[:graph:]]\+\%( \+[[:graph:]]\+/[[:graph:]]\+\)*\)\>"
71
72unlet s:sections
Bram Moolenaar071d4272004-06-13 20:20:40 +000073
Bram Moolenaar8c8de832008-06-24 22:58:06 +000074" A URL (using the domain name definitions from RFC 1034 and 1738), right now
75" only enforce protocol and some sanity on the server/path part;
76syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
77syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
78syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$"
Bram Moolenaarf2571c62015-06-09 19:44:55 +020079syn 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 +000080
Bram Moolenaar071d4272004-06-13 20:20:40 +000081" An email address
82syn match debcontrolEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
83syn match debcontrolEmail "<.\{-}>"
84
Bram Moolenaar8c8de832008-06-24 22:58:06 +000085" #-Comments
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020086syn match debcontrolComment "^#.*$" contains=@Spell
Bram Moolenaar8c8de832008-06-24 22:58:06 +000087
88syn case ignore
89
Bram Moolenaar72540672018-02-09 22:00:53 +010090" Handle all fields from deb-src-control(5)
Bram Moolenaar071d4272004-06-13 20:20:40 +000091
92" Fields for which we do strict syntax checking
Bram Moolenaar72540672018-02-09 22:00:53 +010093syn region debcontrolStrictField matchgroup=debcontrolKey start="^Architecture: *" end="$" contains=debcontrolArchitecture,debcontrolSpace oneline
94syn region debcontrolStrictField matchgroup=debcontrolKey start="^Multi-Arch: *" end="$" contains=debcontrolMultiArch oneline
95syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Package\|Source\): *" end="$" contains=debcontrolName oneline
96syn region debcontrolStrictField matchgroup=debcontrolKey start="^Priority: *" end="$" contains=debcontrolPriority oneline
97syn region debcontrolStrictField matchgroup=debcontrolKey start="^Section: *" end="$" contains=debcontrolSection oneline
98syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XC-\)\=Package-Type: *" end="$" contains=debcontrolPackageType oneline
99syn region debcontrolStrictField matchgroup=debcontrolKey start="^Homepage: *" end="$" contains=debcontrolHTTPUrl oneline keepend
100syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\): *" end="$" contains=debcontrolHTTPUrl oneline keepend
101syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-Svn: *" end="$" contains=debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
102syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-Cvs: *" end="$" contains=debcontrolVcsCvs oneline keepend
103syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-Git: *" end="$" contains=debcontrolVcsGit oneline keepend
104syn region debcontrolStrictField matchgroup=debcontrolKey start="^Rules-Requires-Root: *" end="$" contains=debcontrolR3 oneline
105syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Build-\)\=Essential: *" end="$" contains=debcontrolYesNo oneline
106
107syn region debcontrolStrictField matchgroup=debcontrolDeprecatedKey start="^\%(XS-\)\=DM-Upload-Allowed: *" end="$" contains=debcontrolDmUpload oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000108
109" Catch-all for the other legal fields
Bram Moolenaar72540672018-02-09 22:00:53 +0100110syn 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
111syn 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
112syn region debcontrolMultiFieldSpell matchgroup=debcontrolKey start="^Description: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000113
114" Associate our matches and regions with pretty colours
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200115hi def link debcontrolKey Keyword
116hi def link debcontrolField Normal
117hi def link debcontrolStrictField Error
118hi def link debcontrolDeprecatedKey Error
119hi def link debcontrolMultiField Normal
120hi def link debcontrolArchitecture Normal
121hi def link debcontrolMultiArch Normal
122hi def link debcontrolName Normal
123hi def link debcontrolPriority Normal
124hi def link debcontrolSection Normal
125hi def link debcontrolPackageType Normal
126hi def link debcontrolVariable Identifier
127hi def link debcontrolEmail Identifier
128hi def link debcontrolVcsSvn Identifier
129hi def link debcontrolVcsCvs Identifier
130hi def link debcontrolVcsGit Identifier
131hi def link debcontrolHTTPUrl Identifier
132hi def link debcontrolDmUpload Identifier
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +0100133hi def link debcontrolYesNo Identifier
134hi def link debcontrolR3 Identifier
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200135hi def link debcontrolComment Comment
136hi def link debcontrolElse Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137
138let b:current_syntax = "debcontrol"
139
Bram Moolenaar07d87792014-07-19 14:04:47 +0200140let &cpo = s:cpo_save
141unlet s:cpo_save
142
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143" vim: ts=8 sw=2