# JOE syntax highlight file for Puppet
# by Christian Nicolai (http://mycrobase.de)

=Idle
=Ident
=Comment
=Constant
=Number		+Constant
=String		+Constant
=Regex		+String
=StringEscape	+Escape
=StringVariable	+StringEscape
=RegexEscape	+StringEscape
=Type
=Keyword
=Bad
=Variable	+DefinedIdent
=Brace

=KeywordAttr	+Attr +Type

:idle Idle
	*		idle
	"\n"		idle
	"#"		line_comment	recolor=-1
	"{[]}"		brace		recolor=-1
	"0"		first_digit	recolor=-1
	"1-9"		decimal		recolor=-1
	"\""		string		recolor=-1
	"'"		char		recolor=-1
	"/"		slash
	"$"		variable	recolor=-1
	"A-Z"		type		recolor=-1
	"a-z"		ident		buffer
	
:line_comment Comment comment
	*		line_comment
	"BFHNTX"	line_comment	noeat call=comment_todo.comment_todo()
	"\n"		idle

:comment Comment comment
	*		comment
	"BFHNTX"	comment		noeat call=comment_todo.comment_todo()
	"*"		maybe_end_comment

:maybe_end_comment Comment comment
	*		comment		noeat
	"/"		idle
	"*"		maybe_end_comment

:brace Brace
	*		idle		noeat

# that's not completely accurate since a regex may start with a * too
:slash Idle
	*		regex		noeat recolor=-2
	"*"		comment		recolor=-2

:first_digit Number
	*		idle		noeat
	"0-7"		octal
	"89"		bad_number	recolor=-1

:bad_number Bad
	*		idle		noeat
	"0-9"		bad_number

:octal Number
	*		idle		noeat
	"0-7_"		octal
	"89"		bad_number	recolor=-1

:decimal Number
	*		idle		noeat
	"0-9_"		decimal

:char String string
	*		char
	"'"		idle

:string String string
	*		string
	"\""		idle
	"$"		maybe_string_subst	recolor=-1

:maybe_string_subst String string
	*		string		noeat
	"{"		string_subst	recolor=-2

:string_subst StringVariable string
	*		string_subst
	"}"		string

:regex Regex string
	*		regex
	"\\"		regex_quote	recolor=-1
	"/"		idle

:regex_quote RegexEscape string
	*		regex

:variable Variable
	*		idle		noeat
	"a-zA-Z0-9_"	variable

:type Type
	*		idle		noeat
	"a-zA-Z0-9_"	type

:ident Ident
	*		idle		noeat strings
	"case"		kw
	"class"		kw
	"define"	kw
	"else"		kw
	"elsif"		kw
	"false"		kw
	"if"		kw
	"in"		kw
	"inherits"	kw
	"true"		kw
	"undef"		kw
	# prominent attrs
	"ensure"	kw_attr
	"default"	kw_attr
	# methods
	"alert"		method
	"create_resources"	method
	"crit"		method
	"debug"		method
	"defined"	method
	"emerg"		method
	"err"		method
	"extlookup"	method
	"fail"		method
	"file"		method
	"fqdn_rand"	method
	"generate"	method
	"include"	method
	"info"		method
	"inline_template"	method
	"md5"		method
	"notice"	method
	"realize"	method
	"regsubst"	method
	"require"	method
	"search"	method
	"sha1"		method
	"shellquote"	method
	"split"		method
	"sprintf"	method
	"tag"		method
	"tagged"	method
	"template"	method
	"versioncmp"	method
	"warning"	method
done
	"a-zA-Z0-9_"	ident

:kw Keyword
	*		idle		noeat

:kw_attr KeywordAttr
	*		idle		noeat

:method Keyword
	*		idle		noeat
