diff --git a/Preferences/Merlin Comments.tmPreferences b/Preferences/Merlin Comments.tmPreferences new file mode 100644 index 0000000..4a5aa6a --- /dev/null +++ b/Preferences/Merlin Comments.tmPreferences @@ -0,0 +1,30 @@ + + + + + name + Merlin Comments + scope + source.asm.65816.merlin + settings + + shellVariables + + + name + TM_COMMENT_START + value + * + + + name + TM_COMMENT_DISABLE_INDENT + value + yes + + + + uuid + A2F150FF-2999-441F-81E5-B65646A26E4F + + diff --git a/Preferences/Merlin Folding.tmPreferences b/Preferences/Merlin Folding.tmPreferences new file mode 100644 index 0000000..108c73b --- /dev/null +++ b/Preferences/Merlin Folding.tmPreferences @@ -0,0 +1,19 @@ + + + + + name + Merlin Folding + scope + source.asm.65816.merlin + settings + + foldingStartMarker + \b(?i:DUM|DO|IF|MAC|LUP)\b + foldingStopMarker + \b(?i:DEND|FIN)\b|<<<|--\^ + + uuid + 9DDC3C1F-C4A9-4888-BFBA-1CFF7448AC47 + + diff --git a/Syntaxes/Merlin.tmLanguage b/Syntaxes/Merlin.tmLanguage new file mode 100644 index 0000000..5c69ab2 --- /dev/null +++ b/Syntaxes/Merlin.tmLanguage @@ -0,0 +1,370 @@ + + + + + fileTypes + + S + + name + Merlin + patterns + + + include + source.asm.65816 + + + include + source.asm.65816#long_mnemonics + + + include + source.asm.65816#hex_number + + + include + source.asm.65816#decimal_number + + + match + %[01][01_]* + name + constant.numeric.binary + + + match + \b(?i:TAS|TSA|SWA|TAD|TDA|BLT|BGE)\b + name + keyword.mnemonic.65816.alt + + + match + (?<=,)([xXyYsS])\b + name + variable.language.register + + + begin + " + end + " + name + string.quoted.double + + + begin + ' + end + ' + name + string.quoted.single + + + match + ^[*].* + name + comment.line + + + match + ;.* + name + comment.line + + + match + ^][0-~]*\b + name + entity.name.label.variable + + + match + ^:[0-~]*\b + name + entity.name.label.local + + + match + ^[:-~][0-~]*\b + name + entity.name.function + + + captures + + 1 + + name + keyword.directive + + 2 + + name + string.quoted.other.path + + + comment + eg: KEEP pathname + match + \b((?i)DSK|PUT|USE|SAV)\s+(\S*) + name + meta.path.directive + + + captures + + 1 + + name + keyword.directive + + 2 + + name + constant.language + + + comment + eg: KEEP pathname + match + \b((?i)CYC)\s+((?i)ON|OFF|AVE)\b + name + meta.cyc.directive + + + captures + + 1 + + name + keyword.directive + + 2 + + name + constant.language + + + comment + eg: KEEP pathname + match + \b((?i)EXP)\s+((?i)ON|OFF|ONLY)\b + name + meta.exp.directive + + + captures + + 1 + + name + keyword.directive + + 2 + + name + constant.language + + + comment + eg: KEEP pathname + match + \b((?i)LST)\s+((?i)ON|OFF|RTN)\b + name + meta.lst.directive + + + captures + + 1 + + name + keyword.directive + + 2 + + name + constant.language + + + comment + eg: KEEP pathname + match + \b((?i)LST)\s+((?i)OFF)\b + name + meta.lstdo.directive + + + captures + + 1 + + name + keyword.directive + + 2 + + name + constant.language + + + comment + eg: KEEP pathname + match + \b((?i)TR)\s+((?i)ON|OFF|ADR)\b + name + meta.tr.directive + + + captures + + 1 + + name + keyword.directive.string + + 2 + + name + string.delimited.begin + + 3 + + name + string.delimited + + 4 + + name + string.delimited.end + + 5 + + name + keyword.operator + + 6 + + name + constant.numeric.hexadecimal + + + comment + optional trailing hex data + match + \b((?i)ASC|DCI|INV|FLS|STR)\s+(\S)(.*?)(\2|$)(,([0-9A-Fa-f]+))? + name + meta.string.delimited + + + captures + + 1 + + name + keyword.directive.string + + 2 + + name + string.delimited.begin + + 3 + + name + string.delimited + + 4 + + name + string.delimited.end + + + match + \b((?i)REV)\s+(\S)(.*?)(\2|$) + name + meta.string.delimited.rev + + + begin + \b((?i)HEX)\b + captures + + 1 + + name + keyword.directive.data + + + comment + HEX has a list of hex bytes w/o the $ + end + $ + name + meta.hex + patterns + + + match + \b[0-9A-Fa-f]{1,2}\b + name + constant.numeric.hex + + + match + ;.*$ + name + comment.line + + + match + , + name + keyword.operator + + + match + \S + name + invalid.illegal + + + + + match + \b(?i:DSK|EQU|EXT|ENT|ORG|REL|OBJ|PUT|USE|VAR|SAV|TYP|END|DUM|DEND|AST|CYC|DAT|EXP|LST|LSTDO|PAG|TTL|SKP|TR|CHK|ERR|KBD|LUP|--\^|MX|PAU|SW|USR|XC)\b + name + keyword.directive + + + match + \b(?i:DA|DW|DDB|DB|DFB|ADR|ADRL|HEX|DS|ASC|DCI|INV|FLS|REV|STR)\b + name + keyword.directive.data + + + match + \b(?i:DO|ELSE|IF|FIN)\b + name + keyword.control.conditional + + + match + \b(?i:MAC)\b|<<< + name + keyword.directive.macro + + + match + [-+/*^><|#\[\](),=.!&] + name + keyword.operator + + + scopeName + source.asm.65816.merlin + uuid + F978EA07-532B-4F41-A8D8-808CD855B3F7 + +