if exists("b:current_syntax")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
syn keyword denyhostsTodo
\ contained
\ TODO
\ FIXME
\ XXX
\ NOTE
syn case ignore
syn match   denyhostsComment
\ contained
\ display
\ '#.*'
\ contains=denyhostsTodo,
\          @Spell
syn match   denyhostsBegin
\ display
\ '^'
\ nextgroup=@denyhostsSetting,
\           denyhostsComment
\ skipwhite
syn cluster denyhostsSetting
\ contains=denyhostsStringSetting,
\          denyhostsBooleanSetting,
\          denyhostsPathSetting,
\          denyhostsNumericSetting,
\          denyhostsTimespecSetting,
\          denyhostsFormatSetting,
\          denyhostsRegexSetting
syn keyword denyhostsStringSetting
\ contained
\ ADMIN_EMAIL
\ SMTP_HOST
\ SMTP_USERNAME
\ SMTP_PASSWORD
\ SMTP_FROM
\ SMTP_SUBJECT
\ BLOCK_SERVICE
\ nextgroup=denyhostsStringDelimiter
\ skipwhite
syn keyword denyhostsBooleanSetting
\ contained
\ SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS
\ HOSTNAME_LOOKUP
\ SYSLOG_REPORT
\ RESET_ON_SUCCESS
\ SYNC_UPLOAD
\ SYNC_DOWNLOAD
\ ALLOWED_HOSTS_HOSTNAME_LOOKUP
\ nextgroup=denyhostsBooleanDelimiter
\ skipwhite
syn keyword denyhostsPathSetting
\ contained
\ DAEMON_LOG
\ PLUGIN_DENY
\ PLUGIN_PURGE
\ SECURE_LOG
\ LOCK_FILE
\ HOSTS_DENY
\ WORK_DIR
\ nextgroup=denyhostsPathDelimiter
\ skipwhite
syn keyword denyhostsNumericSetting
\ contained
\ SYNC_DOWNLOAD_THRESHOLD
\ SMTP_PORT
\ PURGE_THRESHOLD
\ DENY_THRESHOLD_INVALID
\ DENY_THRESHOLD_VALID
\ DENY_THRESHOLD_ROOT
\ DENY_THRESHOLD_RESTRICTED
\ nextgroup=denyhostsNumericDelimiter
\ skipwhite
syn keyword denyhostsTimespecSetting
\ contained
\ DAEMON_SLEEP
\ DAEMON_PURGE
\ AGE_RESET_INVALID
\ AGE_RESET_VALID
\ AGE_RESET_ROOT
\ AGE_RESET_RESTRICTED
\ SYNC_INTERVAL
\ SYNC_DOWNLOAD_RESILIENCY
\ PURGE_DENY
\ nextgroup=denyhostsTimespecDelimiter
\ skipwhite
syn keyword denyhostsFormatSetting
\ contained
\ DAEMON_LOG_TIME_FORMAT
\ DAEMON_LOG_MESSAGE_FORMAT
\ SMTP_DATE_FORMAT
\ nextgroup=denyhostsFormatDelimiter
\ skipwhite
syn keyword denyhostsRegexSetting
\ contained
\ SSHD_FORMAT_REGEX
\ FAILED_ENTRY_REGEX
\ FAILED_ENTRY_REGEX2
\ FAILED_ENTRY_REGEX3
\ FAILED_ENTRY_REGEX4
\ FAILED_ENTRY_REGEX5
\ FAILED_ENTRY_REGEX6
\ FAILED_ENTRY_REGEX7
\ USERDEF_FAILED_ENTRY_REGEX
\ SUCCESSFUL_ENTRY_REGEX
\ nextgroup=denyhostsRegexDelimiter
\ skipwhite
syn keyword denyhostURLSetting
\ contained
\ SYNC_SERVER
\ nextgroup=denyhostsURLDelimiter
\ skipwhite
syn match   denyhostsStringDelimiter
\ contained
\ display
\ '[:=]'
\ nextgroup=denyhostsString
\ skipwhite
syn match   denyhostsBooleanDelimiter
\ contained
\ display
\ '[:=]'
\ nextgroup=@denyhostsBoolean
\ skipwhite
syn match   denyhostsPathDelimiter
\ contained
\ display
\ '[:=]'
\ nextgroup=denyhostsPath
\ skipwhite
syn match   denyhostsNumericDelimiter
\ contained
\ display
\ '[:=]'
\ nextgroup=denyhostsNumber
\ skipwhite
syn match   denyhostsTimespecDelimiter
\ contained
\ display
\ '[:=]'
\ nextgroup=denyhostsTimespec
\ skipwhite
syn match   denyhostsFormatDelimiter
\ contained
\ display
\ '[:=]'
\ nextgroup=denyhostsFormat
\ skipwhite
syn match   denyhostsRegexDelimiter
\ contained
\ display
\ '[:=]'
\ nextgroup=denyhostsRegex
\ skipwhite
syn match   denyhostsURLDelimiter
\ contained
\ display
\ '[:=]'
\ nextgroup=denyhostsURL
\ skipwhite
syn match   denyhostsString
\ contained
\ display
\ '.\+'
syn cluster denyhostsBoolean
\ contains=denyhostsBooleanTrue,
\          denyhostsBooleanFalse
syn match   denyhostsBooleanFalse
\ contained
\ display
\ '.\+'
syn match   denyhostsBooleanTrue
\ contained
\ display
\ '\s*\%(1\|t\%(rue\)\=\|y\%(es\)\=\)\>\s*$'
syn match   denyhostsPath
\ contained
\ display
\ '.\+'
syn match   denyhostsNumber
\ contained
\ display
\ '\d\+\>'
syn match   denyhostsTimespec
\ contained
\ display
\ '\d\+[mhdwy]\>'
syn match   denyhostsFormat
\ contained
\ display
\ '.\+'
\ contains=denyhostsFormattingExpandos
syn match   denyhostsFormattingExpandos
\ contained
\ display
\ '%.'
syn match   denyhostsRegex
\ contained
\ display
\ '.\+'
syn match   denyhostsURL
\ contained
\ display
\ '.\+'
hi def link denyhostsTodo               Todo
hi def link denyhostsComment            Comment
hi def link denyhostsSetting            Keyword
hi def link denyhostsStringSetting      denyhostsSetting
hi def link denyhostsBooleanSetting     denyhostsSetting
hi def link denyhostsPathSetting        denyhostsSetting
hi def link denyhostsNumericSetting     denyhostsSetting
hi def link denyhostsTimespecSetting    denyhostsSetting
hi def link denyhostsFormatSetting      denyhostsSetting
hi def link denyhostsRegexSetting       denyhostsSetting
hi def link denyhostURLSetting          denyhostsSetting
hi def link denyhostsDelimiter          Normal
hi def link denyhostsStringDelimiter    denyhostsDelimiter
hi def link denyhostsBooleanDelimiter   denyhostsDelimiter
hi def link denyhostsPathDelimiter      denyhostsDelimiter
hi def link denyhostsNumericDelimiter   denyhostsDelimiter
hi def link denyhostsTimespecDelimiter  denyhostsDelimiter
hi def link denyhostsFormatDelimiter    denyhostsDelimiter
hi def link denyhostsRegexDelimiter     denyhostsDelimiter
hi def link denyhostsURLDelimiter       denyhostsDelimiter
hi def link denyhostsString             String
if exists('g:syntax_booleans_simple') || exists('b:syntax_booleans_simple')
hi def link denyhostsBoolean          Boolean
hi def link denyhostsBooleanFalse     denyhostsBoolean
hi def link denyhostsBooleanTrue      denyhostsBoolean
else
hi def    denyhostsBooleanTrue        term=bold ctermfg=Green guifg=Green
hi def    denyhostsBooleanFalse       ctermfg=Red guifg=Red
endif
hi def link denyhostsPath               String
hi def link denyhostsNumber             Number
hi def link denyhostsTimespec           Number
hi def link denyhostsFormat             String
hi def link denyhostsFormattingExpandos Special
hi def link denyhostsRegex              String
hi def link denyhostsURL                String
let b:current_syntax = "denyhosts"
let &cpo = s:cpo_save
unlet s:cpo_save
