diff --git a/.python-version b/.python-version
new file mode 100644
index 0000000..98fccd6
--- /dev/null
+++ b/.python-version
@@ -0,0 +1 @@
+3.8
\ No newline at end of file
diff --git a/README.md b/README.md
index e49c74e..efde56a 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,36 @@
# Vue Syntax Highlight
+**Note**: the `st4` branch hosts the new syntax that only works in Sublime build > 4107.
+
+* For Sublime Text 2 support (`.tmlanguage` files), see `master` branch.
+* For Sublime Text 3 support, see `new` branch.
+
Sublime Text Syntax highlighting for single-file [Vue.js](http://vuejs.org) components (enabled by [vue-loader](https://github.com/vuejs/vue-loader) or [vueify](https://github.com/vuejs/vueify)).
-
+
diff --git a/samples/basic.vue b/samples/basic.vue
index d192aa0..3c7d521 100644
--- a/samples/basic.vue
+++ b/samples/basic.vue
@@ -12,7 +12,8 @@ Things to verify:
+ @click="onClick('hello')"
+ @click.prevent="onClick('hello')">
Hello
diff --git a/samples/jsx.vue b/samples/jsx.vue
new file mode 100644
index 0000000..6a17d73
--- /dev/null
+++ b/samples/jsx.vue
@@ -0,0 +1,9 @@
+
+
+
diff --git a/samples/langs.vue b/samples/langs.vue
index bb6d2bc..ebfbb52 100644
--- a/samples/langs.vue
+++ b/samples/langs.vue
@@ -14,6 +14,20 @@ body
color primary-color
+
+
+
+
div.app
h1.title This is the app
diff --git a/samples/screenshot.png b/samples/screenshot.png
new file mode 100644
index 0000000..a86bcde
Binary files /dev/null and b/samples/screenshot.png differ
diff --git a/src/macros.py b/src/macros.py
new file mode 100644
index 0000000..9884d5a
--- /dev/null
+++ b/src/macros.py
@@ -0,0 +1,45 @@
+from YAMLMacros.lib.syntax import rule as _rule
+
+def script_language(match, embed):
+ return embed_language_in_tag('script', match, embed)
+
+def style_language(match, embed):
+ return embed_language_in_tag('style', match, embed)
+
+def template_language(match, embed):
+ return embed_language_in_tag('template', match, embed)
+
+def embed_language_in_tag(tag, match, embed):
+ return _rule(
+ match=r'(?i)(?={0}{{{{unquoted_attribute_break}}}}|\'{0}\'|"{0}")'.format(match),
+ set=[
+ [
+ _rule(meta_scope='meta.tag.%s.begin.html' % tag),
+ _rule(
+ match='>',
+ scope='punctuation.definition.tag.end.html',
+ set=[
+ _rule(
+ match=r'{{%s_content_begin}}' % tag,
+ captures={
+ 1: 'comment.block.html punctuation.definition.comment.begin.html',
+ },
+ pop=1,
+ embed=('scope:%s' % embed),
+ embed_scope=('%s.embedded.html' % embed),
+ escape='{{%s_content_end}}' % tag,
+ escape_captures={
+ 1: ('%s.embedded.html' % embed),
+ 2: 'comment.block.html punctuation.definition.comment.end.html',
+ 3: ('%s.embedded.html' % embed),
+ 4: 'comment.block.html punctuation.definition.comment.end.html',
+ },
+ )
+ ]
+ ),
+ _rule(include='%s-common' % tag),
+ ],
+ 'tag-generic-attribute-meta',
+ 'tag-generic-attribute-value',
+ ]
+ )
diff --git a/tests/syntax_test_script.vue b/tests/syntax_test_script.vue
new file mode 100644
index 0000000..190fc8b
--- /dev/null
+++ b/tests/syntax_test_script.vue
@@ -0,0 +1,208 @@
+// SYNTAX TEST "Vue Component.sublime-syntax"
+
+
+// ^^^^^^^^^ meta.tag.script.end.html
+
+
+// ^^^^^^^^ meta.tag - source
+// ^^^^^^^^^^^^ source.js.embedded.html - meta.tag
+// ^^^^^^^^^ meta.tag - source
+
+
+// ^^^^^^^^ meta.tag - source
+// ^^^^^^^^^^^^ source.js.embedded.html - meta.tag
+// ^^^^ - meta.tag - source
+// ^^^ comment.block.html punctuation.definition.comment.end.html
+// ^^^^^^^^^ meta.tag - source
+
+
+// ^^^^^^^^ meta.tag - source
+// ^^^^^ - meta.tag - source
+// ^^^^^^^^^^^^ source.js.embedded.html - meta.tag
+// ^^^^^^^^^ meta.tag - source
+// ^^^^ punctuation.definition.comment.begin.html
+
+
+// ^^^^^^^^ meta.tag - source
+// ^^^^^ - meta.tag - source
+// ^^^^ punctuation.definition.comment.begin.html
+// ^^^^^^^^^^^^ source.js.embedded.html - meta.tag
+// ^^^^ - meta.tag - source
+// ^^^ comment.block.html punctuation.definition.comment.end.html
+// ^^^^^^^^^ meta.tag - source
+
+
+
+// <- source.js.embedded.html - source source
+// ^ source.js.embedded.html - source source
+// ^^^^^^^^^ meta.tag - source
+
+
+
+// ^^^^^^^^^ meta.tag - source
+
+
+
+// ^ source.js.embedded.html - source source
+// ^^^^^^^^^^^^^^ - source
+// ^ - meta.tag - comment
+// ^^^^^^^^^ meta.tag
+// ^ - meta.tag
+// ^^^ comment.block.html punctuation.definition.comment.end.html
+// ^^ punctuation.definition.tag.begin.html
+// ^^^^^^ entity.name.tag
+// ^ punctuation.definition.tag.end.html
+
+
+
+// ^ source.js.embedded.html - source source
+// ^^^^^^^^^^^^^^ - source
+// ^ - meta.tag - comment
+// ^^^^^^^^^ meta.tag
+// ^ - meta.tag
+// ^^^ comment.block.html punctuation.definition.comment.end.html
+// ^^ punctuation.definition.tag.begin.html
+// ^^^^^^ entity.name.tag
+// ^ punctuation.definition.tag.end.html
+
+
+
+// <- source.js.embedded.html - source source
+// ^ source.js.embedded.html - source source
+// ^^^^^^^^^ meta.tag - source
+
+
+
+// ^^^^^^^^^^^^^^^^^^^^^^ meta.tag - meta.tag meta.tag - source
+// ^^^^^^^^^^^^^ meta.attribute-with-value.html - meta.attribute-with-value meta.attribute-with-value
+// ^^ source.coffee.embedded.html - meta.tag
+// ^^^^^^^^^ meta.tag - source
+
+
+// <- source.coffee.embedded.html - source source
+//^^ source.coffee.embedded.html - source source
+// ^^^^^^^^^ meta.tag - source
+
+
+// <- - source - comment - meta.tag
+//^^ - source - comment - meta.tag
+// ^^^^^^^^^ meta.tag - source
+
+
+
+// <- source.livescript.embedded.html - source source
+//^^ source.livescript.embedded.html - source source
+// ^^^^^^^^^ meta.tag - source
+
+
+// <- - source - comment - meta.tag
+//^^ - source - comment - meta.tag
+// ^^^^^^^^^ meta.tag - source
+
+
+
+// <- source.ts.embedded.html - source source
+//^^ source.ts.embedded.html - source source
+// ^^^^^^^^^ meta.tag - source
+
+
+// <- - source - comment - meta.tag
+//^^ - source - comment - meta.tag
+// ^^^^^^^^^ meta.tag - source
diff --git a/tests/syntax_test_style.vue b/tests/syntax_test_style.vue
new file mode 100644
index 0000000..55d19c0
--- /dev/null
+++ b/tests/syntax_test_style.vue
@@ -0,0 +1,249 @@
+// SYNTAX TEST "Vue Component.sublime-syntax"
+
+
+// ^^^^^^^^ meta.tag.style.end.html
+
+
+// ^^^^^^^ meta.tag - source
+// ^^^^^^^ source.css.embedded.html - meta.tag
+// ^^^^^^^^ meta.tag - source
+
+
+// ^^^^^^^ meta.tag - source
+// ^^^^^^^ source.css.embedded.html - meta.tag
+// ^^^^ - meta.tag - source
+// ^^^ comment.block.html punctuation.definition.comment.end.html
+// ^^^^^^^^ meta.tag - source
+
+
+// ^^^^^^^ meta.tag - source
+// ^^^^^ - meta.tag - source
+// ^^^^^^^ source.css.embedded.html - meta.tag
+// ^^^^^^^^ meta.tag - source
+// ^^^^ punctuation.definition.comment.begin.html
+
+
+// ^^^^^^^ meta.tag - source
+// ^^^^^ - meta.tag - source
+// ^^^^ punctuation.definition.comment.begin.html
+// ^^^^^^^ source.css.embedded.html - meta.tag
+// ^^^^ - meta.tag - source
+// ^^^ comment.block.html punctuation.definition.comment.end.html
+// ^^^^^^^^ meta.tag - source
+
+
+
+// <- source.css.embedded.html - source source
+// ^ source.css.embedded.html - source source
+// ^^^^^^^^ meta.tag - source
+
+
+
+// ^^^^^^^^ meta.tag - source
+
+
+
+// ^ source.css.embedded.html - source source
+// ^^^^^^^^^^^^^ - source
+// ^ - meta.tag - comment
+// ^^^^^^^^ meta.tag
+// ^ - meta.tag
+// ^^^ comment.block.html punctuation.definition.comment.end.html
+// ^^ punctuation.definition.tag.begin.html
+// ^^^^^ entity.name.tag
+// ^ punctuation.definition.tag.end.html
+
+
+
+// ^ source.css.embedded.html - source source
+// ^^^^^^^^^^^^^ - source
+// ^ - meta.tag - comment
+// ^^^^^^^^ meta.tag
+// ^ - meta.tag
+// ^^^ comment.block.html punctuation.definition.comment.end.html
+// ^^ punctuation.definition.tag.begin.html
+// ^^^^^ entity.name.tag
+// ^ punctuation.definition.tag.end.html
+
+
+
+// <- source.css.embedded.html - source source
+// ^ source.css.embedded.html - source source
+// ^^^^^^^^ meta.tag - source
+
+
+
+// ^^^^^^^^^^^^^^^^^^^ meta.tag - source
+// ^^^^^^^^^^^ meta.attribute-with-value.html - meta.attribute-with-value meta.attribute-with-value
+// ^^ source.less.embedded.html - meta.tag
+// ^^^^^^^^ meta.tag - source
+
+
+
+// <- source.less.embedded.html - source source
+//^^ source.less.embedded.html - source source
+// ^^^^^^^^ meta.tag - source
+
+
+// <- - source - comment - meta.tag
+//^^ - source - comment - meta.tag
+// ^^^^^^^^ meta.tag - source
+
+
+
+// <- source.postcss.embedded.html - source source
+//^^ source.postcss.embedded.html - source source
+// ^^^^^^^^ meta.tag - source
+
+
+// <- - source - comment - meta.tag
+//^^ - source - comment - meta.tag
+// ^^^^^^^^ meta.tag - source
+
+
+
+// <- source.sss.embedded.html - source source
+//^^ source.sss.embedded.html - source source
+// ^^^^^^^^ meta.tag - source
+
+
+// <- - source - comment - meta.tag
+//^^ - source - comment - meta.tag
+// ^^^^^^^^ meta.tag - source
+
+
+
+// <- source.sass.embedded.html - source source
+//^^ source.sass.embedded.html - source source
+// ^^^^^^^^ meta.tag - source
+
+
+// <- - source - comment - meta.tag
+//^^ - source - comment - meta.tag
+// ^^^^^^^^ meta.tag - source
+
+
+
+// <- source.scss.embedded.html - source source
+//^^ source.scss.embedded.html - source source
+// ^^^^^^^^ meta.tag - source
+
+
+// <- - source - comment - meta.tag
+//^^ - source - comment - meta.tag
+// ^^^^^^^^ meta.tag - source
diff --git a/tests/syntax_test_template.vue b/tests/syntax_test_template.vue
new file mode 100644
index 0000000..0035c86
--- /dev/null
+++ b/tests/syntax_test_template.vue
@@ -0,0 +1,112 @@
+// SYNTAX TEST "Vue Component.sublime-syntax"
+
+
+// <- text.html.vue - text text
+// ^^^^^^^^^^ meta.tag.template.begin.html
+
+
+// <- text.html.vue - text text
+// ^^^^^^^^^^^ meta.tag.template.end.html
+
+
+// <- text.html.vue - text text
+// ^^^^^^^^^^^ meta.tag.template.end.html
+
+ foo
+// ^^^^^^^^^^^^^^^^^^^^^^ meta.tag - source
+// ^^^^^ text.jade.embedded.html - meta.tag
+// ^^^^^^^^^^^ meta.tag - source
+
+ foo -->
+// ^^^^^^^^^^^^^^^^^^^^^^ meta.tag - source
+// ^^^^^ text.jade.embedded.html - meta.tag
+// ^^^^ - meta.tag - source
+// ^^^ comment.block.html punctuation.definition.comment.end.html
+// ^^^^^^^^^^^ meta.tag - source
+
+
+// ^^^^^^^^^^^^^^^^^^^^^^ meta.tag - source
+// ^^^^^ - meta.tag - source
+// ^^^^ punctuation.definition.comment.begin.html
+// ^^^^^ text.jade.embedded.html - meta.tag
+// ^^^^ - meta.tag - source
+// ^^^ comment.block.html punctuation.definition.comment.end.html
+// ^^^^^^^^^^^ meta.tag - source
+
+
+
+
+// <- text.jade.embedded.html
+
+
+// <- text.jade.embedded.html
+//^^ text.jade.embedded.html
+// ^^^^^^^^^^^ meta.tag - meta.tag meta.tag - text.jade
+
+
+
+// ^^^^^^^^^^ meta.tag - meta.tag meta.tag - meta.attribute-with-value
+// ^^^^^^^^^^^ meta.tag meta.attribute-with-value.html - meta.tag meta.tag
+// ^ meta.tag.template.begin.html - meta.tag meta.tag
+// ^ punctuation.definition.tag.begin.html
+// ^^^^^^^^ entity.name.tag.template.html
+// ^^^^ entity.other.attribute-name.html
+// ^ punctuation.separator.key-value.html
+// ^ punctuation.definition.tag.end.html
+// ^ - text.jade
+
+// <- text.jade.embedded.html
+
+// <- text.jade.embedded.html
+//^^ text.jade.embedded.html
+// ^^^^^^^^^^^ meta.tag - meta.tag meta.tag - text.jade
+// ^^ punctuation.definition.tag.begin.html
+// ^^^^^^^^ entity.name.tag.template.html
+// ^ punctuation.definition.tag.end.html
+
+
+// ^^^^^^^^^^ meta.tag - meta.tag meta.tag - meta.attribute-with-value
+// ^^^^^^^^^^ meta.tag meta.attribute-with-value.html - meta.tag meta.tag
+// ^ meta.tag.template.begin.html - meta.tag meta.tag
+// ^ punctuation.definition.tag.begin.html
+// ^^^^^^^^ entity.name.tag.template.html
+// ^^^^ entity.other.attribute-name.html
+// ^ punctuation.separator.key-value.html
+// ^ punctuation.definition.tag.end.html
+// ^ - text.pug
+
+// <- text.pug.embedded.html
+
+// <- text.pug.embedded.html
+//^^ text.pug.embedded.html
+// ^^^^^^^^^^^ meta.tag - meta.tag meta.tag - text.pug
+// ^^ punctuation.definition.tag.begin.html
+// ^^^^^^^^ entity.name.tag.template.html
+// ^ punctuation.definition.tag.end.html
+
+
+// ^^^^^^^^^^ meta.tag - meta.tag meta.tag - meta.attribute-with-value
+// ^^^^^^^^^^ meta.tag meta.attribute-with-value.html - meta.tag meta.tag
+// ^ meta.tag.template.begin.html - meta.tag meta.tag
+// ^ punctuation.definition.tag.begin.html
+// ^^^^^^^^ entity.name.tag.template.html
+// ^^^^ entity.other.attribute-name.html
+// ^ punctuation.separator.key-value.html
+// ^ punctuation.definition.tag.end.html
+// ^ - text.slm
+
+// <- text.slm.embedded.html
+
+// <- text.slm.embedded.html
+//^^ text.slm.embedded.html
+// ^^^^^^^^^^^ meta.tag - meta.tag meta.tag - text.slm
+// ^^ punctuation.definition.tag.begin.html
+// ^^^^^^^^ entity.name.tag.template.html
+// ^ punctuation.definition.tag.end.html
diff --git a/tests/syntax_tests_mustage.vue b/tests/syntax_tests_mustage.vue
new file mode 100644
index 0000000..693ae30
--- /dev/null
+++ b/tests/syntax_tests_mustage.vue
@@ -0,0 +1,147 @@
+// SYNTAX TEST "Vue Component.sublime-syntax"
+
+ {{ foo.text }}
+// ^^^^^^^^^^^^^^ meta.interpolation.vue
+// ^^ punctuation.definition.interpolation.begin.html
+// ^^^^^^^^^^ source.js.embedded.vue
+// ^^ punctuation.definition.interpolation.end.html
+
+
+// ^^^^^^^^^^^^^^ meta.interpolation.vue
+// ^^ punctuation.definition.interpolation.begin.html
+// ^^^^^^^^^^ source.js.embedded.vue
+// ^^ punctuation.definition.interpolation.end.html
+
+
+// ^ meta.tag meta.attribute-with-value.html meta.string.html - meta.interpolation
+// ^^^^^^^^^^^^^^^ meta.tag meta.attribute-with-value.html meta.string.html meta.interpolation.vue
+// ^ meta.tag meta.attribute-with-value.html meta.string.html - meta.interpolation
+// ^ string.quoted.double.html punctuation.definition.string.begin.html
+// ^^ punctuation.definition.interpolation.begin.html - source.js
+// ^^^^^^^^^^^ source.js.embedded.vue
+// ^^ punctuation.definition.interpolation.end.html - source.js
+// ^ string.quoted.double.html punctuation.definition.string.end.html
+
+
+// ^ meta.tag meta.attribute-with-value.html meta.string.html - meta.interpolation
+// ^^^^^^^^^^^^^^^ meta.tag meta.attribute-with-value.html meta.string.html meta.interpolation.vue
+// ^ meta.tag meta.attribute-with-value.html meta.string.html - meta.interpolation
+// ^ string.quoted.single.html punctuation.definition.string.begin.html
+// ^^ punctuation.definition.interpolation.begin.html - source.js
+// ^^^^^^^^^^^ source.js.embedded.vue
+// ^^ punctuation.definition.interpolation.end.html - source.js
+// ^ string.quoted.single.html punctuation.definition.string.end.html
+
+
+// ^^^^^^^^^^^^^^^ meta.tag meta.attribute-with-value.html meta.string.html meta.interpolation.vue
+// ^^ punctuation.definition.interpolation.begin.html - source.js
+// ^^^^^^^^^^^ source.js.embedded.vue
+// ^^ punctuation.definition.interpolation.end.html - source.js
+
+
+// ^^^ meta.tag - meta.attribute-with-value
+// ^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html - meta.string
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^^^^^^^^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html meta.string.html meta.interpolation.vue source.js.embedded.vue meta.mapping
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^ meta.tag - meta.attribute-with-value
+// ^ - meta.tag
+
+
+// ^^^ meta.tag - meta.attribute-with-value
+// ^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html - meta.string
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^^^^^ meta.tag meta.attribute-with-value.directive.html meta.string.html meta.interpolation.vue source.js.embedded.vue
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^ meta.tag - meta.attribute-with-value
+// ^ - meta.tag
+
+
+// ^^^ meta.tag - meta.attribute-with-value
+// ^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html - meta.string
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^^^^^ meta.tag meta.attribute-with-value.directive.html meta.string.html meta.interpolation.vue source.js.embedded.vue
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^ meta.tag - meta.attribute-with-value
+// ^ - meta.tag
+
+
+// ^^^ meta.tag - meta.attribute-with-value
+// ^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html - meta.string
+// ^ punctuation.definition.attribute.html
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^^^^^^^^^^^^^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html meta.string.html meta.interpolation.vue source.js.embedded.vue
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^ meta.tag - meta.attribute-with-value
+// ^ - meta.tag
+
+
+// ^^^ meta.tag - meta.attribute-with-value
+// ^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html - meta.string
+// ^ punctuation.definition.attribute.html
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^^^^^^^^^^^^^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html meta.string.html meta.interpolation.vue source.js.embedded.vue
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^ meta.tag - meta.attribute-with-value
+// ^ - meta.tag
+
+
+// ^^^ meta.tag - meta.attribute-with-value
+// ^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html - meta.string
+// ^ punctuation.definition.attribute.html
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^^^^^^^^ meta.tag meta.attribute-with-value.directive.html meta.string.html meta.interpolation.vue source.js.embedded.vue
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^ meta.tag - meta.attribute-with-value
+// ^ - meta.tag
+
+
+// ^^^ meta.tag - meta.attribute-with-value
+// ^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html - meta.string
+// ^ punctuation.definition.attribute.html
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^^^^^^^^ meta.tag meta.attribute-with-value.directive.html meta.string.html meta.interpolation.vue source.js.embedded.vue
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^ meta.tag - meta.attribute-with-value
+// ^ - meta.tag
+
+
+// ^^^ meta.tag - meta.attribute-with-value
+// ^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html - meta.string
+// ^ punctuation.definition.attribute.html
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html meta.string.html meta.interpolation.vue source.js.embedded.vue
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^ meta.tag - meta.attribute-with-value
+// ^ - meta.tag
+
+
+// ^^^ meta.tag - meta.attribute-with-value
+// ^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html - meta.string
+// ^ punctuation.definition.attribute.html
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html meta.string.html meta.interpolation.vue source.js.embedded.vue
+// ^ meta.tag meta.attribute-with-value.directive.html meta.string.html - meta.interpolation
+// ^ meta.tag - meta.attribute-with-value
+// ^ - meta.tag
+
+
+// ^^^^^^^^^^^^^^^^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html
+// ^ entity.other.attribute-name.html
+// ^ meta.interpolation.vue punctuation.section.interpolation.begin.vue - source.js.embedded
+// ^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.vue source.js.embedded.vue - entity.other.attribute-name.html
+// ^ meta.interpolation.vue punctuation.definition.interpolation.end.vue - source.js.embedded
+// ^ meta.tag - meta.attribute-with-value
+// ^ - meta.tag
+
+
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.tag meta.attribute-with-value.directive.html
+// ^^^^^^^ entity.other.attribute-name.html
+// ^ meta.interpolation.vue punctuation.section.interpolation.begin.vue - source.js.embedded
+// ^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.vue source.js.embedded.vue - entity.other.attribute-name.html
+// ^ meta.interpolation.vue punctuation.definition.interpolation.end.vue - source.js.embedded
+// ^ meta.tag - meta.interpolation
+// ^ meta.tag - meta.attribute-with-value
+// ^ - meta.tag
+
+