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