From 26908fe214aff94ce218444f196b4831005d71e6 Mon Sep 17 00:00:00 2001 From: Georg Ziegler Date: Thu, 14 Jun 2018 18:26:20 +0200 Subject: [PATCH 1/7] Add comments to describe sections --- grammars/rgbasm.cson | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/grammars/rgbasm.cson b/grammars/rgbasm.cson index 2fb053a..471255c 100644 --- a/grammars/rgbasm.cson +++ b/grammars/rgbasm.cson @@ -6,9 +6,10 @@ 'gb.s' 's' ] -'name': 'RGBDS Assembly' +'name': 'RGBDS Assembly (DEV)' 'scopeName': 'source.asm.rgbasm' 'patterns': [ + # 8-bit registers { 'captures': '2': @@ -16,6 +17,7 @@ 'match': '(,|\\s*)?(?>|\\&|\\||\\^|(!|=|<|>)=|!' + 'name': 'keyword.operator.rgbasm' + } ] From 431db2c40f64933a05c6851038911d7e6ab03d84 Mon Sep 17 00:00:00 2001 From: Georg Ziegler Date: Fri, 15 Jun 2018 01:22:51 +0200 Subject: [PATCH 2/7] Add new file --- grammars/rgbasm.cson | 180 +++++++++++++++++++++------------------ grammars/rgbasm_new.cson | 152 +++++++++++++++++++++++++++++++++ 2 files changed, 248 insertions(+), 84 deletions(-) create mode 100644 grammars/rgbasm_new.cson diff --git a/grammars/rgbasm.cson b/grammars/rgbasm.cson index 471255c..06d44d7 100644 --- a/grammars/rgbasm.cson +++ b/grammars/rgbasm.cson @@ -6,59 +6,71 @@ 'gb.s' 's' ] -'name': 'RGBDS Assembly (DEV)' +'name': 'RGBDS Assembly (OLD)' 'scopeName': 'source.asm.rgbasm' 'patterns': [ - # 8-bit registers + # comments { - 'captures': - '2': - 'name': 'variable.language.register.8-bit.rgbasm' - 'match': '(,|\\s*)?(?=|<<|>>|<>|<|>|\\||\\|\\|' + # name: 'keyword.operator.rgbasm' + # } + # # Operators II + # { + # match: '(\\.)\\b(?i:and|(bit)?(and|not|or|xor)|mod|shl|shr)\\b' + # name: 'keyword.operator.rgbasm' + # } + ] From a8c35c9fa2de13e598d88ea4767c891f5a911ccd Mon Sep 17 00:00:00 2001 From: Georg Ziegler Date: Fri, 15 Jun 2018 02:00:13 +0200 Subject: [PATCH 3/7] Fixes #2 --- grammars/rgbasm_new.cson | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/grammars/rgbasm_new.cson b/grammars/rgbasm_new.cson index 4cf57f8..f73b935 100644 --- a/grammars/rgbasm_new.cson +++ b/grammars/rgbasm_new.cson @@ -94,6 +94,21 @@ repository: match: '\\b(?i:ld(i|d|h)?|push|pop|ad(d|c)|sub|sbc|and|x?or|cp|inc|dec|daa|cpl|rlca|rla|rrca|rra|rlc|rl|rrc|rr|sla|swap|sra|srl|bit|res|set|ccf|scf|nop|halt|stop|di|ei|rst)\\b' name: 'keyword.mnemonic.rgbasm' } + # global labels + { + captures: + 1: name: 'entity.name.function.label.rgbasm' + 2: name: 'entity.name.function.label.rgbasm' + match: '^([a-zA-Z_][a-zA-Z0-9_\\@\\.]*?)(::?)?\\s+' + } + # local labels + { + captures: + 1: name: 'entity.name.function.label.rgbasm' + 2: name: 'entity.name.function.label.rgbasm' + match: '^(\\.[a-zA-Z_][a-zA-Z0-9_\\@]*?)(:)?\\s+' + } + # local labels # # ca65 pseudo variables # { # match: '(\\.)\\b(?i:\\*|asize|cpu|isize|paramcount|time|version)\\b' From b53de5b2c8d457ceaa7471885732106239fde4f6 Mon Sep 17 00:00:00 2001 From: Georg Ziegler Date: Fri, 15 Jun 2018 02:38:46 +0200 Subject: [PATCH 4/7] Closes #3 --- grammars/rgbasm_new.cson | 90 ++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 58 deletions(-) diff --git a/grammars/rgbasm_new.cson b/grammars/rgbasm_new.cson index f73b935..8c92aa0 100644 --- a/grammars/rgbasm_new.cson +++ b/grammars/rgbasm_new.cson @@ -11,8 +11,8 @@ fileTypes: [ ] name: 'RGBDS Assembly (DEV)' patterns: [ - { include: '#comments' } # comments - { include: '#symbols' } # symbols, constants, numbers + { include: '#comments' } # comments + { include: '#symbols' } # labels, constants, numbers { include: '#directives' } # RGBDS assembler directives ] @@ -75,25 +75,54 @@ repository: name: 'constant.numeric.octal.rgbasm' } ] - # + # assembler directives directives: patterns: [ + # registers + # { + + # } # RGBDS builtin functions { match: '\\b(?i:STR(LEN|CAT|CMP|IN|SUB|UPR|LWR)|BANK|DEF|HIGH|LOW|FUNC|DIV|MUL|A?(SIN|COS|TAN2?))(?=\\()\\b' name: 'support.function.rgbasm' } + # assembler directives + { + match: '\\b(?i:MACRO|ENDM|REPT|ENDR|DB|DW|DS|INCLUDE|INCBIN|EQUS?|SECTION|SET|RSSET|RSRESET|RB|RW|RL|EXPORT|GLOBAL|PURGE|SHIFT|UNION|NEXTU|ENDU|PRINTT|PRINTV|PRINTF|FAIL|WARN|OPT|PUSHS|POPS|PUSHO|POPO|OPT)\\b' + name: 'support.function.pseudo.rgbasm' + } + # if elif else + { + match: '\\b(?i:(EL)?IF|ELSE|EMDC)\\b' + name: 'keyword.control.conditional.rgbasm' + } # RGBDS assembler constants { match: '_\\b(?i:PI|RS|NARG|_LINE__|_FILE__|_DATE__|_TIME__|_ISO_8601_LOCAL__|_ISO_8601_UTC__|_UTC_YEAR__|_UTC_MONTH__|_UTC_DAY__|_UTC_HOUR__|_UTC_MINUTE__|_UTC_SECOND__|_RGBDS_MAJOR__|_RGBDS_MINOR__|_RGBDS_PATCH__)\\b' name: 'constant.language.rgbasm' } + # section base directives + { + match: '\\b(ROM0|ROMX|VRAM|SRAM|WRAM0|WRAMX|OAM|HRAM|ALIGN|BANK|HOME|BSS)\\b' + name: 'constant.language.rgbasm' + } # opcodes { match: '\\b(?i:ld(i|d|h)?|push|pop|ad(d|c)|sub|sbc|and|x?or|cp|inc|dec|daa|cpl|rlca|rla|rrca|rra|rlc|rl|rrc|rr|sla|swap|sra|srl|bit|res|set|ccf|scf|nop|halt|stop|di|ei|rst)\\b' name: 'keyword.mnemonic.rgbasm' } + # braces + { + match: '(\\[|\\])' + name: 'meta.brace.square.rgbasm' + } + # operators + { + match: '\\~|\\+|\\-|\\*|\\/|\\%|<>?|\\&|\\||\\^|(!|=|<|>)=|!' + name: 'keyword.operator.rgbasm' + } # global labels { captures: @@ -109,59 +138,4 @@ repository: match: '^(\\.[a-zA-Z_][a-zA-Z0-9_\\@]*?)(:)?\\s+' } # local labels - # # ca65 pseudo variables - # { - # match: '(\\.)\\b(?i:\\*|asize|cpu|isize|paramcount|time|version)\\b' - # name: 'support.function.pseudo.rgbasm' - # } - # # ca65 pseudo functions - # { - # match: '(\\.)\\b(?i:addrsize|bank(byte)?|blank|con(cat|st)|(hi|lo)(byte|word)|ident|left|x?match|max|mi[dn]|ref(erenced)?|right|sizeof|strat|sprintf|str(ing|len)|tcount)\\b' - # name: 'support.function.pseudo.rgbasm' - # } - # # ca65 control commands, A through C - # { - # match: '(\\.)\\b(?i:a(8|16)|addr|align|asciiz|assert|autoimport|(bank|hi)bytes|bss|byte?|case|charmap|code|condes|(con|de)structor)\\b' - # name: 'support.function.pseudo.rgbasm' - # } - # # ca65 control commands, D and E - # { - # match: '(\\.)\\b(?i:data|dbyt|debuginfo|define|delmac(ro)?|def(ined(macro)?)?|dword|else(if)?|end(enum)?|end(enum|if|proc|rep(eat)?|scope|struct|union)?|endmac(ro)?|enum|error|exitmac(ro)?|export(zp)?)\\b' - # name: 'support.function.pseudo.rgbasm' - # } - # # ca65 control commands, F through I - # { - # match: '(\\.)\\b(?i:faraddr|fatal|feature|f(ile)?opt|forceimport|global(zp)?|i(8|16)|if((n)?blank|const|(n)?def|(n)?ref|p02|p4510|p816|p(s)?c02)?|import(zp)?|inc(bin|lude)|interruptor|ismnem(onic)?)\\b' - # name: 'support.function.pseudo.rgbasm' - # } - # # ca65 control commands, L through R - # { - # match: '(\\.)\\b(?i:linecont|list(bytes)?|lobytes|local(char)?|macpack|mac(ro)?|org|out|p02|p4510|p816|pagelen(gth)?|pc02|pop(cpu|seg)|proc|psc02|push(cpu|seg)|reloc|repeat|res|rodata)\\b' - # name: 'support.function.pseudo.rgbasm' - # } - # # ca65 control commands, S through Z - # { - # match: '(\\.)\\b(?i:scope|segment|set(cpu)?|smart|struct|tag|undef(ine)?|union|warning|word|zeropage)\\b' - # name: 'support.function.pseudo.rgbasm' - # } - # # CPU constants - # { - # match: '\\b(CPU_6502|CPU_65SC02|CPU_65C02|CPU_65816|CPU_SWEET16|CPU_HUC6280|CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02|CPU_ISET_65816|CPU_ISET_SWEET16|CPU_ISET_HUC6280|__APPLE2__|__APPLE2ENH__|__ATARI__|__ATARIXL__|__ATMOS__|__BBC__|__C128__|__C16__|__C64__|__CBM__|__CBM510__|__CBM610__|__GEOS__|__GEOS_APPLE__|__GEOS_CBM__|__LUNIX__|__LYNX__|__NES__|__PET__|__PLUS4__|__SIM6502__|__SIM65C02__|__SUPERVISION__|__VIC20__|VER_MAJOR|VER_MINOR)\\b' - # name: 'constant.language.rgbasm' - # } - # # address sizes, macpack packages - # { - # match: '\\b(?i:direct|zeropage|zp|absolute|abs|near|far|long|dword|atari|cbm|cpu|generic|longbranch)\\b' - # name: 'constant.language.rgbasm' - # } - # # Operators - # { - # match: '!|&|&&|\\^|\\*|\\/|\\-|\\+|~|=|<=|>=|<<|>>|<>|<|>|\\||\\|\\|' - # name: 'keyword.operator.rgbasm' - # } - # # Operators II - # { - # match: '(\\.)\\b(?i:and|(bit)?(and|not|or|xor)|mod|shl|shr)\\b' - # name: 'keyword.operator.rgbasm' - # } ] From 7a6870aaa07fe2d48a3da12ddf7ec54aa2b76860 Mon Sep 17 00:00:00 2001 From: Georg Ziegler Date: Fri, 15 Jun 2018 02:58:33 +0200 Subject: [PATCH 5/7] Add registers --- grammars/rgbasm.cson | 24 ++++++++++++------------ grammars/rgbasm_new.cson | 19 ++++++++++++------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/grammars/rgbasm.cson b/grammars/rgbasm.cson index 06d44d7..8254368 100644 --- a/grammars/rgbasm.cson +++ b/grammars/rgbasm.cson @@ -30,13 +30,13 @@ 'name': 'string.quoted.double.rgbasm' } # 8-bit registers - # { - # 'captures': - # '2': - # 'name': 'variable.language.register.8-bit.rgbasm' - # 'match': '(,|\\s*)?(? Date: Fri, 15 Jun 2018 03:00:30 +0200 Subject: [PATCH 6/7] Clean up file --- grammars/rgbasm.cson | 308 +++++++++++++++++---------------------- grammars/rgbasm_new.cson | 146 ------------------- 2 files changed, 137 insertions(+), 317 deletions(-) delete mode 100644 grammars/rgbasm_new.cson diff --git a/grammars/rgbasm.cson b/grammars/rgbasm.cson index 8254368..6390c24 100644 --- a/grammars/rgbasm.cson +++ b/grammars/rgbasm.cson @@ -1,4 +1,7 @@ -'fileTypes': [ +# Syntax Highlighting for the RGBDS toolchain + +scopeName: 'source.rgbasm' +fileTypes: [ # http://www.devrs.com/gb/files/guide.txt 'z80' 'inc' @@ -6,175 +9,138 @@ 'gb.s' 's' ] -'name': 'RGBDS Assembly (OLD)' -'scopeName': 'source.asm.rgbasm' -'patterns': [ +name: 'RGBDS Assembly' +patterns: [ + { include: '#comments' } # comments + { include: '#symbols' } # labels, constants, numbers + { include: '#directives' } # RGBDS assembler directives +] + +# Repository starts here ------------------------------------------------------ +repository: + # comments - { - # 'captures': - # '1': - # 'name': 'punctuation.definition.comment.rgbasm' - 'match': ';.*$' - 'name': 'comment.line.semicolon.rgbasm' - } - # strings - { - 'begin': '"' - 'beginCaptures': - '0': - 'name': 'punctuation.definition.string.begin.rgbasm' - 'end': '"' - 'endCaptures': - '0': - 'name': 'punctuation.definition.string.end.rgbasm' - 'name': 'string.quoted.double.rgbasm' - } - # 8-bit registers - { - 'captures': - '2': - 'name': 'variable.language.register.8-bit.rgbasm' - 'match': '(,|\\s*)?(?>|\\&|\\||\\^|(!|=|<|>)=|!' - 'name': 'keyword.operator.rgbasm' - } -] + directives: + patterns: [ + # 8-bit registers + { + match: '\\b(?i:[abcdehl])\\b' + name: 'storage.other.register.8-bit.rgbasm' + } + # 16-bit registers + { + match: '\\b(?i:af|sp|bc|de|hl[\\+\\-id]?)\\b' + name: 'storage.other.register.16-bit.rgbasm' + } + # RGBDS builtin functions + { + match: '\\b(?i:STR(LEN|CAT|CMP|IN|SUB|UPR|LWR)|BANK|DEF|HIGH|LOW|FUNC|DIV|MUL|A?(SIN|COS|TAN2?))(?=\\()\\b' + name: 'support.function.rgbasm' + } + # assembler directives + { + match: '\\b(?i:MACRO|ENDM|REPT|ENDR|DB|DW|DS|INCLUDE|INCBIN|EQUS?|SECTION|SET|RSSET|RSRESET|RB|RW|RL|EXPORT|GLOBAL|PURGE|SHIFT|UNION|NEXTU|ENDU|PRINTT|PRINTV|PRINTF|FAIL|WARN|OPT|PUSHS|POPS|PUSHO|POPO|OPT)\\b' + name: 'support.function.pseudo.rgbasm' + } + # if elif else + { + match: '\\b(?i:(EL)?IF|ELSE|EMDC|n?[zc])\\b' + name: 'keyword.control.conditional.rgbasm' + } + # RGBDS assembler constants + { + match: '_\\b(?i:PI|RS|NARG|_LINE__|_FILE__|_DATE__|_TIME__|_ISO_8601_LOCAL__|_ISO_8601_UTC__|_UTC_YEAR__|_UTC_MONTH__|_UTC_DAY__|_UTC_HOUR__|_UTC_MINUTE__|_UTC_SECOND__|_RGBDS_MAJOR__|_RGBDS_MINOR__|_RGBDS_PATCH__)\\b' + name: 'constant.language.rgbasm' + } + # section base directives + { + match: '\\b(ROM0|ROMX|VRAM|SRAM|WRAM0|WRAMX|OAM|HRAM|ALIGN|BANK|HOME|BSS)\\b' + name: 'constant.language.rgbasm' + } + # opcodes + { + match: '\\b(?i:j[pr]|call|reti?|ld(i|d|h)?|push|pop|ad(d|c)|sub|sbc|and|x?or|cp|inc|dec|daa|cpl|rlca|rla|rrca|rra|rlc|rl|rrc|rr|sla|swap|sra|srl|bit|res|set|ccf|scf|nop|halt|stop|di|ei|rst)\\b' + name: 'keyword.mnemonic.rgbasm' + } + # braces + { + match: '(\\[|\\])' + name: 'meta.brace.square.rgbasm' + } + # operators + { + match: '\\~|\\+|\\-|\\*|\\/|\\%|<>?|\\&|\\||\\^|(!|=|<|>)=|!' + name: 'keyword.operator.rgbasm' + } + # global labels + { + captures: + 1: name: 'entity.name.function.label.rgbasm' + 2: name: 'entity.name.function.label.rgbasm' + match: '^([a-zA-Z_][a-zA-Z0-9_\\@\\.]*?)(::?)?\\s+' + } + # local labels + { + captures: + 1: name: 'entity.name.function.label.rgbasm' + 2: name: 'entity.name.function.label.rgbasm' + match: '^(\\.[a-zA-Z_][a-zA-Z0-9_\\@]*?)(:)?\\s+' + } + ] diff --git a/grammars/rgbasm_new.cson b/grammars/rgbasm_new.cson deleted file mode 100644 index 598e9a6..0000000 --- a/grammars/rgbasm_new.cson +++ /dev/null @@ -1,146 +0,0 @@ -# Syntax Highlighting for the RGBDS toolchain - -scopeName: 'source.rgbasm' -fileTypes: [ - # http://www.devrs.com/gb/files/guide.txt - 'z80' - 'inc' - 'asm' - 'gb.s' - 's' -] -name: 'RGBDS Assembly (DEV)' -patterns: [ - { include: '#comments' } # comments - { include: '#symbols' } # labels, constants, numbers - { include: '#directives' } # RGBDS assembler directives -] - -# Repository starts here ------------------------------------------------------ -repository: - - # comments - comments: - patterns: [ - # semicolon comments - { - match: ';.*$' - name: 'comment.line.semicolon.rgbasm' - } - ] - - # symbols - symbols: - patterns: [ - # strings - { - begin: '"' - beginCaptures: - 0: - name: 'punctuation.definition.string.begin.rgbasm' - end: '"' - endCaptures: - 0: - name: 'punctuation.definition.string.end.rgbasm' - name: 'string.quoted.double.rgbasm' - } - # float numbers - { - match: '\\b[0-9]\\.[0-9]\\b' - name: 'constant.numberic.fixpoint.rgbasm' - } - # graphics - { - match: '`[0-3]+' - name: 'constant.other.graphics.rgbasm' - } - # hex, prefixed with dollar sign($) - { - match: '\\$\\b[a-fA-F0-9]+\\b' - name: 'constant.numeric.hex.rgbasm' - } - # binary - { - match: '%\\b[01]+\\b' - name: 'constant.numeric.binary.rgbasm' - } - # decimal - { - match: '\\b([0-9]+)\\b' - name: 'constant.numeric.decimal.rgbasm' - } - # octal - { - match: '&\\b[0-7]+\\b' - name: 'constant.numeric.octal.rgbasm' - } - ] - - # assembler directives - directives: - patterns: [ - # 8-bit registers - { - match: '\\b(?i:[abcdehl])\\b' - name: 'storage.other.register.8-bit.rgbasm' - } - # 16-bit registers - { - match: '\\b(?i:af|sp|bc|de|hl[\\+\\-id]?)\\b' - name: 'storage.other.register.16-bit.rgbasm' - } - # RGBDS builtin functions - { - match: '\\b(?i:STR(LEN|CAT|CMP|IN|SUB|UPR|LWR)|BANK|DEF|HIGH|LOW|FUNC|DIV|MUL|A?(SIN|COS|TAN2?))(?=\\()\\b' - name: 'support.function.rgbasm' - } - # assembler directives - { - match: '\\b(?i:MACRO|ENDM|REPT|ENDR|DB|DW|DS|INCLUDE|INCBIN|EQUS?|SECTION|SET|RSSET|RSRESET|RB|RW|RL|EXPORT|GLOBAL|PURGE|SHIFT|UNION|NEXTU|ENDU|PRINTT|PRINTV|PRINTF|FAIL|WARN|OPT|PUSHS|POPS|PUSHO|POPO|OPT)\\b' - name: 'support.function.pseudo.rgbasm' - } - # if elif else - { - match: '\\b(?i:(EL)?IF|ELSE|EMDC|n?[zc])\\b' - name: 'keyword.control.conditional.rgbasm' - } - # RGBDS assembler constants - { - match: '_\\b(?i:PI|RS|NARG|_LINE__|_FILE__|_DATE__|_TIME__|_ISO_8601_LOCAL__|_ISO_8601_UTC__|_UTC_YEAR__|_UTC_MONTH__|_UTC_DAY__|_UTC_HOUR__|_UTC_MINUTE__|_UTC_SECOND__|_RGBDS_MAJOR__|_RGBDS_MINOR__|_RGBDS_PATCH__)\\b' - name: 'constant.language.rgbasm' - } - # section base directives - { - match: '\\b(ROM0|ROMX|VRAM|SRAM|WRAM0|WRAMX|OAM|HRAM|ALIGN|BANK|HOME|BSS)\\b' - name: 'constant.language.rgbasm' - } - # opcodes - { - match: '\\b(?i:j[pr]|call|reti?|ld(i|d|h)?|push|pop|ad(d|c)|sub|sbc|and|x?or|cp|inc|dec|daa|cpl|rlca|rla|rrca|rra|rlc|rl|rrc|rr|sla|swap|sra|srl|bit|res|set|ccf|scf|nop|halt|stop|di|ei|rst)\\b' - name: 'keyword.mnemonic.rgbasm' - } - # braces - { - match: '(\\[|\\])' - name: 'meta.brace.square.rgbasm' - } - # operators - { - match: '\\~|\\+|\\-|\\*|\\/|\\%|<>?|\\&|\\||\\^|(!|=|<|>)=|!' - name: 'keyword.operator.rgbasm' - } - # global labels - { - captures: - 1: name: 'entity.name.function.label.rgbasm' - 2: name: 'entity.name.function.label.rgbasm' - match: '^([a-zA-Z_][a-zA-Z0-9_\\@\\.]*?)(::?)?\\s+' - } - # local labels - { - captures: - 1: name: 'entity.name.function.label.rgbasm' - 2: name: 'entity.name.function.label.rgbasm' - match: '^(\\.[a-zA-Z_][a-zA-Z0-9_\\@]*?)(:)?\\s+' - } - ] From 5229f0e28e445a2febfdcf13087e9b780d85d287 Mon Sep 17 00:00:00 2001 From: Georg Ziegler Date: Fri, 22 Jun 2018 10:59:33 +0200 Subject: [PATCH 7/7] Improve labels and assembler directives --- grammars/rgbasm.cson | 79 +++++++++++++++++++++++++++++++++----------- 1 file changed, 59 insertions(+), 20 deletions(-) diff --git a/grammars/rgbasm.cson b/grammars/rgbasm.cson index 6390c24..956bd45 100644 --- a/grammars/rgbasm.cson +++ b/grammars/rgbasm.cson @@ -11,8 +11,8 @@ fileTypes: [ ] name: 'RGBDS Assembly' patterns: [ - { include: '#comments' } # comments - { include: '#symbols' } # labels, constants, numbers + { include: '#comments' } # comments + { include: '#symbols' } # labels, constants, numbers { include: '#directives' } # RGBDS assembler directives ] @@ -24,8 +24,8 @@ repository: patterns: [ # semicolon comments { - match: ';.*$' - name: 'comment.line.semicolon.rgbasm' + match: ';.*$' + name: 'comment.line.semicolon.rgbasm' } ] @@ -96,7 +96,8 @@ repository: } # assembler directives { - match: '\\b(?i:MACRO|ENDM|REPT|ENDR|DB|DW|DS|INCLUDE|INCBIN|EQUS?|SECTION|SET|RSSET|RSRESET|RB|RW|RL|EXPORT|GLOBAL|PURGE|SHIFT|UNION|NEXTU|ENDU|PRINTT|PRINTV|PRINTF|FAIL|WARN|OPT|PUSHS|POPS|PUSHO|POPO|OPT)\\b' + match: '\\b(?i:MACRO|ENDM|REPT|ENDR|DB|DW|DS|INCLUDE|INCBIN|EQUS?|SET|RSSET|RSRESET|RB|RW|RL|EXPORT|GLOBAL|PURGE|SHIFT|UNION|NEXTU|ENDU|PRINTT|PRINTV|PRINTF|FAIL|WARN|OPT|PUSHS|POPS|PUSHO|POPO|OPT)\\b' + # match: '\\b(?i:MACRO|ENDM|REPT|ENDR|DB|DW|DS|INCLUDE|INCBIN|EQUS?|SECTION|SET|RSSET|RSRESET|RB|RW|RL|EXPORT|GLOBAL|PURGE|SHIFT|UNION|NEXTU|ENDU|PRINTT|PRINTV|PRINTF|FAIL|WARN|OPT|PUSHS|POPS|PUSHO|POPO|OPT)\\b' name: 'support.function.pseudo.rgbasm' } # if elif else @@ -109,38 +110,76 @@ repository: match: '_\\b(?i:PI|RS|NARG|_LINE__|_FILE__|_DATE__|_TIME__|_ISO_8601_LOCAL__|_ISO_8601_UTC__|_UTC_YEAR__|_UTC_MONTH__|_UTC_DAY__|_UTC_HOUR__|_UTC_MINUTE__|_UTC_SECOND__|_RGBDS_MAJOR__|_RGBDS_MINOR__|_RGBDS_PATCH__)\\b' name: 'constant.language.rgbasm' } - # section base directives + # section command { - match: '\\b(ROM0|ROMX|VRAM|SRAM|WRAM0|WRAMX|OAM|HRAM|ALIGN|BANK|HOME|BSS)\\b' - name: 'constant.language.rgbasm' + begin: '\\b((?i:section))\\b' + captures: + 1: name: 'support.function.pseudo.rgbasm' + end: '$' + name: 'meta.directives.section.rgbasm' + patterns: [ + # section base directives + { + match: '\\b(ROM0|ROMX|VRAM|SRAM|WRAM0|WRAMX|OAM|HRAM|ALIGN|BANK|HOME|BSS)\\b' + name: 'constant.language.rgbasm' + } + # hex numbers, strings + { include: '#symbols' } + # comments + { include: '#comments' } + ] } # opcodes { match: '\\b(?i:j[pr]|call|reti?|ld(i|d|h)?|push|pop|ad(d|c)|sub|sbc|and|x?or|cp|inc|dec|daa|cpl|rlca|rla|rrca|rra|rlc|rl|rrc|rr|sla|swap|sra|srl|bit|res|set|ccf|scf|nop|halt|stop|di|ei|rst)\\b' name: 'keyword.mnemonic.rgbasm' } - # braces - { - match: '(\\[|\\])' - name: 'meta.brace.square.rgbasm' - } # operators { match: '\\~|\\+|\\-|\\*|\\/|\\%|<>?|\\&|\\||\\^|(!|=|<|>)=|!' name: 'keyword.operator.rgbasm' } - # global labels + ##### LABELS + # global labels with colored colons { captures: 1: name: 'entity.name.function.label.rgbasm' - 2: name: 'entity.name.function.label.rgbasm' - match: '^([a-zA-Z_][a-zA-Z0-9_\\@\\.]*?)(::?)?\\s+' + 2: name: 'keyword.operator.label.scope.rgbasm' + 3: name: 'entity.name.function.label.rgbasm' + match: '^([a-zA-Z_][a-zA-Z0-9_\\@]*?)(\\.)?([a-zA-Z_][a-zA-Z0-9_\\@]*?)?(::?)?\\s+' } - # local labels + # local labels with colored colons { captures: - 1: name: 'entity.name.function.label.rgbasm' + 1: name: 'keyword.operator.label.scope.rgbasm' 2: name: 'entity.name.function.label.rgbasm' - match: '^(\\.[a-zA-Z_][a-zA-Z0-9_\\@]*?)(:)?\\s+' - } + match: '^(\\.)([a-zA-Z_][a-zA-Z0-9_\\@]*?)(:)?\\s+' + } + # # global labels + # { + # captures: + # 1: name: 'entity.name.function.label.rgbasm' + # 2: name: 'entity.name.function.label.rgbasm' + # match: '^([a-zA-Z_][a-zA-Z0-9_\\@\\.]*?)(::?)?\\s+' + # } + # # local labels + # { + # captures: + # 1: name: 'entity.name.function.label.rgbasm' + # 2: name: 'entity.name.function.label.rgbasm' + # match: '^(\\.[a-zA-Z_][a-zA-Z0-9_\\@]*?)(:)?\\s+' + # } + ##### INLINE LABELS + # # inline labels in [] + # { + # captures: + # 2: name: 'entity.name.function.label.rgbasm' + # match: '(\\[)(.*?)(\\])' + # } + ##### WARNING: This is buggy and will cause illegal labels to highlight + # # other inline labels + # { + # match: '(?!^)\\b(\\.?[a-zA-Z_][a-zA-Z0-9_\\@]*)\\b' + # name: 'entity.name.function.label.rgbasm' + # } ]