1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: Debian control files 37254067eSBram Moolenaar" Maintainer: Debian Vim Maintainers 4d68071d8SBram Moolenaar" Former Maintainers: Gerfried Fuchs <[email protected]> 5d68071d8SBram Moolenaar" Wichert Akkerman <[email protected]> 6*3132cdddSBram Moolenaar" Last Change: 2020 Oct 26 77254067eSBram Moolenaar" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debcontrol.vim 8071d4279SBram Moolenaar 9071d4279SBram Moolenaar" Standard syntax initialization 1085eee130SBram Moolenaarif exists('b:current_syntax') 11071d4279SBram Moolenaar finish 12071d4279SBram Moolenaarendif 13071d4279SBram Moolenaar 1407d87790SBram Moolenaarlet s:cpo_save = &cpo 1507d87790SBram Moolenaarset cpo&vim 1607d87790SBram Moolenaar 178c8de839SBram Moolenaar" Should match case except for the keys of each field 188c8de839SBram Moolenaarsyn case match 198c8de839SBram Moolenaar 207f2e9d7cSBram Moolenaarsyn iskeyword @,48-57,-,/ 217f2e9d7cSBram Moolenaar 22071d4279SBram Moolenaar" Everything that is not explicitly matched by the rules below 23071d4279SBram Moolenaarsyn match debcontrolElse "^.*$" 24071d4279SBram Moolenaar 25071d4279SBram Moolenaar" Common seperators 26c572da5fSBram Moolenaarsyn match debControlComma ",[ \t]*" 27c572da5fSBram Moolenaarsyn match debControlSpace "[ \t]" 28071d4279SBram Moolenaar 297f2e9d7cSBram Moolenaarlet s:kernels = ['linux', 'hurd', 'kfreebsd', 'knetbsd', 'kopensolaris', 'netbsd'] 307f2e9d7cSBram Moolenaarlet s:archs = [ 317f2e9d7cSBram Moolenaar \ 'alpha', 'amd64', 'armeb', 'armel', 'armhf', 'arm64', 'avr32', 'hppa' 327f2e9d7cSBram Moolenaar \, 'i386', 'ia64', 'lpia', 'm32r', 'm68k', 'mipsel', 'mips64el', 'mips' 33d473c8c1SBram Moolenaar \, 'powerpcspe', 'powerpc', 'ppc64el', 'ppc64', 'riscv64', 's390x', 's390', 'sh3eb' 347f2e9d7cSBram Moolenaar \, 'sh3', 'sh4eb', 'sh4', 'sh', 'sparc64', 'sparc', 'x32' 357f2e9d7cSBram Moolenaar \ ] 367f2e9d7cSBram Moolenaarlet s:pairs = [ 377f2e9d7cSBram Moolenaar \ 'hurd-i386', 'kfreebsd-i386', 'kfreebsd-amd64', 'knetbsd-i386' 387f2e9d7cSBram Moolenaar \, 'kopensolaris-i386', 'netbsd-alpha', 'netbsd-i386' 397f2e9d7cSBram Moolenaar \ ] 4007d87790SBram Moolenaar 41071d4279SBram Moolenaar" Define some common expressions we can use later on 427f2e9d7cSBram Moolenaarsyn keyword debcontrolArchitecture contained all any 43d2f3a8b8SBram Moolenaarexe 'syn keyword debcontrolArchitecture contained '. join(map(copy(s:kernels), {k,v -> v .'-any'})) 44d2f3a8b8SBram Moolenaarexe 'syn keyword debcontrolArchitecture contained '. join(map(copy(s:archs), {k,v -> 'any-'.v})) 457f2e9d7cSBram Moolenaarexe 'syn keyword debcontrolArchitecture contained '. join(s:archs) 467f2e9d7cSBram Moolenaarexe 'syn keyword debcontrolArchitecture contained '. join(s:pairs) 4707d87790SBram Moolenaar 4807d87790SBram Moolenaarunlet s:kernels s:archs s:pairs 4907d87790SBram Moolenaar 50*3132cdddSBram Moolenaar" Keep in sync with https://metadata.ftp-master.org/sections.822 51*3132cdddSBram Moolenaar" curl -q https://metadata.ftp-master.debian.org/sections.822 2>/dev/null| grep-dctrl -n --not -FSection -sSection / - 527f2e9d7cSBram Moolenaarlet s:sections = [ 537f2e9d7cSBram Moolenaar \ 'admin', 'cli-mono', 'comm', 'database', 'debian-installer', 'debug' 547f2e9d7cSBram Moolenaar \, 'devel', 'doc', 'editors', 'education', 'electronics', 'embedded' 55*3132cdddSBram Moolenaar \, 'fonts', 'games', 'gnome', 'gnu-r', 'gnustep', 'golang', 'graphics' 567f2e9d7cSBram Moolenaar \, 'hamradio', 'haskell', 'httpd', 'interpreters', 'introspection' 57*3132cdddSBram Moolenaar \, 'java', 'javascript', 'kde', 'kernel', 'libdevel', 'libs', 'lisp' 58*3132cdddSBram Moolenaar \, 'localization', 'mail', 'math', 'metapackages', 'misc', 'net', 'news' 59*3132cdddSBram Moolenaar \, 'ocaml', 'oldlibs', 'otherosfs', 'perl', 'php', 'python', 'raku' 60*3132cdddSBram Moolenaar \, 'ruby', 'rust', 'science', 'shells', 'sound', 'tasks', 'tex', 'text' 617f2e9d7cSBram Moolenaar \, 'utils', 'vcs', 'video', 'web', 'x11', 'xfce', 'zope' 627f2e9d7cSBram Moolenaar \ ] 637f2e9d7cSBram Moolenaar 647f2e9d7cSBram Moolenaarsyn keyword debcontrolMultiArch contained no foreign allowed same 658c8de839SBram Moolenaarsyn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+" 667f2e9d7cSBram Moolenaarsyn keyword debcontrolPriority contained extra important optional required standard 67*3132cdddSBram Moolenaarexe 'syn match debcontrolSection contained "\%(\%(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\|restricted\|universe\|multiverse\)/\)\=\<\%('.join(s:sections, '\|').'\)\>"' 687f2e9d7cSBram Moolenaarsyn keyword debcontrolPackageType contained udeb deb 69071d4279SBram Moolenaarsyn match debcontrolVariable contained "\${.\{-}}" 707f2e9d7cSBram Moolenaarsyn keyword debcontrolDmUpload contained yes 717f2e9d7cSBram Moolenaarsyn keyword debcontrolYesNo contained yes no 727f2e9d7cSBram Moolenaarsyn match debcontrolR3 contained "\<\%(no\|binary-targets\|[[:graph:]]\+/[[:graph:]]\+\%( \+[[:graph:]]\+/[[:graph:]]\+\)*\)\>" 737f2e9d7cSBram Moolenaar 747f2e9d7cSBram Moolenaarunlet s:sections 75071d4279SBram Moolenaar 768c8de839SBram Moolenaar" A URL (using the domain name definitions from RFC 1034 and 1738), right now 778c8de839SBram Moolenaar" only enforce protocol and some sanity on the server/path part; 788c8de839SBram Moolenaarsyn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$" 798c8de839SBram Moolenaarsyn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$" 808c8de839SBram Moolenaarsyn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$" 81f2571c61SBram Moolenaarsyn match debcontrolVcsGit contained "\v%(git|https?)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?%(\s+-b\s+[^ ~^:?*[\\]+)?$" 828c8de839SBram Moolenaar 83071d4279SBram Moolenaar" An email address 84071d4279SBram Moolenaarsyn match debcontrolEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+" 85071d4279SBram Moolenaarsyn match debcontrolEmail "<.\{-}>" 86071d4279SBram Moolenaar 878c8de839SBram Moolenaar" #-Comments 883a0d8090SBram Moolenaarsyn match debcontrolComment "^#.*$" contains=@Spell 898c8de839SBram Moolenaar 908c8de839SBram Moolenaarsyn case ignore 918c8de839SBram Moolenaar 927254067eSBram Moolenaar" Handle all fields from deb-src-control(5) 93071d4279SBram Moolenaar 94071d4279SBram Moolenaar" Fields for which we do strict syntax checking 957254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^Architecture: *" end="$" contains=debcontrolArchitecture,debcontrolSpace oneline 967254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^Multi-Arch: *" end="$" contains=debcontrolMultiArch oneline 977254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Package\|Source\): *" end="$" contains=debcontrolName oneline 987254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^Priority: *" end="$" contains=debcontrolPriority oneline 997254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^Section: *" end="$" contains=debcontrolSection oneline 1007254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XC-\)\=Package-Type: *" end="$" contains=debcontrolPackageType oneline 1017254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^Homepage: *" end="$" contains=debcontrolHTTPUrl oneline keepend 1027254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\): *" end="$" contains=debcontrolHTTPUrl oneline keepend 1037254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-Svn: *" end="$" contains=debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend 1047254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-Cvs: *" end="$" contains=debcontrolVcsCvs oneline keepend 1057254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(XS-\)\=Vcs-Git: *" end="$" contains=debcontrolVcsGit oneline keepend 1067254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^Rules-Requires-Root: *" end="$" contains=debcontrolR3 oneline 1077254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolKey start="^\%(Build-\)\=Essential: *" end="$" contains=debcontrolYesNo oneline 1087254067eSBram Moolenaar 1097254067eSBram Moolenaarsyn region debcontrolStrictField matchgroup=debcontrolDeprecatedKey start="^\%(XS-\)\=DM-Upload-Allowed: *" end="$" contains=debcontrolDmUpload oneline 110071d4279SBram Moolenaar 111071d4279SBram Moolenaar" Catch-all for the other legal fields 1127254067eSBram Moolenaarsyn 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 1137254067eSBram Moolenaarsyn 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 1147254067eSBram Moolenaarsyn region debcontrolMultiFieldSpell matchgroup=debcontrolKey start="^Description: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell 115071d4279SBram Moolenaar 116071d4279SBram Moolenaar" Associate our matches and regions with pretty colours 117f37506f6SBram Moolenaarhi def link debcontrolKey Keyword 118f37506f6SBram Moolenaarhi def link debcontrolField Normal 119f37506f6SBram Moolenaarhi def link debcontrolStrictField Error 120f37506f6SBram Moolenaarhi def link debcontrolDeprecatedKey Error 121f37506f6SBram Moolenaarhi def link debcontrolMultiField Normal 122f37506f6SBram Moolenaarhi def link debcontrolArchitecture Normal 123f37506f6SBram Moolenaarhi def link debcontrolMultiArch Normal 124f37506f6SBram Moolenaarhi def link debcontrolName Normal 125f37506f6SBram Moolenaarhi def link debcontrolPriority Normal 126f37506f6SBram Moolenaarhi def link debcontrolSection Normal 127f37506f6SBram Moolenaarhi def link debcontrolPackageType Normal 128f37506f6SBram Moolenaarhi def link debcontrolVariable Identifier 129f37506f6SBram Moolenaarhi def link debcontrolEmail Identifier 130f37506f6SBram Moolenaarhi def link debcontrolVcsSvn Identifier 131f37506f6SBram Moolenaarhi def link debcontrolVcsCvs Identifier 132f37506f6SBram Moolenaarhi def link debcontrolVcsGit Identifier 133f37506f6SBram Moolenaarhi def link debcontrolHTTPUrl Identifier 134f37506f6SBram Moolenaarhi def link debcontrolDmUpload Identifier 1357f2e9d7cSBram Moolenaarhi def link debcontrolYesNo Identifier 1367f2e9d7cSBram Moolenaarhi def link debcontrolR3 Identifier 137f37506f6SBram Moolenaarhi def link debcontrolComment Comment 138f37506f6SBram Moolenaarhi def link debcontrolElse Special 139071d4279SBram Moolenaar 14085eee130SBram Moolenaarlet b:current_syntax = 'debcontrol' 141071d4279SBram Moolenaar 14207d87790SBram Moolenaarlet &cpo = s:cpo_save 14307d87790SBram Moolenaarunlet s:cpo_save 14407d87790SBram Moolenaar 145071d4279SBram Moolenaar" vim: ts=8 sw=2 146