--- a
+++ b/syntax/classic_pascal.jsf
@@ -0,0 +1,169 @@
+# PASCAL highlighter for JOE
+
+=Idle
+=Ident
+=Comment
+=Constant
+=String		+Constant
+=Number		+Constant
+=Type
+=Keyword
+=Statement	+Keyword
+=Operator	+Keyword
+=Loop		+Statement
+=Conditional	+Statement
+=DefinedFunction +DefinedIdent
+=Builtin	+DefinedFunction
+
+:idle Idle
+	*		idle
+	"a-zA-Z"	ident		buffer
+	"("		maybe_comment
+	"{"		comment		recolor=-1
+	"'"		string		recolor=-1
+	"0-9"		number		recolor=-1 
+
+# Comments
+
+:maybe_comment Idle
+	*		idle		noeat
+	"*"		comment		recolor=-2
+
+:comment Comment comment
+	*		comment
+	"BFHNTX"        comment		noeat call=comment_todo.comment_todo()
+	"*"		maybe_end_comment
+	"}"		idle
+
+:maybe_end_comment Comment comment
+	*		comment		noeat
+	")"		idle
+
+
+# String constant
+
+:string String string
+	*		string
+	"\n"		idle
+	"'"		maybe_end_string
+
+:maybe_end_string String string
+	*		idle		recolor=-1 noeat
+	"'"		string
+
+# Numeric constant
+
+:number Number
+	*		idle		noeat
+	"0-9"		number
+	"eE"		epart
+	"."		dot
+
+:dot Number
+	*		idle	noeat
+	"0-9"		float
+
+:float Number
+	*		idle	noeat
+	"eE"		epart
+	"0-9"		float
+
+:epart Number
+	*		idle	noeat
+	"0-9+\-"	enum
+
+:enum Number
+	*		idle	noeat
+	"0-9"		enum
+
+
+# Keywords
+
+:ident Ident
+	*		idle		noeat istrings
+	"and"		operator
+	"array"		type
+	"begin"		kw
+	"case"		cond
+	"const"		kw
+	"div"		operator
+	"do"		kw
+	"downto"	kw
+	"else"		cond
+	"end"		kw
+	"file"		kw
+	"for"		loop
+	"function"	kw
+	"goto"		loop
+	"if"		cond
+	"in"		kw
+	"label"		kw
+	"mod"		operator
+	"nil"		word_constant
+	"not"		operator
+	"of"		kw
+	"or"		operator
+	"packed"	kw
+	"procedure"	kw
+	"program"	kw
+	"record"	kw
+	"repeat"	loop
+	"set"		kw
+	"then"		kw
+	"to"		kw
+	"type"		kw
+	"until"		loop
+	"var"		kw
+	"while"		loop
+	"with"		kw
+	"integer"	type
+	"boolean"	type
+	"real"		type
+	"char"		type
+	"string"	type
+	"text"		type
+	"abs"		function
+	"atan"		function
+	"arctan"	function
+	"concat"	function
+	"cos"		function
+	"eof"		function
+	"eoln"		function
+	"exp"		function
+	"insert"	function
+	"length"	function
+	"ln"		function
+	"log"		function
+	"odd"		function
+	"ord"		function
+	"page"		function
+	"pred"		function
+	"round"		function
+	"sin"		function
+	"sqr"		function
+	"sqrt"		function
+	"succ"		function
+	"trun"		function
+done
+	"a-zA-Z0-9_"	ident
+
+:kw Keyword
+	*	idle	noeat
+
+:type Type
+	*	idle	noeat
+
+:loop Loop
+	*	idle	noeat
+
+:cond Conditional
+	*	idle	noeat
+
+:operator Operator
+	*	idle	noeat
+
+:word_constant Constant
+	*	idle	noeat
+
+:function Builtin
+	*	idle	noeat