File: //usr/share/joe/syntax/asm.jsf
# JOE syntax highlight file for assembly language
# Highlights ';' comments, C-preprocessor stuff and C-like constants.
# Some assembly languages do not use C-preprocessor and use '#' for
# comments.  For them, eliminate all states up to ':idle'. and change the
# ";" line in 'idle' to '#'.
# For UNIX assembly ';' actually separates instructions, but I've only seen
# this for 'rep; movsb'.  If it bothers you eliminate the ';' line in
# ':idle'.
# This highlighter is too strict for numeric constants.  Many assembly
# languages allow '000009', which looks like a bad octal constant in C/UNIX.
=Idle
=Ident
=Bad
=Preproc
=Define
=Comment
=IncLocal	+String +Preproc
=IncSystem	+Preproc
=Constant
=Number		+Constant
=String		+Constant
=Character	+String
=CharacterEscape +Escape +Character
=StringEscape	+Escape +String
=Type
=Brace
=Control
:reset Idle
	*		first		noeat
	" \t"		reset
:first Idle
	*		idle		noeat
	"#"		pre		recolor=-1
:pre Preproc
	*		preproc		noeat
	" \t"		pre
	"a-z"		preident	recolor=-1 buffer
:preident Preproc
	*		preproc		noeat strings
	"define"	predef
	"include"	preinc
done
	"a-z"		preident
:preinc Preproc
	*		preinc
	" \t"		preinc_ws
	"\n"		reset
	
:preinc_ws Preproc
	*		prebad		recolor=-1
	" \t"		preinc_ws
	"\""		preinc_local	recolor=-1
	"<"		preinc_system	recolor=-1
:preinc_local IncLocal
	*		preinc_local
	"\"\n"		reset
	
:preinc_system IncSystem
	*		preinc_system
	">\n"		reset
:prebad	Bad	
	*		prebad
	"\n"		reset
:predef Preproc
	*		predef
	" \t"		predef_ws
	"\n"		reset
	
:predef_ws Preproc
	*		prebad		recolor=-1
	" \t"		predef_ws
	"a-zA-Z0-9_"	predef_ident	recolor=-1
:predef_ident Define
	*		idle		noeat
	"a-zA-Z0-9_"	predef_ident
:preproc Preproc
	*		preproc
	"\n"		reset
	"\\"		preproc_cont
	"/"		preproc_slash
	
:preproc_slash Preproc
	*		preproc		noeat
	"*"		comment		recolor=-2
	"/"		line_comment	recolor=-2
	
:preproc_cont Preproc
	*		preproc_cont
	"\n"		preproc
# All following states are for when we're not in a preprocessor line
:idle Idle
	*		idle
	";"		line_comment	recolor=-1
	"\n"		reset
	"/"		slash
	"0"		first_digit	recolor=-1
	"1-9"		decimal	recolor=-1
	"."		maybe_float
	"\""		string		recolor=-1
	"'"		char		recolor=-1
	"a-zA-Z_"	ident		buffer
	"{}"		brace		recolor=-1
	",:=()><[]*&|!~+\-%^"	control		recolor=-1
:brace Brace
	*	idle	noeat
:control Control
	*	idle	noeat
:slash Idle
	*		idle		noeat recolor=-2	# Not sure about this
	"*"		comment		recolor=-2
	"/"		line_comment	recolor=-2
:comment Comment comment
	*		comment
	"BFHNTX"        comment         noeat call=comment_todo.comment_todo()
	"*"		maybe_end_comment
:maybe_end_comment Comment comment
	*		comment
	"/"		idle
	"*"		maybe_end_comment
:line_comment Comment comment
	*		line_comment
	"BFHNTX"        line_comment         noeat call=comment_todo.comment_todo()
	"\n"		reset
:first_digit Number
	*		idle	noeat
	"xX"		hex
	"."		float
	"eE"		epart
	"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
:hex Number
	*		idle	noeat
	"0-9A-Fa-f"	hex
:decimal Number
	*		idle	noeat
	"0-9"		decimal
	"eE"		epart
	"."		float
:maybe_float Number
	*		idle	recolor=-2	noeat
	"0-9"		float		recolor=-2
:float Number
	*		idle	noeat
	"eE"		epart
	"0-9"		float
:epart Number
	*		idle	noeat
	"0-9+\-"	enum
:enum Number
	*		idle	noeat
	"0-9"		enum
:string	String string
	*		string
	"\""		idle
	"\\"		string_escape	recolor=-1
	"%"		string_control	recolor=-1
:string_escape StringEscape string
	*		string
	"x"		string_hex1
	"0-7"		string_octal2
	"\n"		string		recolor=-2
:string_hex1 StringEscape string
	*		string		noeat
	"0-9a-fA-F"	string_hex2
:string_hex2 StringEscape string
	*		string		noeat
	"0-9a-fA-F"	string
:string_octal2 StringEscape string
	*		string		noeat
	"0-7"		string_octal3
:string_octal3 StringEscape string
	*		string		noeat
	"0-7"		string
:string_control StringEscape string
	*		string_control
	"\n"		reset
	"diouxXeEfFgGaAcspn%SC"	string
:char CharacterEscape
	*		char
	"\n"		reset
	"'"		idle
	"\\"		char_escape	recolor=-1
:char_escape CharacterEscape
	*		char
	"x"		char_hex1
	"0-7"		char_octal2
	"\n"		char		recolor=-2
:char_hex1 CharacterEscape
	*		char		noeat
	"0-9a-fA-F"	char_hex2
:char_hex2 CharacterEscape
	*		char		noeat
	"0-9a-fA-F"	char
:char_octal2 CharacterEscape
	*		char		noeat
	"0-7"		char_octal3
:char_octal3 CharacterEscape
	*		char		noeat
	"0-7"		char
:ident Ident
	*		idle		noeat
	"a-zA-Z0-9_"	ident