Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | " Vim syntax file |
Bram Moolenaar | 00a927d | 2010-05-14 23:24:24 +0200 | [diff] [blame] | 2 | " Language: Debian control files |
Bram Moolenaar | 7254067 | 2018-02-09 22:00:53 +0100 | [diff] [blame] | 3 | " Maintainer: Debian Vim Maintainers |
Bram Moolenaar | d68071d | 2006-05-02 22:08:30 +0000 | [diff] [blame] | 4 | " Former Maintainers: Gerfried Fuchs <alfie@ist.org> |
| 5 | " Wichert Akkerman <wakkerma@debian.org> |
James McCoy | 48c823c | 2025-07-06 17:59:40 +0200 | [diff] [blame] | 6 | " Last Change: 2025 Jul 05 |
Bram Moolenaar | be4e016 | 2023-02-02 13:59:48 +0000 | [diff] [blame] | 7 | " URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debcontrol.vim |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 8 | |
| 9 | " Standard syntax initialization |
Bram Moolenaar | 85eee13 | 2018-05-06 17:57:30 +0200 | [diff] [blame] | 10 | if exists('b:current_syntax') |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 11 | finish |
| 12 | endif |
| 13 | |
Bram Moolenaar | 07d8779 | 2014-07-19 14:04:47 +0200 | [diff] [blame] | 14 | let s:cpo_save = &cpo |
| 15 | set cpo&vim |
| 16 | |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 17 | " Should match case except for the keys of each field |
| 18 | syn case match |
| 19 | |
Bram Moolenaar | 3f32a5f | 2022-05-12 20:34:15 +0100 | [diff] [blame] | 20 | syn iskeyword @,48-57,- |
Bram Moolenaar | 7f2e9d7 | 2017-11-11 20:58:53 +0100 | [diff] [blame] | 21 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 22 | " Everything that is not explicitly matched by the rules below |
| 23 | syn match debcontrolElse "^.*$" |
| 24 | |
Viktor Szépe | dbf749b | 2023-10-16 09:53:37 +0200 | [diff] [blame] | 25 | " Common separators |
Bram Moolenaar | c572da5 | 2017-08-27 16:52:01 +0200 | [diff] [blame] | 26 | syn match debControlComma ",[ \t]*" |
| 27 | syn match debControlSpace "[ \t]" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 28 | |
James McCoy | 48c823c | 2025-07-06 17:59:40 +0200 | [diff] [blame] | 29 | runtime! syntax/shared/debarchitectures.vim |
Bram Moolenaar | 07d8779 | 2014-07-19 14:04:47 +0200 | [diff] [blame] | 30 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 31 | " Define some common expressions we can use later on |
Bram Moolenaar | 7f2e9d7 | 2017-11-11 20:58:53 +0100 | [diff] [blame] | 32 | syn keyword debcontrolArchitecture contained all any |
James McCoy | 48c823c | 2025-07-06 17:59:40 +0200 | [diff] [blame] | 33 | exe 'syn keyword debcontrolArchitecture contained '. join(g:debArchitectureKernelAnyArch) |
| 34 | exe 'syn keyword debcontrolArchitecture contained '. join(g:debArchitectureAnyKernelArch) |
| 35 | exe 'syn keyword debcontrolArchitecture contained '. join(g:debArchitectureArchs) |
Bram Moolenaar | 07d8779 | 2014-07-19 14:04:47 +0200 | [diff] [blame] | 36 | |
Bram Moolenaar | 3132cdd | 2020-11-05 20:41:49 +0100 | [diff] [blame] | 37 | " 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 Moolenaar | 7f2e9d7 | 2017-11-11 20:58:53 +0100 | [diff] [blame] | 39 | let s:sections = [ |
| 40 | \ 'admin', 'cli-mono', 'comm', 'database', 'debian-installer', 'debug' |
| 41 | \, 'devel', 'doc', 'editors', 'education', 'electronics', 'embedded' |
Bram Moolenaar | 3132cdd | 2020-11-05 20:41:49 +0100 | [diff] [blame] | 42 | \, 'fonts', 'games', 'gnome', 'gnu-r', 'gnustep', 'golang', 'graphics' |
Bram Moolenaar | 7f2e9d7 | 2017-11-11 20:58:53 +0100 | [diff] [blame] | 43 | \, 'hamradio', 'haskell', 'httpd', 'interpreters', 'introspection' |
Bram Moolenaar | 3132cdd | 2020-11-05 20:41:49 +0100 | [diff] [blame] | 44 | \, '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 Moolenaar | 7f2e9d7 | 2017-11-11 20:58:53 +0100 | [diff] [blame] | 48 | \, 'utils', 'vcs', 'video', 'web', 'x11', 'xfce', 'zope' |
| 49 | \ ] |
| 50 | |
| 51 | syn keyword debcontrolMultiArch contained no foreign allowed same |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 52 | syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+" |
Bram Moolenaar | 7f2e9d7 | 2017-11-11 20:58:53 +0100 | [diff] [blame] | 53 | syn keyword debcontrolPriority contained extra important optional required standard |
Bram Moolenaar | 3132cdd | 2020-11-05 20:41:49 +0100 | [diff] [blame] | 54 | exe 'syn match debcontrolSection contained "\%(\%(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\|restricted\|universe\|multiverse\)/\)\=\<\%('.join(s:sections, '\|').'\)\>"' |
Bram Moolenaar | 7f2e9d7 | 2017-11-11 20:58:53 +0100 | [diff] [blame] | 55 | syn keyword debcontrolPackageType contained udeb deb |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 56 | syn match debcontrolVariable contained "\${.\{-}}" |
Bram Moolenaar | 7f2e9d7 | 2017-11-11 20:58:53 +0100 | [diff] [blame] | 57 | syn keyword debcontrolDmUpload contained yes |
| 58 | syn keyword debcontrolYesNo contained yes no |
| 59 | syn match debcontrolR3 contained "\<\%(no\|binary-targets\|[[:graph:]]\+/[[:graph:]]\+\%( \+[[:graph:]]\+/[[:graph:]]\+\)*\)\>" |
| 60 | |
| 61 | unlet s:sections |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 62 | |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 63 | " 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; |
| 65 | syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$" |
| 66 | syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$" |
| 67 | syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$" |
Bram Moolenaar | f2571c6 | 2015-06-09 19:44:55 +0200 | [diff] [blame] | 68 | syn match debcontrolVcsGit contained "\v%(git|https?)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?%(\s+-b\s+[^ ~^:?*[\\]+)?$" |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 69 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 70 | " An email address |
| 71 | syn match debcontrolEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+" |
| 72 | syn match debcontrolEmail "<.\{-}>" |
| 73 | |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 74 | " #-Comments |
Bram Moolenaar | 3a0d809 | 2012-10-21 03:02:54 +0200 | [diff] [blame] | 75 | syn match debcontrolComment "^#.*$" contains=@Spell |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 76 | |
| 77 | syn case ignore |
| 78 | |
Bram Moolenaar | 7254067 | 2018-02-09 22:00:53 +0100 | [diff] [blame] | 79 | " Handle all fields from deb-src-control(5) |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 80 | |
Bram Moolenaar | fa3b723 | 2021-12-24 13:18:38 +0000 | [diff] [blame] | 81 | " Catch-all for the legal fields |
| 82 | syn 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 Puida | 677cd95 | 2024-03-28 05:56:50 -0300 | [diff] [blame] | 83 | syn 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 Moolenaar | fa3b723 | 2021-12-24 13:18:38 +0000 | [diff] [blame] | 84 | syn region debcontrolMultiFieldSpell matchgroup=debcontrolKey start="^Description: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell |
| 85 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 86 | " Fields for which we do strict syntax checking |
Bram Moolenaar | 7254067 | 2018-02-09 22:00:53 +0100 | [diff] [blame] | 87 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^Architecture: *" end="$" contains=debcontrolArchitecture,debcontrolSpace oneline |
| 88 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^Multi-Arch: *" end="$" contains=debcontrolMultiArch oneline |
| 89 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Package\|Source\): *" end="$" contains=debcontrolName oneline |
| 90 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^Priority: *" end="$" contains=debcontrolPriority oneline |
| 91 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^Section: *" end="$" contains=debcontrolSection oneline |
| 92 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XC-\)\=Package-Type: *" end="$" contains=debcontrolPackageType oneline |
| 93 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^Homepage: *" end="$" contains=debcontrolHTTPUrl oneline keepend |
Bram Moolenaar | fa3b723 | 2021-12-24 13:18:38 +0000 | [diff] [blame] | 94 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\): *" end="$" contains=debcontrolHTTPUrl oneline keepend |
| 95 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Svn: *" end="$" contains=debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend |
| 96 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Cvs: *" end="$" contains=debcontrolVcsCvs oneline keepend |
| 97 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-[-a-zA-Z0-9]\+-\)\=Vcs-Git: *" end="$" contains=debcontrolVcsGit oneline keepend |
Bram Moolenaar | 7254067 | 2018-02-09 22:00:53 +0100 | [diff] [blame] | 98 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^Rules-Requires-Root: *" end="$" contains=debcontrolR3 oneline |
| 99 | syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Build-\)\=Essential: *" end="$" contains=debcontrolYesNo oneline |
| 100 | |
| 101 | syn region debcontrolStrictField matchgroup=debcontrolDeprecatedKey start="^\%(XS-\)\=DM-Upload-Allowed: *" end="$" contains=debcontrolDmUpload oneline |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 102 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 103 | " Associate our matches and regions with pretty colours |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 104 | hi def link debcontrolKey Keyword |
| 105 | hi def link debcontrolField Normal |
| 106 | hi def link debcontrolStrictField Error |
| 107 | hi def link debcontrolDeprecatedKey Error |
| 108 | hi def link debcontrolMultiField Normal |
| 109 | hi def link debcontrolArchitecture Normal |
| 110 | hi def link debcontrolMultiArch Normal |
| 111 | hi def link debcontrolName Normal |
| 112 | hi def link debcontrolPriority Normal |
| 113 | hi def link debcontrolSection Normal |
| 114 | hi def link debcontrolPackageType Normal |
| 115 | hi def link debcontrolVariable Identifier |
| 116 | hi def link debcontrolEmail Identifier |
| 117 | hi def link debcontrolVcsSvn Identifier |
| 118 | hi def link debcontrolVcsCvs Identifier |
| 119 | hi def link debcontrolVcsGit Identifier |
| 120 | hi def link debcontrolHTTPUrl Identifier |
| 121 | hi def link debcontrolDmUpload Identifier |
Bram Moolenaar | 7f2e9d7 | 2017-11-11 20:58:53 +0100 | [diff] [blame] | 122 | hi def link debcontrolYesNo Identifier |
| 123 | hi def link debcontrolR3 Identifier |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 124 | hi def link debcontrolComment Comment |
| 125 | hi def link debcontrolElse Special |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 126 | |
Bram Moolenaar | 85eee13 | 2018-05-06 17:57:30 +0200 | [diff] [blame] | 127 | let b:current_syntax = 'debcontrol' |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 128 | |
Bram Moolenaar | 07d8779 | 2014-07-19 14:04:47 +0200 | [diff] [blame] | 129 | let &cpo = s:cpo_save |
| 130 | unlet s:cpo_save |
| 131 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 132 | " vim: ts=8 sw=2 |