18c8de839SBram Moolenaar" Vim syntax file 28c8de839SBram Moolenaar" Language: host.conf(5) configuration file 3*214641f7SBram Moolenaar" Previous Maintainer: Nikolai Weibull <[email protected]> 48c8de839SBram Moolenaar" Latest Revision: 2007-06-25 58c8de839SBram Moolenaar 68c8de839SBram Moolenaarif exists("b:current_syntax") 78c8de839SBram Moolenaar finish 88c8de839SBram Moolenaarendif 98c8de839SBram Moolenaar 108c8de839SBram Moolenaarlet s:cpo_save = &cpo 118c8de839SBram Moolenaarset cpo&vim 128c8de839SBram Moolenaar 138c8de839SBram Moolenaarsyn keyword hostconfTodo 148c8de839SBram Moolenaar \ contained 158c8de839SBram Moolenaar \ TODO 168c8de839SBram Moolenaar \ FIXME 178c8de839SBram Moolenaar \ XXX 188c8de839SBram Moolenaar \ NOTE 198c8de839SBram Moolenaar 208c8de839SBram Moolenaarsyn match hostconfComment 218c8de839SBram Moolenaar \ display 228c8de839SBram Moolenaar \ contained 238c8de839SBram Moolenaar \ '\s*#.*' 248c8de839SBram Moolenaar \ contains=hostconfTodo, 258c8de839SBram Moolenaar \ @Spell 268c8de839SBram Moolenaar 278c8de839SBram Moolenaarsyn match hostconfBegin 288c8de839SBram Moolenaar \ display 298c8de839SBram Moolenaar \ '^' 308c8de839SBram Moolenaar \ nextgroup=hostconfComment,hostconfKeyword 318c8de839SBram Moolenaar \ skipwhite 328c8de839SBram Moolenaar 338c8de839SBram Moolenaarsyn keyword hostconfKeyword 348c8de839SBram Moolenaar \ contained 358c8de839SBram Moolenaar \ order 368c8de839SBram Moolenaar \ nextgroup=hostconfLookupOrder 378c8de839SBram Moolenaar \ skipwhite 388c8de839SBram Moolenaar 398c8de839SBram Moolenaarlet s:orders = ['bind', 'hosts', 'nis'] 408c8de839SBram Moolenaar 418c8de839SBram Moolenaarfunction s:permute_suffixes(list) 428c8de839SBram Moolenaar if empty(a:list) 438c8de839SBram Moolenaar return [] 448c8de839SBram Moolenaar elseif len(a:list) == 1 458c8de839SBram Moolenaar return a:list[0] 468c8de839SBram Moolenaar else 478c8de839SBram Moolenaar let i = 0 488c8de839SBram Moolenaar let n = len(a:list) 498c8de839SBram Moolenaar let sub_permutations = [] 508c8de839SBram Moolenaar while i < n 518c8de839SBram Moolenaar let list_copy = copy(a:list) 528c8de839SBram Moolenaar let removed = list_copy[i] 538c8de839SBram Moolenaar call remove(list_copy, i) 548c8de839SBram Moolenaar call add(sub_permutations, [removed, s:permute_suffixes(list_copy)]) 558c8de839SBram Moolenaar let i += 1 568c8de839SBram Moolenaar endwhile 578c8de839SBram Moolenaar return sub_permutations 588c8de839SBram Moolenaar endif 598c8de839SBram Moolenaarendfunction 608c8de839SBram Moolenaar 618c8de839SBram Moolenaarfunction s:generate_suffix_groups(list_of_order_of_orders, context, trailing_context) 628c8de839SBram Moolenaar for order_of_orders in a:list_of_order_of_orders 638c8de839SBram Moolenaar let order = order_of_orders[0] 648c8de839SBram Moolenaar let trailing_context = a:trailing_context . toupper(order[0]) . order[1:] 658c8de839SBram Moolenaar let nextgroup = 'hostconfLookupOrder' . trailing_context 668c8de839SBram Moolenaar let nextgroup_delimiter = nextgroup . 'Delimiter' 678c8de839SBram Moolenaar let group = 'hostconfLookupOrder' . a:context 688c8de839SBram Moolenaar execute 'syn keyword' group 'contained' order 'nextgroup=' . nextgroup_delimiter 'skipwhite' 698c8de839SBram Moolenaar execute 'syn match' nextgroup_delimiter 'contained display "," nextgroup=' . nextgroup 'skipwhite' 708c8de839SBram Moolenaar if a:context != "" 718c8de839SBram Moolenaar execute 'hi def link' group 'hostconfLookupOrder' 728c8de839SBram Moolenaar endif 738c8de839SBram Moolenaar execute 'hi def link' nextgroup_delimiter 'hostconfLookupOrderDelimiter' 748c8de839SBram Moolenaar let context = trailing_context 758c8de839SBram Moolenaar if type(order_of_orders[1]) == type([]) 768c8de839SBram Moolenaar call s:generate_suffix_groups(order_of_orders[1], context, trailing_context) 778c8de839SBram Moolenaar else 788c8de839SBram Moolenaar execute 'syn keyword hostconfLookupOrder' . context 'contained' order_of_orders[-1] 798c8de839SBram Moolenaar execute 'hi def link hostconfLookupOrder' . context 'hostconfLookupOrder' 808c8de839SBram Moolenaar endif 818c8de839SBram Moolenaar endfor 828c8de839SBram Moolenaarendfunction 838c8de839SBram Moolenaar 848c8de839SBram Moolenaarcall s:generate_suffix_groups(s:permute_suffixes(s:orders), "", "") 858c8de839SBram Moolenaar 868c8de839SBram Moolenaardelfunction s:generate_suffix_groups 878c8de839SBram Moolenaardelfunction s:permute_suffixes 888c8de839SBram Moolenaar 898c8de839SBram Moolenaarsyn keyword hostconfKeyword 908c8de839SBram Moolenaar \ contained 918c8de839SBram Moolenaar \ trim 928c8de839SBram Moolenaar \ nextgroup=hostconfDomain 938c8de839SBram Moolenaar \ skipwhite 948c8de839SBram Moolenaar 958c8de839SBram Moolenaarsyn match hostconfDomain 968c8de839SBram Moolenaar \ contained 978c8de839SBram Moolenaar \ '\.[^:;,[:space:]]\+' 988c8de839SBram Moolenaar \ nextgroup=hostconfDomainDelimiter 998c8de839SBram Moolenaar \ skipwhite 1008c8de839SBram Moolenaar 1018c8de839SBram Moolenaarsyn match hostconfDomainDelimiter 1028c8de839SBram Moolenaar \ contained 1038c8de839SBram Moolenaar \ display 1048c8de839SBram Moolenaar \ '[:;,]' 1058c8de839SBram Moolenaar \ nextgroup=hostconfDomain 1068c8de839SBram Moolenaar \ skipwhite 1078c8de839SBram Moolenaar 1088c8de839SBram Moolenaarsyn keyword hostconfKeyword 1098c8de839SBram Moolenaar \ contained 1108c8de839SBram Moolenaar \ multi 1118c8de839SBram Moolenaar \ nospoof 1128c8de839SBram Moolenaar \ spoofalert 1138c8de839SBram Moolenaar \ reorder 1148c8de839SBram Moolenaar \ nextgroup=hostconfBoolean 1158c8de839SBram Moolenaar \ skipwhite 1168c8de839SBram Moolenaar 1178c8de839SBram Moolenaarsyn keyword hostconfBoolean 1188c8de839SBram Moolenaar \ contained 1198c8de839SBram Moolenaar \ on 1208c8de839SBram Moolenaar \ off 1218c8de839SBram Moolenaar 1228c8de839SBram Moolenaarsyn keyword hostconfKeyword 1238c8de839SBram Moolenaar \ contained 1248c8de839SBram Moolenaar \ spoof 1258c8de839SBram Moolenaar \ nextgroup=hostconfSpoofValue 1268c8de839SBram Moolenaar \ skipwhite 1278c8de839SBram Moolenaar 1288c8de839SBram Moolenaarsyn keyword hostconfSpoofValue 1298c8de839SBram Moolenaar \ contained 1308c8de839SBram Moolenaar \ off 1318c8de839SBram Moolenaar \ nowarn 1328c8de839SBram Moolenaar \ warn 1338c8de839SBram Moolenaar 1348c8de839SBram Moolenaarhi def link hostconfTodo Todo 1358c8de839SBram Moolenaarhi def link hostconfComment Comment 1368c8de839SBram Moolenaarhi def link hostconfKeyword Keyword 1378c8de839SBram Moolenaarhi def link hostconfLookupOrder Identifier 1388c8de839SBram Moolenaarhi def link hostconfLookupOrderDelimiter Delimiter 1398c8de839SBram Moolenaarhi def link hostconfDomain String 1408c8de839SBram Moolenaarhi def link hostconfDomainDelimiter Delimiter 1418c8de839SBram Moolenaarhi def link hostconfBoolean Boolean 1428c8de839SBram Moolenaarhi def link hostconfSpoofValue hostconfBoolean 1438c8de839SBram Moolenaar 1448c8de839SBram Moolenaarlet b:current_syntax = "hostconf" 1458c8de839SBram Moolenaar 1468c8de839SBram Moolenaarlet &cpo = s:cpo_save 1478c8de839SBram Moolenaarunlet s:cpo_save 148