" Vim syntax file
" Language:	initng .i files
" Maintainer:	Elan Ruusamäe <glen@pld-linux.org>
" URL:		http://glen.alkohol.ee/pld/initng/
" License:	GPL v2
" Version:	0.13
" Last Change:	$Date: 2008/08/09 17:40:53 $
"
" Syntax highlighting for initng .i files. Inherits from sh.vim and adds
" in the hiliting to start/stop {} blocks. Requires vim 6.3 or later.

if &compatible || v:version < 603
	finish
endif

if exists("b:current_syntax")
	finish
endif

syn case match

let is_bash = 1
unlet! b:current_syntax
syn include @shTop syntax/sh.vim

syn region	initngService			matchgroup=initngServiceHeader start="^\s*\(service\|virtual\|daemon\|class\|cron\)\s\+\(\(\w\|[-/*]\)\+\(\s\+:\s\+\(\w\|[-/*]\)\+\)\?\)\s\+{" end="}" contains=@initngServiceCluster
syn cluster initngServiceCluster	contains=initngComment,initngAction,initngServiceOption,initngServiceHeader,initngDelim,initngVariable

syn region	initngAction			matchgroup=initngActionHeader start="^\s*\(script start\|script stop\|script run\)\s*=\s*{" end="}" contains=@initngActionCluster
syn cluster initngActionCluster		contains=@shTop

syn match	initngDelim				/[{}]/	contained

syn region	initngString			start=/"/ end=/"/ skip=/\\"/

" option = value
syn match	initngServiceOption		/.\+\s*=.\+;/ contains=initngServiceKeywords,initngSubstMacro contained
" option without value
syn match	initngServiceOption		/\w\+;/ contains=initngServiceKeywords,initngSubstMacro contained

" options with value
syn keyword	initngServiceKeywords	also_stop need use nice setuid contained
syn keyword	initngServiceKeywords	delay chdir suid sgid start_pause env_file env_parse pid_file pidfile contained
syn keyword	initngServiceKeywords	pid_of up_when_pid_set stdout stderr syncron just_before contained
syn keyword	initngServiceKeywords	provide lockfile daemon_stops_badly contained
syn match	initngServiceKeywords	/\(script\|exec\(_args\)\?\) \(start\|stop\|daemon\)/ contained
syn match	initngServiceKeywords	/env\s\+\w\+/ contained

" rlimits
syn keyword	initngServiceKeywords	rlimit_cpu_hard rlimit_core_soft contained

" single options
syn keyword	initngServiceKeywords	last respawn network_provider require_network require_file critical forks contained
" cron options
syn keyword	initngServiceKeywords	hourly contained
syn match	initngVariable			/\${\?\w\+\}\?/

" Substituted @foo@ macros:
" ==========
syn match	initngSubstMacro		/@[^@]\+@/	contained
syn cluster initngActionCluster		add=initngSubstMacro
syn cluster shCommandSubList		add=initngSubstMacro

" Comments:
" ==========
syn cluster	initngCommentGroup		contains=initngTodo,@Spell
syn keyword	initngTodo				TODO FIXME XXX contained
syn match	initngComment			/#.*$/ contains=@initngCommentGroup

" install_service #macros
" TODO: syntax check for ifd-endd pairs
" ==========
syn region	initngDefine			start="^#\(endd\|elsed\|exec\|ifd\|endexec\|endd\)\>" skip="\\$" end="$" end="#"me=s-1
syn cluster shCommentGroup			add=initngDefine
syn cluster initngCommentGroup		add=initngDefine

hi def link	initngComment			Comment
hi def link initngTodo				Todo

hi def link	initngString			String
hi def link initngServiceKeywords	Define

hi def link	initngServiceHeader		Keyword
hi def link	initngActionHeader		Type
hi def link initngDelim				Delimiter

hi def link	initngVariable			PreProc
hi def link	initngSubstMacro		Comment
hi def link	initngDefine			Macro

let b:current_syntax = "initng"
