# 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