forked from aniani/vim
		
	
		
			
	
	
		
			148 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			148 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim syntax file | ||
|  | " Language:         host.conf(5) configuration file | ||
|  | " 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 |