{ "name": "FIGlet Control File", "scopeName": "source.figctrl", "patterns": [ { "name": "keyword.control.file.signature.figctrl", "match": "\\Aflc2a(?=\\s|$)" }, { "include": "#main" } ], "repository": { "char": { "patterns": [ { "name": "constant.character.escape.figctrl", "match": "(\\\\)[ abefnrtv\\\\]", "captures": { "1": { "name": "punctuation.definition.escape.backslash.figctrl" } } }, { "name": "constant.character.escape.codepoint.figctrl", "match": "(\\\\)[-+]?(?:0[Xx][A-Fa-f0-9]*|[0-9]+)", "captures": { "1": { "name": "punctuation.definition.escape.backslash.figctrl" } } }, { "name": "string.unquoted.character.literal.figctrl", "match": "[^\\s\\\\]" } ] }, "comment": { "name": "comment.line.number-sign.figctrl", "begin": "^#", "end": "$", "beginCaptures": { "0": { "name": "punctuation.definition.comment.figctrl" } } }, "extendedCommands": { "patterns": [ { "name": "meta.extended.command.input-encoding.figctrl", "begin": "^[bfhju]", "end": "$", "patterns": [ { "include": "#invalidArgument" } ], "beginCaptures": { "0": { "name": "keyword.operator.command.figctrl" } } }, { "name": "meta.extended.command.input-encoding.figctrl", "begin": "^g", "end": "$", "patterns": [ { "match": "\\G\\s*(L|R)\\s*([0-3])?", "captures": { "1": { "name": "storage.type.var.byte-half.figctrl" }, "2": { "name": "constant.numeric.decimal.integer.int.figctrl" } } }, { "match": "\\G\\s*([0-3])(?:\\s*(94x94|94|96)\\s*(\\\\ |\\S+))?", "captures": { "1": { "name": "constant.numeric.decimal.integer.int.figctrl" }, "2": { "name": "constant.language.size.figctrl" }, "3": { "patterns": [ { "include": "#char" } ] } } }, { "include": "#invalidArgument" } ], "beginCaptures": { "0": { "name": "keyword.operator.command.figctrl" } } } ] }, "invalidArgument": { "name": "invalid.illegal.unexpected-argument.figctrl", "match": "\\S+" }, "main": { "patterns": [ { "include": "#comment" }, { "include": "#transform" }, { "include": "#extendedCommands" }, { "include": "#transformArgs" } ] }, "number": { "patterns": [ { "name": "constant.numeric.hexadecimal.hex.integer.int.figctrl", "match": "[-+]?0[Xx][0-9A-Fa-f]*" }, { "name": "constant.numeric.decimal.integer.int.figctrl", "match": "[-+]?[0-9]+" } ] }, "transform": { "name": "meta.transform.command.figctrl", "begin": "^t", "end": "$", "patterns": [ { "include": "#transformArgs" } ], "beginCaptures": { "0": { "name": "keyword.operator.command.figctrl" } } }, "transformArgs": { "name": "meta.transform.arguments.figctrl", "match": "(?x)\n(?:^|\\G) \\s*\n\n# 1: meta.transform.argument.from.figctrl\n(\n\t(?:\n\t\t# 2: include: “#number”\n\t\t([-+]?0[Xx][0-9A-Fa-f]*|[-+]?[0-9]+)\n\t\t|\n\t\t# 3: include: “#char”\n\t\t(\\\\[ ]|(?:\\\\-)?[^-\\s]+)\n\t)\n\t(?:\n\t\t# 4: punctuation.separator.dash.range.figctrl\n\t\t(-)\n\t\t\n\t\t(?:\n\t\t\t# 5: include: “#number”\n\t\t\t([-+]?0[Xx][0-9A-Fa-f]*|[-+]?[0-9]+)\n\t\t\t|\n\t\t\t# 6: include: “#char”\n\t\t\t(\\\\[ ]|(?:\\\\-)?[^-\\s]+)\n\t\t)\n\t)?\n)\n\n\\s+\n\n# 7: meta.transform.argument.to.figctrl\n(\n\t(?:\n\t\t# 8: include: “#number”\n\t\t([-+]?0[Xx][0-9A-Fa-f]*|[-+]?[0-9]+)\n\t\t|\n\t\t# 9: include: “#char”\n\t\t(\\\\[ ]|(?:\\\\-)?[^-\\s]+)\n\t)\n\t(?:\n\t\t# 10: punctuation.separator.dash.range.figctrl\n\t\t(-)\n\t\t\n\t\t(?:\n\t\t\t# 11: include: “#number”\n\t\t\t([-+]?0[Xx][0-9A-Fa-f]*|[-+]?[0-9]+)\n\t\t\t|\n\t\t\t# 12: include: “#char”\n\t\t\t(\\\\[ ]|(?:\\\\-)?[^-\\s]+)\n\t\t)\n\t)?\n)\n\n# 13: Possible trailing comment\n(\\s+\\S.*)?", "captures": { "1": { "name": "meta.transform.argument.from.figctrl" }, "10": { "name": "punctuation.separator.dash.range.figctrl" }, "11": { "patterns": [ { "include": "#number" } ] }, "12": { "patterns": [ { "include": "#char" } ] }, "13": { "patterns": [ { "name": "comment.line.number-sign.figctrl", "match": "(#).*", "captures": { "1": { "name": "punctuation.definition.comment.figctrl" } } }, { "name": "comment.line.implicit.figctrl", "match": "[^\\s#].*" } ] }, "2": { "patterns": [ { "include": "#number" } ] }, "3": { "patterns": [ { "include": "#char" } ] }, "4": { "name": "punctuation.separator.dash.range.figctrl" }, "5": { "patterns": [ { "include": "#number" } ] }, "6": { "patterns": [ { "include": "#char" } ] }, "7": { "name": "meta.transform.argument.to.figctrl" }, "8": { "patterns": [ { "include": "#number" } ] }, "9": { "patterns": [ { "include": "#char" } ] } } } } }