" Vim syntax file
" Language:         dictd(8) configuration file
" Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
" Latest Revision:  2005-07-01

if exists("b:current_syntax")
  finish
endif

let s:cpo_save = &cpo
set cpo&vim

syn keyword dictdconfTodo        contained TODO FIXME XXX NOTE

syn region  dictdconfComment    display oneline start='#' end='$'
                                \ contains=dictdconfTodo,dictdconfSpecialC,
                                \ @Spell

syn keyword dictdconfSpecialC   LASTLINE

syn match   dictdconfBegin      display '^'
                                \ nextgroup=dictdconfKeyword,dictdconfComment
                                \ skipwhite

syn keyword dictdconfKeyword    contained access
                                \ nextgroup=dictdconfAccessG skipwhite

syn region  dictdconfAccessG    contained transparent
                                \ matchgroup=dictdconfDelimiter start='{'
                                \ matchgroup=dictdconfDelimiter end='}'
                                \ contains=dictdconfAccess,dictdconfComment

syn keyword dictdconfAccess     contained allow deny authonly user
                                \ nextgroup=dictdconfString skipwhite

syn keyword dictdconfKeyword    contained database
                                \ nextgroup=dictdconfDatabase skipwhite

syn match   dictdconfDatabase   contained display
                                \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*'
                                \ nextgroup=dictdconfSpecG skipwhite
syn region  dictdconfDatabase   contained display oneline
                                \ start=+"+ skip=+""\|\\\\\|\\"+ end=+"+
                                \ nextgroup=dictdconfSpecG skipwhite

syn region  dictdconfSpecG      contained transparent
                                \ matchgroup=dictdconfDelimiter start='{'
                                \ matchgroup=dictdconfDelimiter end='}'
                                \ contains=dictdconfSpec,dictdconfAccess,
                                \ dictdconfComment

syn keyword dictdconfSpec       contained data index index_suffix index_word
                                \ filter prefilter postfilter name info
                                \ disable_strat
                                \ nextgroup=dictdconfString skipwhite

syn keyword dictdconfSpec       contained invisible

syn keyword dictdconfKeyword    contained database_virtual
                                \ nextgroup=dictdconfVDatabase skipwhite

syn match   dictdconfVDatabase  contained display
                                \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*'
                                \ nextgroup=dictdconfVSpecG skipwhite
syn region  dictdconfVDatabase   contained display oneline
                                \ start=+"+ skip=+""\|\\\\\|\\"+ end=+"+
                                \ nextgroup=dictdconfVSpecG skipwhite

syn region  dictdconfVSpecG     contained transparent
                                \ matchgroup=dictdconfDelimiter start='{'
                                \ matchgroup=dictdconfDelimiter end='}'
                                \ contains=dictdconfVSpec,dictdconfAccess,
                                \ dictdconfComment

syn keyword dictdconfVSpec      contained name info database_list disable_strat
                                \ nextgroup=dictdconfString skipwhite

syn keyword dictdconfVSpec      contained invisible

syn keyword dictdconfKeyword    contained database_plugin
                                \ nextgroup=dictdconfPDatabase skipwhite

syn match   dictdconfPDatabase  contained display
                                \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*'
                                \ nextgroup=dictdconfPSpecG skipwhite
syn region  dictdconfPDatabase   contained display oneline
                                \ start=+"+ skip=+""\|\\\\\|\\"+ end=+"+
                                \ nextgroup=dictdconfPSpecG skipwhite

syn region  dictdconfPSpecG     contained transparent
                                \ matchgroup=dictdconfDelimiter start='{'
                                \ matchgroup=dictdconfDelimiter end='}'
                                \ contains=dictdconfPSpec,dictdconfAccess,
                                \ dictdconfComment

syn keyword dictdconfPSpec      contained name info plugin data disable_strat
                                \ nextgroup=dictdconfString skipwhite

syn keyword dictdconfPSpec      contained invisible

syn keyword dictdconfKeyword    contained database_exit

syn keyword dictdconfKeyword    contained site
                                \ nextgroup=dictdconfString skipwhite

syn keyword dictdconfKeyword    contained user
                                \ nextgroup=dictdconfUsername skipwhite

syn match   dictdconfUsername   contained display
                                \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*'
                                \ nextgroup=dictdconfSecret skipwhite
syn region  dictdconfUsername   contained display oneline
                                \ start=+"+ skip=+""+ end=+"+
                                \ nextgroup=dictdconfSecret skipwhite

syn match   dictdconfSecret     contained display
                                \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*'
syn region  dictdconfSecret     contained display oneline
                                \ start=+"+ skip=+""+ end=+"+

syn match   dictdconfString     contained display
                                \ '[[:alnum:]_/.*-][[:alnum:]_/.*-]*'
syn region  dictdconfString     contained display oneline
                                \ start=+"+ skip=+""\|\\\\\|\\"+ end=+"+

hi def link dictdconfTodo       Todo
hi def link dictdconfComment    Comment
hi def link dictdconfSpecialC   Special
hi def link dictdconfKeyword    Keyword
hi def link dictdconfIdentifier Identifier
hi def link dictdconfAccess     dictdconfIdentifier
hi def link dictdconfDatabase   dictdconfString
hi def link dictdconfSpec       dictdconfIdentifier
hi def link dictdconfVDatabase  dictdconfDatabase
hi def link dictdconfVSpec      dictdconfSpec
hi def link dictdconfPDatabase  dictdconfDatabase
hi def link dictdconfPSpec      dictdconfSpec
hi def link dictdconfUsername   dictdconfString
hi def link dictdconfSecret     Special
hi def link dictdconfString     String
hi def link dictdconfDelimiter  Delimiter

let b:current_syntax = "dictdconf"

let &cpo = s:cpo_save
unlet s:cpo_save
