File tree-sitter-vue-0+20240326.22bdfa6.obscpio of Package tree-sitter-vue

07070100000000000081A40000000000000000000000016602C55D0000028A000000000000000000000000000000000000003000000000tree-sitter-vue-0+20240326.22bdfa6/.eslintrc.jsmodule.exports = {
  'env': {
    'commonjs': true,
    'es2021': true,
    'node': true,
  },
  'extends': 'google',
  'overrides': [
    {
      'env': {
        'node': true,
      },
      'files': [
        '.eslintrc.{js,cjs}',
      ],
      'parserOptions': {
        'sourceType': 'script',
      },
    },
  ],
  'parserOptions': {
    'ecmaVersion': 'latest',
    'sourceType': 'module',
  },
  'rules': {
    'indent': ['error', 2, {'SwitchCase': 1}],
    'max-len': [
      'error',
      {'code': 120, 'ignoreComments': true, 'ignoreUrls': true, 'ignoreStrings': true},
    ],
    'arrow-parens': 'off',
    'camelcase': 'off',
  },
};
07070100000001000081A40000000000000000000000016602C55D000000E9000000000000000000000000000000000000003200000000tree-sitter-vue-0+20240326.22bdfa6/.gitattributes/src/** linguist-vendored
/examples/* linguist-vendored

src/grammar.json linguist-generated
src/node-types.json linguist-generated
src/parser.c linguist-generated

src/grammar.json -diff
src/node-types.json -diff
src/parser.c -diff
07070100000002000081A40000000000000000000000016602C55D00000040000000000000000000000000000000000000002E00000000tree-sitter-vue-0+20240326.22bdfa6/.gitignoreCargo.lock
node_modules
build
package-lock.json
/target/
.build/07070100000003000081A40000000000000000000000016602C55D00000027000000000000000000000000000000000000002E00000000tree-sitter-vue-0+20240326.22bdfa6/.npmignore/test
/examples
/build
/script
/target
07070100000004000081A40000000000000000000000016602C55D000007C2000000000000000000000000000000000000002E00000000tree-sitter-vue-0+20240326.22bdfa6/Cargo.lock# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3

[[package]]
name = "aho-corasick"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
dependencies = [
 "memchr",
]

[[package]]
name = "cc"
version = "1.0.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
dependencies = [
 "libc",
]

[[package]]
name = "libc"
version = "0.2.153"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"

[[package]]
name = "memchr"
version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"

[[package]]
name = "regex"
version = "1.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
dependencies = [
 "aho-corasick",
 "memchr",
 "regex-automata",
 "regex-syntax",
]

[[package]]
name = "regex-automata"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
dependencies = [
 "aho-corasick",
 "memchr",
 "regex-syntax",
]

[[package]]
name = "regex-syntax"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"

[[package]]
name = "tree-sitter"
version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e747b1f9b7b931ed39a548c1fae149101497de3c1fc8d9e18c62c1a66c683d3d"
dependencies = [
 "cc",
 "regex",
]

[[package]]
name = "tree-sitter-vue"
version = "0.1.0"
dependencies = [
 "cc",
 "tree-sitter",
]
07070100000005000081A40000000000000000000000016602C55D00000242000000000000000000000000000000000000002E00000000tree-sitter-vue-0+20240326.22bdfa6/Cargo.toml[package]
name = "tree-sitter-vue"
description = "vue grammar for the tree-sitter parsing library"
version = "0.1.0"
keywords = ["incremental", "parsing", "vue"]
categories = ["parsing", "text-editors"]
repository = "https://github.com/tree-sitter-grammars/tree-sitter-vue"
authors = ["Amaan Qureshi <amaanq12@gmail.com>"]
edition = "2021"
license = "MIT"

build = "bindings/rust/build.rs"
include = [
  "bindings/rust/*",
  "grammar.js",
  "queries/*",
  "src/*"
]

[lib]
path = "bindings/rust/lib.rs"

[dependencies]
tree-sitter = "~0.20.10"

[build-dependencies]
cc = "^1.0"
07070100000006000081A40000000000000000000000016602C55D00000436000000000000000000000000000000000000002B00000000tree-sitter-vue-0+20240326.22bdfa6/LICENSECopyright (c) 2024 Amaan Qureshi <amaanq12@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
07070100000007000081A40000000000000000000000016602C55D000003D4000000000000000000000000000000000000002D00000000tree-sitter-vue-0+20240326.22bdfa6/README.md# tree-sitter-vue

[![CI][ci]](https://github.com/tree-sitter-grammars/tree-sitter-vue/actions/workflows/ci.yml)
[![discord][discord]](https://discord.gg/w7nTvsVJhm)
[![matrix][matrix]](https://matrix.to/#/#tree-sitter-chat:matrix.org)
<!-- NOTE: uncomment these if you're publishing packages: -->
<!-- [![npm][npm]](https://www.npmjs.com/package/tree-sitter-vue) -->
<!-- [![crates][crates]](https://crates.io/crates/tree-sitter-vue) -->

A tree-sitter parser for vue files.

## References

<!-- NOTE: add the grammar's references here -->

[ci]: https://img.shields.io/github/actions/workflow/status/tree-sitter-grammars/tree-sitter-vue/ci.yml?logo=github&label=CI
[discord]: https://img.shields.io/discord/1063097320771698699?logo=discord&label=discord
[matrix]: https://img.shields.io/matrix/tree-sitter-chat%3Amatrix.org?logo=matrix&label=matrix
[npm]: https://img.shields.io/npm/v/tree-sitter-vue?logo=npm
[crates]: https://img.shields.io/crates/v/tree-sitter-vue?logo=rust
07070100000008000081A40000000000000000000000016602C55D000001FA000000000000000000000000000000000000002F00000000tree-sitter-vue-0+20240326.22bdfa6/binding.gyp{
  "targets": [
    {
      "target_name": "tree_sitter_vue_binding",
      "include_dirs": [
        "<!(node -e \"require('nan')\")",
        "src"
      ],
      "sources": [
        "bindings/node/binding.cc",
        "src/parser.c",
        # NOTE: uncomment this line if you have an external scanner:
        # "src/scanner.c"
      ],
      "cflags_c": [
        "-std=c99",
        "-Wno-unused-but-set-variable"
      ],
      "cflags_cc": [
        "-Wno-cast-function-type"
      ]
    }
  ]
}
07070100000009000041ED0000000000000000000000026602C55D00000000000000000000000000000000000000000000002C00000000tree-sitter-vue-0+20240326.22bdfa6/bindings0707010000000A000041ED0000000000000000000000026602C55D00000000000000000000000000000000000000000000003100000000tree-sitter-vue-0+20240326.22bdfa6/bindings/node0707010000000B000081A40000000000000000000000016602C55D00000359000000000000000000000000000000000000003C00000000tree-sitter-vue-0+20240326.22bdfa6/bindings/node/binding.cc#include "nan.h"
#include "tree_sitter/parser.h"
#include <node.h>

using namespace v8;

extern "C" TSLanguage * tree_sitter_vue();

namespace {

NAN_METHOD(New) {}

void Init(Local<Object> exports, Local<Object> module) {
  Local<FunctionTemplate> tpl = Nan::New<FunctionTemplate>(New);
  tpl->SetClassName(Nan::New("Language").ToLocalChecked());
  tpl->InstanceTemplate()->SetInternalFieldCount(1);

  Local<Function> constructor = Nan::GetFunction(tpl).ToLocalChecked();
  Local<Object> instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked();
  Nan::SetInternalFieldPointer(instance, 0, tree_sitter_vue());

  Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("vue").ToLocalChecked());
  Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance);
}

NODE_MODULE(tree_sitter_vue_binding, Init)

}  // namespace
0707010000000C000081A40000000000000000000000016602C55D000001C9000000000000000000000000000000000000003A00000000tree-sitter-vue-0+20240326.22bdfa6/bindings/node/index.jstry {
  module.exports = require('../../build/Release/tree_sitter_vue_binding');
} catch (error1) {
  if (error1.code !== 'MODULE_NOT_FOUND') {
    throw error1;
  }
  try {
    module.exports = require('../../build/Debug/tree_sitter_vue_binding');
  } catch (error2) {
    if (error2.code !== 'MODULE_NOT_FOUND') {
      throw error2;
    }
    throw error1
  }
}

try {
  module.exports.nodeTypeInfo = require('../../src/node-types.json');
} catch (_) {}
0707010000000D000041ED0000000000000000000000026602C55D00000000000000000000000000000000000000000000003100000000tree-sitter-vue-0+20240326.22bdfa6/bindings/rust0707010000000E000081A40000000000000000000000016602C55D000002BA000000000000000000000000000000000000003A00000000tree-sitter-vue-0+20240326.22bdfa6/bindings/rust/build.rsfn main() {
    let src_dir = std::path::Path::new("src");

    let mut c_config = cc::Build::new();
    c_config.include(src_dir);
    c_config
        .flag_if_supported("-Wno-unused-parameter")
        .flag_if_supported("-Wno-unused-but-set-variable");
    let parser_path = src_dir.join("parser.c");
    c_config.file(&parser_path);

    // NOTE: uncomment this block if your language uses an external scanner:
    /*
    let scanner_path = src_dir.join("scanner.c");
    c_config.file(&scanner_path);
    println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
    */

    c_config.compile("parser");
    println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap());
}
0707010000000F000081A40000000000000000000000016602C55D0000079E000000000000000000000000000000000000003800000000tree-sitter-vue-0+20240326.22bdfa6/bindings/rust/lib.rs//! This crate provides vue language support for the [tree-sitter][] parsing library.
//!
//! Typically, you will use the [language][language func] function to add this language to a
//! tree-sitter [Parser][], and then use the parser to parse some code:
//!
//! ```
//! let code = r#"
//! "#;
//! let mut parser = tree_sitter::Parser::new();
//! parser.set_language(tree_sitter_vue::language()).expect("Error loading vue grammar");
//! let tree = parser.parse(code, None).unwrap();
//! assert!(!tree.root_node().has_error());
//! ```
//!
//! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
//! [language func]: fn.language.html
//! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html
//! [tree-sitter]: https://tree-sitter.github.io/

use tree_sitter::Language;

extern "C" {
    fn tree_sitter_vue() -> Language;
}

/// Get the tree-sitter [Language][] for this grammar.
///
/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
pub fn language() -> Language {
    unsafe { tree_sitter_vue() }
}

/// The content of the [`node-types.json`][] file for this grammar.
///
/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types
pub const NODE_TYPES: &str = include_str!("../../src/node-types.json");

// NOTE: uncomment these to include any queries that this grammar contains:
// pub const HIGHLIGHTS_QUERY: &str = include_str!("../../queries/highlights.scm");
// pub const INJECTIONS_QUERY: &str = include_str!("../../queries/injections.scm");
// pub const LOCALS_QUERY: &str = include_str!("../../queries/locals.scm");
// pub const TAGS_QUERY: &str = include_str!("../../queries/tags.scm");


#[cfg(test)]
mod tests {
    #[test]
    fn test_can_load_grammar() {
        let mut parser = tree_sitter::Parser::new();
        parser
            .set_language(super::language())
            .expect("Error loading vue language");
    }
}
07070100000010000081A40000000000000000000000016602C55D00000CEA000000000000000000000000000000000000002E00000000tree-sitter-vue-0+20240326.22bdfa6/grammar.js/**
 * @file Tree-sitter grammar definition
 * @author Amaan Qureshi <amaanq12@gmail.com>
 * @license MIT
 * @see {@link https://tree-sitter.github.io/tree-sitter/creating-parsers}
 */

const HTML = require('tree-sitter-html/grammar');

module.exports = grammar(HTML, {
  name: 'vue',

  externals: ($, original) => original.concat([
    $._template_start_tag_name,
    $._text_fragment,
    $._interpolation_text,
  ]),

  rules: {
    _node: ($, original) => choice(
      original,
      $.template_element,
      $.interpolation,
    ),

    template_element: $ => seq(
      alias($.template_start_tag, $.start_tag),
      repeat($._node),
      $.end_tag,
    ),

    start_tag: $ => seq(
      '<',
      alias($._start_tag_name, $.tag_name),
      repeat($._attribute),
      '>',
    ),

    script_start_tag: $ => seq(
      '<',
      alias($._script_start_tag_name, $.tag_name),
      repeat($._attribute),
      '>',
    ),

    style_start_tag: $ => seq(
      '<',
      alias($._style_start_tag_name, $.tag_name),
      repeat($._attribute),
      '>',
    ),

    template_start_tag: $ => seq(
      '<',
      alias($._template_start_tag_name, $.tag_name),
      repeat($._attribute),
      '>',
    ),

    self_closing_tag: $ => seq(
      '<',
      alias(choice($._start_tag_name, $._template_start_tag_name), $.tag_name),
      repeat($._attribute),
      '/>',
    ),


    text: $ => $._text_fragment,

    interpolation: $ => seq(
      '{{',
      optional(alias($._interpolation_text, $.raw_text)),
      '}}',
    ),

    _attribute: $ => choice(
      $.attribute,
      $.directive_attribute,
    ),

    directive_attribute: $ => prec.right(seq(
      choice(
        seq(
          $.directive_name,
          optional(seq(
            immediateLiterals(1, ':'),
            choice($.directive_value, $.dynamic_directive_value),
          )),
        ),
        repeat1(seq(
          tokenLiterals(1, ':', '.', '@', '#'),
          choice($.directive_value, $.dynamic_directive_value),
        )),
      ),
      optional($.directive_modifiers),
      optional(seq(
        '=',
        choice($.attribute_value, $.quoted_attribute_value),
      )),
    )),

    directive_name: _ => token(prec(1, /v-[^<>'"=/\s:.]+/)),

    directive_value: _ => /[^<>"'/=\s:.]+/,

    dynamic_directive_value: $ => seq(
      token.immediate(prec(1, '[')),
      optional($.dynamic_directive_inner_value),
      token.immediate(']'),
    ),

    dynamic_directive_inner_value: _ => token.immediate(/[^<>"'/=\s\]]+/),

    directive_modifiers: $ => repeat1(seq(token.immediate(prec(1, '.')), $.directive_modifier)),

    directive_modifier: _ => token.immediate(/[^<>"'/=\s.]+/),
  },
});

/**
 *
 * Turns a list of rules into a choice of immediate rule
 *
 * @param {number} precedence
 *
 * @param {(RegExp|String)[]} literals
 *
 * @return {ChoiceRule}
 */
function immediateLiterals(precedence, ...literals) {
  return choice(...literals.map(l => token.immediate(prec(precedence, l))));
}

/**
 *
 * Turns a list of rules into a choice of aliased token rules
 *
 * @param {number} precedence
 *
 * @param {(RegExp|String)[]} literals
 *
 * @return {ChoiceRule}
 */
function tokenLiterals(precedence, ...literals) {
  return choice(...literals.map(l => token(prec(precedence, l))));
}
07070100000011000081A40000000000000000000000016602C55D000000AB000000000000000000000000000000000000003100000000tree-sitter-vue-0+20240326.22bdfa6/jsconfig.json{
  "files": ["grammar.js"],
  "exclude": ["node_modules"],
  "compilerOptions": {
    "checkJs": true,
    "module": "Node16",
    "types": ["tree-sitter-cli/dsl"]
  }
}
07070100000012000081A40000000000000000000000016602C55D0000032A000000000000000000000000000000000000003000000000tree-sitter-vue-0+20240326.22bdfa6/package.json{
  "name": "tree-sitter-vue",
  "version": "0.1.0",
  "license": "MIT",
  "description": "vue grammar for tree-sitter",
  "repository": "tree-sitter-grammars/tree-sitter-vue",
  "author": "Amaan Qureshi <amaanq12@gmail.com>",
  "keywords": [
    "tree-sitter",
    "parser",
    "lexer",
    "vue"
  ],
  "scripts": {
    "build": "tree-sitter generate",
    "parse": "tree-sitter parse",
    "test": "tree-sitter test",
    "wasm": "tree-sitter build-wasm",
    "web": "tree-sitter web-ui"
  },
  "main": "bindings/node",
  "dependencies": {
    "nan": "^2.18.0",
    "tree-sitter-html": "^0.20.1"
  },
  "devDependencies": {
    "eslint": ">=5.16.0",
    "eslint-config-google": "^0.14.0",
    "tree-sitter-cli": "~0.21.0-pre-release-1"
  },
  "tree-sitter": [
    {
      "scope": "source.vue"
    }
  ]
}
07070100000013000041ED0000000000000000000000026602C55D00000000000000000000000000000000000000000000002B00000000tree-sitter-vue-0+20240326.22bdfa6/queries07070100000014000081A40000000000000000000000016602C55D00000050000000000000000000000000000000000000003500000000tree-sitter-vue-0+20240326.22bdfa6/queries/folds.scm[
  (element)
  (template_element)
  (script_element)
  (style_element)
] @fold
07070100000015000081A40000000000000000000000016602C55D000001A8000000000000000000000000000000000000003A00000000tree-sitter-vue-0+20240326.22bdfa6/queries/highlights.scm; inherits: html_tags
[
  (dynamic_directive_inner_value)
] @tag

[
  "["
  "]"
] @punctuation.bracket

(interpolation) @punctuation.special

(interpolation
  (raw_text) @none)

(directive_name) @tag.attribute

(directive_attribute
  (quoted_attribute_value) @punctuation.special)

(directive_attribute
  (quoted_attribute_value
    (attribute_value) @none))

[
  (directive_modifier)
  (directive_value)
] @function.method
07070100000016000081A40000000000000000000000016602C55D0000007A000000000000000000000000000000000000003700000000tree-sitter-vue-0+20240326.22bdfa6/queries/indents.scm; inherits: html_tags
(template_element) @indent.begin

(template_element
  (end_tag
    ">" @indent.end) @indent.branch)
07070100000017000081A40000000000000000000000016602C55D000007BC000000000000000000000000000000000000003A00000000tree-sitter-vue-0+20240326.22bdfa6/queries/injections.scm; inherits html_tags
; <script lang="css">
((style_element
  (start_tag
    (attribute
      (attribute_name) @_lang
      (quoted_attribute_value
        (attribute_value) @injection.language)))
  (raw_text) @injection.content)
  (#eq? @_lang "lang")
  (#any-of? @injection.language "css" "scss"))

; TODO: When nvim-treesitter has postcss and less parsers, use @injection.language and @injection.content instead
; <script lang="scss">
(style_element
  (start_tag
    (attribute
      (attribute_name) @_lang
      (quoted_attribute_value
        (attribute_value) @_scss)))
  (raw_text) @injection.content
  (#eq? @_lang "lang")
  (#any-of? @_scss "less" "postcss")
  (#set! injection.language "scss"))

; <script lang="js">
((script_element
  (start_tag
    (attribute
      (attribute_name) @_lang
      (quoted_attribute_value
        (attribute_value) @_js)))
  (raw_text) @injection.content)
  (#eq? @_lang "lang")
  (#eq? @_js "js")
  (#set! injection.language "javascript"))

; <script lang="ts">
((script_element
  (start_tag
    (attribute
      (attribute_name) @_lang
      (quoted_attribute_value
        (attribute_value) @_ts)))
  (raw_text) @injection.content)
  (#eq? @_lang "lang")
  (#eq? @_ts "ts")
  (#set! injection.language "typescript"))

; <script lang="tsx">
; <script lang="jsx">
(script_element
  (start_tag
    (attribute
      (attribute_name) @_attr
      (quoted_attribute_value
        (attribute_value) @injection.language)))
  (#eq? @_attr "lang")
  (#any-of? @injection.language "tsx" "jsx")
  (raw_text) @injection.content)

((interpolation
  (raw_text) @injection.content)
  (#set! injection.language "typescript"))

(directive_attribute
  (quoted_attribute_value
    (attribute_value) @injection.content
    (#set! injection.language "typescript")))

(template_element
  (start_tag
    (attribute
      (quoted_attribute_value
        (attribute_value) @injection.language)))
  (text) @injection.content
  (#eq? @injection.language "pug"))
07070100000018000041ED0000000000000000000000026602C55D00000000000000000000000000000000000000000000002A00000000tree-sitter-vue-0+20240326.22bdfa6/script07070100000019000081A40000000000000000000000016602C55D00000000000000000000000000000000000000000000003D00000000tree-sitter-vue-0+20240326.22bdfa6/script/known_failures.txt0707010000001A000081ED0000000000000000000000016602C55D00000495000000000000000000000000000000000000003900000000tree-sitter-vue-0+20240326.22bdfa6/script/parse-examples#!/usr/bin/env bash

set -eu

cd "$(dirname "$0")/.."

function clone_repo {
	owner=$1
	name=$2
	sha=$3

	path=examples/$name
	if [ ! -d "$path" ]; then
		echo "Cloning $owner/$name"
		git clone "https://github.com/$owner/$name" "$path"
	fi

	pushd "$path" >/dev/null
	actual_sha=$(git rev-parse HEAD)
	if [ "$actual_sha" != "$sha" ]; then
		echo "Updating $owner/$name to $sha"
		git fetch
		git reset --hard "$sha"
	fi
	popd >/dev/null
}

clone_repo vuejs core ca9920c7d708c9da48ef0bd116610f1ecb6b56a9
clone_repo vuetifyjs vuetify 136dd51e5cceed9699cbd3b752bb4b5fc03164b6
clone_repo element-plus element-plus 48a056b051c8d571657900aae02ec8cbeff83077

known_failures=$(cat script/known_failures.txt)

# shellcheck disable=2046
tree-sitter parse -q -s \
	'examples/**/*.vue' \
	$(for file in $known_failures; do echo "!${file}"; done)

example_count=$(find examples -name '*.vue' | wc -l)
failure_count=$(wc -w <<<"$known_failures")
success_count=$((example_count - failure_count))
success_percent=$(bc -l <<<"100*${success_count}/${example_count}")

printf \
	"Successfully parsed %d of %d example files (%.1f%%)\n" \
	"$success_count" "$example_count" "$success_percent"
0707010000001B000041ED0000000000000000000000026602C55D00000000000000000000000000000000000000000000002700000000tree-sitter-vue-0+20240326.22bdfa6/src0707010000001C000081A40000000000000000000000016602C55D00004F45000000000000000000000000000000000000003400000000tree-sitter-vue-0+20240326.22bdfa6/src/grammar.json{
  "name": "vue",
  "rules": {
    "document": {
      "type": "REPEAT",
      "content": {
        "type": "SYMBOL",
        "name": "_node"
      }
    },
    "doctype": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<!"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_doctype"
          },
          "named": false,
          "value": "doctype"
        },
        {
          "type": "PATTERN",
          "value": "[^>]+"
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "_doctype": {
      "type": "PATTERN",
      "value": "[Dd][Oo][Cc][Tt][Yy][Pp][Ee]"
    },
    "_node": {
      "type": "CHOICE",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "doctype"
            },
            {
              "type": "SYMBOL",
              "name": "entity"
            },
            {
              "type": "SYMBOL",
              "name": "text"
            },
            {
              "type": "SYMBOL",
              "name": "element"
            },
            {
              "type": "SYMBOL",
              "name": "script_element"
            },
            {
              "type": "SYMBOL",
              "name": "style_element"
            },
            {
              "type": "SYMBOL",
              "name": "erroneous_end_tag"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "template_element"
        },
        {
          "type": "SYMBOL",
          "name": "interpolation"
        }
      ]
    },
    "element": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "start_tag"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SYMBOL",
                "name": "_node"
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "end_tag"
                },
                {
                  "type": "SYMBOL",
                  "name": "_implicit_end_tag"
                }
              ]
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "self_closing_tag"
        }
      ]
    },
    "script_element": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "script_start_tag"
          },
          "named": true,
          "value": "start_tag"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "raw_text"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "end_tag"
        }
      ]
    },
    "style_element": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "style_start_tag"
          },
          "named": true,
          "value": "start_tag"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "raw_text"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "end_tag"
        }
      ]
    },
    "start_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_start_tag_name"
          },
          "named": true,
          "value": "tag_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_attribute"
          }
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "script_start_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_script_start_tag_name"
          },
          "named": true,
          "value": "tag_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_attribute"
          }
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "style_start_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_style_start_tag_name"
          },
          "named": true,
          "value": "tag_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_attribute"
          }
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "self_closing_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_start_tag_name"
              },
              {
                "type": "SYMBOL",
                "name": "_template_start_tag_name"
              }
            ]
          },
          "named": true,
          "value": "tag_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_attribute"
          }
        },
        {
          "type": "STRING",
          "value": "/>"
        }
      ]
    },
    "end_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "</"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_end_tag_name"
          },
          "named": true,
          "value": "tag_name"
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "erroneous_end_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "</"
        },
        {
          "type": "SYMBOL",
          "name": "erroneous_end_tag_name"
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "attribute_name"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "attribute_value"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "quoted_attribute_value"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "attribute_name": {
      "type": "PATTERN",
      "value": "[^<>\"'/=\\s]+"
    },
    "attribute_value": {
      "type": "PATTERN",
      "value": "[^<>\"'=\\s]+"
    },
    "entity": {
      "type": "PATTERN",
      "value": "&(#([xX][0-9a-fA-F]{1,6}|[0-9]{1,5})|[A-Za-z]{1,30});?"
    },
    "quoted_attribute_value": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "'"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "PATTERN",
                    "value": "[^']+"
                  },
                  "named": true,
                  "value": "attribute_value"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": "'"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "\""
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "PATTERN",
                    "value": "[^\"]+"
                  },
                  "named": true,
                  "value": "attribute_value"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": "\""
            }
          ]
        }
      ]
    },
    "text": {
      "type": "SYMBOL",
      "name": "_text_fragment"
    },
    "template_element": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "template_start_tag"
          },
          "named": true,
          "value": "start_tag"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_node"
          }
        },
        {
          "type": "SYMBOL",
          "name": "end_tag"
        }
      ]
    },
    "template_start_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_template_start_tag_name"
          },
          "named": true,
          "value": "tag_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_attribute"
          }
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "interpolation": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "_interpolation_text"
              },
              "named": true,
              "value": "raw_text"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}}"
        }
      ]
    },
    "_attribute": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "attribute"
        },
        {
          "type": "SYMBOL",
          "name": "directive_attribute"
        }
      ]
    },
    "directive_attribute": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "directive_name"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "CHOICE",
                            "members": [
                              {
                                "type": "IMMEDIATE_TOKEN",
                                "content": {
                                  "type": "PREC",
                                  "value": 1,
                                  "content": {
                                    "type": "STRING",
                                    "value": ":"
                                  }
                                }
                              }
                            ]
                          },
                          {
                            "type": "CHOICE",
                            "members": [
                              {
                                "type": "SYMBOL",
                                "name": "directive_value"
                              },
                              {
                                "type": "SYMBOL",
                                "name": "dynamic_directive_value"
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "REPEAT1",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "TOKEN",
                          "content": {
                            "type": "PREC",
                            "value": 1,
                            "content": {
                              "type": "STRING",
                              "value": ":"
                            }
                          }
                        },
                        {
                          "type": "TOKEN",
                          "content": {
                            "type": "PREC",
                            "value": 1,
                            "content": {
                              "type": "STRING",
                              "value": "."
                            }
                          }
                        },
                        {
                          "type": "TOKEN",
                          "content": {
                            "type": "PREC",
                            "value": 1,
                            "content": {
                              "type": "STRING",
                              "value": "@"
                            }
                          }
                        },
                        {
                          "type": "TOKEN",
                          "content": {
                            "type": "PREC",
                            "value": 1,
                            "content": {
                              "type": "STRING",
                              "value": "#"
                            }
                          }
                        }
                      ]
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "directive_value"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "dynamic_directive_value"
                        }
                      ]
                    }
                  ]
                }
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "directive_modifiers"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "="
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "attribute_value"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "quoted_attribute_value"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "directive_name": {
      "type": "TOKEN",
      "content": {
        "type": "PREC",
        "value": 1,
        "content": {
          "type": "PATTERN",
          "value": "v-[^<>'\"=/\\s:.]+"
        }
      }
    },
    "directive_value": {
      "type": "PATTERN",
      "value": "[^<>\"'/=\\s:.]+"
    },
    "dynamic_directive_value": {
      "type": "SEQ",
      "members": [
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "PREC",
            "value": 1,
            "content": {
              "type": "STRING",
              "value": "["
            }
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "dynamic_directive_inner_value"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "]"
          }
        }
      ]
    },
    "dynamic_directive_inner_value": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "[^<>\"'/=\\s\\]]+"
      }
    },
    "directive_modifiers": {
      "type": "REPEAT1",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "PREC",
              "value": 1,
              "content": {
                "type": "STRING",
                "value": "."
              }
            }
          },
          {
            "type": "SYMBOL",
            "name": "directive_modifier"
          }
        ]
      }
    },
    "directive_modifier": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "[^<>\"'/=\\s.]+"
      }
    }
  },
  "extras": [
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "PATTERN",
      "value": "\\s+"
    }
  ],
  "conflicts": [],
  "precedences": [],
  "externals": [
    {
      "type": "SYMBOL",
      "name": "_start_tag_name"
    },
    {
      "type": "SYMBOL",
      "name": "_script_start_tag_name"
    },
    {
      "type": "SYMBOL",
      "name": "_style_start_tag_name"
    },
    {
      "type": "SYMBOL",
      "name": "_end_tag_name"
    },
    {
      "type": "SYMBOL",
      "name": "erroneous_end_tag_name"
    },
    {
      "type": "STRING",
      "value": "/>"
    },
    {
      "type": "SYMBOL",
      "name": "_implicit_end_tag"
    },
    {
      "type": "SYMBOL",
      "name": "raw_text"
    },
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "SYMBOL",
      "name": "_template_start_tag_name"
    },
    {
      "type": "SYMBOL",
      "name": "_text_fragment"
    },
    {
      "type": "SYMBOL",
      "name": "_interpolation_text"
    }
  ],
  "inline": [],
  "supertypes": []
}
0707010000001D000081A40000000000000000000000016602C55D00002263000000000000000000000000000000000000003700000000tree-sitter-vue-0+20240326.22bdfa6/src/node-types.json[
  {
    "type": "attribute",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "attribute_name",
          "named": true
        },
        {
          "type": "attribute_value",
          "named": true
        },
        {
          "type": "quoted_attribute_value",
          "named": true
        }
      ]
    }
  },
  {
    "type": "directive_attribute",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "attribute_value",
          "named": true
        },
        {
          "type": "directive_modifiers",
          "named": true
        },
        {
          "type": "directive_name",
          "named": true
        },
        {
          "type": "directive_value",
          "named": true
        },
        {
          "type": "dynamic_directive_value",
          "named": true
        },
        {
          "type": "quoted_attribute_value",
          "named": true
        }
      ]
    }
  },
  {
    "type": "directive_modifiers",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "directive_modifier",
          "named": true
        }
      ]
    }
  },
  {
    "type": "doctype",
    "named": true,
    "fields": {}
  },
  {
    "type": "document",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "doctype",
          "named": true
        },
        {
          "type": "element",
          "named": true
        },
        {
          "type": "entity",
          "named": true
        },
        {
          "type": "erroneous_end_tag",
          "named": true
        },
        {
          "type": "interpolation",
          "named": true
        },
        {
          "type": "script_element",
          "named": true
        },
        {
          "type": "style_element",
          "named": true
        },
        {
          "type": "template_element",
          "named": true
        },
        {
          "type": "text",
          "named": true
        }
      ]
    }
  },
  {
    "type": "dynamic_directive_value",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "dynamic_directive_inner_value",
          "named": true
        }
      ]
    }
  },
  {
    "type": "element",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "doctype",
          "named": true
        },
        {
          "type": "element",
          "named": true
        },
        {
          "type": "end_tag",
          "named": true
        },
        {
          "type": "entity",
          "named": true
        },
        {
          "type": "erroneous_end_tag",
          "named": true
        },
        {
          "type": "interpolation",
          "named": true
        },
        {
          "type": "script_element",
          "named": true
        },
        {
          "type": "self_closing_tag",
          "named": true
        },
        {
          "type": "start_tag",
          "named": true
        },
        {
          "type": "style_element",
          "named": true
        },
        {
          "type": "template_element",
          "named": true
        },
        {
          "type": "text",
          "named": true
        }
      ]
    }
  },
  {
    "type": "end_tag",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "tag_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "erroneous_end_tag",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "erroneous_end_tag_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "interpolation",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "raw_text",
          "named": true
        }
      ]
    }
  },
  {
    "type": "quoted_attribute_value",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "attribute_value",
          "named": true
        }
      ]
    }
  },
  {
    "type": "script_element",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "end_tag",
          "named": true
        },
        {
          "type": "raw_text",
          "named": true
        },
        {
          "type": "start_tag",
          "named": true
        }
      ]
    }
  },
  {
    "type": "self_closing_tag",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "attribute",
          "named": true
        },
        {
          "type": "directive_attribute",
          "named": true
        },
        {
          "type": "tag_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "start_tag",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "attribute",
          "named": true
        },
        {
          "type": "directive_attribute",
          "named": true
        },
        {
          "type": "tag_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "style_element",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "end_tag",
          "named": true
        },
        {
          "type": "raw_text",
          "named": true
        },
        {
          "type": "start_tag",
          "named": true
        }
      ]
    }
  },
  {
    "type": "template_element",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "doctype",
          "named": true
        },
        {
          "type": "element",
          "named": true
        },
        {
          "type": "end_tag",
          "named": true
        },
        {
          "type": "entity",
          "named": true
        },
        {
          "type": "erroneous_end_tag",
          "named": true
        },
        {
          "type": "interpolation",
          "named": true
        },
        {
          "type": "script_element",
          "named": true
        },
        {
          "type": "start_tag",
          "named": true
        },
        {
          "type": "style_element",
          "named": true
        },
        {
          "type": "template_element",
          "named": true
        },
        {
          "type": "text",
          "named": true
        }
      ]
    }
  },
  {
    "type": "text",
    "named": true,
    "fields": {}
  },
  {
    "type": "\"",
    "named": false
  },
  {
    "type": "#",
    "named": false
  },
  {
    "type": "'",
    "named": false
  },
  {
    "type": ".",
    "named": false
  },
  {
    "type": "/>",
    "named": false
  },
  {
    "type": ":",
    "named": false
  },
  {
    "type": "<",
    "named": false
  },
  {
    "type": "<!",
    "named": false
  },
  {
    "type": "</",
    "named": false
  },
  {
    "type": "=",
    "named": false
  },
  {
    "type": ">",
    "named": false
  },
  {
    "type": "@",
    "named": false
  },
  {
    "type": "[",
    "named": false
  },
  {
    "type": "]",
    "named": false
  },
  {
    "type": "attribute_name",
    "named": true
  },
  {
    "type": "attribute_value",
    "named": true
  },
  {
    "type": "comment",
    "named": true
  },
  {
    "type": "directive_modifier",
    "named": true
  },
  {
    "type": "directive_name",
    "named": true
  },
  {
    "type": "directive_value",
    "named": true
  },
  {
    "type": "doctype",
    "named": false
  },
  {
    "type": "dynamic_directive_inner_value",
    "named": true
  },
  {
    "type": "entity",
    "named": true
  },
  {
    "type": "erroneous_end_tag_name",
    "named": true
  },
  {
    "type": "raw_text",
    "named": true
  },
  {
    "type": "tag_name",
    "named": true
  },
  {
    "type": "{{",
    "named": false
  },
  {
    "type": "}}",
    "named": false
  }
]0707010000001E000081A40000000000000000000000016602C55D0001EC87000000000000000000000000000000000000003000000000tree-sitter-vue-0+20240326.22bdfa6/src/parser.c#include "tree_sitter/parser.h"

#if defined(__GNUC__) || defined(__clang__)
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
#endif

#define LANGUAGE_VERSION 14
#define STATE_COUNT 170
#define LARGE_STATE_COUNT 2
#define SYMBOL_COUNT 67
#define ALIAS_COUNT 0
#define TOKEN_COUNT 41
#define EXTERNAL_TOKEN_COUNT 12
#define FIELD_COUNT 0
#define MAX_ALIAS_SEQUENCE_LENGTH 6
#define PRODUCTION_ID_COUNT 1

enum ts_symbol_identifiers {
  anon_sym_LT_BANG = 1,
  aux_sym_doctype_token1 = 2,
  anon_sym_GT = 3,
  sym__doctype = 4,
  anon_sym_LT = 5,
  anon_sym_SLASH_GT = 6,
  anon_sym_LT_SLASH = 7,
  anon_sym_EQ = 8,
  sym_attribute_name = 9,
  sym_attribute_value = 10,
  sym_entity = 11,
  anon_sym_SQUOTE = 12,
  aux_sym_quoted_attribute_value_token1 = 13,
  anon_sym_DQUOTE = 14,
  aux_sym_quoted_attribute_value_token2 = 15,
  anon_sym_LBRACE_LBRACE = 16,
  anon_sym_RBRACE_RBRACE = 17,
  anon_sym_COLON = 18,
  anon_sym_COLON2 = 19,
  anon_sym_DOT = 20,
  anon_sym_AT = 21,
  anon_sym_POUND = 22,
  sym_directive_name = 23,
  sym_directive_value = 24,
  anon_sym_LBRACK = 25,
  anon_sym_RBRACK = 26,
  sym_dynamic_directive_inner_value = 27,
  anon_sym_DOT2 = 28,
  sym_directive_modifier = 29,
  sym__start_tag_name = 30,
  sym__script_start_tag_name = 31,
  sym__style_start_tag_name = 32,
  sym__end_tag_name = 33,
  sym_erroneous_end_tag_name = 34,
  sym__implicit_end_tag = 35,
  sym_raw_text = 36,
  sym_comment = 37,
  sym__template_start_tag_name = 38,
  sym__text_fragment = 39,
  sym__interpolation_text = 40,
  sym_document = 41,
  sym_doctype = 42,
  sym__node = 43,
  sym_element = 44,
  sym_script_element = 45,
  sym_style_element = 46,
  sym_start_tag = 47,
  sym_script_start_tag = 48,
  sym_style_start_tag = 49,
  sym_self_closing_tag = 50,
  sym_end_tag = 51,
  sym_erroneous_end_tag = 52,
  sym_attribute = 53,
  sym_quoted_attribute_value = 54,
  sym_text = 55,
  sym_template_element = 56,
  sym_template_start_tag = 57,
  sym_interpolation = 58,
  sym__attribute = 59,
  sym_directive_attribute = 60,
  sym_dynamic_directive_value = 61,
  sym_directive_modifiers = 62,
  aux_sym_document_repeat1 = 63,
  aux_sym_start_tag_repeat1 = 64,
  aux_sym_directive_attribute_repeat1 = 65,
  aux_sym_directive_modifiers_repeat1 = 66,
};

static const char * const ts_symbol_names[] = {
  [ts_builtin_sym_end] = "end",
  [anon_sym_LT_BANG] = "<!",
  [aux_sym_doctype_token1] = "doctype_token1",
  [anon_sym_GT] = ">",
  [sym__doctype] = "doctype",
  [anon_sym_LT] = "<",
  [anon_sym_SLASH_GT] = "/>",
  [anon_sym_LT_SLASH] = "</",
  [anon_sym_EQ] = "=",
  [sym_attribute_name] = "attribute_name",
  [sym_attribute_value] = "attribute_value",
  [sym_entity] = "entity",
  [anon_sym_SQUOTE] = "'",
  [aux_sym_quoted_attribute_value_token1] = "attribute_value",
  [anon_sym_DQUOTE] = "\"",
  [aux_sym_quoted_attribute_value_token2] = "attribute_value",
  [anon_sym_LBRACE_LBRACE] = "{{",
  [anon_sym_RBRACE_RBRACE] = "}}",
  [anon_sym_COLON] = ":",
  [anon_sym_COLON2] = ":",
  [anon_sym_DOT] = ".",
  [anon_sym_AT] = "@",
  [anon_sym_POUND] = "#",
  [sym_directive_name] = "directive_name",
  [sym_directive_value] = "directive_value",
  [anon_sym_LBRACK] = "[",
  [anon_sym_RBRACK] = "]",
  [sym_dynamic_directive_inner_value] = "dynamic_directive_inner_value",
  [anon_sym_DOT2] = ".",
  [sym_directive_modifier] = "directive_modifier",
  [sym__start_tag_name] = "tag_name",
  [sym__script_start_tag_name] = "tag_name",
  [sym__style_start_tag_name] = "tag_name",
  [sym__end_tag_name] = "tag_name",
  [sym_erroneous_end_tag_name] = "erroneous_end_tag_name",
  [sym__implicit_end_tag] = "_implicit_end_tag",
  [sym_raw_text] = "raw_text",
  [sym_comment] = "comment",
  [sym__template_start_tag_name] = "tag_name",
  [sym__text_fragment] = "_text_fragment",
  [sym__interpolation_text] = "raw_text",
  [sym_document] = "document",
  [sym_doctype] = "doctype",
  [sym__node] = "_node",
  [sym_element] = "element",
  [sym_script_element] = "script_element",
  [sym_style_element] = "style_element",
  [sym_start_tag] = "start_tag",
  [sym_script_start_tag] = "start_tag",
  [sym_style_start_tag] = "start_tag",
  [sym_self_closing_tag] = "self_closing_tag",
  [sym_end_tag] = "end_tag",
  [sym_erroneous_end_tag] = "erroneous_end_tag",
  [sym_attribute] = "attribute",
  [sym_quoted_attribute_value] = "quoted_attribute_value",
  [sym_text] = "text",
  [sym_template_element] = "template_element",
  [sym_template_start_tag] = "start_tag",
  [sym_interpolation] = "interpolation",
  [sym__attribute] = "_attribute",
  [sym_directive_attribute] = "directive_attribute",
  [sym_dynamic_directive_value] = "dynamic_directive_value",
  [sym_directive_modifiers] = "directive_modifiers",
  [aux_sym_document_repeat1] = "document_repeat1",
  [aux_sym_start_tag_repeat1] = "start_tag_repeat1",
  [aux_sym_directive_attribute_repeat1] = "directive_attribute_repeat1",
  [aux_sym_directive_modifiers_repeat1] = "directive_modifiers_repeat1",
};

static const TSSymbol ts_symbol_map[] = {
  [ts_builtin_sym_end] = ts_builtin_sym_end,
  [anon_sym_LT_BANG] = anon_sym_LT_BANG,
  [aux_sym_doctype_token1] = aux_sym_doctype_token1,
  [anon_sym_GT] = anon_sym_GT,
  [sym__doctype] = sym__doctype,
  [anon_sym_LT] = anon_sym_LT,
  [anon_sym_SLASH_GT] = anon_sym_SLASH_GT,
  [anon_sym_LT_SLASH] = anon_sym_LT_SLASH,
  [anon_sym_EQ] = anon_sym_EQ,
  [sym_attribute_name] = sym_attribute_name,
  [sym_attribute_value] = sym_attribute_value,
  [sym_entity] = sym_entity,
  [anon_sym_SQUOTE] = anon_sym_SQUOTE,
  [aux_sym_quoted_attribute_value_token1] = sym_attribute_value,
  [anon_sym_DQUOTE] = anon_sym_DQUOTE,
  [aux_sym_quoted_attribute_value_token2] = sym_attribute_value,
  [anon_sym_LBRACE_LBRACE] = anon_sym_LBRACE_LBRACE,
  [anon_sym_RBRACE_RBRACE] = anon_sym_RBRACE_RBRACE,
  [anon_sym_COLON] = anon_sym_COLON,
  [anon_sym_COLON2] = anon_sym_COLON,
  [anon_sym_DOT] = anon_sym_DOT,
  [anon_sym_AT] = anon_sym_AT,
  [anon_sym_POUND] = anon_sym_POUND,
  [sym_directive_name] = sym_directive_name,
  [sym_directive_value] = sym_directive_value,
  [anon_sym_LBRACK] = anon_sym_LBRACK,
  [anon_sym_RBRACK] = anon_sym_RBRACK,
  [sym_dynamic_directive_inner_value] = sym_dynamic_directive_inner_value,
  [anon_sym_DOT2] = anon_sym_DOT,
  [sym_directive_modifier] = sym_directive_modifier,
  [sym__start_tag_name] = sym__start_tag_name,
  [sym__script_start_tag_name] = sym__start_tag_name,
  [sym__style_start_tag_name] = sym__start_tag_name,
  [sym__end_tag_name] = sym__start_tag_name,
  [sym_erroneous_end_tag_name] = sym_erroneous_end_tag_name,
  [sym__implicit_end_tag] = sym__implicit_end_tag,
  [sym_raw_text] = sym_raw_text,
  [sym_comment] = sym_comment,
  [sym__template_start_tag_name] = sym__start_tag_name,
  [sym__text_fragment] = sym__text_fragment,
  [sym__interpolation_text] = sym_raw_text,
  [sym_document] = sym_document,
  [sym_doctype] = sym_doctype,
  [sym__node] = sym__node,
  [sym_element] = sym_element,
  [sym_script_element] = sym_script_element,
  [sym_style_element] = sym_style_element,
  [sym_start_tag] = sym_start_tag,
  [sym_script_start_tag] = sym_start_tag,
  [sym_style_start_tag] = sym_start_tag,
  [sym_self_closing_tag] = sym_self_closing_tag,
  [sym_end_tag] = sym_end_tag,
  [sym_erroneous_end_tag] = sym_erroneous_end_tag,
  [sym_attribute] = sym_attribute,
  [sym_quoted_attribute_value] = sym_quoted_attribute_value,
  [sym_text] = sym_text,
  [sym_template_element] = sym_template_element,
  [sym_template_start_tag] = sym_start_tag,
  [sym_interpolation] = sym_interpolation,
  [sym__attribute] = sym__attribute,
  [sym_directive_attribute] = sym_directive_attribute,
  [sym_dynamic_directive_value] = sym_dynamic_directive_value,
  [sym_directive_modifiers] = sym_directive_modifiers,
  [aux_sym_document_repeat1] = aux_sym_document_repeat1,
  [aux_sym_start_tag_repeat1] = aux_sym_start_tag_repeat1,
  [aux_sym_directive_attribute_repeat1] = aux_sym_directive_attribute_repeat1,
  [aux_sym_directive_modifiers_repeat1] = aux_sym_directive_modifiers_repeat1,
};

static const TSSymbolMetadata ts_symbol_metadata[] = {
  [ts_builtin_sym_end] = {
    .visible = false,
    .named = true,
  },
  [anon_sym_LT_BANG] = {
    .visible = true,
    .named = false,
  },
  [aux_sym_doctype_token1] = {
    .visible = false,
    .named = false,
  },
  [anon_sym_GT] = {
    .visible = true,
    .named = false,
  },
  [sym__doctype] = {
    .visible = true,
    .named = false,
  },
  [anon_sym_LT] = {
    .visible = true,
    .named = false,
  },
  [anon_sym_SLASH_GT] = {
    .visible = true,
    .named = false,
  },
  [anon_sym_LT_SLASH] = {
    .visible = true,
    .named = false,
  },
  [anon_sym_EQ] = {
    .visible = true,
    .named = false,
  },
  [sym_attribute_name] = {
    .visible = true,
    .named = true,
  },
  [sym_attribute_value] = {
    .visible = true,
    .named = true,
  },
  [sym_entity] = {
    .visible = true,
    .named = true,
  },
  [anon_sym_SQUOTE] = {
    .visible = true,
    .named = false,
  },
  [aux_sym_quoted_attribute_value_token1] = {
    .visible = true,
    .named = true,
  },
  [anon_sym_DQUOTE] = {
    .visible = true,
    .named = false,
  },
  [aux_sym_quoted_attribute_value_token2] = {
    .visible = true,
    .named = true,
  },
  [anon_sym_LBRACE_LBRACE] = {
    .visible = true,
    .named = false,
  },
  [anon_sym_RBRACE_RBRACE] = {
    .visible = true,
    .named = false,
  },
  [anon_sym_COLON] = {
    .visible = true,
    .named = false,
  },
  [anon_sym_COLON2] = {
    .visible = true,
    .named = false,
  },
  [anon_sym_DOT] = {
    .visible = true,
    .named = false,
  },
  [anon_sym_AT] = {
    .visible = true,
    .named = false,
  },
  [anon_sym_POUND] = {
    .visible = true,
    .named = false,
  },
  [sym_directive_name] = {
    .visible = true,
    .named = true,
  },
  [sym_directive_value] = {
    .visible = true,
    .named = true,
  },
  [anon_sym_LBRACK] = {
    .visible = true,
    .named = false,
  },
  [anon_sym_RBRACK] = {
    .visible = true,
    .named = false,
  },
  [sym_dynamic_directive_inner_value] = {
    .visible = true,
    .named = true,
  },
  [anon_sym_DOT2] = {
    .visible = true,
    .named = false,
  },
  [sym_directive_modifier] = {
    .visible = true,
    .named = true,
  },
  [sym__start_tag_name] = {
    .visible = true,
    .named = true,
  },
  [sym__script_start_tag_name] = {
    .visible = true,
    .named = true,
  },
  [sym__style_start_tag_name] = {
    .visible = true,
    .named = true,
  },
  [sym__end_tag_name] = {
    .visible = true,
    .named = true,
  },
  [sym_erroneous_end_tag_name] = {
    .visible = true,
    .named = true,
  },
  [sym__implicit_end_tag] = {
    .visible = false,
    .named = true,
  },
  [sym_raw_text] = {
    .visible = true,
    .named = true,
  },
  [sym_comment] = {
    .visible = true,
    .named = true,
  },
  [sym__template_start_tag_name] = {
    .visible = true,
    .named = true,
  },
  [sym__text_fragment] = {
    .visible = false,
    .named = true,
  },
  [sym__interpolation_text] = {
    .visible = true,
    .named = true,
  },
  [sym_document] = {
    .visible = true,
    .named = true,
  },
  [sym_doctype] = {
    .visible = true,
    .named = true,
  },
  [sym__node] = {
    .visible = false,
    .named = true,
  },
  [sym_element] = {
    .visible = true,
    .named = true,
  },
  [sym_script_element] = {
    .visible = true,
    .named = true,
  },
  [sym_style_element] = {
    .visible = true,
    .named = true,
  },
  [sym_start_tag] = {
    .visible = true,
    .named = true,
  },
  [sym_script_start_tag] = {
    .visible = true,
    .named = true,
  },
  [sym_style_start_tag] = {
    .visible = true,
    .named = true,
  },
  [sym_self_closing_tag] = {
    .visible = true,
    .named = true,
  },
  [sym_end_tag] = {
    .visible = true,
    .named = true,
  },
  [sym_erroneous_end_tag] = {
    .visible = true,
    .named = true,
  },
  [sym_attribute] = {
    .visible = true,
    .named = true,
  },
  [sym_quoted_attribute_value] = {
    .visible = true,
    .named = true,
  },
  [sym_text] = {
    .visible = true,
    .named = true,
  },
  [sym_template_element] = {
    .visible = true,
    .named = true,
  },
  [sym_template_start_tag] = {
    .visible = true,
    .named = true,
  },
  [sym_interpolation] = {
    .visible = true,
    .named = true,
  },
  [sym__attribute] = {
    .visible = false,
    .named = true,
  },
  [sym_directive_attribute] = {
    .visible = true,
    .named = true,
  },
  [sym_dynamic_directive_value] = {
    .visible = true,
    .named = true,
  },
  [sym_directive_modifiers] = {
    .visible = true,
    .named = true,
  },
  [aux_sym_document_repeat1] = {
    .visible = false,
    .named = false,
  },
  [aux_sym_start_tag_repeat1] = {
    .visible = false,
    .named = false,
  },
  [aux_sym_directive_attribute_repeat1] = {
    .visible = false,
    .named = false,
  },
  [aux_sym_directive_modifiers_repeat1] = {
    .visible = false,
    .named = false,
  },
};

static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = {
  [0] = {0},
};

static const uint16_t ts_non_terminal_alias_map[] = {
  0,
};

static const TSStateId ts_primary_state_ids[STATE_COUNT] = {
  [0] = 0,
  [1] = 1,
  [2] = 2,
  [3] = 2,
  [4] = 4,
  [5] = 4,
  [6] = 6,
  [7] = 7,
  [8] = 8,
  [9] = 8,
  [10] = 7,
  [11] = 11,
  [12] = 11,
  [13] = 13,
  [14] = 14,
  [15] = 15,
  [16] = 16,
  [17] = 17,
  [18] = 18,
  [19] = 14,
  [20] = 16,
  [21] = 21,
  [22] = 18,
  [23] = 13,
  [24] = 17,
  [25] = 21,
  [26] = 26,
  [27] = 15,
  [28] = 28,
  [29] = 29,
  [30] = 30,
  [31] = 31,
  [32] = 32,
  [33] = 33,
  [34] = 34,
  [35] = 28,
  [36] = 36,
  [37] = 37,
  [38] = 38,
  [39] = 33,
  [40] = 40,
  [41] = 34,
  [42] = 32,
  [43] = 43,
  [44] = 40,
  [45] = 45,
  [46] = 46,
  [47] = 38,
  [48] = 36,
  [49] = 37,
  [50] = 50,
  [51] = 51,
  [52] = 43,
  [53] = 53,
  [54] = 54,
  [55] = 45,
  [56] = 56,
  [57] = 57,
  [58] = 58,
  [59] = 46,
  [60] = 50,
  [61] = 61,
  [62] = 62,
  [63] = 63,
  [64] = 64,
  [65] = 53,
  [66] = 66,
  [67] = 64,
  [68] = 68,
  [69] = 62,
  [70] = 66,
  [71] = 71,
  [72] = 72,
  [73] = 73,
  [74] = 51,
  [75] = 71,
  [76] = 76,
  [77] = 77,
  [78] = 78,
  [79] = 79,
  [80] = 80,
  [81] = 54,
  [82] = 82,
  [83] = 78,
  [84] = 84,
  [85] = 68,
  [86] = 56,
  [87] = 87,
  [88] = 72,
  [89] = 89,
  [90] = 90,
  [91] = 87,
  [92] = 84,
  [93] = 61,
  [94] = 82,
  [95] = 90,
  [96] = 79,
  [97] = 57,
  [98] = 58,
  [99] = 89,
  [100] = 77,
  [101] = 76,
  [102] = 73,
  [103] = 103,
  [104] = 104,
  [105] = 105,
  [106] = 106,
  [107] = 107,
  [108] = 108,
  [109] = 105,
  [110] = 106,
  [111] = 108,
  [112] = 112,
  [113] = 113,
  [114] = 107,
  [115] = 112,
  [116] = 113,
  [117] = 117,
  [118] = 118,
  [119] = 118,
  [120] = 120,
  [121] = 117,
  [122] = 122,
  [123] = 122,
  [124] = 120,
  [125] = 125,
  [126] = 126,
  [127] = 127,
  [128] = 128,
  [129] = 127,
  [130] = 130,
  [131] = 127,
  [132] = 132,
  [133] = 133,
  [134] = 132,
  [135] = 125,
  [136] = 136,
  [137] = 137,
  [138] = 138,
  [139] = 126,
  [140] = 127,
  [141] = 141,
  [142] = 130,
  [143] = 128,
  [144] = 133,
  [145] = 145,
  [146] = 146,
  [147] = 147,
  [148] = 148,
  [149] = 149,
  [150] = 150,
  [151] = 151,
  [152] = 152,
  [153] = 153,
  [154] = 150,
  [155] = 146,
  [156] = 152,
  [157] = 149,
  [158] = 153,
  [159] = 159,
  [160] = 160,
  [161] = 145,
  [162] = 162,
  [163] = 163,
  [164] = 160,
  [165] = 147,
  [166] = 151,
  [167] = 159,
  [168] = 163,
  [169] = 162,
};

static bool ts_lex(TSLexer *lexer, TSStateId state) {
  START_LEXER();
  eof = lexer->eof(lexer);
  switch (state) {
    case 0:
      if (eof) ADVANCE(27);
      if (lookahead == '"') ADVANCE(84);
      if (lookahead == '#') ADVANCE(93);
      if (lookahead == '&') ADVANCE(6);
      if (lookahead == '\'') ADVANCE(81);
      if (lookahead == '.') ADVANCE(99);
      if (lookahead == '/') ADVANCE(9);
      if (lookahead == ':') ADVANCE(89);
      if (lookahead == '<') ADVANCE(33);
      if (lookahead == '=') ADVANCE(36);
      if (lookahead == '>') ADVANCE(31);
      if (lookahead == '@') ADVANCE(92);
      if (lookahead == '[') ADVANCE(96);
      if (lookahead == ']') ADVANCE(97);
      if (lookahead == 'v') ADVANCE(8);
      if (lookahead == '{') ADVANCE(12);
      if (lookahead == '}') ADVANCE(13);
      if (lookahead == 'D' ||
          lookahead == 'd') ADVANCE(16);
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') SKIP(26)
      END_STATE();
    case 1:
      if (lookahead == '"') ADVANCE(84);
      if (lookahead == '\'') ADVANCE(81);
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') SKIP(1)
      if (lookahead != 0 &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(40);
      END_STATE();
    case 2:
      if (lookahead == '"') ADVANCE(84);
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') ADVANCE(85);
      if (lookahead != 0) ADVANCE(86);
      END_STATE();
    case 3:
      if (lookahead == '#') ADVANCE(93);
      if (lookahead == '.') ADVANCE(99);
      if (lookahead == '/') ADVANCE(9);
      if (lookahead == ':') ADVANCE(89);
      if (lookahead == '=') ADVANCE(36);
      if (lookahead == '>') ADVANCE(31);
      if (lookahead == '@') ADVANCE(92);
      if (lookahead == 'v') ADVANCE(37);
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') SKIP(5)
      if (lookahead != 0 &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '<') ADVANCE(39);
      END_STATE();
    case 4:
      if (lookahead == '#') ADVANCE(93);
      if (lookahead == '.') ADVANCE(99);
      if (lookahead == '/') ADVANCE(9);
      if (lookahead == ':') ADVANCE(90);
      if (lookahead == '=') ADVANCE(36);
      if (lookahead == '>') ADVANCE(31);
      if (lookahead == '@') ADVANCE(92);
      if (lookahead == 'v') ADVANCE(37);
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') SKIP(5)
      if (lookahead != 0 &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '<') ADVANCE(39);
      END_STATE();
    case 5:
      if (lookahead == '#') ADVANCE(93);
      if (lookahead == '.') ADVANCE(91);
      if (lookahead == '/') ADVANCE(9);
      if (lookahead == ':') ADVANCE(90);
      if (lookahead == '=') ADVANCE(36);
      if (lookahead == '>') ADVANCE(31);
      if (lookahead == '@') ADVANCE(92);
      if (lookahead == 'v') ADVANCE(37);
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') SKIP(5)
      if (lookahead != 0 &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '<') ADVANCE(39);
      END_STATE();
    case 6:
      if (lookahead == '#') ADVANCE(19);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(80);
      END_STATE();
    case 7:
      if (lookahead == '\'') ADVANCE(81);
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') ADVANCE(82);
      if (lookahead != 0) ADVANCE(83);
      END_STATE();
    case 8:
      if (lookahead == '-') ADVANCE(24);
      END_STATE();
    case 9:
      if (lookahead == '>') ADVANCE(34);
      END_STATE();
    case 10:
      if (lookahead == '[') ADVANCE(96);
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') SKIP(21)
      if (lookahead != 0 &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '.' &&
          lookahead != '/' &&
          lookahead != ':' &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(95);
      END_STATE();
    case 11:
      if (lookahead == ']') ADVANCE(97);
      if (lookahead != 0 &&
          (lookahead < '\t' || '\r' < lookahead) &&
          lookahead != ' ' &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '/' &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(98);
      END_STATE();
    case 12:
      if (lookahead == '{') ADVANCE(87);
      END_STATE();
    case 13:
      if (lookahead == '}') ADVANCE(88);
      END_STATE();
    case 14:
      if (lookahead == 'C' ||
          lookahead == 'c') ADVANCE(18);
      END_STATE();
    case 15:
      if (lookahead == 'E' ||
          lookahead == 'e') ADVANCE(32);
      END_STATE();
    case 16:
      if (lookahead == 'O' ||
          lookahead == 'o') ADVANCE(14);
      END_STATE();
    case 17:
      if (lookahead == 'P' ||
          lookahead == 'p') ADVANCE(15);
      END_STATE();
    case 18:
      if (lookahead == 'T' ||
          lookahead == 't') ADVANCE(20);
      END_STATE();
    case 19:
      if (lookahead == 'X' ||
          lookahead == 'x') ADVANCE(23);
      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(46);
      END_STATE();
    case 20:
      if (lookahead == 'Y' ||
          lookahead == 'y') ADVANCE(17);
      END_STATE();
    case 21:
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') SKIP(21)
      if (lookahead != 0 &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '.' &&
          lookahead != '/' &&
          lookahead != ':' &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(95);
      END_STATE();
    case 22:
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') ADVANCE(29);
      if (lookahead != 0 &&
          lookahead != '>') ADVANCE(30);
      END_STATE();
    case 23:
      if (('0' <= lookahead && lookahead <= '9') ||
          ('A' <= lookahead && lookahead <= 'F') ||
          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(51);
      END_STATE();
    case 24:
      if (lookahead != 0 &&
          (lookahead < '\t' || '\r' < lookahead) &&
          lookahead != ' ' &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '.' &&
          lookahead != '/' &&
          lookahead != ':' &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(94);
      END_STATE();
    case 25:
      if (lookahead != 0 &&
          (lookahead < '\t' || '\r' < lookahead) &&
          lookahead != ' ' &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '.' &&
          lookahead != '/' &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(100);
      END_STATE();
    case 26:
      if (eof) ADVANCE(27);
      if (lookahead == '"') ADVANCE(84);
      if (lookahead == '#') ADVANCE(93);
      if (lookahead == '&') ADVANCE(6);
      if (lookahead == '\'') ADVANCE(81);
      if (lookahead == '.') ADVANCE(91);
      if (lookahead == '/') ADVANCE(9);
      if (lookahead == ':') ADVANCE(90);
      if (lookahead == '<') ADVANCE(33);
      if (lookahead == '=') ADVANCE(36);
      if (lookahead == '>') ADVANCE(31);
      if (lookahead == '@') ADVANCE(92);
      if (lookahead == 'v') ADVANCE(8);
      if (lookahead == '{') ADVANCE(12);
      if (lookahead == '}') ADVANCE(13);
      if (lookahead == 'D' ||
          lookahead == 'd') ADVANCE(16);
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') SKIP(26)
      END_STATE();
    case 27:
      ACCEPT_TOKEN(ts_builtin_sym_end);
      END_STATE();
    case 28:
      ACCEPT_TOKEN(anon_sym_LT_BANG);
      END_STATE();
    case 29:
      ACCEPT_TOKEN(aux_sym_doctype_token1);
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') ADVANCE(29);
      if (lookahead != 0 &&
          lookahead != '>') ADVANCE(30);
      END_STATE();
    case 30:
      ACCEPT_TOKEN(aux_sym_doctype_token1);
      if (lookahead != 0 &&
          lookahead != '>') ADVANCE(30);
      END_STATE();
    case 31:
      ACCEPT_TOKEN(anon_sym_GT);
      END_STATE();
    case 32:
      ACCEPT_TOKEN(sym__doctype);
      END_STATE();
    case 33:
      ACCEPT_TOKEN(anon_sym_LT);
      if (lookahead == '!') ADVANCE(28);
      if (lookahead == '/') ADVANCE(35);
      END_STATE();
    case 34:
      ACCEPT_TOKEN(anon_sym_SLASH_GT);
      END_STATE();
    case 35:
      ACCEPT_TOKEN(anon_sym_LT_SLASH);
      END_STATE();
    case 36:
      ACCEPT_TOKEN(anon_sym_EQ);
      END_STATE();
    case 37:
      ACCEPT_TOKEN(sym_attribute_name);
      if (lookahead == '-') ADVANCE(38);
      if (lookahead != 0 &&
          (lookahead < '\t' || '\r' < lookahead) &&
          lookahead != ' ' &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '/' &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(39);
      END_STATE();
    case 38:
      ACCEPT_TOKEN(sym_attribute_name);
      if (lookahead == '.' ||
          lookahead == ':') ADVANCE(39);
      if (lookahead != 0 &&
          (lookahead < '\t' || '\r' < lookahead) &&
          lookahead != ' ' &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '/' &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(94);
      END_STATE();
    case 39:
      ACCEPT_TOKEN(sym_attribute_name);
      if (lookahead != 0 &&
          (lookahead < '\t' || '\r' < lookahead) &&
          lookahead != ' ' &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '/' &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(39);
      END_STATE();
    case 40:
      ACCEPT_TOKEN(sym_attribute_value);
      if (lookahead != 0 &&
          (lookahead < '\t' || '\r' < lookahead) &&
          lookahead != ' ' &&
          lookahead != '"' &&
          lookahead != '\'' &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(40);
      END_STATE();
    case 41:
      ACCEPT_TOKEN(sym_entity);
      END_STATE();
    case 42:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      END_STATE();
    case 43:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(42);
      END_STATE();
    case 44:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(43);
      END_STATE();
    case 45:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(44);
      END_STATE();
    case 46:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(45);
      END_STATE();
    case 47:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('0' <= lookahead && lookahead <= '9') ||
          ('A' <= lookahead && lookahead <= 'F') ||
          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(42);
      END_STATE();
    case 48:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('0' <= lookahead && lookahead <= '9') ||
          ('A' <= lookahead && lookahead <= 'F') ||
          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(47);
      END_STATE();
    case 49:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('0' <= lookahead && lookahead <= '9') ||
          ('A' <= lookahead && lookahead <= 'F') ||
          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(48);
      END_STATE();
    case 50:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('0' <= lookahead && lookahead <= '9') ||
          ('A' <= lookahead && lookahead <= 'F') ||
          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(49);
      END_STATE();
    case 51:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('0' <= lookahead && lookahead <= '9') ||
          ('A' <= lookahead && lookahead <= 'F') ||
          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(50);
      END_STATE();
    case 52:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(42);
      END_STATE();
    case 53:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(52);
      END_STATE();
    case 54:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(53);
      END_STATE();
    case 55:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(54);
      END_STATE();
    case 56:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(55);
      END_STATE();
    case 57:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(56);
      END_STATE();
    case 58:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(57);
      END_STATE();
    case 59:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(58);
      END_STATE();
    case 60:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(59);
      END_STATE();
    case 61:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60);
      END_STATE();
    case 62:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(61);
      END_STATE();
    case 63:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(62);
      END_STATE();
    case 64:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(63);
      END_STATE();
    case 65:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(64);
      END_STATE();
    case 66:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(65);
      END_STATE();
    case 67:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(66);
      END_STATE();
    case 68:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(67);
      END_STATE();
    case 69:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(68);
      END_STATE();
    case 70:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(69);
      END_STATE();
    case 71:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(70);
      END_STATE();
    case 72:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(71);
      END_STATE();
    case 73:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(72);
      END_STATE();
    case 74:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(73);
      END_STATE();
    case 75:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(74);
      END_STATE();
    case 76:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(75);
      END_STATE();
    case 77:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(76);
      END_STATE();
    case 78:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(77);
      END_STATE();
    case 79:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(78);
      END_STATE();
    case 80:
      ACCEPT_TOKEN(sym_entity);
      if (lookahead == ';') ADVANCE(41);
      if (('A' <= lookahead && lookahead <= 'Z') ||
          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(79);
      END_STATE();
    case 81:
      ACCEPT_TOKEN(anon_sym_SQUOTE);
      END_STATE();
    case 82:
      ACCEPT_TOKEN(aux_sym_quoted_attribute_value_token1);
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') ADVANCE(82);
      if (lookahead != 0 &&
          lookahead != '\'') ADVANCE(83);
      END_STATE();
    case 83:
      ACCEPT_TOKEN(aux_sym_quoted_attribute_value_token1);
      if (lookahead != 0 &&
          lookahead != '\'') ADVANCE(83);
      END_STATE();
    case 84:
      ACCEPT_TOKEN(anon_sym_DQUOTE);
      END_STATE();
    case 85:
      ACCEPT_TOKEN(aux_sym_quoted_attribute_value_token2);
      if (('\t' <= lookahead && lookahead <= '\r') ||
          lookahead == ' ') ADVANCE(85);
      if (lookahead != 0 &&
          lookahead != '"') ADVANCE(86);
      END_STATE();
    case 86:
      ACCEPT_TOKEN(aux_sym_quoted_attribute_value_token2);
      if (lookahead != 0 &&
          lookahead != '"') ADVANCE(86);
      END_STATE();
    case 87:
      ACCEPT_TOKEN(anon_sym_LBRACE_LBRACE);
      END_STATE();
    case 88:
      ACCEPT_TOKEN(anon_sym_RBRACE_RBRACE);
      END_STATE();
    case 89:
      ACCEPT_TOKEN(anon_sym_COLON);
      END_STATE();
    case 90:
      ACCEPT_TOKEN(anon_sym_COLON2);
      END_STATE();
    case 91:
      ACCEPT_TOKEN(anon_sym_DOT);
      END_STATE();
    case 92:
      ACCEPT_TOKEN(anon_sym_AT);
      END_STATE();
    case 93:
      ACCEPT_TOKEN(anon_sym_POUND);
      END_STATE();
    case 94:
      ACCEPT_TOKEN(sym_directive_name);
      if (lookahead != 0 &&
          (lookahead < '\t' || '\r' < lookahead) &&
          lookahead != ' ' &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '.' &&
          lookahead != '/' &&
          lookahead != ':' &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(94);
      END_STATE();
    case 95:
      ACCEPT_TOKEN(sym_directive_value);
      if (lookahead != 0 &&
          (lookahead < '\t' || '\r' < lookahead) &&
          lookahead != ' ' &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '.' &&
          lookahead != '/' &&
          lookahead != ':' &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(95);
      END_STATE();
    case 96:
      ACCEPT_TOKEN(anon_sym_LBRACK);
      END_STATE();
    case 97:
      ACCEPT_TOKEN(anon_sym_RBRACK);
      END_STATE();
    case 98:
      ACCEPT_TOKEN(sym_dynamic_directive_inner_value);
      if (lookahead != 0 &&
          (lookahead < '\t' || '\r' < lookahead) &&
          lookahead != ' ' &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '/' &&
          (lookahead < '<' || '>' < lookahead) &&
          lookahead != ']') ADVANCE(98);
      END_STATE();
    case 99:
      ACCEPT_TOKEN(anon_sym_DOT2);
      END_STATE();
    case 100:
      ACCEPT_TOKEN(sym_directive_modifier);
      if (lookahead != 0 &&
          (lookahead < '\t' || '\r' < lookahead) &&
          lookahead != ' ' &&
          lookahead != '"' &&
          lookahead != '\'' &&
          lookahead != '.' &&
          lookahead != '/' &&
          (lookahead < '<' || '>' < lookahead)) ADVANCE(100);
      END_STATE();
    default:
      return false;
  }
}

static const TSLexMode ts_lex_modes[STATE_COUNT] = {
  [0] = {.lex_state = 0, .external_lex_state = 1},
  [1] = {.lex_state = 0, .external_lex_state = 2},
  [2] = {.lex_state = 0, .external_lex_state = 3},
  [3] = {.lex_state = 0, .external_lex_state = 3},
  [4] = {.lex_state = 0, .external_lex_state = 3},
  [5] = {.lex_state = 0, .external_lex_state = 3},
  [6] = {.lex_state = 0, .external_lex_state = 2},
  [7] = {.lex_state = 0, .external_lex_state = 2},
  [8] = {.lex_state = 0, .external_lex_state = 2},
  [9] = {.lex_state = 0, .external_lex_state = 2},
  [10] = {.lex_state = 0, .external_lex_state = 3},
  [11] = {.lex_state = 0, .external_lex_state = 2},
  [12] = {.lex_state = 0, .external_lex_state = 2},
  [13] = {.lex_state = 5, .external_lex_state = 4},
  [14] = {.lex_state = 5, .external_lex_state = 4},
  [15] = {.lex_state = 4, .external_lex_state = 4},
  [16] = {.lex_state = 5, .external_lex_state = 4},
  [17] = {.lex_state = 3, .external_lex_state = 4},
  [18] = {.lex_state = 5, .external_lex_state = 4},
  [19] = {.lex_state = 5, .external_lex_state = 4},
  [20] = {.lex_state = 5, .external_lex_state = 4},
  [21] = {.lex_state = 5, .external_lex_state = 4},
  [22] = {.lex_state = 5, .external_lex_state = 4},
  [23] = {.lex_state = 5, .external_lex_state = 4},
  [24] = {.lex_state = 3, .external_lex_state = 5},
  [25] = {.lex_state = 5, .external_lex_state = 5},
  [26] = {.lex_state = 5, .external_lex_state = 5},
  [27] = {.lex_state = 4, .external_lex_state = 5},
  [28] = {.lex_state = 4, .external_lex_state = 4},
  [29] = {.lex_state = 5, .external_lex_state = 5},
  [30] = {.lex_state = 5, .external_lex_state = 5},
  [31] = {.lex_state = 5, .external_lex_state = 5},
  [32] = {.lex_state = 4, .external_lex_state = 4},
  [33] = {.lex_state = 4, .external_lex_state = 4},
  [34] = {.lex_state = 4, .external_lex_state = 4},
  [35] = {.lex_state = 4, .external_lex_state = 5},
  [36] = {.lex_state = 4, .external_lex_state = 4},
  [37] = {.lex_state = 4, .external_lex_state = 4},
  [38] = {.lex_state = 4, .external_lex_state = 4},
  [39] = {.lex_state = 4, .external_lex_state = 5},
  [40] = {.lex_state = 4, .external_lex_state = 4},
  [41] = {.lex_state = 4, .external_lex_state = 5},
  [42] = {.lex_state = 4, .external_lex_state = 5},
  [43] = {.lex_state = 5, .external_lex_state = 4},
  [44] = {.lex_state = 4, .external_lex_state = 5},
  [45] = {.lex_state = 5, .external_lex_state = 4},
  [46] = {.lex_state = 5, .external_lex_state = 4},
  [47] = {.lex_state = 4, .external_lex_state = 5},
  [48] = {.lex_state = 4, .external_lex_state = 5},
  [49] = {.lex_state = 4, .external_lex_state = 5},
  [50] = {.lex_state = 5, .external_lex_state = 4},
  [51] = {.lex_state = 5, .external_lex_state = 4},
  [52] = {.lex_state = 5, .external_lex_state = 5},
  [53] = {.lex_state = 5, .external_lex_state = 4},
  [54] = {.lex_state = 5, .external_lex_state = 4},
  [55] = {.lex_state = 5, .external_lex_state = 5},
  [56] = {.lex_state = 5, .external_lex_state = 4},
  [57] = {.lex_state = 5, .external_lex_state = 4},
  [58] = {.lex_state = 5, .external_lex_state = 4},
  [59] = {.lex_state = 5, .external_lex_state = 5},
  [60] = {.lex_state = 5, .external_lex_state = 5},
  [61] = {.lex_state = 0, .external_lex_state = 2},
  [62] = {.lex_state = 0, .external_lex_state = 2},
  [63] = {.lex_state = 0, .external_lex_state = 3},
  [64] = {.lex_state = 0, .external_lex_state = 2},
  [65] = {.lex_state = 5, .external_lex_state = 5},
  [66] = {.lex_state = 0, .external_lex_state = 3},
  [67] = {.lex_state = 0, .external_lex_state = 3},
  [68] = {.lex_state = 0, .external_lex_state = 2},
  [69] = {.lex_state = 0, .external_lex_state = 3},
  [70] = {.lex_state = 0, .external_lex_state = 2},
  [71] = {.lex_state = 0, .external_lex_state = 2},
  [72] = {.lex_state = 0, .external_lex_state = 2},
  [73] = {.lex_state = 0, .external_lex_state = 2},
  [74] = {.lex_state = 5, .external_lex_state = 5},
  [75] = {.lex_state = 0, .external_lex_state = 3},
  [76] = {.lex_state = 0, .external_lex_state = 2},
  [77] = {.lex_state = 0, .external_lex_state = 2},
  [78] = {.lex_state = 0, .external_lex_state = 3},
  [79] = {.lex_state = 0, .external_lex_state = 2},
  [80] = {.lex_state = 0, .external_lex_state = 3},
  [81] = {.lex_state = 5, .external_lex_state = 5},
  [82] = {.lex_state = 0, .external_lex_state = 2},
  [83] = {.lex_state = 0, .external_lex_state = 2},
  [84] = {.lex_state = 0, .external_lex_state = 2},
  [85] = {.lex_state = 0, .external_lex_state = 3},
  [86] = {.lex_state = 5, .external_lex_state = 5},
  [87] = {.lex_state = 0, .external_lex_state = 2},
  [88] = {.lex_state = 0, .external_lex_state = 3},
  [89] = {.lex_state = 0, .external_lex_state = 3},
  [90] = {.lex_state = 0, .external_lex_state = 3},
  [91] = {.lex_state = 0, .external_lex_state = 3},
  [92] = {.lex_state = 0, .external_lex_state = 3},
  [93] = {.lex_state = 0, .external_lex_state = 3},
  [94] = {.lex_state = 0, .external_lex_state = 3},
  [95] = {.lex_state = 0, .external_lex_state = 2},
  [96] = {.lex_state = 0, .external_lex_state = 3},
  [97] = {.lex_state = 5, .external_lex_state = 5},
  [98] = {.lex_state = 5, .external_lex_state = 5},
  [99] = {.lex_state = 0, .external_lex_state = 2},
  [100] = {.lex_state = 0, .external_lex_state = 3},
  [101] = {.lex_state = 0, .external_lex_state = 3},
  [102] = {.lex_state = 0, .external_lex_state = 3},
  [103] = {.lex_state = 0, .external_lex_state = 2},
  [104] = {.lex_state = 0, .external_lex_state = 2},
  [105] = {.lex_state = 1, .external_lex_state = 5},
  [106] = {.lex_state = 1, .external_lex_state = 5},
  [107] = {.lex_state = 0, .external_lex_state = 6},
  [108] = {.lex_state = 1, .external_lex_state = 5},
  [109] = {.lex_state = 1, .external_lex_state = 5},
  [110] = {.lex_state = 1, .external_lex_state = 5},
  [111] = {.lex_state = 1, .external_lex_state = 5},
  [112] = {.lex_state = 1, .external_lex_state = 5},
  [113] = {.lex_state = 1, .external_lex_state = 5},
  [114] = {.lex_state = 0, .external_lex_state = 6},
  [115] = {.lex_state = 1, .external_lex_state = 5},
  [116] = {.lex_state = 1, .external_lex_state = 5},
  [117] = {.lex_state = 0, .external_lex_state = 7},
  [118] = {.lex_state = 10, .external_lex_state = 5},
  [119] = {.lex_state = 10, .external_lex_state = 5},
  [120] = {.lex_state = 10, .external_lex_state = 5},
  [121] = {.lex_state = 0, .external_lex_state = 7},
  [122] = {.lex_state = 0, .external_lex_state = 7},
  [123] = {.lex_state = 0, .external_lex_state = 7},
  [124] = {.lex_state = 10, .external_lex_state = 5},
  [125] = {.lex_state = 7, .external_lex_state = 5},
  [126] = {.lex_state = 11, .external_lex_state = 5},
  [127] = {.lex_state = 0, .external_lex_state = 8},
  [128] = {.lex_state = 0, .external_lex_state = 5},
  [129] = {.lex_state = 0, .external_lex_state = 8},
  [130] = {.lex_state = 0, .external_lex_state = 5},
  [131] = {.lex_state = 0, .external_lex_state = 8},
  [132] = {.lex_state = 2, .external_lex_state = 5},
  [133] = {.lex_state = 0, .external_lex_state = 9},
  [134] = {.lex_state = 2, .external_lex_state = 5},
  [135] = {.lex_state = 7, .external_lex_state = 5},
  [136] = {.lex_state = 0, .external_lex_state = 7},
  [137] = {.lex_state = 0, .external_lex_state = 7},
  [138] = {.lex_state = 0, .external_lex_state = 7},
  [139] = {.lex_state = 11, .external_lex_state = 5},
  [140] = {.lex_state = 0, .external_lex_state = 8},
  [141] = {.lex_state = 0, .external_lex_state = 7},
  [142] = {.lex_state = 0, .external_lex_state = 5},
  [143] = {.lex_state = 0, .external_lex_state = 5},
  [144] = {.lex_state = 0, .external_lex_state = 9},
  [145] = {.lex_state = 0, .external_lex_state = 5},
  [146] = {.lex_state = 22, .external_lex_state = 5},
  [147] = {.lex_state = 0, .external_lex_state = 10},
  [148] = {.lex_state = 0, .external_lex_state = 5},
  [149] = {.lex_state = 0, .external_lex_state = 5},
  [150] = {.lex_state = 25, .external_lex_state = 5},
  [151] = {.lex_state = 0, .external_lex_state = 5},
  [152] = {.lex_state = 0, .external_lex_state = 5},
  [153] = {.lex_state = 0, .external_lex_state = 5},
  [154] = {.lex_state = 25, .external_lex_state = 5},
  [155] = {.lex_state = 22, .external_lex_state = 5},
  [156] = {.lex_state = 0, .external_lex_state = 5},
  [157] = {.lex_state = 0, .external_lex_state = 5},
  [158] = {.lex_state = 0, .external_lex_state = 5},
  [159] = {.lex_state = 0, .external_lex_state = 5},
  [160] = {.lex_state = 0, .external_lex_state = 5},
  [161] = {.lex_state = 0, .external_lex_state = 5},
  [162] = {.lex_state = 0, .external_lex_state = 5},
  [163] = {.lex_state = 0, .external_lex_state = 11},
  [164] = {.lex_state = 0, .external_lex_state = 5},
  [165] = {.lex_state = 0, .external_lex_state = 10},
  [166] = {.lex_state = 0, .external_lex_state = 5},
  [167] = {.lex_state = 0, .external_lex_state = 5},
  [168] = {.lex_state = 0, .external_lex_state = 11},
  [169] = {.lex_state = 0, .external_lex_state = 5},
};

static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
  [0] = {
    [ts_builtin_sym_end] = ACTIONS(1),
    [anon_sym_LT_BANG] = ACTIONS(1),
    [anon_sym_GT] = ACTIONS(1),
    [sym__doctype] = ACTIONS(1),
    [anon_sym_LT] = ACTIONS(1),
    [anon_sym_SLASH_GT] = ACTIONS(1),
    [anon_sym_LT_SLASH] = ACTIONS(1),
    [anon_sym_EQ] = ACTIONS(1),
    [sym_entity] = ACTIONS(1),
    [anon_sym_SQUOTE] = ACTIONS(1),
    [anon_sym_DQUOTE] = ACTIONS(1),
    [anon_sym_LBRACE_LBRACE] = ACTIONS(1),
    [anon_sym_RBRACE_RBRACE] = ACTIONS(1),
    [anon_sym_COLON] = ACTIONS(1),
    [anon_sym_COLON2] = ACTIONS(1),
    [anon_sym_DOT] = ACTIONS(1),
    [anon_sym_AT] = ACTIONS(1),
    [anon_sym_POUND] = ACTIONS(1),
    [sym_directive_name] = ACTIONS(1),
    [anon_sym_LBRACK] = ACTIONS(1),
    [anon_sym_RBRACK] = ACTIONS(1),
    [anon_sym_DOT2] = ACTIONS(1),
    [sym__start_tag_name] = ACTIONS(1),
    [sym__script_start_tag_name] = ACTIONS(1),
    [sym__style_start_tag_name] = ACTIONS(1),
    [sym__end_tag_name] = ACTIONS(1),
    [sym_erroneous_end_tag_name] = ACTIONS(1),
    [sym__implicit_end_tag] = ACTIONS(1),
    [sym_raw_text] = ACTIONS(1),
    [sym_comment] = ACTIONS(3),
    [sym__template_start_tag_name] = ACTIONS(1),
    [sym__text_fragment] = ACTIONS(1),
    [sym__interpolation_text] = ACTIONS(1),
  },
  [1] = {
    [sym_document] = STATE(148),
    [sym_doctype] = STATE(6),
    [sym__node] = STATE(6),
    [sym_element] = STATE(6),
    [sym_script_element] = STATE(6),
    [sym_style_element] = STATE(6),
    [sym_start_tag] = STATE(4),
    [sym_script_start_tag] = STATE(121),
    [sym_style_start_tag] = STATE(122),
    [sym_self_closing_tag] = STATE(99),
    [sym_erroneous_end_tag] = STATE(6),
    [sym_text] = STATE(6),
    [sym_template_element] = STATE(6),
    [sym_template_start_tag] = STATE(12),
    [sym_interpolation] = STATE(6),
    [aux_sym_document_repeat1] = STATE(6),
    [ts_builtin_sym_end] = ACTIONS(5),
    [anon_sym_LT_BANG] = ACTIONS(7),
    [anon_sym_LT] = ACTIONS(9),
    [anon_sym_LT_SLASH] = ACTIONS(11),
    [sym_entity] = ACTIONS(13),
    [anon_sym_LBRACE_LBRACE] = ACTIONS(15),
    [sym_comment] = ACTIONS(3),
    [sym__text_fragment] = ACTIONS(17),
  },
};

static const uint16_t ts_small_parse_table[] = {
  [0] = 15,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(19), 1,
      anon_sym_LT_BANG,
    ACTIONS(21), 1,
      anon_sym_LT,
    ACTIONS(23), 1,
      anon_sym_LT_SLASH,
    ACTIONS(25), 1,
      sym_entity,
    ACTIONS(27), 1,
      anon_sym_LBRACE_LBRACE,
    ACTIONS(29), 1,
      sym__implicit_end_tag,
    ACTIONS(31), 1,
      sym__text_fragment,
    STATE(5), 1,
      sym_start_tag,
    STATE(11), 1,
      sym_template_start_tag,
    STATE(89), 1,
      sym_self_closing_tag,
    STATE(102), 1,
      sym_end_tag,
    STATE(117), 1,
      sym_script_start_tag,
    STATE(123), 1,
      sym_style_start_tag,
    STATE(10), 10,
      sym_doctype,
      sym__node,
      sym_element,
      sym_script_element,
      sym_style_element,
      sym_erroneous_end_tag,
      sym_text,
      sym_template_element,
      sym_interpolation,
      aux_sym_document_repeat1,
  [55] = 15,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(19), 1,
      anon_sym_LT_BANG,
    ACTIONS(21), 1,
      anon_sym_LT,
    ACTIONS(25), 1,
      sym_entity,
    ACTIONS(27), 1,
      anon_sym_LBRACE_LBRACE,
    ACTIONS(31), 1,
      sym__text_fragment,
    ACTIONS(33), 1,
      anon_sym_LT_SLASH,
    ACTIONS(35), 1,
      sym__implicit_end_tag,
    STATE(5), 1,
      sym_start_tag,
    STATE(11), 1,
      sym_template_start_tag,
    STATE(73), 1,
      sym_end_tag,
    STATE(89), 1,
      sym_self_closing_tag,
    STATE(117), 1,
      sym_script_start_tag,
    STATE(123), 1,
      sym_style_start_tag,
    STATE(10), 10,
      sym_doctype,
      sym__node,
      sym_element,
      sym_script_element,
      sym_style_element,
      sym_erroneous_end_tag,
      sym_text,
      sym_template_element,
      sym_interpolation,
      aux_sym_document_repeat1,
  [110] = 15,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(19), 1,
      anon_sym_LT_BANG,
    ACTIONS(21), 1,
      anon_sym_LT,
    ACTIONS(27), 1,
      anon_sym_LBRACE_LBRACE,
    ACTIONS(31), 1,
      sym__text_fragment,
    ACTIONS(33), 1,
      anon_sym_LT_SLASH,
    ACTIONS(37), 1,
      sym_entity,
    ACTIONS(39), 1,
      sym__implicit_end_tag,
    STATE(5), 1,
      sym_start_tag,
    STATE(11), 1,
      sym_template_start_tag,
    STATE(87), 1,
      sym_end_tag,
    STATE(89), 1,
      sym_self_closing_tag,
    STATE(117), 1,
      sym_script_start_tag,
    STATE(123), 1,
      sym_style_start_tag,
    STATE(3), 10,
      sym_doctype,
      sym__node,
      sym_element,
      sym_script_element,
      sym_style_element,
      sym_erroneous_end_tag,
      sym_text,
      sym_template_element,
      sym_interpolation,
      aux_sym_document_repeat1,
  [165] = 15,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(19), 1,
      anon_sym_LT_BANG,
    ACTIONS(21), 1,
      anon_sym_LT,
    ACTIONS(23), 1,
      anon_sym_LT_SLASH,
    ACTIONS(27), 1,
      anon_sym_LBRACE_LBRACE,
    ACTIONS(31), 1,
      sym__text_fragment,
    ACTIONS(41), 1,
      sym_entity,
    ACTIONS(43), 1,
      sym__implicit_end_tag,
    STATE(5), 1,
      sym_start_tag,
    STATE(11), 1,
      sym_template_start_tag,
    STATE(89), 1,
      sym_self_closing_tag,
    STATE(91), 1,
      sym_end_tag,
    STATE(117), 1,
      sym_script_start_tag,
    STATE(123), 1,
      sym_style_start_tag,
    STATE(2), 10,
      sym_doctype,
      sym__node,
      sym_element,
      sym_script_element,
      sym_style_element,
      sym_erroneous_end_tag,
      sym_text,
      sym_template_element,
      sym_interpolation,
      aux_sym_document_repeat1,
  [220] = 14,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(7), 1,
      anon_sym_LT_BANG,
    ACTIONS(9), 1,
      anon_sym_LT,
    ACTIONS(11), 1,
      anon_sym_LT_SLASH,
    ACTIONS(15), 1,
      anon_sym_LBRACE_LBRACE,
    ACTIONS(17), 1,
      sym__text_fragment,
    ACTIONS(45), 1,
      ts_builtin_sym_end,
    ACTIONS(47), 1,
      sym_entity,
    STATE(4), 1,
      sym_start_tag,
    STATE(12), 1,
      sym_template_start_tag,
    STATE(99), 1,
      sym_self_closing_tag,
    STATE(121), 1,
      sym_script_start_tag,
    STATE(122), 1,
      sym_style_start_tag,
    STATE(7), 10,
      sym_doctype,
      sym__node,
      sym_element,
      sym_script_element,
      sym_style_element,
      sym_erroneous_end_tag,
      sym_text,
      sym_template_element,
      sym_interpolation,
      aux_sym_document_repeat1,
  [272] = 14,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(49), 1,
      ts_builtin_sym_end,
    ACTIONS(51), 1,
      anon_sym_LT_BANG,
    ACTIONS(54), 1,
      anon_sym_LT,
    ACTIONS(57), 1,
      anon_sym_LT_SLASH,
    ACTIONS(60), 1,
      sym_entity,
    ACTIONS(63), 1,
      anon_sym_LBRACE_LBRACE,
    ACTIONS(66), 1,
      sym__text_fragment,
    STATE(4), 1,
      sym_start_tag,
    STATE(12), 1,
      sym_template_start_tag,
    STATE(99), 1,
      sym_self_closing_tag,
    STATE(121), 1,
      sym_script_start_tag,
    STATE(122), 1,
      sym_style_start_tag,
    STATE(7), 10,
      sym_doctype,
      sym__node,
      sym_element,
      sym_script_element,
      sym_style_element,
      sym_erroneous_end_tag,
      sym_text,
      sym_template_element,
      sym_interpolation,
      aux_sym_document_repeat1,
  [324] = 14,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(7), 1,
      anon_sym_LT_BANG,
    ACTIONS(9), 1,
      anon_sym_LT,
    ACTIONS(15), 1,
      anon_sym_LBRACE_LBRACE,
    ACTIONS(17), 1,
      sym__text_fragment,
    ACTIONS(47), 1,
      sym_entity,
    ACTIONS(69), 1,
      anon_sym_LT_SLASH,
    STATE(4), 1,
      sym_start_tag,
    STATE(12), 1,
      sym_template_start_tag,
    STATE(68), 1,
      sym_end_tag,
    STATE(99), 1,
      sym_self_closing_tag,
    STATE(121), 1,
      sym_script_start_tag,
    STATE(122), 1,
      sym_style_start_tag,
    STATE(7), 10,
      sym_doctype,
      sym__node,
      sym_element,
      sym_script_element,
      sym_style_element,
      sym_erroneous_end_tag,
      sym_text,
      sym_template_element,
      sym_interpolation,
      aux_sym_document_repeat1,
  [376] = 14,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(7), 1,
      anon_sym_LT_BANG,
    ACTIONS(9), 1,
      anon_sym_LT,
    ACTIONS(15), 1,
      anon_sym_LBRACE_LBRACE,
    ACTIONS(17), 1,
      sym__text_fragment,
    ACTIONS(47), 1,
      sym_entity,
    ACTIONS(71), 1,
      anon_sym_LT_SLASH,
    STATE(4), 1,
      sym_start_tag,
    STATE(12), 1,
      sym_template_start_tag,
    STATE(85), 1,
      sym_end_tag,
    STATE(99), 1,
      sym_self_closing_tag,
    STATE(121), 1,
      sym_script_start_tag,
    STATE(122), 1,
      sym_style_start_tag,
    STATE(7), 10,
      sym_doctype,
      sym__node,
      sym_element,
      sym_script_element,
      sym_style_element,
      sym_erroneous_end_tag,
      sym_text,
      sym_template_element,
      sym_interpolation,
      aux_sym_document_repeat1,
  [428] = 14,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(49), 1,
      sym__implicit_end_tag,
    ACTIONS(73), 1,
      anon_sym_LT_BANG,
    ACTIONS(76), 1,
      anon_sym_LT,
    ACTIONS(79), 1,
      anon_sym_LT_SLASH,
    ACTIONS(82), 1,
      sym_entity,
    ACTIONS(85), 1,
      anon_sym_LBRACE_LBRACE,
    ACTIONS(88), 1,
      sym__text_fragment,
    STATE(5), 1,
      sym_start_tag,
    STATE(11), 1,
      sym_template_start_tag,
    STATE(89), 1,
      sym_self_closing_tag,
    STATE(117), 1,
      sym_script_start_tag,
    STATE(123), 1,
      sym_style_start_tag,
    STATE(10), 10,
      sym_doctype,
      sym__node,
      sym_element,
      sym_script_element,
      sym_style_element,
      sym_erroneous_end_tag,
      sym_text,
      sym_template_element,
      sym_interpolation,
      aux_sym_document_repeat1,
  [480] = 14,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(7), 1,
      anon_sym_LT_BANG,
    ACTIONS(9), 1,
      anon_sym_LT,
    ACTIONS(15), 1,
      anon_sym_LBRACE_LBRACE,
    ACTIONS(17), 1,
      sym__text_fragment,
    ACTIONS(71), 1,
      anon_sym_LT_SLASH,
    ACTIONS(91), 1,
      sym_entity,
    STATE(4), 1,
      sym_start_tag,
    STATE(12), 1,
      sym_template_start_tag,
    STATE(94), 1,
      sym_end_tag,
    STATE(99), 1,
      sym_self_closing_tag,
    STATE(121), 1,
      sym_script_start_tag,
    STATE(122), 1,
      sym_style_start_tag,
    STATE(9), 10,
      sym_doctype,
      sym__node,
      sym_element,
      sym_script_element,
      sym_style_element,
      sym_erroneous_end_tag,
      sym_text,
      sym_template_element,
      sym_interpolation,
      aux_sym_document_repeat1,
  [532] = 14,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(7), 1,
      anon_sym_LT_BANG,
    ACTIONS(9), 1,
      anon_sym_LT,
    ACTIONS(15), 1,
      anon_sym_LBRACE_LBRACE,
    ACTIONS(17), 1,
      sym__text_fragment,
    ACTIONS(69), 1,
      anon_sym_LT_SLASH,
    ACTIONS(93), 1,
      sym_entity,
    STATE(4), 1,
      sym_start_tag,
    STATE(12), 1,
      sym_template_start_tag,
    STATE(82), 1,
      sym_end_tag,
    STATE(99), 1,
      sym_self_closing_tag,
    STATE(121), 1,
      sym_script_start_tag,
    STATE(122), 1,
      sym_style_start_tag,
    STATE(8), 10,
      sym_doctype,
      sym__node,
      sym_element,
      sym_script_element,
      sym_style_element,
      sym_erroneous_end_tag,
      sym_text,
      sym_template_element,
      sym_interpolation,
      aux_sym_document_repeat1,
  [584] = 8,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(95), 1,
      anon_sym_GT,
    ACTIONS(97), 1,
      anon_sym_SLASH_GT,
    ACTIONS(99), 1,
      sym_attribute_name,
    ACTIONS(103), 1,
      sym_directive_name,
    STATE(15), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(101), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(16), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [615] = 8,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(99), 1,
      sym_attribute_name,
    ACTIONS(103), 1,
      sym_directive_name,
    ACTIONS(105), 1,
      anon_sym_GT,
    ACTIONS(107), 1,
      anon_sym_SLASH_GT,
    STATE(15), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(101), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(21), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [646] = 10,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(111), 1,
      anon_sym_EQ,
    ACTIONS(113), 1,
      sym_attribute_name,
    ACTIONS(115), 1,
      anon_sym_DOT,
    ACTIONS(117), 1,
      anon_sym_DOT2,
    STATE(32), 1,
      aux_sym_directive_modifiers_repeat1,
    STATE(33), 1,
      aux_sym_directive_attribute_repeat1,
    STATE(43), 1,
      sym_directive_modifiers,
    ACTIONS(101), 3,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
    ACTIONS(109), 3,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      sym_directive_name,
  [681] = 8,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(99), 1,
      sym_attribute_name,
    ACTIONS(103), 1,
      sym_directive_name,
    ACTIONS(107), 1,
      anon_sym_SLASH_GT,
    ACTIONS(119), 1,
      anon_sym_GT,
    STATE(15), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(101), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(21), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [712] = 8,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(111), 1,
      anon_sym_EQ,
    ACTIONS(117), 1,
      anon_sym_DOT2,
    ACTIONS(121), 1,
      anon_sym_COLON,
    STATE(32), 1,
      aux_sym_directive_modifiers_repeat1,
    STATE(43), 1,
      sym_directive_modifiers,
    ACTIONS(113), 3,
      sym_attribute_name,
      anon_sym_COLON2,
      anon_sym_DOT,
    ACTIONS(109), 5,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [743] = 8,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(97), 1,
      anon_sym_SLASH_GT,
    ACTIONS(99), 1,
      sym_attribute_name,
    ACTIONS(103), 1,
      sym_directive_name,
    ACTIONS(123), 1,
      anon_sym_GT,
    STATE(15), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(101), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(14), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [774] = 8,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(99), 1,
      sym_attribute_name,
    ACTIONS(103), 1,
      sym_directive_name,
    ACTIONS(105), 1,
      anon_sym_GT,
    ACTIONS(125), 1,
      anon_sym_SLASH_GT,
    STATE(15), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(101), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(21), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [805] = 8,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(99), 1,
      sym_attribute_name,
    ACTIONS(103), 1,
      sym_directive_name,
    ACTIONS(119), 1,
      anon_sym_GT,
    ACTIONS(125), 1,
      anon_sym_SLASH_GT,
    STATE(15), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(101), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(21), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [836] = 7,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(129), 1,
      sym_attribute_name,
    ACTIONS(135), 1,
      sym_directive_name,
    STATE(15), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(127), 2,
      anon_sym_GT,
      anon_sym_SLASH_GT,
    ACTIONS(132), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(21), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [865] = 8,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(99), 1,
      sym_attribute_name,
    ACTIONS(103), 1,
      sym_directive_name,
    ACTIONS(123), 1,
      anon_sym_GT,
    ACTIONS(138), 1,
      anon_sym_SLASH_GT,
    STATE(15), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(101), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(19), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [896] = 8,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(95), 1,
      anon_sym_GT,
    ACTIONS(99), 1,
      sym_attribute_name,
    ACTIONS(103), 1,
      sym_directive_name,
    ACTIONS(138), 1,
      anon_sym_SLASH_GT,
    STATE(15), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(101), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(20), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [927] = 8,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(140), 1,
      anon_sym_EQ,
    ACTIONS(142), 1,
      anon_sym_COLON,
    ACTIONS(144), 1,
      anon_sym_DOT2,
    STATE(42), 1,
      aux_sym_directive_modifiers_repeat1,
    STATE(52), 1,
      sym_directive_modifiers,
    ACTIONS(113), 3,
      sym_attribute_name,
      anon_sym_COLON2,
      anon_sym_DOT,
    ACTIONS(109), 4,
      anon_sym_GT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [957] = 7,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(127), 1,
      anon_sym_GT,
    ACTIONS(146), 1,
      sym_attribute_name,
    ACTIONS(152), 1,
      sym_directive_name,
    STATE(27), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(149), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(25), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [985] = 7,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(155), 1,
      anon_sym_GT,
    ACTIONS(157), 1,
      sym_attribute_name,
    ACTIONS(161), 1,
      sym_directive_name,
    STATE(27), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(159), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(25), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [1013] = 10,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(113), 1,
      sym_attribute_name,
    ACTIONS(140), 1,
      anon_sym_EQ,
    ACTIONS(144), 1,
      anon_sym_DOT2,
    ACTIONS(163), 1,
      anon_sym_DOT,
    STATE(39), 1,
      aux_sym_directive_attribute_repeat1,
    STATE(42), 1,
      aux_sym_directive_modifiers_repeat1,
    STATE(52), 1,
      sym_directive_modifiers,
    ACTIONS(109), 2,
      anon_sym_GT,
      sym_directive_name,
    ACTIONS(159), 3,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
  [1047] = 7,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(117), 1,
      anon_sym_DOT2,
    ACTIONS(167), 1,
      anon_sym_EQ,
    STATE(32), 1,
      aux_sym_directive_modifiers_repeat1,
    STATE(45), 1,
      sym_directive_modifiers,
    ACTIONS(169), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(165), 6,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1075] = 7,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(157), 1,
      sym_attribute_name,
    ACTIONS(161), 1,
      sym_directive_name,
    ACTIONS(171), 1,
      anon_sym_GT,
    STATE(27), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(159), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(26), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [1103] = 7,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(157), 1,
      sym_attribute_name,
    ACTIONS(161), 1,
      sym_directive_name,
    ACTIONS(173), 1,
      anon_sym_GT,
    STATE(27), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(159), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(31), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [1131] = 7,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(157), 1,
      sym_attribute_name,
    ACTIONS(161), 1,
      sym_directive_name,
    ACTIONS(175), 1,
      anon_sym_GT,
    STATE(27), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(159), 4,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
    STATE(25), 4,
      sym_attribute,
      sym__attribute,
      sym_directive_attribute,
      aux_sym_start_tag_repeat1,
  [1159] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(117), 1,
      anon_sym_DOT2,
    STATE(34), 1,
      aux_sym_directive_modifiers_repeat1,
    ACTIONS(179), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(177), 7,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_EQ,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1182] = 6,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(183), 1,
      sym_attribute_name,
    ACTIONS(188), 1,
      anon_sym_DOT,
    STATE(33), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(185), 3,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
    ACTIONS(181), 5,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_EQ,
      sym_directive_name,
      anon_sym_DOT2,
  [1207] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(195), 1,
      anon_sym_DOT2,
    STATE(34), 1,
      aux_sym_directive_modifiers_repeat1,
    ACTIONS(193), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(191), 7,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_EQ,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1230] = 7,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(144), 1,
      anon_sym_DOT2,
    ACTIONS(198), 1,
      anon_sym_EQ,
    STATE(42), 1,
      aux_sym_directive_modifiers_repeat1,
    STATE(55), 1,
      sym_directive_modifiers,
    ACTIONS(169), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(165), 5,
      anon_sym_GT,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1257] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(183), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(181), 8,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_EQ,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
      anon_sym_DOT2,
  [1275] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(202), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(200), 8,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_EQ,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
      anon_sym_DOT2,
  [1293] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(206), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(204), 8,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_EQ,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
      anon_sym_DOT2,
  [1311] = 6,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(183), 1,
      sym_attribute_name,
    ACTIONS(211), 1,
      anon_sym_DOT,
    STATE(39), 1,
      aux_sym_directive_attribute_repeat1,
    ACTIONS(208), 3,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
    ACTIONS(181), 4,
      anon_sym_GT,
      anon_sym_EQ,
      sym_directive_name,
      anon_sym_DOT2,
  [1335] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(193), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(191), 8,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_EQ,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
      anon_sym_DOT2,
  [1353] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(214), 1,
      anon_sym_DOT2,
    STATE(41), 1,
      aux_sym_directive_modifiers_repeat1,
    ACTIONS(193), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(191), 6,
      anon_sym_GT,
      anon_sym_EQ,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1375] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(144), 1,
      anon_sym_DOT2,
    STATE(41), 1,
      aux_sym_directive_modifiers_repeat1,
    ACTIONS(179), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(177), 6,
      anon_sym_GT,
      anon_sym_EQ,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1397] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(219), 1,
      anon_sym_EQ,
    ACTIONS(221), 1,
      sym_attribute_name,
    ACTIONS(217), 7,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1416] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(193), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(191), 7,
      anon_sym_GT,
      anon_sym_EQ,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
      anon_sym_DOT2,
  [1433] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(225), 1,
      anon_sym_EQ,
    ACTIONS(227), 1,
      sym_attribute_name,
    ACTIONS(223), 7,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1452] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(231), 1,
      anon_sym_EQ,
    ACTIONS(233), 1,
      sym_attribute_name,
    ACTIONS(229), 7,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1471] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(206), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(204), 7,
      anon_sym_GT,
      anon_sym_EQ,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
      anon_sym_DOT2,
  [1488] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(183), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(181), 7,
      anon_sym_GT,
      anon_sym_EQ,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
      anon_sym_DOT2,
  [1505] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(202), 2,
      sym_attribute_name,
      anon_sym_DOT,
    ACTIONS(200), 7,
      anon_sym_GT,
      anon_sym_EQ,
      anon_sym_COLON2,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
      anon_sym_DOT2,
  [1522] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(227), 1,
      sym_attribute_name,
    ACTIONS(223), 7,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1538] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(169), 1,
      sym_attribute_name,
    ACTIONS(165), 7,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1554] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(221), 1,
      sym_attribute_name,
    ACTIONS(235), 1,
      anon_sym_EQ,
    ACTIONS(217), 6,
      anon_sym_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1572] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(239), 1,
      sym_attribute_name,
    ACTIONS(237), 7,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1588] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(243), 1,
      sym_attribute_name,
    ACTIONS(241), 7,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1604] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(227), 1,
      sym_attribute_name,
    ACTIONS(245), 1,
      anon_sym_EQ,
    ACTIONS(223), 6,
      anon_sym_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1622] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(249), 1,
      sym_attribute_name,
    ACTIONS(247), 7,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1638] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(253), 1,
      sym_attribute_name,
    ACTIONS(251), 7,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1654] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(257), 1,
      sym_attribute_name,
    ACTIONS(255), 7,
      anon_sym_GT,
      anon_sym_SLASH_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1670] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(233), 1,
      sym_attribute_name,
    ACTIONS(259), 1,
      anon_sym_EQ,
    ACTIONS(229), 6,
      anon_sym_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1688] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(227), 1,
      sym_attribute_name,
    ACTIONS(223), 6,
      anon_sym_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1703] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(263), 1,
      anon_sym_LT,
    ACTIONS(261), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1718] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(267), 1,
      anon_sym_LT,
    ACTIONS(265), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1733] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(271), 1,
      anon_sym_LT,
    ACTIONS(269), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1748] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(275), 1,
      anon_sym_LT,
    ACTIONS(273), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1763] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(239), 1,
      sym_attribute_name,
    ACTIONS(237), 6,
      anon_sym_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1778] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(279), 1,
      anon_sym_LT,
    ACTIONS(277), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1793] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(275), 1,
      anon_sym_LT,
    ACTIONS(273), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1808] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(283), 1,
      anon_sym_LT,
    ACTIONS(281), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1823] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(267), 1,
      anon_sym_LT,
    ACTIONS(265), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1838] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(279), 1,
      anon_sym_LT,
    ACTIONS(277), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1853] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(287), 1,
      anon_sym_LT,
    ACTIONS(285), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1868] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(291), 1,
      anon_sym_LT,
    ACTIONS(289), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1883] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(295), 1,
      anon_sym_LT,
    ACTIONS(293), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1898] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(169), 1,
      sym_attribute_name,
    ACTIONS(165), 6,
      anon_sym_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [1913] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(287), 1,
      anon_sym_LT,
    ACTIONS(285), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1928] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(299), 1,
      anon_sym_LT,
    ACTIONS(297), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1943] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(303), 1,
      anon_sym_LT,
    ACTIONS(301), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1958] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(307), 1,
      anon_sym_LT,
    ACTIONS(305), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1973] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(311), 1,
      anon_sym_LT,
    ACTIONS(309), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [1988] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(315), 1,
      anon_sym_LT,
    ACTIONS(313), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2003] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(243), 1,
      sym_attribute_name,
    ACTIONS(241), 6,
      anon_sym_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [2018] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(319), 1,
      anon_sym_LT,
    ACTIONS(317), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2033] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(307), 1,
      anon_sym_LT,
    ACTIONS(305), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2048] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(323), 1,
      anon_sym_LT,
    ACTIONS(321), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2063] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(283), 1,
      anon_sym_LT,
    ACTIONS(281), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2078] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(249), 1,
      sym_attribute_name,
    ACTIONS(247), 6,
      anon_sym_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [2093] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(327), 1,
      anon_sym_LT,
    ACTIONS(325), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2108] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(291), 1,
      anon_sym_LT,
    ACTIONS(289), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2123] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(331), 1,
      anon_sym_LT,
    ACTIONS(329), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2138] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(335), 1,
      anon_sym_LT,
    ACTIONS(333), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2153] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(327), 1,
      anon_sym_LT,
    ACTIONS(325), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2168] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(323), 1,
      anon_sym_LT,
    ACTIONS(321), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2183] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(263), 1,
      anon_sym_LT,
    ACTIONS(261), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2198] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(319), 1,
      anon_sym_LT,
    ACTIONS(317), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2213] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(335), 1,
      anon_sym_LT,
    ACTIONS(333), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2228] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(311), 1,
      anon_sym_LT,
    ACTIONS(309), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2243] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(253), 1,
      sym_attribute_name,
    ACTIONS(251), 6,
      anon_sym_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [2258] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(257), 1,
      sym_attribute_name,
    ACTIONS(255), 6,
      anon_sym_GT,
      anon_sym_COLON2,
      anon_sym_DOT,
      anon_sym_AT,
      anon_sym_POUND,
      sym_directive_name,
  [2273] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(331), 1,
      anon_sym_LT,
    ACTIONS(329), 6,
      sym__text_fragment,
      ts_builtin_sym_end,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2288] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(303), 1,
      anon_sym_LT,
    ACTIONS(301), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2303] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(299), 1,
      anon_sym_LT,
    ACTIONS(297), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2318] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(295), 1,
      anon_sym_LT,
    ACTIONS(293), 6,
      sym__implicit_end_tag,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2333] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(339), 1,
      anon_sym_LT,
    ACTIONS(337), 5,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2347] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(343), 1,
      anon_sym_LT,
    ACTIONS(341), 5,
      sym__text_fragment,
      anon_sym_LT_BANG,
      anon_sym_LT_SLASH,
      sym_entity,
      anon_sym_LBRACE_LBRACE,
  [2361] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(345), 1,
      sym_attribute_value,
    ACTIONS(347), 1,
      anon_sym_SQUOTE,
    ACTIONS(349), 1,
      anon_sym_DQUOTE,
    STATE(57), 1,
      sym_quoted_attribute_value,
  [2377] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(347), 1,
      anon_sym_SQUOTE,
    ACTIONS(349), 1,
      anon_sym_DQUOTE,
    ACTIONS(351), 1,
      sym_attribute_value,
    STATE(50), 1,
      sym_quoted_attribute_value,
  [2393] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(353), 1,
      sym__start_tag_name,
    ACTIONS(355), 1,
      sym__script_start_tag_name,
    ACTIONS(357), 1,
      sym__style_start_tag_name,
    ACTIONS(359), 1,
      sym__template_start_tag_name,
  [2409] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(361), 1,
      sym_attribute_value,
    ACTIONS(363), 1,
      anon_sym_SQUOTE,
    ACTIONS(365), 1,
      anon_sym_DQUOTE,
    STATE(98), 1,
      sym_quoted_attribute_value,
  [2425] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(363), 1,
      anon_sym_SQUOTE,
    ACTIONS(365), 1,
      anon_sym_DQUOTE,
    ACTIONS(367), 1,
      sym_attribute_value,
    STATE(97), 1,
      sym_quoted_attribute_value,
  [2441] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(363), 1,
      anon_sym_SQUOTE,
    ACTIONS(365), 1,
      anon_sym_DQUOTE,
    ACTIONS(369), 1,
      sym_attribute_value,
    STATE(60), 1,
      sym_quoted_attribute_value,
  [2457] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(347), 1,
      anon_sym_SQUOTE,
    ACTIONS(349), 1,
      anon_sym_DQUOTE,
    ACTIONS(371), 1,
      sym_attribute_value,
    STATE(58), 1,
      sym_quoted_attribute_value,
  [2473] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(363), 1,
      anon_sym_SQUOTE,
    ACTIONS(365), 1,
      anon_sym_DQUOTE,
    ACTIONS(373), 1,
      sym_attribute_value,
    STATE(74), 1,
      sym_quoted_attribute_value,
  [2489] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(363), 1,
      anon_sym_SQUOTE,
    ACTIONS(365), 1,
      anon_sym_DQUOTE,
    ACTIONS(375), 1,
      sym_attribute_value,
    STATE(65), 1,
      sym_quoted_attribute_value,
  [2505] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(355), 1,
      sym__script_start_tag_name,
    ACTIONS(357), 1,
      sym__style_start_tag_name,
    ACTIONS(377), 1,
      sym__start_tag_name,
    ACTIONS(379), 1,
      sym__template_start_tag_name,
  [2521] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(347), 1,
      anon_sym_SQUOTE,
    ACTIONS(349), 1,
      anon_sym_DQUOTE,
    ACTIONS(381), 1,
      sym_attribute_value,
    STATE(51), 1,
      sym_quoted_attribute_value,
  [2537] = 5,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(347), 1,
      anon_sym_SQUOTE,
    ACTIONS(349), 1,
      anon_sym_DQUOTE,
    ACTIONS(383), 1,
      sym_attribute_value,
    STATE(53), 1,
      sym_quoted_attribute_value,
  [2553] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(385), 1,
      anon_sym_LT_SLASH,
    ACTIONS(387), 1,
      sym_raw_text,
    STATE(92), 1,
      sym_end_tag,
  [2566] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(389), 1,
      sym_directive_value,
    ACTIONS(391), 1,
      anon_sym_LBRACK,
    STATE(35), 1,
      sym_dynamic_directive_value,
  [2579] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(393), 1,
      sym_directive_value,
    ACTIONS(395), 1,
      anon_sym_LBRACK,
    STATE(28), 1,
      sym_dynamic_directive_value,
  [2592] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(391), 1,
      anon_sym_LBRACK,
    ACTIONS(397), 1,
      sym_directive_value,
    STATE(48), 1,
      sym_dynamic_directive_value,
  [2605] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(399), 1,
      anon_sym_LT_SLASH,
    ACTIONS(401), 1,
      sym_raw_text,
    STATE(84), 1,
      sym_end_tag,
  [2618] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(399), 1,
      anon_sym_LT_SLASH,
    ACTIONS(403), 1,
      sym_raw_text,
    STATE(61), 1,
      sym_end_tag,
  [2631] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(385), 1,
      anon_sym_LT_SLASH,
    ACTIONS(405), 1,
      sym_raw_text,
    STATE(93), 1,
      sym_end_tag,
  [2644] = 4,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(395), 1,
      anon_sym_LBRACK,
    ACTIONS(407), 1,
      sym_directive_value,
    STATE(36), 1,
      sym_dynamic_directive_value,
  [2657] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(409), 1,
      anon_sym_SQUOTE,
    ACTIONS(411), 1,
      aux_sym_quoted_attribute_value_token1,
  [2667] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(413), 1,
      anon_sym_RBRACK,
    ACTIONS(415), 1,
      sym_dynamic_directive_inner_value,
  [2677] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(417), 1,
      sym__end_tag_name,
    ACTIONS(419), 1,
      sym_erroneous_end_tag_name,
  [2687] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(399), 1,
      anon_sym_LT_SLASH,
    STATE(62), 1,
      sym_end_tag,
  [2697] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(417), 1,
      sym__end_tag_name,
    ACTIONS(421), 1,
      sym_erroneous_end_tag_name,
  [2707] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(399), 1,
      anon_sym_LT_SLASH,
    STATE(83), 1,
      sym_end_tag,
  [2717] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(419), 1,
      sym_erroneous_end_tag_name,
    ACTIONS(423), 1,
      sym__end_tag_name,
  [2727] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(425), 1,
      anon_sym_DQUOTE,
    ACTIONS(427), 1,
      aux_sym_quoted_attribute_value_token2,
  [2737] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(429), 1,
      anon_sym_RBRACE_RBRACE,
    ACTIONS(431), 1,
      sym__interpolation_text,
  [2747] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(409), 1,
      anon_sym_DQUOTE,
    ACTIONS(433), 1,
      aux_sym_quoted_attribute_value_token2,
  [2757] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(425), 1,
      anon_sym_SQUOTE,
    ACTIONS(435), 1,
      aux_sym_quoted_attribute_value_token1,
  [2767] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(437), 2,
      sym_raw_text,
      anon_sym_LT_SLASH,
  [2775] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(439), 2,
      sym_raw_text,
      anon_sym_LT_SLASH,
  [2783] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(441), 2,
      sym_raw_text,
      anon_sym_LT_SLASH,
  [2791] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(443), 1,
      anon_sym_RBRACK,
    ACTIONS(445), 1,
      sym_dynamic_directive_inner_value,
  [2801] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(421), 1,
      sym_erroneous_end_tag_name,
    ACTIONS(423), 1,
      sym__end_tag_name,
  [2811] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(447), 2,
      sym_raw_text,
      anon_sym_LT_SLASH,
  [2819] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(385), 1,
      anon_sym_LT_SLASH,
    STATE(78), 1,
      sym_end_tag,
  [2829] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(385), 1,
      anon_sym_LT_SLASH,
    STATE(69), 1,
      sym_end_tag,
  [2839] = 3,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(449), 1,
      anon_sym_RBRACE_RBRACE,
    ACTIONS(451), 1,
      sym__interpolation_text,
  [2849] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(453), 1,
      anon_sym_RBRACK,
  [2856] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(455), 1,
      aux_sym_doctype_token1,
  [2863] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(421), 1,
      sym_erroneous_end_tag_name,
  [2870] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(457), 1,
      ts_builtin_sym_end,
  [2877] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(459), 1,
      anon_sym_GT,
  [2884] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(461), 1,
      sym_directive_modifier,
  [2891] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(463), 1,
      anon_sym_RBRACE_RBRACE,
  [2898] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(465), 1,
      anon_sym_GT,
  [2905] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(467), 1,
      anon_sym_SQUOTE,
  [2912] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(469), 1,
      sym_directive_modifier,
  [2919] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(471), 1,
      aux_sym_doctype_token1,
  [2926] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(473), 1,
      anon_sym_GT,
  [2933] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(475), 1,
      anon_sym_GT,
  [2940] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(477), 1,
      anon_sym_SQUOTE,
  [2947] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(479), 1,
      anon_sym_GT,
  [2954] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(477), 1,
      anon_sym_DQUOTE,
  [2961] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(481), 1,
      anon_sym_RBRACK,
  [2968] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(483), 1,
      sym__doctype,
  [2975] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(423), 1,
      sym__end_tag_name,
  [2982] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(467), 1,
      anon_sym_DQUOTE,
  [2989] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(419), 1,
      sym_erroneous_end_tag_name,
  [2996] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(485), 1,
      anon_sym_RBRACE_RBRACE,
  [3003] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(487), 1,
      anon_sym_GT,
  [3010] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(417), 1,
      sym__end_tag_name,
  [3017] = 2,
    ACTIONS(3), 1,
      sym_comment,
    ACTIONS(489), 1,
      sym__doctype,
};

static const uint32_t ts_small_parse_table_map[] = {
  [SMALL_STATE(2)] = 0,
  [SMALL_STATE(3)] = 55,
  [SMALL_STATE(4)] = 110,
  [SMALL_STATE(5)] = 165,
  [SMALL_STATE(6)] = 220,
  [SMALL_STATE(7)] = 272,
  [SMALL_STATE(8)] = 324,
  [SMALL_STATE(9)] = 376,
  [SMALL_STATE(10)] = 428,
  [SMALL_STATE(11)] = 480,
  [SMALL_STATE(12)] = 532,
  [SMALL_STATE(13)] = 584,
  [SMALL_STATE(14)] = 615,
  [SMALL_STATE(15)] = 646,
  [SMALL_STATE(16)] = 681,
  [SMALL_STATE(17)] = 712,
  [SMALL_STATE(18)] = 743,
  [SMALL_STATE(19)] = 774,
  [SMALL_STATE(20)] = 805,
  [SMALL_STATE(21)] = 836,
  [SMALL_STATE(22)] = 865,
  [SMALL_STATE(23)] = 896,
  [SMALL_STATE(24)] = 927,
  [SMALL_STATE(25)] = 957,
  [SMALL_STATE(26)] = 985,
  [SMALL_STATE(27)] = 1013,
  [SMALL_STATE(28)] = 1047,
  [SMALL_STATE(29)] = 1075,
  [SMALL_STATE(30)] = 1103,
  [SMALL_STATE(31)] = 1131,
  [SMALL_STATE(32)] = 1159,
  [SMALL_STATE(33)] = 1182,
  [SMALL_STATE(34)] = 1207,
  [SMALL_STATE(35)] = 1230,
  [SMALL_STATE(36)] = 1257,
  [SMALL_STATE(37)] = 1275,
  [SMALL_STATE(38)] = 1293,
  [SMALL_STATE(39)] = 1311,
  [SMALL_STATE(40)] = 1335,
  [SMALL_STATE(41)] = 1353,
  [SMALL_STATE(42)] = 1375,
  [SMALL_STATE(43)] = 1397,
  [SMALL_STATE(44)] = 1416,
  [SMALL_STATE(45)] = 1433,
  [SMALL_STATE(46)] = 1452,
  [SMALL_STATE(47)] = 1471,
  [SMALL_STATE(48)] = 1488,
  [SMALL_STATE(49)] = 1505,
  [SMALL_STATE(50)] = 1522,
  [SMALL_STATE(51)] = 1538,
  [SMALL_STATE(52)] = 1554,
  [SMALL_STATE(53)] = 1572,
  [SMALL_STATE(54)] = 1588,
  [SMALL_STATE(55)] = 1604,
  [SMALL_STATE(56)] = 1622,
  [SMALL_STATE(57)] = 1638,
  [SMALL_STATE(58)] = 1654,
  [SMALL_STATE(59)] = 1670,
  [SMALL_STATE(60)] = 1688,
  [SMALL_STATE(61)] = 1703,
  [SMALL_STATE(62)] = 1718,
  [SMALL_STATE(63)] = 1733,
  [SMALL_STATE(64)] = 1748,
  [SMALL_STATE(65)] = 1763,
  [SMALL_STATE(66)] = 1778,
  [SMALL_STATE(67)] = 1793,
  [SMALL_STATE(68)] = 1808,
  [SMALL_STATE(69)] = 1823,
  [SMALL_STATE(70)] = 1838,
  [SMALL_STATE(71)] = 1853,
  [SMALL_STATE(72)] = 1868,
  [SMALL_STATE(73)] = 1883,
  [SMALL_STATE(74)] = 1898,
  [SMALL_STATE(75)] = 1913,
  [SMALL_STATE(76)] = 1928,
  [SMALL_STATE(77)] = 1943,
  [SMALL_STATE(78)] = 1958,
  [SMALL_STATE(79)] = 1973,
  [SMALL_STATE(80)] = 1988,
  [SMALL_STATE(81)] = 2003,
  [SMALL_STATE(82)] = 2018,
  [SMALL_STATE(83)] = 2033,
  [SMALL_STATE(84)] = 2048,
  [SMALL_STATE(85)] = 2063,
  [SMALL_STATE(86)] = 2078,
  [SMALL_STATE(87)] = 2093,
  [SMALL_STATE(88)] = 2108,
  [SMALL_STATE(89)] = 2123,
  [SMALL_STATE(90)] = 2138,
  [SMALL_STATE(91)] = 2153,
  [SMALL_STATE(92)] = 2168,
  [SMALL_STATE(93)] = 2183,
  [SMALL_STATE(94)] = 2198,
  [SMALL_STATE(95)] = 2213,
  [SMALL_STATE(96)] = 2228,
  [SMALL_STATE(97)] = 2243,
  [SMALL_STATE(98)] = 2258,
  [SMALL_STATE(99)] = 2273,
  [SMALL_STATE(100)] = 2288,
  [SMALL_STATE(101)] = 2303,
  [SMALL_STATE(102)] = 2318,
  [SMALL_STATE(103)] = 2333,
  [SMALL_STATE(104)] = 2347,
  [SMALL_STATE(105)] = 2361,
  [SMALL_STATE(106)] = 2377,
  [SMALL_STATE(107)] = 2393,
  [SMALL_STATE(108)] = 2409,
  [SMALL_STATE(109)] = 2425,
  [SMALL_STATE(110)] = 2441,
  [SMALL_STATE(111)] = 2457,
  [SMALL_STATE(112)] = 2473,
  [SMALL_STATE(113)] = 2489,
  [SMALL_STATE(114)] = 2505,
  [SMALL_STATE(115)] = 2521,
  [SMALL_STATE(116)] = 2537,
  [SMALL_STATE(117)] = 2553,
  [SMALL_STATE(118)] = 2566,
  [SMALL_STATE(119)] = 2579,
  [SMALL_STATE(120)] = 2592,
  [SMALL_STATE(121)] = 2605,
  [SMALL_STATE(122)] = 2618,
  [SMALL_STATE(123)] = 2631,
  [SMALL_STATE(124)] = 2644,
  [SMALL_STATE(125)] = 2657,
  [SMALL_STATE(126)] = 2667,
  [SMALL_STATE(127)] = 2677,
  [SMALL_STATE(128)] = 2687,
  [SMALL_STATE(129)] = 2697,
  [SMALL_STATE(130)] = 2707,
  [SMALL_STATE(131)] = 2717,
  [SMALL_STATE(132)] = 2727,
  [SMALL_STATE(133)] = 2737,
  [SMALL_STATE(134)] = 2747,
  [SMALL_STATE(135)] = 2757,
  [SMALL_STATE(136)] = 2767,
  [SMALL_STATE(137)] = 2775,
  [SMALL_STATE(138)] = 2783,
  [SMALL_STATE(139)] = 2791,
  [SMALL_STATE(140)] = 2801,
  [SMALL_STATE(141)] = 2811,
  [SMALL_STATE(142)] = 2819,
  [SMALL_STATE(143)] = 2829,
  [SMALL_STATE(144)] = 2839,
  [SMALL_STATE(145)] = 2849,
  [SMALL_STATE(146)] = 2856,
  [SMALL_STATE(147)] = 2863,
  [SMALL_STATE(148)] = 2870,
  [SMALL_STATE(149)] = 2877,
  [SMALL_STATE(150)] = 2884,
  [SMALL_STATE(151)] = 2891,
  [SMALL_STATE(152)] = 2898,
  [SMALL_STATE(153)] = 2905,
  [SMALL_STATE(154)] = 2912,
  [SMALL_STATE(155)] = 2919,
  [SMALL_STATE(156)] = 2926,
  [SMALL_STATE(157)] = 2933,
  [SMALL_STATE(158)] = 2940,
  [SMALL_STATE(159)] = 2947,
  [SMALL_STATE(160)] = 2954,
  [SMALL_STATE(161)] = 2961,
  [SMALL_STATE(162)] = 2968,
  [SMALL_STATE(163)] = 2975,
  [SMALL_STATE(164)] = 2982,
  [SMALL_STATE(165)] = 2989,
  [SMALL_STATE(166)] = 2996,
  [SMALL_STATE(167)] = 3003,
  [SMALL_STATE(168)] = 3010,
  [SMALL_STATE(169)] = 3017,
};

static const TSParseActionEntry ts_parse_actions[] = {
  [0] = {.entry = {.count = 0, .reusable = false}},
  [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(),
  [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(),
  [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_document, 0),
  [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162),
  [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(114),
  [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147),
  [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6),
  [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144),
  [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72),
  [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169),
  [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(107),
  [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127),
  [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10),
  [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133),
  [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102),
  [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88),
  [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131),
  [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73),
  [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3),
  [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87),
  [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2),
  [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91),
  [45] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_document, 1),
  [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7),
  [49] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2),
  [51] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2), SHIFT_REPEAT(162),
  [54] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_document_repeat1, 2), SHIFT_REPEAT(114),
  [57] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2), SHIFT_REPEAT(147),
  [60] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2), SHIFT_REPEAT(7),
  [63] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2), SHIFT_REPEAT(144),
  [66] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2), SHIFT_REPEAT(72),
  [69] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140),
  [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129),
  [73] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2), SHIFT_REPEAT(169),
  [76] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_document_repeat1, 2), SHIFT_REPEAT(107),
  [79] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2), SHIFT_REPEAT(165),
  [82] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2), SHIFT_REPEAT(10),
  [85] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2), SHIFT_REPEAT(133),
  [88] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2), SHIFT_REPEAT(88),
  [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9),
  [93] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8),
  [95] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80),
  [97] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79),
  [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46),
  [101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124),
  [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17),
  [105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104),
  [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64),
  [109] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_directive_attribute, 1),
  [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115),
  [113] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_directive_attribute, 1),
  [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(124),
  [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150),
  [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63),
  [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119),
  [123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103),
  [125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67),
  [127] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_start_tag_repeat1, 2),
  [129] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_start_tag_repeat1, 2), SHIFT_REPEAT(46),
  [132] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_start_tag_repeat1, 2), SHIFT_REPEAT(124),
  [135] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_start_tag_repeat1, 2), SHIFT_REPEAT(17),
  [138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96),
  [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112),
  [142] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118),
  [144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154),
  [146] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_start_tag_repeat1, 2), SHIFT_REPEAT(59),
  [149] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_start_tag_repeat1, 2), SHIFT_REPEAT(120),
  [152] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_start_tag_repeat1, 2), SHIFT_REPEAT(24),
  [155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136),
  [157] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59),
  [159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120),
  [161] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24),
  [163] = {.entry = {.count = 1, .reusable = false}}, SHIFT(120),
  [165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_directive_attribute, 3),
  [167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105),
  [169] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_directive_attribute, 3),
  [171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137),
  [173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141),
  [175] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138),
  [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_directive_modifiers, 1),
  [179] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_directive_modifiers, 1),
  [181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_directive_attribute_repeat1, 2),
  [183] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_directive_attribute_repeat1, 2),
  [185] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_directive_attribute_repeat1, 2), SHIFT_REPEAT(124),
  [188] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_directive_attribute_repeat1, 2), SHIFT_REPEAT(124),
  [191] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_directive_modifiers_repeat1, 2),
  [193] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_directive_modifiers_repeat1, 2),
  [195] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_directive_modifiers_repeat1, 2), SHIFT_REPEAT(150),
  [198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109),
  [200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dynamic_directive_value, 2),
  [202] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dynamic_directive_value, 2),
  [204] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dynamic_directive_value, 3),
  [206] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dynamic_directive_value, 3),
  [208] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_directive_attribute_repeat1, 2), SHIFT_REPEAT(120),
  [211] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_directive_attribute_repeat1, 2), SHIFT_REPEAT(120),
  [214] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_directive_modifiers_repeat1, 2), SHIFT_REPEAT(154),
  [217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_directive_attribute, 2),
  [219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106),
  [221] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_directive_attribute, 2),
  [223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_directive_attribute, 4),
  [225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111),
  [227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_directive_attribute, 4),
  [229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 1),
  [231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116),
  [233] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_attribute, 1),
  [235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110),
  [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 3),
  [239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_attribute, 3),
  [241] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_quoted_attribute_value, 2),
  [243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_quoted_attribute_value, 2),
  [245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108),
  [247] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_quoted_attribute_value, 3),
  [249] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_quoted_attribute_value, 3),
  [251] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_directive_attribute, 5),
  [253] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_directive_attribute, 5),
  [255] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_directive_attribute, 6),
  [257] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_directive_attribute, 6),
  [259] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113),
  [261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_element, 2),
  [263] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_style_element, 2),
  [265] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_element, 3),
  [267] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_style_element, 3),
  [269] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_start_tag, 4),
  [271] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_start_tag, 4),
  [273] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_closing_tag, 4),
  [275] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_closing_tag, 4),
  [277] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_end_tag, 3),
  [279] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_end_tag, 3),
  [281] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_element, 3),
  [283] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_element, 3),
  [285] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_doctype, 4),
  [287] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_doctype, 4),
  [289] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_text, 1),
  [291] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_text, 1),
  [293] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_element, 3),
  [295] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_element, 3),
  [297] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 3),
  [299] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 3),
  [301] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_erroneous_end_tag, 3),
  [303] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_erroneous_end_tag, 3),
  [305] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_script_element, 3),
  [307] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_script_element, 3),
  [309] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_closing_tag, 3),
  [311] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_closing_tag, 3),
  [313] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_start_tag, 3),
  [315] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_start_tag, 3),
  [317] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_element, 2),
  [319] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_element, 2),
  [321] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_script_element, 2),
  [323] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_script_element, 2),
  [325] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_element, 2),
  [327] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_element, 2),
  [329] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_element, 1),
  [331] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_element, 1),
  [333] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 2),
  [335] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 2),
  [337] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_start_tag, 3),
  [339] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_start_tag, 3),
  [341] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template_start_tag, 4),
  [343] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_template_start_tag, 4),
  [345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57),
  [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135),
  [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132),
  [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50),
  [353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23),
  [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30),
  [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29),
  [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22),
  [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98),
  [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125),
  [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134),
  [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97),
  [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60),
  [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58),
  [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74),
  [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65),
  [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13),
  [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18),
  [381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51),
  [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53),
  [385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168),
  [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142),
  [389] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35),
  [391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139),
  [393] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28),
  [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126),
  [397] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48),
  [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163),
  [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130),
  [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128),
  [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143),
  [407] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36),
  [409] = {.entry = {.count = 1, .reusable = false}}, SHIFT(81),
  [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158),
  [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37),
  [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161),
  [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149),
  [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152),
  [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156),
  [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157),
  [425] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54),
  [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164),
  [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90),
  [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151),
  [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160),
  [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153),
  [437] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_start_tag, 4),
  [439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_style_start_tag, 3),
  [441] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_script_start_tag, 4),
  [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49),
  [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145),
  [447] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_script_start_tag, 3),
  [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95),
  [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166),
  [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47),
  [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159),
  [457] = {.entry = {.count = 1, .reusable = true}},  ACCEPT_INPUT(),
  [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66),
  [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40),
  [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101),
  [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100),
  [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56),
  [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44),
  [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167),
  [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77),
  [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70),
  [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86),
  [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75),
  [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38),
  [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155),
  [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76),
  [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71),
  [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146),
};

enum ts_external_scanner_symbol_identifiers {
  ts_external_token__start_tag_name = 0,
  ts_external_token__script_start_tag_name = 1,
  ts_external_token__style_start_tag_name = 2,
  ts_external_token__end_tag_name = 3,
  ts_external_token_erroneous_end_tag_name = 4,
  ts_external_token_SLASH_GT = 5,
  ts_external_token__implicit_end_tag = 6,
  ts_external_token_raw_text = 7,
  ts_external_token_comment = 8,
  ts_external_token__template_start_tag_name = 9,
  ts_external_token__text_fragment = 10,
  ts_external_token__interpolation_text = 11,
};

static const TSSymbol ts_external_scanner_symbol_map[EXTERNAL_TOKEN_COUNT] = {
  [ts_external_token__start_tag_name] = sym__start_tag_name,
  [ts_external_token__script_start_tag_name] = sym__script_start_tag_name,
  [ts_external_token__style_start_tag_name] = sym__style_start_tag_name,
  [ts_external_token__end_tag_name] = sym__end_tag_name,
  [ts_external_token_erroneous_end_tag_name] = sym_erroneous_end_tag_name,
  [ts_external_token_SLASH_GT] = anon_sym_SLASH_GT,
  [ts_external_token__implicit_end_tag] = sym__implicit_end_tag,
  [ts_external_token_raw_text] = sym_raw_text,
  [ts_external_token_comment] = sym_comment,
  [ts_external_token__template_start_tag_name] = sym__template_start_tag_name,
  [ts_external_token__text_fragment] = sym__text_fragment,
  [ts_external_token__interpolation_text] = sym__interpolation_text,
};

static const bool ts_external_scanner_states[12][EXTERNAL_TOKEN_COUNT] = {
  [1] = {
    [ts_external_token__start_tag_name] = true,
    [ts_external_token__script_start_tag_name] = true,
    [ts_external_token__style_start_tag_name] = true,
    [ts_external_token__end_tag_name] = true,
    [ts_external_token_erroneous_end_tag_name] = true,
    [ts_external_token_SLASH_GT] = true,
    [ts_external_token__implicit_end_tag] = true,
    [ts_external_token_raw_text] = true,
    [ts_external_token_comment] = true,
    [ts_external_token__template_start_tag_name] = true,
    [ts_external_token__text_fragment] = true,
    [ts_external_token__interpolation_text] = true,
  },
  [2] = {
    [ts_external_token_comment] = true,
    [ts_external_token__text_fragment] = true,
  },
  [3] = {
    [ts_external_token__implicit_end_tag] = true,
    [ts_external_token_comment] = true,
    [ts_external_token__text_fragment] = true,
  },
  [4] = {
    [ts_external_token_SLASH_GT] = true,
    [ts_external_token_comment] = true,
  },
  [5] = {
    [ts_external_token_comment] = true,
  },
  [6] = {
    [ts_external_token__start_tag_name] = true,
    [ts_external_token__script_start_tag_name] = true,
    [ts_external_token__style_start_tag_name] = true,
    [ts_external_token_comment] = true,
    [ts_external_token__template_start_tag_name] = true,
  },
  [7] = {
    [ts_external_token_raw_text] = true,
    [ts_external_token_comment] = true,
  },
  [8] = {
    [ts_external_token__end_tag_name] = true,
    [ts_external_token_erroneous_end_tag_name] = true,
    [ts_external_token_comment] = true,
  },
  [9] = {
    [ts_external_token_comment] = true,
    [ts_external_token__interpolation_text] = true,
  },
  [10] = {
    [ts_external_token_erroneous_end_tag_name] = true,
    [ts_external_token_comment] = true,
  },
  [11] = {
    [ts_external_token__end_tag_name] = true,
    [ts_external_token_comment] = true,
  },
};

#ifdef __cplusplus
extern "C" {
#endif
void *tree_sitter_vue_external_scanner_create(void);
void tree_sitter_vue_external_scanner_destroy(void *);
bool tree_sitter_vue_external_scanner_scan(void *, TSLexer *, const bool *);
unsigned tree_sitter_vue_external_scanner_serialize(void *, char *);
void tree_sitter_vue_external_scanner_deserialize(void *, const char *, unsigned);

#ifdef TREE_SITTER_HIDE_SYMBOLS
#define TS_PUBLIC
#elif defined(_WIN32)
#define TS_PUBLIC __declspec(dllexport)
#else
#define TS_PUBLIC __attribute__((visibility("default")))
#endif

TS_PUBLIC const TSLanguage *tree_sitter_vue() {
  static const TSLanguage language = {
    .version = LANGUAGE_VERSION,
    .symbol_count = SYMBOL_COUNT,
    .alias_count = ALIAS_COUNT,
    .token_count = TOKEN_COUNT,
    .external_token_count = EXTERNAL_TOKEN_COUNT,
    .state_count = STATE_COUNT,
    .large_state_count = LARGE_STATE_COUNT,
    .production_id_count = PRODUCTION_ID_COUNT,
    .field_count = FIELD_COUNT,
    .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH,
    .parse_table = &ts_parse_table[0][0],
    .small_parse_table = ts_small_parse_table,
    .small_parse_table_map = ts_small_parse_table_map,
    .parse_actions = ts_parse_actions,
    .symbol_names = ts_symbol_names,
    .symbol_metadata = ts_symbol_metadata,
    .public_symbol_map = ts_symbol_map,
    .alias_map = ts_non_terminal_alias_map,
    .alias_sequences = &ts_alias_sequences[0][0],
    .lex_modes = ts_lex_modes,
    .lex_fn = ts_lex,
    .external_scanner = {
      &ts_external_scanner_states[0][0],
      ts_external_scanner_symbol_map,
      tree_sitter_vue_external_scanner_create,
      tree_sitter_vue_external_scanner_destroy,
      tree_sitter_vue_external_scanner_scan,
      tree_sitter_vue_external_scanner_serialize,
      tree_sitter_vue_external_scanner_deserialize,
    },
    .primary_state_ids = ts_primary_state_ids,
  };
  return &language;
}
#ifdef __cplusplus
}
#endif
0707010000001F000081A40000000000000000000000016602C55D0000386D000000000000000000000000000000000000003100000000tree-sitter-vue-0+20240326.22bdfa6/src/scanner.c#include "tag.h"
#include "tree_sitter/parser.h"

#include <wctype.h>

enum TokenType {
    START_TAG_NAME,
    SCRIPT_START_TAG_NAME,
    STYLE_START_TAG_NAME,
    END_TAG_NAME,
    ERRONEOUS_END_TAG_NAME,
    SELF_CLOSING_TAG_DELIMITER,
    IMPLICIT_END_TAG,
    RAW_TEXT,
    COMMENT,
    TEMPLATE_START_TAG_NAME,
    TEXT_FRAGMENT,
    INTERPOLATION_TEXT,
};

typedef struct {
    Array(Tag) tags;
} Scanner;

#define MAX(a, b) ((a) > (b) ? (a) : (b))

static inline void advance(TSLexer *lexer) { lexer->advance(lexer, false); }

static inline void skip(TSLexer *lexer) { lexer->advance(lexer, true); }

// #define advance(lexer)                                                                                                 \
//     do {                                                                                                               \
//         printf("advance %c, line: %d\n", lexer->lookahead, __LINE__);                                                  \
//         (lexer->advance)(lexer, false);                                                                                \
//     } while (0)
//
// #define skip(lexer) \
//     do { \
//         printf("skip %c, line: %d\n", lexer->lookahead, __LINE__); \
//         (lexer->advance)(lexer, true); \
//     } while (0)

static unsigned serialize(Scanner *scanner, char *buffer) {
    uint16_t tag_count = scanner->tags.size > UINT16_MAX ? UINT16_MAX : scanner->tags.size;
    uint16_t serialized_tag_count = 0;

    unsigned size = sizeof(tag_count);
    memcpy(&buffer[size], &tag_count, sizeof(tag_count));
    size += sizeof(tag_count);

    for (; serialized_tag_count < tag_count; serialized_tag_count++) {
        Tag tag = scanner->tags.contents[serialized_tag_count];
        if (tag.type == CUSTOM) {
            unsigned name_length = tag.custom_tag_name.size;
            if (name_length > UINT8_MAX) {
                name_length = UINT8_MAX;
            }
            if (size + 2 + name_length >= TREE_SITTER_SERIALIZATION_BUFFER_SIZE) {
                break;
            }
            buffer[size++] = (char)tag.type;
            buffer[size++] = (char)name_length;
            strncpy(&buffer[size], tag.custom_tag_name.contents, name_length);
            size += name_length;
        } else {
            if (size + 1 >= TREE_SITTER_SERIALIZATION_BUFFER_SIZE) {
                break;
            }
            buffer[size++] = (char)tag.type;
        }
    }

    memcpy(&buffer[0], &serialized_tag_count, sizeof(serialized_tag_count));
    return size;
}

static void deserialize(Scanner *scanner, const char *buffer, unsigned length) {
    for (unsigned i = 0; i < scanner->tags.size; i++) {
        tag_free(&scanner->tags.contents[i]);
    }
    array_clear(&scanner->tags);

    if (length > 0) {
        unsigned size = 0;
        uint16_t tag_count = 0;
        uint16_t serialized_tag_count = 0;

        memcpy(&serialized_tag_count, &buffer[size], sizeof(serialized_tag_count));
        size += sizeof(serialized_tag_count);

        memcpy(&tag_count, &buffer[size], sizeof(tag_count));
        size += sizeof(tag_count);

        array_reserve(&scanner->tags, tag_count);
        if (tag_count > 0) {
            unsigned iter = 0;
            for (iter = 0; iter < serialized_tag_count; iter++) {
                Tag tag = tag_new();
                tag.type = (TagType)buffer[size++];
                if (tag.type == CUSTOM) {
                    uint16_t name_length = (uint8_t)buffer[size++];
                    array_reserve(&tag.custom_tag_name, name_length);
                    tag.custom_tag_name.size = name_length;
                    memcpy(tag.custom_tag_name.contents, &buffer[size], name_length);
                    size += name_length;
                }
                array_push(&scanner->tags, tag);
            }
            // add zero tags if we didn't read enough, this is because the
            // buffer had no more room but we held more tags.
            for (; iter < tag_count; iter++) {
                array_push(&scanner->tags, tag_new());
            }
        }
    }
}

static String scan_tag_name(TSLexer *lexer) {
    String tag_name = array_new();
    while (iswalnum(lexer->lookahead) || lexer->lookahead == '-' || lexer->lookahead == ':') {
        array_push(&tag_name, towupper(lexer->lookahead));
        advance(lexer);
    }
    return tag_name;
}

static bool scan_comment(TSLexer *lexer) {
    if (lexer->lookahead != '-') {
        return false;
    }
    advance(lexer);
    if (lexer->lookahead != '-') {
        return false;
    }
    advance(lexer);

    unsigned dashes = 0;
    while (lexer->lookahead) {
        switch (lexer->lookahead) {
            case '-':
                ++dashes;
                break;
            case '>':
                if (dashes >= 2) {
                    lexer->result_symbol = COMMENT;
                    advance(lexer);
                    lexer->mark_end(lexer);
                    return true;
                }
            default:
                dashes = 0;
        }
        advance(lexer);
    }
    return false;
}

static bool scan_raw_text(Scanner *scanner, TSLexer *lexer) {
    if (scanner->tags.size == 0) {
        return false;
    }

    lexer->mark_end(lexer);

    const char *end_delimiter = array_back(&scanner->tags)->type == SCRIPT ? "</SCRIPT" : "</STYLE";

    unsigned delimiter_index = 0;
    while (lexer->lookahead) {
        if (towupper(lexer->lookahead) == end_delimiter[delimiter_index]) {
            delimiter_index++;
            if (delimiter_index == strlen(end_delimiter)) {
                break;
            }
            advance(lexer);
        } else {
            delimiter_index = 0;
            advance(lexer);
            lexer->mark_end(lexer);
        }
    }

    lexer->result_symbol = RAW_TEXT;
    return true;
}

static inline void pop_tag(Scanner *scanner) {
    Tag popped_tag = array_pop(&scanner->tags);
    tag_free(&popped_tag);
}

static bool scan_implicit_end_tag(Scanner *scanner, TSLexer *lexer) {
    Tag *parent = scanner->tags.size == 0 ? NULL : array_back(&scanner->tags);

    bool is_closing_tag = false;
    if (lexer->lookahead == '/') {
        is_closing_tag = true;
        advance(lexer);
    } else {
        if (parent && tag_is_void(parent)) {
            pop_tag(scanner);
            lexer->result_symbol = IMPLICIT_END_TAG;
            return true;
        }
    }

    String tag_name = scan_tag_name(lexer);
    if (tag_name.size == 0 && !lexer->eof(lexer)) {
        array_delete(&tag_name);
        return false;
    }

    Tag next_tag = tag_for_name(tag_name);

    if (is_closing_tag) {
        // The tag correctly closes the topmost element on the stack
        if (scanner->tags.size > 0 && tag_eq(array_back(&scanner->tags), &next_tag)) {
            tag_free(&next_tag);
            return false;
        }

        // Otherwise, dig deeper and queue implicit end tags (to be nice in
        // the case of malformed HTML)
        for (unsigned i = scanner->tags.size; i > 0; i--) {
            if (scanner->tags.contents[i - 1].type == next_tag.type) {
                pop_tag(scanner);
                lexer->result_symbol = IMPLICIT_END_TAG;
                tag_free(&next_tag);
                return true;
            }
        }
    } else if (parent &&
               (!tag_can_contain(parent, &next_tag) ||
                ((parent->type == HTML || parent->type == HEAD || parent->type == BODY) && lexer->eof(lexer)))) {
        pop_tag(scanner);
        lexer->result_symbol = IMPLICIT_END_TAG;
        tag_free(&next_tag);
        return true;
    }

    tag_free(&next_tag);
    return false;
}

static bool scan_start_tag_name(Scanner *scanner, TSLexer *lexer) {
    String tag_name = scan_tag_name(lexer);

    if (tag_name.size == 0) {
        array_delete(&tag_name);
        return false;
    }

    Tag tag = tag_for_name(tag_name);
    array_push(&scanner->tags, tag);
    switch (tag.type) {
        case TEMPLATE:
            lexer->result_symbol = TEMPLATE_START_TAG_NAME;
            break;
        case SCRIPT:
            lexer->result_symbol = SCRIPT_START_TAG_NAME;
            break;
        case STYLE:
            lexer->result_symbol = STYLE_START_TAG_NAME;
            break;
        default:
            lexer->result_symbol = START_TAG_NAME;
            break;
    }

    return true;
}

static bool scan_end_tag_name(Scanner *scanner, TSLexer *lexer) {
    String tag_name = scan_tag_name(lexer);

    if (tag_name.size == 0) {
        array_delete(&tag_name);
        return false;
    }

    Tag tag = tag_for_name(tag_name);
    if (scanner->tags.size > 0 && tag_eq(array_back(&scanner->tags), &tag)) {
        pop_tag(scanner);
        lexer->result_symbol = END_TAG_NAME;
    } else {
        lexer->result_symbol = ERRONEOUS_END_TAG_NAME;
    }

    tag_free(&tag);
    return true;
}

static bool scan_self_closing_tag_delimiter(Scanner *scanner, TSLexer *lexer) {
    advance(lexer);
    if (lexer->lookahead == '>') {
        advance(lexer);
        if (scanner->tags.size > 0) {
            tag_free(&array_pop(&scanner->tags));
            lexer->result_symbol = SELF_CLOSING_TAG_DELIMITER;
        }
        return true;
    }
    return false;
}

static bool scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) {
    bool is_error_recovery = valid_symbols[START_TAG_NAME] && valid_symbols[RAW_TEXT];
    if (!is_error_recovery && lexer->lookahead != '<' &&
        (valid_symbols[TEXT_FRAGMENT] || valid_symbols[INTERPOLATION_TEXT])) {
        bool advanced_once = false;

        if (!valid_symbols[COMMENT]) {
            while (iswspace(lexer->lookahead)) {
                skip(lexer);
            }
        }

        while (!lexer->eof(lexer)) {
            switch (lexer->lookahead) {
                case '<':
                    lexer->mark_end(lexer);
                    advance(lexer);
                    if (iswalpha(lexer->lookahead) || lexer->lookahead == '!' || lexer->lookahead == '?' ||
                        lexer->lookahead == '/') {
                        goto loop_exit;
                    }
                    advanced_once = true;
                    break;

                case '{':
                    lexer->mark_end(lexer);
                    advance(lexer);
                    if (lexer->lookahead == '{') {
                        goto loop_exit;
                    }
                    advanced_once = true;
                    break;

                case '}':
                    if (valid_symbols[INTERPOLATION_TEXT]) {
                        lexer->mark_end(lexer);
                        advance(lexer);
                        if (lexer->lookahead == '}') {
                            lexer->result_symbol = INTERPOLATION_TEXT;
                            return advanced_once;
                        }
                        break;
                    }
                    advance(lexer);
                    advanced_once = true;
                    break;

                case '\n':
                    if (valid_symbols[TEXT_FRAGMENT]) {
                        lexer->mark_end(lexer);
                        while (iswspace(lexer->lookahead)) {
                            if (advanced_once) {
                                advance(lexer);
                            } else {
                                skip(lexer);
                            }
                        }
                        if (lexer->lookahead == '<' || lexer->lookahead == '>') {
                            goto loop_exit;
                        }
                    } else {
                        advance(lexer);
                    }
                    break;

                default:
                    advanced_once |= lexer->lookahead != '\n';
                    advance(lexer);
                    break;
            }
        }

        if (lexer->eof(lexer)) {
            return false;
        }

    loop_exit:
        if (advanced_once) {
            lexer->result_symbol = TEXT_FRAGMENT;
            return true;
        }
    }

    if (valid_symbols[RAW_TEXT] && !valid_symbols[START_TAG_NAME] && !valid_symbols[END_TAG_NAME]) {
        return scan_raw_text(scanner, lexer);
    }

    while (iswspace(lexer->lookahead)) {
        skip(lexer);
    }

    switch (lexer->lookahead) {
        case '<':
            lexer->mark_end(lexer);
            advance(lexer);

            if (lexer->lookahead == '!') {
                advance(lexer);
                return scan_comment(lexer);
            }

            if (valid_symbols[IMPLICIT_END_TAG]) {
                return scan_implicit_end_tag(scanner, lexer);
            }
            break;

        case '\0':
            if (valid_symbols[IMPLICIT_END_TAG]) {
                return scan_implicit_end_tag(scanner, lexer);
            }
            break;

        case '/':
            if (valid_symbols[SELF_CLOSING_TAG_DELIMITER]) {
                return scan_self_closing_tag_delimiter(scanner, lexer);
            }
            break;

        default:
            if ((valid_symbols[START_TAG_NAME] || valid_symbols[END_TAG_NAME]) && !valid_symbols[RAW_TEXT]) {
                return valid_symbols[START_TAG_NAME] ? scan_start_tag_name(scanner, lexer)
                                                     : scan_end_tag_name(scanner, lexer);
            }
    }

    return false;
}

void *tree_sitter_vue_external_scanner_create() {
    Scanner *scanner = (Scanner *)ts_calloc(1, sizeof(Scanner));
    return scanner;
}

bool tree_sitter_vue_external_scanner_scan(void *payload, TSLexer *lexer, const bool *valid_symbols) {
    Scanner *scanner = (Scanner *)payload;
    return scan(scanner, lexer, valid_symbols);
}

unsigned tree_sitter_vue_external_scanner_serialize(void *payload, char *buffer) {
    Scanner *scanner = (Scanner *)payload;
    return serialize(scanner, buffer);
}

void tree_sitter_vue_external_scanner_deserialize(void *payload, const char *buffer, unsigned length) {
    Scanner *scanner = (Scanner *)payload;
    deserialize(scanner, buffer, length);
}

void tree_sitter_vue_external_scanner_destroy(void *payload) {
    Scanner *scanner = (Scanner *)payload;
    for (unsigned i = 0; i < scanner->tags.size; i++) {
        tag_free(array_get(&scanner->tags, i));
    }
    array_delete(&scanner->tags);
    ts_free(scanner);
}
07070100000020000081A40000000000000000000000016602C55D00002076000000000000000000000000000000000000002D00000000tree-sitter-vue-0+20240326.22bdfa6/src/tag.h#include "tree_sitter/array.h"

#include <string.h>

typedef enum {
    AREA,
    BASE,
    BASEFONT,
    BGSOUND,
    BR,
    COL,
    COMMAND,
    EMBED,
    FRAME,
    HR,
    IMAGE,
    IMG,
    INPUT,
    ISINDEX,
    KEYGEN,
    LINK,
    MENUITEM,
    META,
    NEXTID,
    PARAM,
    SOURCE,
    TRACK,
    WBR,
    END_OF_VOID_TAGS,

    A,
    ABBR,
    ADDRESS,
    ARTICLE,
    ASIDE,
    AUDIO,
    B,
    BDI,
    BDO,
    BLOCKQUOTE,
    BODY,
    BUTTON,
    CANVAS,
    CAPTION,
    CITE,
    CODE,
    COLGROUP,
    DATA,
    DATALIST,
    DD,
    DEL,
    DETAILS,
    DFN,
    DIALOG,
    DIV,
    DL,
    DT,
    EM,
    FIELDSET,
    FIGCAPTION,
    FIGURE,
    FOOTER,
    FORM,
    H1,
    H2,
    H3,
    H4,
    H5,
    H6,
    HEAD,
    HEADER,
    HGROUP,
    HTML,
    I,
    IFRAME,
    INS,
    KBD,
    LABEL,
    LEGEND,
    LI,
    MAIN,
    MAP,
    MARK,
    MATH,
    MENU,
    METER,
    NAV,
    NOSCRIPT,
    OBJECT,
    OL,
    OPTGROUP,
    OPTION,
    OUTPUT,
    P,
    PICTURE,
    PRE,
    PROGRESS,
    Q,
    RB,
    RP,
    RT,
    RTC,
    RUBY,
    S,
    SAMP,
    SCRIPT,
    SECTION,
    SELECT,
    SLOT,
    SMALL,
    SPAN,
    STRONG,
    STYLE,
    SUB,
    SUMMARY,
    SUP,
    SVG,
    TABLE,
    TBODY,
    TD,
    TEMPLATE,
    TEXTAREA,
    TFOOT,
    TH,
    THEAD,
    TIME,
    TITLE,
    TR,
    U,
    UL,
    VAR,
    VIDEO,

    CUSTOM,

    END_,
} TagType;

typedef Array(char) String;

typedef struct {
    char tag_name[16];
    TagType tag_type;
} TagMapEntry;

typedef struct {
    TagType type;
    String custom_tag_name;
} Tag;

static const TagMapEntry TAG_TYPES_BY_TAG_NAME[126] = {
    {"AREA",       AREA      },
    {"BASE",       BASE      },
    {"BASEFONT",   BASEFONT  },
    {"BGSOUND",    BGSOUND   },
    {"BR",         BR        },
    {"COL",        COL       },
    {"COMMAND",    COMMAND   },
    {"EMBED",      EMBED     },
    {"FRAME",      FRAME     },
    {"HR",         HR        },
    {"IMAGE",      IMAGE     },
    {"IMG",        IMG       },
    {"INPUT",      INPUT     },
    {"ISINDEX",    ISINDEX   },
    {"KEYGEN",     KEYGEN    },
    {"LINK",       LINK      },
    {"MENUITEM",   MENUITEM  },
    {"META",       META      },
    {"NEXTID",     NEXTID    },
    {"PARAM",      PARAM     },
    {"SOURCE",     SOURCE    },
    {"TRACK",      TRACK     },
    {"WBR",        WBR       },
    {"A",          A         },
    {"ABBR",       ABBR      },
    {"ADDRESS",    ADDRESS   },
    {"ARTICLE",    ARTICLE   },
    {"ASIDE",      ASIDE     },
    {"AUDIO",      AUDIO     },
    {"B",          B         },
    {"BDI",        BDI       },
    {"BDO",        BDO       },
    {"BLOCKQUOTE", BLOCKQUOTE},
    {"BODY",       BODY      },
    {"BUTTON",     BUTTON    },
    {"CANVAS",     CANVAS    },
    {"CAPTION",    CAPTION   },
    {"CITE",       CITE      },
    {"CODE",       CODE      },
    {"COLGROUP",   COLGROUP  },
    {"DATA",       DATA      },
    {"DATALIST",   DATALIST  },
    {"DD",         DD        },
    {"DEL",        DEL       },
    {"DETAILS",    DETAILS   },
    {"DFN",        DFN       },
    {"DIALOG",     DIALOG    },
    {"DIV",        DIV       },
    {"DL",         DL        },
    {"DT",         DT        },
    {"EM",         EM        },
    {"FIELDSET",   FIELDSET  },
    {"FIGCAPTION", FIGCAPTION},
    {"FIGURE",     FIGURE    },
    {"FOOTER",     FOOTER    },
    {"FORM",       FORM      },
    {"H1",         H1        },
    {"H2",         H2        },
    {"H3",         H3        },
    {"H4",         H4        },
    {"H5",         H5        },
    {"H6",         H6        },
    {"HEAD",       HEAD      },
    {"HEADER",     HEADER    },
    {"HGROUP",     HGROUP    },
    {"HTML",       HTML      },
    {"I",          I         },
    {"IFRAME",     IFRAME    },
    {"INS",        INS       },
    {"KBD",        KBD       },
    {"LABEL",      LABEL     },
    {"LEGEND",     LEGEND    },
    {"LI",         LI        },
    {"MAIN",       MAIN      },
    {"MAP",        MAP       },
    {"MARK",       MARK      },
    {"MATH",       MATH      },
    {"MENU",       MENU      },
    {"METER",      METER     },
    {"NAV",        NAV       },
    {"NOSCRIPT",   NOSCRIPT  },
    {"OBJECT",     OBJECT    },
    {"OL",         OL        },
    {"OPTGROUP",   OPTGROUP  },
    {"OPTION",     OPTION    },
    {"OUTPUT",     OUTPUT    },
    {"P",          P         },
    {"PICTURE",    PICTURE   },
    {"PRE",        PRE       },
    {"PROGRESS",   PROGRESS  },
    {"Q",          Q         },
    {"RB",         RB        },
    {"RP",         RP        },
    {"RT",         RT        },
    {"RTC",        RTC       },
    {"RUBY",       RUBY      },
    {"S",          S         },
    {"SAMP",       SAMP      },
    {"SCRIPT",     SCRIPT    },
    {"SECTION",    SECTION   },
    {"SELECT",     SELECT    },
    {"SLOT",       SLOT      },
    {"SMALL",      SMALL     },
    {"SPAN",       SPAN      },
    {"STRONG",     STRONG    },
    {"STYLE",      STYLE     },
    {"SUB",        SUB       },
    {"SUMMARY",    SUMMARY   },
    {"SUP",        SUP       },
    {"SVG",        SVG       },
    {"TABLE",      TABLE     },
    {"TBODY",      TBODY     },
    {"TD",         TD        },
    {"TEMPLATE",   TEMPLATE  },
    {"TEXTAREA",   TEXTAREA  },
    {"TFOOT",      TFOOT     },
    {"TH",         TH        },
    {"THEAD",      THEAD     },
    {"TIME",       TIME      },
    {"TITLE",      TITLE     },
    {"TR",         TR        },
    {"U",          U         },
    {"UL",         UL        },
    {"VAR",        VAR       },
    {"VIDEO",      VIDEO     },
    {"CUSTOM",     CUSTOM    },
};

static const TagType TAG_TYPES_NOT_ALLOWED_IN_PARAGRAPHS[] = {
    ADDRESS, ARTICLE, ASIDE, BLOCKQUOTE, DETAILS, DIV,    DL, FIELDSET, FIGCAPTION, FIGURE, FOOTER, FORM, H1,
    H2,      H3,      H4,    H5,         H6,      HEADER, HR, MAIN,     NAV,        OL,     P,      PRE,  SECTION,
};

static TagType tag_type_for_name(const String *tag_name) {
    for (int i = 0; i < 126; i++) {
        const TagMapEntry *entry = &TAG_TYPES_BY_TAG_NAME[i];
        if (strlen(entry->tag_name) == tag_name->size &&
            memcmp(tag_name->contents, entry->tag_name, tag_name->size) == 0) {
            return entry->tag_type;
        }
    }
    return CUSTOM;
}

static inline Tag tag_new() {
    Tag tag;
    tag.type = END_;
    tag.custom_tag_name = (String)array_new();
    return tag;
}

static inline Tag tag_for_name(String name) {
    Tag tag = tag_new();
    tag.type = tag_type_for_name(&name);
    if (tag.type == CUSTOM) {
        tag.custom_tag_name = name;
    } else {
        array_delete(&name);
    }
    return tag;
}

static inline void tag_free(Tag *self) {
    if (self->type == CUSTOM) {
        array_delete(&self->custom_tag_name);
    }
}

static inline bool tag_is_void(const Tag *self) { return self->type < END_OF_VOID_TAGS; }

static inline bool tag_eq(const Tag *self, const Tag *other) {
    if (self->type != other->type) {
        return false;
    }
    if (self->type == CUSTOM) {
        if (self->custom_tag_name.size != other->custom_tag_name.size) {
            return false;
        }
        if (memcmp(self->custom_tag_name.contents, other->custom_tag_name.contents, self->custom_tag_name.size) != 0) {
            return false;
        }
    }
    return true;
}

static bool tag_can_contain(Tag *self, const Tag *other) {
    TagType child = other->type;

    switch (self->type) {
        case LI:
            return child != LI;

        case DT:
        case DD:
            return child != DT && child != DD;

        case P:
            for (int i = 0; i < 26; i++) {
                if (child == TAG_TYPES_NOT_ALLOWED_IN_PARAGRAPHS[i]) {
                    return false;
                }
            }
            return true;

        case COLGROUP:
            return child == COL;

        case RB:
        case RT:
        case RP:
            return child != RB && child != RT && child != RP;

        case OPTGROUP:
            return child != OPTGROUP;

        case TR:
            return child != TR;

        case TD:
        case TH:
            return child != TD && child != TH && child != TR;

        default:
            return true;
    }
}
07070100000021000041ED0000000000000000000000026602C55D00000000000000000000000000000000000000000000003300000000tree-sitter-vue-0+20240326.22bdfa6/src/tree_sitter07070100000022000081A40000000000000000000000016602C55D000003BE000000000000000000000000000000000000003B00000000tree-sitter-vue-0+20240326.22bdfa6/src/tree_sitter/alloc.h#ifndef TREE_SITTER_ALLOC_H_
#define TREE_SITTER_ALLOC_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

// Allow clients to override allocation functions
#ifdef TREE_SITTER_REUSE_ALLOCATOR

extern void *(*ts_current_malloc)(size_t);
extern void *(*ts_current_calloc)(size_t, size_t);
extern void *(*ts_current_realloc)(void *, size_t);
extern void (*ts_current_free)(void *);

#ifndef ts_malloc
#define ts_malloc  ts_current_malloc
#endif
#ifndef ts_calloc
#define ts_calloc  ts_current_calloc
#endif
#ifndef ts_realloc
#define ts_realloc ts_current_realloc
#endif
#ifndef ts_free
#define ts_free    ts_current_free
#endif

#else

#ifndef ts_malloc
#define ts_malloc  malloc
#endif
#ifndef ts_calloc
#define ts_calloc  calloc
#endif
#ifndef ts_realloc
#define ts_realloc realloc
#endif
#ifndef ts_free
#define ts_free    free
#endif

#endif

#ifdef __cplusplus
}
#endif

#endif // TREE_SITTER_ALLOC_H_
07070100000023000081A40000000000000000000000016602C55D000028B4000000000000000000000000000000000000003B00000000tree-sitter-vue-0+20240326.22bdfa6/src/tree_sitter/array.h#ifndef TREE_SITTER_ARRAY_H_
#define TREE_SITTER_ARRAY_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "./alloc.h"

#include <assert.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>

#ifdef _MSC_VER
#pragma warning(disable : 4101)
#elif defined(__GNUC__) || defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
#endif

#define Array(T)       \
  struct {             \
    T *contents;       \
    uint32_t size;     \
    uint32_t capacity; \
  }

/// Initialize an array.
#define array_init(self) \
  ((self)->size = 0, (self)->capacity = 0, (self)->contents = NULL)

/// Create an empty array.
#define array_new() \
  { NULL, 0, 0 }

/// Get a pointer to the element at a given `index` in the array.
#define array_get(self, _index) \
  (assert((uint32_t)(_index) < (self)->size), &(self)->contents[_index])

/// Get a pointer to the first element in the array.
#define array_front(self) array_get(self, 0)

/// Get a pointer to the last element in the array.
#define array_back(self) array_get(self, (self)->size - 1)

/// Clear the array, setting its size to zero. Note that this does not free any
/// memory allocated for the array's contents.
#define array_clear(self) ((self)->size = 0)

/// Reserve `new_capacity` elements of space in the array. If `new_capacity` is
/// less than the array's current capacity, this function has no effect.
#define array_reserve(self, new_capacity) \
  _array__reserve((Array *)(self), array_elem_size(self), new_capacity)

/// Free any memory allocated for this array. Note that this does not free any
/// memory allocated for the array's contents.
#define array_delete(self) _array__delete((Array *)(self))

/// Push a new `element` onto the end of the array.
#define array_push(self, element)                            \
  (_array__grow((Array *)(self), 1, array_elem_size(self)), \
   (self)->contents[(self)->size++] = (element))

/// Increase the array's size by `count` elements.
/// New elements are zero-initialized.
#define array_grow_by(self, count) \
  do { \
    if ((count) == 0) break; \
    _array__grow((Array *)(self), count, array_elem_size(self)); \
    memset((self)->contents + (self)->size, 0, (count) * array_elem_size(self)); \
    (self)->size += (count); \
  } while (0)

/// Append all elements from one array to the end of another.
#define array_push_all(self, other)                                       \
  array_extend((self), (other)->size, (other)->contents)

/// Append `count` elements to the end of the array, reading their values from the
/// `contents` pointer.
#define array_extend(self, count, contents)                    \
  _array__splice(                                               \
    (Array *)(self), array_elem_size(self), (self)->size, \
    0, count,  contents                                        \
  )

/// Remove `old_count` elements from the array starting at the given `index`. At
/// the same index, insert `new_count` new elements, reading their values from the
/// `new_contents` pointer.
#define array_splice(self, _index, old_count, new_count, new_contents)  \
  _array__splice(                                                       \
    (Array *)(self), array_elem_size(self), _index,                \
    old_count, new_count, new_contents                                 \
  )

/// Insert one `element` into the array at the given `index`.
#define array_insert(self, _index, element) \
  _array__splice((Array *)(self), array_elem_size(self), _index, 0, 1, &(element))

/// Remove one element from the array at the given `index`.
#define array_erase(self, _index) \
  _array__erase((Array *)(self), array_elem_size(self), _index)

/// Pop the last element off the array, returning the element by value.
#define array_pop(self) ((self)->contents[--(self)->size])

/// Assign the contents of one array to another, reallocating if necessary.
#define array_assign(self, other) \
  _array__assign((Array *)(self), (const Array *)(other), array_elem_size(self))

/// Swap one array with another
#define array_swap(self, other) \
  _array__swap((Array *)(self), (Array *)(other))

/// Get the size of the array contents
#define array_elem_size(self) (sizeof *(self)->contents)

/// Search a sorted array for a given `needle` value, using the given `compare`
/// callback to determine the order.
///
/// If an existing element is found to be equal to `needle`, then the `index`
/// out-parameter is set to the existing value's index, and the `exists`
/// out-parameter is set to true. Otherwise, `index` is set to an index where
/// `needle` should be inserted in order to preserve the sorting, and `exists`
/// is set to false.
#define array_search_sorted_with(self, compare, needle, _index, _exists) \
  _array__search_sorted(self, 0, compare, , needle, _index, _exists)

/// Search a sorted array for a given `needle` value, using integer comparisons
/// of a given struct field (specified with a leading dot) to determine the order.
///
/// See also `array_search_sorted_with`.
#define array_search_sorted_by(self, field, needle, _index, _exists) \
  _array__search_sorted(self, 0, _compare_int, field, needle, _index, _exists)

/// Insert a given `value` into a sorted array, using the given `compare`
/// callback to determine the order.
#define array_insert_sorted_with(self, compare, value) \
  do { \
    unsigned _index, _exists; \
    array_search_sorted_with(self, compare, &(value), &_index, &_exists); \
    if (!_exists) array_insert(self, _index, value); \
  } while (0)

/// Insert a given `value` into a sorted array, using integer comparisons of
/// a given struct field (specified with a leading dot) to determine the order.
///
/// See also `array_search_sorted_by`.
#define array_insert_sorted_by(self, field, value) \
  do { \
    unsigned _index, _exists; \
    array_search_sorted_by(self, field, (value) field, &_index, &_exists); \
    if (!_exists) array_insert(self, _index, value); \
  } while (0)

// Private

typedef Array(void) Array;

/// This is not what you're looking for, see `array_delete`.
static inline void _array__delete(Array *self) {
  if (self->contents) {
    ts_free(self->contents);
    self->contents = NULL;
    self->size = 0;
    self->capacity = 0;
  }
}

/// This is not what you're looking for, see `array_erase`.
static inline void _array__erase(Array *self, size_t element_size,
                                uint32_t index) {
  assert(index < self->size);
  char *contents = (char *)self->contents;
  memmove(contents + index * element_size, contents + (index + 1) * element_size,
          (self->size - index - 1) * element_size);
  self->size--;
}

/// This is not what you're looking for, see `array_reserve`.
static inline void _array__reserve(Array *self, size_t element_size, uint32_t new_capacity) {
  if (new_capacity > self->capacity) {
    if (self->contents) {
      self->contents = ts_realloc(self->contents, new_capacity * element_size);
    } else {
      self->contents = ts_malloc(new_capacity * element_size);
    }
    self->capacity = new_capacity;
  }
}

/// This is not what you're looking for, see `array_assign`.
static inline void _array__assign(Array *self, const Array *other, size_t element_size) {
  _array__reserve(self, element_size, other->size);
  self->size = other->size;
  memcpy(self->contents, other->contents, self->size * element_size);
}

/// This is not what you're looking for, see `array_swap`.
static inline void _array__swap(Array *self, Array *other) {
  Array swap = *other;
  *other = *self;
  *self = swap;
}

/// This is not what you're looking for, see `array_push` or `array_grow_by`.
static inline void _array__grow(Array *self, uint32_t count, size_t element_size) {
  uint32_t new_size = self->size + count;
  if (new_size > self->capacity) {
    uint32_t new_capacity = self->capacity * 2;
    if (new_capacity < 8) new_capacity = 8;
    if (new_capacity < new_size) new_capacity = new_size;
    _array__reserve(self, element_size, new_capacity);
  }
}

/// This is not what you're looking for, see `array_splice`.
static inline void _array__splice(Array *self, size_t element_size,
                                 uint32_t index, uint32_t old_count,
                                 uint32_t new_count, const void *elements) {
  uint32_t new_size = self->size + new_count - old_count;
  uint32_t old_end = index + old_count;
  uint32_t new_end = index + new_count;
  assert(old_end <= self->size);

  _array__reserve(self, element_size, new_size);

  char *contents = (char *)self->contents;
  if (self->size > old_end) {
    memmove(
      contents + new_end * element_size,
      contents + old_end * element_size,
      (self->size - old_end) * element_size
    );
  }
  if (new_count > 0) {
    if (elements) {
      memcpy(
        (contents + index * element_size),
        elements,
        new_count * element_size
      );
    } else {
      memset(
        (contents + index * element_size),
        0,
        new_count * element_size
      );
    }
  }
  self->size += new_count - old_count;
}

/// A binary search routine, based on Rust's `std::slice::binary_search_by`.
/// This is not what you're looking for, see `array_search_sorted_with` or `array_search_sorted_by`.
#define _array__search_sorted(self, start, compare, suffix, needle, _index, _exists) \
  do { \
    *(_index) = start; \
    *(_exists) = false; \
    uint32_t size = (self)->size - *(_index); \
    if (size == 0) break; \
    int comparison; \
    while (size > 1) { \
      uint32_t half_size = size / 2; \
      uint32_t mid_index = *(_index) + half_size; \
      comparison = compare(&((self)->contents[mid_index] suffix), (needle)); \
      if (comparison <= 0) *(_index) = mid_index; \
      size -= half_size; \
    } \
    comparison = compare(&((self)->contents[*(_index)] suffix), (needle)); \
    if (comparison == 0) *(_exists) = true; \
    else if (comparison < 0) *(_index) += 1; \
  } while (0)

/// Helper macro for the `_sorted_by` routines below. This takes the left (existing)
/// parameter by reference in order to work with the generic sorting function above.
#define _compare_int(a, b) ((int)*(a) - (int)(b))

#ifdef _MSC_VER
#pragma warning(default : 4101)
#elif defined(__GNUC__) || defined(__clang__)
#pragma GCC diagnostic pop
#endif

#ifdef __cplusplus
}
#endif

#endif  // TREE_SITTER_ARRAY_H_
07070100000024000081A40000000000000000000000016602C55D0000159E000000000000000000000000000000000000003C00000000tree-sitter-vue-0+20240326.22bdfa6/src/tree_sitter/parser.h#ifndef TREE_SITTER_PARSER_H_
#define TREE_SITTER_PARSER_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>

#define ts_builtin_sym_error ((TSSymbol)-1)
#define ts_builtin_sym_end 0
#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024

#ifndef TREE_SITTER_API_H_
typedef uint16_t TSStateId;
typedef uint16_t TSSymbol;
typedef uint16_t TSFieldId;
typedef struct TSLanguage TSLanguage;
#endif

typedef struct {
  TSFieldId field_id;
  uint8_t child_index;
  bool inherited;
} TSFieldMapEntry;

typedef struct {
  uint16_t index;
  uint16_t length;
} TSFieldMapSlice;

typedef struct {
  bool visible;
  bool named;
  bool supertype;
} TSSymbolMetadata;

typedef struct TSLexer TSLexer;

struct TSLexer {
  int32_t lookahead;
  TSSymbol result_symbol;
  void (*advance)(TSLexer *, bool);
  void (*mark_end)(TSLexer *);
  uint32_t (*get_column)(TSLexer *);
  bool (*is_at_included_range_start)(const TSLexer *);
  bool (*eof)(const TSLexer *);
};

typedef enum {
  TSParseActionTypeShift,
  TSParseActionTypeReduce,
  TSParseActionTypeAccept,
  TSParseActionTypeRecover,
} TSParseActionType;

typedef union {
  struct {
    uint8_t type;
    TSStateId state;
    bool extra;
    bool repetition;
  } shift;
  struct {
    uint8_t type;
    uint8_t child_count;
    TSSymbol symbol;
    int16_t dynamic_precedence;
    uint16_t production_id;
  } reduce;
  uint8_t type;
} TSParseAction;

typedef struct {
  uint16_t lex_state;
  uint16_t external_lex_state;
} TSLexMode;

typedef union {
  TSParseAction action;
  struct {
    uint8_t count;
    bool reusable;
  } entry;
} TSParseActionEntry;

struct TSLanguage {
  uint32_t version;
  uint32_t symbol_count;
  uint32_t alias_count;
  uint32_t token_count;
  uint32_t external_token_count;
  uint32_t state_count;
  uint32_t large_state_count;
  uint32_t production_id_count;
  uint32_t field_count;
  uint16_t max_alias_sequence_length;
  const uint16_t *parse_table;
  const uint16_t *small_parse_table;
  const uint32_t *small_parse_table_map;
  const TSParseActionEntry *parse_actions;
  const char * const *symbol_names;
  const char * const *field_names;
  const TSFieldMapSlice *field_map_slices;
  const TSFieldMapEntry *field_map_entries;
  const TSSymbolMetadata *symbol_metadata;
  const TSSymbol *public_symbol_map;
  const uint16_t *alias_map;
  const TSSymbol *alias_sequences;
  const TSLexMode *lex_modes;
  bool (*lex_fn)(TSLexer *, TSStateId);
  bool (*keyword_lex_fn)(TSLexer *, TSStateId);
  TSSymbol keyword_capture_token;
  struct {
    const bool *states;
    const TSSymbol *symbol_map;
    void *(*create)(void);
    void (*destroy)(void *);
    bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist);
    unsigned (*serialize)(void *, char *);
    void (*deserialize)(void *, const char *, unsigned);
  } external_scanner;
  const TSStateId *primary_state_ids;
};

/*
 *  Lexer Macros
 */

#ifdef _MSC_VER
#define UNUSED __pragma(warning(suppress : 4101))
#else
#define UNUSED __attribute__((unused))
#endif

#define START_LEXER()           \
  bool result = false;          \
  bool skip = false;            \
  UNUSED                        \
  bool eof = false;             \
  int32_t lookahead;            \
  goto start;                   \
  next_state:                   \
  lexer->advance(lexer, skip);  \
  start:                        \
  skip = false;                 \
  lookahead = lexer->lookahead;

#define ADVANCE(state_value) \
  {                          \
    state = state_value;     \
    goto next_state;         \
  }

#define SKIP(state_value) \
  {                       \
    skip = true;          \
    state = state_value;  \
    goto next_state;      \
  }

#define ACCEPT_TOKEN(symbol_value)     \
  result = true;                       \
  lexer->result_symbol = symbol_value; \
  lexer->mark_end(lexer);

#define END_STATE() return result;

/*
 *  Parse Table Macros
 */

#define SMALL_STATE(id) ((id) - LARGE_STATE_COUNT)

#define STATE(id) id

#define ACTIONS(id) id

#define SHIFT(state_value)            \
  {{                                  \
    .shift = {                        \
      .type = TSParseActionTypeShift, \
      .state = (state_value)          \
    }                                 \
  }}

#define SHIFT_REPEAT(state_value)     \
  {{                                  \
    .shift = {                        \
      .type = TSParseActionTypeShift, \
      .state = (state_value),         \
      .repetition = true              \
    }                                 \
  }}

#define SHIFT_EXTRA()                 \
  {{                                  \
    .shift = {                        \
      .type = TSParseActionTypeShift, \
      .extra = true                   \
    }                                 \
  }}

#define REDUCE(symbol_val, child_count_val, ...) \
  {{                                             \
    .reduce = {                                  \
      .type = TSParseActionTypeReduce,           \
      .symbol = symbol_val,                      \
      .child_count = child_count_val,            \
      __VA_ARGS__                                \
    },                                           \
  }}

#define RECOVER()                    \
  {{                                 \
    .type = TSParseActionTypeRecover \
  }}

#define ACCEPT_INPUT()              \
  {{                                \
    .type = TSParseActionTypeAccept \
  }}

#ifdef __cplusplus
}
#endif

#endif  // TREE_SITTER_PARSER_H_
07070100000025000041ED0000000000000000000000026602C55D00000000000000000000000000000000000000000000002800000000tree-sitter-vue-0+20240326.22bdfa6/test07070100000026000041ED0000000000000000000000026602C55D00000000000000000000000000000000000000000000002F00000000tree-sitter-vue-0+20240326.22bdfa6/test/corpus07070100000027000081A40000000000000000000000016602C55D00002BF6000000000000000000000000000000000000003800000000tree-sitter-vue-0+20240326.22bdfa6/test/corpus/spec.txt================================================================================
Interpolations - Text (https://vuejs.org/v2/guide/syntax.html#Text)
================================================================================

<template>

<span>Message: {{ msg }}</span>
<span v-once>This will never change: {{ msg }}</span>

</template>

--------------------------------------------------------------------------------

(document
  (template_element
    (start_tag
      (tag_name))
    (element
      (start_tag
        (tag_name))
      (text)
      (interpolation
        (raw_text))
      (end_tag
        (tag_name)))
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)))
      (text)
      (interpolation
        (raw_text))
      (end_tag
        (tag_name)))
    (end_tag
      (tag_name))))

================================================================================
Interpolations - Raw HTML (https://vuejs.org/v2/guide/syntax.html#Raw-HTML)
================================================================================

<template>

<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>

</template>

--------------------------------------------------------------------------------

(document
  (template_element
    (start_tag
      (tag_name))
    (element
      (start_tag
        (tag_name))
      (text)
      (interpolation
        (raw_text))
      (end_tag
        (tag_name)))
    (element
      (start_tag
        (tag_name))
      (text)
      (element
        (start_tag
          (tag_name)
          (directive_attribute
            (directive_name)
            (quoted_attribute_value
              (attribute_value))))
        (end_tag
          (tag_name)))
      (end_tag
        (tag_name)))
    (end_tag
      (tag_name))))

================================================================================
Interpolations - Attributes (https://vuejs.org/v2/guide/syntax.html#Attributes)
================================================================================

<template>

<div v-bind:id="dynamicId"></div>
<button v-bind:disabled="isButtonDisabled">Button</button>

</template>

--------------------------------------------------------------------------------

(document
  (template_element
    (start_tag
      (tag_name))
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)
          (directive_value)
          (quoted_attribute_value
            (attribute_value))))
      (end_tag
        (tag_name)))
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)
          (directive_value)
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (end_tag
      (tag_name))))

================================================================================
Interpolations - Using JavaScript Expressions (https://vuejs.org/v2/guide/syntax.html#Using-JavaScript-Expressions)
================================================================================

<template>

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

<div v-bind:id="'list-' + id"></div>

<!-- this is a statement, not an expression: -->
{{ var a = 1 }}

<!-- flow control won't work either, use ternary expressions -->
{{ if (ok) { return message } }}

</template>

--------------------------------------------------------------------------------

(document
  (template_element
    (start_tag
      (tag_name))
    (interpolation
      (raw_text))
    (interpolation
      (raw_text))
    (interpolation
      (raw_text))
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)
          (directive_value)
          (quoted_attribute_value
            (attribute_value))))
      (end_tag
        (tag_name)))
    (comment)
    (interpolation
      (raw_text))
    (comment)
    (interpolation
      (raw_text))
    (end_tag
      (tag_name))))

================================================================================
Directives - Directives (https://vuejs.org/v2/guide/syntax.html#Directives)
================================================================================

<template>

<p v-if="seen">Now you see me</p>

</template>

--------------------------------------------------------------------------------

(document
  (template_element
    (start_tag
      (tag_name))
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (end_tag
      (tag_name))))

================================================================================
Directives - Arguments (https://vuejs.org/v2/guide/syntax.html#Arguments)
================================================================================

<template>

<a v-bind:href="url"> ... </a>
<a v-on:click="doSomething"> ... </a>

</template>

--------------------------------------------------------------------------------

(document
  (template_element
    (start_tag
      (tag_name))
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)
          (directive_value)
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)
          (directive_value)
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (end_tag
      (tag_name))))

================================================================================
Directives - Dynamic Arguments (https://vuejs.org/v2/guide/syntax.html#Dynamic-Arguments)
================================================================================

<template>

<!--
Note that there are some constraints to the argument expression, as explained
in the "Dynamic Argument Expression Constraints" section below.
-->
<a v-bind:[attributeName]="url"> ... </a>
<a v-on:[eventName]="doSomething"> ... </a>

<!-- This will trigger a compiler warning. -->
<a v-bind:['foo' + bar]="value"> ... </a>

</template>

--------------------------------------------------------------------------------

(document
  (template_element
    (start_tag
      (tag_name))
    (comment)
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)
          (dynamic_directive_value
            (dynamic_directive_inner_value))
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)
          (dynamic_directive_value
            (dynamic_directive_inner_value))
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (comment)
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)
          (dynamic_directive_value
            (ERROR
              (UNEXPECTED 'f')
              (UNEXPECTED '+' )))
            (quoted_attribute_value
              (attribute_value))))
        (text)
        (end_tag
          (tag_name)))
      (end_tag
        (tag_name))))

================================================================================
Directives - Modifiers (https://vuejs.org/v2/guide/syntax.html#Modifiers)
================================================================================

<template>

<form v-on:submit.prevent="onSubmit"> ... </form>

</template>

--------------------------------------------------------------------------------

(document
  (template_element
    (start_tag
      (tag_name))
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)
          (directive_value)
          (directive_modifiers
            (directive_modifier))
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (end_tag
      (tag_name))))

================================================================================
Shorthands - v-bind Shorthand (https://vuejs.org/v2/guide/syntax.html#v-bind-Shorthand)
================================================================================

<template>

<!-- full syntax -->
<a v-bind:href="url"> ... </a>

<!-- shorthand -->
<a :href="url"> ... </a>

<!-- shorthand with dynamic argument (2.6.0+) -->
<a :[key]="url"> ... </a>

</template>

--------------------------------------------------------------------------------

(document
  (template_element
    (start_tag
      (tag_name))
    (comment)
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)
          (directive_value)
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (comment)
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_value)
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (comment)
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (dynamic_directive_value
            (dynamic_directive_inner_value))
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (end_tag
      (tag_name))))

================================================================================
Shorthands - v-on Shorthand (https://vuejs.org/v2/guide/syntax.html#v-on-Shorthand)
================================================================================

<template>

<!-- full syntax -->
<a v-on:click="doSomething"> ... </a>

<!-- shorthand -->
<a @click="doSomething"> ... </a>

<!-- shorthand with dynamic argument (2.6.0+) -->
<a @[event]="doSomething"> ... </a>

</template>

--------------------------------------------------------------------------------

(document
  (template_element
    (start_tag
      (tag_name))
    (comment)
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_name)
          (directive_value)
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (comment)
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (directive_value)
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (comment)
    (element
      (start_tag
        (tag_name)
        (directive_attribute
          (dynamic_directive_value
            (dynamic_directive_inner_value))
          (quoted_attribute_value
            (attribute_value))))
      (text)
      (end_tag
        (tag_name)))
    (end_tag
      (tag_name))))
07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!451 blocks
openSUSE Build Service is sponsored by