UNPKG

@blitz/textmate

Version:
1,099 lines (1,098 loc) 36.2 kB
{ "name": "Marko", "scopeName": "text.marko", "uuid": "46c8c3f8-cabe-466a-a633-5deafdc51253", "fileTypes": ["marko"], "patterns": [ { "comment": "CSS style block, eg: style { color: green }", "name": "meta.embedded.css", "contentName": "source.css", "begin": "^\\s*(style)(\\b[^\\s]*\\.css)?\\s+({)", "end": "}", "patterns": [{ "include": "source.css" }], "beginCaptures": { "1": { "name": "support.type.builtin.marko" }, "2": { "name": "storage.modifier.marko.css" }, "3": { "name": "punctuation.section.scope.begin.marko.css" } }, "endCaptures": { "0": { "name": "punctuation.section.scope.end.marko.css" } } }, { "comment": "Less style block, eg: style.less { color: green }", "name": "meta.embedded.less", "contentName": "source.less", "begin": "^\\s*(style)(\\b[^\\s]*\\.less)\\s+({)", "end": "}", "patterns": [{ "include": "source.css.less" }], "beginCaptures": { "1": { "name": "support.type.builtin.marko" }, "2": { "name": "storage.modifier.marko.css" }, "3": { "name": "punctuation.section.scope.begin.marko.css" } }, "endCaptures": { "0": { "name": "punctuation.section.scope.end.marko.css" } } }, { "comment": "SCSS style block, eg: style.scss { color: green }", "name": "meta.embedded.scss", "contentName": "source.scss", "begin": "^\\s*(style)(\\b[^\\s]*\\.scss)\\s+({)", "end": "}", "patterns": [{ "include": "source.css.scss" }], "beginCaptures": { "1": { "name": "support.type.builtin.marko" }, "2": { "name": "storage.modifier.marko.css" }, "3": { "name": "punctuation.section.scope.begin.marko.css" } }, "endCaptures": { "0": { "name": "punctuation.section.scope.end.marko.css" } } }, { "comment": "JS/TS style block", "name": "meta.embedded.ts", "contentName": "source.ts", "begin": "^\\s*(style)(\\b[^\\s]*\\.[tj]s)\\s+({)", "end": "}", "patterns": [{ "include": "source.ts" }], "beginCaptures": { "1": { "name": "support.type.builtin.marko" }, "2": { "name": "storage.modifier.marko.css" }, "3": { "name": "punctuation.section.scope.begin.marko.css" } }, "endCaptures": { "0": { "name": "punctuation.section.scope.end.marko.css" } } }, { "comment": "Top level blocks parsed as JavaScript", "name": "meta.embedded.ts", "contentName": "source.ts", "begin": "^\\s*(?:(static\\b)|(?=(?:class|import|export)\\b))", "end": "(?=\\n|$)", "patterns": [{ "include": "source.ts" }], "beginCaptures": { "1": { "name": "keyword.control.static.marko" } } }, { "include": "#content-concise-mode" } ], "repository": { "attrs": { "patterns": [ { "include": "#javascript-comments" }, { "comment": "Attribute with optional value", "name": "meta.marko-attribute", "applyEndPatternLast": 1, "begin": "(?:(key|on[a-zA-Z0-9_$-]+|[a-zA-Z0-9_$]+Change|no-update(?:-body)?(?:-if)?)|([a-zA-Z0-9_$][a-zA-Z0-9_$-]*)|(#[a-zA-Z0-9_$][a-zA-Z0-9_$-]*))(:[a-zA-Z0-9_$][a-zA-Z0-9_$-]*)?", "end": "(?=.|$)", "beginCaptures": { "1": { "name": "support.type.attribute-name.marko" }, "2": { "name": "entity.other.attribute-name.marko" }, "3": { "name": "support.function.attribute-name.marko" }, "4": { "name": "support.function.attribute-name.marko" } }, "patterns": [{ "include": "#html-args-or-method" }, { "include": "#attr-value" }] }, { "comment": "A ...spread attribute", "name": "meta.marko-spread-attribute", "contentName": "source.ts", "begin": "(\\.\\.\\.)", "end": "(?=[,;\\]]|/>|(?<=[^=])>|(?<!(?:^|[!~*%&^|?:]|[!~*%&^|?/<>+=-]=|=>|>{2,}|[^.]\\.|[^-]-|^\\s*\\+\\+|[^\\+]\\+{2}*\\+|[a-zA-Z0-9%).<\\]}]\\s*/|\\b(?<![.]\\s*)(?:await|async|class|function|keyof|new|typeof|void))\\s*)(?:\\n|[ \\t]+(?![\\n{(+!~*%&^|?:]|[<>/=-]=|=>|>{2,}|\\.[^.]|-[^-]|/[^>]|(?:in|instanceof|as|extends)\\s+[^:=/,;>])))", "patterns": [{ "include": "#javascript-expression" }], "beginCaptures": { "1": { "name": "keyword.operator.spread.marko" } } }, { "comment": "Consume any whitespace after a comma", "begin": "\\s*(,(?!,))", "end": "(?=\\S)", "captures": { "1": { "name": "punctuation.separator.comma.marko" } } }, { "include": "#invalid" } ] }, "attr-value": { "comment": "Attribute value", "name": "meta.embedded.ts", "contentName": "source.ts", "begin": "\\s*(:?=)\\s*", "end": "(?=[,;\\]]|/>|(?<=[^=])>|(?<!(?:^|[!~*%&^|?:]|[!~*%&^|?/<>+=-]=|=>|>{2,}|[^.]\\.|[^-]-|^\\s*\\+\\+|[^\\+]\\+{2}*\\+|[a-zA-Z0-9%).<\\]}]\\s*/|\\b(?<![.]\\s*)(?:await|async|class|function|keyof|new|typeof|void))\\s*)(?:\\n|[ \\t]+(?![\\n{(+!~*%&^|?:]|[<>/=-]=|=>|>{2,}|\\.[^.]|-[^-]|/[^>]|(?:in|instanceof|as|extends)\\s+[^:=/,;>])))", "patterns": [{ "include": "#javascript-expression" }], "beginCaptures": { "1": { "patterns": [{ "include": "source.ts" }] } } }, "concise-html-block": { "comment": "--- HTML block within concise mode content. ---", "name": "meta.section.marko-html-block", "begin": "\\s*(--+)\\s*$", "end": "\\1", "patterns": [{ "include": "#content-html-mode" }], "beginCaptures": { "1": { "name": "punctuation.section.embedded.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.embedded.scope.end.marko" } } }, "concise-html-line": { "comment": "-- HTML line within concise mode content. (content-html-mode w/o scriptlet)", "name": "meta.section.marko-html-line", "match": "\\s*(--+)(?=\\s+\\S)(.*)($)", "captures": { "1": { "name": "punctuation.section.embedded.scope.begin.marko" }, "2": { "patterns": [ { "include": "#cdata" }, { "include": "#doctype" }, { "include": "#declaration" }, { "include": "#javascript-comments-after-whitespace" }, { "include": "#html-comment" }, { "include": "#tag-html" }, { "comment": "Match escape characters in text.", "name": "text.marko", "match": "\\\\." }, { "include": "#placeholder" }, { "comment": "Match anything else as text.", "name": "text.marko", "match": ".+?" } ] }, "3": { "name": "punctuation.section.embedded.scope.end.marko" } } }, "concise-semi-eol": { "comment": "Match spaces followed by a semi that represents the end of the line in concise mode.", "begin": "\\s*(;)", "end": "$", "patterns": [{ "include": "#javascript-comments" }, { "include": "#html-comment" }, { "include": "#invalid" }], "beginCaptures": { "1": { "name": "punctuation.terminator.marko" } } }, "concise-attr-group": { "comment": "Matches a group of non newline sensitive attributes in square brackets.", "begin": "\\s*(\\[)", "end": "]", "patterns": [ { "include": "#concise-attr-group" }, { "begin": "\\s+", "end": "(?=\\S)" }, { "include": "#attrs" }, { "include": "#invalid" } ], "beginCaptures": { "1": { "name": "punctuation.section.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.scope.end.marko" } } }, "concise-open-tag-content": { "comment": "Handles everything from the start of the tag name until the body content begins.", "patterns": [ { "include": "#tag-before-attrs" }, { "include": "#concise-semi-eol" }, { "comment": "Matches unenclosed concise mode attributes.", "begin": "(?!^)[, \\t]", "end": "(?=--)|(?=\\n)", "patterns": [ { "include": "#concise-semi-eol" }, { "include": "#concise-attr-group" }, { "begin": "[ \\t]+", "end": "(?=\\S|\\n)" }, { "include": "#attrs" }, { "include": "#invalid" } ] } ] }, "concise-comment-block": { "comment": "--- Embedded concise comment content block. ---", "name": "meta.section.marko-comment-block", "begin": "\\s*(--+)\\s*$", "end": "\\1", "patterns": [{ "include": "#content-embedded-comment" }], "beginCaptures": { "1": { "name": "punctuation.section.embedded.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.embedded.scope.end.marko" } } }, "concise-comment-line": { "comment": "-- Embedded concise comment content line.", "name": "meta.section.marko-comment-line", "applyEndPatternLast": 1, "begin": "\\s*(--+)", "end": "$", "patterns": [{ "include": "#content-embedded-comment" }], "beginCaptures": { "1": { "name": "punctuation.section.embedded.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.embedded.scope.end.marko" } } }, "concise-script-block": { "comment": "--- Embedded concise script content block. ---", "name": "meta.section.marko-script-block", "begin": "\\s*(--+)\\s*$", "end": "\\1", "patterns": [{ "include": "#content-embedded-script" }], "beginCaptures": { "1": { "name": "punctuation.section.embedded.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.embedded.scope.end.marko" } } }, "concise-script-line": { "comment": "-- Embedded concise script content line.", "name": "meta.section.marko-script-line", "applyEndPatternLast": 1, "begin": "\\s*(--+)", "end": "$", "patterns": [{ "include": "#content-embedded-script" }], "beginCaptures": { "1": { "name": "punctuation.section.embedded.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.embedded.scope.end.marko" } } }, "concise-style-block": { "comment": "--- Embedded concise style content block. ---", "name": "meta.section.marko-style-block", "contentName": "source.css", "begin": "\\s*(--+)\\s*$", "end": "\\1", "patterns": [{ "include": "#content-embedded-style" }], "beginCaptures": { "1": { "name": "punctuation.section.embedded.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.embedded.scope.end.marko" } } }, "concise-style-block-less": { "comment": "--- Embedded concise style content block. ---", "name": "meta.section.marko-style-block", "contentName": "source.less", "begin": "\\s*(--+)\\s*$", "end": "\\1", "patterns": [{ "include": "#content-embedded-style-less" }], "beginCaptures": { "1": { "name": "punctuation.section.embedded.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.embedded.scope.end.marko" } } }, "concise-style-block-scss": { "comment": "--- Embedded concise style content block. ---", "name": "meta.section.marko-style-block", "contentName": "source.scss", "begin": "\\s*(--+)\\s*$", "end": "\\1", "patterns": [{ "include": "#content-embedded-style-scss" }], "beginCaptures": { "1": { "name": "punctuation.section.embedded.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.embedded.scope.end.marko" } } }, "concise-style-line": { "comment": "-- Embedded concise style content line.", "name": "meta.section.marko-style-line", "contentName": "source.css", "applyEndPatternLast": 1, "begin": "\\s*(--+)", "end": "$", "patterns": [{ "include": "#content-embedded-style" }], "beginCaptures": { "1": { "name": "punctuation.section.embedded.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.embedded.scope.end.marko" } } }, "concise-style-line-less": { "comment": "-- Embedded concise style content line.", "name": "meta.section.marko-style-line", "contentName": "source.less", "applyEndPatternLast": 1, "begin": "\\s*(--+)", "end": "$", "patterns": [{ "include": "#content-embedded-style-less" }], "beginCaptures": { "1": { "name": "punctuation.section.embedded.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.embedded.scope.end.marko" } } }, "concise-style-line-scss": { "comment": "-- Embedded concise style content line.", "name": "meta.section.marko-style-line", "contentName": "source.scss", "applyEndPatternLast": 1, "begin": "\\s*(--+)", "end": "$", "patterns": [{ "include": "#content-embedded-style-scss" }], "beginCaptures": { "1": { "name": "punctuation.section.embedded.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.embedded.scope.end.marko" } } }, "content-concise-mode": { "comment": "Concise mode content block.", "name": "meta.marko-concise-content", "patterns": [ { "include": "#scriptlet" }, { "include": "#javascript-comments" }, { "include": "#cdata" }, { "include": "#doctype" }, { "include": "#declaration" }, { "include": "#html-comment" }, { "include": "#concise-html-block" }, { "include": "#concise-html-line" }, { "include": "#invalid-close-tag" }, { "include": "#tag-html" }, { "comment": "A concise html tag.", "patterns": [ { "comment": "Concise Marko html-comment tag", "begin": "^(\\s*)(?=html-comment\\b)", "while": "(?=^(?:[})\\]`]|\\*/|\\1\\s+(\\S|$)))", "patterns": [ { "include": "#concise-open-tag-content" }, { "include": "#concise-comment-block" }, { "include": "#concise-comment-line" } ] }, { "comment": "Concise style tag less", "begin": "^(\\s*)(?=style\\b[^\\s]*\\.less\\b)", "while": "(?=^(?:[})\\]`]|\\*/|\\1\\s+(\\S|$)))", "patterns": [ { "include": "#concise-open-tag-content" }, { "include": "#concise-style-block-less" }, { "include": "#concise-style-line-less" } ] }, { "comment": "Concise style tag scss", "begin": "^(\\s*)(?=style\\b[^\\s]*\\.scss\\b)", "while": "(?=^(?:[})\\]`]|\\*/|\\1\\s+(\\S|$)))", "patterns": [ { "include": "#concise-open-tag-content" }, { "include": "#concise-style-block-scss" }, { "include": "#concise-style-line-scss" } ] }, { "comment": "Concise style tag js/ts", "begin": "^(\\s*)(?=style\\b[^\\s]*\\.[tj]s\\b)", "while": "(?=^(?:[})\\]`]|\\*/|\\1\\s+(\\S|$)))", "patterns": [ { "include": "#concise-open-tag-content" }, { "include": "#concise-script-block" }, { "include": "#concise-script-line" } ] }, { "comment": "Concise style tag", "begin": "^(\\s*)(?=style\\b)", "while": "(?=^(?:[})\\]`]|\\*/|\\1\\s+(\\S|$)))", "patterns": [ { "include": "#concise-open-tag-content" }, { "include": "#concise-style-block" }, { "include": "#concise-style-line" } ] }, { "comment": "Concise script tag", "begin": "^(\\s*)(?=script\\b)", "while": "(?=^(?:[})\\]`]|\\*/|\\1\\s+(\\S|$)))", "patterns": [ { "include": "#concise-open-tag-content" }, { "include": "#concise-script-block" }, { "include": "#concise-script-line" } ] }, { "comment": "Normal concise tag", "begin": "^([ \\t]*)(?=[a-zA-Z0-9_$@.#])", "while": "(?=^(?:[})\\]`]|\\*/|\\1\\s+(\\S|$)))", "patterns": [{ "include": "#concise-open-tag-content" }, { "include": "#content-concise-mode" }] } ] } ] }, "content-embedded-comment": { "comment": "Match comment content, but allow Marko placeholders.", "patterns": [ { "include": "#placeholder" }, { "name": "comment.block.marko", "match": "." } ] }, "content-embedded-script": { "comment": "Match script content, but allow Marko placeholders.", "name": "meta.embedded.ts", "patterns": [{ "include": "#placeholder" }, { "include": "source.ts" }] }, "content-embedded-style": { "comment": "Match css content, but allow Marko placeholders.", "name": "meta.embedded.css", "patterns": [{ "include": "#placeholder" }, { "include": "source.css" }] }, "content-embedded-style-less": { "comment": "Match less content, but allow Marko placeholders.", "name": "meta.embedded.css.less", "patterns": [{ "include": "#placeholder" }, { "include": "source.css.less" }] }, "content-embedded-style-scss": { "comment": "Match scss content, but allow Marko placeholders.", "name": "meta.embedded.css.scss", "patterns": [{ "include": "#placeholder" }, { "include": "source.css.scss" }] }, "content-html-mode": { "comment": "HTML mode content block.", "patterns": [ { "include": "#scriptlet" }, { "include": "#cdata" }, { "include": "#doctype" }, { "include": "#declaration" }, { "include": "#javascript-comments-after-whitespace" }, { "include": "#html-comment" }, { "include": "#invalid-close-tag" }, { "include": "#tag-html" }, { "match": "\\\\.", "name": "text.marko" }, { "include": "#placeholder" }, { "match": ".+?", "name": "text.marko" } ] }, "html-args-or-method": { "comment": "Matches parenthesis for arguments or continues into method shorthand if a { is found.", "patterns": [ { "include": "#tag-type-params" }, { "comment": "Javascript style arguments", "name": "meta.embedded.ts", "contentName": "source.ts", "begin": "\\s*(?=\\()", "end": "(?<=\\))", "patterns": [{ "include": "source.ts#paren-expression" }] }, { "comment": "Attribute method shorthand following parens", "name": "meta.embedded.ts", "contentName": "source.ts", "begin": "(?<=\\))\\s*(?={)", "end": "(?<=})", "patterns": [{ "include": "source.ts" }] } ] }, "html-comment": { "comment": "HTML comment", "name": "comment.block.marko", "begin": "\\s*(<!(--)?)", "end": "\\2>", "beginCaptures": { "1": { "name": "punctuation.definition.comment.marko" } }, "endCaptures": { "0": { "name": "punctuation.definition.comment.marko" } } }, "cdata": { "name": "meta.tag.metadata.cdata.marko", "contentName": "string.other.inline-data.marko", "begin": "\\s*<!\\[CDATA\\[", "end": "]]>", "beginCaptures": { "0": { "name": "punctuation.definition.tag.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } } }, "doctype": { "name": "meta.tag.metadata.doctype.marko", "begin": "\\s*<!(?=(?i:DOCTYPE\\s))", "end": ">", "patterns": [ { "match": "\\G(?i:DOCTYPE)", "name": "entity.name.tag.marko" }, { "begin": "\"", "end": "\"", "name": "string.quoted.double.marko" }, { "match": "[^\\s>]+", "name": "entity.other.attribute-name.marko" } ], "beginCaptures": { "0": { "name": "punctuation.definition.tag.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } } }, "declaration": { "name": "meta.tag.metadata.processing.xml.marko", "begin": "(<\\?)\\s*([a-zA-Z0-9_$-]*)", "end": "(\\??>)", "patterns": [ { "match": "((?:[^\\s=?>]+|\\?(?!>))+)(=)(?:(\"(?:[^\"\\\\]+|\\\\.)*\")|('(?:[^'\\\\]+|\\\\.)*')|((?:[^\\s?>]+|\\?(?!>))+))", "captures": { "1": { "name": "entity.other.attribute-name.marko" }, "2": { "name": "punctuation.separator.key-value.html" }, "3": { "name": "string.quoted.double.marko" }, "4": { "name": "string.quoted.single.marko" }, "5": { "name": "string.unquoted.marko" } } } ], "captures": { "1": { "name": "punctuation.definition.tag.marko" }, "2": { "name": "entity.name.tag.marko" } } }, "invalid": { "comment": "Used to highlight characters in places where all valid characters should have been matched.", "match": "\\S", "name": "invalid.illegal.character-not-allowed-here.marko" }, "javascript-comments": { "patterns": [ { "comment": "JavaScript /* block comment */", "contentName": "source.ts", "begin": "\\s*(?=/\\*)", "end": "(?<=\\*/)", "patterns": [{ "include": "source.ts" }] }, { "comment": "JavaScript // single line comment", "contentName": "source.ts", "match": "\\s*//.*$", "captures": { "0": { "patterns": [{ "include": "source.ts" }] } } } ] }, "javascript-comments-after-whitespace": { "patterns": [ { "comment": "JavaScript /* block comment */", "contentName": "source.ts", "begin": "(?:^|\\s+)(?=/\\*)", "end": "(?<=\\*/)", "patterns": [{ "include": "source.ts" }] }, { "comment": "JavaScript // single line comment", "contentName": "source.ts", "match": "(?:^|\\s+)//.*$", "captures": { "0": { "patterns": [{ "include": "source.ts" }] } } } ] }, "javascript-expression": { "comment": "Matches JavaScript source code, but always continues for certain types of expressions.", "patterns": [ { "include": "#javascript-comments" }, { "comment": "We must match the some expressions ourselves since otherwise the js grammar can overstep.", "contentName": "source.ts", "match": "(?:\\s*\\b(?:as|await|extends|in|instanceof|keyof|new|typeof|void))+\\s+(?![:=/,;>])[a-zA-Z0-9_$@#]*", "captures": { "0": { "patterns": [{ "include": "source.ts" }] } } }, { "comment": "We must match regexps since otherwise it can be cutoff by self closed tags or comments.", "contentName": "source.ts", "applyEndPatternLast": 1, "match": "(?<![a-zA-Z0-9%).<\\]}])\\s*/(?:[^\\\\\\[/]+|\\\\.|\\[(?:[^\\\\\\]]+|\\\\.)*\\])*/[a-zA-Z]*", "captures": { "0": { "name": "string.regexp.ts", "patterns": [{ "include": "source.ts#regexp" }, { "include": "source.ts" }] } } }, { "include": "source.ts" } ] }, "open-tag-content": { "comment": "Matches everything within an open tag from tag name to the last attr.", "patterns": [ { "include": "#tag-before-attrs" }, { "comment": "Attributes begin after the first space within the tag name", "begin": "(?!/?>)", "end": "(?=/?>)", "patterns": [{ "include": "#attrs" }] } ] }, "placeholder": { "comment": "A Marko template literal expression (allows $!{}).", "contentName": "source.ts", "begin": "\\$!?{", "end": "}", "patterns": [{ "include": "source.ts" }], "beginCaptures": { "0": { "name": "punctuation.definition.template-expression.begin.ts" } }, "endCaptures": { "0": { "name": "punctuation.definition.template-expression.end.ts" } } }, "javascript-placeholder": { "comment": "A JavaScript style template literal expression.", "contentName": "source.ts", "begin": "\\${", "end": "}", "patterns": [{ "include": "source.ts" }], "beginCaptures": { "0": { "name": "punctuation.definition.template-expression.begin.ts" } }, "endCaptures": { "0": { "name": "punctuation.definition.template-expression.end.ts" } } }, "scriptlet": { "comment": "An inline JavaScript scriptlet.", "name": "meta.embedded.ts", "contentName": "source.ts", "begin": "^\\s*(\\$)\\s+", "end": "$", "patterns": [{ "include": "source.ts" }], "beginCaptures": { "1": { "name": "keyword.control.scriptlet.marko" } } }, "tag-before-attrs": { "comment": "Everything in a tag before the attributes content", "patterns": [ { "include": "#tag-name" }, { "include": "#tag-shorthand-class-or-id" }, { "comment": "Variable for a tag", "name": "meta.embedded.ts", "contentName": "source.ts", "begin": "/(?![/*])", "end": "(?=[,;(|/><]|:?=|\\s+[^:]|$)", "beginCaptures": { "0": { "name": "punctuation.separator.tag-variable.marko" } }, "patterns": [ { "comment": "Match identifiers", "match": "[a-zA-Z$_][0-9a-zA-Z$_]*", "name": "variable.other.constant.object.ts" }, { "comment": "Match object pattern", "begin": "{", "end": "}", "patterns": [{ "include": "source.ts#object-binding-element" }, { "include": "#javascript-expression" }], "captures": { "0": { "name": "punctuation.definition.binding-pattern.object.ts" } } }, { "comment": "Match array pattern", "begin": "\\[", "end": "]", "patterns": [{ "include": "source.ts#array-binding-element" }, { "include": "#javascript-expression" }], "captures": { "0": { "name": "punctuation.definition.binding-pattern.array.ts" } } }, { "comment": "Match type", "begin": "\\s*(:)(?!=)", "end": "(?=[,;\\](]|/>|(?<=[^=])>|(?<!(?:^|[!~*%&^|?:]|[!~*%&^|?/<>+=-]=|=>|>{2,}|[^.]\\.|[^-]-|^\\s*\\+\\+|[^\\+]\\+{2}*\\+|[a-zA-Z0-9%).<\\]}]\\s*/|\\b(?<![.]\\s*)(?:await|async|class|function|keyof|new|typeof|void))\\s*)(?:\\n|[ \\t]+(?![\\n{+!~*%&^|?:]|[<>/=-]=|=>|>{2,}|\\.[^.]|-[^-]|/[^>]|(?:in|instanceof|as|extends)\\s+[^:=/,;>])))", "patterns": [{ "include": "source.ts#type" }, { "include": "#javascript-expression" }], "beginCaptures": { "1": { "name": "keyword.operator.type.annotation.ts" } } }, { "include": "#javascript-expression" } ] }, { "comment": "Parameters for a tag", "contentName": "source.ts", "begin": "\\s*\\|", "end": "\\|", "beginCaptures": { "0": { "name": "punctuation.section.scope.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.section.scope.end.marko" } }, "patterns": [ { "include": "source.ts#comment" }, { "include": "source.ts#string" }, { "include": "source.ts#decorator" }, { "include": "source.ts#destructuring-parameter" }, { "include": "source.ts#parameter-name" }, { "name": "meta.type.annotation.ts", "begin": "(:)", "beginCaptures": { "1": { "name": "keyword.operator.type.annotation.ts" } }, "end": "(?=[,|])|(?==[^>])", "patterns": [{ "include": "source.ts#type" }] }, { "include": "source.ts#variable-initializer" }, { "name": "punctuation.separator.parameter.ts", "match": "," }, { "include": "source.ts" } ] }, { "include": "#html-args-or-method" }, { "include": "#attr-value" } ] }, "tag-html": { "comment": "Matches an HTML tag and its contents", "patterns": [ { "comment": "HTML void elements", "begin": "\\s*(<)(?=(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\\b)", "end": "/?>", "patterns": [{ "include": "#open-tag-content" }], "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } } }, { "comment": "Marko html-comment tag", "begin": "\\s*(<)(?=html-comment\\b)", "end": "/>|(?<=</(?:html-comment)?>)", "patterns": [ { "include": "#open-tag-content" }, { "comment": "Style comment content", "begin": ">", "end": "\\s*(</)(html-comment)?(>)", "patterns": [{ "include": "#content-embedded-comment" }], "beginCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } }, "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" }, "2": { "patterns": [{ "include": "#tag-name" }] }, "3": { "name": "punctuation.definition.tag.end.marko" } } } ], "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } } }, { "comment": "HTML style tag with less", "begin": "\\s*(<)(?=style\\b[^\\s]*\\.less\\b)", "end": "/>|(?<=</(?:style)?>)", "patterns": [ { "include": "#open-tag-content" }, { "comment": "Style body content", "contentName": "source.less", "begin": ">", "end": "\\s*(</)(style)?(>)", "patterns": [{ "include": "#content-embedded-style-less" }], "beginCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } }, "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" }, "2": { "patterns": [{ "include": "#tag-name" }] }, "3": { "name": "punctuation.definition.tag.end.marko" } } } ], "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } } }, { "comment": "HTML style tag with scss", "begin": "\\s*(<)(?=style\\b[^\\s]*\\.scss\\b)", "end": "/>|(?<=</(?:style)?>)", "patterns": [ { "include": "#open-tag-content" }, { "comment": "Style body content", "contentName": "source.scss", "begin": ">", "end": "\\s*(</)(style)?(>)", "patterns": [{ "include": "#content-embedded-style-scss" }], "beginCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } }, "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" }, "2": { "patterns": [{ "include": "#tag-name" }] }, "3": { "name": "punctuation.definition.tag.end.marko" } } } ], "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } } }, { "comment": "HTML style tag with js/ts", "begin": "\\s*(<)(?=style\\b[^\\s]*\\.[tj]s\\b)", "end": "/>|(?<=</(?:style)?>)", "patterns": [ { "include": "#open-tag-content" }, { "comment": "Style body content", "contentName": "source.ts", "begin": ">", "end": "\\s*(</)(style)?(>)", "patterns": [{ "include": "#content-embedded-script" }], "beginCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } }, "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" }, "2": { "patterns": [{ "include": "#tag-name" }] }, "3": { "name": "punctuation.definition.tag.end.marko" } } } ], "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } } }, { "comment": "HTML style tag", "begin": "\\s*(<)(?=style\\b)", "end": "/>|(?<=</(?:style)?>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } }, "patterns": [ { "include": "#open-tag-content" }, { "comment": "Style body content", "contentName": "source.css", "begin": ">", "end": "\\s*(</)(style)?(>)", "patterns": [{ "include": "#content-embedded-style" }], "beginCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } }, "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" }, "2": { "patterns": [{ "include": "#tag-name" }] }, "3": { "name": "punctuation.definition.tag.end.marko" } } } ] }, { "comment": "HTML script tag", "begin": "\\s*(<)(?=script\\b)", "end": "/>|(?<=</(?:script)?>)", "patterns": [ { "include": "#open-tag-content" }, { "comment": "Script body content", "contentName": "source.ts", "begin": ">", "end": "\\s*(</)(script)?(>)", "patterns": [{ "include": "#content-embedded-script" }], "beginCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } }, "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" }, "2": { "patterns": [{ "include": "#tag-name" }] }, "3": { "name": "punctuation.definition.tag.end.marko" } } } ], "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } } }, { "comment": "HTML normal tag", "begin": "\\s*(<)(?=[a-zA-Z0-9_$@.#])", "end": "/>|(?<=</[a-zA-Z0-9_$:@.#-]*>)", "patterns": [ { "include": "#open-tag-content" }, { "comment": "Body content", "begin": ">", "end": "\\s*(</)([a-zA-Z0-9_$:@.#-]+)?(.*?)(>)", "patterns": [{ "include": "#content-html-mode" }], "beginCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } }, "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" }, "2": { "patterns": [{ "include": "#tag-name" }, { "include": "#tag-shorthand-class-or-id" }] }, "3": { "patterns": [{ "include": "#invalid" }] }, "4": { "name": "punctuation.definition.tag.end.marko" } } } ], "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.marko" } }, "endCaptures": { "0": { "name": "punctuation.definition.tag.end.marko" } } } ] }, "tag-type-args": { "comment": "Type args after the tag name", "name": "meta.embedded.ts", "contentName": "source.ts", "begin": "(?=<)", "end": "(?<=>)", "applyEndPatternLast": 1, "patterns": [ { "begin": "(?<=>)(?=[ \t]*<)", "end": "(?=.)", "applyEndPatternLast": 1, "patterns": [{ "include": "#tag-type-params" }] }, { "include": "source.ts#type-arguments" } ] }, "tag-type-params": { "comment": "Type params before tag params or a default shorthand method", "name": "meta.embedded.ts", "contentName": "source.ts", "begin": "(?!^)[ \t]*(?=<)", "end": "(?<=>)", "applyEndPatternLast": 1, "patterns": [{ "include": "source.ts#type-parameters" }] }, "tag-shorthand-class-or-id": { "comment": "Shorthand class or ID attribute", "begin": "(?=[#.])", "end": "$|(?=--|[^a-zA-Z0-9_$#.-])", "patterns": [ { "include": "#javascript-placeholder" }, { "match": "(?:[#.a-zA-Z0-9_-]+|\\$(?!{))+", "name": "entity.other.attribute-name.marko" } ] }, "tag-name": { "comment": "Matches the tag name.", "patterns": [ { "begin": "\\G(style)\\b(\\.[a-zA-Z0-9$_-]+(?:\\.[a-zA-Z0-9$_-]+)*)|([a-zA-Z0-9_@](?:[a-zA-Z0-9_@-]+|:(?!=))*)", "end": "(?=.)", "applyEndPatternLast": 1, "patterns": [{ "include": "#tag-type-args" }], "beginCaptures": { "1": { "name": "support.type.builtin.marko" }, "2": { "name": "storage.type.marko.css" }, "3": { "patterns": [ { "name": "support.type.builtin.marko", "match": "(attrs|style|effect|lifecycle)(?=\\b)(?![-:@])" }, { "name": "keyword.control.flow.marko", "match": "(for|if|while|else-if|else|try|await|return)(?=\\b)(?![-:@])" }, { "name": "support.function.marko", "match": "(macro|tag|async|let|const|context|id|html-comment)(?=\\b)(?![-:@])" }, { "comment": "Attribute tag.", "name": "entity.other.attribute-name.marko", "match": "@.+" }, { "comment": "Native or userland tag.", "name": "entity.name.tag.marko", "match": ".+" } ] } } }, { "begin": "(?=[a-zA-Z0-9$_]|-[^-])", "end": "(?=[^a-zA-Z0-9$_-]|$)", "patterns": [ { "include": "#javascript-placeholder" }, { "match": "(?:[a-zA-Z0-9_-]+|\\$(?!{))+", "name": "entity.name.tag.marko" } ] } ] }, "invalid-close-tag": { "name": "invalid.illegal.character-not-allowed-here.marko", "begin": "\\s*</.*?", "end": ">" } } }