| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
 | " Vim syntax file
" Language:             host.conf(5) configuration file
" Previous Maintainer:  Nikolai Weibull <now@bitwi.se>
" Latest Revision:      2007-06-25
if exists("b:current_syntax")
  finish
endif
let s:cpo_save = &cpo
set cpo&vim
syn keyword hostconfTodo
      \ contained
      \ TODO
      \ FIXME
      \ XXX
      \ NOTE
syn match   hostconfComment
      \ display
      \ contained
      \ '\s*#.*'
      \ contains=hostconfTodo,
      \          @Spell
syn match   hostconfBegin
      \ display
      \ '^'
      \ nextgroup=hostconfComment,hostconfKeyword
      \ skipwhite
syn keyword hostconfKeyword
      \ contained
      \ order
      \ nextgroup=hostconfLookupOrder
      \ skipwhite
let s:orders = ['bind', 'hosts', 'nis']
function s:permute_suffixes(list)
  if empty(a:list)
    return []
  elseif len(a:list) == 1
    return a:list[0]
  else
    let i = 0
    let n = len(a:list)
    let sub_permutations = []
    while i < n
      let list_copy = copy(a:list)
      let removed = list_copy[i]
      call remove(list_copy, i)
      call add(sub_permutations, [removed, s:permute_suffixes(list_copy)])
      let i += 1
    endwhile
    return sub_permutations
  endif
endfunction
function s:generate_suffix_groups(list_of_order_of_orders, context, trailing_context)
  for order_of_orders in a:list_of_order_of_orders
    let order = order_of_orders[0]
    let trailing_context = a:trailing_context . toupper(order[0]) . order[1:]
    let nextgroup = 'hostconfLookupOrder' . trailing_context
    let nextgroup_delimiter = nextgroup . 'Delimiter'
    let group = 'hostconfLookupOrder' . a:context
    execute 'syn keyword' group 'contained' order 'nextgroup=' . nextgroup_delimiter 'skipwhite'
    execute 'syn match' nextgroup_delimiter 'contained display "," nextgroup=' . nextgroup 'skipwhite'
    if a:context != ""
      execute 'hi def link' group 'hostconfLookupOrder'
    endif
    execute 'hi def link' nextgroup_delimiter 'hostconfLookupOrderDelimiter'
    let context = trailing_context
    if type(order_of_orders[1]) == type([])
      call s:generate_suffix_groups(order_of_orders[1], context, trailing_context)
    else
      execute 'syn keyword hostconfLookupOrder' . context 'contained' order_of_orders[-1]
      execute 'hi def link hostconfLookupOrder' . context 'hostconfLookupOrder'
    endif
  endfor
endfunction
call s:generate_suffix_groups(s:permute_suffixes(s:orders), "", "")
delfunction s:generate_suffix_groups
delfunction s:permute_suffixes
syn keyword hostconfKeyword
      \ contained
      \ trim
      \ nextgroup=hostconfDomain
      \ skipwhite
syn match   hostconfDomain
      \ contained
      \ '\.[^:;,[:space:]]\+'
      \ nextgroup=hostconfDomainDelimiter
      \ skipwhite
syn match   hostconfDomainDelimiter
      \ contained
      \ display
      \ '[:;,]'
      \ nextgroup=hostconfDomain
      \ skipwhite
syn keyword hostconfKeyword
      \ contained
      \ multi
      \ nospoof
      \ spoofalert
      \ reorder
      \ nextgroup=hostconfBoolean
      \ skipwhite
syn keyword hostconfBoolean
      \ contained
      \ on
      \ off
syn keyword hostconfKeyword
      \ contained
      \ spoof
      \ nextgroup=hostconfSpoofValue
      \ skipwhite
syn keyword hostconfSpoofValue
      \ contained
      \ off
      \ nowarn
      \ warn
hi def link hostconfTodo                  Todo
hi def link hostconfComment               Comment
hi def link hostconfKeyword               Keyword
hi def link hostconfLookupOrder           Identifier
hi def link hostconfLookupOrderDelimiter  Delimiter
hi def link hostconfDomain                String
hi def link hostconfDomainDelimiter       Delimiter
hi def link hostconfBoolean               Boolean
hi def link hostconfSpoofValue            hostconfBoolean
let b:current_syntax = "hostconf"
let &cpo = s:cpo_save
unlet s:cpo_save
 |