--- a
+++ b/syntax/ada.jsf.in
@@ -0,0 +1,189 @@
+# JOE syntax highlight file for ADA
+
+# Define colors
+
+=Idle
+=Comment green
+=Constant cyan
+=Escape bold cyan
+=Keyword bold
+=Operator bold
+
+:idle Idle
+	*		idle
+	"-"		maybe_comment
+	"'"		char		recolor=-1
+	"\""		string		recolor=-1
+	"0-9"		first_digit	recolor=-1
+	"."		maybe_float
+	"\""		string		recolor=-1
+	"Bb"		maybe_binary	buffer
+	"Oo"		maybe_octal	buffer
+	"Xx"		maybe_hex	buffer
+	"ac-np-wyzAC-NP-WYZ"	ident	buffer
+
+:maybe_comment Idle
+	*		idle		noeat
+	"-"		comment		recolor=-2
+
+:comment Comment
+	*		comment
+	"\n"		idle
+
+
+# Character constant
+
+:char Idle
+	*		char1
+
+:char1 Idle
+	*		idle
+	"'"		char2		recolor=-3
+
+:char2 Constant
+	*		idle		noeat
+
+# Strings
+
+:maybe_binary Idle
+	*		ident		noeat
+	"\""		string		recolor=-2
+
+:maybe_octal Idle
+	*		ident		noeat
+	"\""		string		recolor=-2
+
+:maybe_hex Idle
+	*		ident		noeat
+	"\""		string		recolor=-2
+
+:string	Constant
+	*		string
+	"\n"		idle
+	"\""		idle
+	"\\"		string_escape	recolor=-1
+
+:string_escape Escape
+	*		string
+	"\n"		string		recolor=-2
+
+# Integer constants
+
+:first_digit Constant
+	*		idle		noeat
+	"."		float
+	"_"		first_digit
+	"0-9"		first_digit
+
+# Floating point
+
+:maybe_float Constant
+	*		idle	recolor=-2	noeat
+	"0-9"		float		recolor=-2
+
+:float Constant
+	*		idle	noeat
+	"eE"		epart
+	"0-9"		float
+
+:epart	Constant
+	*		idle	noeat
+	"0-9+\-"	enum
+
+:enum	Constant
+	*		idle	noeat
+	"0-9"		enum
+
+# Identifiers
+
+:ident	Idle
+	*		quote		noeat istrings
+	"abort"		kw
+	"abs"		operator
+	"abstract"	kw
+	"accept"	kw
+	"aliased"	kw
+	"all"		kw
+	"and"		operator
+	"array"		kw
+	"at"		kw
+	"begin"		kw
+	"body"		kw
+	"case"		kw
+	"constant"	kw
+	"declare"	kw
+	"delay"		kw
+	"delta"		kw
+	"digits"	kw
+	"do"		kw
+	"else"		kw
+	"elsif"		kw
+	"end"		kw
+	"entry"		kw
+	"exception"	kw
+	"exit"		kw
+	"for"		kw
+	"function"	kw
+	"generic"	kw
+	"goto"		kw
+	"if"		kw
+	"in"		kw
+	"interface"	kw
+	"is"		kw
+	"limited"	kw
+	"loop"		kw
+	"mod"		kw
+	"new"		kw
+	"not"		operator
+	"null"		kw
+	"of"		kw
+	"or"		operator
+	"others"	kw
+	"out"		kw
+	"overriding"	kw
+	"package"	kw
+	"pragma"	kw
+	"private"	kw
+	"procedure"	kw
+	"protected"	kw
+	"raise"		kw
+	"range"		kw
+	"record"	kw
+	"rem"		operator
+	"renames"	kw
+	"requeue"	kw
+	"return"	kw
+	"reverse"	kw
+	"select"	kw
+	"separate"	kw
+	"subtype"	kw
+	"synchronized"	kw
+	"tagged"	kw
+	"task"		kw
+	"terminate"	kw
+	"then"		kw
+	"type"		kw
+	"until"		kw
+	"use"		kw
+	"when"		kw
+	"while"		kw
+	"with"		kw
+	"xor"		operator
+done
+	"a-zA-Z0-9_"	ident
+
+:operator Operator
+	*	idle	noeat
+
+:kw Keyword
+	*	idle	noeat
+
+# identifiers separated with quote '
+
+:quote	Idle
+	*	idle	noeat
+	"'"	quote_word
+
+:quote_word	Idle
+	*	idle	noeat
+	"a-zA-Z"	ident	buffer