1" Vim syntax file 2" Language: Debian control files 3" Maintainer: Debian Vim Maintainers 4" Former Maintainers: Gerfried Fuchs <[email protected]> 5" Wichert Akkerman <[email protected]> 6" Last Change: 2020 Oct 26 7" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debcontrol.vim 8 9" Standard syntax initialization 10if exists('b:current_syntax') 11 finish 12endif 13 14let s:cpo_save = &cpo 15set cpo&vim 16 17" Should match case except for the keys of each field 18syn case match 19 20syn iskeyword @,48-57,-,/ 21 22" Everything that is not explicitly matched by the rules below 23syn match debcontrolElse "^.*$" 24 25" Common seperators 26syn match debControlComma ",[ \t]*" 27syn match debControlSpace "[ \t]" 28 29let 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', 'riscv64', '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 \ ] 40 41" Define some common expressions we can use later on 42syn keyword debcontrolArchitecture contained all any 43exe 'syn keyword debcontrolArchitecture contained '. join(map(copy(s:kernels), {k,v -> v .'-any'})) 44exe 'syn keyword debcontrolArchitecture contained '. join(map(copy(s:archs), {k,v -> 'any-'.v})) 45exe 'syn keyword debcontrolArchitecture contained '. join(s:archs) 46exe 'syn keyword debcontrolArchitecture contained '. join(s:pairs) 47 48unlet s:kernels s:archs s:pairs 49 50" Keep in sync with https://metadata.ftp-master.org/sections.822 51" curl -q https://metadata.ftp-master.debian.org/sections.822 2>/dev/null| grep-dctrl -n --not -FSection -sSection / - 52let s:sections = [ 53 \ 'admin', 'cli-mono', 'comm', 'database', 'debian-installer', 'debug' 54 \, 'devel', 'doc', 'editors', 'education', 'electronics', 'embedded' 55 \, 'fonts', 'games', 'gnome', 'gnu-r', 'gnustep', 'golang', 'graphics' 56 \, 'hamradio', 'haskell', 'httpd', 'interpreters', 'introspection' 57 \, 'java', 'javascript', 'kde', 'kernel', 'libdevel', 'libs', 'lisp' 58 \, 'localization', 'mail', 'math', 'metapackages', 'misc', 'net', 'news' 59 \, 'ocaml', 'oldlibs', 'otherosfs', 'perl', 'php', 'python', 'raku' 60 \, 'ruby', 'rust', 'science', 'shells', 'sound', 'tasks', 'tex', 'text' 61 \, 'utils', 'vcs', 'video', 'web', 'x11', 'xfce', 'zope' 62 \ ] 63 64syn keyword debcontrolMultiArch contained no foreign allowed same 65syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+" 66syn keyword debcontrolPriority contained extra important optional required standard 67exe 'syn match debcontrolSection contained "\%(\%(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\|restricted\|universe\|multiverse\)/\)\=\<\%('.join(s:sections, '\|').'\)\>"' 68syn keyword debcontrolPackageType contained udeb deb 69syn match debcontrolVariable contained "\${.\{-}}" 70syn keyword debcontrolDmUpload contained yes 71syn keyword debcontrolYesNo contained yes no 72syn match debcontrolR3 contained "\<\%(no\|binary-targets\|[[:graph:]]\+/[[:graph:]]\+\%( \+[[:graph:]]\+/[[:graph:]]\+\)*\)\>" 73 74unlet s:sections 75 76" A URL (using the domain name definitions from RFC 1034 and 1738), right now 77" only enforce protocol and some sanity on the server/path part; 78syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$" 79syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$" 80syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$" 81syn match debcontrolVcsGit contained "\v%(git|https?)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?%(\s+-b\s+[^ ~^:?*[\\]+)?$" 82 83" An email address 84syn match debcontrolEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+" 85syn match debcontrolEmail "<.\{-}>" 86 87" #-Comments 88syn match debcontrolComment "^#.*$" contains=@Spell 89 90syn case ignore 91 92" Handle all fields from deb-src-control(5) 93 94" Fields for which we do strict syntax checking 95syn region debcontrolStrictField matchgroup=debcontrolKey start="^Architecture: *" end="$" contains=debcontrolArchitecture,debcontrolSpace oneline 96syn region debcontrolStrictField matchgroup=debcontrolKey start="^Multi-Arch: *" end="$" contains=debcontrolMultiArch oneline 97syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Package\|Source\): *" end="$" contains=debcontrolName oneline 98syn region debcontrolStrictField matchgroup=debcontrolKey start="^Priority: *" end="$" contains=debcontrolPriority oneline 99syn region debcontrolStrictField matchgroup=debcontrolKey start="^Section: *" end="$" contains=debcontrolSection oneline 100syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XC-\)\=Package-Type: *" end="$" contains=debcontrolPackageType oneline 101syn region debcontrolStrictField matchgroup=debcontrolKey start="^Homepage: *" end="$" contains=debcontrolHTTPUrl oneline keepend 102syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\): *" end="$" contains=debcontrolHTTPUrl oneline keepend 103syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-Svn: *" end="$" contains=debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend 104syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-Cvs: *" end="$" contains=debcontrolVcsCvs oneline keepend 105syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-Git: *" end="$" contains=debcontrolVcsGit oneline keepend 106syn region debcontrolStrictField matchgroup=debcontrolKey start="^Rules-Requires-Root: *" end="$" contains=debcontrolR3 oneline 107syn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Build-\)\=Essential: *" end="$" contains=debcontrolYesNo oneline 108 109syn region debcontrolStrictField matchgroup=debcontrolDeprecatedKey start="^\%(XS-\)\=DM-Upload-Allowed: *" end="$" contains=debcontrolDmUpload oneline 110 111" Catch-all for the other legal fields 112syn 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 113syn 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 114syn region debcontrolMultiFieldSpell matchgroup=debcontrolKey start="^Description: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell 115 116" Associate our matches and regions with pretty colours 117hi def link debcontrolKey Keyword 118hi def link debcontrolField Normal 119hi def link debcontrolStrictField Error 120hi def link debcontrolDeprecatedKey Error 121hi def link debcontrolMultiField Normal 122hi def link debcontrolArchitecture Normal 123hi def link debcontrolMultiArch Normal 124hi def link debcontrolName Normal 125hi def link debcontrolPriority Normal 126hi def link debcontrolSection Normal 127hi def link debcontrolPackageType Normal 128hi def link debcontrolVariable Identifier 129hi def link debcontrolEmail Identifier 130hi def link debcontrolVcsSvn Identifier 131hi def link debcontrolVcsCvs Identifier 132hi def link debcontrolVcsGit Identifier 133hi def link debcontrolHTTPUrl Identifier 134hi def link debcontrolDmUpload Identifier 135hi def link debcontrolYesNo Identifier 136hi def link debcontrolR3 Identifier 137hi def link debcontrolComment Comment 138hi def link debcontrolElse Special 139 140let b:current_syntax = 'debcontrol' 141 142let &cpo = s:cpo_save 143unlet s:cpo_save 144 145" vim: ts=8 sw=2 146