1" Vim syntax file
2" Language:	Debian control files
3" Maintainer:  Debian Vim Maintainers <[email protected]>
4" Former Maintainers: Gerfried Fuchs <[email protected]>
5"                     Wichert Akkerman <[email protected]>
6" Last Change: 2009 July 14
7" URL: http://git.debian.org/?p=pkg-vim/vim.git;a=blob_plain;f=runtime/ftplugin/debcontrol.vim;hb=debian
8
9" Comments are very welcome - but please make sure that you are commenting on
10" the latest version of this file.
11" SPAM is _NOT_ welcome - be ready to be reported!
12
13" Standard syntax initialization
14if version < 600
15  syntax clear
16elseif exists("b:current_syntax")
17  finish
18endif
19
20" Should match case except for the keys of each field
21syn case match
22
23" Everything that is not explicitly matched by the rules below
24syn match debcontrolElse "^.*$"
25
26" Common seperators
27syn match debControlComma ", *"
28syn match debControlSpace " "
29
30" Define some common expressions we can use later on
31syn match debcontrolArchitecture contained "\(all\|any\|alpha\|amd64\|arm\(e[bl]\)\=\|avr32\|hppa\|i386\|ia64\|m32r\|m68k\|mipsel\|mips\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc64\|sparc\|hurd-i386\|kfreebsd-\(i386\|amd64\|gnu\)\|knetbsd-i386\|netbsd-\(alpha\|i386\)\)"
32syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
33syn match debcontrolPriority contained "\(extra\|important\|optional\|required\|standard\)"
34syn match debcontrolSection contained "\v((contrib|non-free|non-US/main|non-US/contrib|non-US/non-free|restricted|universe|multiverse)/)?(admin|cli-mono|comm|database|debian-installer|debug|devel|doc|editors|electronics|embedded|fonts|games|gnome|gnustep|gnu-r|graphics|hamradio|haskell|httpd|interpreters|java|kde|kernel|libs|libdevel|lisp|localization|mail|math|misc|net|news|ocaml|oldlibs|otherosfs|perl|php|python|ruby|science|shells|sound|text|tex|utils|vcs|video|web|x11|xfce|zope)"
35syn match debcontrolPackageType contained "u\?deb"
36syn match debcontrolVariable contained "\${.\{-}}"
37syn match debcontrolDmUpload contained "\cyes"
38
39" A URL (using the domain name definitions from RFC 1034 and 1738), right now
40" only enforce protocol and some sanity on the server/path part;
41syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
42syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
43syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$"
44syn match debcontrolVcsGit contained "\v%(git|http)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
45
46" An email address
47syn match	debcontrolEmail	"[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
48syn match	debcontrolEmail	"<.\{-}>"
49
50" #-Comments
51syn match debcontrolComment "^#.*$"
52
53syn case ignore
54
55" List of all legal keys
56syn match debcontrolKey contained "^\%(Source\|Package\|Section\|Priority\|\%(XSBC-Original-\)\=Maintainer\|Uploaders\|Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|Standards-Version\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Essential\|Architecture\|Description\|Bugs\|Origin\|X[SB]-Python-Version\|Homepage\|\(XS-\)\=Vcs-\(Browser\|Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\)\|XC-Package-Type\|\%(XS-\)\=DM-Upload-Allowed\): *"
57
58" Fields for which we do strict syntax checking
59syn region debcontrolStrictField start="^Architecture" end="$" contains=debcontrolKey,debcontrolArchitecture,debcontrolSpace oneline
60syn region debcontrolStrictField start="^\(Package\|Source\)" end="$" contains=debcontrolKey,debcontrolName oneline
61syn region debcontrolStrictField start="^Priority" end="$" contains=debcontrolKey,debcontrolPriority oneline
62syn region debcontrolStrictField start="^Section" end="$" contains=debcontrolKey,debcontrolSection oneline
63syn region debcontrolStrictField start="^XC-Package-Type" end="$" contains=debcontrolKey,debcontrolPackageType oneline
64syn region debcontrolStrictField start="^Homepage" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
65syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\)" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
66syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Svn" end="$" contains=debcontrolKey,debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
67syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Cvs" end="$" contains=debcontrolKey,debcontrolVcsCvs oneline keepend
68syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Git" end="$" contains=debcontrolKey,debcontrolVcsGit oneline keepend
69syn region debcontrolStrictField start="^\%(XS-\)\=DM-Upload-Allowed" end="$" contains=debcontrolKey,debcontrolDmUpload oneline
70
71" Catch-all for the other legal fields
72syn region debcontrolField start="^\%(\%(XSBC-Original-\)\=Maintainer\|Standards-Version\|Essential\|Bugs\|Origin\|X[SB]-Python-Version\|\%(XS-\)\=Vcs-Mtn\):" end="$" contains=debcontrolKey,debcontrolVariable,debcontrolEmail oneline
73syn region debcontrolMultiField start="^\%(Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Uploaders\|Description\):" skip="^ " end="^$"me=s-1 end="^[^ #]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment
74
75" Associate our matches and regions with pretty colours
76if version >= 508 || !exists("did_debcontrol_syn_inits")
77  if version < 508
78    let did_debcontrol_syn_inits = 1
79    command -nargs=+ HiLink hi link <args>
80  else
81    command -nargs=+ HiLink hi def link <args>
82  endif
83
84  HiLink debcontrolKey		Keyword
85  HiLink debcontrolField	Normal
86  HiLink debcontrolStrictField	Error
87  HiLink debcontrolMultiField	Normal
88  HiLink debcontrolArchitecture	Normal
89  HiLink debcontrolName		Normal
90  HiLink debcontrolPriority	Normal
91  HiLink debcontrolSection	Normal
92  HiLink debcontrolPackageType	Normal
93  HiLink debcontrolVariable	Identifier
94  HiLink debcontrolEmail	Identifier
95  HiLink debcontrolVcsSvn	Identifier
96  HiLink debcontrolVcsCvs	Identifier
97  HiLink debcontrolVcsGit	Identifier
98  HiLink debcontrolHTTPUrl	Identifier
99  HiLink debcontrolDmUpload	Identifier
100  HiLink debcontrolComment	Comment
101  HiLink debcontrolElse		Special
102
103  delcommand HiLink
104endif
105
106let b:current_syntax = "debcontrol"
107
108" vim: ts=8 sw=2
109