1" Vim syntax file
2" Language:	BIND configuration file
3" Maintainer:	Nick Hibma <nick@van-laarhoven.org>
4" Last change:	2007-01-30
5" Filenames:	named.conf, rndc.conf
6" Location:	http://www.van-laarhoven.org/vim/syntax/named.vim
7"
8" Previously maintained by glory hump <rnd@web-drive.ru> and updated by Marcin
9" Dalecki.
10"
11" This file could do with a lot of improvements, so comments are welcome.
12" Please submit the named.conf (segment) with any comments.
13"
14" For version 5.x: Clear all syntax items
15" For version 6.x: Quit when a syntax file was already loaded
16if version < 600
17  syntax clear
18elseif exists("b:current_syntax")
19  finish
20endif
21
22syn case match
23
24if version >= 600
25  setlocal iskeyword=.,-,48-58,A-Z,a-z,_
26else
27  set iskeyword=.,-,48-58,A-Z,a-z,_
28endif
29
30if version >= 600
31  syn sync match namedSync grouphere NONE "^(zone|controls|acl|key)"
32endif
33
34let s:save_cpo = &cpo
35set cpo-=C
36
37" BIND configuration file
38
39syn match	namedComment	"//.*"
40syn match	namedComment	"#.*"
41syn region	namedComment	start="/\*" end="\*/"
42syn region	namedString	start=/"/ end=/"/ contained
43" --- omitted trailing semicolon
44syn match	namedError	/[^;{#]$/
45
46" --- top-level keywords
47
48syn keyword	namedInclude	include nextgroup=namedString skipwhite
49syn keyword	namedKeyword	acl key nextgroup=namedIntIdent skipwhite
50syn keyword	namedKeyword	server nextgroup=namedIdentifier skipwhite
51syn keyword	namedKeyword	controls nextgroup=namedSection skipwhite
52syn keyword	namedKeyword	trusted-keys nextgroup=namedIntSection skipwhite
53syn keyword	namedKeyword	logging nextgroup=namedLogSection skipwhite
54syn keyword	namedKeyword	options nextgroup=namedOptSection skipwhite
55syn keyword	namedKeyword	zone nextgroup=namedZoneString skipwhite
56
57" --- Identifier: name of following { ... } Section
58syn match	namedIdentifier	contained /\k\+/ nextgroup=namedSection skipwhite
59" --- IntIdent: name of following IntSection
60syn match	namedIntIdent	contained /"\=\k\+"\=/ nextgroup=namedIntSection skipwhite
61
62" --- Section: { ... } clause
63syn region	namedSection	contained start=+{+ end=+};+ contains=namedSection,namedIntKeyword
64
65" --- IntSection: section that does not contain other sections
66syn region	namedIntSection	contained start=+{+ end=+}+ contains=namedIntKeyword,namedError
67
68" --- IntKeyword: keywords contained within `{ ... }' sections only
69" + these keywords are contained within `key' and `acl' sections
70syn keyword	namedIntKeyword	contained key algorithm
71syn keyword	namedIntKeyword	contained secret nextgroup=namedString skipwhite
72
73" + these keywords are contained within `server' section only
74syn keyword	namedIntKeyword	contained bogus support-ixfr nextgroup=namedBool,namedNotBool skipwhite
75syn keyword	namedIntKeyword	contained transfers nextgroup=namedNumber,namedNotNumber skipwhite
76syn keyword	namedIntKeyword	contained transfer-format
77syn keyword	namedIntKeyword	contained keys nextgroup=namedIntSection skipwhite
78
79" + these keywords are contained within `controls' section only
80syn keyword	namedIntKeyword	contained inet nextgroup=namedIPaddr,namedIPerror skipwhite
81syn keyword	namedIntKeyword	contained unix nextgroup=namedString skipwhite
82syn keyword	namedIntKeyword	contained port perm owner group nextgroup=namedNumber,namedNotNumber skipwhite
83syn keyword	namedIntKeyword	contained allow nextgroup=namedIntSection skipwhite
84
85" + these keywords are contained within `update-policy' section only
86syn keyword	namedIntKeyword	contained grant nextgroup=namedString skipwhite
87syn keyword	namedIntKeyword	contained name self subdomain wildcard nextgroup=namedString skipwhite
88syn keyword	namedIntKeyword	TXT A PTR NS SOA A6 CNAME MX ANY skipwhite
89
90" --- options
91syn region	namedOptSection	contained start=+{+ end=+};+ contains=namedOption,namedCNOption,namedComment,namedParenError
92
93syn keyword	namedOption	contained version directory
94\		nextgroup=namedString skipwhite
95syn keyword	namedOption	contained named-xfer dump-file pid-file
96\		nextgroup=namedString skipwhite
97syn keyword	namedOption	contained mem-statistics-file statistics-file
98\		nextgroup=namedString skipwhite
99syn keyword	namedOption	contained auth-nxdomain deallocate-on-exit
100\		nextgroup=namedBool,namedNotBool skipwhite
101syn keyword	namedOption	contained dialup fake-iquery fetch-glue
102\		nextgroup=namedBool,namedNotBool skipwhite
103syn keyword	namedOption	contained has-old-clients host-statistics
104\		nextgroup=namedBool,namedNotBool skipwhite
105syn keyword	namedOption	contained maintain-ixfr-base multiple-cnames
106\		nextgroup=namedBool,namedNotBool skipwhite
107syn keyword	namedOption	contained notify recursion rfc2308-type1
108\		nextgroup=namedBool,namedNotBool skipwhite
109syn keyword	namedOption	contained use-id-pool treat-cr-as-space
110\		nextgroup=namedBool,namedNotBool skipwhite
111syn keyword	namedOption	contained also-notify forwarders
112\		nextgroup=namedIPlist skipwhite
113syn keyword	namedOption	contained forward check-names
114syn keyword	namedOption	contained allow-query allow-transfer allow-recursion
115\		nextgroup=namedAML skipwhite
116syn keyword	namedOption	contained blackhole listen-on
117\		nextgroup=namedIntSection skipwhite
118syn keyword	namedOption	contained lame-ttl max-transfer-time-in
119\		nextgroup=namedNumber,namedNotNumber skipwhite
120syn keyword	namedOption	contained max-ncache-ttl min-roots
121\		nextgroup=namedNumber,namedNotNumber skipwhite
122syn keyword	namedOption	contained serial-queries transfers-in
123\		nextgroup=namedNumber,namedNotNumber skipwhite
124syn keyword	namedOption	contained transfers-out transfers-per-ns
125syn keyword	namedOption	contained transfer-format
126syn keyword	namedOption	contained transfer-source
127\		nextgroup=namedIPaddr,namedIPerror skipwhite
128syn keyword	namedOption	contained max-ixfr-log-size
129\		nextgroup=namedNumber,namedNotNumber skipwhite
130syn keyword	namedOption	contained coresize datasize files stacksize
131syn keyword	namedOption	contained cleaning-interval interface-interval statistics-interval heartbeat-interval
132\		nextgroup=namedNumber,namedNotNumber skipwhite
133syn keyword	namedOption	contained topology sortlist rrset-order
134\		nextgroup=namedIntSection skipwhite
135
136syn match	namedOption	contained /\<query-source\s\+.*;/he=s+12 contains=namedQSKeywords
137syn keyword	namedQSKeywords	contained address port
138syn match	namedCNOption	contained /\<check-names\s\+.*;/he=s+11 contains=namedCNKeywords
139syn keyword	namedCNKeywords	contained fail warn ignore master slave response
140
141" --- logging facilities
142syn region	namedLogSection	contained start=+{+ end=+};+ contains=namedLogOption
143syn keyword	namedLogOption	contained channel nextgroup=namedIntIdent skipwhite
144syn keyword	namedLogOption	contained category nextgroup=namedIntIdent skipwhite
145syn keyword	namedIntKeyword	contained syslog null versions size severity
146syn keyword	namedIntKeyword	contained file nextgroup=namedString skipwhite
147syn keyword	namedIntKeyword	contained print-category print-severity print-time nextgroup=namedBool,namedNotBool skipwhite
148
149" --- zone section
150syn region	namedZoneString	contained oneline start=+"+ end=+"+ skipwhite
151\		contains=namedDomain,namedIllegalDom
152\		nextgroup=namedZoneClass,namedZoneSection
153syn keyword	namedZoneClass	contained in hs hesiod chaos
154\		IN HS HESIOD CHAOS
155\		nextgroup=namedZoneSection skipwhite
156
157syn region	namedZoneSection	contained start=+{+ end=+};+ contains=namedZoneOpt,namedCNOption,namedComment,namedMasters,namedParenError
158syn keyword	namedZoneOpt	contained file ixfr-base
159\		nextgroup=namedString skipwhite
160syn keyword	namedZoneOpt	contained notify dialup
161\		nextgroup=namedBool,namedNotBool skipwhite
162syn keyword	namedZoneOpt	contained pubkey forward
163syn keyword	namedZoneOpt	contained max-transfer-time-in
164\		nextgroup=namedNumber,namedNotNumber skipwhite
165syn keyword	namedZoneOpt	contained type nextgroup=namedZoneType skipwhite
166syn keyword	namedZoneType	contained master slave stub forward hint
167
168syn keyword	namedZoneOpt	contained masters forwarders
169\		nextgroup=namedIPlist skipwhite
170syn region	namedIPlist	contained start=+{+ end=+};+ contains=namedIPaddr,namedIPerror,namedParenError,namedComment
171syn keyword	namedZoneOpt	contained allow-update allow-query allow-transfer
172\		nextgroup=namedAML skipwhite
173syn keyword	namedZoneOpt	contained update-policy
174\		nextgroup=namedIntSection skipwhite
175
176" --- boolean parameter
177syn match	namedNotBool	contained "[^ 	;]\+"
178syn keyword	namedBool	contained yes no true false 1 0
179
180" --- number parameter
181syn match	namedNotNumber	contained "[^ 	0-9;]\+"
182syn match	namedNumber	contained "\d\+"
183
184" --- address match list
185syn region	namedAML	contained start=+{+ end=+};+ contains=namedParenError,namedComment,namedString
186
187" --- IPs & Domains
188syn match	namedIPaddr	contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{3};/he=e-1
189syn match	namedDomain	contained /\<[0-9A-Za-z][-0-9A-Za-z.]\+\>/ nextgroup=namedSpareDot
190syn match	namedDomain	contained /"\."/ms=s+1,me=e-1
191syn match	namedSpareDot	contained /\./
192
193" --- syntax errors
194syn match	namedIllegalDom	contained /"\S*[^-A-Za-z0-9.[:space:]]\S*"/ms=s+1,me=e-1
195syn match	namedIPerror	contained /\<\S*[^0-9.[:space:];]\S*/
196syn match	namedEParenError	contained +{+
197syn match	namedParenError	+}\([^;]\|$\)+
198
199" Define the default highlighting.
200" For version 5.7 and earlier: only when not done already
201" For version 5.8 and later: only when an item doesn't have highlighting yet
202if version >= 508 || !exists("did_named_syn_inits")
203  if version < 508
204    let did_named_syn_inits = 1
205    command -nargs=+ HiLink hi link <args>
206  else
207    command -nargs=+ HiLink hi def link <args>
208  endif
209
210  HiLink namedComment	Comment
211  HiLink namedInclude	Include
212  HiLink namedKeyword	Keyword
213  HiLink namedIntKeyword	Keyword
214  HiLink namedIdentifier	Identifier
215  HiLink namedIntIdent	Identifier
216
217  HiLink namedString	String
218  HiLink namedBool	Type
219  HiLink namedNotBool	Error
220  HiLink namedNumber	Number
221  HiLink namedNotNumber	Error
222
223  HiLink namedOption	namedKeyword
224  HiLink namedLogOption	namedKeyword
225  HiLink namedCNOption	namedKeyword
226  HiLink namedQSKeywords	Type
227  HiLink namedCNKeywords	Type
228  HiLink namedLogCategory	Type
229  HiLink namedIPaddr	Number
230  HiLink namedDomain	Identifier
231  HiLink namedZoneOpt	namedKeyword
232  HiLink namedZoneType	Type
233  HiLink namedParenError	Error
234  HiLink namedEParenError	Error
235  HiLink namedIllegalDom	Error
236  HiLink namedIPerror	Error
237  HiLink namedSpareDot	Error
238  HiLink namedError	Error
239
240  delcommand HiLink
241endif
242
243let &cpo = s:save_cpo
244unlet s:save_cpo
245
246let b:current_syntax = "named"
247
248" vim: ts=17
249