# JOE syntax highlight file for TCL

=Idle
=Comment 	green
=Constant 	cyan
=Escape 	bold cyan
=Keyword 	bold
=Subst		magenta
=SubstEscape	bold magenta

:reset Idle
	*		command		noeat
	"#"		comment		recolor=-1
	" \t}"		reset

:comment Comment
	*		comment
	"\n"		reset

:command Idle
	*		ident		buffer
	"\""		string		recolor=-1
	"\n"		reset
	";[{"		reset

:args Idle
	*		args
	";[{\n"		reset
	"\\"		quote		recolor=-1
	"\""		string		recolor=-1

:quote Escape
	*		args

:string Constant
	*		string
	"\\"		escape		recolor=-1
	"\""		args
	"$"		subst		recolor=-1

:escape Escape
	*		string
	"0-7"		octal2
	"x"		hex1
	"u"		unicode1

:octal2 Escape
	*		string		noeat
	"0-7"		octal3

:octal3 Escape
	*		string		noeat
	"0-7"		string

:unicode1 Escape
	*		string		noeat
	"0-9a-fA-F"	unicode2

:unicode2 Escape
	*		string		noeat
	"0-9a-fA-F"	hex1

:hex1 Escape
	*		string		noeat
	"0-9a-fA-F"	hex2

:hex2 Escape
	*		string		noeat
	"0-9a-fA-F"	string

:subst SubstEscape
	*		string		noeat recolor=-2
	"a-zA-Z0-9_:"	substrest	recolor=-1
	"{"		substbrack	recolor=-1

:substrest Subst
	*		string		noeat
	"a-zA-Z0-9_:"	substrest
	"("		index

:substbrack Subst
	*		substbrack
	"}"		string

:index Subst
	*		index
	")"		string

:ident Idle
	*		ident
	" \t\n;}]"	args		noeat strings
	"after"		kw
	"alarm"		kw
	"append"		kw
	"array"		kw
	"auto_commands"		kw
	"auto_execok"		kw
	"auto_import"		kw
	"auto_load"		kw
	"auto_load_index"		kw
	"auto_load_pkg"		kw
	"auto_packages"		kw
	"auto_qualify"		kw
	"binary"		kw
	"break"		kw
	"bsearch"		kw
	"case"		kw
	"catch"		kw
	"catclose"		kw
	"catgets"		kw
	"catopen"		kw
	"ccollate"		kw
	"cconcat"		kw
	"cd"		kw
	"cequal"		kw
	"chgrp"		kw
	"chmod"		kw
	"chown"		kw
	"chroot"		kw
	"cindex"		kw
	"clength"		kw
	"clock"		kw
	"close"		kw
	"cmdtrace"		kw
	"commandloop"		kw
	"concat"		kw
	"continue"		kw
	"crange"		kw
	"csubstr"		kw
	"ctoken"		kw
	"ctype"		kw
	"dup"		kw
	"echo"		kw
	"else"		kw
	"encoding"		kw
	"eof"		kw
	"error"		kw
	"eval"		kw
	"exec"		kw
	"execl"		kw
	"exit"		kw
	"expr"		kw
	"fblocked"		kw
	"fcntl"		kw
	"fconfigure"		kw
	"fcopy"		kw
	"file"		kw
	"fileevent"		kw
	"flock"		kw
	"flush"		kw
	"for"		kw
	"foreach"		kw
	"fork"		kw
	"format"		kw
	"fstat"		kw
	"ftruncate"		kw
	"funlock"		kw
	"gets"		kw
	"glob"		kw
	"global"		kw
	"history"		kw
	"host_info"		kw
	"id"		kw
	"if"		kw
	"incr"		kw
	"info"		kw
	"infox"		kw
	"interp"		kw
	"join"		kw
	"keyldel"		kw
	"keylget"		kw
	"keylkeys"		kw
	"keylset"		kw
	"kill"		kw
	"lappend"		kw
	"lassign"		kw
	"lcontain"		kw
	"lempty"		kw
	"lgets"		kw
	"lindex"		kw
	"link"		kw
	"linsert"		kw
	"list"		kw
	"llength"		kw
	"lmatch"		kw
	"load"		kw
	"loadlibindex"		kw
	"loop"		kw
	"lrange"		kw
	"lreplace"		kw
	"lsearch"		kw
	"lset"		kw
	"lsort"		kw
	"lvarcat"		kw
	"lvarpop"		kw
	"lvarpush"		kw
	"max"		kw
	"min"		kw
	"namespace"		kw
	"nice"		kw
	"open"		kw
	"package"		kw
	"pid"		kw
	"pipe"		kw
	"proc"		kw
	"profile"		kw
	"puts"		kw
	"pwd"		kw
	"random"		kw
	"read"		kw
	"readdir"		kw
	"regexp"		kw
	"regsub"		kw
	"rename"		kw
	"replicate"		kw
	"return"		kw
	"scan"		kw
	"scancontext"		kw
	"scanfile"		kw
	"scanmatch"		kw
	"seek"		kw
	"select"		kw
	"server_accept"		kw
	"server_create"		kw
	"set"		kw
	"signal"		kw
	"sleep"		kw
	"socket"		kw
	"source"		kw
	"split"		kw
	"string"		kw
	"subst"		kw
	"switch"		kw
	"sync"		kw
	"system"		kw
	"tclLog"		kw
	"tclx_findinit"		kw
	"tclx_fork"		kw
	"tclx_load_tndxs"		kw
	"tclx_sleep"		kw
	"tclx_system"		kw
	"tclx_wait"		kw
	"tell"		kw
	"time"		kw
	"times"		kw
	"trace"		kw
	"translit"		kw
	"try_eval"		kw
	"umask"		kw
	"unknown"		kw
	"unset"		kw
	"update"		kw
	"uplevel"		kw
	"upvar"		kw
	"variable"		kw
	"vwait"		kw
	"wait"		kw
	"while"		kw
done

:kw Keyword
	*	args	noeat
