blob: b8790747aa65a9f3e6b52f01d994e69dab4a9abb [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 Moolenaard68071d2006-05-02 22:08:30 +00003" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
4" Former Maintainers: Gerfried Fuchs <alfie@ist.org>
5" Wichert Akkerman <wakkerma@debian.org>
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +01006" Last Change: 2017 Nov 04
Bram Moolenaar256972a2015-12-29 19:10:25 +01007" URL: https://anonscm.debian.org/cgit/pkg-vim/vim.git/plain/runtime/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'
55 \, 'java', 'javascript', 'kde', 'kernel', 'libs', 'libdevel', 'lisp'
56 \, '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 Moolenaar7f2e9d72017-11-11 20:58:53 +010090" List of all legal keys, in order, from deb-src-control(5)
91" Source fields
92syn match debcontrolKey contained "^\%(Source\|Maintainer\|Uploaders\|Standards-Version\|Description\|Homepage\|Bugs\|Rules-Requires-Root\): *"
93syn match debcontrolKey contained "^\%(XS-\)\=Vcs-\%(Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\|Browser\): *"
94syn match debcontrolKey contained "^\%(Origin\|Section\|Priority\): *"
95syn match debcontrolKey contained "^Build-\%(Depends\|Conflicts\)\%(-Arch\|-Indep\)\=: *"
96
97" Binary fields
98syn match debcontrolKey contained "^\%(Package\%(-Type\)\=\|Architecture\|Build-Profiles\): *"
99syn match debcontrolKey contained "^\%(\%(Build-\)\=Essential\|Multi-Arch\|Tag\): *"
100syn match debcontrolKey contained "^\%(\%(Pre-\)\=Depends\|Recommends\|Suggests\|Breaks\|Enhances\|Replaces\|Conflicts\|Provides\|Built-Using\): *"
101syn match debcontrolKey contained "^\%(Subarchitecture\|Kernel-Version\|Installer-Menu-Item\): *"
102
103" User-defined fields
104syn match debcontrolKey contained "^X[SBC]\{0,3\}\%(-Private\)\=-[-a-zA-Z0-9]\+: *"
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100105
106syn match debcontrolDeprecatedKey contained "^\%(\%(XS-\)\=DM-Upload-Allowed\): *"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000107
108" Fields for which we do strict syntax checking
109syn region debcontrolStrictField start="^Architecture" end="$" contains=debcontrolKey,debcontrolArchitecture,debcontrolSpace oneline
Bram Moolenaar251e1912011-06-19 05:09:16 +0200110syn region debcontrolStrictField start="^Multi-Arch" end="$" contains=debcontrolKey,debcontrolMultiArch oneline
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +0100111syn region debcontrolStrictField start="^\%(Package\|Source\)" end="$" contains=debcontrolKey,debcontrolName oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112syn region debcontrolStrictField start="^Priority" end="$" contains=debcontrolKey,debcontrolPriority oneline
113syn region debcontrolStrictField start="^Section" end="$" contains=debcontrolKey,debcontrolSection oneline
Bram Moolenaar251e1912011-06-19 05:09:16 +0200114syn region debcontrolStrictField start="^\%(XC-\)\=Package-Type" end="$" contains=debcontrolKey,debcontrolPackageType oneline
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000115syn region debcontrolStrictField start="^Homepage" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
Bram Moolenaar5c736222010-01-06 20:54:52 +0100116syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\)" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
117syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Svn" end="$" contains=debcontrolKey,debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
118syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Cvs" end="$" contains=debcontrolKey,debcontrolVcsCvs oneline keepend
119syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Git" end="$" contains=debcontrolKey,debcontrolVcsGit oneline keepend
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100120syn region debcontrolStrictField start="^\%(XS-\)\=DM-Upload-Allowed" end="$" contains=debcontrolDeprecatedKey,debcontrolDmUpload oneline
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +0100121syn region debcontrolStrictField start="^Rules-Requires-Root" end="$" contains=debcontrolKey,debcontrolR3 oneline
122syn region debcontrolStrictField start="^\%(Build-\)\=Essential" end="$" contains=debcontrolKey,debcontrolYesNo oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000123
124" Catch-all for the other legal fields
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +0100125syn region debcontrolField start="^\%(\%(XSBC-Original-\)\=Maintainer\|Standards-Version\|Bugs\|Origin\|X[SB]-Python-Version\|\%(XS-\)\=Vcs-Mtn\|\%(XS-\)\=Testsuite\|Build-Profiles\|Tag\|Subarchitecture\|Kernel-Version\|Installer-Menu-Item\):" end="$" contains=debcontrolKey,debcontrolVariable,debcontrolEmail oneline
126syn region debcontrolMultiField 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=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment
Bram Moolenaarc572da52017-08-27 16:52:01 +0200127syn region debcontrolMultiFieldSpell start="^\%(Description\):" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000128
129" Associate our matches and regions with pretty colours
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200130hi def link debcontrolKey Keyword
131hi def link debcontrolField Normal
132hi def link debcontrolStrictField Error
133hi def link debcontrolDeprecatedKey Error
134hi def link debcontrolMultiField Normal
135hi def link debcontrolArchitecture Normal
136hi def link debcontrolMultiArch Normal
137hi def link debcontrolName Normal
138hi def link debcontrolPriority Normal
139hi def link debcontrolSection Normal
140hi def link debcontrolPackageType Normal
141hi def link debcontrolVariable Identifier
142hi def link debcontrolEmail Identifier
143hi def link debcontrolVcsSvn Identifier
144hi def link debcontrolVcsCvs Identifier
145hi def link debcontrolVcsGit Identifier
146hi def link debcontrolHTTPUrl Identifier
147hi def link debcontrolDmUpload Identifier
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +0100148hi def link debcontrolYesNo Identifier
149hi def link debcontrolR3 Identifier
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200150hi def link debcontrolComment Comment
151hi def link debcontrolElse Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152
153let b:current_syntax = "debcontrol"
154
Bram Moolenaar07d87792014-07-19 14:04:47 +0200155let &cpo = s:cpo_save
156unlet s:cpo_save
157
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158" vim: ts=8 sw=2