|
| 1 | +$schema: 'https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json' |
| 2 | +name: Redcode |
| 3 | +scopeName: source.redcode |
| 4 | +patterns: |
| 5 | + - include: '#directive' |
| 6 | + - include: '#opcode' |
| 7 | + - include: '#field' |
| 8 | + - include: '#label' |
| 9 | + |
| 10 | +repository: |
| 11 | + opcode: |
| 12 | + patterns: |
| 13 | + - name: keyword.operator.control.opcode.88.redcode |
| 14 | + match: (?i)\b(DAT|MOV|ADD|SUB|JMP|JMZ|JMN|DJN|SLT|CMP|SPL)\b |
| 15 | + - name: keyword.operator.control.opcode.94.redcode |
| 16 | + match: (?i)\b(MUL|DIV|MOD|SEQ|SNE|NOP)\b |
| 17 | + - name: keyword.operator.control.opcode.p-space.redcode |
| 18 | + match: (?i)\b(LDP|STP)\b |
| 19 | + - name: keyword.operator.control.psuedo-opcode.88.redcode |
| 20 | + match: (?i)\b(EQU|END|FOR|ROF)\b |
| 21 | + - name: keyword.operator.control.psuedo-opcode.94.redcode |
| 22 | + match: (?i)\b(ORG)\b |
| 23 | + - name: keyword.operator.control.psuedo-opcode.p-space.redcode |
| 24 | + match: (?i)\b(PIN)\b |
| 25 | + |
| 26 | + builtin: |
| 27 | + patterns: |
| 28 | + - name: constant.language.88.redcode |
| 29 | + match: \b(CORESIZE|MAXPROCESSES|MAXCYCLES|MAXLENGTH)\b |
| 30 | + - name: constant.language.94.redcode |
| 31 | + match: \b(MINDISTANCE|ROUNDS|CURLINE|VERSION|WARRIORS)\b |
| 32 | + - name: constant.language.p-space.redcode |
| 33 | + match: \b(PSPACESIZE)\b |
| 34 | + |
| 35 | + directive: |
| 36 | + begin: '(;)' |
| 37 | + beginCaptures: |
| 38 | + '1': |
| 39 | + name: comment.line.semicolon.redcode |
| 40 | + end: '$' |
| 41 | + patterns: |
| 42 | + - include: '#directive_with_argument' |
| 43 | + - name: keyword.operator.directive.main.redcode |
| 44 | + match: (?i)(redcode)(?!-) |
| 45 | + - name: keyword.operator.directive.koth.main.redcode |
| 46 | + match: (?i)(redcode-[a-zA-Z0-9]+) |
| 47 | + - name: keyword.operator.directive.debug.redcode |
| 48 | + match: (?i)(debug)[[:blank:]]+(off|static) |
| 49 | + - name: keyword.operator.directive.trace.redcode |
| 50 | + match: (?i)(trace)[[:blank:]]+(off) |
| 51 | + - name: comment.line.semicolon.redcode |
| 52 | + match: '.*' |
| 53 | + |
| 54 | + directive_with_argument: |
| 55 | + patterns: |
| 56 | + - match: (?i)(assert)\b(.*) |
| 57 | + captures: |
| 58 | + '1': |
| 59 | + name: keyword.operator.directive.redcode |
| 60 | + '2': |
| 61 | + patterns: |
| 62 | + - include: '#expression' |
| 63 | + |
| 64 | + - match: (?i)(author|break|name)\b(.*) |
| 65 | + captures: |
| 66 | + '1': |
| 67 | + name: keyword.operator.directive.redcode |
| 68 | + '2': |
| 69 | + name: string.unquoted.directive.argument.redcode |
| 70 | + |
| 71 | + - match: (?i)(help|kill|status|strategy|test|password|newpasswd|newredcode|url|version|date)\b(.*) |
| 72 | + name: keyword.operator.directive.koth.redcode |
| 73 | + captures: |
| 74 | + '2': |
| 75 | + name: string.unquoted.directive.koth.argument.redcode |
| 76 | + |
| 77 | + label: |
| 78 | + patterns: |
| 79 | + - name: variable.redcode |
| 80 | + match: '\b([a-zA-Z_][a-zA-Z0-9_]*[:]?)\b' |
| 81 | + |
| 82 | + field: |
| 83 | + patterns: |
| 84 | + - name: keyword.operator.address-mode.88.redcode |
| 85 | + match: '[#$@<]' |
| 86 | + - name: keyword.operator.address-mode.94.redcode |
| 87 | + match: '[>*{}]' |
| 88 | + - name: keyword.operator.modifier.redcode |
| 89 | + match: '(?i)\b(\.([ABFXI]|AB|BA))\b' |
| 90 | + - include: '#expression' |
| 91 | + |
| 92 | + expression: |
| 93 | + name: expression |
| 94 | + patterns: |
| 95 | + - name: keyword.operator.math.redcode |
| 96 | + match: '[+\-*/%]' |
| 97 | + - name: keyword.operator.logical.redcode |
| 98 | + match: '[=<>&|!]' |
| 99 | + - name: constant.numeric.redcode |
| 100 | + match: \b\d+\b |
| 101 | + - include: '#builtin' |
| 102 | + - include: '#label' |
| 103 | + - include: '#paren_expression' |
| 104 | + |
| 105 | + paren_expression: |
| 106 | + begin: '\(' |
| 107 | + beginCaptures: |
| 108 | + '0': |
| 109 | + name: punctuation.paren.open.redcode |
| 110 | + end: '\)' |
| 111 | + endCaptures: |
| 112 | + '0': |
| 113 | + name: punctuation.paren.open.redcode |
| 114 | + name: expression.group |
| 115 | + patterns: |
| 116 | + - include: '#expression' |
0 commit comments