neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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