{ "name": "ZAP", "scopeName": "source.zap", "patterns": [ { "include": "#whitespace" }, { "include": "#comment" }, { "include": "#number" }, { "include": "#string" }, { "include": "#labels" }, { "include": "#instruction" }, { "include": "#debug_directive" }, { "include": "#directive" } ], "repository": { "branch": { "name": "meta.branch.zap", "match": "(?x)\n(?: (/) | (\\\\) )\n\\s*\n(?:\n (TRUE | FALSE)\n| ( [A-Za-z?$#\u0026] [A-Za-z0-9\\-?$#\u0026.]* )\n)", "captures": { "1": { "name": "keyword.control.branch.positive.zap" }, "2": { "name": "keyword.control.branch.negative.zap" }, "3": { "name": "keyword.control.branch.${3:/downcase}.zap" }, "4": { "name": "keyword.control.branch.label.name.zap" } } }, "comment": { "name": "comment.line.zap", "match": "(;).*$", "captures": { "1": { "name": "punctuation.definition.comment.line.zap" } } }, "debug_directive": { "name": "meta.directive.debug.zap", "begin": "(?x)\n(?\u003c=\\s|:|^)\n(\\.)(DEBUG-[-A-Z]+)\n(?= \\s | ; | $)", "end": "(?=;|$)", "patterns": [ { "include": "#operands" } ], "beginCaptures": { "0": { "name": "keyword.directive.debug.${2:/downcase}.zap" }, "1": { "name": "punctuation.directive.debug.zap" } } }, "directive": { "name": "meta.directive.zap", "begin": "(?x)\n(?\u003c=\\s|:|^)\n(?!\\.DEBUG-)\n(?:\n ((\\.)(FUNCT))\n \\s+\n ([A-Za-z?$#\u0026][A-Za-z0-9\\-?$#\u0026.]*)\n (?= \\s | [,;] | $)\n|\n ((\\.)([A-Z]+))\n (?= \\s | ; | $)\n)", "end": "(?=;|$)", "patterns": [ { "include": "#operands" } ], "beginCaptures": { "1": { "name": "keyword.directive.${3:/downcase}.zap" }, "2": { "name": "punctuation.directive.zap" }, "4": { "name": "entity.name.function.zap" }, "5": { "name": "keyword.directive.${7:/downcase}.zap" }, "6": { "name": "punctuation.directive.zap" } } }, "global_label": { "name": "meta.label.global.zap", "match": "([A-Za-z?$#\u0026][A-Za-z0-9\\-?$#\u0026.]*)(::)", "captures": { "1": { "name": "keyword.control.definition.label.global.name.zap" }, "2": { "name": "punctuation.definition.label.global.zap" } } }, "identifier": { "name": "meta.variable.zap", "match": "(STACK\\b)|([A-Za-z?$#\u0026][A-Za-z0-9\\-?$#\u0026.]*)", "captures": { "1": { "name": "variable.language.stack.zap" }, "2": { "name": "variable.zap" } } }, "instruction": { "name": "meta.instruction.zap", "begin": "(?x)\n\\b\n(?:\n (JUMP)\n \\s+\n ([A-Za-z?$#\u0026][A-Za-z0-9\\-?$#\u0026.]*)\n (?= \\s* (?: ; | $ ) )\n|\n (\n ADD | ASHIFT | ASSIGNED\\? | BAND | BCOM | BOR | BTST | BUFOUT | CALL | CALL1 | CALL2 |\n CATCH | CHECKU | CLEAR | COLOR | COPYT | CRLF | CURGET | CURSET | DCLEAR | DEC |\n DIRIN | DIROUT | DISPLAY | DIV | DLESS\\? | EQUAL\\? | ERASE | FCLEAR | FIRST\\? | FONT |\n FSET\\?? | FSTACK | GET | GETB | GETP | GETPT | GRTR\\? | HLIGHT | ICALL | ICALL1 |\n ICALL2 | IGRTR\\? | IN\\? | INC | INPUT | INTBL\\? | IRESTORE | ISAVE | IXCALL | JUMP |\n LESS\\? | LEX | LOC | MARGIN | MENU | MOD | MOUSE-INFO | MOUSE-LIMIT | MOVE | MUL |\n NEXT\\? | NEXTP | NOOP | ORIGINAL\\? | PICINF | PICSET | POP | PRINT | PRINTB | PRINTC |\n PRINTD | PRINTF | PRINTI | PRINTN | PRINTR | PRINTT | PRINTU | PTSIZE | PUSH | PUT |\n PUTB | PUTP | QUIT | RANDOM | READ | REMOVE | RESTART | RESTORE | RETURN | RFALSE |\n RSTACK | RTRUE | SAVE | SCREEN | SCROLL | SET | SHIFT | SOUND | SPLIT | SUB | THROW |\n USL | VALUE | VERIFY | WINATTR | WINGET | WINPOS | WINPUT | WINSIZE | XCALL | XPUSH |\n ZERO\\? | XWSTR\n )\n (?= \\s | ; | $)\n)", "end": "(?=;|$)", "patterns": [ { "include": "#opcode" }, { "include": "#operands" }, { "include": "#store" }, { "include": "#branch" } ], "beginCaptures": { "1": { "name": "keyword.opcode.zap" }, "2": { "name": "keyword.control.branch.label.name.zap" }, "3": { "name": "keyword.opcode.zap" } } }, "labels": { "patterns": [ { "include": "#global_label" }, { "include": "#local_label" } ] }, "local_label": { "name": "meta.label.local.zap", "match": "([A-Za-z?$#\u0026][A-Za-z0-9\\-?$#\u0026.]*)(:)(?!:)", "captures": { "1": { "name": "keyword.control.definition.label.local.name.zap" }, "2": { "name": "punctuation.definition.label.local.zap" } } }, "number": { "name": "constant.numeric.decimal.zap", "match": "[0-9]+" }, "operands": { "patterns": [ { "include": "#summation" }, { "include": "#number" }, { "include": "#identifier" }, { "include": "#string" } ] }, "store": { "name": "meta.store.zap", "match": "(\u003e)\\s*(?:(STACK)|([A-Za-z?$#\u0026][A-Za-z0-9\\-?$#\u0026.]*))", "captures": { "1": { "name": "punctuation.definition.storage.zap" }, "2": { "name": "storage.stack.zap" }, "3": { "name": "entity.name.variable.zap" } } }, "string": { "name": "string.quoted.double.zap", "begin": "\"", "end": "\"", "patterns": [ { "name": "constant.character.escape.zap", "match": "\\\\." } ], "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.zap" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.zap" } } }, "summation": { "name": "meta.operand.summation.zap", "match": "(?:([0-9]+)|([A-Za-z?$#\u0026][A-Za-z0-9\\-?$#\u0026.]*))(?:\\s*(\\+)\\s*(?:([0-9]+)|([A-Za-z?$#\u0026][A-Za-z0-9\\-?$#\u0026.]*)))+", "captures": { "1": { "name": "constant.numeric.decimal.zap" }, "2": { "name": "entity.name.variable.zap" }, "3": { "name": "keyword.operator.plus.zap" }, "4": { "name": "constant.numeric.decimal.zap" }, "5": { "name": "entity.name.variable.zap" } } }, "whitespace": { "match": "\\s+" } } }