File: //usr/share/joe/syntax/r.jsf
# JOE syntax highlight file for R
=Idle
=Ident
=Bad
=Comment
=Constant
=Number		+Constant
=String		+Constant
=StringEscape	+Escape
=Character	+Constant
=CharacterEscape +Escape
=Boolean	+Constant
=Escape
=Keyword
=Brace
=Control
:idle Idle
	*		idle
	"#"		line_comment	recolor=-1
	"0"		first_digit	recolor=-1
	"1-9"		decimal	recolor=-1
	"."		maybe_float	buffer
	"\""		string		recolor=-1
	"'"		char		recolor=-1
	"\p{L}\p{Nl}"	ident		buffer
	"\\"		outside_escape	recolor=-1
	"{}"		brace		recolor=-1
	"/,:;=()><[]*&|!~+\-%^"	control		recolor=-1
:outside_escape	Escape
	*	idle
:brace Brace
	*	idle	noeat
:control Control
	*	idle	noeat
:line_comment Comment comment
	*		line_comment
	"BFHNTX"	line_comment	noeat call=comment_todo.comment_todo()
	"\n"		idle
:first_digit Number
	*		idle	noeat
	"xX"		hex
	"."		float
	"eE"		epart
	"0-9"		decimal
	"L"		idle
:hex Number
	*		idle	noeat
	"0-9A-Fa-f"	hex
:decimal Number
	*		idle	noeat
	"0-9"		decimal
	"eE"		epart
	"."		float
	"L"		idle
:maybe_float Number
	*		idle	recolor=-2	noeat
	"\i."		ident	recolor=-2
	"0-9"		float		recolor=-2
:float Number
	*		idle	noeat
	"eE"		epart
	"0-9"		float
	"L"		idle
:epart Number
	*		idle	noeat
	"0-9+\-"	enum
:enum Number
	*		idle	noeat
	"0-9"		enum
	"L"		idle
:string	String string
	*		string
	"\""		idle
	"\\"		string_escape	recolor=-1
	"%"		string_control	recolor=-1
:string_escape StringEscape string
	*		string
	"x"		string_hex
	"0-7"		string_octal2
	"\n"		string		recolor=-2
# \x will consume all successive hex digits (ANSI C).
:string_hex StringEscape string
	*		string		noeat
	"0-9a-fA-F"	string_hex
:string_octal2 StringEscape string
	*		string		noeat
	"0-7"		string_octal3
:string_octal3 StringEscape string
	*		string		noeat
	"0-7"		string
:string_control StringEscape string
	*		string
	"\""		string noeat
	"\n"		idle
	"\\"		string_escape	recolor=-1
	"0-9.\-+ #hjILtz$"	string_control
:char Character string
	*		char
	"\n"		idle
	"'"		idle
	"\\"		char_escape	recolor=-1
:char_escape	CharacterEscape string
	*		char
	"x"		char_hex
	"0-7"		char_octal2
	"\n"		char		recolor=-2
# \x will consume all successive hex digits (ANSI C).
:char_hex CharacterEscape string
	*		char		noeat
	"0-9a-fA-F"	char_hex
:char_octal2 CharacterEscape string
	*		char		noeat
	"0-7"		char_octal3
:char_octal3 CharacterEscape string
	*		char		noeat
	"0-7"		char
# It feels to me like this could use some more work...
:ident Ident
	*		idle		noeat strings
	"TRUE"		bool
	"FALSE"		bool
	"NULL"		val
	"Inf"		val
	"NaN"		val
	"NA"		val
	"NA_integer_"	val
	"NA_real_"	val
	"NA_complex_"	val
	"NA_character_"	val
	"if"		kw
	"else"		kw
	"repeat"	kw
	"while"		kw
	"function"	kw
	"for"		kw
	"in"		kw
	"next"		kw
	"break"		kw
done
	"\c."		ident
:bool Boolean
	*	idle	noeat
:val Constant
	*	idle	noeat
:kw Keyword
	*	idle	noeat