# 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 =Bad bold red =Preproc blue =Define bold blue =Comment green =IncLocal cyan =IncSystem bold cyan =Constant cyan =Escape bold cyan =Type bold =Keyword bold =CppKeyword bold =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 "*" maybe_end_comment :maybe_end_comment Comment * comment "/" idle "*" maybe_end_comment :line_comment Comment * line_comment "\n" reset :first_digit Constant * 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 Constant * idle noeat "0-7" octal "89" bad_number recolor=-1 :hex Constant * idle noeat "0-9A-Fa-f" hex :decimal Constant * idle noeat "0-9" decimal "eE" epart "." float :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 :string Constant * string "\"" idle "\\" string_escape recolor=-1 "%" string_control recolor=-1 :string_escape Escape * string "x" string_hex1 "0-7" string_octal2 "\n" string recolor=-2 :string_hex1 Escape * string noeat "0-9a-fA-F" string_hex2 :string_hex2 Escape * string noeat "0-9a-fA-F" string :string_octal2 Escape * string noeat "0-7" string_octal3 :string_octal3 Escape * string noeat "0-7" string :string_control Escape * string_control "\n" reset "diouxXeEfFgGaAcspn%SC" string :char Constant * char "\n" reset "'" idle "\\" char_escape recolor=-1 :char_escape Escape * char "x" char_hex1 "0-7" char_octal2 "\n" char recolor=-2 :char_hex1 Escape * char noeat "0-9a-fA-F" char_hex2 :char_hex2 Escape * char noeat "0-9a-fA-F" char :char_octal2 Escape * char noeat "0-7" char_octal3 :char_octal3 Escape * char noeat "0-7" char :ident Idle * idle noeat "a-zA-Z0-9_" ident