From 17139a34b31a163374a083143418df077074b1e6 Mon Sep 17 00:00:00 2001 From: Anirudh Sanjeev Date: Fri, 15 Dec 2017 08:07:32 +0530 Subject: [PATCH 01/26] Rewrite syntax for Sublime > 3153 (#109) * Initial work on native sublime syntax support * Use older style of embedding scope in syntax highlight * Revert "Use older style of embedding scope in syntax highlight" This reverts commit 3beb4ba2720c6dde33bcc12120b03578b8d6182c. * Fixed syntax issues reported by @z3nz * delete old tmLanguage * add support for other languages * Fixing issues: - changed underscores in names to hyphens - added support for single quote in attribute strings * Rewrite using yaml macros * Fixed issues in regexps * Use different yaml file for html syntax * delete old language yaml file --- HTML.yaml | 480 +++++++ Vue Component.sublime-syntax | 857 +++++++++++++ Vue Component.sublime-syntax.yaml-macros | 398 ++++++ vue.YAML-tmLanguage | 470 ------- vue.tmLanguage | 1470 ---------------------- 5 files changed, 1735 insertions(+), 1940 deletions(-) create mode 100644 HTML.yaml create mode 100644 Vue Component.sublime-syntax create mode 100644 Vue Component.sublime-syntax.yaml-macros delete mode 100644 vue.YAML-tmLanguage delete mode 100644 vue.tmLanguage diff --git a/HTML.yaml b/HTML.yaml new file mode 100644 index 0000000..4121557 --- /dev/null +++ b/HTML.yaml @@ -0,0 +1,480 @@ +%YAML 1.2 +--- +name: HTML +file_extensions: + - html + - htm + - shtml + - xhtml + - inc + - tmpl + - tpl +first_line_match: (?i)<(!DOCTYPE\s*)?html +scope: text.html.basic + +variables: + unquoted_attribute_value: (?:[^\s<>/''"]|/(?!>))+ + not_equals_lookahead: (?=\s*[^\s=]) + +contexts: + immediately-pop: + - match: '' + pop: true + + else-pop: + - match: (?=\S) + pop: true + + main: + - match: (<\?)(xml) + captures: + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.xml.html + push: + - meta_scope: meta.tag.preprocessor.xml.html + - match: '\?>' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-generic-attribute + - include: string-double-quoted + - include: string-single-quoted + - match: )?\s*() + captures: + 0: meta.tag.script.end.html + 1: comment.block.html punctuation.definition.comment.html + 2: punctuation.definition.tag.begin.html + 3: entity.name.tag.script.html + 4: punctuation.definition.tag.end.html + pop: true + - match: '(>)\s*()?\s*)' + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - include: entities + - match: <> + scope: invalid.illegal.incomplete.html + entities-common: + - match: (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;) + scope: constant.character.entity.html + captures: + 1: punctuation.definition.entity.html + 3: punctuation.definition.entity.html + attribute-entities: + - include: entities-common + entities: + - include: entities-common + - match: '&' + scope: invalid.illegal.bad-ampersand.html + string-double-quoted: + - match: '"' + scope: punctuation.definition.string.begin.html + push: + - meta_scope: string.quoted.double.html + - match: '"' + scope: punctuation.definition.string.end.html + pop: true + - include: entities + string-single-quoted: + - match: "'" + scope: punctuation.definition.string.begin.html + push: + - meta_scope: string.quoted.single.html + - match: "'" + scope: punctuation.definition.string.end.html + pop: true + - include: entities + + tag-generic-attribute: + - match: '[a-zA-Z0-9:\-_.]+' + scope: entity.other.attribute-name.html + push: + - tag-generic-attribute-meta + - tag-generic-attribute-equals + + - match: '[a-zA-Z0-9:\-_.]+' + scope: entity.other.attribute-name.html + + tag-generic-attribute-meta: + - meta_scope: meta.attribute-with-value.html + - include: immediately-pop + + tag-generic-attribute-equals: + - match: '=' + scope: punctuation.separator.key-value.html + set: tag-generic-attribute-value + - match: '{{not_equals_lookahead}}' + pop: true + + tag-generic-attribute-value: + - match: '"' + scope: punctuation.definition.string.begin.html + set: + - meta_scope: string.quoted.double.html + - match: '"' + scope: punctuation.definition.string.end.html + pop: true + - include: attribute-entities + - match: "'" + scope: punctuation.definition.string.begin.html + set: + - meta_scope: string.quoted.single.html + - match: "'" + scope: punctuation.definition.string.end.html + pop: true + - include: attribute-entities + - match: '{{unquoted_attribute_value}}' + scope: string.unquoted.html + - include: else-pop + + tag-class-attribute: + - match: '\bclass\b' + scope: entity.other.attribute-name.class.html + push: + - tag-class-attribute-meta + - tag-class-attribute-equals + + tag-class-attribute-meta: + - meta_scope: meta.attribute-with-value.class.html + - include: immediately-pop + + tag-class-attribute-equals: + - match: '=' + scope: punctuation.separator.key-value.html + set: tag-class-attribute-value + - match: '{{not_equals_lookahead}}' + pop: true + + tag-class-attribute-value: + - match: '"' + scope: punctuation.definition.string.begin.html + set: + - meta_scope: string.quoted.double.html + - meta_content_scope: meta.class-name.html + - match: '"' + scope: punctuation.definition.string.end.html + pop: true + - include: attribute-entities + - match: "'" + scope: punctuation.definition.string.begin.html + set: + - meta_scope: string.quoted.single.html + - meta_content_scope: meta.class-name.html + - match: "'" + scope: punctuation.definition.string.end.html + pop: true + - include: attribute-entities + - match: '{{unquoted_attribute_value}}' + scope: string.unquoted.html meta.class-name.html + - include: else-pop + + tag-id-attribute: + - match: '\bid\b' + scope: entity.other.attribute-name.id.html + push: + - tag-id-attribute-meta + - tag-id-attribute-equals + + tag-id-attribute-meta: + - meta_scope: meta.attribute-with-value.id.html + - include: immediately-pop + + tag-id-attribute-equals: + - match: '=' + scope: punctuation.separator.key-value.html + set: tag-id-attribute-value + - match: '{{not_equals_lookahead}}' + pop: true + + tag-id-attribute-value: + - match: '"' + scope: punctuation.definition.string.begin.html + set: + - meta_scope: string.quoted.double.html + - meta_content_scope: meta.toc-list.id.html + - match: '"' + scope: punctuation.definition.string.end.html + pop: true + - include: attribute-entities + - match: "'" + scope: punctuation.definition.string.begin.html + set: + - meta_scope: string.quoted.single.html + - meta_content_scope: meta.toc-list.id.html + - match: "'" + scope: punctuation.definition.string.end.html + pop: true + - include: attribute-entities + - match: '{{unquoted_attribute_value}}' + scope: string.unquoted.html meta.toc-list.id.html + - include: else-pop + + tag-style-attribute: + - match: '\bstyle\b' + scope: entity.other.attribute-name.style.html + push: + - tag-style-attribute-meta + - tag-style-attribute-equals + + tag-style-attribute-meta: + - meta_scope: meta.attribute-with-value.style.html + - include: immediately-pop + + tag-style-attribute-equals: + - match: '=' + scope: punctuation.separator.key-value.html + set: tag-style-attribute-value + - match: '{{not_equals_lookahead}}' + pop: true + + tag-style-attribute-value: + - match: '"' + scope: string.quoted.double punctuation.definition.string.begin.html + embed: scope:source.css#rule-list-body + embed_scope: source.css + escape: '"' + escape_captures: + 0: string.quoted.double punctuation.definition.string.end.html + - match: "'" + scope: string.quoted.single punctuation.definition.string.begin.html + embed: scope:source.css#rule-list-body + embed_scope: source.css + escape: "'" + escape_captures: + 0: string.quoted.single punctuation.definition.string.end.html + - include: else-pop + + tag-event-attribute: + - match: |- + (?x)\bon( + abort|autocomplete|autocompleteerror|blur|cancel|canplay + |canplaythrough|change|click|close|contextmenu|cuechange|dblclick|drag + |dragend|dragenter|dragexit|dragleave|dragover|dragstart|drop + |durationchange|emptied|ended|error|focus|input|invalid|keydown + |keypress|keyup|load|loadeddata|loadedmetadata|loadstart|mousedown + |mouseenter|mouseleave|mousemove|mouseout|mouseover|mouseup|mousewheel + |pause|play|playing|progress|ratechange|reset|resize|scroll|seeked + |seeking|select|show|sort|stalled|submit|suspend|timeupdate|toggle + |volumechange|waiting + )\b + scope: entity.other.attribute-name.event.html + push: + - tag-event-attribute-meta + - tag-event-attribute-equals + + tag-event-attribute-meta: + - meta_scope: meta.attribute-with-value.event.html + - include: immediately-pop + + tag-event-attribute-equals: + - match: '=' + scope: punctuation.separator.key-value.html + set: tag-event-attribute-value + - match: '{{not_equals_lookahead}}' + pop: true + + tag-event-attribute-value: + - match: '"' + scope: string.quoted.double punctuation.definition.string.begin.html + embed: scope:source.js + embed_scope: meta.attribute-with-value.event.html + escape: '"' + escape_captures: + 0: string.quoted.double punctuation.definition.string.end.html + - match: "'" + scope: string.quoted.single punctuation.definition.string.begin.html meta.attribute-with-value.event.html + embed: scope:source.js + embed_scope: meta.attribute-with-value.event.html + escape: "'" + escape_captures: + 0: string.quoted.single punctuation.definition.string.end.html + - include: else-pop + + tag-attributes: + - include: tag-id-attribute + - include: tag-class-attribute + - include: tag-style-attribute + - include: tag-event-attribute + - include: tag-generic-attribute \ No newline at end of file diff --git a/Vue Component.sublime-syntax b/Vue Component.sublime-syntax new file mode 100644 index 0000000..c2309c0 --- /dev/null +++ b/Vue Component.sublime-syntax @@ -0,0 +1,857 @@ +%YAML 1.2 +--- +name: Vue Component +file_extensions: [vue] +first_line_match: (?i)<(!DOCTYPE\s*)?html +scope: text.html.vue +variables: + unquoted_attribute_value: (?:[^\s<>/''"]|/(?!>))+ + not_equals_lookahead: (?=\s*[^\s=]) + +contexts: + immediately-pop: + - match: '' + pop: true + + else-pop: + - match: (?=\S) + pop: true + + main: + - include: langs + - include: template-tag + + - match: (<\?)(xml) + captures: + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.xml.html + push: + - meta_scope: meta.tag.preprocessor.xml.html + - match: \?> + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-generic-attribute + - include: string-double-quoted + - include: string-single-quoted + - match: )?\s*() + captures: + 0: meta.tag.script.end.html + 1: comment.block.html punctuation.definition.comment.html + 2: punctuation.definition.tag.begin.html + 3: entity.name.tag.script.html + 4: punctuation.definition.tag.end.html + pop: true + - match: (>)\s*()?\s*) + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - match: (' + scope: punctuation.definition.tag.end.html + pop: true + - include: tag-attributes + - include: entities + - match: <> + scope: invalid.illegal.incomplete.html + entities-common: + - match: (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;) + scope: constant.character.entity.html + captures: + 1: punctuation.definition.entity.html + 3: punctuation.definition.entity.html + attribute-entities: + - include: entities-common + entities: + - include: entities-common + - match: '&' + scope: invalid.illegal.bad-ampersand.html + string-double-quoted: + - match: '"' + scope: punctuation.definition.string.begin.html + push: + - meta_scope: string.quoted.double.html + - match: '"' + scope: punctuation.definition.string.end.html + pop: true + - include: entities + string-single-quoted: + - match: "'" + scope: punctuation.definition.string.begin.html + push: + - meta_scope: string.quoted.single.html + - match: "'" + scope: punctuation.definition.string.end.html + pop: true + - include: entities + + tag-generic-attribute: + - match: '[a-zA-Z0-9:\-_.]+' + scope: entity.other.attribute-name.html + push: + - tag-generic-attribute-meta + - tag-generic-attribute-equals + + - match: '[a-zA-Z0-9:\-_.]+' + scope: entity.other.attribute-name.html + + tag-generic-attribute-meta: + - meta_scope: meta.attribute-with-value.html + - include: immediately-pop + + tag-generic-attribute-equals: + - match: '=' + scope: punctuation.separator.key-value.html + set: tag-generic-attribute-value + - match: '{{not_equals_lookahead}}' + pop: true + + tag-generic-attribute-value: + - match: '"' + scope: punctuation.definition.string.begin.html + set: + - meta_scope: string.quoted.double.html + - match: '"' + scope: punctuation.definition.string.end.html + pop: true + - include: attribute-entities + - match: "'" + scope: punctuation.definition.string.begin.html + set: + - meta_scope: string.quoted.single.html + - match: "'" + scope: punctuation.definition.string.end.html + pop: true + - include: attribute-entities + - match: '{{unquoted_attribute_value}}' + scope: string.unquoted.html + - include: else-pop + + tag-class-attribute: + - match: \bclass\b + scope: entity.other.attribute-name.class.html + push: + - tag-class-attribute-meta + - tag-class-attribute-equals + + tag-class-attribute-meta: + - meta_scope: meta.attribute-with-value.class.html + - include: immediately-pop + + tag-class-attribute-equals: + - match: '=' + scope: punctuation.separator.key-value.html + set: tag-class-attribute-value + - match: '{{not_equals_lookahead}}' + pop: true + + tag-class-attribute-value: + - match: '"' + scope: punctuation.definition.string.begin.html + set: + - meta_scope: string.quoted.double.html + - meta_content_scope: meta.class-name.html + - match: '"' + scope: punctuation.definition.string.end.html + pop: true + - include: attribute-entities + - match: "'" + scope: punctuation.definition.string.begin.html + set: + - meta_scope: string.quoted.single.html + - meta_content_scope: meta.class-name.html + - match: "'" + scope: punctuation.definition.string.end.html + pop: true + - include: attribute-entities + - match: '{{unquoted_attribute_value}}' + scope: string.unquoted.html meta.class-name.html + - include: else-pop + + tag-id-attribute: + - match: \bid\b + scope: entity.other.attribute-name.id.html + push: + - tag-id-attribute-meta + - tag-id-attribute-equals + + tag-id-attribute-meta: + - meta_scope: meta.attribute-with-value.id.html + - include: immediately-pop + + tag-id-attribute-equals: + - match: '=' + scope: punctuation.separator.key-value.html + set: tag-id-attribute-value + - match: '{{not_equals_lookahead}}' + pop: true + + tag-id-attribute-value: + - match: '"' + scope: punctuation.definition.string.begin.html + set: + - meta_scope: string.quoted.double.html + - meta_content_scope: meta.toc-list.id.html + - match: '"' + scope: punctuation.definition.string.end.html + pop: true + - include: attribute-entities + - match: "'" + scope: punctuation.definition.string.begin.html + set: + - meta_scope: string.quoted.single.html + - meta_content_scope: meta.toc-list.id.html + - match: "'" + scope: punctuation.definition.string.end.html + pop: true + - include: attribute-entities + - match: '{{unquoted_attribute_value}}' + scope: string.unquoted.html meta.toc-list.id.html + - include: else-pop + + tag-style-attribute: + - match: \bstyle\b + scope: entity.other.attribute-name.style.html + push: + - tag-style-attribute-meta + - tag-style-attribute-equals + + tag-style-attribute-meta: + - meta_scope: meta.attribute-with-value.style.html + - include: immediately-pop + + tag-style-attribute-equals: + - match: '=' + scope: punctuation.separator.key-value.html + set: tag-style-attribute-value + - match: '{{not_equals_lookahead}}' + pop: true + + tag-style-attribute-value: + - match: '"' + scope: string.quoted.double punctuation.definition.string.begin.html + embed: scope:source.css#rule-list-body + embed_scope: source.css + escape: '"' + escape_captures: + 0: string.quoted.double punctuation.definition.string.end.html + - match: "'" + scope: string.quoted.single punctuation.definition.string.begin.html + embed: scope:source.css#rule-list-body + embed_scope: source.css + escape: "'" + escape_captures: + 0: string.quoted.single punctuation.definition.string.end.html + - include: else-pop + + tag-event-attribute: + - match: |- + (?x)\bon( + abort|autocomplete|autocompleteerror|blur|cancel|canplay + |canplaythrough|change|click|close|contextmenu|cuechange|dblclick|drag + |dragend|dragenter|dragexit|dragleave|dragover|dragstart|drop + |durationchange|emptied|ended|error|focus|input|invalid|keydown + |keypress|keyup|load|loadeddata|loadedmetadata|loadstart|mousedown + |mouseenter|mouseleave|mousemove|mouseout|mouseover|mouseup|mousewheel + |pause|play|playing|progress|ratechange|reset|resize|scroll|seeked + |seeking|select|show|sort|stalled|submit|suspend|timeupdate|toggle + |volumechange|waiting + )\b + scope: entity.other.attribute-name.event.html + push: + - tag-event-attribute-meta + - tag-event-attribute-equals + + tag-event-attribute-meta: + - meta_scope: meta.attribute-with-value.event.html + - include: immediately-pop + + tag-event-attribute-equals: + - match: '=' + scope: punctuation.separator.key-value.html + set: tag-event-attribute-value + - match: '{{not_equals_lookahead}}' + pop: true + + tag-event-attribute-value: + - match: '"' + scope: string.quoted.double punctuation.definition.string.begin.html + embed: scope:source.js + embed_scope: meta.attribute-with-value.event.html + escape: '"' + escape_captures: + 0: string.quoted.double punctuation.definition.string.end.html + - match: "'" + scope: string.quoted.single punctuation.definition.string.begin.html meta.attribute-with-value.event.html + embed: scope:source.js + embed_scope: meta.attribute-with-value.event.html + escape: "'" + escape_captures: + 0: string.quoted.single punctuation.definition.string.end.html + - include: else-pop + + tag-attributes: + - include: vue-directive + + - include: tag-id-attribute + - include: tag-class-attribute + - include: tag-style-attribute + - include: tag-event-attribute + - include: tag-generic-attribute + template-tag: + - match: (?i)(<)(template)\b + captures: + 0: meta.tag.template.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + push: + - match: (?i)() + captures: + 0: meta.tag.template.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '>' + scope: meta.tag.template.begin.html punctuation.definition.tag.end.html + push: mustache-template + - match: '' + push: + - meta_scope: meta.tag.template.begin.html + - match: (?=>) + pop: true + - include: tag-attributes + + mustache-template: + - match: (?=]*lang=(['"])coffee?) + captures: + 0: meta.tag.script.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + push: + - match: (?i)() + captures: + 0: meta.tag.script.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.script.begin.html punctuation.definition.tag.end.html + embed: scope:source.coffee + escape: (?i)(?=) + pop: true + - include: tag-attributes + - match: (?i)(<)((?:script))\b(?=[^>]*lang=(['"])livescript?) + captures: + 0: meta.tag.script.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + push: + - match: (?i)() + captures: + 0: meta.tag.script.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.script.begin.html punctuation.definition.tag.end.html + embed: scope:source.livescript + escape: (?i)(?=) + pop: true + - include: tag-attributes + - match: (?i)(<)((?:script))\b(?=[^>]*lang=(['"])ts?) + captures: + 0: meta.tag.script.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + push: + - match: (?i)() + captures: + 0: meta.tag.script.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.script.begin.html punctuation.definition.tag.end.html + embed: scope:source.ts + escape: (?i)(?=) + pop: true + - include: tag-attributes + - match: (?i)(<)((?:script))\b(?=[^>]*) + captures: + 0: meta.tag.script.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + push: + - match: (?i)() + captures: + 0: meta.tag.script.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.script.begin.html punctuation.definition.tag.end.html + embed: scope:source.js + escape: (?i)(?=) + pop: true + - include: tag-attributes + - match: (?i)(<)((?:style))\b(?=[^>]*lang=(['"])sass?) + captures: + 0: meta.tag.style.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + push: + - match: (?i)() + captures: + 0: meta.tag.style.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.style.begin.html punctuation.definition.tag.end.html + embed: scope:source.sass + escape: (?i)(?=) + pop: true + - include: tag-attributes + - match: (?i)(<)((?:style))\b(?=[^>]*lang=(['"])scss?) + captures: + 0: meta.tag.style.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + push: + - match: (?i)() + captures: + 0: meta.tag.style.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.style.begin.html punctuation.definition.tag.end.html + embed: scope:source.scss + escape: (?i)(?=) + pop: true + - include: tag-attributes + - match: (?i)(<)((?:style))\b(?=[^>]*lang=(['"])stylus?) + captures: + 0: meta.tag.style.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + push: + - match: (?i)() + captures: + 0: meta.tag.style.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.style.begin.html punctuation.definition.tag.end.html + embed: scope:source.stylus + escape: (?i)(?=) + pop: true + - include: tag-attributes + - match: (?i)(<)((?:style))\b(?=[^>]*lang=(['"])postcss?) + captures: + 0: meta.tag.style.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + push: + - match: (?i)() + captures: + 0: meta.tag.style.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.style.begin.html punctuation.definition.tag.end.html + embed: scope:source.postcss + escape: (?i)(?=) + pop: true + - include: tag-attributes + - match: (?i)(<)((?:style))\b(?=[^>]*lang=(['"])less?) + captures: + 0: meta.tag.style.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + push: + - match: (?i)() + captures: + 0: meta.tag.style.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.style.begin.html punctuation.definition.tag.end.html + embed: scope:source.less + escape: (?i)(?=) + pop: true + - include: tag-attributes + - match: (?i)(<)((?:style))\b(?=[^>]*) + captures: + 0: meta.tag.style.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + push: + - match: (?i)() + captures: + 0: meta.tag.style.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.style.begin.html punctuation.definition.tag.end.html + embed: scope:source.css + escape: (?i)(?=) + pop: true + - include: tag-attributes + - match: (?i)(<)((?:template))\b(?=[^>]*lang=(['"])jade?) + captures: + 0: meta.tag.template.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + push: + - match: (?i)() + captures: + 0: meta.tag.template.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.template.begin.html punctuation.definition.tag.end.html + embed: scope:text.jade + escape: (?i)(?=) + pop: true + - include: tag-attributes + - match: (?i)(<)((?:template))\b(?=[^>]*lang=(['"])pug?) + captures: + 0: meta.tag.template.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + push: + - match: (?i)() + captures: + 0: meta.tag.template.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.template.begin.html punctuation.definition.tag.end.html + embed: scope:text.pug + escape: (?i)(?=) + pop: true + - include: tag-attributes + - match: (?i)(<)((?:template))\b(?=[^>]*lang=(['"])slm?) + captures: + 0: meta.tag.template.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + push: + - match: (?i)() + captures: + 0: meta.tag.template.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + 3: punctuation.definition.tag.end.html + pop: true + - match: (>) + captures: + 1: meta.tag.template.begin.html punctuation.definition.tag.end.html + embed: scope:text.slm + escape: (?i)(?=) + pop: true + - include: tag-attributes +hidden: false diff --git a/Vue Component.sublime-syntax.yaml-macros b/Vue Component.sublime-syntax.yaml-macros new file mode 100644 index 0000000..1dfb9cc --- /dev/null +++ b/Vue Component.sublime-syntax.yaml-macros @@ -0,0 +1,398 @@ +%YAML 1.2 +%TAG ! tag:yaml-macros:YAMLMacros.lib.extend: +--- +!extend +_base: HTML.yaml +name: Vue Component +scope: text.html.vue +hidden: false +file_extensions: [vue] + +contexts: !merge + main: !prepend + - include: langs + - include: template-tag + + tag-attributes: !prepend + - include: vue-directive + + template-tag: + - match: '(?i)(<)(template)\b' + captures: + 0: meta.tag.template.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + push: + - match: (?i)() + captures: + 0: meta.tag.template.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '>' + scope: meta.tag.template.begin.html punctuation.definition.tag.end.html + push: mustache-template + - match: '' + push: + - meta_scope: meta.tag.template.begin.html + - match: '(?=>)' + pop: true + - include: tag-attributes + + mustache-template: + - match: (?=]*lang=(['"])coffee?) + captures: + 0: meta.tag.script.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + push: + - match: (?i)() + captures: + 0: meta.tag.script.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.script.begin.html punctuation.definition.tag.end.html + embed: scope:source.coffee + escape: (?i)(?=)' + pop: true + - include: tag-attributes + - match: (?i)(<)((?:script))\b(?=[^>]*lang=(['"])livescript?) + captures: + 0: meta.tag.script.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + push: + - match: (?i)() + captures: + 0: meta.tag.script.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.script.begin.html punctuation.definition.tag.end.html + embed: scope:source.livescript + escape: (?i)(?=)' + pop: true + - include: tag-attributes + - match: (?i)(<)((?:script))\b(?=[^>]*lang=(['"])ts?) + captures: + 0: meta.tag.script.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + push: + - match: (?i)() + captures: + 0: meta.tag.script.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.script.begin.html punctuation.definition.tag.end.html + embed: scope:source.ts + escape: (?i)(?=)' + pop: true + - include: tag-attributes + - match: (?i)(<)((?:script))\b(?=[^>]*) + captures: + 0: meta.tag.script.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + push: + - match: (?i)() + captures: + 0: meta.tag.script.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.script.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.script.begin.html punctuation.definition.tag.end.html + embed: scope:source.js + escape: (?i)(?=)' + pop: true + - include: tag-attributes + - match: (?i)(<)((?:style))\b(?=[^>]*lang=(['"])sass?) + captures: + 0: meta.tag.style.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + push: + - match: (?i)() + captures: + 0: meta.tag.style.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.style.begin.html punctuation.definition.tag.end.html + embed: scope:source.sass + escape: (?i)(?=)' + pop: true + - include: tag-attributes + - match: (?i)(<)((?:style))\b(?=[^>]*lang=(['"])scss?) + captures: + 0: meta.tag.style.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + push: + - match: (?i)() + captures: + 0: meta.tag.style.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.style.begin.html punctuation.definition.tag.end.html + embed: scope:source.scss + escape: (?i)(?=)' + pop: true + - include: tag-attributes + - match: (?i)(<)((?:style))\b(?=[^>]*lang=(['"])stylus?) + captures: + 0: meta.tag.style.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + push: + - match: (?i)() + captures: + 0: meta.tag.style.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.style.begin.html punctuation.definition.tag.end.html + embed: scope:source.stylus + escape: (?i)(?=)' + pop: true + - include: tag-attributes + - match: (?i)(<)((?:style))\b(?=[^>]*lang=(['"])postcss?) + captures: + 0: meta.tag.style.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + push: + - match: (?i)() + captures: + 0: meta.tag.style.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.style.begin.html punctuation.definition.tag.end.html + embed: scope:source.postcss + escape: (?i)(?=)' + pop: true + - include: tag-attributes + - match: (?i)(<)((?:style))\b(?=[^>]*lang=(['"])less?) + captures: + 0: meta.tag.style.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + push: + - match: (?i)() + captures: + 0: meta.tag.style.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.style.begin.html punctuation.definition.tag.end.html + embed: scope:source.less + escape: (?i)(?=)' + pop: true + - include: tag-attributes + - match: (?i)(<)((?:style))\b(?=[^>]*) + captures: + 0: meta.tag.style.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + push: + - match: (?i)() + captures: + 0: meta.tag.style.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.style.begin.html punctuation.definition.tag.end.html + embed: scope:source.css + escape: (?i)(?=)' + pop: true + - include: tag-attributes + - match: (?i)(<)((?:template))\b(?=[^>]*lang=(['"])jade?) + captures: + 0: meta.tag.template.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + push: + - match: (?i)() + captures: + 0: meta.tag.template.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.template.begin.html punctuation.definition.tag.end.html + embed: scope:text.jade + escape: (?i)(?=)' + pop: true + - include: tag-attributes + - match: (?i)(<)((?:template))\b(?=[^>]*lang=(['"])pug?) + captures: + 0: meta.tag.template.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + push: + - match: (?i)() + captures: + 0: meta.tag.template.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.template.begin.html punctuation.definition.tag.end.html + embed: scope:text.pug + escape: (?i)(?=)' + pop: true + - include: tag-attributes + - match: (?i)(<)((?:template))\b(?=[^>]*lang=(['"])slm?) + captures: + 0: meta.tag.template.begin.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + push: + - match: (?i)() + captures: + 0: meta.tag.template.end.html + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.template.html + 3: punctuation.definition.tag.end.html + pop: true + - match: '(>)' + captures: + 1: meta.tag.template.begin.html punctuation.definition.tag.end.html + embed: scope:text.slm + escape: (?i)(?=)' + pop: true + - include: tag-attributes + \ No newline at end of file diff --git a/vue.YAML-tmLanguage b/vue.YAML-tmLanguage deleted file mode 100644 index 7582aef..0000000 --- a/vue.YAML-tmLanguage +++ /dev/null @@ -1,470 +0,0 @@ -# [PackageDev] target_format: plist, ext: tmLanguage ---- -name: Vue Component -scopeName: text.html.vue -fileTypes: [vue] -uuid: 5512c10d-4cc5-434c-b8fc-53b912f55ab3 - -patterns: -- include: '#vue-interpolations' - -- name: meta.tag.any.html - begin: (<)([a-zA-Z0-9:-]++)(?=[^>]*>) - beginCaptures: - '1': {name: punctuation.definition.tag.begin.html} - '2': {name: entity.name.tag.html} - end: (>)(<)(/)(\2)(>) - endCaptures: - '1': {name: punctuation.definition.tag.end.html} - '2': {name: punctuation.definition.tag.begin.html meta.scope.between-tag-pair.html} - '3': {name: punctuation.definition.tag.begin.html} - '4': {name: entity.name.tag.html} - '5': {name: punctuation.definition.tag.end.html} - patterns: - - include: '#tag-stuff' - -- name: meta.tag.preprocessor.xml.html - begin: (<\?)(xml) - end: (\?>) - captures: - '1': {name: punctuation.definition.tag.html} - '2': {name: entity.name.tag.xml.html} - patterns: - - include: '#tag-generic-attribute' - - include: '#string-double-quoted' - - include: '#string-single-quoted' - -- name: comment.block.html - begin: )$ - |<\?(?:php)?.*\b(if|for(each)?|while)\b.+: - |\{\{?(if|foreach|capture|literal|foreach|php|section|strip) - |\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/))) - ) - -foldingStopMarker: |- - (?x) - ( - |^(?!.*?$ - |<\?(?:php)?.*\bend(if|for(each)?|while)\b - |\{\{?/(if|foreach|capture|literal|foreach|php|section|strip) - |^[^{]*\} - ) - -keyEquivalent: ^~H diff --git a/vue.tmLanguage b/vue.tmLanguage deleted file mode 100644 index b8f67f4..0000000 --- a/vue.tmLanguage +++ /dev/null @@ -1,1470 +0,0 @@ - - - - - fileTypes - - vue - - foldingStartMarker - (?x) -(<(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|li|form|dl)\b.*?> -|<!--(?!.*--\s*>) -|^<!--\ \#tminclude\ (?>.*?-->)$ -|<\?(?:php)?.*\b(if|for(each)?|while)\b.+: -|\{\{?(if|foreach|capture|literal|foreach|php|section|strip) -|\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/))) -) - foldingStopMarker - (?x) -(</(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|li|form|dl)> -|^(?!.*?<!--).*?--\s*> -|^<!--\ end\ tminclude\ -->$ -|<\?(?:php)?.*\bend(if|for(each)?|while)\b -|\{\{?/(if|foreach|capture|literal|foreach|php|section|strip) -|^[^{]*\} -) - keyEquivalent - ^~H - name - Vue Component - patterns - - - include - #vue-interpolations - - - begin - (<)([a-zA-Z0-9:-]++)(?=[^>]*></\2>) - beginCaptures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.html - - - end - (>)(<)(/)(\2)(>) - endCaptures - - 1 - - name - punctuation.definition.tag.end.html - - 2 - - name - punctuation.definition.tag.begin.html meta.scope.between-tag-pair.html - - 3 - - name - punctuation.definition.tag.begin.html - - 4 - - name - entity.name.tag.html - - 5 - - name - punctuation.definition.tag.end.html - - - name - meta.tag.any.html - patterns - - - include - #tag-stuff - - - - - begin - (<\?)(xml) - captures - - 1 - - name - punctuation.definition.tag.html - - 2 - - name - entity.name.tag.xml.html - - - end - (\?>) - name - meta.tag.preprocessor.xml.html - patterns - - - include - #tag-generic-attribute - - - include - #string-double-quoted - - - include - #string-single-quoted - - - - - begin - <!-- - captures - - 0 - - name - punctuation.definition.comment.html - - - end - --\s*> - name - comment.block.html - patterns - - - match - -- - name - invalid.illegal.bad-comments-or-CDATA.html - - - - - begin - <! - captures - - 0 - - name - punctuation.definition.tag.html - - - end - > - name - meta.tag.sgml.html - patterns - - - begin - (?i:DOCTYPE) - captures - - 1 - - name - entity.name.tag.doctype.html - - - end - (?=>) - name - meta.tag.sgml.doctype.html - patterns - - - match - "[^">]*" - name - string.quoted.double.doctype.identifiers-and-DTDs.html - - - - - begin - \[CDATA\[ - end - ]](?=>) - name - constant.other.inline-data.html - - - match - (\s*)(?!--|>)\S(\s*) - name - invalid.illegal.bad-comments-or-CDATA.html - - - - - begin - (?:^\s+)?(<)((?i:template))\b(?=[^>]*lang=(['"])slm\1?) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.style.html - - 3 - - name - punctuation.definition.tag.html - - - end - (</)((?i:template))(>)(?:\s*\n)? - name - text.slm.embedded.html - patterns - - - include - #tag-stuff - - - begin - (>) - beginCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - end - (?=</(?i:template)) - patterns - - - include - text.slm - - - - - - - begin - (?:^\s+)?(<)((?i:template))\b(?=[^>]*lang=(['"])jade\1?) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.style.html - - 3 - - name - punctuation.definition.tag.html - - - end - (</)((?i:template))(>)(?:\s*\n)? - name - text.jade.embedded.html - patterns - - - include - #tag-stuff - - - begin - (>) - beginCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - end - (?=</(?i:template)) - patterns - - - include - text.jade - - - - - - - begin - (?:^\s+)?(<)((?i:template))\b(?=[^>]*lang=(['"])pug\1?) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.style.html - - 3 - - name - punctuation.definition.tag.html - - - end - (</)((?i:template))(>)(?:\s*\n)? - name - text.pug.embedded.html - patterns - - - include - #tag-stuff - - - begin - (>) - beginCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - end - (?=</(?i:template)) - patterns - - - include - text.pug - - - - - - - begin - (?:^\s+)?(<)((?i:style))\b(?=[^>]*lang=(['"])stylus\1?) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.style.html - - 3 - - name - punctuation.definition.tag.html - - - end - (</)((?i:style))(>)(?:\s*\n)? - name - source.stylus.embedded.html - patterns - - - include - #tag-stuff - - - begin - (>) - beginCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - end - (?=</(?i:style)) - patterns - - - include - source.stylus - - - - - - - begin - (?:^\s+)?(<)((?i:style))\b(?=[^>]*lang=(['"])postcss\1?) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.style.html - - 3 - - name - punctuation.definition.tag.html - - - end - (</)((?i:style))(>)(?:\s*\n)? - name - source.postcss.embedded.html - patterns - - - include - #tag-stuff - - - begin - (>) - beginCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - end - (?=</(?i:style)) - patterns - - - include - source.postcss - - - - - - - begin - (?:^\s+)?(<)((?i:style))\b(?=[^>]*lang=(['"])sass\1?) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.style.html - - 3 - - name - punctuation.definition.tag.html - - - end - (</)((?i:style))(>)(?:\s*\n)? - name - source.sass.embedded.html - patterns - - - include - #tag-stuff - - - begin - (>) - beginCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - end - (?=</(?i:style)) - patterns - - - include - source.sass - - - include - source.scss - - - - - - - begin - (?:^\s+)?(<)((?i:style))\b(?=[^>]*lang=(['"])scss\1?) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.style.html - - 3 - - name - punctuation.definition.tag.html - - - end - (</)((?i:style))(>)(?:\s*\n)? - name - source.scss.embedded.html - patterns - - - include - #tag-stuff - - - begin - (>) - beginCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - end - (?=</(?i:style)) - patterns - - - include - source.sass - - - include - source.scss - - - - - - - begin - (?:^\s+)?(<)((?i:style))\b(?=[^>]*lang=(['"])less\1?) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.style.html - - 3 - - name - punctuation.definition.tag.html - - - end - (</)((?i:style))(>)(?:\s*\n)? - name - source.less.embedded.html - patterns - - - include - #tag-stuff - - - begin - (>) - beginCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - end - (?=</(?i:style)) - patterns - - - include - source.less - - - - - - - begin - (?:^\s+)?(<)((?i:style))\b(?![^>]*/>) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.style.html - - 3 - - name - punctuation.definition.tag.html - - - end - (</)((?i:style))(>)(?:\s*\n)? - name - source.css.embedded.html - patterns - - - include - #tag-stuff - - - begin - (>) - beginCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - end - (?=</(?i:style)) - patterns - - - include - source.css - - - - - - - begin - (?:^\s+)?(<)((?i:script))\b(?=[^>]*lang=(['"])coffee\1?) - beginCaptures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.script.html - - - end - (?<=</(script|SCRIPT))(>)(?:\s*\n)? - endCaptures - - 2 - - name - punctuation.definition.tag.html - - - name - source.coffee.embedded.html - patterns - - - include - #tag-stuff - - - begin - (?<!</(?:script|SCRIPT))(>) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.script.html - - - end - (</)((?i:script)) - patterns - - - include - source.coffee - - - - - - - begin - (?:^\s+)?(<)((?i:script))\b(?=[^>]*lang=(['"])livescript\1?) - beginCaptures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.script.html - - - end - (?<=</(script|SCRIPT))(>)(?:\s*\n)? - endCaptures - - 2 - - name - punctuation.definition.tag.html - - - name - source.livescript.embedded.html - patterns - - - include - #tag-stuff - - - begin - (?<!</(?:script|SCRIPT))(>) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.script.html - - - end - (</)((?i:script)) - patterns - - - include - source.livescript - - - - - - - begin - (<)((?i:script))\b(?![^>]*/>)(?![^>]*(?i:type.?=.?text/((?!javascript|babel|ecmascript).*))) - beginCaptures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.script.html - - - end - (?<=</(script|SCRIPT))(>)(?:\s*\n)? - endCaptures - - 2 - - name - punctuation.definition.tag.html - - - name - source.js.embedded.html - patterns - - - include - #tag-stuff - - - begin - (?<!</(?:script|SCRIPT))(>) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.script.html - - - end - (</)((?i:script)) - patterns - - - captures - - 1 - - name - punctuation.definition.comment.js - - - match - (//).*?((?=</script)|$\n?) - name - comment.line.double-slash.js - - - begin - /\* - captures - - 0 - - name - punctuation.definition.comment.js - - - end - \*/|(?=</script) - name - comment.block.js - - - include - source.js - - - - - - - begin - (</?)((?i:body|head|html)\b) - captures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.structure.any.html - - - end - (>) - endCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - name - meta.tag.structure.any.html - patterns - - - include - #tag-stuff - - - - - begin - (</?)((?i:address|blockquote|dd|div|dl|dt|fieldset|form|frame|frameset|h1|h2|h3|h4|h5|h6|iframe|noframes|object|ol|p|ul|applet|center|dir|hr|menu|pre)\b) - beginCaptures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.block.any.html - - - end - (>) - endCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - name - meta.tag.block.any.html - patterns - - - include - #tag-stuff - - - - - begin - (</?)((?i:a|abbr|acronym|area|b|base|basefont|bdo|big|br|button|caption|cite|code|col|colgroup|del|dfn|em|font|head|html|i|img|input|ins|isindex|kbd|label|legend|li|link|map|meta|noscript|optgroup|option|param|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var)\b) - beginCaptures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.inline.any.html - - - end - ((?: ?/)?>) - endCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - name - meta.tag.inline.any.html - patterns - - - include - #tag-stuff - - - - - begin - (</?)([a-zA-Z0-9:-]+) - beginCaptures - - 1 - - name - punctuation.definition.tag.begin.html - - 2 - - name - entity.name.tag.other.html - - - end - (>) - endCaptures - - 1 - - name - punctuation.definition.tag.end.html - - - name - meta.tag.other.html - patterns - - - include - #tag-stuff - - - - - include - #entities - - - match - <> - name - invalid.illegal.incomplete.html - - - match - < - name - invalid.illegal.bad-angle-bracket.html - - - repository - - entities - - patterns - - - captures - - 1 - - name - punctuation.definition.entity.html - - 3 - - name - punctuation.definition.entity.html - - - match - (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;) - name - constant.character.entity.html - - - match - & - name - invalid.illegal.bad-ampersand.html - - - - string-double-quoted - - begin - " - beginCaptures - - 0 - - name - punctuation.definition.string.begin.html - - - end - " - endCaptures - - 0 - - name - punctuation.definition.string.end.html - - - name - string.quoted.double.html - patterns - - - include - #vue-interpolations - - - include - #entities - - - - string-single-quoted - - begin - ' - beginCaptures - - 0 - - name - punctuation.definition.string.begin.html - - - end - ' - endCaptures - - 0 - - name - punctuation.definition.string.end.html - - - name - string.quoted.single.html - patterns - - - include - #vue-interpolations - - - include - #entities - - - - tag-generic-attribute - - match - \b([a-zA-Z\-:]+) - name - entity.other.attribute-name.html - - tag-id-attribute - - begin - \b(id)\b\s*(=) - captures - - 1 - - name - entity.other.attribute-name.id.html - - 2 - - name - punctuation.separator.key-value.html - - - end - (?<='|") - name - meta.attribute-with-value.id.html - patterns - - - begin - " - beginCaptures - - 0 - - name - punctuation.definition.string.begin.html - - - contentName - meta.toc-list.id.html - end - " - endCaptures - - 0 - - name - punctuation.definition.string.end.html - - - name - string.quoted.double.html - patterns - - - include - #vue-interpolations - - - include - #entities - - - - - begin - ' - beginCaptures - - 0 - - name - punctuation.definition.string.begin.html - - - contentName - meta.toc-list.id.html - end - ' - endCaptures - - 0 - - name - punctuation.definition.string.end.html - - - name - string.quoted.single.html - patterns - - - include - #vue-interpolations - - - include - #entities - - - - - - tag-stuff - - patterns - - - include - #vue-directives - - - include - #tag-id-attribute - - - include - #tag-generic-attribute - - - include - #string-double-quoted - - - include - #string-single-quoted - - - - vue-directives - - begin - (?:\b(v-)|(:|@))([a-zA-Z\-]+)(?:\:([a-zA-Z\-]+))?(?:\.([a-zA-Z\-]+))*\s*(=) - captures - - 1 - - name - entity.other.attribute-name.html - - 2 - - name - punctuation.separator.key-value.html - - 3 - - name - entity.other.attribute-name.html - - 4 - - name - entity.other.attribute-name.html - - 5 - - name - entity.other.attribute-name.html - - 6 - - name - punctuation.separator.key-value.html - - - end - (?<='|") - name - meta.directive.vue - patterns - - - begin - " - beginCaptures - - 0 - - name - punctuation.definition.string.begin.html - - - end - " - endCaptures - - 0 - - name - punctuation.definition.string.end.html - - - name - source.directive.vue - patterns - - - include - source.js - - - - - begin - ' - beginCaptures - - 0 - - name - punctuation.definition.string.begin.html - - - end - ' - endCaptures - - 0 - - name - punctuation.definition.string.end.html - - - name - source.directive.vue - patterns - - - include - source.js - - - - - - vue-interpolations - - patterns - - - begin - \{\{\{? - beginCaptures - - 0 - - name - punctuation.definition.generic.begin.html - - - end - \}\}\}? - endCaptures - - 0 - - name - punctuation.definition.generic.end.html - - - name - expression.embbeded.vue - patterns - - - include - source.js - - - - - - - scopeName - text.html.vue - uuid - 5512c10d-4cc5-434c-b8fc-53b912f55ab3 - - From 5090eb647f50538efc9016cfd3d9ef4238209aef Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 15 Dec 2017 10:38:43 -0500 Subject: [PATCH 02/26] fix: embed lang="scss" as source.sass as well --- Vue Component.sublime-syntax | 3 ++- Vue Component.sublime-syntax.yaml-macros | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Vue Component.sublime-syntax b/Vue Component.sublime-syntax index c2309c0..f18e13a 100644 --- a/Vue Component.sublime-syntax +++ b/Vue Component.sublime-syntax @@ -678,7 +678,7 @@ contexts: - match: (>) captures: 1: meta.tag.style.begin.html punctuation.definition.tag.end.html - embed: scope:source.scss + embed: scope:source.sass escape: (?i)(?=) pop: true - include: tag-attributes + hidden: false diff --git a/Vue Component.sublime-syntax.yaml-macros b/Vue Component.sublime-syntax.yaml-macros index 1dfb9cc..c8c6a09 100644 --- a/Vue Component.sublime-syntax.yaml-macros +++ b/Vue Component.sublime-syntax.yaml-macros @@ -219,7 +219,7 @@ contexts: !merge - match: '(>)' captures: 1: meta.tag.style.begin.html punctuation.definition.tag.end.html - embed: scope:source.scss + embed: scope:source.sass escape: (?i)(?=)' pop: true - include: tag-attributes - \ No newline at end of file + From e9799bfc32f794c6efa65464e496b726e8e93387 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 15 Dec 2017 10:39:06 -0500 Subject: [PATCH 03/26] edit samples --- samples/arrow.vue | 3 +-- samples/jsx.vue | 9 +++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 samples/jsx.vue diff --git a/samples/arrow.vue b/samples/arrow.vue index 29d0a6b..4ff74cb 100644 --- a/samples/arrow.vue +++ b/samples/arrow.vue @@ -1,6 +1,5 @@