1" pf syntax file
2" Language:	OpenBSD packet filter configuration (pf.conf)
3" Maintainer:	Camiel Dobbelaar <cd@sentia.nl>
4" Last Change:	2003 May 27
5
6" For version 5.x: Clear all syntax items
7" For version 6.x: Quit when a syntax file was already loaded
8if version < 600
9  syntax clear
10elseif exists("b:current_syntax")
11  finish
12endif
13
14setlocal foldmethod=syntax
15syn sync fromstart
16
17syn cluster	pfNotLS		contains=pfComment,pfTodo,pfVarAssign
18syn keyword	pfCmd		altq anchor antispoof binat nat pass
19syn keyword	pfCmd		queue rdr scrub table set
20syn keyword	pfService	auth bgp domain finger ftp http https ident
21syn keyword	pfService	imap irc isakmp kerberos mail nameserver nfs
22syn keyword	pfService	nntp ntp pop3 portmap pptp rpcbind rsync smtp
23syn keyword	pfService	snmp snmptrap socks ssh sunrpc syslog telnet
24syn keyword	pfService	tftp www
25syn keyword	pfTodo		TODO XXX contained
26syn keyword	pfWildAddr	all any
27syn match	pfCmd		/block\s/
28syn match	pfComment	/#.*$/ contains=pfTodo
29syn match	pfCont		/\\$/
30syn match	pfErrClose	/}/
31syn match	pfIPv4		/\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/
32syn match	pfIPv6		/[a-fA-F0-9:]*::[a-fA-F0-9:.]*/
33syn match	pfIPv6		/[a-fA-F0-9:]\+:[a-fA-F0-9:]\+:[a-fA-F0-9:.]\+/
34syn match	pfNetmask	/\/\d\+/
35syn match	pfNum		/[a-zA-Z0-9_:.]\@<!\d\+[a-zA-Z0-9_:.]\@!/
36syn match	pfTable		/<\s*[a-zA-Z][a-zA-Z0-9_]*\s*>/
37syn match	pfVar		/$[a-zA-Z][a-zA-Z0-9_]*/
38syn match	pfVarAssign	/^\s*[a-zA-Z][a-zA-Z0-9_]*\s*=/me=e-1
39syn region	pfFold1		start=/^#\{1}>/ end=/^#\{1,3}>/me=s-1 transparent fold
40syn region	pfFold2		start=/^#\{2}>/ end=/^#\{2,3}>/me=s-1 transparent fold
41syn region	pfFold3		start=/^#\{3}>/ end=/^#\{3}>/me=s-1 transparent fold
42syn region	pfList		start=/{/ end=/}/ transparent contains=ALLBUT,pfErrClose,@pfNotLS
43syn region	pfString	start=/"/ end=/"/ transparent contains=ALLBUT,pfString,@pfNotLS
44syn region	pfString	start=/'/ end=/'/ transparent contains=ALLBUT,pfString,@pfNotLS
45
46" Define the default highlighting.
47" For version 5.7 and earlier: only when not done already
48" For version 5.8 and later: only when an item doesn't have highlighting yet
49if version >= 508 || !exists("did_c_syn_inits")
50  if version < 508
51    let did_c_syn_inits = 1
52    command -nargs=+ HiLink hi link <args>
53  else
54    command -nargs=+ HiLink hi def link <args>
55  endif
56
57  HiLink pfCmd		Statement
58  HiLink pfComment	Comment
59  HiLink pfCont		Statement
60  HiLink pfErrClose	Error
61  HiLink pfIPv4		Type
62  HiLink pfIPv6		Type
63  HiLink pfNetmask	Constant
64  HiLink pfNum		Constant
65  HiLink pfService	Constant
66  HiLink pfTable	Identifier
67  HiLink pfTodo		Todo
68  HiLink pfVar		Identifier
69  HiLink pfVarAssign	Identifier
70  HiLink pfWildAddr	Type
71
72  delcommand HiLink
73endif
74
75let b:current_syntax = "pf"
76