Repository: tree-sitter-grammars/tree-sitter-yaml (language: python)

Issue:
Stop ignoring rust bindings
This remove the rust bindings from the .gitignore & adds the rust binding files


Discussion / hints:

Fix patch:
diff --git a/.editorconfig b/.editorconfig
index 8354c63..bea35f3 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -3,10 +3,38 @@ root = true
 [*]
 charset = utf-8
 end_of_line = lf
-indent_size = 2
-indent_style = space
+max_line_length = 120
 insert_final_newline = true
 trim_trailing_whitespace = true
 
-[corpus/*]
-trim_trailing_whitespace = false
+[*.{json,toml,yml,gyp}]
+indent_style = space
+indent_size = 2
+
+[*.js]
+indent_style = space
+indent_size = 2
+
+[*.{c,cc,h}]
+indent_style = space
+indent_size = 4
+
+[*.rs]
+indent_style = space
+indent_size = 4
+
+[*.{py,pyi}]
+indent_style = space
+indent_size = 4
+
+[*.swift]
+indent_style = space
+indent_size = 4
+
+[*.go]
+indent_style = tab
+indent_size = 8
+
+[Makefile]
+indent_style = tab
+indent_size = 8
diff --git a/.gitattributes b/.gitattributes
index a668e66..b1d00c1 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,7 +1,14 @@
 * text eol=lf
-*.wasm binary
 
-/src/** linguist-generated
-/src/scanner.cc linguist-generated=false
-/index.js linguist-generated
-/binding.gyp linguist-detectable=false
+src/*.json linguist-generated
+src/parser.c linguist-generated
+src/tree_sitter/* linguist-generated
+
+src/schema.*.c linguist-generated
+schema/*/src/** linguist-generated
+
+bindings/** linguist-generated
+binding.gyp linguist-generated
+setup.py linguist-generated
+Makefile linguist-generated
+Package.swift linguist-generated
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..4c39a33
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,8 @@
+version: 2
+updates:
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "weekly"
+    commit-message:
+      prefix: "ci"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..0aa5415
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,57 @@
+name: CI
+
+on:
+  push:
+    branches: [master]
+    paths:
+      - grammar.js
+      - src/**
+      - test/**
+      - bindings/**
+      - binding.gyp
+  pull_request:
+    paths:
+      - grammar.js
+      - src/**
+      - test/**
+      - bindings/**
+      - binding.gyp
+
+concurrency:
+  group: ${{github.workflow}}-${{github.ref}}
+  cancel-in-progress: true
+
+jobs:
+  test:
+    name: Test parsers
+    runs-on: ${{matrix.os}}
+    strategy:
+      fail-fast: false
+      matrix:
+        os: [ubuntu-latest, windows-latest, macos-14]
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v4
+        with:
+          submodules: true
+      - name: Set up tree-sitter
+        uses: tree-sitter/setup-action/cli@v1
+      - name: Run tests
+        uses: tree-sitter/parser-test-action@v2
+        with:
+          test-rust: ${{runner.os == 'Linux'}}
+      - name: Set up test suite
+        shell: bash
+        run: |-
+          printf '%s\n' examples/*.yaml > "$RUNNER_TEMP/test-files"
+          while read -r file; do
+            printf '%s\n' "$file" >> "$RUNNER_TEMP/test-files"
+            if [[ -f ${file/in.yaml/error} ]]; then
+              printf '%s\n' "$file" >> "$RUNNER_TEMP/invalid-files"
+            fi
+          done < <(find -L examples/yaml-test-suite/name -name in.yaml)
+      - name: Parse test suite
+        uses: tree-sitter/parse-action@v4
+        with:
+          files-list: ${{runner.temp}}/test-files
+          invalid-files-list: ${{runner.temp}}/invalid-files
diff --git a/.github/workflows/fuzz.yml b/.github/workflows/fuzz.yml
new file mode 100644
index 0000000..d84cf38
--- /dev/null
+++ b/.github/workflows/fuzz.yml
@@ -0,0 +1,26 @@
+name: Fuzz
+
+on:
+  push:
+    branches: [master]
+    paths:
+      - src/schema.core.c
+      - src/scanner.c
+  pull_request:
+    paths:
+      - src/schema.core.c
+      - src/scanner.c
+
+concurrency:
+  group: ${{github.workflow}}-${{github.ref}}
+  cancel-in-progress: true
+
+jobs:
+  fuzz:
+    name: Fuzz scanner
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v4
+      - name: Run fuzzer
+        uses: tree-sitter/fuzz-action@v4
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 0000000..84b7752
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,21 @@
+name: Publish package
+
+on:
+  push:
+    tags: ["*"]
+
+jobs:
+  npm:
+    uses: tree-sitter/workflows/.github/workflows/package-npm.yml@main
+    with:
+      package-name: "@tree-sitter-grammars/tree-sitter-yaml"
+    secrets:
+      NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
+  crates:
+    uses: tree-sitter/workflows/.github/workflows/package-crates.yml@main
+    secrets:
+      CARGO_REGISTRY_TOKEN: ${{secrets.CARGO_TOKEN}}
+  pypi:
+    uses: tree-sitter/workflows/.github/workflows/package-pypi.yml@main
+    secrets:
+      PYPI_API_TOKEN: ${{secrets.PYPI_TOKEN}}
diff --git a/.gitignore b/.gitignore
index 39e4380..16d336c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,36 @@
-/build
-/node_modules
+# Rust artifacts
+Cargo.lock
+target/
 
-/bindings/rust
-/Cargo.toml
+# Node artifacts
+build/
+prebuilds/
+node_modules/
+
+# Swift artifacts
+.build/
+Package.resolved
+
+# Go artifacts
+go.sum
+_obj/
+
+# Python artifacts
+.venv/
+dist/
+*.egg-info
+*.whl
+
+# C artifacts
+*.a
+*.so
+*.so.*
+*.dylib
+*.dll
+*.pc
+
+# Grammar volatiles
+dsl.d.ts
+*.wasm
+*.obj
+*.o
diff --git a/.gitmodules b/.gitmodules
index b5303cf..7804057 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,8 +1,5 @@
-[submodule "tree-sitter"]
-	path = tree-sitter
-	url = https://github.com/ikatyang/tree-sitter
-	branch = v0.19.3-custom
 [submodule "yaml-test-suite"]
-	path = yaml-test-suite
+	path = examples/yaml-test-suite
 	url = https://github.com/yaml/yaml-test-suite
 	branch = data
+	shallow = true
diff --git a/.npmignore b/.npmignore
deleted file mode 100644
index e69de29..0000000
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index a192fe5..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-language: rust
-
-rust:
-  - stable
-
-script:
-  - if [ ! -d "./tree-sitter/target/release" ]; then bash ./scripts/setup-tree-sitter.sh; fi
-  - ./tree-sitter/target/release/tree-sitter test
-
-cache:
-  cargo: true
-  directories:
-    - ./tree-sitter
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 475f3ce..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
-
-# [0.5.0](https://github.com/ikatyang/tree-sitter-yaml/compare/v0.4.1...v0.5.0) (2021-04-18)
-
-
-### Features
-
-* expose `anchor_name`, `alias_name`, `&`, and `*` ([#24](https://github.com/ikatyang/tree-sitter-yaml/issues/24)) ([b77b438](https://github.com/ikatyang/tree-sitter-yaml/commit/b77b438))
-
-
-
-## [0.4.1](https://github.com/ikatyang/tree-sitter-yaml/compare/v0.4.0...v0.4.1) (2021-03-21)
-
-
-### Bug Fixes
-
-* add missing binding.gyp ([#21](https://github.com/ikatyang/tree-sitter-yaml/issues/21)) ([5976a87](https://github.com/ikatyang/tree-sitter-yaml/commit/5976a87))
-
-
-
-# [0.4.0](https://github.com/ikatyang/tree-sitter-yaml/compare/v0.3.1...v0.4.0) (2021-03-14)
-
-
-### ⚠ BREAKING CHANGES
-
-* require tree-sitter 0.19+
-
-
-### Features
-
-* upgrade to tree-sitter@0.19.3 ([#19](https://github.com/ikatyang/tree-sitter-yaml/issues/19)) ([32689b6](https://github.com/ikatyang/tree-sitter-yaml/commit/32689b6))
-
-
-
-## [0.3.1](https://github.com/ikatyang/tree-sitter-yaml/compare/v0.3.0...v0.3.1) (2021-01-01)
-
-
-### Bug Fixes
-
-* avoid accessing unowned memory ([#17](https://github.com/ikatyang/tree-sitter-yaml/issues/17)) ([45ecb42](https://github.com/ikatyang/tree-sitter-yaml/commit/45ecb42))
-
-
-
-# [0.3.0](https://github.com/ikatyang/tree-sitter-yaml/compare/v0.2.0...v0.3.0) (2020-10-04)
-
-
-### Features
-
-* support core schema ([#13](https://github.com/ikatyang/tree-sitter-yaml/issues/13)) ([6d74a6b](https://github.com/ikatyang/tree-sitter-yaml/commit/6d74a6b))
-
-
-
-# [0.2.0](https://github.com/ikatyang/tree-sitter-yaml/compare/v0.1.0...v0.2.0) (2020-09-28)
-
-
-### Features
-
-* expose literal tokens as anonymous nodes ([#11](https://github.com/ikatyang/tree-sitter-yaml/issues/11)) ([f75b1f9](https://github.com/ikatyang/tree-sitter-yaml/commit/f75b1f9))
-
-
-
-## 0.1.0 (2019-08-31)
-
-
-### Features
-
-* initial implementation ([f45f18f](https://github.com/ikatyang/tree-sitter-yaml/commit/f45f18f))
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..493704d
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,27 @@
+[package]
+name = "tree-sitter-yaml"
+description = "YAML grammar for tree-sitter"
+version = "0.6.0"
+license = "MIT"
+readme = "README.md"
+keywords = ["incremental", "parsing", "tree-sitter", "yaml"]
+categories = ["parsing", "text-editors"]
+authors = [
+  "Ika <ikatyang@gmail.com>",
+  "Amaan Qureshi <amaanq12@gmail.com>"
+]
+repository = "https://github.com/tree-sitter-grammars/tree-sitter-yaml"
+edition = "2021"
+autoexamples = false
+
+build = "bindings/rust/build.rs"
+include = ["bindings/rust/*", "grammar.js", "queries/*", "src/*"]
+
+[lib]
+path = "bindings/rust/lib.rs"
+
+[dependencies]
+tree-sitter = ">=0.21.0"
+
+[build-dependencies]
+cc = "1.0.92"
diff --git a/LICENSE b/LICENSE
index 7bf071b..262eb46 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,5 @@
-The MIT License (MIT)
-
-Copyright (c) Ika <ikatyang@gmail.com> (https://github.com/ikatyang)
+Copyright (c) 2024 tree-sitter-grammars contributors
+Copyright (c) 2019-2021 Ika
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/Makefile b/Makefile
index 0422dca..0944cb0 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-VERSION := 0.0.1
+VERSION := 0.6.0
 
 LANGUAGE_NAME := tree-sitter-yaml
 
@@ -27,11 +27,13 @@ INCLUDEDIR ?= $(PREFIX)/include
 LIBDIR ?= $(PREFIX)/lib
 PCLIBDIR ?= $(LIBDIR)/pkgconfig
 
-# object files
-OBJS := $(patsubst %.c,%.o,$(wildcard $(SRC_DIR)/*.c))
+# source/object files
+PARSER := src/parser.c
+SCANNER := src/scanner.c
+OBJS := $(patsubst %.c,%.o,$(PARSER) $(SCANNER))
 
 # flags
-ARFLAGS := rcs
+ARFLAGS ?= rcs
 override CFLAGS += -I$(SRC_DIR) -std=c11 -fPIC
 
 # OS-specific bits
@@ -81,8 +83,8 @@ $(LANGUAGE_NAME).pc: bindings/c/$(LANGUAGE_NAME).pc.in
 		-e 's|=$(PREFIX)|=$${prefix}|' \
 		-e 's|@PREFIX@|$(PREFIX)|' $< > $@
 
-$(SRC_DIR)/parser.c: grammar.js
-	$(TS) generate --no-bindings
+$(PARSER): $(SRC_DIR)/grammar.json
+	$(TS) generate --no-bindings $^
 
 install: all
 	install -d '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter '$(DESTDIR)$(PCLIBDIR)' '$(DESTDIR)$(LIBDIR)'
@@ -106,5 +108,6 @@ clean:
 
 test:
 	$(TS) test
+	$(TS) parse examples/* --quiet --time
 
 .PHONY: all install uninstall clean test
diff --git a/Package.swift b/Package.swift
index 601a403..e074da0 100644
--- a/Package.swift
+++ b/Package.swift
@@ -2,14 +2,13 @@
 import PackageDescription
 
 let package = Package(
-    name: "TreeSitterYaml",
-    platforms: [.macOS(.v10_13), .iOS(.v11)],
+    name: "TreeSitterYAML",
     products: [
-        .library(name: "TreeSitterYaml", targets: ["TreeSitterYaml"]),
+        .library(name: "TreeSitterYAML", targets: ["TreeSitterYAML"]),
     ],
     dependencies: [],
     targets: [
-        .target(name: "TreeSitterYaml",
+        .target(name: "TreeSitterYAML",
                 path: ".",
                 exclude: [
                     "Cargo.toml",
@@ -36,7 +35,7 @@ let package = Package(
                 ],
                 sources: [
                     "src/parser.c",
-                    // NOTE: if your language has an external scanner, add it here.
+                    "src/scanner.c",
                 ],
                 resources: [
                     .copy("queries")
diff --git a/README.md b/README.md
index 31fd7bd..89365a8 100644
--- a/README.md
+++ b/README.md
@@ -1,53 +1,21 @@
 # tree-sitter-yaml
 
-[![npm](https://img.shields.io/npm/v/tree-sitter-yaml.svg)](https://www.npmjs.com/package/tree-sitter-yaml)
-[![build](https://img.shields.io/travis/com/ikatyang/tree-sitter-yaml/master.svg)](https://travis-ci.com/ikatyang/tree-sitter-yaml/builds)
+[![CI][ci]](https://github.com/tree-sitter-grammars/tree-sitter-yaml/actions)
+[![discord][discord]](https://discord.gg/w7nTvsVJhm)
+[![matrix][matrix]](https://matrix.to/#/#tree-sitter-chat:matrix.org)
+[![npm][npm]](https://www.npmjs.com/package/@tree-sitter-grammars/tree-sitter-yaml)
+[![crates][crates]](https://crates.io/crates/tree-sitter-yaml)
+[![pypi][pypi]](https://pypi.org/project/tree-sitter-yaml/)
 
-YAML ([YAML Spec v1.2](https://yaml.org/spec/1.2/spec.html)) grammar for [tree-sitter](https://github.com/tree-sitter/tree-sitter)
+A tree-sitter parser for YAML files.
 
-[Changelog](https://github.com/ikatyang/tree-sitter-yaml/blob/master/CHANGELOG.md)
+## References
 
-## Install
+- [YAML version 1.2](https://yaml.org/spec/1.2.2/)
 
-```sh
-npm install tree-sitter-yaml tree-sitter
-```
-
-## Usage
-
-```js
-const Parser = require("tree-sitter");
-const YAML = require("tree-sitter-yaml");
-
-const parser = new Parser();
-parser.setLanguage(YAML);
-
-const sourceCode = `
-!!map
-hello: &anchor
-- world
-`;
-
-const tree = parser.parse(sourceCode);
-console.log(tree.rootNode.toString());
-// (stream
-//   (document
-//     (block_node
-//       (tag)
-//       (block_mapping
-//         (block_mapping_pair
-//           key: (flow_node
-//             (plain_scalar
-//               (string_scalar)))
-//           value: (block_node
-//             (anchor)
-//             (block_sequence
-//               (block_sequence_item
-//                 (flow_node
-//                   (plain_scalar
-//                     (string_scalar)))))))))))
-```
-
-## License
-
-MIT © [Ika](https://github.com/ikatyang)
+[ci]: https://img.shields.io/github/actions/workflow/status/tree-sitter-grammars/tree-sitter-yaml/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/%40tree-sitter-grammars%2Ftree-sitter-yaml?logo=npm
+[crates]: https://img.shields.io/crates/v/tree-sitter-yaml?logo=rust
+[pypi]: https://img.shields.io/pypi/v/tree-sitter-yaml?logo=pypi&logoColor=ffd242
diff --git a/binding.gyp b/binding.gyp
index f0fffaa..1fe512a 100644
--- a/binding.gyp
+++ b/binding.gyp
@@ -11,7 +11,7 @@
       "sources": [
         "bindings/node/binding.cc",
         "src/parser.c",
-        # NOTE: if your language has an external scanner, add it here.
+        "src/scanner.c",
       ],
       "cflags_c": [
         "-std=c11",
diff --git a/bindings/c/tree-sitter-yaml.pc.in b/bindings/c/tree-sitter-yaml.pc.in
index 6b3f9b4..22ee289 100644
--- a/bindings/c/tree-sitter-yaml.pc.in
+++ b/bindings/c/tree-sitter-yaml.pc.in
@@ -3,7 +3,7 @@ libdir=@LIBDIR@
 includedir=@INCLUDEDIR@
 
 Name: tree-sitter-yaml
-Description: Yaml grammar for tree-sitter
+Description: YAML grammar for tree-sitter
 URL: @URL@
 Version: @VERSION@
 Requires: @REQUIRES@
diff --git a/bindings/go/binding.go b/bindings/go/binding.go
index f36b317..76d9f9d 100644
--- a/bindings/go/binding.go
+++ b/bindings/go/binding.go
@@ -2,7 +2,7 @@ package tree_sitter_yaml
 
 // #cgo CFLAGS: -std=c11 -fPIC
 // #include "../../src/parser.c"
-// // NOTE: if your language has an external scanner, add it here.
+// #include "../../src/scanner.c"
 import "C"
 
 import "unsafe"
diff --git a/bindings/go/go.mod b/bindings/go/go.mod
index 0e12827..e9941e6 100644
--- a/bindings/go/go.mod
+++ b/bindings/go/go.mod
@@ -1,4 +1,4 @@
-module github.com/tree-sitter/tree-sitter-yaml
+module github.com/tree-sitter-grammars/tree-sitter-yaml
 
 go 1.22
 
diff --git a/bindings/python/tree_sitter_yaml/__init__.py b/bindings/python/tree_sitter_yaml/__init__.py
index 665369c..9dfeb07 100644
--- a/bindings/python/tree_sitter_yaml/__init__.py
+++ b/bindings/python/tree_sitter_yaml/__init__.py
@@ -1,4 +1,4 @@
-"Yaml grammar for tree-sitter"
+"YAML grammar for tree-sitter"
 
 from ._binding import language
 
diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs
new file mode 100644
index 0000000..e956a21
--- /dev/null
+++ b/bindings/rust/build.rs
@@ -0,0 +1,17 @@
+fn main() {
+    let src_dir = std::path::Path::new("src");
+
+    let mut c_config = cc::Build::new();
+    c_config.flag("-Wno-unused-but-set-variable").flag("-Wno-unused-value").flag("-Wno-implicit-fallthrough");
+    c_config.std("c11").include(src_dir);
+
+    let parser_path = src_dir.join("parser.c");
+    c_config.file(&parser_path);
+    println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap());
+
+    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("tree-sitter-yaml");
+}
diff --git a/bindings/rust/lib.rs b/bindings/rust/lib.rs
new file mode 100644
index 0000000..c7560ae
--- /dev/null
+++ b/bindings/rust/lib.rs
@@ -0,0 +1,54 @@
+//! This crate provides YAML 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#"
+//! key: value
+//! list:
+//!     - item1
+//!     - item2
+//! "#;
+//! let mut parser = tree_sitter::Parser::new();
+//! parser.set_language(&tree_sitter_yaml::language()).expect("Error loading YAML 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_yaml() -> 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_yaml() }
+}
+
+/// 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");
+
+/// The highlight queries for this grammar.
+pub const HIGHLIGHTS_QUERY: &str = include_str!("../../queries/highlights.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 YAML grammar");
+    }
+}
diff --git a/bindings/swift/TreeSitterYaml/yaml.h b/bindings/swift/TreeSitterYAML/yaml.h
similarity index 100%
rename from bindings/swift/TreeSitterYaml/yaml.h
rename to bindings/swift/TreeSitterYAML/yaml.h
diff --git a/docs/assets/tree-sitter-playground-0.19.3/LICENSE b/docs/assets/tree-sitter-playground-0.19.3/LICENSE
deleted file mode 100644
index 971b81f..0000000
--- a/docs/assets/tree-sitter-playground-0.19.3/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2018 Max Brunsfeld
-
-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.
diff --git a/docs/assets/tree-sitter-playground-0.19.3/playground.js b/docs/assets/tree-sitter-playground-0.19.3/playground.js
deleted file mode 100644
index b3c005a..0000000
--- a/docs/assets/tree-sitter-playground-0.19.3/playground.js
+++ /dev/null
@@ -1,469 +0,0 @@
-let tree;
-
-(async () => {
-  const CAPTURE_REGEX = /@\s*([\w\._-]+)/g;
-  const COLORS_BY_INDEX = [
-    'blue',
-    'chocolate',
-    'darkblue',
-    'darkcyan',
-    'darkgreen',
-    'darkred',
-    'darkslategray',
-    'dimgray',
-    'green',
-    'indigo',
-    'navy',
-    'red',
-    'sienna',
-  ];
-
-  const scriptURL = document.currentScript.getAttribute('src');
-
-  const codeInput = document.getElementById('code-input');
-  const languageSelect = document.getElementById('language-select');
-  const loggingCheckbox = document.getElementById('logging-checkbox');
-  const outputContainer = document.getElementById('output-container');
-  const outputContainerScroll = document.getElementById('output-container-scroll');
-  const playgroundContainer = document.getElementById('playground-container');
-  const queryCheckbox = document.getElementById('query-checkbox');
-  const queryContainer = document.getElementById('query-container');
-  const queryInput = document.getElementById('query-input');
-  const updateTimeSpan = document.getElementById('update-time');
-  const languagesByName = {};
-
-  loadState();
-
-  await TreeSitter.init();
-
-  const parser = new TreeSitter();
-  const codeEditor = CodeMirror.fromTextArea(codeInput, {
-    lineNumbers: true,
-    showCursorWhenSelecting: true
-  });
-
-  const queryEditor = CodeMirror.fromTextArea(queryInput, {
-    lineNumbers: true,
-    showCursorWhenSelecting: true
-  });
-
-  const cluster = new Clusterize({
-    rows: [],
-    noDataText: null,
-    contentElem: outputContainer,
-    scrollElem: outputContainerScroll
-  });
-  const renderTreeOnCodeChange = debounce(renderTree, 50);
-  const saveStateOnChange = debounce(saveState, 2000);
-  const runTreeQueryOnChange = debounce(runTreeQuery, 50);
-
-  let languageName = languageSelect.value;
-  let treeRows = null;
-  let treeRowHighlightedIndex = -1;
-  let parseCount = 0;
-  let isRendering = 0;
-  let query;
-
-  codeEditor.on('changes', handleCodeChange);
-  codeEditor.on('viewportChange', runTreeQueryOnChange);
-  codeEditor.on('cursorActivity', debounce(handleCursorMovement, 150));
-  queryEditor.on('changes', debounce(handleQueryChange, 150));
-
-  loggingCheckbox.addEventListener('change', handleLoggingChange);
-  queryCheckbox.addEventListener('change', handleQueryEnableChange);
-  languageSelect.addEventListener('change', handleLanguageChange);
-  outputContainer.addEventListener('click', handleTreeClick);
-
-  handleQueryEnableChange();
-  await handleLanguageChange()
-
-  playgroundContainer.style.visibility = 'visible';
-
-  async function handleLanguageChange() {
-    const newLanguageName = languageSelect.value;
-    if (!languagesByName[newLanguageName]) {
-      const url = `${LANGUAGE_BASE_URL}/tree-sitter-${newLanguageName}.wasm`
-      languageSelect.disabled = true;
-      try {
-        languagesByName[newLanguageName] = await TreeSitter.Language.load(url);
-      } catch (e) {
-        console.error(e);
-        languageSelect.value = languageName;
-        return
-      } finally {
-        languageSelect.disabled = false;
-      }
-    }
-
-    tree = null;
-    languageName = newLanguageName;
-    parser.setLanguage(languagesByName[newLanguageName]);
-    handleCodeChange();
-    handleQueryChange();
-  }
-
-  async function handleCodeChange(editor, changes) {
-    const newText = codeEditor.getValue();
-    const edits = tree && changes && changes.map(treeEditForEditorChange);
-
-    const start = performance.now();
-    if (edits) {
-      for (const edit of edits) {
-        tree.edit(edit);
-      }
-    }
-    const newTree = parser.parse(newText, tree);
-    const duration = (performance.now() - start).toFixed(1);
-
-    updateTimeSpan.innerText = `${duration} ms`;
-    if (tree) tree.delete();
-    tree = newTree;
-    parseCount++;
-    renderTreeOnCodeChange();
-    runTreeQueryOnChange();
-    saveStateOnChange();
-  }
-
-  async function renderTree() {
-    isRendering++;
-    const cursor = tree.walk();
-
-    let currentRenderCount = parseCount;
-    let row = '';
-    let rows = [];
-    let finishedRow = false;
-    let visitedChildren = false;
-    let indentLevel = 0;
-
-    for (let i = 0;; i++) {
-      if (i > 0 && i % 10000 === 0) {
-        await new Promise(r => setTimeout(r, 0));
-        if (parseCount !== currentRenderCount) {
-          cursor.delete();
-          isRendering--;
-          return;
-        }
-      }
-
-      let displayName;
-      if (cursor.nodeIsMissing) {
-        displayName = `MISSING ${cursor.nodeType}`
-      } else if (cursor.nodeIsNamed) {
-        displayName = cursor.nodeType;
-      }
-
-      if (visitedChildren) {
-        if (displayName) {
-          finishedRow = true;
-        }
-
-        if (cursor.gotoNextSibling()) {
-          visitedChildren = false;
-        } else if (cursor.gotoParent()) {
-          visitedChildren = true;
-          indentLevel--;
-        } else {
-          break;
-        }
-      } else {
-        if (displayName) {
-          if (finishedRow) {
-            row += '</div>';
-            rows.push(row);
-            finishedRow = false;
-          }
-          const start = cursor.startPosition;
-          const end = cursor.endPosition;
-          const id = cursor.nodeId;
-          let fieldName = cursor.currentFieldName();
-          if (fieldName) {
-            fieldName += ': ';
-          } else {
-            fieldName = '';
-          }
-          row = `<div>${'  '.repeat(indentLevel)}${fieldName}<a class='plain' href="#" data-id=${id} data-range="${start.row},${start.column},${end.row},${end.column}">${displayName}</a> [${start.row}, ${start.column}] - [${end.row}, ${end.column}])`;
-          finishedRow = true;
-        }
-
-        if (cursor.gotoFirstChild()) {
-          visitedChildren = false;
-          indentLevel++;
-        } else {
-          visitedChildren = true;
-        }
-      }
-    }
-    if (finishedRow) {
-      row += '</div>';
-      rows.push(row);
-    }
-
-    cursor.delete();
-    cluster.update(rows);
-    treeRows = rows;
-    isRendering--;
-    handleCursorMovement();
-  }
-
-  function runTreeQuery(_, startRow, endRow) {
-    if (endRow == null) {
-      const viewport = codeEditor.getViewport();
-      startRow = viewport.from;
-      endRow = viewport.to;
-    }
-
-    codeEditor.operation(() => {
-      const marks = codeEditor.getAllMarks();
-      marks.forEach(m => m.clear());
-
-      if (tree && query) {
-        const captures = query.captures(
-          tree.rootNode,
-          {row: startRow, column: 0},
-          {row: endRow, column: 0},
-        );
-        let lastNodeId;
-        for (const {name, node} of captures) {
-          if (node.id === lastNodeId) continue;
-          lastNodeId = node.id;
-          const {startPosition, endPosition} = node;
-          codeEditor.markText(
-            {line: startPosition.row, ch: startPosition.column},
-            {line: endPosition.row, ch: endPosition.column},
-            {
-              inclusiveLeft: true,
-              inclusiveRight: true,
-              css: `color: ${colorForCaptureName(name)}`
-            }
-          );
-        }
-      }
-    });
-  }
-
-  function handleQueryChange() {
-    if (query) {
-      query.delete();
-      query.deleted = true;
-      query = null;
-    }
-
-    queryEditor.operation(() => {
-      queryEditor.getAllMarks().forEach(m => m.clear());
-      if (!queryCheckbox.checked) return;
-
-      const queryText = queryEditor.getValue();
-
-      try {
-        query = parser.getLanguage().query(queryText);
-        let match;
-
-        let row = 0;
-        queryEditor.eachLine((line) => {
-          while (match = CAPTURE_REGEX.exec(line.text)) {
-            queryEditor.markText(
-              {line: row, ch: match.index},
-              {line: row, ch: match.index + match[0].length},
-              {
-                inclusiveLeft: true,
-                inclusiveRight: true,
-                css: `color: ${colorForCaptureName(match[1])}`
-              }
-            );
-          }
-          row++;
-        });
-      } catch (error) {
-        const startPosition = queryEditor.posFromIndex(error.index);
-        const endPosition = {
-          line: startPosition.line,
-          ch: startPosition.ch + (error.length || Infinity)
-        };
-
-        if (error.index === queryText.length) {
-          if (startPosition.ch > 0) {
-            startPosition.ch--;
-          } else if (startPosition.row > 0) {
-            startPosition.row--;
-            startPosition.column = Infinity;
-          }
-        }
-
-        queryEditor.markText(
-          startPosition,
-          endPosition,
-          {
-            className: 'query-error',
-            inclusiveLeft: true,
-            inclusiveRight: true,
-            attributes: {title: error.message}
-          }
-        );
-      }
-    });
-
-    runTreeQuery();
-    saveQueryState();
-  }
-
-  function handleCursorMovement() {
-    if (isRendering) return;
-
-    const selection = codeEditor.getDoc().listSelections()[0];
-    let start = {row: selection.anchor.line, column: selection.anchor.ch};
-    let end = {row: selection.head.line, column: selection.head.ch};
-    if (
-      start.row > end.row ||
-      (
-        start.row === end.row &&
-        start.column > end.column
-      )
-    ) {
-      let swap = end;
-      end = start;
-      start = swap;
-    }
-    const node = tree.rootNode.namedDescendantForPosition(start, end);
-    if (treeRows) {
-      if (treeRowHighlightedIndex !== -1) {
-        const row = treeRows[treeRowHighlightedIndex];
-        if (row) treeRows[treeRowHighlightedIndex] = row.replace('highlighted', 'plain');
-      }
-      treeRowHighlightedIndex = treeRows.findIndex(row => row.includes(`data-id=${node.id}`));
-      if (treeRowHighlightedIndex !== -1) {
-        const row = treeRows[treeRowHighlightedIndex];
-        if (row) treeRows[treeRowHighlightedIndex] = row.replace('plain', 'highlighted');
-      }
-      cluster.update(treeRows);
-      const lineHeight = cluster.options.item_height;
-      const scrollTop = outputContainerScroll.scrollTop;
-      const containerHeight = outputContainerScroll.clientHeight;
-      const offset = treeRowHighlightedIndex * lineHeight;
-      if (scrollTop > offset - 20) {
-        $(outputContainerScroll).animate({scrollTop: offset - 20}, 150);
-      } else if (scrollTop < offset + lineHeight + 40 - containerHeight) {
-        $(outputContainerScroll).animate({scrollTop: offset - containerHeight + 40}, 150);
-      }
-    }
-  }
-
-  function handleTreeClick(event) {
-    if (event.target.tagName === 'A') {
-      event.preventDefault();
-      const [startRow, startColumn, endRow, endColumn] = event
-        .target
-        .dataset
-        .range
-        .split(',')
-        .map(n => parseInt(n));
-      codeEditor.focus();
-      codeEditor.setSelection(
-        {line: startRow, ch: startColumn},
-        {line: endRow, ch: endColumn}
-      );
-    }
-  }
-
-  function handleLoggingChange() {
-    if (loggingCheckbox.checked) {
-      parser.setLogger((message, lexing) => {
-        if (lexing) {
-          console.log("  ", message)
-        } else {
-          console.log(message)
-        }
-      });
-    } else {
-      parser.setLogger(null);
-    }
-  }
-
-  function handleQueryEnableChange() {
-    if (queryCheckbox.checked) {
-      queryContainer.style.visibility = '';
-      queryContainer.style.position = '';
-    } else {
-      queryContainer.style.visibility = 'hidden';
-      queryContainer.style.position = 'absolute';
-    }
-    handleQueryChange();
-  }
-
-  function treeEditForEditorChange(change) {
-    const oldLineCount = change.removed.length;
-    const newLineCount = change.text.length;
-    const lastLineLength = change.text[newLineCount - 1].length;
-
-    const startPosition = {row: change.from.line, column: change.from.ch};
-    const oldEndPosition = {row: change.to.line, column: change.to.ch};
-    const newEndPosition = {
-      row: startPosition.row + newLineCount - 1,
-      column: newLineCount === 1
-        ? startPosition.column + lastLineLength
-        : lastLineLength
-    };
-
-    const startIndex = codeEditor.indexFromPos(change.from);
-    let newEndIndex = startIndex + newLineCount - 1;
-    let oldEndIndex = startIndex + oldLineCount - 1;
-    for (let i = 0; i < newLineCount; i++) newEndIndex += change.text[i].length;
-    for (let i = 0; i < oldLineCount; i++) oldEndIndex += change.removed[i].length;
-
-    return {
-      startIndex, oldEndIndex, newEndIndex,
-      startPosition, oldEndPosition, newEndPosition
-    };
-  }
-
-  function colorForCaptureName(capture) {
-    const id = query.captureNames.indexOf(capture);
-    return COLORS_BY_INDEX[id % COLORS_BY_INDEX.length];
-  }
-
-  function getLocalStorageItem(key) {
-    return localStorage.getItem(`${document.title}:${key}`);
-  }
-
-  function setLocalStorageItem(key, value) {
-    localStorage.setItem(`${document.title}:${key}`, value);
-  }
-
-  function loadState() {
-    const language = getLocalStorageItem("language");
-    const sourceCode = getLocalStorageItem("sourceCode");
-    const query = getLocalStorageItem("query");
-    const queryEnabled = getLocalStorageItem("queryEnabled");
-    if (language != null && sourceCode != null && query != null) {
-      queryInput.value = query;
-      codeInput.value = sourceCode;
-      languageSelect.value = language;
-      queryCheckbox.checked = (queryEnabled === 'true');
-    }
-  }
-
-  function saveState() {
-    setLocalStorageItem("language", languageSelect.value);
-    setLocalStorageItem("sourceCode", codeEditor.getValue());
-    saveQueryState();
-  }
-
-  function saveQueryState() {
-    setLocalStorageItem("queryEnabled", queryCheckbox.checked);
-    setLocalStorageItem("query", queryEditor.getValue());
-  }
-
-  function debounce(func, wait, immediate) {
-    var timeout;
-    return function() {
-      var context = this, args = arguments;
-      var later = function() {
-        timeout = null;
-        if (!immediate) func.apply(context, args);
-      };
-      var callNow = immediate && !timeout;
-      clearTimeout(timeout);
-      timeout = setTimeout(later, wait);
-      if (callNow) func.apply(context, args);
-    };
-  }
-})();
diff --git a/docs/assets/tree-sitter-playground-0.19.3/style.css b/docs/assets/tree-sitter-playground-0.19.3/style.css
deleted file mode 100644
index 6e37df6..0000000
--- a/docs/assets/tree-sitter-playground-0.19.3/style.css
+++ /dev/null
@@ -1,1 +0,0 @@
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.highlight table td{padding:5px}.highlight table pre{margin:0}.highlight .cm{color:#999988;font-style:italic}.highlight .cp{color:#999999;font-weight:bold}.highlight .c1{color:#999988;font-style:italic}.highlight .cs{color:#999999;font-weight:bold;font-style:italic}.highlight .c,.highlight .cd{color:#999988;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .gd{color:#000000;background-color:#ffdddd}.highlight .ge{color:#000000;font-style:italic}.highlight .gr{color:#aa0000}.highlight .gh{color:#999999}.highlight .gi{color:#000000;background-color:#ddffdd}.highlight .go{color:#888888}.highlight .gp{color:#555555}.highlight .gs{font-weight:bold}.highlight .gu{color:#aaaaaa}.highlight .gt{color:#aa0000}.highlight .kc{color:#000000;font-weight:bold}.highlight .kd{color:#000000;font-weight:bold}.highlight .kn{color:#000000;font-weight:bold}.highlight .kp{color:#000000;font-weight:bold}.highlight .kr{color:#000000;font-weight:bold}.highlight .kt{color:#445588;font-weight:bold}.highlight .k,.highlight .kv{color:#000000;font-weight:bold}.highlight .mf{color:#009999}.highlight .mh{color:#009999}.highlight .il{color:#009999}.highlight .mi{color:#009999}.highlight .mo{color:#009999}.highlight .m,.highlight .mb,.highlight .mx{color:#009999}.highlight .sb{color:#d14}.highlight .sc{color:#d14}.highlight .sd{color:#d14}.highlight .s2{color:#d14}.highlight .se{color:#d14}.highlight .sh{color:#d14}.highlight .si{color:#d14}.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#d14}.highlight .ss{color:#990073}.highlight .s{color:#d14}.highlight .na{color:#008080}.highlight .bp{color:#999999}.highlight .nb{color:#0086B3}.highlight .nc{color:#445588;font-weight:bold}.highlight .no{color:#008080}.highlight .nd{color:#3c5d5d;font-weight:bold}.highlight .ni{color:#800080}.highlight .ne{color:#990000;font-weight:bold}.highlight .nf{color:#990000;font-weight:bold}.highlight .nl{color:#990000;font-weight:bold}.highlight .nn{color:#555555}.highlight .nt{color:#000080}.highlight .vc{color:#008080}.highlight .vg{color:#008080}.highlight .vi{color:#008080}.highlight .nv{color:#008080}.highlight .ow{color:#000000;font-weight:bold}.highlight .o{color:#000000;font-weight:bold}.highlight .w{color:#bbbbbb}.highlight{background-color:#f8f8f8}*{box-sizing:border-box}body{padding:0;margin:0;font-family:"Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:16px;line-height:1.5;color:#606c71}a{color:#1e6bb8;text-decoration:none}a:hover{text-decoration:underline}.btn{display:inline-block;margin-bottom:1rem;color:rgba(255,255,255,0.7);background-color:rgba(255,255,255,0.08);border-color:rgba(255,255,255,0.2);border-style:solid;border-width:1px;border-radius:0.3rem;transition:color 0.2s, background-color 0.2s, border-color 0.2s}.btn:hover{color:rgba(255,255,255,0.8);text-decoration:none;background-color:rgba(255,255,255,0.2);border-color:rgba(255,255,255,0.3)}.btn+.btn{margin-left:1rem}@media screen and (min-width: 64em){.btn{padding:0.75rem 1rem}}@media screen and (min-width: 42em) and (max-width: 64em){.btn{padding:0.6rem 0.9rem;font-size:0.9rem}}@media screen and (max-width: 42em){.btn{display:block;width:100%;padding:0.75rem;font-size:0.9rem}.btn+.btn{margin-top:1rem;margin-left:0}}.page-header{color:#fff;text-align:center;background-color:#159957;background-image:linear-gradient(120deg, #155799, #159957)}@media screen and (min-width: 64em){.page-header{padding:5rem 6rem}}@media screen and (min-width: 42em) and (max-width: 64em){.page-header{padding:3rem 4rem}}@media screen and (max-width: 42em){.page-header{padding:2rem 1rem}}.project-name{margin-top:0;margin-bottom:0.1rem}@media screen and (min-width: 64em){.project-name{font-size:3.25rem}}@media screen and (min-width: 42em) and (max-width: 64em){.project-name{font-size:2.25rem}}@media screen and (max-width: 42em){.project-name{font-size:1.75rem}}.project-tagline{margin-bottom:2rem;font-weight:normal;opacity:0.7}@media screen and (min-width: 64em){.project-tagline{font-size:1.25rem}}@media screen and (min-width: 42em) and (max-width: 64em){.project-tagline{font-size:1.15rem}}@media screen and (max-width: 42em){.project-tagline{font-size:1rem}}.main-content{word-wrap:break-word}.main-content :first-child{margin-top:0}@media screen and (min-width: 64em){.main-content{max-width:64rem;padding:2rem 6rem;margin:0 auto;font-size:1.1rem}}@media screen and (min-width: 42em) and (max-width: 64em){.main-content{padding:2rem 4rem;font-size:1.1rem}}@media screen and (max-width: 42em){.main-content{padding:2rem 1rem;font-size:1rem}}.main-content img{max-width:100%}.main-content h1,.main-content h2,.main-content h3,.main-content h4,.main-content h5,.main-content h6{margin-top:2rem;margin-bottom:1rem;font-weight:normal;color:#159957}.main-content p{margin-bottom:1em}.main-content code{padding:2px 4px;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:0.9rem;color:#567482;background-color:#f3f6fa;border-radius:0.3rem}.main-content pre{padding:0.8rem;margin-top:0;margin-bottom:1rem;font:1rem Consolas, "Liberation Mono", Menlo, Courier, monospace;color:#567482;word-wrap:normal;background-color:#f3f6fa;border:solid 1px #dce6f0;border-radius:0.3rem}.main-content pre>code{padding:0;margin:0;font-size:0.9rem;color:#567482;word-break:normal;white-space:pre;background:transparent;border:0}.main-content .highlight{margin-bottom:1rem}.main-content .highlight pre{margin-bottom:0;word-break:normal}.main-content .highlight pre,.main-content pre{padding:0.8rem;overflow:auto;font-size:0.9rem;line-height:1.45;border-radius:0.3rem;-webkit-overflow-scrolling:touch}.main-content pre code,.main-content pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.main-content pre code:before,.main-content pre code:after,.main-content pre tt:before,.main-content pre tt:after{content:normal}.main-content ul,.main-content ol{margin-top:0}.main-content blockquote{padding:0 1rem;margin-left:0;color:#819198;border-left:0.3rem solid #dce6f0}.main-content blockquote>:first-child{margin-top:0}.main-content blockquote>:last-child{margin-bottom:0}.main-content table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all;-webkit-overflow-scrolling:touch}.main-content table th{font-weight:bold}.main-content table th,.main-content table td{padding:0.5rem 1rem;border:1px solid #e9ebec}.main-content dl{padding:0}.main-content dl dt{padding:0;margin-top:1rem;font-size:1rem;font-weight:bold}.main-content dl dd{padding:0;margin-bottom:1rem}.main-content hr{height:2px;padding:0;margin:1rem 0;background-color:#eff0f1;border:0}.site-footer{padding-top:2rem;margin-top:2rem;border-top:solid 1px #eff0f1}@media screen and (min-width: 64em){.site-footer{font-size:1rem}}@media screen and (min-width: 42em) and (max-width: 64em){.site-footer{font-size:1rem}}@media screen and (max-width: 42em){.site-footer{font-size:0.9rem}}.site-footer-owner{display:block;font-weight:bold}.site-footer-credits{color:#819198}body{overflow:scroll}a[href^="http"]:after{content:"";display:inline-block;transform:translate(0px, 2px);width:.9em;height:.9em;margin-left:3px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23777'%3E%3Cpath d='M20 3h-5a1 1 0 1 0 0 2h3L8 14a1 1 0 1 0 2 2l9-10v3a1 1 0 1 0 2 0V4a1 1 0 0 0-1-1zM5 3L3 5v14l2 2h14l2-2v-6a1 1 0 1 0-2 0v6H5V5h6a1 1 0 1 0 0-2H5z'/%3E%3C/svg%3E");background-size:cover}#container{position:relative;max-width:1024px;margin:0 auto}#main-content,#sidebar{padding:20px 0}#sidebar{position:fixed;background:white;top:0;bottom:0;width:0;overflow-y:auto;border-right:1px solid #ccc;z-index:1}#sidebar .github-repo{display:inline-block;padding-left:3.75em;font-size:.85em}#sidebar-toggle-link{font-size:24px;position:fixed;background-color:white;opacity:0.75;box-shadow:1px 1px 5px #aaa;left:0;padding:5px 10px;display:none;z-index:100;text-decoration:none !important;color:#aaa}#main-content{position:relative;padding:20px;padding-left:20px}.nav-link.active{text-decoration:underline}a>span{text-decoration:inherit}.table-of-contents-section{border-bottom:1px solid #ccc}.logo{display:block}.table-of-contents-section.active{background-color:#edffcb}.table-of-contents-section{padding:10px 20px}#table-of-contents ul{padding:0;margin:0}#table-of-contents li{display:block;padding:5px 20px}@media (max-width: 900px){#sidebar{left:0;transition:left 0.25s}#sidebar-toggle-link{display:block;transition:left 0.25s}#main-content{left:0;padding-left:20px;transition:left 0.25s}body.sidebar-hidden #sidebar{left:0}body.sidebar-hidden #main-content{left:0}body.sidebar-hidden #sidebar-toggle-link{left:0}}#playground-container .CodeMirror{height:auto;max-height:350px;border:1px solid #aaa}#playground-container .CodeMirror-scroll{height:auto;max-height:350px}#playground-container h4,#playground-container select,#playground-container .field,#playground-container label{display:inline-block;margin-right:20px}#playground-container #logging-checkbox{height:15px}#playground-container .CodeMirror div.CodeMirror-cursor{border-left:3px solid red}#output-container{padding:0 10px;margin:0}#output-container-scroll{padding:0;position:relative;margin-top:0;overflow:auto;max-height:350px;border:1px solid #aaa}a.highlighted{background-color:#ddd;text-decoration:underline}.query-error{text-decoration:underline red dashed}
diff --git a/docs/assets/tree-sitter-yaml-0.5.0/tree-sitter-yaml.wasm b/docs/assets/tree-sitter-yaml-0.5.0/tree-sitter-yaml.wasm
deleted file mode 100755
index 927e167..0000000
Binary files a/docs/assets/tree-sitter-yaml-0.5.0/tree-sitter-yaml.wasm and /dev/null differ
diff --git a/docs/assets/web-tree-sitter-0.19.3/LICENSE b/docs/assets/web-tree-sitter-0.19.3/LICENSE
deleted file mode 100644
index 971b81f..0000000
--- a/docs/assets/web-tree-sitter-0.19.3/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2018 Max Brunsfeld
-
-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.
diff --git a/docs/assets/web-tree-sitter-0.19.3/tree-sitter.js b/docs/assets/web-tree-sitter-0.19.3/tree-sitter.js
deleted file mode 100644
index ee0e287..0000000
--- a/docs/assets/web-tree-sitter-0.19.3/tree-sitter.js
+++ /dev/null
@@ -1,1 +0,0 @@
-var Module=void 0!==Module?Module:{};!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():window.TreeSitter=t()}(0,function(){var e,t={};for(e in Module)Module.hasOwnProperty(e)&&(t[e]=Module[e]);var n,r,s=[],o="./this.program",_=function(e,t){throw t},a=!1,u=!1;a="object"==typeof window,u="function"==typeof importScripts,n="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,r=!a&&!n&&!u;var i,l,d,c,m,f="";n?(f=u?require("path").dirname(f)+"/":__dirname+"/",i=function(e,t){return c||(c=require("fs")),m||(m=require("path")),e=m.normalize(e),c.readFileSync(e,t?null:"utf8")},d=function(e){var t=i(e,!0);return t.buffer||(t=new Uint8Array(t)),N(t.buffer),t},process.argv.length>1&&(o=process.argv[1].replace(/\\/g,"/")),s=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),_=function(e){process.exit(e)},Module.inspect=function(){return"[Emscripten Module object]"}):r?("undefined"!=typeof read&&(i=function(e){return read(e)}),d=function(e){var t;return"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(N("object"==typeof(t=read(e,"binary"))),t)},"undefined"!=typeof scriptArgs?s=scriptArgs:void 0!==arguments&&(s=arguments),"function"==typeof quit&&(_=function(e){quit(e)}),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(a||u)&&(u?f=self.location.href:"undefined"!=typeof document&&document.currentScript&&(f=document.currentScript.src),f=0!==f.indexOf("blob:")?f.substr(0,f.lastIndexOf("/")+1):"",i=function(e){var t=new XMLHttpRequest;return t.open("GET",e,!1),t.send(null),t.responseText},u&&(d=function(e){var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),l=function(e,t,n){var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):n()},r.onerror=n,r.send(null)});Module.print||console.log.bind(console);var p=Module.printErr||console.warn.bind(console);for(e in t)t.hasOwnProperty(e)&&(Module[e]=t[e]);t=null,Module.arguments&&(s=Module.arguments),Module.thisProgram&&(o=Module.thisProgram),Module.quit&&(_=Module.quit);var h=16;var g,w=[];function M(e,t){if(!g){g=new WeakMap;for(var n=0;n<H.length;n++){var r=H.get(n);r&&g.set(r,n)}}if(g.has(e))return g.get(e);var s=function(){if(w.length)return w.pop();try{H.grow(1)}catch(e){if(!(e instanceof RangeError))throw e;throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."}return H.length-1}();try{H.set(s,e)}catch(n){if(!(n instanceof TypeError))throw n;var o=function(e,t){if("function"==typeof WebAssembly.Function){for(var n={i:"i32",j:"i64",f:"f32",d:"f64"},r={parameters:[],results:"v"==t[0]?[]:[n[t[0]]]},s=1;s<t.length;++s)r.parameters.push(n[t[s]]);return new WebAssembly.Function(r,e)}var o=[1,0,1,96],_=t.slice(0,1),a=t.slice(1),u={i:127,j:126,f:125,d:124};for(o.push(a.length),s=0;s<a.length;++s)o.push(u[a[s]]);"v"==_?o.push(0):o=o.concat([1,u[_]]),o[1]=o.length-2;var i=new Uint8Array([0,97,115,109,1,0,0,0].concat(o,[2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0])),l=new WebAssembly.Module(i);return new WebAssembly.Instance(l,{e:{f:e}}).exports.f}(e,t);H.set(s,o)}return g.set(e,s),s}var y,b=function(e){e},E=Module.dynamicLibraries||[];Module.wasmBinary&&(y=Module.wasmBinary);var v,I=Module.noExitRuntime||!0;function S(e,t,n,r){switch("*"===(n=n||"i8").charAt(n.length-1)&&(n="i32"),n){case"i1":case"i8":C[e>>0]=t;break;case"i16":q[e>>1]=t;break;case"i32":T[e>>2]=t;break;case"i64":ce=[t>>>0,(de=t,+Math.abs(de)>=1?de>0?(0|Math.min(+Math.floor(de/4294967296),4294967295))>>>0:~~+Math.ceil((de-+(~~de>>>0))/4294967296)>>>0:0)],T[e>>2]=ce[0],T[e+4>>2]=ce[1];break;case"float":W[e>>2]=t;break;case"double":Z[e>>3]=t;break;default:se("invalid type for setValue: "+n)}}function A(e,t,n){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return C[e>>0];case"i16":return q[e>>1];case"i32":case"i64":return T[e>>2];case"float":return W[e>>2];case"double":return Z[e>>3];default:se("invalid type for getValue: "+t)}return null}"object"!=typeof WebAssembly&&se("no native wasm support detected");var x=!1;function N(e,t){e||se("Assertion failed: "+t)}var P=1;var k,C,R,q,T,W,Z,F="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function L(e,t,n){for(var r=t+n,s=t;e[s]&&!(s>=r);)++s;if(s-t>16&&e.subarray&&F)return F.decode(e.subarray(t,s));for(var o="";t<s;){var _=e[t++];if(128&_){var a=63&e[t++];if(192!=(224&_)){var u=63&e[t++];if((_=224==(240&_)?(15&_)<<12|a<<6|u:(7&_)<<18|a<<12|u<<6|63&e[t++])<65536)o+=String.fromCharCode(_);else{var i=_-65536;o+=String.fromCharCode(55296|i>>10,56320|1023&i)}}else o+=String.fromCharCode((31&_)<<6|a)}else o+=String.fromCharCode(_)}return o}function O(e,t){return e?L(R,e,t):""}function $(e,t,n,r){if(!(r>0))return 0;for(var s=n,o=n+r-1,_=0;_<e.length;++_){var a=e.charCodeAt(_);if(a>=55296&&a<=57343)a=65536+((1023&a)<<10)|1023&e.charCodeAt(++_);if(a<=127){if(n>=o)break;t[n++]=a}else if(a<=2047){if(n+1>=o)break;t[n++]=192|a>>6,t[n++]=128|63&a}else if(a<=65535){if(n+2>=o)break;t[n++]=224|a>>12,t[n++]=128|a>>6&63,t[n++]=128|63&a}else{if(n+3>=o)break;t[n++]=240|a>>18,t[n++]=128|a>>12&63,t[n++]=128|a>>6&63,t[n++]=128|63&a}}return t[n]=0,n-s}function U(e,t,n){return $(e,R,t,n)}function D(e){for(var t=0,n=0;n<e.length;++n){var r=e.charCodeAt(n);r>=55296&&r<=57343&&(r=65536+((1023&r)<<10)|1023&e.charCodeAt(++n)),r<=127?++t:t+=r<=2047?2:r<=65535?3:4}return t}function j(e){var t=D(e)+1,n=je(t);return $(e,C,n,t),n}function z(e){k=e,Module.HEAP8=C=new Int8Array(e),Module.HEAP16=q=new Int16Array(e),Module.HEAP32=T=new Int32Array(e),Module.HEAPU8=R=new Uint8Array(e),Module.HEAPU16=new Uint16Array(e),Module.HEAPU32=new Uint32Array(e),Module.HEAPF32=W=new Float32Array(e),Module.HEAPF64=Z=new Float64Array(e)}var G=new WebAssembly.Global({value:"i32",mutable:!0},5250816);Module.___heap_base=5250816;var B=Module.INITIAL_MEMORY||33554432;(v=Module.wasmMemory?Module.wasmMemory:new WebAssembly.Memory({initial:B/65536,maximum:32768}))&&(k=v.buffer),B=k.byteLength,z(k);var H=new WebAssembly.Table({initial:13,element:"anyfunc"}),K=[],V=[],X=[],Q=[],Y=!1;var J=0,ee=null,te=null;function ne(e){J++,Module.monitorRunDependencies&&Module.monitorRunDependencies(J)}function re(e){if(J--,Module.monitorRunDependencies&&Module.monitorRunDependencies(J),0==J&&(null!==ee&&(clearInterval(ee),ee=null),te)){var t=te;te=null,t()}}function se(e){throw Module.onAbort&&Module.onAbort(e),p(e+=""),x=!0,1,e="abort("+e+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(e)}function oe(e,t){return String.prototype.startsWith?e.startsWith(t):0===e.indexOf(t)}Module.preloadedImages={},Module.preloadedAudios={},Module.preloadedWasm={};var _e="data:application/octet-stream;base64,";function ae(e){return oe(e,_e)}var ue="file://";function ie(e){return oe(e,ue)}var le,de,ce,me="tree-sitter.wasm";function fe(e){try{if(e==me&&y)return new Uint8Array(y);if(d)return d(e);throw"both async and sync fetching of the wasm failed"}catch(e){se(e)}}ae(me)||(le=me,me=Module.locateFile?Module.locateFile(le,f):f+le);var pe={},he={get:function(e,t){return pe[t]||(pe[t]=new WebAssembly.Global({value:"i32",mutable:!0})),pe[t]}};function ge(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var n=t.func;"number"==typeof n?void 0===t.arg?H.get(n)():H.get(n)(t.arg):n(void 0===t.arg?null:t.arg)}else t(Module)}}function we(e){var t=0;function n(){for(var n=0,r=1;;){var s=e[t++];if(n+=(127&s)*r,r*=128,!(128&s))break}return n}if(e instanceof WebAssembly.Module){var r=WebAssembly.Module.customSections(e,"dylink");N(0!=r.length,"need dylink section"),e=new Int8Array(r[0])}else{N(1836278016==new Uint32Array(new Uint8Array(e.subarray(0,24)).buffer)[0],"need to see wasm magic number"),N(0===e[8],"need the dylink section to be first"),t=9,n(),N(6===e[t]),N(e[++t]==="d".charCodeAt(0)),N(e[++t]==="y".charCodeAt(0)),N(e[++t]==="l".charCodeAt(0)),N(e[++t]==="i".charCodeAt(0)),N(e[++t]==="n".charCodeAt(0)),N(e[++t]==="k".charCodeAt(0)),t++}var s={};s.memorySize=n(),s.memoryAlign=n(),s.tableSize=n(),s.tableAlign=n();var o=n();s.neededDynlibs=[];for(var _=0;_<o;++_){var a=n(),u=e.subarray(t,t+a);t+=a;var i=L(u,0);s.neededDynlibs.push(i)}return s}var Me=0;function ye(){return I||Me>0}var be,Ee={nextHandle:1,loadedLibs:{},loadedLibNames:{}};function ve(e){return-1!=["__cpp_exception","__wasm_apply_data_relocs","__dso_handle","__set_stack_limits"].indexOf(e)}function Ie(e,t){var n={};for(var r in e){var s=e[r];"object"==typeof s&&(s=s.value),"number"==typeof s&&(s+=t),n[r]=s}return function(e){for(var t in e)if(!ve(t)){var n=!1,r=e[t];0==t.indexOf("orig$")&&(t=t.split("$")[1],n=!0),pe[t]||(pe[t]=new WebAssembly.Global({value:"i32",mutable:!0})),(n||0==pe[t].value)&&("function"==typeof r?pe[t].value=M(r):"number"==typeof r?pe[t].value=r:p("unhandled export type for `"+t+"`: "+typeof r))}}(n),n}function Se(e){return 0==e.indexOf("dynCall_")||-1!=["setTempRet0","getTempRet0","stackAlloc","stackSave","stackRestore"].indexOf(e)?e:"_"+e}function Ae(e,t){var n,r;return t&&(n=Module.asm["orig$"+e]),n||(n=Module.asm[e]),!n&&t&&(n=Module["_orig$"+e]),n||(n=Module[Se(e)]),n||0!=e.indexOf("invoke_")||(r=e.split("_")[1],n=function(){var e=Ue();try{return dynCall(r,arguments[0],Array.prototype.slice.call(arguments,1))}catch(t){if(De(e),t!==t+0&&"longjmp"!==t)throw t;_setThrew(1,0)}}),n}function xe(e,t){var n=we(e);function r(){var r=Math.pow(2,n.memoryAlign);r=Math.max(r,h);var s,o,_,a=(s=function(e){if(Y)return Oe(e);var t=Module.___heap_base,n=t+e+15&-16;return Module.___heap_base=n,pe.__heap_base.value=n,t}(n.memorySize+r),(o=r)||(o=h),Math.ceil(s/o)*o),u=Le,i=H.length;H.grow(n.tableSize);for(var l=a;l<a+n.memorySize;l++)C[l]=0;for(l=i;l<i+n.tableSize;l++)H.set(l,null);for(var d in Module)d in u||(u[d]=Module[d]);var c=new Proxy(u,{get:function(e,t){switch(t){case"__memory_base":return a;case"__table_base":return i}return t in e?e[t]:e[t]=function(){return n||(n=function(e){var t=Ae(e,!1);return t||(t=_[e]),t}(t)),n.apply(null,arguments)};var n}}),m={"GOT.mem":new Proxy(Le,he),"GOT.func":new Proxy(Le,he),env:c,wasi_snapshot_preview1:c};function f(e){for(var r=0;r<n.tableSize;r++){var s=H.get(i+r);s&&g.set(s,i+r)}_=Ie(e.exports,a),t.allowUndefined||ke();var o=_.__post_instantiate;return o&&(Y?o():V.push(o)),_}if(t.loadAsync){if(e instanceof WebAssembly.Module){var p=new WebAssembly.Instance(e,m);return Promise.resolve(f(p))}return WebAssembly.instantiate(e,m).then(function(e){return f(e.instance)})}var w=e instanceof WebAssembly.Module?e:new WebAssembly.Module(e);return f(p=new WebAssembly.Instance(w,m))}return t.loadAsync?n.neededDynlibs.reduce(function(e,n){return e.then(function(){return Pe(n,t)})},Promise.resolve()).then(function(){return r()}):(n.neededDynlibs.forEach(function(e){Pe(e,t)}),r())}function Ne(e,t){for(var n in e)if(e.hasOwnProperty(n)){var r=Se(n);Module.hasOwnProperty(r)||(Module[r]=e[n])}}function Pe(e,t){"__main__"!=e||Ee.loadedLibNames[e]||(Ee.loadedLibs[-1]={refcount:1/0,name:"__main__",module:Module.asm,global:!0},Ee.loadedLibNames.__main__=-1),t=t||{global:!0,nodelete:!0};var n,r=Ee.loadedLibNames[e];if(r)return n=Ee.loadedLibs[r],t.global&&!n.global&&(n.global=!0,"loading"!==n.module&&Ne(n.module)),t.nodelete&&n.refcount!==1/0&&(n.refcount=1/0),n.refcount++,t.loadAsync?Promise.resolve(r):r;function s(e){if(t.fs){var n=t.fs.readFile(e,{encoding:"binary"});return n instanceof Uint8Array||(n=new Uint8Array(n)),t.loadAsync?Promise.resolve(n):n}return t.loadAsync?(r=e,fetch(r,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load binary file at '"+r+"'";return e.arrayBuffer()}).then(function(e){return new Uint8Array(e)})):d(e);var r}function o(){if(void 0!==Module.preloadedWasm&&void 0!==Module.preloadedWasm[e]){var n=Module.preloadedWasm[e];return t.loadAsync?Promise.resolve(n):n}return t.loadAsync?s(e).then(function(e){return xe(e,t)}):xe(s(e),t)}function _(e){n.global&&Ne(e),n.module=e}return r=Ee.nextHandle++,n={refcount:t.nodelete?1/0:1,name:e,module:"loading",global:t.global},Ee.loadedLibNames[e]=r,Ee.loadedLibs[r]=n,t.loadAsync?o().then(function(e){return _(e),r}):(_(o()),r)}function ke(){for(var e in pe)if(0==pe[e].value){var t=Ae(e,!0);"function"==typeof t?pe[e].value=M(t,t.sig):"number"==typeof t?pe[e].value=t:N(!1,"bad export type for `"+e+"`: "+typeof t)}}function Ce(){se()}Module._abort=Ce,Ce.sig="v",be=n?function(){var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:"undefined"!=typeof dateNow?dateNow:function(){return performance.now()};var Re=!0;function qe(e,t){var n,r;if(0===e)n=Date.now();else{if(1!==e&&4!==e||!Re)return r=28,T[$e()>>2]=r,-1;n=be()}return T[t>>2]=n/1e3|0,T[t+4>>2]=n%1e3*1e3*1e3|0,0}function Te(e){try{return v.grow(e-k.byteLength+65535>>>16),z(v.buffer),1}catch(e){}}function We(e){He(e)}function Ze(e){b(0|e)}qe.sig="iii",We.sig="vi",Ze.sig="vi";var Fe,Le={__indirect_function_table:H,__memory_base:1024,__stack_pointer:G,__table_base:1,abort:Ce,clock_gettime:qe,emscripten_memcpy_big:function(e,t,n){R.copyWithin(e,t,t+n)},emscripten_resize_heap:function(e){var t,n,r=R.length;if((e>>>=0)>2147483648)return!1;for(var s=1;s<=4;s*=2){var o=r*(1+.2/s);if(o=Math.min(o,e+100663296),Te(Math.min(2147483648,((t=Math.max(e,o))%(n=65536)>0&&(t+=n-t%n),t))))return!0}return!1},exit:We,memory:v,setTempRet0:Ze,tree_sitter_log_callback:function(e,t){if(lt){const n=O(t);lt(n,0!==e)}},tree_sitter_parse_callback:function(e,t,n,r,s){var o=it(t,{row:n,column:r});"string"==typeof o?(S(s,o.length,"i32"),function(e,t,n){if(void 0===n&&(n=2147483647),n<2)return 0;for(var r=(n-=2)<2*e.length?n/2:e.length,s=0;s<r;++s){var o=e.charCodeAt(s);q[t>>1]=o,t+=2}q[t>>1]=0}(o,e,10240)):S(s,0,"i32")}},Oe=(function(){var e={env:Le,wasi_snapshot_preview1:Le,"GOT.mem":new Proxy(Le,he),"GOT.func":new Proxy(Le,he)};function t(e,t){var n=e.exports;n=Ie(n,1024),Module.asm=n;var r,s=we(t);s.neededDynlibs&&(E=s.neededDynlibs.concat(E)),r=Module.asm.__wasm_call_ctors,V.unshift(r),re()}function n(e){t(e.instance,e.module)}function r(t){return function(){if(!y&&(a||u)){if("function"==typeof fetch&&!ie(me))return fetch(me,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+me+"'";return e.arrayBuffer()}).catch(function(){return fe(me)});if(l)return new Promise(function(e,t){l(me,function(t){e(new Uint8Array(t))},t)})}return Promise.resolve().then(function(){return fe(me)})}().then(function(t){return WebAssembly.instantiate(t,e)}).then(t,function(e){p("failed to asynchronously prepare wasm: "+e),se(e)})}if(ne(),Module.instantiateWasm)try{return Module.instantiateWasm(e,t)}catch(e){return p("Module.instantiateWasm callback failed with error: "+e),!1}y||"function"!=typeof WebAssembly.instantiateStreaming||ae(me)||ie(me)||"function"!=typeof fetch?r(n):fetch(me,{credentials:"same-origin"}).then(function(t){return WebAssembly.instantiateStreaming(t,e).then(n,function(e){return p("wasm streaming compile failed: "+e),p("falling back to ArrayBuffer instantiation"),r(n)})})}(),Module.___wasm_call_ctors=function(){return(Module.___wasm_call_ctors=Module.asm.__wasm_call_ctors).apply(null,arguments)},Module._malloc=function(){return(Oe=Module._malloc=Module.asm.malloc).apply(null,arguments)}),$e=(Module._ts_language_symbol_count=function(){return(Module._ts_language_symbol_count=Module.asm.ts_language_symbol_count).apply(null,arguments)},Module._ts_language_version=function(){return(Module._ts_language_version=Module.asm.ts_language_version).apply(null,arguments)},Module._ts_language_field_count=function(){return(Module._ts_language_field_count=Module.asm.ts_language_field_count).apply(null,arguments)},Module._ts_language_symbol_name=function(){return(Module._ts_language_symbol_name=Module.asm.ts_language_symbol_name).apply(null,arguments)},Module._ts_language_symbol_for_name=function(){return(Module._ts_language_symbol_for_name=Module.asm.ts_language_symbol_for_name).apply(null,arguments)},Module._ts_language_symbol_type=function(){return(Module._ts_language_symbol_type=Module.asm.ts_language_symbol_type).apply(null,arguments)},Module._ts_language_field_name_for_id=function(){return(Module._ts_language_field_name_for_id=Module.asm.ts_language_field_name_for_id).apply(null,arguments)},Module._memcpy=function(){return(Module._memcpy=Module.asm.memcpy).apply(null,arguments)},Module._free=function(){return(Module._free=Module.asm.free).apply(null,arguments)},Module._calloc=function(){return(Module._calloc=Module.asm.calloc).apply(null,arguments)},Module._ts_parser_delete=function(){return(Module._ts_parser_delete=Module.asm.ts_parser_delete).apply(null,arguments)},Module._ts_parser_set_language=function(){return(Module._ts_parser_set_language=Module.asm.ts_parser_set_language).apply(null,arguments)},Module._ts_parser_timeout_micros=function(){return(Module._ts_parser_timeout_micros=Module.asm.ts_parser_timeout_micros).apply(null,arguments)},Module._ts_parser_set_timeout_micros=function(){return(Module._ts_parser_set_timeout_micros=Module.asm.ts_parser_set_timeout_micros).apply(null,arguments)},Module._memcmp=function(){return(Module._memcmp=Module.asm.memcmp).apply(null,arguments)},Module._ts_query_new=function(){return(Module._ts_query_new=Module.asm.ts_query_new).apply(null,arguments)},Module._ts_query_delete=function(){return(Module._ts_query_delete=Module.asm.ts_query_delete).apply(null,arguments)},Module._iswspace=function(){return(Module._iswspace=Module.asm.iswspace).apply(null,arguments)},Module._iswalnum=function(){return(Module._iswalnum=Module.asm.iswalnum).apply(null,arguments)},Module._ts_query_pattern_count=function(){return(Module._ts_query_pattern_count=Module.asm.ts_query_pattern_count).apply(null,arguments)},Module._ts_query_capture_count=function(){return(Module._ts_query_capture_count=Module.asm.ts_query_capture_count).apply(null,arguments)},Module._ts_query_string_count=function(){return(Module._ts_query_string_count=Module.asm.ts_query_string_count).apply(null,arguments)},Module._ts_query_capture_name_for_id=function(){return(Module._ts_query_capture_name_for_id=Module.asm.ts_query_capture_name_for_id).apply(null,arguments)},Module._ts_query_string_value_for_id=function(){return(Module._ts_query_string_value_for_id=Module.asm.ts_query_string_value_for_id).apply(null,arguments)},Module._ts_query_predicates_for_pattern=function(){return(Module._ts_query_predicates_for_pattern=Module.asm.ts_query_predicates_for_pattern).apply(null,arguments)},Module._ts_tree_copy=function(){return(Module._ts_tree_copy=Module.asm.ts_tree_copy).apply(null,arguments)},Module._ts_tree_delete=function(){return(Module._ts_tree_delete=Module.asm.ts_tree_delete).apply(null,arguments)},Module._ts_init=function(){return(Module._ts_init=Module.asm.ts_init).apply(null,arguments)},Module._ts_parser_new_wasm=function(){return(Module._ts_parser_new_wasm=Module.asm.ts_parser_new_wasm).apply(null,arguments)},Module._ts_parser_enable_logger_wasm=function(){return(Module._ts_parser_enable_logger_wasm=Module.asm.ts_parser_enable_logger_wasm).apply(null,arguments)},Module._ts_parser_parse_wasm=function(){return(Module._ts_parser_parse_wasm=Module.asm.ts_parser_parse_wasm).apply(null,arguments)},Module._ts_language_type_is_named_wasm=function(){return(Module._ts_language_type_is_named_wasm=Module.asm.ts_language_type_is_named_wasm).apply(null,arguments)},Module._ts_language_type_is_visible_wasm=function(){return(Module._ts_language_type_is_visible_wasm=Module.asm.ts_language_type_is_visible_wasm).apply(null,arguments)},Module._ts_tree_root_node_wasm=function(){return(Module._ts_tree_root_node_wasm=Module.asm.ts_tree_root_node_wasm).apply(null,arguments)},Module._ts_tree_edit_wasm=function(){return(Module._ts_tree_edit_wasm=Module.asm.ts_tree_edit_wasm).apply(null,arguments)},Module._ts_tree_get_changed_ranges_wasm=function(){return(Module._ts_tree_get_changed_ranges_wasm=Module.asm.ts_tree_get_changed_ranges_wasm).apply(null,arguments)},Module._ts_tree_cursor_new_wasm=function(){return(Module._ts_tree_cursor_new_wasm=Module.asm.ts_tree_cursor_new_wasm).apply(null,arguments)},Module._ts_tree_cursor_delete_wasm=function(){return(Module._ts_tree_cursor_delete_wasm=Module.asm.ts_tree_cursor_delete_wasm).apply(null,arguments)},Module._ts_tree_cursor_reset_wasm=function(){return(Module._ts_tree_cursor_reset_wasm=Module.asm.ts_tree_cursor_reset_wasm).apply(null,arguments)},Module._ts_tree_cursor_goto_first_child_wasm=function(){return(Module._ts_tree_cursor_goto_first_child_wasm=Module.asm.ts_tree_cursor_goto_first_child_wasm).apply(null,arguments)},Module._ts_tree_cursor_goto_next_sibling_wasm=function(){return(Module._ts_tree_cursor_goto_next_sibling_wasm=Module.asm.ts_tree_cursor_goto_next_sibling_wasm).apply(null,arguments)},Module._ts_tree_cursor_goto_parent_wasm=function(){return(Module._ts_tree_cursor_goto_parent_wasm=Module.asm.ts_tree_cursor_goto_parent_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_type_id_wasm=function(){return(Module._ts_tree_cursor_current_node_type_id_wasm=Module.asm.ts_tree_cursor_current_node_type_id_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_is_named_wasm=function(){return(Module._ts_tree_cursor_current_node_is_named_wasm=Module.asm.ts_tree_cursor_current_node_is_named_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_is_missing_wasm=function(){return(Module._ts_tree_cursor_current_node_is_missing_wasm=Module.asm.ts_tree_cursor_current_node_is_missing_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_id_wasm=function(){return(Module._ts_tree_cursor_current_node_id_wasm=Module.asm.ts_tree_cursor_current_node_id_wasm).apply(null,arguments)},Module._ts_tree_cursor_start_position_wasm=function(){return(Module._ts_tree_cursor_start_position_wasm=Module.asm.ts_tree_cursor_start_position_wasm).apply(null,arguments)},Module._ts_tree_cursor_end_position_wasm=function(){return(Module._ts_tree_cursor_end_position_wasm=Module.asm.ts_tree_cursor_end_position_wasm).apply(null,arguments)},Module._ts_tree_cursor_start_index_wasm=function(){return(Module._ts_tree_cursor_start_index_wasm=Module.asm.ts_tree_cursor_start_index_wasm).apply(null,arguments)},Module._ts_tree_cursor_end_index_wasm=function(){return(Module._ts_tree_cursor_end_index_wasm=Module.asm.ts_tree_cursor_end_index_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_field_id_wasm=function(){return(Module._ts_tree_cursor_current_field_id_wasm=Module.asm.ts_tree_cursor_current_field_id_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_wasm=function(){return(Module._ts_tree_cursor_current_node_wasm=Module.asm.ts_tree_cursor_current_node_wasm).apply(null,arguments)},Module._ts_node_symbol_wasm=function(){return(Module._ts_node_symbol_wasm=Module.asm.ts_node_symbol_wasm).apply(null,arguments)},Module._ts_node_child_count_wasm=function(){return(Module._ts_node_child_count_wasm=Module.asm.ts_node_child_count_wasm).apply(null,arguments)},Module._ts_node_named_child_count_wasm=function(){return(Module._ts_node_named_child_count_wasm=Module.asm.ts_node_named_child_count_wasm).apply(null,arguments)},Module._ts_node_child_wasm=function(){return(Module._ts_node_child_wasm=Module.asm.ts_node_child_wasm).apply(null,arguments)},Module._ts_node_named_child_wasm=function(){return(Module._ts_node_named_child_wasm=Module.asm.ts_node_named_child_wasm).apply(null,arguments)},Module._ts_node_child_by_field_id_wasm=function(){return(Module._ts_node_child_by_field_id_wasm=Module.asm.ts_node_child_by_field_id_wasm).apply(null,arguments)},Module._ts_node_next_sibling_wasm=function(){return(Module._ts_node_next_sibling_wasm=Module.asm.ts_node_next_sibling_wasm).apply(null,arguments)},Module._ts_node_prev_sibling_wasm=function(){return(Module._ts_node_prev_sibling_wasm=Module.asm.ts_node_prev_sibling_wasm).apply(null,arguments)},Module._ts_node_next_named_sibling_wasm=function(){return(Module._ts_node_next_named_sibling_wasm=Module.asm.ts_node_next_named_sibling_wasm).apply(null,arguments)},Module._ts_node_prev_named_sibling_wasm=function(){return(Module._ts_node_prev_named_sibling_wasm=Module.asm.ts_node_prev_named_sibling_wasm).apply(null,arguments)},Module._ts_node_parent_wasm=function(){return(Module._ts_node_parent_wasm=Module.asm.ts_node_parent_wasm).apply(null,arguments)},Module._ts_node_descendant_for_index_wasm=function(){return(Module._ts_node_descendant_for_index_wasm=Module.asm.ts_node_descendant_for_index_wasm).apply(null,arguments)},Module._ts_node_named_descendant_for_index_wasm=function(){return(Module._ts_node_named_descendant_for_index_wasm=Module.asm.ts_node_named_descendant_for_index_wasm).apply(null,arguments)},Module._ts_node_descendant_for_position_wasm=function(){return(Module._ts_node_descendant_for_position_wasm=Module.asm.ts_node_descendant_for_position_wasm).apply(null,arguments)},Module._ts_node_named_descendant_for_position_wasm=function(){return(Module._ts_node_named_descendant_for_position_wasm=Module.asm.ts_node_named_descendant_for_position_wasm).apply(null,arguments)},Module._ts_node_start_point_wasm=function(){return(Module._ts_node_start_point_wasm=Module.asm.ts_node_start_point_wasm).apply(null,arguments)},Module._ts_node_end_point_wasm=function(){return(Module._ts_node_end_point_wasm=Module.asm.ts_node_end_point_wasm).apply(null,arguments)},Module._ts_node_start_index_wasm=function(){return(Module._ts_node_start_index_wasm=Module.asm.ts_node_start_index_wasm).apply(null,arguments)},Module._ts_node_end_index_wasm=function(){return(Module._ts_node_end_index_wasm=Module.asm.ts_node_end_index_wasm).apply(null,arguments)},Module._ts_node_to_string_wasm=function(){return(Module._ts_node_to_string_wasm=Module.asm.ts_node_to_string_wasm).apply(null,arguments)},Module._ts_node_children_wasm=function(){return(Module._ts_node_children_wasm=Module.asm.ts_node_children_wasm).apply(null,arguments)},Module._ts_node_named_children_wasm=function(){return(Module._ts_node_named_children_wasm=Module.asm.ts_node_named_children_wasm).apply(null,arguments)},Module._ts_node_descendants_of_type_wasm=function(){return(Module._ts_node_descendants_of_type_wasm=Module.asm.ts_node_descendants_of_type_wasm).apply(null,arguments)},Module._ts_node_is_named_wasm=function(){return(Module._ts_node_is_named_wasm=Module.asm.ts_node_is_named_wasm).apply(null,arguments)},Module._ts_node_has_changes_wasm=function(){return(Module._ts_node_has_changes_wasm=Module.asm.ts_node_has_changes_wasm).apply(null,arguments)},Module._ts_node_has_error_wasm=function(){return(Module._ts_node_has_error_wasm=Module.asm.ts_node_has_error_wasm).apply(null,arguments)},Module._ts_node_is_missing_wasm=function(){return(Module._ts_node_is_missing_wasm=Module.asm.ts_node_is_missing_wasm).apply(null,arguments)},Module._ts_query_matches_wasm=function(){return(Module._ts_query_matches_wasm=Module.asm.ts_query_matches_wasm).apply(null,arguments)},Module._ts_query_captures_wasm=function(){return(Module._ts_query_captures_wasm=Module.asm.ts_query_captures_wasm).apply(null,arguments)},Module._iswdigit=function(){return(Module._iswdigit=Module.asm.iswdigit).apply(null,arguments)},Module._iswalpha=function(){return(Module._iswalpha=Module.asm.iswalpha).apply(null,arguments)},Module._iswlower=function(){return(Module._iswlower=Module.asm.iswlower).apply(null,arguments)},Module._towupper=function(){return(Module._towupper=Module.asm.towupper).apply(null,arguments)},Module.___errno_location=function(){return($e=Module.___errno_location=Module.asm.__errno_location).apply(null,arguments)}),Ue=(Module._memchr=function(){return(Module._memchr=Module.asm.memchr).apply(null,arguments)},Module._strlen=function(){return(Module._strlen=Module.asm.strlen).apply(null,arguments)},Module.stackSave=function(){return(Ue=Module.stackSave=Module.asm.stackSave).apply(null,arguments)}),De=Module.stackRestore=function(){return(De=Module.stackRestore=Module.asm.stackRestore).apply(null,arguments)},je=Module.stackAlloc=function(){return(je=Module.stackAlloc=Module.asm.stackAlloc).apply(null,arguments)};Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc).apply(null,arguments)},Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=function(){return(Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module.asm._ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm).apply(null,arguments)},Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=function(){return(Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev).apply(null,arguments)},Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=function(){return(Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_).apply(null,arguments)},Module.__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv=function(){return(Module.__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv=Module.asm._ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv).apply(null,arguments)},Module.__Znwm=function(){return(Module.__Znwm=Module.asm._Znwm).apply(null,arguments)},Module.__ZdlPv=function(){return(Module.__ZdlPv=Module.asm._ZdlPv).apply(null,arguments)},Module._orig$ts_parser_timeout_micros=function(){return(Module._orig$ts_parser_timeout_micros=Module.asm.orig$ts_parser_timeout_micros).apply(null,arguments)},Module._orig$ts_parser_set_timeout_micros=function(){return(Module._orig$ts_parser_set_timeout_micros=Module.asm.orig$ts_parser_set_timeout_micros).apply(null,arguments)},Module._TRANSFER_BUFFER=7296,Module.___cxa_new_handler=7928;function ze(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}Module.allocate=function(e,t){var n;return n=t==P?je(e.length):Oe(e.length),e.subarray||e.slice?R.set(e,n):R.set(new Uint8Array(e),n),n};te=function e(){Fe||Be(),Fe||(te=e)};var Ge=!1;function Be(e){function t(){Fe||(Fe=!0,Module.calledRun=!0,x||(Y=!0,ge(V),ge(X),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Ke&&function(e){var t=Module._main;if(t){var n=(e=e||[]).length+1,r=je(4*(n+1));T[r>>2]=j(o);for(var s=1;s<n;s++)T[(r>>2)+s]=j(e[s-1]);T[(r>>2)+n]=0;try{He(t(n,r),!0)}catch(e){if(e instanceof ze)return;if("unwind"==e)return;var a=e;e&&"object"==typeof e&&e.stack&&(a=[e,e.stack]),p("exception thrown: "+a),_(1,e)}finally{!0}}}(e),function(){if(Module.postRun)for("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)e=Module.postRun.shift(),Q.unshift(e);var e;ge(Q)}()))}e=e||s,J>0||!Ge&&(function(){if(E.length){if(!d)return ne(),void E.reduce(function(e,t){return e.then(function(){return Pe(t,{loadAsync:!0,global:!0,nodelete:!0,allowUndefined:!0})})},Promise.resolve()).then(function(){re(),ke()});E.forEach(function(e){Pe(e,{global:!0,nodelete:!0,allowUndefined:!0})}),ke()}else ke()}(),Ge=!0,J>0)||(!function(){if(Module.preRun)for("function"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)e=Module.preRun.shift(),K.unshift(e);var e;ge(K)}(),J>0||(Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),t()},1)):t()))}function He(e,t){e,t&&ye()&&0===e||(ye()||(!0,Module.onExit&&Module.onExit(e),x=!0),_(e,new ze(e)))}if(Module.run=Be,Module.preInit)for("function"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var Ke=!0;Module.noInitialRun&&(Ke=!1),Be();const Ve=Module,Xe={},Qe=4,Ye=5*Qe,Je=2*Qe,et=2*Qe+2*Je,tt={row:0,column:0},nt=/[\w-.]*/g,rt=1,st=2,ot=/^_?tree_sitter_\w+/;var _t,at,ut,it,lt,dt=new Promise(e=>{Module.onRuntimeInitialized=e}).then(()=>{ut=Ve._ts_init(),_t=A(ut,"i32"),at=A(ut+Qe,"i32")});class Parser{static init(){return dt}constructor(){if(null==ut)throw new Error("You must first call Parser.init() and wait for it to resolve.");Ve._ts_parser_new_wasm(),this[0]=A(ut,"i32"),this[1]=A(ut+Qe,"i32")}delete(){Ve._ts_parser_delete(this[0]),Ve._free(this[1]),this[0]=0,this[1]=0}setLanguage(e){let t;if(e){if(e.constructor!==Language)throw new Error("Argument must be a Language");{t=e[0];const n=Ve._ts_language_version(t);if(n<at||_t<n)throw new Error(`Incompatible language version ${n}. `+`Compatibility range ${at} through ${_t}.`)}}else t=0,e=null;return this.language=e,Ve._ts_parser_set_language(this[0],t),this}getLanguage(){return this.language}parse(e,t,n){if("string"==typeof e)it=((t,n,r)=>e.slice(t,r));else{if("function"!=typeof e)throw new Error("Argument must be a string or a function");it=e}this.logCallback?(lt=this.logCallback,Ve._ts_parser_enable_logger_wasm(this[0],1)):(lt=null,Ve._ts_parser_enable_logger_wasm(this[0],0));let r=0,s=0;if(n&&n.includedRanges){r=n.includedRanges.length;let e=s=Ve._calloc(r,et);for(let t=0;t<r;t++)Et(e,n.includedRanges[t]),e+=et}const o=Ve._ts_parser_parse_wasm(this[0],this[1],t?t[0]:0,s,r);if(!o)throw it=null,lt=null,new Error("Parsing failed");const _=new Tree(Xe,o,this.language,it);return it=null,lt=null,_}reset(){Ve._ts_parser_parse_wasm(this[0])}setTimeoutMicros(e){Ve._ts_parser_set_timeout_micros(this[0],e)}getTimeoutMicros(){return Ve._ts_parser_timeout_micros(this[0])}setLogger(e){if(e){if("function"!=typeof e)throw new Error("Logger callback must be a function")}else e=null;return this.logCallback=e,this}getLogger(){return this.logCallback}}class Tree{constructor(e,t,n,r){ft(e),this[0]=t,this.language=n,this.textCallback=r}copy(){const e=Ve._ts_tree_copy(this[0]);return new Tree(Xe,e,this.language,this.textCallback)}delete(){Ve._ts_tree_delete(this[0]),this[0]=0}edit(e){!function(e){let t=ut;yt(t,e.startPosition),yt(t+=Je,e.oldEndPosition),yt(t+=Je,e.newEndPosition),S(t+=Je,e.startIndex,"i32"),S(t+=Qe,e.oldEndIndex,"i32"),S(t+=Qe,e.newEndIndex,"i32"),t+=Qe}(e),Ve._ts_tree_edit_wasm(this[0])}get rootNode(){return Ve._ts_tree_root_node_wasm(this[0]),gt(this)}getLanguage(){return this.language}walk(){return this.rootNode.walk()}getChangedRanges(e){if(e.constructor!==Tree)throw new TypeError("Argument must be a Tree");Ve._ts_tree_get_changed_ranges_wasm(this[0],e[0]);const t=A(ut,"i32"),n=A(ut+Qe,"i32"),r=new Array(t);if(t>0){let e=n;for(let n=0;n<t;n++)r[n]=vt(e),e+=et;Ve._free(n)}return r}}class Node{constructor(e,t){ft(e),this.tree=t}get typeId(){return ht(this),Ve._ts_node_symbol_wasm(this.tree[0])}get type(){return this.tree.language.types[this.typeId]||"ERROR"}get endPosition(){return ht(this),Ve._ts_node_end_point_wasm(this.tree[0]),bt(ut)}get endIndex(){return ht(this),Ve._ts_node_end_index_wasm(this.tree[0])}get text(){return ct(this.tree,this.startIndex,this.endIndex)}isNamed(){return ht(this),1===Ve._ts_node_is_named_wasm(this.tree[0])}hasError(){return ht(this),1===Ve._ts_node_has_error_wasm(this.tree[0])}hasChanges(){return ht(this),1===Ve._ts_node_has_changes_wasm(this.tree[0])}isMissing(){return ht(this),1===Ve._ts_node_is_missing_wasm(this.tree[0])}equals(e){return this.id===e.id}child(e){return ht(this),Ve._ts_node_child_wasm(this.tree[0],e),gt(this.tree)}namedChild(e){return ht(this),Ve._ts_node_named_child_wasm(this.tree[0],e),gt(this.tree)}childForFieldId(e){return ht(this),Ve._ts_node_child_by_field_id_wasm(this.tree[0],e),gt(this.tree)}childForFieldName(e){const t=this.tree.language.fields.indexOf(e);if(-1!==t)return this.childForFieldId(t)}get childCount(){return ht(this),Ve._ts_node_child_count_wasm(this.tree[0])}get namedChildCount(){return ht(this),Ve._ts_node_named_child_count_wasm(this.tree[0])}get firstChild(){return this.child(0)}get firstNamedChild(){return this.namedChild(0)}get lastChild(){return this.child(this.childCount-1)}get lastNamedChild(){return this.namedChild(this.namedChildCount-1)}get children(){if(!this._children){ht(this),Ve._ts_node_children_wasm(this.tree[0]);const e=A(ut,"i32"),t=A(ut+Qe,"i32");if(this._children=new Array(e),e>0){let n=t;for(let t=0;t<e;t++)this._children[t]=gt(this.tree,n),n+=Ye;Ve._free(t)}}return this._children}get namedChildren(){if(!this._namedChildren){ht(this),Ve._ts_node_named_children_wasm(this.tree[0]);const e=A(ut,"i32"),t=A(ut+Qe,"i32");if(this._namedChildren=new Array(e),e>0){let n=t;for(let t=0;t<e;t++)this._namedChildren[t]=gt(this.tree,n),n+=Ye;Ve._free(t)}}return this._namedChildren}descendantsOfType(e,t,n){Array.isArray(e)||(e=[e]),t||(t=tt),n||(n=tt);const r=[],s=this.tree.language.types;for(let t=0,n=s.length;t<n;t++)e.includes(s[t])&&r.push(t);const o=Ve._malloc(Qe*r.count);for(let e=0,t=r.length;e<t;e++)S(o+e*Qe,r[e],"i32");ht(this),Ve._ts_node_descendants_of_type_wasm(this.tree[0],o,r.length,t.row,t.column,n.row,n.column);const _=A(ut,"i32"),a=A(ut+Qe,"i32"),u=new Array(_);if(_>0){let e=a;for(let t=0;t<_;t++)u[t]=gt(this.tree,e),e+=Ye}return Ve._free(a),Ve._free(o),u}get nextSibling(){return ht(this),Ve._ts_node_next_sibling_wasm(this.tree[0]),gt(this.tree)}get previousSibling(){return ht(this),Ve._ts_node_prev_sibling_wasm(this.tree[0]),gt(this.tree)}get nextNamedSibling(){return ht(this),Ve._ts_node_next_named_sibling_wasm(this.tree[0]),gt(this.tree)}get previousNamedSibling(){return ht(this),Ve._ts_node_prev_named_sibling_wasm(this.tree[0]),gt(this.tree)}get parent(){return ht(this),Ve._ts_node_parent_wasm(this.tree[0]),gt(this.tree)}descendantForIndex(e,t=e){if("number"!=typeof e||"number"!=typeof t)throw new Error("Arguments must be numbers");ht(this);let n=ut+Ye;return S(n,e,"i32"),S(n+Qe,t,"i32"),Ve._ts_node_descendant_for_index_wasm(this.tree[0]),gt(this.tree)}namedDescendantForIndex(e,t=e){if("number"!=typeof e||"number"!=typeof t)throw new Error("Arguments must be numbers");ht(this);let n=ut+Ye;return S(n,e,"i32"),S(n+Qe,t,"i32"),Ve._ts_node_named_descendant_for_index_wasm(this.tree[0]),gt(this.tree)}descendantForPosition(e,t=e){if(!pt(e)||!pt(t))throw new Error("Arguments must be {row, column} objects");ht(this);let n=ut+Ye;return yt(n,e),yt(n+Je,t),Ve._ts_node_descendant_for_position_wasm(this.tree[0]),gt(this.tree)}namedDescendantForPosition(e,t=e){if(!pt(e)||!pt(t))throw new Error("Arguments must be {row, column} objects");ht(this);let n=ut+Ye;return yt(n,e),yt(n+Je,t),Ve._ts_node_named_descendant_for_position_wasm(this.tree[0]),gt(this.tree)}walk(){return ht(this),Ve._ts_tree_cursor_new_wasm(this.tree[0]),new TreeCursor(Xe,this.tree)}toString(){ht(this);const e=Ve._ts_node_to_string_wasm(this.tree[0]),t=function(e){for(var t="";;){var n=R[e++>>0];if(!n)return t;t+=String.fromCharCode(n)}}(e);return Ve._free(e),t}}class TreeCursor{constructor(e,t){ft(e),this.tree=t,Mt(this)}delete(){wt(this),Ve._ts_tree_cursor_delete_wasm(this.tree[0]),this[0]=this[1]=this[2]=0}reset(e){ht(e),wt(this,ut+Ye),Ve._ts_tree_cursor_reset_wasm(this.tree[0]),Mt(this)}get nodeType(){return this.tree.language.types[this.nodeTypeId]||"ERROR"}get nodeTypeId(){return wt(this),Ve._ts_tree_cursor_current_node_type_id_wasm(this.tree[0])}get nodeId(){return wt(this),Ve._ts_tree_cursor_current_node_id_wasm(this.tree[0])}get nodeIsNamed(){return wt(this),1===Ve._ts_tree_cursor_current_node_is_named_wasm(this.tree[0])}get nodeIsMissing(){return wt(this),1===Ve._ts_tree_cursor_current_node_is_missing_wasm(this.tree[0])}get nodeText(){wt(this);const e=Ve._ts_tree_cursor_start_index_wasm(this.tree[0]),t=Ve._ts_tree_cursor_end_index_wasm(this.tree[0]);return ct(this.tree,e,t)}get startPosition(){return wt(this),Ve._ts_tree_cursor_start_position_wasm(this.tree[0]),bt(ut)}get endPosition(){return wt(this),Ve._ts_tree_cursor_end_position_wasm(this.tree[0]),bt(ut)}get startIndex(){return wt(this),Ve._ts_tree_cursor_start_index_wasm(this.tree[0])}get endIndex(){return wt(this),Ve._ts_tree_cursor_end_index_wasm(this.tree[0])}currentNode(){return wt(this),Ve._ts_tree_cursor_current_node_wasm(this.tree[0]),gt(this.tree)}currentFieldId(){return wt(this),Ve._ts_tree_cursor_current_field_id_wasm(this.tree[0])}currentFieldName(){return this.tree.language.fields[this.currentFieldId()]}gotoFirstChild(){wt(this);const e=Ve._ts_tree_cursor_goto_first_child_wasm(this.tree[0]);return Mt(this),1===e}gotoNextSibling(){wt(this);const e=Ve._ts_tree_cursor_goto_next_sibling_wasm(this.tree[0]);return Mt(this),1===e}gotoParent(){wt(this);const e=Ve._ts_tree_cursor_goto_parent_wasm(this.tree[0]);return Mt(this),1===e}}class Language{constructor(e,t){ft(e),this[0]=t,this.types=new Array(Ve._ts_language_symbol_count(this[0]));for(let e=0,t=this.types.length;e<t;e++)Ve._ts_language_symbol_type(this[0],e)<2&&(this.types[e]=O(Ve._ts_language_symbol_name(this[0],e)));this.fields=new Array(Ve._ts_language_field_count(this[0])+1);for(let e=0,t=this.fields.length;e<t;e++){const t=Ve._ts_language_field_name_for_id(this[0],e);this.fields[e]=0!==t?O(t):null}}get version(){return Ve._ts_language_version(this[0])}get fieldCount(){return this.fields.length-1}fieldIdForName(e){const t=this.fields.indexOf(e);return-1!==t?t:null}fieldNameForId(e){return this.fields[e]||null}idForNodeType(e,t){const n=D(e),r=Ve._malloc(n+1);U(e,r,n+1);const s=Ve._ts_language_symbol_for_name(this[0],r,n,t);return Ve._free(r),s||null}get nodeTypeCount(){return Ve._ts_language_symbol_count(this[0])}nodeTypeForId(e){const t=Ve._ts_language_symbol_name(this[0],e);return t?O(t):null}nodeTypeIsNamed(e){return!!Ve._ts_language_type_is_named_wasm(this[0],e)}nodeTypeIsVisible(e){return!!Ve._ts_language_type_is_visible_wasm(this[0],e)}query(e){const t=D(e),n=Ve._malloc(t+1);U(e,n,t+1);const r=Ve._ts_query_new(this[0],n,t,ut,ut+Qe);if(!r){const t=A(ut+Qe,"i32"),r=O(n,A(ut,"i32")).length,s=e.substr(r,100).split("\n")[0];let o,_=s.match(nt)[0];switch(t){case 2:o=new RangeError(`Bad node name '${_}'`);break;case 3:o=new RangeError(`Bad field name '${_}'`);break;case 4:o=new RangeError(`Bad capture name @${_}`);break;case 5:o=new TypeError(`Bad pattern structure at offset ${r}: '${s}'...`),_="";break;default:o=new SyntaxError(`Bad syntax at offset ${r}: '${s}'...`),_=""}throw o.index=r,o.length=_.length,Ve._free(n),o}const s=Ve._ts_query_string_count(r),o=Ve._ts_query_capture_count(r),_=Ve._ts_query_pattern_count(r),a=new Array(o),u=new Array(s);for(let e=0;e<o;e++){const t=Ve._ts_query_capture_name_for_id(r,e,ut),n=A(ut,"i32");a[e]=O(t,n)}for(let e=0;e<s;e++){const t=Ve._ts_query_string_value_for_id(r,e,ut),n=A(ut,"i32");u[e]=O(t,n)}const i=new Array(_),l=new Array(_),d=new Array(_),c=new Array(_),m=new Array(_);for(let e=0;e<_;e++){const t=Ve._ts_query_predicates_for_pattern(r,e,ut),n=A(ut,"i32");c[e]=[],m[e]=[];const s=[];let o=t;for(let t=0;t<n;t++){const t=A(o,"i32"),n=A(o+=Qe,"i32");if(o+=Qe,t===rt)s.push({type:"capture",name:a[n]});else if(t===st)s.push({type:"string",value:u[n]});else if(s.length>0){if("string"!==s[0].type)throw new Error("Predicates must begin with a literal value");const t=s[0].value;let n=!0;switch(t){case"not-eq?":n=!1;case"eq?":if(3!==s.length)throw new Error(`Wrong number of arguments to \`#eq?\` predicate. Expected 2, got ${s.length-1}`);if("capture"!==s[1].type)throw new Error(`First argument of \`#eq?\` predicate must be a capture. Got "${s[1].value}"`);if("capture"===s[2].type){const t=s[1].name,r=s[2].name;m[e].push(function(e){let s,o;for(const n of e)n.name===t&&(s=n.node),n.name===r&&(o=n.node);return s.text===o.text===n})}else{const t=s[1].name,r=s[2].value;m[e].push(function(e){for(const s of e)if(s.name===t)return s.node.text===r===n;return!1})}break;case"not-match?":n=!1;case"match?":if(3!==s.length)throw new Error(`Wrong number of arguments to \`#match?\` predicate. Expected 2, got ${s.length-1}.`);if("capture"!==s[1].type)throw new Error(`First argument of \`#match?\` predicate must be a capture. Got "${s[1].value}".`);if("string"!==s[2].type)throw new Error(`Second argument of \`#match?\` predicate must be a string. Got @${s[2].value}.`);const r=s[1].name,o=new RegExp(s[2].value);m[e].push(function(e){for(const t of e)if(t.name===r)return o.test(t.node.text)===n;return!1});break;case"set!":if(s.length<2||s.length>3)throw new Error(`Wrong number of arguments to \`#set!\` predicate. Expected 1 or 2. Got ${s.length-1}.`);if(s.some(e=>"string"!==e.type))throw new Error('Arguments to `#set!` predicate must be a strings.".');i[e]||(i[e]={}),i[e][s[1].value]=s[2]?s[2].value:null;break;case"is?":case"is-not?":if(s.length<2||s.length>3)throw new Error(`Wrong number of arguments to \`#${t}\` predicate. Expected 1 or 2. Got ${s.length-1}.`);if(s.some(e=>"string"!==e.type))throw new Error(`Arguments to \`#${t}\` predicate must be a strings.".`);const _="is?"===t?l:d;_[e]||(_[e]={}),_[e][s[1].value]=s[2]?s[2].value:null;break;default:c[e].push({operator:t,operands:s.slice(1)})}s.length=0}}Object.freeze(i[e]),Object.freeze(l[e]),Object.freeze(d[e])}return Ve._free(n),new Query(Xe,r,a,m,c,Object.freeze(i),Object.freeze(l),Object.freeze(d))}static load(e){let t;if(e instanceof Uint8Array)t=Promise.resolve(e);else{const n=e;if("undefined"!=typeof process&&process.versions&&process.versions.node){const e=require("fs");t=Promise.resolve(e.readFileSync(n))}else t=fetch(n).then(e=>e.arrayBuffer().then(t=>{if(e.ok)return new Uint8Array(t);{const n=new TextDecoder("utf-8").decode(t);throw new Error(`Language.load failed with status ${e.status}.\n\n${n}`)}}))}const n="function"==typeof loadSideModule?loadSideModule:xe;return t.then(e=>n(e,{loadAsync:!0})).then(e=>{const t=Object.keys(e),n=t.find(e=>ot.test(e)&&!e.includes("external_scanner_"));n||console.log(`Couldn't find language function in WASM file. Symbols:\n${JSON.stringify(t,null,2)}`);const r=e[n]();return new Language(Xe,r)})}}class Query{constructor(e,t,n,r,s,o,_,a){ft(e),this[0]=t,this.captureNames=n,this.textPredicates=r,this.predicates=s,this.setProperties=o,this.assertedProperties=_,this.refutedProperties=a}delete(){Ve._ts_query_delete(this[0]),this[0]=0}matches(e,t,n){t||(t=tt),n||(n=tt),ht(e),Ve._ts_query_matches_wasm(this[0],e.tree[0],t.row,t.column,n.row,n.column);const r=A(ut,"i32"),s=A(ut+Qe,"i32"),o=new Array(r);let _=0,a=s;for(let t=0;t<r;t++){const n=A(a,"i32"),r=A(a+=Qe,"i32");a+=Qe;const s=new Array(r);if(a=mt(this,e.tree,a,s),this.textPredicates[n].every(e=>e(s))){o[_++]={pattern:n,captures:s};const e=this.setProperties[n];e&&(o[t].setProperties=e);const r=this.assertedProperties[n];r&&(o[t].assertedProperties=r);const a=this.refutedProperties[n];a&&(o[t].refutedProperties=a)}}return o.length=_,Ve._free(s),o}captures(e,t,n){t||(t=tt),n||(n=tt),ht(e),Ve._ts_query_captures_wasm(this[0],e.tree[0],t.row,t.column,n.row,n.column);const r=A(ut,"i32"),s=A(ut+Qe,"i32"),o=[],_=[];let a=s;for(let t=0;t<r;t++){const t=A(a,"i32"),n=A(a+=Qe,"i32"),r=A(a+=Qe,"i32");if(a+=Qe,_.length=n,a=mt(this,e.tree,a,_),this.textPredicates[t].every(e=>e(_))){const e=_[r],n=this.setProperties[t];n&&(e.setProperties=n);const s=this.assertedProperties[t];s&&(e.assertedProperties=s);const a=this.refutedProperties[t];a&&(e.refutedProperties=a),o.push(e)}}return Ve._free(s),o}predicatesForPattern(e){return this.predicates[e]}}function ct(e,t,n){const r=n-t;let s=e.textCallback(t,null,n);for(t+=s.length;t<n;){const r=e.textCallback(t,null,n);if(!(r&&r.length>0))break;t+=r.length,s+=r}return t>n&&(s=s.slice(0,r)),s}function mt(e,t,n,r){for(let s=0,o=r.length;s<o;s++){const o=A(n,"i32"),_=gt(t,n+=Qe);n+=Ye,r[s]={name:e.captureNames[o],node:_}}return n}function ft(e){if(e!==Xe)throw new Error("Illegal constructor")}function pt(e){return e&&"number"==typeof e.row&&"number"==typeof e.column}function ht(e){let t=ut;S(t,e.id,"i32"),S(t+=Qe,e.startIndex,"i32"),S(t+=Qe,e.startPosition.row,"i32"),S(t+=Qe,e.startPosition.column,"i32"),S(t+=Qe,e[0],"i32")}function gt(e,t=ut){const n=A(t,"i32");if(0===n)return null;const r=A(t+=Qe,"i32"),s=A(t+=Qe,"i32"),o=A(t+=Qe,"i32"),_=A(t+=Qe,"i32"),a=new Node(Xe,e);return a.id=n,a.startIndex=r,a.startPosition={row:s,column:o},a[0]=_,a}function wt(e,t=ut){S(t+0*Qe,e[0],"i32"),S(t+1*Qe,e[1],"i32"),S(t+2*Qe,e[2],"i32")}function Mt(e){e[0]=A(ut+0*Qe,"i32"),e[1]=A(ut+1*Qe,"i32"),e[2]=A(ut+2*Qe,"i32")}function yt(e,t){S(e,t.row,"i32"),S(e+Qe,t.column,"i32")}function bt(e){return{row:A(e,"i32"),column:A(e+Qe,"i32")}}function Et(e,t){yt(e,t.startPosition),yt(e+=Je,t.endPosition),S(e+=Je,t.startIndex,"i32"),S(e+=Qe,t.endIndex,"i32"),e+=Qe}function vt(e){const t={};return t.startPosition=bt(e),e+=Je,t.endPosition=bt(e),e+=Je,t.startIndex=A(e,"i32"),e+=Qe,t.endIndex=A(e,"i32"),t}return Parser.Language=Language,Parser.Parser=Parser,Parser});
diff --git a/docs/assets/web-tree-sitter-0.19.3/tree-sitter.wasm b/docs/assets/web-tree-sitter-0.19.3/tree-sitter.wasm
deleted file mode 100755
index 2cd6fbc..0000000
Binary files a/docs/assets/web-tree-sitter-0.19.3/tree-sitter.wasm and /dev/null differ
diff --git a/docs/index.html b/docs/index.html
deleted file mode 100644
index 0d798c2..0000000
--- a/docs/index.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE html>
-<html>
-
-<head>
-  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
-  <link rel="stylesheet" href="assets/tree-sitter-playground-0.19.3/style.css" media="screen" type="text/css">
-  <title>Tree-sitter YAML Playground</title>
-</head>
-
-<body>
-  <div id="container">
-    <main id="main-content">
-      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.45.0/codemirror.min.css">
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/clusterize.js/0.18.0/clusterize.min.css">
-<style>
-.version {
-  font-size: 0.5em;
-}
-.credit {
-  font-style: italic;
-  margin-top: 20px;
-  text-align: center;
-}
-</style>
-
-<h1><a href="https://github.com/ikatyang/tree-sitter-yaml">Tree-sitter YAML</a> <span class="version">v0.5.0</span></h1>
-
-<div id="playground-container" style="visibility: hidden;">
-
-<h4>Code</h4>
-<select id="language-select">
-  <option value="yaml" selected="selected">YAML</option>
-</select>
-
-<input id="logging-checkbox" type="checkbox"></input>
-<label for="logging-checkbox">Log</label>
-
-<input id="query-checkbox" type="checkbox"></input>
-<label for="query-checkbox">Query</label>
-
-<textarea id="code-input">
-</textarea>
-
-<div id="query-container" style="visibility: hidden; position: absolute;">
-  <h4>Query</h4>
-  <textarea id="query-input"></textarea>
-</div>
-
-<h4>Tree</h4>
-<span id="update-time"></span>
-<div id="output-container-scroll">
-  <pre id="output-container" class="highlight"></pre>
-</div>
-
-</div>
-
-<div class="credit">
-  This playground was modified from <a href="https://tree-sitter.github.io/tree-sitter/playground">the official Tree-sitter Playground</a>.
-</div>
-
-<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.45.0/codemirror.min.js"></script>
-
-<script>LANGUAGE_BASE_URL = "assets/tree-sitter-yaml-0.5.0";</script>
-<script src="assets/web-tree-sitter-0.19.3/tree-sitter.js"></script>
-
-<script src="https://cdnjs.cloudflare.com/ajax/libs/clusterize.js/0.18.0/clusterize.min.js"></script>
-<script src="assets/tree-sitter-playground-0.19.3/playground.js"></script>
-
-<script>
-((codeExample, queryExample) => {
-  const handle = setInterval(() => {
-    const $codeEditor = document.querySelector('.CodeMirror');
-    const $queryEditor = document.querySelector('#query-container .CodeMirror');
-    const $queryCheckbox = document.querySelector('#query-checkbox');
-    if ($codeEditor && $queryEditor) {
-      $codeEditor.CodeMirror.setValue(codeExample);
-      if (queryExample) {
-        $queryEditor.CodeMirror.setValue(queryExample);
-        if (!$queryCheckbox.checked) $queryCheckbox.click();
-      }
-      clearInterval(handle);
-    }
-  }, 500);
-})(`---
-invoice: 34843
-date   : 2001-01-23
-bill-to: &id001
-    given  : Chris
-    family : Dumars
-    address:
-        lines: |
-            458 Walkman Dr.
-            Suite #292
-        city    : Royal Oak
-        state   : MI
-        postal  : 48046
-ship-to: *id001
-product:
-    - sku         : BL394D
-      quantity    : 4
-      description : Basketball
-      price       : 450.00
-    - sku         : BL4438H
-      quantity    : 1
-      description : Super Hoop
-      price       : 2392.00
-tax  : 251.42
-total: 4443.52
-comments: >
-    Late afternoon is best.
-    Backup contact is Nancy
-    Billsmer @ 338-4338.`, ``);
-</script>
-
-    </main>
-  </div>
-</body>
-</html>
-
-<script
-  src="https://code.jquery.com/jquery-3.3.1.min.js"
-  crossorigin="anonymous">
-</script>
diff --git a/scripts/generate-playground.js b/examples/invoice.yaml
similarity index 77%
rename from scripts/generate-playground.js
rename to examples/invoice.yaml
index f9e2b58..4625739 100644
--- a/scripts/generate-playground.js
+++ b/examples/invoice.yaml
@@ -1,9 +1,4 @@
-const generatePlayground = require("../tree-sitter/script/generate-playground");
-
-generatePlayground("docs", {
-  name: "YAML",
-  example: `
----
+--- !<tag:clarkevans.com,2002:invoice>
 invoice: 34843
 date   : 2001-01-23
 bill-to: &id001
@@ -28,9 +23,7 @@ product:
       price       : 2392.00
 tax  : 251.42
 total: 4443.52
-comments: >
+comments:
     Late afternoon is best.
     Backup contact is Nancy
     Billsmer @ 338-4338.
-`.trim()
-});
diff --git a/examples/log-file.yaml b/examples/log-file.yaml
new file mode 100644
index 0000000..eb5fb8a
--- /dev/null
+++ b/examples/log-file.yaml
@@ -0,0 +1,29 @@
+---
+Time: 2001-11-23 15:01:42 -5
+User: ed
+Warning:
+  This is an error message
+  for the log file
+---
+Time: 2001-11-23 15:02:31 -5
+User: ed
+Warning:
+  A slightly different error
+  message.
+---
+Date: 2001-11-23 15:03:17 -5
+User: ed
+Fatal:
+  Unknown variable "bar"
+Stack:
+  - file: TopClass.py
+    line: 23
+    code: |
+      x = MoreObject("345\n")
+  - file: MoreClass.py
+    line: 58
+    code: |-
+      foo = bar
+
+
+
diff --git a/grammar-schema.js b/grammar-schema.js
deleted file mode 100644
index bbb0389..0000000
--- a/grammar-schema.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Ref: https://yaml.org/spec/1.2/spec.html#schema/core/
-
-module.exports = grammar({
-  name: "schema",
-  extras: $ => [],
-  rules: {
-    pln: $ => choice($.nul, $.bol, $.int, $.flt),
-    nul: $ => /~|null|Null|NULL/,
-    bol: $ => /true|True|TRUE|false|False|FALSE/,
-    int: $ => or([
-      /[-+]?[0-9]+/, // base 10
-      /0o[0-7]+/, // base 8
-      /0x[0-9a-fA-F]+/, // base 16
-    ]),
-    flt: $ => or([
-      /[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?/, // number
-      /[-+]?(\.inf|\.Inf|\.INF)/, // infinity
-      /(\.nan|\.NaN|\.NAN)/, // not a number
-    ]),
-  },
-});
-
-function or(regexList) {
-  return new RegExp(regexList.map(regex => `(${regex.source})`).join('|'));
-}
diff --git a/grammar.js b/grammar.js
index 8d9b19c..142ed86 100644
--- a/grammar.js
+++ b/grammar.js
@@ -1,3 +1,11 @@
+/**
+ * @file YAML grammar for tree-sitter
+ * @author Ika <ikatyang@gmail.com>
+ * @license MIT
+ */
+
+/// <reference types="tree-sitter-cli/dsl" />
+
 module.exports = grammar({
   name: "yaml",
 
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..8b00cf3
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,387 @@
+{
+  "name": "@tree-sitter-grammars/tree-sitter-yaml",
+  "version": "0.6.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "@tree-sitter-grammars/tree-sitter-yaml",
+      "version": "0.6.0",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "dependencies": {
+        "node-addon-api": "^8.0.0",
+        "node-gyp-build": "^4.8.0"
+      },
+      "devDependencies": {
+        "prebuildify": "^6.0.0",
+        "tree-sitter-cli": "^0.22.2"
+      },
+      "peerDependencies": {
+        "tree-sitter": "^0.21.1"
+      },
+      "peerDependenciesMeta": {
+        "tree_sitter": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/bl": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+      "dev": true,
+      "dependencies": {
+        "buffer": "^5.5.0",
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.4.0"
+      }
+    },
+    "node_modules/buffer": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
+    },
+    "node_modules/chownr": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+      "dev": true
+    },
+    "node_modules/end-of-stream": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+      "dev": true,
+      "dependencies": {
+        "once": "^1.4.0"
+      }
+    },
+    "node_modules/execspawn": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz",
+      "integrity": "sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg==",
+      "dev": true,
+      "dependencies": {
+        "util-extend": "^1.0.1"
+      }
+    },
+    "node_modules/fs-constants": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+      "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+      "dev": true
+    },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "dev": true
+    },
+    "node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/mkdirp-classic": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+      "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+      "dev": true
+    },
+    "node_modules/node-abi": {
+      "version": "3.56.0",
+      "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz",
+      "integrity": "sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==",
+      "dev": true,
+      "dependencies": {
+        "semver": "^7.3.5"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/node-addon-api": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.0.0.tgz",
+      "integrity": "sha512-ipO7rsHEBqa9STO5C5T10fj732ml+5kLN1cAG8/jdHd56ldQeGj3Q7+scUS+VHK/qy1zLEwC4wMK5+yM0btPvw==",
+      "engines": {
+        "node": "^18 || ^20 || >= 21"
+      }
+    },
+    "node_modules/node-gyp-build": {
+      "version": "4.8.0",
+      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz",
+      "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==",
+      "bin": {
+        "node-gyp-build": "bin.js",
+        "node-gyp-build-optional": "optional.js",
+        "node-gyp-build-test": "build-test.js"
+      }
+    },
+    "node_modules/npm-run-path": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz",
+      "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==",
+      "dev": true,
+      "dependencies": {
+        "path-key": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "dev": true,
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/prebuildify": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/prebuildify/-/prebuildify-6.0.0.tgz",
+      "integrity": "sha512-DEvK4C3tcimIp7Pzqbs036n9i6CTKGp1XVEpMnr4wV3enKU5sBogPP+lP3KZw7993i42bXnsd5eIxAXQ566Cqw==",
+      "dev": true,
+      "dependencies": {
+        "execspawn": "^1.0.1",
+        "minimist": "^1.2.5",
+        "mkdirp-classic": "^0.5.3",
+        "node-abi": "^3.3.0",
+        "npm-run-path": "^3.1.0",
+        "pump": "^3.0.0",
+        "tar-fs": "^2.1.0"
+      },
+      "bin": {
+        "prebuildify": "bin.js"
+      }
+    },
+    "node_modules/pump": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+      "dev": true,
+      "dependencies": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "dev": true,
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/semver": {
+      "version": "7.6.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "dev": true,
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
+    "node_modules/tar-fs": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+      "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+      "dev": true,
+      "dependencies": {
+        "chownr": "^1.1.1",
+        "mkdirp-classic": "^0.5.2",
+        "pump": "^3.0.0",
+        "tar-stream": "^2.1.4"
+      }
+    },
+    "node_modules/tar-stream": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+      "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+      "dev": true,
+      "dependencies": {
+        "bl": "^4.0.3",
+        "end-of-stream": "^1.4.1",
+        "fs-constants": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^3.1.1"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/tree-sitter": {
+      "version": "0.21.1",
+      "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.21.1.tgz",
+      "integrity": "sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ==",
+      "hasInstallScript": true,
+      "peer": true,
+      "dependencies": {
+        "node-addon-api": "^8.0.0",
+        "node-gyp-build": "^4.8.0"
+      }
+    },
+    "node_modules/tree-sitter-cli": {
+      "version": "0.22.2",
+      "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.22.2.tgz",
+      "integrity": "sha512-ecqccEp27XMFXgjLMEEU71vK9JCWAC7fqSTTxcs5P1tnEnaaf4GkHz/wfo4lJ9l3rfxcTDPxN84tHAoitIQqdA==",
+      "dev": true,
+      "hasInstallScript": true,
+      "bin": {
+        "tree-sitter": "cli.js"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+      "dev": true
+    },
+    "node_modules/util-extend": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz",
+      "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==",
+      "dev": true
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+      "dev": true
+    },
+    "node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    }
+  }
+}
diff --git a/package.json b/package.json
index 44851bb..1a61e84 100644
--- a/package.json
+++ b/package.json
@@ -1,62 +1,75 @@
 {
-  "name": "tree-sitter-yaml",
-  "version": "0.5.0",
+  "name": "@tree-sitter-grammars/tree-sitter-yaml",
+  "version": "0.6.0",
+  "license": "MIT",
   "description": "YAML grammar for tree-sitter",
-  "keywords": [
-    "parser",
-    "lexer"
-  ],
+  "repository": "github:tree-sitter-grammars/tree-sitter-yaml",
   "main": "bindings/node",
   "types": "bindings/node",
-  "repository": "https://github.com/ikatyang/tree-sitter-yaml",
-  "homepage": "https://github.com/ikatyang/tree-sitter-yaml#readme",
   "author": {
     "name": "Ika",
     "email": "ikatyang@gmail.com",
     "url": "https://github.com/ikatyang"
   },
-  "license": "MIT",
-  "scripts": {
-    "test": "yarn tree-sitter test",
-    "prepack": "bash ./scripts/update-schema.sh && yarn tree-sitter generate",
-    "release": "standard-version --commit-all",
-    "tree-sitter": "./tree-sitter/target/release/tree-sitter",
-    "install": "node-gyp-build",
-    "prebuildify": "prebuildify --napi --strip"
-  },
-  "standard-version": {
-    "preset": "angular",
-    "scripts": {
-      "postbump": "rm -r docs && node scripts/generate-playground.js && git add docs"
+  "maintainers": [
+    {
+      "name": "Amaan Qureshi",
+      "email": "amaanq12@gmail.com"
     }
-  },
+  ],
+  "keywords": [
+    "incremental",
+    "parsing",
+    "tree-sitter",
+    "yaml"
+  ],
+  "files": [
+    "grammar.js",
+    "binding.gyp",
+    "prebuilds/**",
+    "bindings/node/*",
+    "queries/*",
+    "src/**",
+    "schema/**"
+  ],
   "dependencies": {
-    "node-addon-api": "^7.1.0",
+    "node-addon-api": "^8.0.0",
     "node-gyp-build": "^4.8.0"
   },
+  "devDependencies": {
+    "prebuildify": "^6.0.0",
+    "tree-sitter-cli": "^0.22.2"
+  },
   "peerDependencies": {
-    "tree-sitter": "^0.21.0"
+    "tree-sitter": "^0.21.1"
   },
   "peerDependenciesMeta": {
     "tree_sitter": {
       "optional": true
     }
   },
-  "devDependencies": {
-    "get-stdin": "^8.0.0",
-    "natural-orderby": "2.0.3",
-    "standard-version": "7.0.0",
-    "prebuildify": "^6.0.0"
+  "scripts": {
+    "build": "tree-sitter generate --no-bindings",
+    "postbuild": "npm run --prefix schema/core build",
+    "test": "tree-sitter test",
+    "install": "node-gyp-build",
+    "prebuildify": "prebuildify --napi --strip"
+  },
+  "publishConfig": {
+    "access": "public"
   },
-  "files": [
-    "/src/",
-    "/bindings/node/",
-    "/binding.gyp",
-    "/grammar.js"
-  ],
   "tree-sitter": [
     {
-      "scope": "text.yaml"
+      "scope": "text.yaml",
+      "file-types": [
+        "yml",
+        "yaml"
+      ],
+      "injection-regex": "^ya?ml$",
+      "highlights": "queries/highlights.scm",
+      "external-files": [
+        "src/schema.core.c"
+      ]
     }
   ]
 }
diff --git a/pyproject.toml b/pyproject.toml
index 71c0229..7fda8ad 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
 
 [project]
 name = "tree-sitter-yaml"
-description = "Yaml grammar for tree-sitter"
-version = "0.0.1"
+description = "YAML grammar for tree-sitter"
+version = "0.6.0"
 keywords = ["incremental", "parsing", "tree-sitter", "yaml"]
 classifiers = [
   "Intended Audience :: Developers",
@@ -18,8 +18,16 @@ requires-python = ">=3.8"
 license.text = "MIT"
 readme = "README.md"
 
+[[project.authors]]
+name = "Ika"
+email = "ikatyang@gmail.com"
+
+[[project.maintainers]]
+name = "Amaan Qureshi"
+email = "amaanq12@gmail.com"
+
 [project.urls]
-Homepage = "https://github.com/tree-sitter/tree-sitter-yaml"
+Homepage = "https://github.com/tree-sitter-grammars/tree-sitter-yaml"
 
 [project.optional-dependencies]
 core = ["tree-sitter~=0.21"]
diff --git a/queries/highlights.scm b/queries/highlights.scm
new file mode 100644
index 0000000..cb9dcc6
--- /dev/null
+++ b/queries/highlights.scm
@@ -0,0 +1,79 @@
+(boolean_scalar) @boolean
+
+(null_scalar) @constant.builtin
+
+[
+  (double_quote_scalar)
+  (single_quote_scalar)
+  (block_scalar)
+  (string_scalar)
+] @string
+
+[
+  (integer_scalar)
+  (float_scalar)
+] @number
+
+(comment) @comment
+
+[
+  (anchor_name)
+  (alias_name)
+] @label
+
+(tag) @type
+
+[
+  (yaml_directive)
+  (tag_directive)
+  (reserved_directive)
+] @attribute
+
+(block_mapping_pair
+  key: (flow_node
+    [
+      (double_quote_scalar)
+      (single_quote_scalar)
+    ] @property))
+
+(block_mapping_pair
+  key: (flow_node
+    (plain_scalar
+      (string_scalar) @property)))
+
+(flow_mapping
+  (_
+    key: (flow_node
+      [
+        (double_quote_scalar)
+        (single_quote_scalar)
+      ] @property)))
+
+(flow_mapping
+  (_
+    key: (flow_node
+      (plain_scalar
+        (string_scalar) @property))))
+
+[
+  ","
+  "-"
+  ":"
+  ">"
+  "?"
+  "|"
+] @punctuation.delimiter
+
+[
+  "["
+  "]"
+  "{"
+  "}"
+] @punctuation.bracket
+
+[
+  "*"
+  "&"
+  "---"
+  "..."
+] @punctuation.special
diff --git a/schema/core/grammar.js b/schema/core/grammar.js
new file mode 100644
index 0000000..2ae7356
--- /dev/null
+++ b/schema/core/grammar.js
@@ -0,0 +1,32 @@
+/** @see {@link Core Schema|https://yaml.org/spec/1.2.2/#103-core-schema} */
+
+/// <reference types="tree-sitter-cli/dsl" />
+
+module.exports = grammar({
+  name: "core_schema",
+
+  extras: _ => [],
+
+  rules: {
+    scalar: $ => choice($.null, $.bool, $.int, $.float),
+
+    null: _ => token(choice("~", "null", "Null", "NULL")),
+
+    bool: _ => token(choice("true", "True", "TRUE", "false", "False", "FALSE")),
+
+    int: _ => token(choice(
+      /[-+]?[0-9]+/, // base 10
+      /0o[0-7]+/,  // base 8
+      /0x[0-9a-fA-F]+/, // base 12
+    )),
+
+    float: _ => token(choice(
+      /[-+]?(\.\d+|\d+(\.\d*)?)([eE][-+]?\d+)?/, // number
+      seq(
+        optional(choice("-", "+")),
+        choice(".inf", ".Inf", ".INF")
+      ),  // infinity
+      choice(".nan", ".NaN", ".NAN"),  // not a number
+    )),
+  },
+});
diff --git a/schema/core/package.json b/schema/core/package.json
new file mode 100644
index 0000000..f24b8bc
--- /dev/null
+++ b/schema/core/package.json
@@ -0,0 +1,7 @@
+{
+  "private": true,
+  "scripts": {
+    "build": "tree-sitter generate --no-bindings",
+    "postbuild": "node ../update-schema.js core"
+  }
+}
diff --git a/schema/core/src/grammar.json b/schema/core/src/grammar.json
new file mode 100644
index 0000000..5b48018
--- /dev/null
+++ b/schema/core/src/grammar.json
@@ -0,0 +1,180 @@
+{
+  "name": "core_schema",
+  "rules": {
+    "scalar": {
+      "type": "CHOICE",
+      "members": [
+        {
+          "type": "SYMBOL",
+          "name": "null"
+        },
+        {
+          "type": "SYMBOL",
+          "name": "bool"
+        },
+        {
+          "type": "SYMBOL",
+          "name": "int"
+        },
+        {
+          "type": "SYMBOL",
+          "name": "float"
+        }
+      ]
+    },
+    "null": {
+      "type": "TOKEN",
+      "content": {
+        "type": "CHOICE",
+        "members": [
+          {
+            "type": "STRING",
+            "value": "~"
+          },
+          {
+            "type": "STRING",
+            "value": "null"
+          },
+          {
+            "type": "STRING",
+            "value": "Null"
+          },
+          {
+            "type": "STRING",
+            "value": "NULL"
+          }
+        ]
+      }
+    },
+    "bool": {
+      "type": "TOKEN",
+      "content": {
+        "type": "CHOICE",
+        "members": [
+          {
+            "type": "STRING",
+            "value": "true"
+          },
+          {
+            "type": "STRING",
+            "value": "True"
+          },
+          {
+            "type": "STRING",
+            "value": "TRUE"
+          },
+          {
+            "type": "STRING",
+            "value": "false"
+          },
+          {
+            "type": "STRING",
+            "value": "False"
+          },
+          {
+            "type": "STRING",
+            "value": "FALSE"
+          }
+        ]
+      }
+    },
+    "int": {
+      "type": "TOKEN",
+      "content": {
+        "type": "CHOICE",
+        "members": [
+          {
+            "type": "PATTERN",
+            "value": "[-+]?[0-9]+"
+          },
+          {
+            "type": "PATTERN",
+            "value": "0o[0-7]+"
+          },
+          {
+            "type": "PATTERN",
+            "value": "0x[0-9a-fA-F]+"
+          }
+        ]
+      }
+    },
+    "float": {
+      "type": "TOKEN",
+      "content": {
+        "type": "CHOICE",
+        "members": [
+          {
+            "type": "PATTERN",
+            "value": "[-+]?(\\.\\d+|\\d+(\\.\\d*)?)([eE][-+]?\\d+)?"
+          },
+          {
+            "type": "SEQ",
+            "members": [
+              {
+                "type": "CHOICE",
+                "members": [
+                  {
+                    "type": "CHOICE",
+                    "members": [
+                      {
+                        "type": "STRING",
+                        "value": "-"
+                      },
+                      {
+                        "type": "STRING",
+                        "value": "+"
+                      }
+                    ]
+                  },
+                  {
+                    "type": "BLANK"
+                  }
+                ]
+              },
+              {
+                "type": "CHOICE",
+                "members": [
+                  {
+                    "type": "STRING",
+                    "value": ".inf"
+                  },
+                  {
+                    "type": "STRING",
+                    "value": ".Inf"
+                  },
+                  {
+                    "type": "STRING",
+                    "value": ".INF"
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "type": "CHOICE",
+            "members": [
+              {
+                "type": "STRING",
+                "value": ".nan"
+              },
+              {
+                "type": "STRING",
+                "value": ".NaN"
+              },
+              {
+                "type": "STRING",
+                "value": ".NAN"
+              }
+            ]
+          }
+        ]
+      }
+    }
+  },
+  "extras": [],
+  "conflicts": [],
+  "precedences": [],
+  "externals": [],
+  "inline": [],
+  "supertypes": []
+}
diff --git a/schema/core/src/node-types.json b/schema/core/src/node-types.json
new file mode 100644
index 0000000..29cca72
--- /dev/null
+++ b/schema/core/src/node-types.json
@@ -0,0 +1,45 @@
+[
+  {
+    "type": "scalar",
+    "named": true,
+    "fields": {},
+    "children": {
+      "multiple": false,
+      "required": true,
+      "types": [
+        {
+          "type": "bool",
+          "named": true
+        },
+        {
+          "type": "float",
+          "named": true
+        },
+        {
+          "type": "int",
+          "named": true
+        },
+        {
+          "type": "null",
+          "named": true
+        }
+      ]
+    }
+  },
+  {
+    "type": "bool",
+    "named": true
+  },
+  {
+    "type": "float",
+    "named": true
+  },
+  {
+    "type": "int",
+    "named": true
+  },
+  {
+    "type": "null",
+    "named": true
+  }
+]
\ No newline at end of file
diff --git a/schema/core/src/parser.c b/schema/core/src/parser.c
new file mode 100644
index 0000000..d60811e
--- /dev/null
+++ b/schema/core/src/parser.c
@@ -0,0 +1,360 @@
+#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 4
+#define LARGE_STATE_COUNT 2
+#define SYMBOL_COUNT 6
+#define ALIAS_COUNT 0
+#define TOKEN_COUNT 5
+#define EXTERNAL_TOKEN_COUNT 0
+#define FIELD_COUNT 0
+#define MAX_ALIAS_SEQUENCE_LENGTH 1
+#define PRODUCTION_ID_COUNT 1
+
+enum ts_symbol_identifiers {
+  sym_null = 1,
+  sym_bool = 2,
+  sym_int = 3,
+  sym_float = 4,
+  sym_scalar = 5,
+};
+
+static const char * const ts_symbol_names[] = {
+  [ts_builtin_sym_end] = "end",
+  [sym_null] = "null",
+  [sym_bool] = "bool",
+  [sym_int] = "int",
+  [sym_float] = "float",
+  [sym_scalar] = "scalar",
+};
+
+static const TSSymbol ts_symbol_map[] = {
+  [ts_builtin_sym_end] = ts_builtin_sym_end,
+  [sym_null] = sym_null,
+  [sym_bool] = sym_bool,
+  [sym_int] = sym_int,
+  [sym_float] = sym_float,
+  [sym_scalar] = sym_scalar,
+};
+
+static const TSSymbolMetadata ts_symbol_metadata[] = {
+  [ts_builtin_sym_end] = {
+    .visible = false,
+    .named = true,
+  },
+  [sym_null] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_bool] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_int] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_float] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_scalar] = {
+    .visible = true,
+    .named = true,
+  },
+};
+
+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] = 3,
+};
+
+static bool ts_lex(TSLexer *lexer, TSStateId state) {
+  START_LEXER();
+  eof = lexer->eof(lexer);
+  switch (state) {
+    case 0:
+      if (eof) ADVANCE(34);
+      if (lookahead == '+' ||
+          lookahead == '-') ADVANCE(1);
+      if (lookahead == '.') ADVANCE(6);
+      if (lookahead == '0') ADVANCE(37);
+      if (lookahead == 'F') ADVANCE(2);
+      if (lookahead == 'N') ADVANCE(16);
+      if (lookahead == 'T') ADVANCE(13);
+      if (lookahead == 'f') ADVANCE(17);
+      if (lookahead == 'n') ADVANCE(29);
+      if (lookahead == 't') ADVANCE(26);
+      if (lookahead == '~') ADVANCE(35);
+      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(38);
+      END_STATE();
+    case 1:
+      if (lookahead == '.') ADVANCE(7);
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(38);
+      END_STATE();
+    case 2:
+      if (lookahead == 'A') ADVANCE(9);
+      if (lookahead == 'a') ADVANCE(22);
+      END_STATE();
+    case 3:
+      if (lookahead == 'A') ADVANCE(12);
+      if (lookahead == 'a') ADVANCE(12);
+      END_STATE();
+    case 4:
+      if (lookahead == 'E') ADVANCE(36);
+      END_STATE();
+    case 5:
+      if (lookahead == 'F') ADVANCE(41);
+      END_STATE();
+    case 6:
+      if (lookahead == 'I') ADVANCE(11);
+      if (lookahead == 'N') ADVANCE(3);
+      if (lookahead == 'i') ADVANCE(24);
+      if (lookahead == 'n') ADVANCE(18);
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(42);
+      END_STATE();
+    case 7:
+      if (lookahead == 'I') ADVANCE(11);
+      if (lookahead == 'i') ADVANCE(24);
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(42);
+      END_STATE();
+    case 8:
+      if (lookahead == 'L') ADVANCE(35);
+      END_STATE();
+    case 9:
+      if (lookahead == 'L') ADVANCE(14);
+      END_STATE();
+    case 10:
+      if (lookahead == 'L') ADVANCE(8);
+      END_STATE();
+    case 11:
+      if (lookahead == 'N') ADVANCE(5);
+      if (lookahead == 'n') ADVANCE(20);
+      END_STATE();
+    case 12:
+      if (lookahead == 'N') ADVANCE(41);
+      END_STATE();
+    case 13:
+      if (lookahead == 'R') ADVANCE(15);
+      if (lookahead == 'r') ADVANCE(28);
+      END_STATE();
+    case 14:
+      if (lookahead == 'S') ADVANCE(4);
+      END_STATE();
+    case 15:
+      if (lookahead == 'U') ADVANCE(4);
+      END_STATE();
+    case 16:
+      if (lookahead == 'U') ADVANCE(10);
+      if (lookahead == 'u') ADVANCE(23);
+      END_STATE();
+    case 17:
+      if (lookahead == 'a') ADVANCE(22);
+      END_STATE();
+    case 18:
+      if (lookahead == 'a') ADVANCE(25);
+      END_STATE();
+    case 19:
+      if (lookahead == 'e') ADVANCE(36);
+      END_STATE();
+    case 20:
+      if (lookahead == 'f') ADVANCE(41);
+      END_STATE();
+    case 21:
+      if (lookahead == 'l') ADVANCE(35);
+      END_STATE();
+    case 22:
+      if (lookahead == 'l') ADVANCE(27);
+      END_STATE();
+    case 23:
+      if (lookahead == 'l') ADVANCE(21);
+      END_STATE();
+    case 24:
+      if (lookahead == 'n') ADVANCE(20);
+      END_STATE();
+    case 25:
+      if (lookahead == 'n') ADVANCE(41);
+      END_STATE();
+    case 26:
+      if (lookahead == 'r') ADVANCE(28);
+      END_STATE();
+    case 27:
+      if (lookahead == 's') ADVANCE(19);
+      END_STATE();
+    case 28:
+      if (lookahead == 'u') ADVANCE(19);
+      END_STATE();
+    case 29:
+      if (lookahead == 'u') ADVANCE(23);
+      END_STATE();
+    case 30:
+      if (lookahead == '+' ||
+          lookahead == '-') ADVANCE(32);
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(43);
+      END_STATE();
+    case 31:
+      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(39);
+      END_STATE();
+    case 32:
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(43);
+      END_STATE();
+    case 33:
+      if (('0' <= lookahead && lookahead <= '9') ||
+          ('A' <= lookahead && lookahead <= 'F') ||
+          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(40);
+      END_STATE();
+    case 34:
+      ACCEPT_TOKEN(ts_builtin_sym_end);
+      END_STATE();
+    case 35:
+      ACCEPT_TOKEN(sym_null);
+      END_STATE();
+    case 36:
+      ACCEPT_TOKEN(sym_bool);
+      END_STATE();
+    case 37:
+      ACCEPT_TOKEN(sym_int);
+      if (lookahead == '.') ADVANCE(42);
+      if (lookahead == 'o') ADVANCE(31);
+      if (lookahead == 'x') ADVANCE(33);
+      if (lookahead == 'E' ||
+          lookahead == 'e') ADVANCE(30);
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(38);
+      END_STATE();
+    case 38:
+      ACCEPT_TOKEN(sym_int);
+      if (lookahead == '.') ADVANCE(42);
+      if (lookahead == 'E' ||
+          lookahead == 'e') ADVANCE(30);
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(38);
+      END_STATE();
+    case 39:
+      ACCEPT_TOKEN(sym_int);
+      if (('0' <= lookahead && lookahead <= '7')) ADVANCE(39);
+      END_STATE();
+    case 40:
+      ACCEPT_TOKEN(sym_int);
+      if (('0' <= lookahead && lookahead <= '9') ||
+          ('A' <= lookahead && lookahead <= 'F') ||
+          ('a' <= lookahead && lookahead <= 'f')) ADVANCE(40);
+      END_STATE();
+    case 41:
+      ACCEPT_TOKEN(sym_float);
+      END_STATE();
+    case 42:
+      ACCEPT_TOKEN(sym_float);
+      if (lookahead == 'E' ||
+          lookahead == 'e') ADVANCE(30);
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(42);
+      END_STATE();
+    case 43:
+      ACCEPT_TOKEN(sym_float);
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(43);
+      END_STATE();
+    default:
+      return false;
+  }
+}
+
+static const TSLexMode ts_lex_modes[STATE_COUNT] = {
+  [0] = {.lex_state = 0},
+  [1] = {.lex_state = 0},
+  [2] = {.lex_state = 0},
+  [3] = {.lex_state = 0},
+};
+
+static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
+  [0] = {
+    [ts_builtin_sym_end] = ACTIONS(1),
+    [sym_null] = ACTIONS(1),
+    [sym_bool] = ACTIONS(1),
+    [sym_int] = ACTIONS(1),
+    [sym_float] = ACTIONS(1),
+  },
+  [1] = {
+    [sym_scalar] = STATE(3),
+    [sym_null] = ACTIONS(3),
+    [sym_bool] = ACTIONS(3),
+    [sym_int] = ACTIONS(5),
+    [sym_float] = ACTIONS(5),
+  },
+};
+
+static const uint16_t ts_small_parse_table[] = {
+  [0] = 1,
+    ACTIONS(7), 1,
+      ts_builtin_sym_end,
+  [4] = 1,
+    ACTIONS(9), 1,
+      ts_builtin_sym_end,
+};
+
+static const uint32_t ts_small_parse_table_map[] = {
+  [SMALL_STATE(2)] = 0,
+  [SMALL_STATE(3)] = 4,
+};
+
+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(2),
+  [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2),
+  [7] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1),
+  [9] = {.entry = {.count = 1, .reusable = true}},  ACCEPT_INPUT(),
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#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_core_schema() {
+  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,
+    .primary_state_ids = ts_primary_state_ids,
+  };
+  return &language;
+}
+#ifdef __cplusplus
+}
+#endif
diff --git a/schema/core/src/tree_sitter/alloc.h b/schema/core/src/tree_sitter/alloc.h
new file mode 100644
index 0000000..1f4466d
--- /dev/null
+++ b/schema/core/src/tree_sitter/alloc.h
@@ -0,0 +1,54 @@
+#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_
diff --git a/schema/core/src/tree_sitter/array.h b/schema/core/src/tree_sitter/array.h
new file mode 100644
index 0000000..15a3b23
--- /dev/null
+++ b/schema/core/src/tree_sitter/array.h
@@ -0,0 +1,290 @@
+#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_
diff --git a/schema/core/src/tree_sitter/parser.h b/schema/core/src/tree_sitter/parser.h
new file mode 100644
index 0000000..17b4fde
--- /dev/null
+++ b/schema/core/src/tree_sitter/parser.h
@@ -0,0 +1,230 @@
+#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_
diff --git a/schema/json/grammar.js b/schema/json/grammar.js
new file mode 100644
index 0000000..24bdba6
--- /dev/null
+++ b/schema/json/grammar.js
@@ -0,0 +1,21 @@
+/** @see {@link JSON Schema|https://yaml.org/spec/1.2.2/#102-json-schema} */
+
+/// <reference types="tree-sitter-cli/dsl" />
+
+module.exports = grammar({
+  name: "json_schema",
+
+  extras: _ => [],
+
+  rules: {
+    scalar: $ => choice($.null, $.bool, $.int, $.float),
+
+    null: _ => token("null"),
+
+    bool: _ => token(choice("true", "false")),
+
+    int: _ => token(/-?(0|[1-9][0-9]*)/),
+
+    float: _ => token(/-?(0|[1-9][0-9]*)(\.[0-9]*)?([eE][-+]?[0-9]+)?/),
+  },
+});
diff --git a/schema/json/package.json b/schema/json/package.json
new file mode 100644
index 0000000..76a1a1d
--- /dev/null
+++ b/schema/json/package.json
@@ -0,0 +1,7 @@
+{
+  "private": true,
+  "scripts": {
+    "build": "tree-sitter generate --no-bindings",
+    "postbuild": "node ../update-schema.js json"
+  }
+}
diff --git a/schema/json/src/grammar.json b/schema/json/src/grammar.json
new file mode 100644
index 0000000..e2f0e70
--- /dev/null
+++ b/schema/json/src/grammar.json
@@ -0,0 +1,69 @@
+{
+  "name": "json_schema",
+  "rules": {
+    "scalar": {
+      "type": "CHOICE",
+      "members": [
+        {
+          "type": "SYMBOL",
+          "name": "null"
+        },
+        {
+          "type": "SYMBOL",
+          "name": "bool"
+        },
+        {
+          "type": "SYMBOL",
+          "name": "int"
+        },
+        {
+          "type": "SYMBOL",
+          "name": "float"
+        }
+      ]
+    },
+    "null": {
+      "type": "TOKEN",
+      "content": {
+        "type": "STRING",
+        "value": "null"
+      }
+    },
+    "bool": {
+      "type": "TOKEN",
+      "content": {
+        "type": "CHOICE",
+        "members": [
+          {
+            "type": "STRING",
+            "value": "true"
+          },
+          {
+            "type": "STRING",
+            "value": "false"
+          }
+        ]
+      }
+    },
+    "int": {
+      "type": "TOKEN",
+      "content": {
+        "type": "PATTERN",
+        "value": "-?(0|[1-9][0-9]*)"
+      }
+    },
+    "float": {
+      "type": "TOKEN",
+      "content": {
+        "type": "PATTERN",
+        "value": "-?(0|[1-9][0-9]*)(\\.[0-9]*)?([eE][-+]?[0-9]+)?"
+      }
+    }
+  },
+  "extras": [],
+  "conflicts": [],
+  "precedences": [],
+  "externals": [],
+  "inline": [],
+  "supertypes": []
+}
diff --git a/schema/json/src/node-types.json b/schema/json/src/node-types.json
new file mode 100644
index 0000000..29cca72
--- /dev/null
+++ b/schema/json/src/node-types.json
@@ -0,0 +1,45 @@
+[
+  {
+    "type": "scalar",
+    "named": true,
+    "fields": {},
+    "children": {
+      "multiple": false,
+      "required": true,
+      "types": [
+        {
+          "type": "bool",
+          "named": true
+        },
+        {
+          "type": "float",
+          "named": true
+        },
+        {
+          "type": "int",
+          "named": true
+        },
+        {
+          "type": "null",
+          "named": true
+        }
+      ]
+    }
+  },
+  {
+    "type": "bool",
+    "named": true
+  },
+  {
+    "type": "float",
+    "named": true
+  },
+  {
+    "type": "int",
+    "named": true
+  },
+  {
+    "type": "null",
+    "named": true
+  }
+]
\ No newline at end of file
diff --git a/schema/json/src/parser.c b/schema/json/src/parser.c
new file mode 100644
index 0000000..30e364f
--- /dev/null
+++ b/schema/json/src/parser.c
@@ -0,0 +1,262 @@
+#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 4
+#define LARGE_STATE_COUNT 2
+#define SYMBOL_COUNT 6
+#define ALIAS_COUNT 0
+#define TOKEN_COUNT 5
+#define EXTERNAL_TOKEN_COUNT 0
+#define FIELD_COUNT 0
+#define MAX_ALIAS_SEQUENCE_LENGTH 1
+#define PRODUCTION_ID_COUNT 1
+
+enum ts_symbol_identifiers {
+  sym_null = 1,
+  sym_bool = 2,
+  sym_int = 3,
+  sym_float = 4,
+  sym_scalar = 5,
+};
+
+static const char * const ts_symbol_names[] = {
+  [ts_builtin_sym_end] = "end",
+  [sym_null] = "null",
+  [sym_bool] = "bool",
+  [sym_int] = "int",
+  [sym_float] = "float",
+  [sym_scalar] = "scalar",
+};
+
+static const TSSymbol ts_symbol_map[] = {
+  [ts_builtin_sym_end] = ts_builtin_sym_end,
+  [sym_null] = sym_null,
+  [sym_bool] = sym_bool,
+  [sym_int] = sym_int,
+  [sym_float] = sym_float,
+  [sym_scalar] = sym_scalar,
+};
+
+static const TSSymbolMetadata ts_symbol_metadata[] = {
+  [ts_builtin_sym_end] = {
+    .visible = false,
+    .named = true,
+  },
+  [sym_null] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_bool] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_int] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_float] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_scalar] = {
+    .visible = true,
+    .named = true,
+  },
+};
+
+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] = 3,
+};
+
+static bool ts_lex(TSLexer *lexer, TSStateId state) {
+  START_LEXER();
+  eof = lexer->eof(lexer);
+  switch (state) {
+    case 0:
+      if (eof) ADVANCE(13);
+      if (lookahead == '-') ADVANCE(1);
+      if (lookahead == '0') ADVANCE(16);
+      if (lookahead == 'f') ADVANCE(2);
+      if (lookahead == 'n') ADVANCE(10);
+      if (lookahead == 't') ADVANCE(7);
+      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(17);
+      END_STATE();
+    case 1:
+      if (lookahead == '0') ADVANCE(16);
+      if (('1' <= lookahead && lookahead <= '9')) ADVANCE(17);
+      END_STATE();
+    case 2:
+      if (lookahead == 'a') ADVANCE(4);
+      END_STATE();
+    case 3:
+      if (lookahead == 'e') ADVANCE(15);
+      END_STATE();
+    case 4:
+      if (lookahead == 'l') ADVANCE(8);
+      END_STATE();
+    case 5:
+      if (lookahead == 'l') ADVANCE(14);
+      END_STATE();
+    case 6:
+      if (lookahead == 'l') ADVANCE(5);
+      END_STATE();
+    case 7:
+      if (lookahead == 'r') ADVANCE(9);
+      END_STATE();
+    case 8:
+      if (lookahead == 's') ADVANCE(3);
+      END_STATE();
+    case 9:
+      if (lookahead == 'u') ADVANCE(3);
+      END_STATE();
+    case 10:
+      if (lookahead == 'u') ADVANCE(6);
+      END_STATE();
+    case 11:
+      if (lookahead == '+' ||
+          lookahead == '-') ADVANCE(12);
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(19);
+      END_STATE();
+    case 12:
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(19);
+      END_STATE();
+    case 13:
+      ACCEPT_TOKEN(ts_builtin_sym_end);
+      END_STATE();
+    case 14:
+      ACCEPT_TOKEN(sym_null);
+      END_STATE();
+    case 15:
+      ACCEPT_TOKEN(sym_bool);
+      END_STATE();
+    case 16:
+      ACCEPT_TOKEN(sym_int);
+      if (lookahead == '.') ADVANCE(18);
+      if (lookahead == 'E' ||
+          lookahead == 'e') ADVANCE(11);
+      END_STATE();
+    case 17:
+      ACCEPT_TOKEN(sym_int);
+      if (lookahead == '.') ADVANCE(18);
+      if (lookahead == 'E' ||
+          lookahead == 'e') ADVANCE(11);
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(17);
+      END_STATE();
+    case 18:
+      ACCEPT_TOKEN(sym_float);
+      if (lookahead == 'E' ||
+          lookahead == 'e') ADVANCE(11);
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(18);
+      END_STATE();
+    case 19:
+      ACCEPT_TOKEN(sym_float);
+      if (('0' <= lookahead && lookahead <= '9')) ADVANCE(19);
+      END_STATE();
+    default:
+      return false;
+  }
+}
+
+static const TSLexMode ts_lex_modes[STATE_COUNT] = {
+  [0] = {.lex_state = 0},
+  [1] = {.lex_state = 0},
+  [2] = {.lex_state = 0},
+  [3] = {.lex_state = 0},
+};
+
+static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
+  [0] = {
+    [ts_builtin_sym_end] = ACTIONS(1),
+    [sym_null] = ACTIONS(1),
+    [sym_bool] = ACTIONS(1),
+    [sym_int] = ACTIONS(1),
+    [sym_float] = ACTIONS(1),
+  },
+  [1] = {
+    [sym_scalar] = STATE(3),
+    [sym_null] = ACTIONS(3),
+    [sym_bool] = ACTIONS(3),
+    [sym_int] = ACTIONS(5),
+    [sym_float] = ACTIONS(5),
+  },
+};
+
+static const uint16_t ts_small_parse_table[] = {
+  [0] = 1,
+    ACTIONS(7), 1,
+      ts_builtin_sym_end,
+  [4] = 1,
+    ACTIONS(9), 1,
+      ts_builtin_sym_end,
+};
+
+static const uint32_t ts_small_parse_table_map[] = {
+  [SMALL_STATE(2)] = 0,
+  [SMALL_STATE(3)] = 4,
+};
+
+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(2),
+  [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2),
+  [7] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1),
+  [9] = {.entry = {.count = 1, .reusable = true}},  ACCEPT_INPUT(),
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#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_json_schema() {
+  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,
+    .primary_state_ids = ts_primary_state_ids,
+  };
+  return &language;
+}
+#ifdef __cplusplus
+}
+#endif
diff --git a/schema/json/src/tree_sitter/alloc.h b/schema/json/src/tree_sitter/alloc.h
new file mode 100644
index 0000000..1f4466d
--- /dev/null
+++ b/schema/json/src/tree_sitter/alloc.h
@@ -0,0 +1,54 @@
+#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_
diff --git a/schema/json/src/tree_sitter/array.h b/schema/json/src/tree_sitter/array.h
new file mode 100644
index 0000000..15a3b23
--- /dev/null
+++ b/schema/json/src/tree_sitter/array.h
@@ -0,0 +1,290 @@
+#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_
diff --git a/schema/json/src/tree_sitter/parser.h b/schema/json/src/tree_sitter/parser.h
new file mode 100644
index 0000000..17b4fde
--- /dev/null
+++ b/schema/json/src/tree_sitter/parser.h
@@ -0,0 +1,230 @@
+#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_
diff --git a/scripts/update-schema.js b/schema/update-schema.js
old mode 100644
new mode 100755
similarity index 63%
rename from scripts/update-schema.js
rename to schema/update-schema.js
index 124c6b2..8c8cf27
--- a/scripts/update-schema.js
+++ b/schema/update-schema.js
@@ -1,14 +1,18 @@
-const fs = require("fs");
-const path = require("path");
-const getStdin = require("get-stdin");
+#!/usr/bin/env node
 
-const STATE_FREEZE = -1;
+// @ts-nocheck
 
-getStdin().then(stdin => {
-  const cases = extractCases(stdin);
+const { writeFileSync } = require("fs");
+const { readFile } = require("fs/promises");
+const { join } = require("path");
+
+const schema = process.argv[2] ?? "core";
+
+readFile(join(__dirname, schema, "src", "parser.c"), "utf8").then(input => {
+  const cases = extractCases(input);
   const enums = ["RS_STR"];
   const content = "switch (sch_stt) " + block([
-    `case ${STATE_FREEZE}:\n  break;`,
+    "case SCH_STT_FRZ:\n  break;",
     cases
       .map(([key, { content }]) => `${(key === "default" ? "default:" : `case ${key}:`)}\n${indent(content)}`)
       .join("\n  END_STATE();\n")
@@ -22,41 +26,39 @@ getStdin().then(stdin => {
         }
         return `{*rlt_sch = RS_STR; return ${state};}`;
       })
-      .replace("ACCEPT_TOKEN(ts_builtin_sym_end);", "assert(false);")
+      .replace("ACCEPT_TOKEN(ts_builtin_sym_end);", "abort();")
       .replace(/ACCEPT_TOKEN\((\w+)\);/g, (_, name) => {
-        const newName = "RS_" + name.replace("sym_", "").toUpperCase();
+        const newName = "RS_" + convertName(name);
         if (!enums.includes(newName)) {
           enums.push(newName);
         }
         return `*rlt_sch = ${newName};`;
       })
       .replace(/END_STATE\(\);/g, `break;`)
-      .replace("return false;", `*rlt_sch = RS_STR;\n  return ${STATE_FREEZE};`)
+      .replace("return false;", '*rlt_sch = RS_STR;\n  return SCH_STT_FRZ;')
       .replace(/lookahead/g, "cur_chr"),
   ]);
-  fs.writeFileSync(
-    path.resolve(__dirname, "../src/schema.generated.cc"),
+  writeFileSync(
+    join(__dirname, "..", "src", `schema.${schema}.c`),
     [
-      `#include <cassert>`,
-      `namespace tree_sitter_yaml {`,
-      `const int8_t SCH_STT_FRZ = ${STATE_FREEZE};`,
-      `enum ResultSchema ${block(enums.map((k) => `${k},`))};`,
-      `int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) ${block([
+      "#include <stdlib.h>",
+      "#define SCH_STT_FRZ -1",
+      `typedef enum ${block(enums.map((k) => `${k},`))} ResultSchema;`,
+      `static int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) ${block([
         content,
         `if (cur_chr != '\\r' && cur_chr != '\\n' && cur_chr != ' ' && cur_chr != 0) *rlt_sch = RS_STR;`,
-        `return ${STATE_FREEZE};`,
+        "return SCH_STT_FRZ;",
       ])}`,
-      `}`,
-    ].join("\n\n"),
+    ].join("\n\n") + "\n",
   );
 });
 
-function extractCases(stdin) {
+function extractCases(input) {
   const MAIN_SIGNATURE = "static bool ts_lex(TSLexer *lexer, TSStateId state) {";
   const SWITCH_CASE = "switch (state) {\n";
-  const startIndex = stdin.indexOf(SWITCH_CASE, stdin.indexOf(MAIN_SIGNATURE)) + SWITCH_CASE.length;
-  const endIndex = stdin.indexOf("}\n}", startIndex);
-  const content = stdin.slice(startIndex, endIndex).replace(/^\s*if \(eof\).+\n/mg, "").trimEnd();
+  const startIndex = input.indexOf(SWITCH_CASE, input.indexOf(MAIN_SIGNATURE)) + SWITCH_CASE.length;
+  const endIndex = input.indexOf("}\n}", startIndex);
+  const content = input.slice(startIndex, endIndex).replace(/^\s*if \(eof\).+\n/mg, "").trimEnd();
   return dedent(dedent(content)).split("END_STATE();").map(text => {
     const index = text.indexOf(":\n");
     const key = text.slice(0, index).trim().replace(/^case /, "");
@@ -68,6 +70,10 @@ function extractCases(stdin) {
   });
 }
 
+function convertName(name) {
+  return name.replace("sym_", "").toUpperCase();
+}
+
 function block(contents) {
   return `{\n${indent(contents)}\n}`;
 }
diff --git a/scripts/setup-tree-sitter.sh b/scripts/setup-tree-sitter.sh
deleted file mode 100644
index 1299e58..0000000
--- a/scripts/setup-tree-sitter.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-git submodule update --init
-cd tree-sitter
-./script/build-wasm
-cargo build --release
diff --git a/scripts/update-schema.sh b/scripts/update-schema.sh
deleted file mode 100644
index f4dc5de..0000000
--- a/scripts/update-schema.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-cd $(dirname "$0")/..
-
-ROOT_DIR=$PWD
-TREE_SITTER_CLI="$ROOT_DIR/tree-sitter/target/release/tree-sitter"
-SCHEMA_GRAMMAR="$ROOT_DIR/grammar-schema.js"
-TEMP_DIR=$(mktemp -d)
-
-cd $TEMP_DIR
-cp $SCHEMA_GRAMMAR grammar.js
-$TREE_SITTER_CLI generate
-cat $TEMP_DIR/src/parser.c | node $ROOT_DIR/scripts/update-schema.js
diff --git a/scripts/update-spec-corpus.js b/scripts/update-spec-corpus.js
deleted file mode 100644
index 5ca997f..0000000
--- a/scripts/update-spec-corpus.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const fs = require("fs");
-const { orderBy } = require("natural-orderby");
-const path = require("path");
-
-const testSuiteDirname = "./yaml-test-suite";
-const whitelistForValidTest = [
-  "Duplicate YAML directive", // semantic error
-  "Missing space in YAML directive", // https://github.com/yaml/yaml-test-suite/issues/38
-  "Tag shorthand used in documents but only defined in the first", // semantic error
-];
-
-const testCases = {};
-const testTagsDirname = path.join(testSuiteDirname, "tags");
-for (const tagName of fs.readdirSync(testTagsDirname)) {
-  const testTagDirname = path.join(testTagsDirname, tagName);
-  for (const testCaseId of fs.readdirSync(testTagDirname)) {
-    const dirname = path.join(testSuiteDirname, testCaseId);
-    const title = fs.readFileSync(path.join(dirname, "==="), "utf8").trim();
-    const content = fs.readFileSync(path.join(dirname, "in.yaml"), "utf8");
-    const isInvalid =
-      fs.existsSync(path.join(dirname, "error")) &&
-      whitelistForValidTest.indexOf(title) === -1;
-    testCases[isInvalid ? `${title} [INVALID]` : title] = {
-      input: content,
-      output: "()",
-    };
-  }
-}
-
-const finalTestCases = {};
-for (const title of orderBy(Object.keys(testCases))) {
-  finalTestCases[title] = testCases[title];
-}
-
-fs.writeFileSync(
-  "./corpus/spec.txt",
-  Object.entries(finalTestCases)
-    .map(([title, { input, output }]) =>
-      [
-        "=".repeat(80),
-        title,
-        "=".repeat(80),
-        input,
-        "-".repeat(80),
-        "",
-        output.trim(),
-        ""
-      ].join("\n")
-    )
-    .join("\n")
-);
diff --git a/setup.py b/setup.py
index ad8c7f7..c88b5ac 100644
--- a/setup.py
+++ b/setup.py
@@ -36,10 +36,10 @@ def get_tag(self):
             sources=[
                 "bindings/python/tree_sitter_yaml/binding.c",
                 "src/parser.c",
-                # NOTE: if your language uses an external scanner, add it here.
+                "src/scanner.c",
             ],
             extra_compile_args=(
-                ["-std=c11"] if system() != 'Windows' else []
+                ["-std=c11"] if system() != "Windows" else []
             ),
             define_macros=[
                 ("Py_LIMITED_API", "0x03080000"),
diff --git a/src/scanner.c b/src/scanner.c
index 59a5b75..026a4bf 100644
--- a/src/scanner.c
+++ b/src/scanner.c
@@ -1,12 +1,18 @@
 #include "tree_sitter/array.h"
 #include "tree_sitter/parser.h"
 
-#include "./schema.generated.c"
-#include <stdbool.h>
+#define _str(x) #x
+#define _file(x) _str(./schema.x.c)
+
+#ifndef YAML_SCHEMA
+#define YAML_SCHEMA core
+#endif
+
+#include _file(YAML_SCHEMA)
 
 // clang-format off
 
-typedef enum  {
+typedef enum {
   END_OF_FILE,
 
   S_DIR_YML_BGN,  R_DIR_YML_VER,
@@ -118,15 +124,11 @@ typedef enum  {
     }
 
 #define SGL_PLN_SYM(POS, CTX)                                                                                          \
-    (scanner->rlt_sch == RS_NUL   ? POS##_SGL_PLN_NUL_##CTX                                                            \
-     : scanner->rlt_sch == RS_BOL ? POS##_SGL_PLN_BOL_##CTX                                                            \
-     : scanner->rlt_sch == RS_INT ? POS##_SGL_PLN_INT_##CTX                                                            \
-     : scanner->rlt_sch == RS_FLT ? POS##_SGL_PLN_FLT_##CTX                                                            \
-                                  : POS##_SGL_PLN_STR_##CTX)
-
-static inline void advance(TSLexer *lexer) { lexer->advance(lexer, false); }
-
-static inline void skip(TSLexer *lexer) { lexer->advance(lexer, true); }
+    (scanner->rlt_sch == RS_NULL    ? POS##_SGL_PLN_NUL_##CTX                                                          \
+     : scanner->rlt_sch == RS_BOOL  ? POS##_SGL_PLN_BOL_##CTX                                                          \
+     : scanner->rlt_sch == RS_INT   ? POS##_SGL_PLN_INT_##CTX                                                          \
+     : scanner->rlt_sch == RS_FLOAT ? POS##_SGL_PLN_FLT_##CTX                                                          \
+                                    : POS##_SGL_PLN_STR_##CTX)
 
 typedef struct {
     int16_t row;
@@ -147,7 +149,7 @@ typedef struct {
     ResultSchema rlt_sch;
 } Scanner;
 
-unsigned serialize(Scanner *scanner, char *buffer) {
+static unsigned serialize(Scanner *scanner, char *buffer) {
     size_t i = 0;
     buffer[i++] = (char)scanner->row;
     buffer[i++] = (char)scanner->col;
@@ -164,7 +166,7 @@ unsigned serialize(Scanner *scanner, char *buffer) {
     return i;
 }
 
-void deserialize(Scanner *scanner, const char *buffer, unsigned length) {
+static void deserialize(Scanner *scanner, const char *buffer, unsigned length) {
     scanner->row = 0;
     scanner->col = 0;
     scanner->blk_imp_row = -1;
@@ -188,39 +190,39 @@ void deserialize(Scanner *scanner, const char *buffer, unsigned length) {
     }
 }
 
-void adv(Scanner *scanner, TSLexer *lexer) {
+static inline void adv(Scanner *scanner, TSLexer *lexer) {
     scanner->cur_col++;
     scanner->cur_chr = lexer->lookahead;
-    advance(lexer);
+    lexer->advance(lexer, false);
 }
 
-void adv_nwl(Scanner *scanner, TSLexer *lexer) {
+static inline void adv_nwl(Scanner *scanner, TSLexer *lexer) {
     scanner->cur_row++;
     scanner->cur_col = 0;
     scanner->cur_chr = lexer->lookahead;
-    advance(lexer);
+    lexer->advance(lexer, false);
 }
 
-void skp(Scanner *scanner, TSLexer *lexer) {
+static inline void skp(Scanner *scanner, TSLexer *lexer) {
     scanner->cur_col++;
     scanner->cur_chr = lexer->lookahead;
-    skip(lexer);
+    lexer->advance(lexer, true);
 }
 
-void skp_nwl(Scanner *scanner, TSLexer *lexer) {
+static inline void skp_nwl(Scanner *scanner, TSLexer *lexer) {
     scanner->cur_row++;
     scanner->cur_col = 0;
     scanner->cur_chr = lexer->lookahead;
-    skip(lexer);
+    lexer->advance(lexer, true);
 }
 
-void mrk_end(Scanner *scanner, TSLexer *lexer) {
+static inline void mrk_end(Scanner *scanner, TSLexer *lexer) {
     scanner->end_row = scanner->cur_row;
     scanner->end_col = scanner->cur_col;
     lexer->mark_end(lexer);
 }
 
-void init(Scanner *scanner) {
+static inline void init(Scanner *scanner) {
     scanner->cur_row = scanner->row;
     scanner->cur_col = scanner->col;
     scanner->cur_chr = 0;
@@ -228,73 +230,75 @@ void init(Scanner *scanner) {
     scanner->rlt_sch = RS_STR;
 }
 
-void flush(Scanner *scanner) {
+static inline void flush(Scanner *scanner) {
     scanner->row = scanner->end_row;
     scanner->col = scanner->end_col;
 }
 
-void pop_ind(Scanner *scanner) {
+static inline void pop_ind(Scanner *scanner) {
     array_pop(&scanner->ind_len_stk);
     array_pop(&scanner->ind_typ_stk);
 }
 
-void push_ind(Scanner *scanner, int16_t typ, int16_t len) {
+static inline void push_ind(Scanner *scanner, int16_t typ, int16_t len) {
     array_push(&scanner->ind_len_stk, len);
     array_push(&scanner->ind_typ_stk, typ);
 }
 
-bool is_wsp(int32_t c) { return c == ' ' || c == '\t'; }
+static inline bool is_wsp(int32_t c) { return c == ' ' || c == '\t'; }
 
-bool is_nwl(int32_t c) { return c == '\r' || c == '\n'; }
+static inline bool is_nwl(int32_t c) { return c == '\r' || c == '\n'; }
 
-bool is_wht(int32_t c) { return is_wsp(c) || is_nwl(c) || c == 0; }
+static inline bool is_wht(int32_t c) { return is_wsp(c) || is_nwl(c) || c == 0; }
 
-bool is_ns_dec_digit(int32_t c) { return c >= '0' && c <= '9'; }
+static inline bool is_ns_dec_digit(int32_t c) { return c >= '0' && c <= '9'; }
 
-bool is_ns_hex_digit(int32_t c) { return is_ns_dec_digit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); }
+static inline bool is_ns_hex_digit(int32_t c) {
+    return is_ns_dec_digit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');
+}
 
-bool is_ns_word_char(int32_t c) {
+static inline bool is_ns_word_char(int32_t c) {
     return c == '-' || (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
 }
 
-bool is_nb_json(int32_t c) { return c == 0x09 || (c >= 0x20 && c <= 0x10ffff); }
+static inline bool is_nb_json(int32_t c) { return c == 0x09 || (c >= 0x20 && c <= 0x10ffff); }
 
-bool is_nb_double_char(int32_t c) { return is_nb_json(c) && c != '\\' && c != '"'; }
+static inline bool is_nb_double_char(int32_t c) { return is_nb_json(c) && c != '\\' && c != '"'; }
 
-bool is_nb_single_char(int32_t c) { return is_nb_json(c) && c != '\''; }
+static inline bool is_nb_single_char(int32_t c) { return is_nb_json(c) && c != '\''; }
 
-bool is_ns_char(int32_t c) {
+static inline bool is_ns_char(int32_t c) {
     return (c >= 0x21 && c <= 0x7e) || c == 0x85 || (c >= 0xa0 && c <= 0xd7ff) || (c >= 0xe000 && c <= 0xfefe) ||
            (c >= 0xff00 && c <= 0xfffd) || (c >= 0x10000 && c <= 0x10ffff);
 }
 
-bool is_c_indicator(int32_t c) {
+static inline bool is_c_indicator(int32_t c) {
     return c == '-' || c == '?' || c == ':' || c == ',' || c == '[' || c == ']' || c == '{' || c == '}' || c == '#' ||
            c == '&' || c == '*' || c == '!' || c == '|' || c == '>' || c == '\'' || c == '"' || c == '%' || c == '@' ||
            c == '`';
 }
 
-bool is_c_flow_indicator(int32_t c) { return c == ',' || c == '[' || c == ']' || c == '{' || c == '}'; }
+static inline bool is_c_flow_indicator(int32_t c) { return c == ',' || c == '[' || c == ']' || c == '{' || c == '}'; }
 
-bool is_plain_safe_in_block(int32_t c) { return is_ns_char(c); }
+static inline bool is_plain_safe_in_block(int32_t c) { return is_ns_char(c); }
 
-bool is_plain_safe_in_flow(int32_t c) { return is_ns_char(c) && !is_c_flow_indicator(c); }
+static inline bool is_plain_safe_in_flow(int32_t c) { return is_ns_char(c) && !is_c_flow_indicator(c); }
 
-bool is_ns_uri_char(int32_t c) {
+static inline bool is_ns_uri_char(int32_t c) {
     return is_ns_word_char(c) || c == '#' || c == ';' || c == '/' || c == '?' || c == ':' || c == '@' || c == '&' ||
            c == '=' || c == '+' || c == '$' || c == ',' || c == '_' || c == '.' || c == '!' || c == '~' || c == '*' ||
            c == '\'' || c == '(' || c == ')' || c == '[' || c == ']';
 }
 
-bool is_ns_tag_char(int32_t c) {
+static inline bool is_ns_tag_char(int32_t c) {
     return is_ns_word_char(c) || c == '#' || c == ';' || c == '/' || c == '?' || c == ':' || c == '@' || c == '&' ||
            c == '=' || c == '+' || c == '$' || c == '_' || c == '.' || c == '~' || c == '*' || c == '\'' || c == '(' ||
            c == ')';
 }
 
-bool is_ns_anchor_char(int32_t c) { return is_ns_char(c) && !is_c_flow_indicator(c); }
+static inline bool is_ns_anchor_char(int32_t c) { return is_ns_char(c) && !is_c_flow_indicator(c); }
 
-char scn_uri_esc(Scanner *scanner, TSLexer *lexer) {
+static char scn_uri_esc(Scanner *scanner, TSLexer *lexer) {
     if (lexer->lookahead != '%') {
         return SCN_STOP;
     }
@@ -311,7 +315,7 @@ char scn_uri_esc(Scanner *scanner, TSLexer *lexer) {
     return SCN_SUCC;
 }
 
-char scn_ns_uri_char(Scanner *scanner, TSLexer *lexer) {
+static char scn_ns_uri_char(Scanner *scanner, TSLexer *lexer) {
     if (is_ns_uri_char(lexer->lookahead)) {
         adv(scanner, lexer);
         return SCN_SUCC;
@@ -319,7 +323,7 @@ char scn_ns_uri_char(Scanner *scanner, TSLexer *lexer) {
     return scn_uri_esc(scanner, lexer);
 }
 
-char scn_ns_tag_char(Scanner *scanner, TSLexer *lexer) {
+static char scn_ns_tag_char(Scanner *scanner, TSLexer *lexer) {
     if (is_ns_tag_char(lexer->lookahead)) {
         adv(scanner, lexer);
         return SCN_SUCC;
@@ -327,7 +331,7 @@ char scn_ns_tag_char(Scanner *scanner, TSLexer *lexer) {
     return scn_uri_esc(scanner, lexer);
 }
 
-bool scn_dir_bgn(Scanner *scanner, TSLexer *lexer) {
+static bool scn_dir_bgn(Scanner *scanner, TSLexer *lexer) {
     adv(scanner, lexer);
     if (lexer->lookahead == 'Y') {
         adv(scanner, lexer);
@@ -370,7 +374,7 @@ bool scn_dir_bgn(Scanner *scanner, TSLexer *lexer) {
     return false;
 }
 
-bool scn_dir_yml_ver(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_dir_yml_ver(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     uint16_t n1 = 0;
     uint16_t n2 = 0;
     while (is_ns_dec_digit(lexer->lookahead)) {
@@ -392,7 +396,7 @@ bool scn_dir_yml_ver(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     RET_SYM(result_symbol);
 }
 
-bool scn_tag_hdl_tal(Scanner *scanner, TSLexer *lexer) {
+static bool scn_tag_hdl_tal(Scanner *scanner, TSLexer *lexer) {
     if (lexer->lookahead == '!') {
         adv(scanner, lexer);
         return true;
@@ -412,7 +416,7 @@ bool scn_tag_hdl_tal(Scanner *scanner, TSLexer *lexer) {
     return false;
 }
 
-bool scn_dir_tag_hdl(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_dir_tag_hdl(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     if (lexer->lookahead == '!') {
         adv(scanner, lexer);
         if (scn_tag_hdl_tal(scanner, lexer)) {
@@ -423,7 +427,7 @@ bool scn_dir_tag_hdl(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     return false;
 }
 
-bool scn_dir_tag_pfx(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_dir_tag_pfx(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     if (lexer->lookahead == '!') {
         adv(scanner, lexer);
     } else if (scn_ns_tag_char(scanner, lexer) == SCN_SUCC) {
@@ -443,7 +447,7 @@ bool scn_dir_tag_pfx(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     }
 }
 
-bool scn_dir_rsv_prm(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_dir_rsv_prm(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     if (!is_ns_char(lexer->lookahead)) {
         return false;
     }
@@ -455,7 +459,7 @@ bool scn_dir_rsv_prm(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     RET_SYM(result_symbol);
 }
 
-bool scn_tag(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_tag(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     if (lexer->lookahead != '!') {
         return false;
     }
@@ -501,7 +505,7 @@ bool scn_tag(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     return false;
 }
 
-bool scn_acr_bgn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_acr_bgn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     if (lexer->lookahead != '&') {
         return false;
     }
@@ -513,7 +517,7 @@ bool scn_acr_bgn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     RET_SYM(result_symbol);
 }
 
-bool scn_acr_ctn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_acr_ctn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     while (is_ns_anchor_char(lexer->lookahead)) {
         adv(scanner, lexer);
     }
@@ -521,7 +525,7 @@ bool scn_acr_ctn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     RET_SYM(result_symbol);
 }
 
-bool scn_als_bgn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_als_bgn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     if (lexer->lookahead != '*') {
         return false;
     }
@@ -533,7 +537,7 @@ bool scn_als_bgn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     RET_SYM(result_symbol);
 }
 
-bool scn_als_ctn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_als_ctn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     while (is_ns_anchor_char(lexer->lookahead)) {
         adv(scanner, lexer);
     }
@@ -541,7 +545,7 @@ bool scn_als_ctn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     RET_SYM(result_symbol);
 }
 
-bool scn_dqt_esc_seq(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_dqt_esc_seq(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     uint16_t i;
     switch (lexer->lookahead) {
         case '0':
@@ -553,6 +557,7 @@ bool scn_dqt_esc_seq(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
         case 'v':
         case 'r':
         case 'e':
+        case 'f':
         case ' ':
         case '"':
         case '/':
@@ -600,7 +605,7 @@ bool scn_dqt_esc_seq(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     RET_SYM(result_symbol);
 }
 
-bool scn_drs_doc_end(Scanner *scanner, TSLexer *lexer) {
+static bool scn_drs_doc_end(Scanner *scanner, TSLexer *lexer) {
     if (lexer->lookahead != '-' && lexer->lookahead != '.') {
         return false;
     }
@@ -619,7 +624,7 @@ bool scn_drs_doc_end(Scanner *scanner, TSLexer *lexer) {
     return false;
 }
 
-bool scn_dqt_str_cnt(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_dqt_str_cnt(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     if (!is_nb_double_char(lexer->lookahead)) {
         return false;
     }
@@ -636,7 +641,7 @@ bool scn_dqt_str_cnt(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     RET_SYM(result_symbol);
 }
 
-bool scn_sqt_str_cnt(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_sqt_str_cnt(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     if (!is_nb_single_char(lexer->lookahead)) {
         return false;
     }
@@ -653,7 +658,7 @@ bool scn_sqt_str_cnt(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     RET_SYM(result_symbol);
 }
 
-bool scn_blk_str_bgn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_blk_str_bgn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     if (lexer->lookahead != '|' && lexer->lookahead != '>') {
         return false;
     }
@@ -714,7 +719,7 @@ bool scn_blk_str_bgn(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     RET_SYM(result_symbol);
 }
 
-bool scn_blk_str_cnt(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
+static bool scn_blk_str_cnt(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     if (!is_ns_char(lexer->lookahead)) {
         return false;
     }
@@ -745,7 +750,7 @@ bool scn_blk_str_cnt(Scanner *scanner, TSLexer *lexer, TSSymbol result_symbol) {
     RET_SYM(result_symbol);
 }
 
-char scn_pln_cnt(Scanner *scanner, TSLexer *lexer, bool (*is_plain_safe)(int32_t)) {
+static char scn_pln_cnt(Scanner *scanner, TSLexer *lexer, bool (*is_plain_safe)(int32_t)) {
     bool is_cur_wsp = is_wsp(scanner->cur_chr);
     bool is_cur_saf = is_plain_safe(scanner->cur_chr);
     bool is_lka_wsp = is_wsp(lexer->lookahead);
@@ -789,16 +794,15 @@ char scn_pln_cnt(Scanner *scanner, TSLexer *lexer, bool (*is_plain_safe)(int32_t
     return SCN_SUCC;
 }
 
-bool scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) {
+static bool scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) {
     init(scanner);
     mrk_end(scanner, lexer);
 
     bool allow_comment = !(valid_symbols[R_DQT_STR_CTN] || valid_symbols[BR_DQT_STR_CTN] ||
                            valid_symbols[R_SQT_STR_CTN] || valid_symbols[BR_SQT_STR_CTN]);
     int16_t *ind_ptr = scanner->ind_len_stk.contents + scanner->ind_len_stk.size - 1;
-    int16_t *ind_end = scanner->ind_len_stk.contents;
+    int16_t *ind_end = scanner->ind_len_stk.contents - 1;
     int16_t cur_ind = *ind_ptr--;
-    int16_t x = *ind_ptr;
     int16_t prt_ind = ind_ptr == ind_end ? -1 : *ind_ptr;
     int16_t cur_ind_typ = *array_back(&scanner->ind_typ_stk);
 
@@ -1355,14 +1359,16 @@ bool scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) {
 }
 
 void *tree_sitter_yaml_external_scanner_create() {
-    Scanner *scanner = calloc(1, sizeof(Scanner));
+    Scanner *scanner = ts_calloc(1, sizeof(Scanner));
     deserialize(scanner, NULL, 0);
     return scanner;
 }
 
 void tree_sitter_yaml_external_scanner_destroy(void *payload) {
     Scanner *scanner = (Scanner *)payload;
-    free(scanner);
+    array_delete(&scanner->ind_len_stk);
+    array_delete(&scanner->ind_typ_stk);
+    ts_free(scanner);
 }
 
 unsigned tree_sitter_yaml_external_scanner_serialize(void *payload, char *buffer) {
diff --git a/src/schema.generated.c b/src/schema.core.c
similarity index 76%
rename from src/schema.generated.c
rename to src/schema.core.c
index 2b77b09..cb53d7d 100644
--- a/src/schema.generated.c
+++ b/src/schema.core.c
@@ -1,22 +1,22 @@
-#include <assert.h>
-#include <stdbool.h>
-#include <stdint.h>
+#include <stdlib.h>
 
-const int8_t SCH_STT_FRZ = -1;
+#define SCH_STT_FRZ -1
 
 typedef enum {
   RS_STR,
   RS_INT,
-  RS_NUL,
-  RS_BOL,
-  RS_FLT,
+  RS_NULL,
+  RS_BOOL,
+  RS_FLOAT,
 } ResultSchema;
 
-int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
+static int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
   switch (sch_stt) {
-    case -1:
+    case SCH_STT_FRZ:
       break;
     case 0:
+      if (cur_chr == '+' ||
+          cur_chr == '-') {*rlt_sch = RS_STR; return 1;}
       if (cur_chr == '.') {*rlt_sch = RS_STR; return 6;}
       if (cur_chr == '0') {*rlt_sch = RS_INT; return 37;}
       if (cur_chr == 'F') {*rlt_sch = RS_STR; return 2;}
@@ -25,9 +25,7 @@ int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
       if (cur_chr == 'f') {*rlt_sch = RS_STR; return 17;}
       if (cur_chr == 'n') {*rlt_sch = RS_STR; return 29;}
       if (cur_chr == 't') {*rlt_sch = RS_STR; return 26;}
-      if (cur_chr == '~') {*rlt_sch = RS_NUL; return 35;}
-      if (cur_chr == '+' ||
-          cur_chr == '-') {*rlt_sch = RS_STR; return 1;}
+      if (cur_chr == '~') {*rlt_sch = RS_NULL; return 35;}
       if (('1' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 38;}
       break;
     case 1:
@@ -43,25 +41,25 @@ int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
       if (cur_chr == 'a') {*rlt_sch = RS_STR; return 12;}
       break;
     case 4:
-      if (cur_chr == 'E') {*rlt_sch = RS_BOL; return 36;}
+      if (cur_chr == 'E') {*rlt_sch = RS_BOOL; return 36;}
       break;
     case 5:
-      if (cur_chr == 'F') {*rlt_sch = RS_FLT; return 41;}
+      if (cur_chr == 'F') {*rlt_sch = RS_FLOAT; return 41;}
       break;
     case 6:
       if (cur_chr == 'I') {*rlt_sch = RS_STR; return 11;}
       if (cur_chr == 'N') {*rlt_sch = RS_STR; return 3;}
       if (cur_chr == 'i') {*rlt_sch = RS_STR; return 24;}
       if (cur_chr == 'n') {*rlt_sch = RS_STR; return 18;}
-      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLT; return 42;}
+      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 42;}
       break;
     case 7:
       if (cur_chr == 'I') {*rlt_sch = RS_STR; return 11;}
       if (cur_chr == 'i') {*rlt_sch = RS_STR; return 24;}
-      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLT; return 42;}
+      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 42;}
       break;
     case 8:
-      if (cur_chr == 'L') {*rlt_sch = RS_NUL; return 35;}
+      if (cur_chr == 'L') {*rlt_sch = RS_NULL; return 35;}
       break;
     case 9:
       if (cur_chr == 'L') {*rlt_sch = RS_STR; return 14;}
@@ -74,7 +72,7 @@ int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
       if (cur_chr == 'n') {*rlt_sch = RS_STR; return 20;}
       break;
     case 12:
-      if (cur_chr == 'N') {*rlt_sch = RS_FLT; return 41;}
+      if (cur_chr == 'N') {*rlt_sch = RS_FLOAT; return 41;}
       break;
     case 13:
       if (cur_chr == 'R') {*rlt_sch = RS_STR; return 15;}
@@ -97,13 +95,13 @@ int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
       if (cur_chr == 'a') {*rlt_sch = RS_STR; return 25;}
       break;
     case 19:
-      if (cur_chr == 'e') {*rlt_sch = RS_BOL; return 36;}
+      if (cur_chr == 'e') {*rlt_sch = RS_BOOL; return 36;}
       break;
     case 20:
-      if (cur_chr == 'f') {*rlt_sch = RS_FLT; return 41;}
+      if (cur_chr == 'f') {*rlt_sch = RS_FLOAT; return 41;}
       break;
     case 21:
-      if (cur_chr == 'l') {*rlt_sch = RS_NUL; return 35;}
+      if (cur_chr == 'l') {*rlt_sch = RS_NULL; return 35;}
       break;
     case 22:
       if (cur_chr == 'l') {*rlt_sch = RS_STR; return 27;}
@@ -115,7 +113,7 @@ int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
       if (cur_chr == 'n') {*rlt_sch = RS_STR; return 20;}
       break;
     case 25:
-      if (cur_chr == 'n') {*rlt_sch = RS_FLT; return 41;}
+      if (cur_chr == 'n') {*rlt_sch = RS_FLOAT; return 41;}
       break;
     case 26:
       if (cur_chr == 'r') {*rlt_sch = RS_STR; return 28;}
@@ -132,13 +130,13 @@ int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
     case 30:
       if (cur_chr == '+' ||
           cur_chr == '-') {*rlt_sch = RS_STR; return 32;}
-      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLT; return 43;}
+      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 43;}
       break;
     case 31:
       if (('0' <= cur_chr && cur_chr <= '7')) {*rlt_sch = RS_INT; return 39;}
       break;
     case 32:
-      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLT; return 43;}
+      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 43;}
       break;
     case 33:
       if (('0' <= cur_chr && cur_chr <= '9') ||
@@ -146,17 +144,17 @@ int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
           ('a' <= cur_chr && cur_chr <= 'f')) {*rlt_sch = RS_INT; return 40;}
       break;
     case 34:
-      assert(false);
+      abort();
       break;
     case 35:
-      *rlt_sch = RS_NUL;
+      *rlt_sch = RS_NULL;
       break;
     case 36:
-      *rlt_sch = RS_BOL;
+      *rlt_sch = RS_BOOL;
       break;
     case 37:
       *rlt_sch = RS_INT;
-      if (cur_chr == '.') {*rlt_sch = RS_FLT; return 42;}
+      if (cur_chr == '.') {*rlt_sch = RS_FLOAT; return 42;}
       if (cur_chr == 'o') {*rlt_sch = RS_STR; return 31;}
       if (cur_chr == 'x') {*rlt_sch = RS_STR; return 33;}
       if (cur_chr == 'E' ||
@@ -165,7 +163,7 @@ int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
       break;
     case 38:
       *rlt_sch = RS_INT;
-      if (cur_chr == '.') {*rlt_sch = RS_FLT; return 42;}
+      if (cur_chr == '.') {*rlt_sch = RS_FLOAT; return 42;}
       if (cur_chr == 'E' ||
           cur_chr == 'e') {*rlt_sch = RS_STR; return 30;}
       if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 38;}
@@ -181,24 +179,22 @@ int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
           ('a' <= cur_chr && cur_chr <= 'f')) {*rlt_sch = RS_INT; return 40;}
       break;
     case 41:
-      *rlt_sch = RS_FLT;
+      *rlt_sch = RS_FLOAT;
       break;
     case 42:
-      *rlt_sch = RS_FLT;
+      *rlt_sch = RS_FLOAT;
       if (cur_chr == 'E' ||
           cur_chr == 'e') {*rlt_sch = RS_STR; return 30;}
-      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLT; return 42;}
+      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 42;}
       break;
     case 43:
-      *rlt_sch = RS_FLT;
-      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLT; return 43;}
+      *rlt_sch = RS_FLOAT;
+      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 43;}
       break;
     default:
       *rlt_sch = RS_STR;
-      return -1;
-  }
-  if (cur_chr != '\r' && cur_chr != '\n' && cur_chr != ' ' && cur_chr != 0) {
-    *rlt_sch = RS_STR;
+      return SCH_STT_FRZ;
   }
-  return -1;
+  if (cur_chr != '\r' && cur_chr != '\n' && cur_chr != ' ' && cur_chr != 0) {*rlt_sch = RS_STR;}
+  return SCH_STT_FRZ;
 }
diff --git a/src/schema.json.c b/src/schema.json.c
new file mode 100644
index 0000000..ba879cb
--- /dev/null
+++ b/src/schema.json.c
@@ -0,0 +1,102 @@
+#include <stdlib.h>
+
+#define SCH_STT_FRZ -1
+
+typedef enum {
+  RS_STR,
+  RS_INT,
+  RS_BOOL,
+  RS_NULL,
+  RS_FLOAT,
+} ResultSchema;
+
+static int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
+  switch (sch_stt) {
+    case SCH_STT_FRZ:
+      break;
+    case 0:
+      if (cur_chr == '-') {*rlt_sch = RS_STR; return 1;}
+      if (cur_chr == '0') {*rlt_sch = RS_INT; return 16;}
+      if (cur_chr == 'f') {*rlt_sch = RS_STR; return 2;}
+      if (cur_chr == 'n') {*rlt_sch = RS_STR; return 10;}
+      if (cur_chr == 't') {*rlt_sch = RS_STR; return 7;}
+      if (('1' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 17;}
+      break;
+    case 1:
+      if (cur_chr == '0') {*rlt_sch = RS_INT; return 16;}
+      if (('1' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 17;}
+      break;
+    case 2:
+      if (cur_chr == 'a') {*rlt_sch = RS_STR; return 4;}
+      break;
+    case 3:
+      if (cur_chr == 'e') {*rlt_sch = RS_BOOL; return 15;}
+      break;
+    case 4:
+      if (cur_chr == 'l') {*rlt_sch = RS_STR; return 8;}
+      break;
+    case 5:
+      if (cur_chr == 'l') {*rlt_sch = RS_NULL; return 14;}
+      break;
+    case 6:
+      if (cur_chr == 'l') {*rlt_sch = RS_STR; return 5;}
+      break;
+    case 7:
+      if (cur_chr == 'r') {*rlt_sch = RS_STR; return 9;}
+      break;
+    case 8:
+      if (cur_chr == 's') {*rlt_sch = RS_STR; return 3;}
+      break;
+    case 9:
+      if (cur_chr == 'u') {*rlt_sch = RS_STR; return 3;}
+      break;
+    case 10:
+      if (cur_chr == 'u') {*rlt_sch = RS_STR; return 6;}
+      break;
+    case 11:
+      if (cur_chr == '+' ||
+          cur_chr == '-') {*rlt_sch = RS_STR; return 12;}
+      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 19;}
+      break;
+    case 12:
+      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 19;}
+      break;
+    case 13:
+      abort();
+      break;
+    case 14:
+      *rlt_sch = RS_NULL;
+      break;
+    case 15:
+      *rlt_sch = RS_BOOL;
+      break;
+    case 16:
+      *rlt_sch = RS_INT;
+      if (cur_chr == '.') {*rlt_sch = RS_FLOAT; return 18;}
+      if (cur_chr == 'E' ||
+          cur_chr == 'e') {*rlt_sch = RS_STR; return 11;}
+      break;
+    case 17:
+      *rlt_sch = RS_INT;
+      if (cur_chr == '.') {*rlt_sch = RS_FLOAT; return 18;}
+      if (cur_chr == 'E' ||
+          cur_chr == 'e') {*rlt_sch = RS_STR; return 11;}
+      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 17;}
+      break;
+    case 18:
+      *rlt_sch = RS_FLOAT;
+      if (cur_chr == 'E' ||
+          cur_chr == 'e') {*rlt_sch = RS_STR; return 11;}
+      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 18;}
+      break;
+    case 19:
+      *rlt_sch = RS_FLOAT;
+      if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLOAT; return 19;}
+      break;
+    default:
+      *rlt_sch = RS_STR;
+      return SCH_STT_FRZ;
+  }
+  if (cur_chr != '\r' && cur_chr != '\n' && cur_chr != ' ' && cur_chr != 0) {*rlt_sch = RS_STR;}
+  return SCH_STT_FRZ;
+}
diff --git a/tree-sitter b/tree-sitter
deleted file mode 160000
index fc5a692..0000000
--- a/tree-sitter
+++ /dev/null
@@ -1,1 +0,0 @@
-Subproject commit fc5a692b7d5f144cc531f5823b1c5a3b2f06cf01
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index 5a5617e..0000000
--- a/yarn.lock
+++ /dev/null
@@ -1,1324 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-JSONStream@^1.0.4:
-  version "1.3.5"
-  resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
-  integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
-  dependencies:
-    jsonparse "^1.2.0"
-    through ">=2.2.7 <3"
-
-ansi-regex@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
-  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
-
-ansi-styles@^3.2.0, ansi-styles@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
-  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
-  dependencies:
-    color-convert "^1.9.0"
-
-array-find-index@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
-  integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
-
-array-ify@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
-  integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=
-
-arrify@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-  integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
-
-balanced-match@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
-
-brace-expansion@^1.1.7:
-  version "1.1.11"
-  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
-  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
-  dependencies:
-    balanced-match "^1.0.0"
-    concat-map "0.0.1"
-
-buffer-from@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
-  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-
-camelcase-keys@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
-  integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
-  dependencies:
-    camelcase "^2.0.0"
-    map-obj "^1.0.0"
-
-camelcase-keys@^4.0.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77"
-  integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=
-  dependencies:
-    camelcase "^4.1.0"
-    map-obj "^2.0.0"
-    quick-lru "^1.0.0"
-
-camelcase@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
-  integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
-
-camelcase@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
-  integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
-
-camelcase@^5.0.0:
-  version "5.3.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
-  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-chalk@2.4.2:
-  version "2.4.2"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
-  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
-  dependencies:
-    ansi-styles "^3.2.1"
-    escape-string-regexp "^1.0.5"
-    supports-color "^5.3.0"
-
-cliui@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
-  integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
-  dependencies:
-    string-width "^3.1.0"
-    strip-ansi "^5.2.0"
-    wrap-ansi "^5.1.0"
-
-color-convert@^1.9.0:
-  version "1.9.3"
-  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
-  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
-  dependencies:
-    color-name "1.1.3"
-
-color-name@1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
-commander@~2.20.3:
-  version "2.20.3"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
-  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-
-compare-func@^1.3.1:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648"
-  integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=
-  dependencies:
-    array-ify "^1.0.0"
-    dot-prop "^3.0.0"
-
-concat-map@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-
-concat-stream@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
-  integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
-  dependencies:
-    buffer-from "^1.0.0"
-    inherits "^2.0.3"
-    readable-stream "^3.0.2"
-    typedarray "^0.0.6"
-
-conventional-changelog-angular@^5.0.3:
-  version "5.0.3"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0"
-  integrity sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA==
-  dependencies:
-    compare-func "^1.3.1"
-    q "^1.5.1"
-
-conventional-changelog-atom@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.1.tgz#dc88ce650ffa9ceace805cbe70f88bfd0cb2c13a"
-  integrity sha512-9BniJa4gLwL20Sm7HWSNXd0gd9c5qo49gCi8nylLFpqAHhkFTj7NQfROq3f1VpffRtzfTQp4VKU5nxbe2v+eZQ==
-  dependencies:
-    q "^1.5.1"
-
-conventional-changelog-codemirror@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.1.tgz#acc046bc0971460939a0cc2d390e5eafc5eb30da"
-  integrity sha512-23kT5IZWa+oNoUaDUzVXMYn60MCdOygTA2I+UjnOMiYVhZgmVwNd6ri/yDlmQGXHqbKhNR5NoXdBzSOSGxsgIQ==
-  dependencies:
-    q "^1.5.1"
-
-conventional-changelog-config-spec@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.0.0.tgz#a9e8c9225d4a922d25f4ac501e454274ae4ad0b3"
-  integrity sha512-zQmcBP/pR8tN5MSv+nXG9hOmy+Z6rgEquBerpoEbOKTFPLoxBy/adeUUpshrMpqdZ/ycqbT2AgdTtiIu/9IHGg==
-
-conventional-changelog-conventionalcommits@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.1.0.tgz#eb7d47a9c5f1a6f9846a649482294e4ac50d7683"
-  integrity sha512-J3xolGrH8PTxpCqueHOuZtv3Cp73SQOWiBQzlsaugZAZ+hZgcJBonmC+1bQbfGs2neC2S18p2L1Gx+nTEglJTQ==
-  dependencies:
-    compare-func "^1.3.1"
-    q "^1.5.1"
-
-conventional-changelog-core@^3.2.3:
-  version "3.2.3"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb"
-  integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ==
-  dependencies:
-    conventional-changelog-writer "^4.0.6"
-    conventional-commits-parser "^3.0.3"
-    dateformat "^3.0.0"
-    get-pkg-repo "^1.0.0"
-    git-raw-commits "2.0.0"
-    git-remote-origin-url "^2.0.0"
-    git-semver-tags "^2.0.3"
-    lodash "^4.2.1"
-    normalize-package-data "^2.3.5"
-    q "^1.5.1"
-    read-pkg "^3.0.0"
-    read-pkg-up "^3.0.0"
-    through2 "^3.0.0"
-
-conventional-changelog-ember@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.2.tgz#284ffdea8c83ea8c210b65c5b4eb3e5cc0f4f51a"
-  integrity sha512-qtZbA3XefO/n6DDmkYywDYi6wDKNNc98MMl2F9PKSaheJ25Trpi3336W8fDlBhq0X+EJRuseceAdKLEMmuX2tg==
-  dependencies:
-    q "^1.5.1"
-
-conventional-changelog-eslint@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.2.tgz#e9eb088cda6be3e58b2de6a5aac63df0277f3cbe"
-  integrity sha512-Yi7tOnxjZLXlCYBHArbIAm8vZ68QUSygFS7PgumPRiEk+9NPUeucy5Wg9AAyKoBprSV3o6P7Oghh4IZSLtKCvQ==
-  dependencies:
-    q "^1.5.1"
-
-conventional-changelog-express@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.1.tgz#fea2231d99a5381b4e6badb0c1c40a41fcacb755"
-  integrity sha512-G6uCuCaQhLxdb4eEfAIHpcfcJ2+ao3hJkbLrw/jSK/eROeNfnxCJasaWdDAfFkxsbpzvQT4W01iSynU3OoPLIw==
-  dependencies:
-    q "^1.5.1"
-
-conventional-changelog-jquery@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.4.tgz#7eb598467b83db96742178e1e8d68598bffcd7ae"
-  integrity sha512-IVJGI3MseYoY6eybknnTf9WzeQIKZv7aNTm2KQsiFVJH21bfP2q7XVjfoMibdCg95GmgeFlaygMdeoDDa+ZbEQ==
-  dependencies:
-    q "^1.5.1"
-
-conventional-changelog-jshint@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.1.tgz#11c0e8283abf156a4ff78e89be6fdedf9bd72202"
-  integrity sha512-kRFJsCOZzPFm2tzRHULWP4tauGMvccOlXYf3zGeuSW4U0mZhk5NsjnRZ7xFWrTFPlCLV+PNmHMuXp5atdoZmEg==
-  dependencies:
-    compare-func "^1.3.1"
-    q "^1.5.1"
-
-conventional-changelog-preset-loader@^2.1.1, conventional-changelog-preset-loader@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.2.0.tgz#571e2b3d7b53d65587bea9eedf6e37faa5db4fcc"
-  integrity sha512-zXB+5vF7D5Y3Cb/rJfSyCCvFphCVmF8mFqOdncX3BmjZwAtGAPfYrBcT225udilCKvBbHgyzgxqz2GWDB5xShQ==
-
-conventional-changelog-writer@^4.0.6:
-  version "4.0.7"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.7.tgz#e4b7d9cbea902394ad671f67108a71fa90c7095f"
-  integrity sha512-p/wzs9eYaxhFbrmX/mCJNwJuvvHR+j4Fd0SQa2xyAhYed6KBiZ780LvoqUUvsayP4R1DtC27czalGUhKV2oabw==
-  dependencies:
-    compare-func "^1.3.1"
-    conventional-commits-filter "^2.0.2"
-    dateformat "^3.0.0"
-    handlebars "^4.1.2"
-    json-stringify-safe "^5.0.1"
-    lodash "^4.2.1"
-    meow "^4.0.0"
-    semver "^6.0.0"
-    split "^1.0.0"
-    through2 "^3.0.0"
-
-conventional-changelog@3.1.9:
-  version "3.1.9"
-  resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.9.tgz#5a6a19dadc1e4080c2db8dcddd00a6c0077c55a4"
-  integrity sha512-JbNVm1iGZ3aXxcFZjqKNDNfdgchQjSltWc8rvSniMrkHLsub9Wn20/JLdJNTBM74dt1IA2M+v/mzServ6N37YA==
-  dependencies:
-    conventional-changelog-angular "^5.0.3"
-    conventional-changelog-atom "^2.0.1"
-    conventional-changelog-codemirror "^2.0.1"
-    conventional-changelog-conventionalcommits "^4.0.0"
-    conventional-changelog-core "^3.2.3"
-    conventional-changelog-ember "^2.0.2"
-    conventional-changelog-eslint "^3.0.2"
-    conventional-changelog-express "^2.0.1"
-    conventional-changelog-jquery "^3.0.4"
-    conventional-changelog-jshint "^2.0.1"
-    conventional-changelog-preset-loader "^2.1.1"
-
-conventional-commits-filter@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1"
-  integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ==
-  dependencies:
-    lodash.ismatch "^4.4.0"
-    modify-values "^1.0.0"
-
-conventional-commits-parser@^3.0.3:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz#c3f972fd4e056aa8b9b4f5f3d0e540da18bf396d"
-  integrity sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg==
-  dependencies:
-    JSONStream "^1.0.4"
-    is-text-path "^2.0.0"
-    lodash "^4.2.1"
-    meow "^4.0.0"
-    split2 "^2.0.0"
-    through2 "^3.0.0"
-    trim-off-newlines "^1.0.0"
-
-conventional-recommended-bump@6.0.0:
-  version "6.0.0"
-  resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.0.0.tgz#bdafad56bc32bc04d58dbbd8bd6b750375500edc"
-  integrity sha512-iIHkDOuWCC49J/E4WXvXBCCrO2NoGqwjfhm2iUOHPPEik8TVHxczt/hFaWY+4MXeZ/nC53BNfjmlr8+EXOrlvA==
-  dependencies:
-    concat-stream "^2.0.0"
-    conventional-changelog-preset-loader "^2.2.0"
-    conventional-commits-filter "^2.0.2"
-    conventional-commits-parser "^3.0.3"
-    git-raw-commits "2.0.0"
-    git-semver-tags "^3.0.0"
-    meow "^4.0.0"
-    q "^1.5.1"
-
-core-util-is@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-currently-unhandled@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
-  integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
-  dependencies:
-    array-find-index "^1.0.1"
-
-dargs@^4.0.1:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17"
-  integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=
-  dependencies:
-    number-is-nan "^1.0.0"
-
-dateformat@^3.0.0:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
-  integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
-
-decamelize-keys@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
-  integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
-  dependencies:
-    decamelize "^1.1.0"
-    map-obj "^1.0.0"
-
-decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-  integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
-
-detect-indent@6.0.0:
-  version "6.0.0"
-  resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd"
-  integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==
-
-detect-newline@3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.0.0.tgz#8ae477c089e51872c264531cd6547719c0b86b2f"
-  integrity sha512-JAP22dVPAqvhdRFFxK1G5GViIokyUn0UWXRNW0ztK96fsqi9cuM8w8ESbSk+T2w5OVorcMcL6m7yUg1RrX+2CA==
-
-dot-prop@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
-  integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc=
-  dependencies:
-    is-obj "^1.0.0"
-
-dotgitignore@2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-2.1.0.tgz#a4b15a4e4ef3cf383598aaf1dfa4a04bcc089b7b"
-  integrity sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==
-  dependencies:
-    find-up "^3.0.0"
-    minimatch "^3.0.4"
-
-emoji-regex@^7.0.1:
-  version "7.0.3"
-  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
-  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
-
-error-ex@^1.2.0, error-ex@^1.3.1:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
-  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
-  dependencies:
-    is-arrayish "^0.2.1"
-
-escape-string-regexp@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
-figures@3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/figures/-/figures-3.0.0.tgz#756275c964646163cc6f9197c7a0295dbfd04de9"
-  integrity sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==
-  dependencies:
-    escape-string-regexp "^1.0.5"
-
-find-up@4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
-  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
-  dependencies:
-    locate-path "^5.0.0"
-    path-exists "^4.0.0"
-
-find-up@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
-  integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
-  dependencies:
-    path-exists "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-find-up@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
-  integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
-  dependencies:
-    locate-path "^2.0.0"
-
-find-up@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
-  integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
-  dependencies:
-    locate-path "^3.0.0"
-
-fs-access@1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a"
-  integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=
-  dependencies:
-    null-check "^1.0.0"
-
-get-caller-file@^2.0.1:
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
-  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
-get-pkg-repo@^1.0.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d"
-  integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0=
-  dependencies:
-    hosted-git-info "^2.1.4"
-    meow "^3.3.0"
-    normalize-package-data "^2.3.0"
-    parse-github-repo-url "^1.3.0"
-    through2 "^2.0.0"
-
-get-stdin@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
-  integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
-
-get-stdin@^8.0.0:
-  version "8.0.0"
-  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
-  integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
-
-git-raw-commits@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5"
-  integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==
-  dependencies:
-    dargs "^4.0.1"
-    lodash.template "^4.0.2"
-    meow "^4.0.0"
-    split2 "^2.0.0"
-    through2 "^2.0.0"
-
-git-remote-origin-url@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f"
-  integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=
-  dependencies:
-    gitconfiglocal "^1.0.0"
-    pify "^2.3.0"
-
-git-semver-tags@3.0.0, git-semver-tags@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-3.0.0.tgz#fe10147824657662c82efd9341f0fa59f74ddcba"
-  integrity sha512-T4C/gJ9k2Bnxz+PubtcyiMtUUKrC+Nh9Q4zaECcnmVMwJgPhrNyP/Rf+YpdRqsJbCV/+kYrCH24Xg+IeAmbOPg==
-  dependencies:
-    meow "^4.0.0"
-    semver "^6.0.0"
-
-git-semver-tags@^2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34"
-  integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA==
-  dependencies:
-    meow "^4.0.0"
-    semver "^6.0.0"
-
-gitconfiglocal@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b"
-  integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=
-  dependencies:
-    ini "^1.3.2"
-
-graceful-fs@^4.1.2:
-  version "4.2.2"
-  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
-  integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
-
-handlebars@^4.1.2:
-  version "4.5.3"
-  resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482"
-  integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==
-  dependencies:
-    neo-async "^2.6.0"
-    optimist "^0.6.1"
-    source-map "^0.6.1"
-  optionalDependencies:
-    uglify-js "^3.1.4"
-
-has-flag@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
-  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
-hosted-git-info@^2.1.4:
-  version "2.8.9"
-  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
-  integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
-
-indent-string@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
-  integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
-  dependencies:
-    repeating "^2.0.0"
-
-indent-string@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
-  integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
-
-inherits@^2.0.3, inherits@~2.0.3:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
-  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-ini@^1.3.2:
-  version "1.3.7"
-  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
-  integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
-
-is-arrayish@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
-
-is-finite@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
-  integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
-  dependencies:
-    number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
-  integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
-
-is-obj@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
-  integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
-
-is-plain-obj@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
-  integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
-
-is-text-path@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636"
-  integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==
-  dependencies:
-    text-extensions "^2.0.0"
-
-is-utf8@^0.2.0:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
-  integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
-
-isarray@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
-json-parse-better-errors@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
-  integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
-json-stringify-safe@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-  integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-
-jsonparse@^1.2.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
-  integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
-
-load-json-file@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
-  integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
-  dependencies:
-    graceful-fs "^4.1.2"
-    parse-json "^2.2.0"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-    strip-bom "^2.0.0"
-
-load-json-file@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
-  integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
-  dependencies:
-    graceful-fs "^4.1.2"
-    parse-json "^4.0.0"
-    pify "^3.0.0"
-    strip-bom "^3.0.0"
-
-locate-path@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
-  integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
-  dependencies:
-    p-locate "^2.0.0"
-    path-exists "^3.0.0"
-
-locate-path@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
-  integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
-  dependencies:
-    p-locate "^3.0.0"
-    path-exists "^3.0.0"
-
-locate-path@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
-  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
-  dependencies:
-    p-locate "^4.1.0"
-
-lodash._reinterpolate@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
-  integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
-
-lodash.ismatch@^4.4.0:
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
-  integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=
-
-lodash.template@^4.0.2:
-  version "4.5.0"
-  resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
-  integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==
-  dependencies:
-    lodash._reinterpolate "^3.0.0"
-    lodash.templatesettings "^4.0.0"
-
-lodash.templatesettings@^4.0.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33"
-  integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==
-  dependencies:
-    lodash._reinterpolate "^3.0.0"
-
-lodash@^4.2.1:
-  version "4.17.19"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
-  integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
-
-loud-rejection@^1.0.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
-  integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
-  dependencies:
-    currently-unhandled "^0.4.1"
-    signal-exit "^3.0.0"
-
-map-obj@^1.0.0, map-obj@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
-  integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
-
-map-obj@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9"
-  integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk=
-
-meow@^3.3.0:
-  version "3.7.0"
-  resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
-  integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
-  dependencies:
-    camelcase-keys "^2.0.0"
-    decamelize "^1.1.2"
-    loud-rejection "^1.0.0"
-    map-obj "^1.0.1"
-    minimist "^1.1.3"
-    normalize-package-data "^2.3.4"
-    object-assign "^4.0.1"
-    read-pkg-up "^1.0.1"
-    redent "^1.0.0"
-    trim-newlines "^1.0.0"
-
-meow@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975"
-  integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==
-  dependencies:
-    camelcase-keys "^4.0.0"
-    decamelize-keys "^1.0.0"
-    loud-rejection "^1.0.0"
-    minimist "^1.1.3"
-    minimist-options "^3.0.1"
-    normalize-package-data "^2.3.4"
-    read-pkg-up "^3.0.0"
-    redent "^2.0.0"
-    trim-newlines "^2.0.0"
-
-minimatch@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
-  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
-  dependencies:
-    brace-expansion "^1.1.7"
-
-minimist-options@^3.0.1:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954"
-  integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==
-  dependencies:
-    arrify "^1.0.1"
-    is-plain-obj "^1.1.0"
-
-minimist@^1.1.3:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-  integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
-
-minimist@~0.0.1:
-  version "0.0.10"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
-  integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
-
-modify-values@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
-  integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
-
-nan@^2.14.0:
-  version "2.14.0"
-  resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
-  integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
-
-natural-orderby@2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016"
-  integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==
-
-neo-async@^2.6.0:
-  version "2.6.1"
-  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
-  integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
-
-normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5:
-  version "2.5.0"
-  resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
-  integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
-  dependencies:
-    hosted-git-info "^2.1.4"
-    resolve "^1.10.0"
-    semver "2 || 3 || 4 || 5"
-    validate-npm-package-license "^3.0.1"
-
-null-check@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd"
-  integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=
-
-number-is-nan@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-  integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
-
-object-assign@^4.0.1:
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-optimist@^0.6.1:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
-  integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
-  dependencies:
-    minimist "~0.0.1"
-    wordwrap "~0.0.2"
-
-p-limit@^1.1.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
-  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
-  dependencies:
-    p-try "^1.0.0"
-
-p-limit@^2.0.0, p-limit@^2.2.0:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537"
-  integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==
-  dependencies:
-    p-try "^2.0.0"
-
-p-locate@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
-  integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
-  dependencies:
-    p-limit "^1.1.0"
-
-p-locate@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
-  integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
-  dependencies:
-    p-limit "^2.0.0"
-
-p-locate@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
-  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
-  dependencies:
-    p-limit "^2.2.0"
-
-p-try@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
-  integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
-
-p-try@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
-  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
-parse-github-repo-url@^1.3.0:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50"
-  integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A=
-
-parse-json@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
-  integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
-  dependencies:
-    error-ex "^1.2.0"
-
-parse-json@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
-  integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
-  dependencies:
-    error-ex "^1.3.1"
-    json-parse-better-errors "^1.0.1"
-
-path-exists@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
-  integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
-  dependencies:
-    pinkie-promise "^2.0.0"
-
-path-exists@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
-  integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
-
-path-exists@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
-  integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
-
-path-parse@^1.0.6:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
-  integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
-
-path-type@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
-  integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
-  dependencies:
-    graceful-fs "^4.1.2"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-path-type@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
-  integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
-  dependencies:
-    pify "^3.0.0"
-
-pify@^2.0.0, pify@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
-  integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
-
-pify@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
-  integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
-
-pinkie-promise@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
-  integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
-  dependencies:
-    pinkie "^2.0.0"
-
-pinkie@^2.0.0:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-  integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
-
-process-nextick-args@~2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
-  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-q@^1.5.1:
-  version "1.5.1"
-  resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
-  integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
-
-quick-lru@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
-  integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=
-
-read-pkg-up@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
-  integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
-  dependencies:
-    find-up "^1.0.0"
-    read-pkg "^1.0.0"
-
-read-pkg-up@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
-  integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=
-  dependencies:
-    find-up "^2.0.0"
-    read-pkg "^3.0.0"
-
-read-pkg@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
-  integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
-  dependencies:
-    load-json-file "^1.0.0"
-    normalize-package-data "^2.3.2"
-    path-type "^1.0.0"
-
-read-pkg@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
-  integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
-  dependencies:
-    load-json-file "^4.0.0"
-    normalize-package-data "^2.3.2"
-    path-type "^3.0.0"
-
-"readable-stream@2 || 3", readable-stream@^3.0.2:
-  version "3.4.0"
-  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
-  integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
-  dependencies:
-    inherits "^2.0.3"
-    string_decoder "^1.1.1"
-    util-deprecate "^1.0.1"
-
-readable-stream@~2.3.6:
-  version "2.3.6"
-  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
-  integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
-  dependencies:
-    core-util-is "~1.0.0"
-    inherits "~2.0.3"
-    isarray "~1.0.0"
-    process-nextick-args "~2.0.0"
-    safe-buffer "~5.1.1"
-    string_decoder "~1.1.1"
-    util-deprecate "~1.0.1"
-
-redent@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
-  integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
-  dependencies:
-    indent-string "^2.1.0"
-    strip-indent "^1.0.1"
-
-redent@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa"
-  integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=
-  dependencies:
-    indent-string "^3.0.0"
-    strip-indent "^2.0.0"
-
-repeating@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
-  integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
-  dependencies:
-    is-finite "^1.0.0"
-
-require-directory@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
-  integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
-
-require-main-filename@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
-  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-
-resolve@^1.10.0:
-  version "1.12.0"
-  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
-  integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==
-  dependencies:
-    path-parse "^1.0.6"
-
-safe-buffer@~5.1.0, safe-buffer@~5.1.1:
-  version "5.1.2"
-  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
-  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@~5.2.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
-  integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
-
-"semver@2 || 3 || 4 || 5":
-  version "5.7.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
-  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-
-semver@6.3.0, semver@^6.0.0:
-  version "6.3.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
-  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-
-set-blocking@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-  integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-
-signal-exit@^3.0.0:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
-  integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
-
-source-map@^0.6.1, source-map@~0.6.1:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
-  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-spdx-correct@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
-  integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
-  dependencies:
-    spdx-expression-parse "^3.0.0"
-    spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
-  integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
-
-spdx-expression-parse@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
-  integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
-  dependencies:
-    spdx-exceptions "^2.1.0"
-    spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
-  version "3.0.5"
-  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
-  integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
-
-split2@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493"
-  integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==
-  dependencies:
-    through2 "^2.0.2"
-
-split@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
-  integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
-  dependencies:
-    through "2"
-
-standard-version@7.0.0:
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-7.0.0.tgz#4ce10ea5d20270ed4a32b22d15cce5fd1f1a5bbb"
-  integrity sha512-pbFXM9vutnxTkSGkqSWQeYCMYqWmFBaLUNdEc/sJDQnMgwB0Csw3CZeeDhi62VoVS3P8mQiYbvXGZWyOBWxUbw==
-  dependencies:
-    chalk "2.4.2"
-    conventional-changelog "3.1.9"
-    conventional-changelog-config-spec "2.0.0"
-    conventional-recommended-bump "6.0.0"
-    detect-indent "6.0.0"
-    detect-newline "3.0.0"
-    dotgitignore "2.1.0"
-    figures "3.0.0"
-    find-up "4.1.0"
-    fs-access "1.0.1"
-    git-semver-tags "3.0.0"
-    semver "6.3.0"
-    stringify-package "1.0.0"
-    yargs "13.3.0"
-
-string-width@^3.0.0, string-width@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
-  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
-  dependencies:
-    emoji-regex "^7.0.1"
-    is-fullwidth-code-point "^2.0.0"
-    strip-ansi "^5.1.0"
-
-string_decoder@^1.1.1:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
-  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
-  dependencies:
-    safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
-  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
-  dependencies:
-    safe-buffer "~5.1.0"
-
-stringify-package@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.0.tgz#e02828089333d7d45cd8c287c30aa9a13375081b"
-  integrity sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g==
-
-strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
-  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
-  dependencies:
-    ansi-regex "^4.1.0"
-
-strip-bom@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
-  integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
-  dependencies:
-    is-utf8 "^0.2.0"
-
-strip-bom@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
-
-strip-indent@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
-  integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
-  dependencies:
-    get-stdin "^4.0.1"
-
-strip-indent@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
-  integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
-
-supports-color@^5.3.0:
-  version "5.5.0"
-  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
-  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
-  dependencies:
-    has-flag "^3.0.0"
-
-text-extensions@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6"
-  integrity sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ==
-
-through2@^2.0.0, through2@^2.0.2:
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
-  integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
-  dependencies:
-    readable-stream "~2.3.6"
-    xtend "~4.0.1"
-
-through2@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a"
-  integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==
-  dependencies:
-    readable-stream "2 || 3"
-
-through@2, "through@>=2.2.7 <3":
-  version "2.3.8"
-  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
-
-trim-newlines@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
-  integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
-
-trim-newlines@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20"
-  integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=
-
-trim-off-newlines@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
-  integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
-
-typedarray@^0.0.6:
-  version "0.0.6"
-  resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-
-uglify-js@^3.1.4:
-  version "3.7.3"
-  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a"
-  integrity sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg==
-  dependencies:
-    commander "~2.20.3"
-    source-map "~0.6.1"
-
-util-deprecate@^1.0.1, util-deprecate@~1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-
-validate-npm-package-license@^3.0.1:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
-  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
-  dependencies:
-    spdx-correct "^3.0.0"
-    spdx-expression-parse "^3.0.0"
-
-which-module@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
-  integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-
-wordwrap@~0.0.2:
-  version "0.0.3"
-  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-  integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
-
-wrap-ansi@^5.1.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
-  integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
-  dependencies:
-    ansi-styles "^3.2.0"
-    string-width "^3.0.0"
-    strip-ansi "^5.0.0"
-
-xtend@~4.0.1:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
-  integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-
-y18n@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
-  integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
-
-yargs-parser@^13.1.1:
-  version "13.1.2"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
-  integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
-  dependencies:
-    camelcase "^5.0.0"
-    decamelize "^1.2.0"
-
-yargs@13.3.0:
-  version "13.3.0"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83"
-  integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==
-  dependencies:
-    cliui "^5.0.0"
-    find-up "^3.0.0"
-    get-caller-file "^2.0.1"
-    require-directory "^2.1.1"
-    require-main-filename "^2.0.0"
-    set-blocking "^2.0.0"
-    string-width "^3.0.0"
-    which-module "^2.0.0"
-    y18n "^4.0.0"
-    yargs-parser "^13.1.1"


Test patch:
diff --git a/bindings/go/binding_test.go b/bindings/go/binding_test.go
index 94958b0..8f9c805 100644
--- a/bindings/go/binding_test.go
+++ b/bindings/go/binding_test.go
@@ -10,6 +10,6 @@ import (
 func TestCanLoadGrammar(t *testing.T) {
 	language := tree_sitter.NewLanguage(tree_sitter_yaml.Language())
 	if language == nil {
-		t.Errorf("Error loading Yaml grammar")
+		t.Errorf("Error loading YAML grammar")
 	}
 }
diff --git a/examples/yaml-test-suite b/examples/yaml-test-suite
new file mode 160000
index 0000000..6ad3d2c
--- /dev/null
+++ b/examples/yaml-test-suite
@@ -0,0 +1,1 @@
+Subproject commit 6ad3d2c62885d82fc349026c136ef560838fdf3d
diff --git a/test/corpus/02_preview.txt b/test/corpus/02_preview.txt
new file mode 100644
index 0000000..9377831
--- /dev/null
+++ b/test/corpus/02_preview.txt
@@ -0,0 +1,1246 @@
+============================================================================
+Sequence of Scalars (ball players)
+============================================================================
+- Mark McGwire
+- Sammy Sosa
+- Ken Griffey
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_sequence
+        (block_sequence_item
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_sequence_item
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_sequence_item
+          (flow_node
+            (plain_scalar
+              (string_scalar))))))))
+
+============================================================================
+Mapping Scalars to Scalars (player statistics)
+============================================================================
+hr:  65    # Home runs
+avg: 0.278 # Batting average
+rbi: 147   # Runs Batted In
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (integer_scalar))))
+        (comment)
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (float_scalar))))
+        (comment)
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (integer_scalar))))
+        (comment)))))
+
+============================================================================
+Mapping Scalars to Sequences (ball clubs in each league)
+============================================================================
+american:
+  - Boston Red Sox
+  - Detroit Tigers
+  - New York Yankees
+national:
+  - New York Mets
+  - Chicago Cubs
+  - Atlanta Braves
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (block_node
+            (block_sequence
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (block_node
+            (block_sequence
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))))))))))
+
+============================================================================
+Sequence of Mappings (players’ statistics)
+============================================================================
+-
+  name: Mark McGwire
+  hr:   65
+  avg:  0.278
+-
+  name: Sammy Sosa
+  hr:   63
+  avg:  0.288
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_sequence
+        (block_sequence_item
+          (block_node
+            (block_mapping
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (integer_scalar))))
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (float_scalar)))))))
+        (block_sequence_item
+          (block_node
+            (block_mapping
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (integer_scalar))))
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (float_scalar)))))))))))
+
+============================================================================
+Sequence of Sequences
+============================================================================
+- [name        , hr, avg  ]
+- [Mark McGwire, 65, 0.278]
+- [Sammy Sosa  , 63, 0.288]
+
+
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_sequence
+        (block_sequence_item
+          (flow_node
+            (flow_sequence
+              (flow_node
+                (plain_scalar
+                  (string_scalar)))
+              (flow_node
+                (plain_scalar
+                  (string_scalar)))
+              (flow_node
+                (plain_scalar
+                  (string_scalar))))))
+        (block_sequence_item
+          (flow_node
+            (flow_sequence
+              (flow_node
+                (plain_scalar
+                  (string_scalar)))
+              (flow_node
+                (plain_scalar
+                  (integer_scalar)))
+              (flow_node
+                (plain_scalar
+                  (float_scalar))))))
+        (block_sequence_item
+          (flow_node
+            (flow_sequence
+              (flow_node
+                (plain_scalar
+                  (string_scalar)))
+              (flow_node
+                (plain_scalar
+                  (integer_scalar)))
+              (flow_node
+                (plain_scalar
+                  (float_scalar))))))))))
+
+============================================================================
+Mapping of Mappings
+============================================================================
+Mark McGwire: {hr: 65, avg: 0.278}
+Sammy Sosa: {
+    hr: 63,
+    avg: 0.288
+  }
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (flow_mapping
+              (flow_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (integer_scalar))))
+              (flow_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (float_scalar)))))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (flow_mapping
+              (flow_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (integer_scalar))))
+              (flow_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (float_scalar)))))))))))
+
+============================================================================
+Two Documents in a Stream (each with a leading comment)
+============================================================================
+# Ranking of 1998 home runs
+---
+- Mark McGwire
+- Sammy Sosa
+- Ken Griffey
+
+# Team ranking
+---
+- Chicago Cubs
+- St Louis Cardinals
+
+----------------------------------------------------------------------------
+
+(stream
+  (comment)
+  (document
+    (block_node
+      (block_sequence
+        (block_sequence_item
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_sequence_item
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_sequence_item
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (comment))))
+  (document
+    (block_node
+      (block_sequence
+        (block_sequence_item
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_sequence_item
+          (flow_node
+            (plain_scalar
+              (string_scalar))))))))
+
+============================================================================
+Play by Play Feed from a Game
+============================================================================
+---
+time: 20:03:20
+player: Sammy Sosa
+action: strike (miss)
+...
+---
+time: 20:03:47
+player: Sammy Sosa
+action: grand slam
+...
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (string_scalar)))))))
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (string_scalar))))))))
+
+============================================================================
+Single Document with Two Comments
+============================================================================
+---
+hr: # 1998 hr ranking
+  - Mark McGwire
+  - Sammy Sosa
+rbi:
+  # 1998 rbi ranking
+  - Sammy Sosa
+  - Ken Griffey
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (comment)
+          (block_node
+            (block_sequence
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (comment)
+          (block_node
+            (block_sequence
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))))))))))
+
+============================================================================
+Node for “Sammy Sosa” appears twice in this document
+============================================================================
+---
+hr:
+  - Mark McGwire
+  # Following node labeled SS
+  - &SS Sammy Sosa
+rbi:
+  - *SS # Subsequent occurrence
+  - Ken Griffey
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (block_node
+            (block_sequence
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (comment)
+              (block_sequence_item
+                (flow_node
+                  (anchor
+                    (anchor_name))
+                  (plain_scalar
+                    (string_scalar)))))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (block_node
+            (block_sequence
+              (block_sequence_item
+                (flow_node
+                  (alias
+                    (alias_name))))
+              (comment)
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))))))))))
+
+============================================================================
+Mapping between Sequences
+============================================================================
+? - Detroit Tigers
+  - Chicago cubs
+:
+  - 2001-07-23
+
+? [ New York Yankees,
+    Atlanta Braves ]
+: [ 2001-07-02, 2001-08-12,
+    2001-08-14 ]
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (block_node
+            (block_sequence
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))))
+          (block_node
+            (block_sequence
+              (block_sequence_item
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))))))
+        (block_mapping_pair
+          (flow_node
+            (flow_sequence
+              (flow_node
+                (plain_scalar
+                  (string_scalar)))
+              (flow_node
+                (plain_scalar
+                  (string_scalar)))))
+          (flow_node
+            (flow_sequence
+              (flow_node
+                (plain_scalar
+                  (string_scalar)))
+              (flow_node
+                (plain_scalar
+                  (string_scalar)))
+              (flow_node
+                (plain_scalar
+                  (string_scalar))))))))))
+
+============================================================================
+Compact Nested Mapping
+============================================================================
+---
+# Products purchased
+- item    : Super Hoop
+  quantity: 1
+- item    : Basketball
+  quantity: 4
+- item    : Big Shoes
+  quantity: 1
+
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (comment)
+    (block_node
+      (block_sequence
+        (block_sequence_item
+          (block_node
+            (block_mapping
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (integer_scalar)))))))
+        (block_sequence_item
+          (block_node
+            (block_mapping
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (integer_scalar)))))))
+        (block_sequence_item
+          (block_node
+            (block_mapping
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (string_scalar))))
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (integer_scalar)))))))))))
+
+============================================================================
+In literals, newlines are preserved
+============================================================================
+# ASCII Art
+--- |
+  \//||\/||
+  // ||  ||__
+
+----------------------------------------------------------------------------
+
+(stream
+  (comment)
+  (document
+    (block_node
+      (block_scalar))))
+
+============================================================================
+In the folded scalars, newlines become spaces
+============================================================================
+--- >
+  Mark McGwire's
+  year was crippled
+  by a knee injury.
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_scalar))))
+
+============================================================================
+Folded newlines are preserved for "more indented" and blank lines
+============================================================================
+>
+ Sammy Sosa completed another
+ fine season with great stats.
+
+   63 Home Runs
+   0.288 Batting Average
+
+ What a year!
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_scalar))))
+
+============================================================================
+Indentation determines scope
+============================================================================
+name: Mark McGwire
+accomplishment: >
+  Mark set a major league
+  home run record in 1998.
+stats: |
+  65 Home Runs
+  0.278 Batting Average
+
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (block_node
+            (block_scalar)))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (block_node
+            (block_scalar)))))))
+
+============================================================================
+Quoted Scalars
+============================================================================
+unicode: "Sosa did fine.\u263A"
+control: "\b1998\t1999\t2000\n"
+hex esc: "\x0d\x0a is \r\n"
+
+single: '"Howdy!" he cried.'
+quoted: ' # Not a ''comment''.'
+tie-fighter: '|\-*-/|'
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (double_quote_scalar
+              (escape_sequence))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (double_quote_scalar
+              (escape_sequence)
+              (escape_sequence)
+              (escape_sequence)
+              (escape_sequence))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (double_quote_scalar
+              (escape_sequence)
+              (escape_sequence)
+              (escape_sequence)
+              (escape_sequence))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (single_quote_scalar)))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (single_quote_scalar
+              (escape_sequence)
+              (escape_sequence))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (single_quote_scalar)))))))
+
+============================================================================
+Multi-line Flow Scalars
+============================================================================
+plain:
+  This unquoted scalar
+  spans many lines.
+
+quoted: "So does this
+  quoted scalar.\n"
+
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (double_quote_scalar
+              (escape_sequence))))))))
+
+============================================================================
+Integers
+============================================================================
+canonical: 12345
+decimal: +12345
+octal: 0o14
+hexadecimal: 0xC
+
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (integer_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (integer_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (integer_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (integer_scalar))))))))
+
+============================================================================
+Floating Point
+============================================================================
+canonical: 1.23015e+3
+exponential: 12.3015e+02
+fixed: 1230.15
+negative infinity: -.inf
+not a number: .NaN
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (float_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (float_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (float_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (float_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (float_scalar))))))))
+
+============================================================================
+Miscellaneous
+============================================================================
+null:
+booleans: [ true, false ]
+string: '012345'
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (null_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (flow_sequence
+              (flow_node
+                (plain_scalar
+                  (boolean_scalar)))
+              (flow_node
+                (plain_scalar
+                  (boolean_scalar))))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (single_quote_scalar)))))))
+
+============================================================================
+Timestamps
+============================================================================
+canonical: 2001-12-15T02:59:43.1Z
+iso8601: 2001-12-14t21:59:43.10-05:00
+spaced: 2001-12-14 21:59:43.10 -5
+date: 2002-12-14
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (plain_scalar
+              (string_scalar))))))))
+
+============================================================================
+Various Explicit Tags
+============================================================================
+---
+not-date: !!str 2002-04-28
+
+picture: !!binary |
+ R0lGODlhDAAMAIQAAP//9/X
+ 17unp5WZmZgAAAOfn515eXv
+ Pz7Y6OjuDg4J+fn5OTk6enp
+ 56enmleECcgggoBADs=
+
+application specific tag: !something |
+ The semantics of the tag
+ above may be different for
+ different documents.
+
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (block_node
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (flow_node
+            (tag)
+            (plain_scalar
+              (string_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (block_node
+            (tag)
+            (block_scalar)))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar)))
+          (block_node
+            (tag)
+            (block_scalar)))))))
+
+============================================================================
+Global Tags
+============================================================================
+%TAG ! tag:clarkevans.com,2002:
+--- !shape
+  # Use the ! handle for presenting
+  # tag:clarkevans.com,2002:circle
+- !circle
+  center: &ORIGIN {x: 73, y: 129}
+  radius: 7
+- !line
+  start: *ORIGIN
+  finish: { x: 89, y: 102 }
+- !label
+  start: *ORIGIN
+  color: 0xFFEEBB
+  text: Pretty vector drawing.
+
+----------------------------------------------------------------------------
+
+(stream
+  (document
+    (tag_directive
+      (tag_handle)
+      (tag_prefix))
+    (block_node
+      (tag)
+      (comment)
+      (comment)
+      (block_sequence
+        (block_sequence_item
+          (block_node
+            (tag)
+            (block_mapping
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (anchor
+                    (anchor_name))
+                  (flow_mapping
+                    (flow_pair
+                      (flow_node
+                        (plain_scalar
+                          (string_scalar)))
+                      (flow_node
+                        (plain_scalar
+                          (integer_scalar))))
+                    (flow_pair
+                      (flow_node
+                        (plain_scalar
+                          (string_scalar)))
+                      (flow_node
+                        (plain_scalar
+                          (integer_scalar)))))))
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (integer_scalar)))))))
+        (block_sequence_item
+          (block_node
+            (tag)
+            (block_mapping
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (alias
+                    (alias_name))))
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (flow_mapping
+                    (flow_pair
+                      (flow_node
+                        (plain_scalar
+                          (string_scalar)))
+                      (flow_node
+                        (plain_scalar
+                          (integer_scalar))))
+                    (flow_pair
+                      (flow_node
+                        (plain_scalar
+                          (string_scalar)))
+                      (flow_node
+                        (plain_scalar
+                          (integer_scalar))))))))))
+        (block_sequence_item
+          (block_node
+            (tag)
+            (block_mapping
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (alias
+                    (alias_name))))
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (integer_scalar))))
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))))))))))
+
+============================================================================
+Unordered Sets
+============================================================================
+# Sets are represented as a
+# Mapping where each key is
+# associated with a null value
+--- !!set
+? Mark McGwire
+? Sammy Sosa
+? Ken Griff
+
+----------------------------------------------------------------------------
+
+(stream
+  (comment)
+  (comment)
+  (comment)
+  (document
+    (block_node
+      (tag)
+      (block_mapping
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar))))
+        (block_mapping_pair
+          (flow_node
+            (plain_scalar
+              (string_scalar))))))))
+
+============================================================================
+Ordered Mappings
+============================================================================
+# Ordered maps are represented as
+# A sequence of mappings, with
+# each mapping having one key
+--- !!omap
+- Mark McGwire: 65
+- Sammy Sosa: 63
+- Ken Griffy: 58
+
+----------------------------------------------------------------------------
+
+(stream
+  (comment)
+  (comment)
+  (comment)
+  (document
+    (block_node
+      (tag)
+      (block_sequence
+        (block_sequence_item
+          (block_node
+            (block_mapping
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (integer_scalar)))))))
+        (block_sequence_item
+          (block_node
+            (block_mapping
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (integer_scalar)))))))
+        (block_sequence_item
+          (block_node
+            (block_mapping
+              (block_mapping_pair
+                (flow_node
+                  (plain_scalar
+                    (string_scalar)))
+                (flow_node
+                  (plain_scalar
+                    (integer_scalar)))))))))))
diff --git a/test/corpus/05_characters.txt b/test/corpus/05_characters.txt
new file mode 100644
index 0000000..0e3ef96
--- /dev/null
+++ b/test/corpus/05_characters.txt
@@ -0,0 +1,326 @@
+================================================================================
+Byte Order Mark
+================================================================================
+﻿# Comment only.
+
+--------------------------------------------------------------------------------
+
+(stream
+ (comment))
+
+================================================================================
+Invalid Byte Order Mark
+:error
+================================================================================
+- Invalid use of BOM
+﻿
+- Inside a document.
+
+--------------------------------------------------------------------------------
+
+================================================================================
+Block Structure Indicators
+================================================================================
+sequence:
+- one
+- two
+mapping:
+  ? sky
+  : blue
+  sea : green
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_sequence
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_mapping
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
+
+================================================================================
+Flow Collection Indicators
+================================================================================
+sequence: [ one, two, ]
+mapping: { sky: blue, sea: green }
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (string_scalar)))
+       (flow_node
+        (plain_scalar
+         (string_scalar))))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (flow_mapping
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
+
+================================================================================
+Comment Indicator
+================================================================================
+# Comment only.
+
+--------------------------------------------------------------------------------
+
+(stream
+ (comment))
+
+================================================================================
+Node Property Indicators
+================================================================================
+anchored: !local &anchor value
+alias: *anchor
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (anchor
+       (anchor_name))
+      (plain_scalar
+       (string_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (alias
+       (alias_name))))))))
+
+================================================================================
+Block Scalar Indicators
+================================================================================
+literal: |
+  some
+  text
+folded: >
+  some
+  text
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))))))
+
+================================================================================
+Quoted Scalar Indicators
+================================================================================
+single: 'text'
+double: "text"
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (single_quote_scalar)))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (double_quote_scalar)))))))
+
+================================================================================
+Directive Indicator
+================================================================================
+%YAML 1.2
+--- text
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (yaml_directive
+   (yaml_version))
+  (flow_node
+   (plain_scalar
+    (string_scalar)))))
+
+================================================================================
+Invalid use of Reserved Indicators
+:error
+================================================================================
+commercial-at: @text
+grave-accent: `text
+
+--------------------------------------------------------------------------------
+
+================================================================================
+Line Break Characters
+================================================================================
+|
+  Line break (no glyph)
+  Line break (glyphed)
+
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_scalar))))
+
+================================================================================
+Tabs and Spaces
+================================================================================
+# Tabs and spaces
+quoted: "Quoted 	"
+block:	|
+  void main() {
+  	printf("Hello, world!\n");
+  }
+
+--------------------------------------------------------------------------------
+
+  (stream
+   (comment)
+   (document
+    (block_node
+     (block_mapping
+      (block_mapping_pair
+       (flow_node
+        (plain_scalar
+         (string_scalar)))
+       (flow_node
+        (double_quote_scalar)))
+      (block_mapping_pair
+       (flow_node
+        (plain_scalar
+         (string_scalar)))
+       (block_node
+        (block_scalar)))))))
+
+================================================================================
+Escaped Characters
+================================================================================
+"Fun with \\
+\" \a \b \e \f
+\n \r \t \v \0
+\  \_ \N \L \P
+\x41 \u0041 \U00000041"
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (double_quote_scalar
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)
+    (escape_sequence)))))
+
+================================================================================
+Invalid Escaped Characters
+:error
+================================================================================
+Bad escapes:
+  "\c
+  \xq-"
+
+--------------------------------------------------------------------------------
+
diff --git a/test/corpus/06_structures.txt b/test/corpus/06_structures.txt
new file mode 100644
index 0000000..0dc3da9
--- /dev/null
+++ b/test/corpus/06_structures.txt
@@ -0,0 +1,763 @@
+============================================================================||||
+Indentation Spaces
+============================================================================||||
+  # Leading comment line spaces are
+   # neither content nor indentation.
+
+Not indented:
+ By one space: |
+    By four
+      spaces
+ Flow style: [    # Leading spaces
+   By two,        # in flow style
+  Also by two,    # are neither
+  	Still by two   # content nor
+    ]             # indentation.
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (comment)
+ (comment)
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_mapping
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (block_node
+         (block_scalar)))
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (flow_sequence
+          (comment)
+          (flow_node
+           (plain_scalar
+            (string_scalar)))
+          (comment)
+          (flow_node
+           (plain_scalar
+            (string_scalar)))
+          (comment)
+          (flow_node
+           (plain_scalar
+            (string_scalar)))
+          (comment))))
+(comment))))))))
+
+============================================================================||||
+Indentation Indicators
+============================================================================||||
+? a
+: -	b
+  -  -	c
+     - d
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_sequence
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (block_sequence_item
+        (block_node
+         (block_sequence
+          (block_sequence_item
+           (flow_node
+            (plain_scalar
+             (string_scalar))))
+          (block_sequence_item
+           (flow_node
+            (plain_scalar
+             (string_scalar))))))))))))))
+
+============================================================================||||
+Separation Spaces
+============================================================================||||
+- foo:	 bar
+- - baz
+  -	baz
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (block_node
+   (block_sequence
+    (block_sequence_item
+     (block_node
+      (block_mapping
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))
+    (block_sequence_item
+     (block_node
+      (block_sequence
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
+
+============================================================================||||
+Line Prefixes
+============================================================================||||
+plain: text
+  lines
+quoted: "text
+  	lines"
+block: |
+  text
+   	lines
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (double_quote_scalar)))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))))))
+
+============================================================================||||
+Empty Lines
+============================================================================||||
+Folding:
+  "Empty line
+
+  as a line feed"
+Chomping: |
+  Clipped empty lines
+
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (double_quote_scalar)))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))))))
+
+============================================================================||||
+Line Folding
+============================================================================||||
+>-
+  trimmed
+
+
+
+
+
+
+
+  as
+
+  space
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (block_node
+   (block_scalar))))
+
+============================================================================||||
+Block Folding
+============================================================================||||
+>
+  foo
+
+
+
+  	 bar
+
+
+
+  baz
+
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (block_node
+   (block_scalar))))
+
+============================================================================||||
+Flow Folding
+============================================================================||||
+"
+
+  foo
+
+
+
+  	 bar
+
+
+
+  baz
+
+"
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (flow_node
+   (double_quote_scalar))))
+
+============================================================================||||
+Separated Comment
+============================================================================||||
+key:    # Comment
+
+  value
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (comment)
+     (flow_node
+      (plain_scalar
+       (string_scalar))))))))
+
+============================================================================||||
+Comment Lines
+============================================================================||||
+  # Comment
+
+
+
+
+
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (comment))
+
+============================================================================||||
+Multi-Line Comments
+============================================================================||||
+key:    # Comment
+
+        # lines
+
+  value
+
+
+
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (comment)
+     (comment)
+     (flow_node
+      (plain_scalar
+       (string_scalar))))))))
+
+============================================================================||||
+Separation Spaces
+============================================================================||||
+{ first: Sammy, last: Sosa }:
+
+# Statistics:
+  hr:  # Home runs
+     65
+  avg: # Average
+   0.278
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (flow_mapping
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar))))))
+     (comment)
+     (block_node
+      (block_mapping
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (comment)
+        (flow_node
+         (plain_scalar
+          (integer_scalar))))
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (comment)
+        (flow_node
+         (plain_scalar
+          (float_scalar)))))))))))
+
+============================================================================||||
+Reserved Directives
+============================================================================||||
+%FOO  bar baz # Should be ignored
+               # with a warning.
+--- "foo"
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (reserved_directive
+   (directive_name)
+   (directive_parameter)
+   (directive_parameter))
+  (comment)
+  (comment)
+  (flow_node
+   (double_quote_scalar))))
+
+============================================================================||||
+“YAML” directive
+============================================================================||||
+%YAML 1.3 # Attempt parsing
+           # with a warning
+---
+"foo"
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (yaml_directive
+   (yaml_version))
+  (comment)
+  (comment)
+  (flow_node
+   (double_quote_scalar))))
+
+============================================================================||||
+Invalid Repeated YAML directive
+:error
+============================================================================||||
+%YAML 1.2
+%YAML 1.1
+foo
+
+----------------------------------------------------------------------------||||
+
+============================================================================||||
+“TAG” directive
+============================================================================||||
+%TAG !yaml! tag:yaml.org,2002:
+---
+!yaml!str "foo"
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (tag_directive
+   (tag_handle)
+   (tag_prefix))
+  (flow_node
+   (tag)
+   (double_quote_scalar))))
+
+============================================================================||||
+Invalid Repeated TAG directive
+:error
+============================================================================||||
+%TAG ! !foo
+%TAG ! !foo
+bar
+
+----------------------------------------------------------------------------||||
+
+============================================================================||||
+Primary Tag Handle
+============================================================================||||
+# Private
+!foo "bar"
+...
+# Global
+%TAG ! tag:example.com,2000:app/
+---
+!foo "bar"
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (comment)
+ (document
+  (flow_node
+   (tag)
+   (double_quote_scalar)))
+ (comment)
+ (document
+  (tag_directive
+   (tag_handle)
+   (tag_prefix))
+  (flow_node
+   (tag)
+   (double_quote_scalar))))
+
+============================================================================||||
+Secondary Tag Handle
+============================================================================||||
+%TAG !! tag:example.com,2000:app/
+---
+!!int 1 - 3 # Interval, not integer
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (tag_directive
+   (tag_handle)
+   (tag_prefix))
+  (flow_node
+   (tag)
+   (plain_scalar
+    (string_scalar))))
+ (comment))
+
+============================================================================||||
+Tag Handles
+============================================================================||||
+%TAG !e! tag:example.com,2000:app/
+---
+!e!foo "bar"
+
+----------------------------------------------------------------------------||||
+
+(stream
+(document
+(tag_directive
+(tag_handle)
+(tag_prefix))
+(flow_node
+(tag)
+(double_quote_scalar))))
+
+============================================================================||||
+Local Tag Prefix
+============================================================================||||
+%TAG !m! !my-
+--- # Bulb here
+!m!light fluorescent
+...
+%TAG !m! !my-
+--- # Color here
+!m!light green
+
+----------------------------------------------------------------------------||||
+
+(stream
+(document
+(tag_directive
+(tag_handle)
+(tag_prefix))
+(comment)
+(flow_node
+(tag)
+(plain_scalar
+(string_scalar))))
+(document
+(tag_directive
+(tag_handle)
+(tag_prefix))
+(comment)
+(flow_node
+(tag)
+(plain_scalar
+(string_scalar)))))
+
+============================================================================||||
+Global Tag Prefix
+============================================================================||||
+%TAG !e! tag:example.com,2000:app/
+---
+- !e!foo "bar"
+
+----------------------------------------------------------------------------||||
+
+(stream
+(document
+(tag_directive
+(tag_handle)
+(tag_prefix))
+(block_node
+(block_sequence
+(block_sequence_item
+(flow_node
+(tag)
+(double_quote_scalar)))))))
+
+============================================================================||||
+Node Properties
+============================================================================||||
+!!str &a1 "foo":
+  !!str bar
+&a2 baz : *a1
+
+----------------------------------------------------------------------------||||
+
+(stream
+(document
+(block_node
+(block_mapping
+(block_mapping_pair
+(flow_node
+(tag)
+(anchor
+(anchor_name))
+(double_quote_scalar))
+(flow_node
+(tag)
+(plain_scalar
+(string_scalar))))
+(block_mapping_pair
+(flow_node
+(anchor
+(anchor_name))
+(plain_scalar
+(string_scalar)))
+(flow_node
+(alias
+(alias_name))))))))
+
+============================================================================||||
+Verbatim Tags
+============================================================================||||
+!<tag:yaml.org,2002:str> foo :
+  !<!bar> baz
+
+----------------------------------------------------------------------------||||
+
+(stream
+(document
+(block_node
+(block_mapping
+(block_mapping_pair
+(flow_node
+(tag)
+(plain_scalar
+(string_scalar)))
+(flow_node
+(tag)
+(plain_scalar
+(string_scalar))))))))
+
+============================================================================||||
+Invalid Verbatim Tags
+============================================================================||||
+- !<!> foo
+- !<$:?> bar
+
+----------------------------------------------------------------------------||||
+
+(stream
+(document
+(block_node
+(block_sequence
+(block_sequence_item
+(flow_node
+(tag)
+(plain_scalar
+(string_scalar))))
+(block_sequence_item
+(flow_node
+(tag)
+(plain_scalar
+(string_scalar))))))))
+
+============================================================================||||
+Tag Shorthands
+============================================================================||||
+%TAG !e! tag:example.com,2000:app/
+---
+- !local foo
+- !!str bar
+- !e!tag%21 baz
+
+----------------------------------------------------------------------------||||
+
+(stream
+(document
+(tag_directive
+(tag_handle)
+(tag_prefix))
+(block_node
+(block_sequence
+(block_sequence_item
+(flow_node
+(tag)
+(plain_scalar
+(string_scalar))))
+(block_sequence_item
+(flow_node
+(tag)
+(plain_scalar
+(string_scalar))))
+(block_sequence_item
+(flow_node
+(tag)
+(plain_scalar
+(string_scalar))))))))
+
+============================================================================||||
+Invalid Tag Shorthands
+============================================================================||||
+%TAG !e! tag:example,2000:app/
+---
+- !e! foo
+- !h!bar baz
+
+----------------------------------------------------------------------------||||
+
+(ERROR
+(tag_directive
+(tag_handle)
+(tag_prefix))
+(block_sequence_item))
+
+============================================================================||||
+Non-Specific Tags
+============================================================================||||
+# Assuming conventional resolution:
+- "12"
+- 12
+- ! 12
+
+----------------------------------------------------------------------------||||
+
+(stream
+(comment)
+(document
+(block_node
+(block_sequence
+(block_sequence_item
+(flow_node
+(double_quote_scalar)))
+(block_sequence_item
+(flow_node
+(plain_scalar
+(integer_scalar))))
+(block_sequence_item
+(flow_node
+(tag)
+(plain_scalar
+(integer_scalar))))))))
+
+============================================================================||||
+Node Anchors
+============================================================================||||
+First occurrence: &anchor Value
+Second occurrence: *anchor
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (anchor
+       (anchor_name))
+      (plain_scalar
+       (string_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (alias
+       (alias_name))))))))
diff --git a/test/corpus/07_flows.txt b/test/corpus/07_flows.txt
new file mode 100644
index 0000000..4f63ac9
--- /dev/null
+++ b/test/corpus/07_flows.txt
@@ -0,0 +1,729 @@
+================================================================================
+Alias Nodes
+================================================================================
+First occurrence: &anchor Foo
+Second occurrence: *anchor
+Override anchor: &anchor Bar
+Reuse anchor: *anchor
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (anchor
+       (anchor_name))
+      (plain_scalar
+       (string_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (alias
+       (alias_name))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (anchor
+       (anchor_name))
+      (plain_scalar
+       (string_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (alias
+       (alias_name))))))))
+
+================================================================================
+Empty Content
+================================================================================
+{
+  foo : !!str,
+  !!str : bar,
+}
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (flow_mapping
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)))
+    (flow_pair
+     (flow_node
+      (tag))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))))))
+
+================================================================================
+Completely Empty Flow Nodes
+================================================================================
+{
+  ? foo :,
+  : bar,
+}
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (flow_mapping
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar))))))))
+
+================================================================================
+Double Quoted Implicit Keys
+================================================================================
+"implicit block key" : [
+  "implicit flow key" : value,
+ ]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (double_quote_scalar))
+     (flow_node
+      (flow_sequence
+       (flow_pair
+        (flow_node
+         (double_quote_scalar))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
+
+================================================================================
+Double Quoted Line Breaks
+================================================================================
+"folded
+
+to a space,
+
+
+
+to a line feed, or 	\
+
+ \ 	non-content"
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (double_quote_scalar
+    (escape_sequence)
+    (escape_sequence)))))
+
+================================================================================
+Double Quoted Lines
+================================================================================
+" 1st non-empty
+
+
+
+ 2nd non-empty
+	3rd non-empty "
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (double_quote_scalar))))
+
+================================================================================
+Single Quoted Characters
+================================================================================
+ 'here''s to "quotes"'
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (single_quote_scalar
+    (escape_sequence)))))
+
+================================================================================
+Single Quoted Implicit Keys
+================================================================================
+'implicit block key' : [
+  'implicit flow key' : value,
+ ]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (single_quote_scalar))
+     (flow_node
+      (flow_sequence
+       (flow_pair
+        (flow_node
+         (single_quote_scalar))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
+
+================================================================================
+Single Quoted Lines
+================================================================================
+' 1st non-empty
+
+
+
+ 2nd non-empty
+	3rd non-empty '
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (single_quote_scalar))))
+
+================================================================================
+Plain Characters
+================================================================================
+# Outside flow collection:
+- ::vector
+- ": - ()"
+- Up, up, and away!
+- -123
+- http://example.com/foo#bar
+# Inside flow collection:
+- [ ::vector,
+  ": - ()",
+  "Up, up and away!",
+  -123,
+  http://example.com/foo#bar ]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (comment)
+ (document
+  (block_node
+   (block_sequence
+    (block_sequence_item
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (block_sequence_item
+     (flow_node
+      (double_quote_scalar)))
+    (block_sequence_item
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (block_sequence_item
+     (flow_node
+      (plain_scalar
+       (integer_scalar))))
+    (block_sequence_item
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (comment)
+(block_sequence_item
+ (flow_node
+  (flow_sequence
+   (flow_node
+    (plain_scalar
+     (string_scalar)))
+   (flow_node
+    (double_quote_scalar))
+   (flow_node
+    (double_quote_scalar))
+   (flow_node
+    (plain_scalar
+     (integer_scalar)))
+   (flow_node
+    (plain_scalar
+     (string_scalar))))))))))
+
+================================================================================
+Plain Implicit Keys
+================================================================================
+implicit block key : [
+  implicit flow key : value,
+ ]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (flow_sequence
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
+
+================================================================================
+Plain Lines
+================================================================================
+1st non-empty
+
+
+
+ 2nd non-empty
+	3rd non-empty
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (plain_scalar
+    (string_scalar)))))
+
+================================================================================
+Flow Sequence
+================================================================================
+- [ one, two, ]
+- [three ,four]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_sequence
+    (block_sequence_item
+     (flow_node
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (string_scalar)))
+       (flow_node
+        (plain_scalar
+         (string_scalar))))))
+    (block_sequence_item
+     (flow_node
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (string_scalar)))
+       (flow_node
+        (plain_scalar
+         (string_scalar))))))))))
+
+================================================================================
+Flow Sequence Entries
+================================================================================
+[
+"double
+ quoted", 'single
+           quoted',
+plain
+ text, [ nested ],
+single: pair,
+]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (flow_sequence
+    (flow_node
+     (double_quote_scalar))
+    (flow_node
+     (single_quote_scalar))
+    (flow_node
+     (plain_scalar
+      (string_scalar)))
+    (flow_node
+     (flow_sequence
+      (flow_node
+       (plain_scalar
+        (string_scalar)))))
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))))))
+
+================================================================================
+Flow Mappings
+================================================================================
+- { one : two , three: four , }
+- {five: six,seven : eight}
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_sequence
+    (block_sequence_item
+     (flow_node
+      (flow_mapping
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))
+    (block_sequence_item
+     (flow_node
+      (flow_mapping
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
+
+================================================================================
+Flow Mapping Entries
+================================================================================
+{
+? explicit: entry,
+implicit: entry,
+?
+}
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (flow_mapping
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (flow_pair)))))
+
+================================================================================
+Flow Mapping Separate Values
+================================================================================
+{
+unquoted : "separate",
+http://foo.com,
+omitted value:,
+: omitted key,
+}
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (flow_mapping
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (double_quote_scalar)))
+    (flow_node
+     (plain_scalar
+      (string_scalar)))
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar))))))))
+
+================================================================================
+Flow Mapping Adjacent Values
+================================================================================
+{
+"adjacent":value,
+"readable": value,
+"empty":
+}
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (flow_mapping
+    (flow_pair
+     (flow_node
+      (double_quote_scalar))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (flow_pair
+     (flow_node
+      (double_quote_scalar))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (flow_pair
+     (flow_node
+      (double_quote_scalar)))))))
+
+================================================================================
+Single Pair Flow Mappings
+================================================================================
+[
+foo: bar
+]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (flow_sequence
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))))))
+
+================================================================================
+Single Pair Explicit Entry
+================================================================================
+[
+? foo
+ bar : baz
+]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (flow_sequence
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))))))
+
+================================================================================
+Single Pair Implicit Entries
+================================================================================
+- [ YAML : separate ]
+- [ : empty key entry ]
+- [ {JSON: like}:adjacent ]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_sequence
+    (block_sequence_item
+     (flow_node
+      (flow_sequence
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))
+    (block_sequence_item
+     (flow_node
+      (flow_sequence
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))
+    (block_sequence_item
+     (flow_node
+      (flow_sequence
+       (flow_pair
+        (flow_node
+         (flow_mapping
+          (flow_pair
+           (flow_node
+            (plain_scalar
+             (string_scalar)))
+           (flow_node
+            (plain_scalar
+             (string_scalar))))))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
+
+================================================================================
+Invalid Implicit Keys
+================================================================================
+[ foo
+ bar: invalid,
+ "foo...>1K characters...bar": invalid ]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (flow_node
+   (flow_sequence
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (flow_pair
+     (flow_node
+      (double_quote_scalar))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))))))
+
+================================================================================
+Flow Content
+================================================================================
+- [ a, b ]
+- { a: b }
+- "a"
+- 'b'
+- c
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_sequence
+    (block_sequence_item
+     (flow_node
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (string_scalar)))
+       (flow_node
+        (plain_scalar
+         (string_scalar))))))
+    (block_sequence_item
+     (flow_node
+      (flow_mapping
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))
+    (block_sequence_item
+     (flow_node
+      (double_quote_scalar)))
+    (block_sequence_item
+     (flow_node
+      (single_quote_scalar)))
+    (block_sequence_item
+     (flow_node
+      (plain_scalar
+       (string_scalar))))))))
+
+================================================================================
+Flow Nodes
+================================================================================
+- !!str "a"
+- 'b'
+- &anchor "c"
+- *anchor
+- !!str
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_sequence
+    (block_sequence_item
+     (flow_node
+      (tag)
+      (double_quote_scalar)))
+    (block_sequence_item
+     (flow_node
+      (single_quote_scalar)))
+    (block_sequence_item
+     (flow_node
+      (anchor
+       (anchor_name))
+      (double_quote_scalar)))
+    (block_sequence_item
+     (flow_node
+      (alias
+       (alias_name))))
+    (block_sequence_item
+     (flow_node
+      (tag)))))))
diff --git a/test/corpus/08_blocks.txt b/test/corpus/08_blocks.txt
new file mode 100644
index 0000000..eb69037
--- /dev/null
+++ b/test/corpus/08_blocks.txt
@@ -0,0 +1,770 @@
+================================================================================
+Block Scalar Header
+================================================================================
+- | # Empty header
+
+ literal
+- >1 # Indentation indicator
+
+  folded
+- |+ # Chomping indicator
+
+ keep
+
+- >1- # Both indicators
+
+  strip
+
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_sequence
+    (block_sequence_item
+     (block_node
+      (block_scalar
+       (comment))))
+    (block_sequence_item
+     (block_node
+      (block_scalar
+       (comment))))
+    (block_sequence_item
+     (block_node
+      (block_scalar
+       (comment))))
+    (block_sequence_item
+     (block_node
+      (block_scalar
+       (comment))))))))
+
+================================================================================
+Block Indentation Indicator
+================================================================================
+- |
+ detected
+- >
+
+
+  # detected
+- |1
+  explicit
+- >
+
+ detected
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_sequence
+    (block_sequence_item
+     (block_node
+      (block_scalar)))
+    (block_sequence_item
+     (block_node
+      (block_scalar)))
+    (block_sequence_item
+     (block_node
+      (block_scalar)))
+    (block_sequence_item
+     (block_node
+      (block_scalar)))))))
+
+================================================================================
+Invalid Block Scalar Indentation Indicators
+:error
+================================================================================
+- |
+
+ text
+- >
+  text
+ text
+- |2
+ text
+
+--------------------------------------------------------------------------------
+
+================================================================================
+Chomping Final Line Break
+================================================================================
+strip: |-
+  text
+
+clip: |
+  text
+
+keep: |+
+  text
+
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))))))
+
+================================================================================
+Chomping Trailing Lines
+================================================================================
+ # Strip
+  # Comments:
+strip: |-
+  # text
+
+  ⇓
+ # Clip
+  # comments:
+
+
+clip: |
+  # text
+
+
+
+ # Keep
+  # comments:
+
+
+keep: |+
+  # text
+
+
+
+ # Trail
+  # comments.
+
+--------------------------------------------------------------------------------
+
+(stream
+ (comment)
+ (comment)
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))
+    (comment)
+    (comment)
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))
+    (comment)
+    (comment)
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))
+(comment)
+(comment)))))
+
+================================================================================
+Empty Scalar Chomping
+================================================================================
+strip: >-
+
+
+clip: >
+
+
+keep: |+
+
+
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))))))
+
+================================================================================
+Literal Scalar
+================================================================================
+|
+
+ literal
+
+ 	text
+
+
+
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_scalar))))
+
+================================================================================
+Literal Content
+================================================================================
+|
+
+
+  literal
+
+
+
+
+  text
+
+
+
+ # Comment
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_scalar)))
+ (comment))
+
+================================================================================
+Folded Scalar
+================================================================================
+>
+
+ folded
+
+ text
+
+
+
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_scalar))))
+
+================================================================================
+Folded Lines
+================================================================================
+>
+
+ folded
+
+ line
+
+
+
+ next
+ line
+
+   * bullet
+
+   * list
+   * lines
+
+ last
+
+ line
+
+
+# Comment
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_scalar)))
+ (comment))
+
+================================================================================
+More Indented Lines
+================================================================================
+>
+
+ folded
+ line
+
+ next
+ line
+   * bullet
+
+
+
+   * list
+
+   * lines
+
+
+ last
+ line
+
+# Comment
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_scalar)))
+ (comment))
+
+================================================================================
+Empty Separation Lines
+================================================================================
+>
+
+
+ folded
+ line
+
+
+
+ next
+ line
+
+   * bullet
+
+   * list
+   * line
+
+
+
+ last
+ line
+
+# Comment
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_scalar)))
+ (comment))
+
+================================================================================
+Final Empty Lines
+================================================================================
+>
+ folded
+ line
+
+ next
+ line
+   * bullet
+
+   * list
+   * line
+
+ last
+ line
+
+
+
+# Comment
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_scalar)))
+ (comment))
+
+================================================================================
+Block Sequence
+================================================================================
+block sequence:
+  - one
+
+  - two : three
+
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_sequence
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (block_sequence_item
+        (block_node
+         (block_mapping
+          (block_mapping_pair
+           (flow_node
+            (plain_scalar
+             (string_scalar)))
+           (flow_node
+            (plain_scalar
+             (string_scalar))))))))))))))
+
+================================================================================
+Block Sequence Entry Types
+================================================================================
+- # Empty
+- |
+ block node
+- - one # Compact
+  - two # sequence
+- one: two # Compact mapping
+
+--------------------------------------------------------------------------------
+
+(stream
+(document
+(block_node
+(block_sequence
+(block_sequence_item)
+(comment)
+(block_sequence_item
+(block_node
+(block_scalar)))
+(block_sequence_item
+(block_node
+(block_sequence
+(block_sequence_item
+(flow_node
+(plain_scalar
+(string_scalar))))
+(comment)
+(block_sequence_item
+(flow_node
+(plain_scalar
+(string_scalar))))
+(comment))))
+(block_sequence_item
+(block_node
+(block_mapping
+(block_mapping_pair
+(flow_node
+(plain_scalar
+(string_scalar)))
+(flow_node
+(plain_scalar
+(string_scalar))))
+(comment))))))))
+
+================================================================================
+Block Mappings
+================================================================================
+block mapping:
+ key: value
+
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_mapping
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
+
+================================================================================
+Explicit Block Mapping Entries
+================================================================================
+? explicit key # Empty value
+
+? |
+  block key
+
+: - one # Explicit compact
+  - two # block value
+
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (comment)
+    (block_mapping_pair
+     (block_node
+      (block_scalar))
+     (block_node
+      (block_sequence
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (comment)
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (comment))))))))
+
+================================================================================
+Implicit Block Mapping Entries
+================================================================================
+plain key: in-line value
+: # Both empty
+"quoted key":
+- entry
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (block_mapping_pair)
+    (comment)
+    (block_mapping_pair
+     (flow_node
+      (double_quote_scalar))
+     (block_node
+      (block_sequence
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
+
+================================================================================
+Compact Block Mappings
+================================================================================
+- sun: yellow
+
+- ? earth: blue
+
+  : moon: white
+
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_sequence
+    (block_sequence_item
+     (block_node
+      (block_mapping
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))
+    (block_sequence_item
+     (block_node
+      (block_mapping
+       (block_mapping_pair
+        (block_node
+         (block_mapping
+          (block_mapping_pair
+           (flow_node
+            (plain_scalar
+             (string_scalar)))
+           (flow_node
+            (plain_scalar
+             (string_scalar))))))
+        (block_node
+         (block_mapping
+          (block_mapping_pair
+           (flow_node
+            (plain_scalar
+             (string_scalar)))
+           (flow_node
+            (plain_scalar
+             (string_scalar))))))))))))))
+
+================================================================================
+Block Node Types
+================================================================================
+-
+
+  "flow in block"
+
+- >
+ Block scalar
+
+- !!map # Block collection
+  foo : bar
+
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_sequence
+    (block_sequence_item
+     (flow_node
+      (double_quote_scalar)))
+    (block_sequence_item
+     (block_node
+      (block_scalar)))
+    (block_sequence_item
+     (block_node
+      (tag)
+      (comment)
+      (block_mapping
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
+
+================================================================================
+Block Scalar Nodes
+================================================================================
+literal: |2
+  value
+folded:
+
+   !foo
+  >1
+ value
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (block_scalar)))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (tag)
+      (block_scalar)))))))
+
+================================================================================
+Block Collection Nodes
+================================================================================
+sequence: !!seq
+- entry
+- !!seq
+ - nested
+mapping: !!map
+ foo: bar
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (tag)
+      (block_sequence
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (block_sequence_item
+        (block_node
+         (tag)
+         (block_sequence
+          (block_sequence_item
+           (flow_node
+            (plain_scalar
+             (string_scalar))))))))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (tag)
+      (block_mapping
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
diff --git a/test/corpus/09_streams.txt b/test/corpus/09_streams.txt
new file mode 100644
index 0000000..1d9df27
--- /dev/null
+++ b/test/corpus/09_streams.txt
@@ -0,0 +1,145 @@
+============================================================================||||
+Document Prefix
+============================================================================||||
+﻿# Comment
+# lines
+Document
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (comment)
+ (comment)
+ (document
+  (flow_node
+   (plain_scalar
+    (string_scalar)))))
+
+============================================================================||||
+Document Markers
+============================================================================||||
+%YAML 1.2
+---
+Document
+... # Suffix
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (yaml_directive
+   (yaml_version))
+  (flow_node
+   (plain_scalar
+    (string_scalar))))
+ (comment))
+
+============================================================================||||
+Bare Documents
+============================================================================||||
+Bare
+document
+...
+# No document
+...
+|
+%!PS-Adobe-2.0 # Not the first line
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (flow_node
+   (plain_scalar
+    (string_scalar))))
+ (comment)
+ (document)
+ (document
+  (block_node
+   (block_scalar))))
+
+============================================================================||||
+Explicit Documents
+============================================================================||||
+---
+{ matches
+% : 20 }
+...
+---
+# Empty
+...
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (flow_node
+   (flow_mapping
+    (flow_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (plain_scalar
+       (integer_scalar)))))))
+ (document
+  (comment)))
+
+============================================================================||||
+Directives Documents
+============================================================================||||
+%YAML 1.2
+--- |
+%!PS-Adobe-2.0
+...
+%YAML1.2
+---
+# Empty
+...
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (yaml_directive
+   (yaml_version))
+  (block_node
+   (block_scalar)))
+ (document
+  (reserved_directive
+   (directive_name))
+  (comment)))
+
+============================================================================||||
+Stream
+============================================================================||||
+Document
+---
+# Empty
+...
+%YAML 1.2
+---
+matches %: 20
+
+----------------------------------------------------------------------------||||
+
+(stream
+ (document
+  (flow_node
+   (plain_scalar
+    (string_scalar))))
+ (document
+  (comment))
+ (document
+  (yaml_directive
+   (yaml_version))
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (plain_scalar
+       (integer_scalar))))))))
+
diff --git a/test/corpus/10_schemas.txt b/test/corpus/10_schemas.txt
new file mode 100644
index 0000000..b8e113d
--- /dev/null
+++ b/test/corpus/10_schemas.txt
@@ -0,0 +1,508 @@
+================================================================================
+!!map Examples
+================================================================================
+Block style: !!map
+  Clark : Evans
+  Ingy  : döt Net
+  Oren  : Ben-Kiki
+
+Flow style: !!map { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (tag)
+      (block_mapping
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (block_mapping_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (flow_mapping
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (flow_pair
+        (flow_node
+         (plain_scalar
+          (string_scalar)))
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))))))
+
+================================================================================
+!!seq Examples
+================================================================================
+Block style: !!seq
+- Clark Evans
+- Ingy döt Net
+- Oren Ben-Kiki
+
+Flow style: !!seq [ Clark Evans, Ingy döt Net, Oren Ben-Kiki ]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (tag)
+      (block_sequence
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar))))
+       (block_sequence_item
+        (flow_node
+         (plain_scalar
+          (string_scalar)))))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (string_scalar)))
+       (flow_node
+        (plain_scalar
+         (string_scalar)))
+       (flow_node
+        (plain_scalar
+         (string_scalar))))))))))
+
+================================================================================
+!!str Examples
+================================================================================
+Block style: !!str |-
+  String: just a theory.
+
+Flow style: !!str "String: just a theory."
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (block_node
+      (tag)
+      (block_scalar)))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (double_quote_scalar)))))))
+
+================================================================================
+!!null Examples
+================================================================================
+!!null null: value for null key
+key with null value: !!null null
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (tag)
+      (plain_scalar
+       (null_scalar)))
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (plain_scalar
+       (null_scalar))))))))
+
+================================================================================
+!!bool Examples
+================================================================================
+YAML is a superset of JSON: !!bool true
+Pluto is a planet: !!bool false
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (plain_scalar
+       (boolean_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (plain_scalar
+       (boolean_scalar))))))))
+
+================================================================================
+!!int Examples
+================================================================================
+negative: !!int -12
+zero: !!int 0
+positive: !!int 34
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (plain_scalar
+       (integer_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (plain_scalar
+       (integer_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (plain_scalar
+       (integer_scalar))))))))
+
+================================================================================
+!!float Examples
+================================================================================
+negative: !!float -1
+zero: !!float 0
+positive: !!float 2.3e4
+infinity: !!float .inf
+not a number: !!float .nan
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (plain_scalar
+       (integer_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (plain_scalar
+       (integer_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (plain_scalar
+       (float_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (plain_scalar
+       (float_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (tag)
+      (plain_scalar
+       (float_scalar))))))))
+
+================================================================================
+JSON Tag Resolution
+================================================================================
+A null: null
+Booleans: [ true, false ]
+Integers: [ 0, -0, 3, -19 ]
+Floats: [ 0., -0.0, 12e03, -2E+05 ]
+Invalid: [ True, Null, 0o7, 0x3A, +12.3 ]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (plain_scalar
+       (null_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (boolean_scalar)))
+       (flow_node
+        (plain_scalar
+         (boolean_scalar))))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (integer_scalar)))
+       (flow_node
+        (plain_scalar
+         (integer_scalar)))
+       (flow_node
+        (plain_scalar
+         (integer_scalar)))
+       (flow_node
+        (plain_scalar
+         (integer_scalar))))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (float_scalar)))
+       (flow_node
+        (plain_scalar
+         (float_scalar)))
+       (flow_node
+        (plain_scalar
+         (float_scalar)))
+       (flow_node
+        (plain_scalar
+         (float_scalar))))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (boolean_scalar)))
+       (flow_node
+        (plain_scalar
+         (null_scalar)))
+       (flow_node
+        (plain_scalar
+         (integer_scalar)))
+       (flow_node
+        (plain_scalar
+         (integer_scalar)))
+       (flow_node
+        (plain_scalar
+         (float_scalar))))))))))
+
+================================================================================
+Core Tag Resolution
+================================================================================
+A null: null
+Also a null: # Empty
+Not a null: ""
+Booleans: [ true, True, false, FALSE ]
+Integers: [ 0, 0o7, 0x3A, -19 ]
+Floats: [ 0., -0.0, .5, +12e03, -2E+05 ]
+Also floats: [ .inf, -.Inf, +.INF, .NAN ]
+
+--------------------------------------------------------------------------------
+
+(stream
+ (document
+  (block_node
+   (block_mapping
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (plain_scalar
+       (null_scalar))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar))))
+    (comment)
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (double_quote_scalar)))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (boolean_scalar)))
+       (flow_node
+        (plain_scalar
+         (boolean_scalar)))
+       (flow_node
+        (plain_scalar
+         (boolean_scalar)))
+       (flow_node
+        (plain_scalar
+         (boolean_scalar))))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (integer_scalar)))
+       (flow_node
+        (plain_scalar
+         (integer_scalar)))
+       (flow_node
+        (plain_scalar
+         (integer_scalar)))
+       (flow_node
+        (plain_scalar
+         (integer_scalar))))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (float_scalar)))
+       (flow_node
+        (plain_scalar
+         (float_scalar)))
+       (flow_node
+        (plain_scalar
+         (float_scalar)))
+       (flow_node
+        (plain_scalar
+         (float_scalar)))
+       (flow_node
+        (plain_scalar
+         (float_scalar))))))
+    (block_mapping_pair
+     (flow_node
+      (plain_scalar
+       (string_scalar)))
+     (flow_node
+      (flow_sequence
+       (flow_node
+        (plain_scalar
+         (float_scalar)))
+       (flow_node
+        (plain_scalar
+         (float_scalar)))
+       (flow_node
+        (plain_scalar
+         (float_scalar)))
+       (flow_node
+        (plain_scalar
+         (float_scalar))))))))))
diff --git a/test/corpus/schema.txt b/test/corpus/schema.txt
deleted file mode 100644
index 39a5b3f..0000000
--- a/test/corpus/schema.txt
+++ /dev/null
@@ -1,354 +0,0 @@
-================================================================================
-Example 10.4. !!null Examples
-================================================================================
-!!null null: value for null key
-key with null value: !!null null
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (tag)
-            (plain_scalar
-              (null_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (null_scalar))))))))
-
-================================================================================
-Example 10.5. !!bool Examples
-================================================================================
-YAML is a superset of JSON: !!bool true
-Pluto is a planet: !!bool false
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (boolean_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (boolean_scalar))))))))
-
-================================================================================
-Example 10.6. !!int Examples
-================================================================================
-negative: !!int -12
-zero: !!int 0
-positive: !!int 34
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Example 10.7. !!float Examples
-================================================================================
-negative: !!float -1
-zero: !!float 0
-positive: !!float 2.3e4
-infinity: !!float .inf
-not a number: !!float .nan
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (float_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (float_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (float_scalar))))))))
-
-================================================================================
-Example 10.8. JSON Tag Resolution
-================================================================================
-A null: null
-Booleans: [ true, false ]
-Integers: [ 0, -0, 3, -19 ]
-Floats: [ 0., -0.0, 12e03, -2E+05 ]
-Invalid: [ True, Null, 0o7, 0x3A, +12.3 ]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (null_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (boolean_scalar)))
-              (flow_node
-                (plain_scalar
-                  (boolean_scalar))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (integer_scalar)))
-              (flow_node
-                (plain_scalar
-                  (integer_scalar)))
-              (flow_node
-                (plain_scalar
-                  (integer_scalar)))
-              (flow_node
-                (plain_scalar
-                  (integer_scalar))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (float_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (boolean_scalar)))
-              (flow_node
-                (plain_scalar
-                  (null_scalar)))
-              (flow_node
-                (plain_scalar
-                  (integer_scalar)))
-              (flow_node
-                (plain_scalar
-                  (integer_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar))))))))))
-
-================================================================================
-Example 10.9. Core Tag Resolution
-================================================================================
-A null: null
-Also a null: # Empty
-Not a null: ""
-Booleans: [ true, True, false, FALSE ]
-Integers: [ 0, 0o7, 0x3A, -19 ]
-Floats: [ 0., -0.0, .5, +12e03, -2E+05 ]
-Also floats: [ .inf, -.Inf, +.INF, .NAN ]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (null_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (comment)
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (boolean_scalar)))
-              (flow_node
-                (plain_scalar
-                  (boolean_scalar)))
-              (flow_node
-                (plain_scalar
-                  (boolean_scalar)))
-              (flow_node
-                (plain_scalar
-                  (boolean_scalar))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (integer_scalar)))
-              (flow_node
-                (plain_scalar
-                  (integer_scalar)))
-              (flow_node
-                (plain_scalar
-                  (integer_scalar)))
-              (flow_node
-                (plain_scalar
-                  (integer_scalar))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (float_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (float_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar))))))))))
diff --git a/test/corpus/spec.txt b/test/corpus/spec.txt
deleted file mode 100644
index 3ed4e8b..0000000
--- a/test/corpus/spec.txt
+++ /dev/null
@@ -1,9836 +0,0 @@
-================================================================================
-Aliases in Block Sequence
-================================================================================
-- &a a
-- &b b
-- *a
-- *b
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (alias
-              (alias_name))))
-        (block_sequence_item
-          (flow_node
-            (alias
-              (alias_name))))))))
-
-================================================================================
-Aliases in Explicit Block Mapping
-================================================================================
-? &a a
-: &b b
-: *a
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          value: (flow_node
-            (alias
-              (alias_name))))))))
-
-================================================================================
-Aliases in Flow Objects
-================================================================================
-{ &a [a, &b b]: *b, *a : [c, *b, d]}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (anchor
-              (anchor_name))
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (anchor
-                  (anchor_name))
-                (plain_scalar
-                  (string_scalar)))))
-          value: (flow_node
-            (alias
-              (alias_name))))
-        (flow_pair
-          key: (flow_node
-            (alias
-              (alias_name)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (alias
-                  (alias_name)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar))))))))))
-
-================================================================================
-Aliases in Implicit Block Mapping
-================================================================================
-&a a: &b b
-*a : *b
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (alias
-              (alias_name)))
-          value: (flow_node
-            (alias
-              (alias_name))))))))
-
-================================================================================
-Allowed characters in alias
-================================================================================
-a: &:@*!$"<foo>: scalar a
-b: *:@*!$"<foo>:
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (alias
-              (alias_name))))))))
-
-================================================================================
-Allowed characters in keys
-================================================================================
-a!"#$%&'()*+,-./09:;<=>?@AZ[\]^_`az{|}~: safe
-?foo: safe question mark
-:foo: safe colon
--foo: safe dash
-this is#not: a comment
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Allowed characters in plain scalars
-================================================================================
-safe: a!"#$%&'()*+,-./09:;<=>?@AZ[\]^_`az{|}~
-     !"#$%&'()*+,-./09:;<=>?@AZ[\]^_`az{|}~
-safe question mark: ?foo
-safe colon: :foo
-safe dash: -foo
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Allowed characters in quoted mapping key
-================================================================================
-"foo\nbar:baz\tx \\$%^&*()x": 23
-'x\ny:z\tx $%^&*()x': 24
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (double_quote_scalar
-              (escape_sequence)
-              (escape_sequence)
-              (escape_sequence)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (single_quote_scalar))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Anchor and alias as mapping key [INVALID]
-================================================================================
-key1: &alias value1
-&b *alias : value2
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (anchor
-        (anchor_name))
-      (plain_scalar
-        (string_scalar))))
-  (flow_node
-    (anchor
-      (anchor_name))))
-
-================================================================================
-Anchor before sequence entry on same line [INVALID]
-================================================================================
-&anchor - sequence entry
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (anchor
-      (anchor_name))))
-
-================================================================================
-Anchor before zero indented sequence
-================================================================================
----
-seq:
- &anchor
-- a
-- b
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Anchor for empty node
-================================================================================
----
-a: &anchor
-b: *anchor
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (alias
-              (alias_name))))))))
-
-================================================================================
-Anchor plus Alias [INVALID]
-================================================================================
-key1: &a value
-key2: &b *a
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (anchor
-        (anchor_name))
-      (plain_scalar
-        (string_scalar))))
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (anchor
-        (anchor_name)))))
-
-================================================================================
-Anchor with colon in the middle
-================================================================================
----
-key: &an:chor value
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Anchor with unicode character
-================================================================================
----
-- &😁 unicode anchor
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Anchors and Tags
-================================================================================
- - &a !!str a
- - !!int 2
- - !!int &c 4
- - &d d
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (anchor
-              (anchor_name))
-            (tag)
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (tag)
-            (plain_scalar
-              (integer_scalar))))
-        (block_sequence_item
-          (flow_node
-            (tag)
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (integer_scalar))))
-        (block_sequence_item
-          (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Anchors in Mapping
-================================================================================
-&a a: b
-c: &d d
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Anchors on Empty Scalars
-================================================================================
-- &a
-- a
--
-  &a : a
-  b: &b
--
-  &c : &a
--
-  ? &d
--
-  ? &e
-  : &a
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (anchor
-              (anchor_name))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (anchor
-                    (anchor_name)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (anchor
-                    (anchor_name)))))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (anchor
-                    (anchor_name)))
-                value: (flow_node
-                  (anchor
-                    (anchor_name)))))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (anchor
-                    (anchor_name)))))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (anchor
-                    (anchor_name)))
-                value: (flow_node
-                  (anchor
-                    (anchor_name)))))))))))
-
-================================================================================
-Anchors With Colon in Name
-================================================================================
-&a: key: &a value
-foo:
-  *a:
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (alias
-              (alias_name))))))))
-
-================================================================================
-Backslashes in singlequotes
-================================================================================
-'foo: bar\': baz'
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (single_quote_scalar))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Bad indentation in mapping (2) [INVALID]
-================================================================================
-map:
-  key1: "quoted1"
-   key2: "bad indentation"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (double_quote_scalar)))
-              (ERROR))))))))
-
-================================================================================
-Bad indentation in mapping [INVALID]
-================================================================================
-map:
-  key1: "quoted1"
- key2: "bad indentation"
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (plain_scalar
-      (string_scalar)))
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (double_quote_scalar))))
-
-================================================================================
-Bare document after document end marker
-================================================================================
----
-scalar1
-...
-key: value
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar))))
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Blank lines
-================================================================================
-foo: 1
-
-bar: 2
-    
-text: |
-  a
-    
-  b
-
-  c
- 
-  d
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))))))
-
-================================================================================
-Block Mapping with Missing Keys
-================================================================================
-: a
-: b
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Block Mapping with Missing Values
-================================================================================
-? a
-? b
-c:
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Block Mapping with Multiline Scalars
-================================================================================
-? a
-  true
-: null
-  d
-? e
-  42
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Block Mappings in Block Sequence
-================================================================================
- - key: value
-   key2: value2
- -
-   key3: value3
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Block scalar indicator order
-================================================================================
-- |2-
-  explicit indent and chomp
-- |-2
-  chomp and explicit indent
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (block_scalar)))
-        (block_sequence_item
-          (block_node
-            (block_scalar)))))))
-
-================================================================================
-Block Scalar Keep
-================================================================================
---- |+
- ab
- 
-  
-...
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Block Scalar Strip
-================================================================================
-|-
- ab
- 
- 
-...
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Block Scalar Strip [1.3]
-================================================================================
---- |-
- ab
- 
- 
-...
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Block scalar with spaces only
-================================================================================
-empty block scalar: >
- 
-  
-   
- # comment
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (comment)))))
-
-================================================================================
-Block scalar with wrong indented line after spaces only [INVALID]
-================================================================================
-block scalar: >
- 
-  
-   
- invalid
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (ERROR)))))
-
-================================================================================
-Block Sequence in Block Mapping
-================================================================================
-key:
- - item1
- - item2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Block Sequence in Block Sequence
-================================================================================
-- - s1_i1
-  - s1_i2
-- s2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Block Submapping
-================================================================================
-foo:
-  bar: 1
-baz: 2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Colon and adjacent value after comment on next line
-================================================================================
----
-{ "foo" # comment
-  :bar }
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (double_quote_scalar))
-          (comment)
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Colon and adjacent value on next line
-================================================================================
----
-{ "foo"
-  :bar }
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (double_quote_scalar))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Colon followed by comma
-================================================================================
----
-- :,
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Colon in Double Quoted String
-================================================================================
-"foo: bar\": baz"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (double_quote_scalar
-        (escape_sequence)))))
-
-================================================================================
-Comment and document-end marker
-================================================================================
-# comment
-...
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment)
-  (document))
-
-================================================================================
-Comment between plain scalar lines [INVALID]
-================================================================================
-word1  # comment
-word2
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (plain_scalar
-      (string_scalar)))
-  (comment))
-
-================================================================================
-Comment in flow sequence before comma
-================================================================================
----
-[ word1
-# comment
-, word2]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_sequence
-        (flow_node
-          (plain_scalar
-            (string_scalar)))
-        (comment)
-        (flow_node
-          (plain_scalar
-            (string_scalar)))))))
-
-================================================================================
-Comment in plain multiline value [INVALID]
-================================================================================
-key: word1
-#  xxx
-  word2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (comment)
-        (ERROR)))))
-
-================================================================================
-Comment that looks like a mapping key [INVALID]
-================================================================================
-key: value
-this is #not a: key
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (ERROR
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (comment)))))
-
-================================================================================
-Comment without whitespace after block scalar indicator [INVALID]
-================================================================================
-block: ># comment
-  scalar
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Comment without whitespace after doublequoted scalar [INVALID]
-================================================================================
-key: "value"# invalid comment
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (double_quote_scalar))))
-
-================================================================================
-Construct Binary
-================================================================================
-canonical: !!binary "\
- R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5\
- OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+\
- +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC\
- AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs="
-generic: !!binary |
- R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
- OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
- +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
- AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
-description:
- The binary value above is a tiny arrow encoded as a gif image.
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (double_quote_scalar
-              (escape_sequence)
-              (escape_sequence)
-              (escape_sequence)
-              (escape_sequence))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (tag)
-            (block_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Directive without document [INVALID]
-================================================================================
-%YAML 1.2
-...
-
---------------------------------------------------------------------------------
-
-(stream
-  (ERROR
-    (yaml_directive
-      (yaml_version)))
-  (document))
-
-================================================================================
-Document start on last line
-================================================================================
----
-a: b
----
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar)))))))
-  (document))
-
-================================================================================
-Document with footer
-================================================================================
-aaa: bbb
-...
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Document-end marker
-================================================================================
-...
-
---------------------------------------------------------------------------------
-
-(stream
-  (document))
-
-================================================================================
-Double quoted scalar with escaped single quote [INVALID]
-================================================================================
----
-double: "quoted \' scalar"
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (plain_scalar
-      (string_scalar))))
-
-================================================================================
-Double quoted string without closing quote [INVALID]
-================================================================================
----
-key: "missing closing quote
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (ERROR)))))
-
-================================================================================
-Doublequoted scalar starting with a tab
-================================================================================
----
-tab: "\tstring"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar
-              (escape_sequence))))))))
-
-================================================================================
-Duplicate YAML directive
-================================================================================
-%YAML 1.2
-%YAML 1.2
----
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (yaml_directive
-      (yaml_version))
-    (yaml_directive
-      (yaml_version))))
-
-================================================================================
-Empty flow collections
-================================================================================
----
-nested sequences:
-- - - []
-- - - {}
-key1: []
-key2: {}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (block_node
-                  (block_sequence
-                    (block_sequence_item
-                      (block_node
-                        (block_sequence
-                          (block_sequence_item
-                            (flow_node
-                              (flow_sequence)))))))))
-              (block_sequence_item
-                (block_node
-                  (block_sequence
-                    (block_sequence_item
-                      (block_node
-                        (block_sequence
-                          (block_sequence_item
-                            (flow_node
-                              (flow_mapping))))))))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_mapping)))))))
-
-================================================================================
-Empty Lines at End of Document
-================================================================================
-:
-
-
-
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair)))))
-
-================================================================================
-Empty Lines Between Mapping Elements
-================================================================================
-1: 2
-
-
-3: 4
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (integer_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (integer_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Empty Stream
-================================================================================
-
---------------------------------------------------------------------------------
-
-(stream)
-
-================================================================================
-Escaped slash in double quotes
-================================================================================
-escaped slash: "a\/b"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar
-              (escape_sequence))))))))
-
-================================================================================
-Explicit key and value seperated by comment
-================================================================================
----
-? key
-# comment
-: value
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          (comment)
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Explicit Non-Specific Tag
-================================================================================
-! a
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (tag)
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Explicit Non-Specific Tag [1.3]
-================================================================================
----
-! a
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (tag)
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Flow Mapping
-================================================================================
-{foo: you, bar: far}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Flow Mapping Closed at Original Indentation
-================================================================================
-first: {
-  foo: you,
-  bar: far
-}
-second: 2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Flow mapping colon on line after key
-================================================================================
-{"foo"
-: "bar"}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (double_quote_scalar))
-          value: (flow_node
-            (double_quote_scalar)))))))
-
-================================================================================
-Flow Mapping in Block Sequence
-================================================================================
-- {a: b}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Flow Mapping Key on two lines [INVALID]
-================================================================================
-[23
-]: 42
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_sequence
-        (flow_node
-          (plain_scalar
-            (integer_scalar))))))
-  (MISSING _eof))
-
-================================================================================
-Flow mapping missing a separating comma [INVALID]
-================================================================================
----
-{
- foo: 1
- bar: 2 }
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Flow Sequence
-================================================================================
-[foo, bar, 42]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_sequence
-        (flow_node
-          (plain_scalar
-            (string_scalar)))
-        (flow_node
-          (plain_scalar
-            (string_scalar)))
-        (flow_node
-          (plain_scalar
-            (integer_scalar)))))))
-
-================================================================================
-Flow Sequence Closed at Original Indentation
-================================================================================
-first: [
-  foo,
-  b,
-  42
-]
-second: 2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (integer_scalar))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Flow Sequence in Block Mapping
-================================================================================
-a: [b, c]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar))))))))))
-
-================================================================================
-Flow Sequence in Flow Mapping
-================================================================================
-{a: [b, c], [d, e]: f}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar))))))
-        (flow_pair
-          key: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Flow Sequence in Flow Sequence
-================================================================================
-[a, [b, c]]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_sequence
-        (flow_node
-          (plain_scalar
-            (string_scalar)))
-        (flow_node
-          (flow_sequence
-            (flow_node
-              (plain_scalar
-                (string_scalar)))
-            (flow_node
-              (plain_scalar
-                (string_scalar)))))))))
-
-================================================================================
-Flow sequence with invalid comma at the beginning [INVALID]
-================================================================================
----
-[ , a, b, c ]
-
---------------------------------------------------------------------------------
-
-(ERROR)
-
-================================================================================
-Flow sequence with invalid extra closing bracket [INVALID]
-================================================================================
----
-[ a, b, c ] ]
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (flow_sequence
-      (flow_node
-        (plain_scalar
-          (string_scalar)))
-      (flow_node
-        (plain_scalar
-          (string_scalar)))
-      (flow_node
-        (plain_scalar
-          (string_scalar))))))
-
-================================================================================
-Flow sequence with invalid extra comma [INVALID]
-================================================================================
----
-[ a, b, c, , ]
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (plain_scalar
-      (string_scalar)))
-  (flow_node
-    (plain_scalar
-      (string_scalar)))
-  (flow_node
-    (plain_scalar
-      (string_scalar))))
-
-================================================================================
-Flow sequence without closing bracket [INVALID]
-================================================================================
----
-[ [ a, b, c ]
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (flow_sequence
-      (flow_node
-        (plain_scalar
-          (string_scalar)))
-      (flow_node
-        (plain_scalar
-          (string_scalar)))
-      (flow_node
-        (plain_scalar
-          (string_scalar))))))
-
-================================================================================
-Folded Block Scalar
-================================================================================
->
- ab
- cd
- 
- ef
-
-
- gh
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Folded Block Scalar [1.3]
-================================================================================
---- >
- ab
- cd
- 
- ef
-
-
- gh
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Implicit Flow Mapping Key on one line
-================================================================================
-[flow]: block
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Implicit key followed by newline [INVALID]
-================================================================================
----
-[ key
-  : value ]
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (plain_scalar
-      (string_scalar))))
-
-================================================================================
-Implicit key followed by newline and adjacent value [INVALID]
-================================================================================
-[ "key"
-  :value ]
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (double_quote_scalar)))
-
-================================================================================
-Invalid anchor in zero indented sequence [INVALID]
-================================================================================
----
-seq:
-&anchor
-- a
-- b
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar))))
-  (flow_node
-    (anchor
-      (anchor_name))))
-
-================================================================================
-Invalid block mapping key on same line as previous key [INVALID]
-================================================================================
----
-x: { y: z }in: valid
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Invalid comment after comma [INVALID]
-================================================================================
----
-[ a, b, c,#invalid
-]
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (plain_scalar
-      (string_scalar)))
-  (flow_node
-    (plain_scalar
-      (string_scalar)))
-  (flow_node
-    (plain_scalar
-      (string_scalar))))
-
-================================================================================
-Invalid comment after end of flow sequence [INVALID]
-================================================================================
----
-[ a, b, c, ]#invalid
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (flow_sequence
-      (flow_node
-        (plain_scalar
-          (string_scalar)))
-      (flow_node
-        (plain_scalar
-          (string_scalar)))
-      (flow_node
-        (plain_scalar
-          (string_scalar))))))
-
-================================================================================
-Invalid content after document end marker [INVALID]
-================================================================================
----
-key: value
-... invalid
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar)))))))
-  (MISSING _eof))
-
-================================================================================
-Invalid document markers in flow style [INVALID]
-================================================================================
-[
---- ,
-...
-]
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (string_scalar))
-
-================================================================================
-Invalid document-end marker in single quoted string [INVALID]
-================================================================================
----
-'
-...
-'
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (document
-    (ERROR)))
-
-================================================================================
-Invalid document-start marker in doublequoted tring [INVALID]
-================================================================================
----
-"
----
-"
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (ERROR))
-
-================================================================================
-Invalid escape in double quoted string [INVALID]
-================================================================================
----
-"\."
-
---------------------------------------------------------------------------------
-
-(ERROR)
-
-================================================================================
-Invalid item after end of flow sequence [INVALID]
-================================================================================
----
-[
-sequence item
-]
-invalid item
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_sequence
-        (flow_node
-          (plain_scalar
-            (string_scalar))))))
-  (MISSING _eof))
-
-================================================================================
-Invalid mapping after sequence [INVALID]
-================================================================================
-- item1
-- item2
-invalid: x
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_sequence_item
-    (flow_node
-      (plain_scalar
-        (string_scalar))))
-  (flow_node
-    (plain_scalar
-      (string_scalar)))
-  (string_scalar))
-
-================================================================================
-Invalid mapping in plain multiline [INVALID]
-================================================================================
-this
- is
-  invalid: x
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar))))
-  (MISSING _eof))
-
-================================================================================
-Invalid Mapping in plain scalar [INVALID]
-================================================================================
-key:
-  word1 word2
-  no: key
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Invalid mapping in plain single line value [INVALID]
-================================================================================
-a: b: c: d
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Invalid nested mapping [INVALID]
-================================================================================
----
-a: 'b': c
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (single_quote_scalar))))
-
-================================================================================
-Invalid scalar after sequence [INVALID]
-================================================================================
-- item1
-- item2
-invalid
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (ERROR
-          (string_scalar))))))
-
-================================================================================
-Invalid scalar at the end of mapping [INVALID]
-================================================================================
-key:
- - item1
- - item2
-invalid
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (ERROR
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Invalid scalar at the end of sequence [INVALID]
-================================================================================
-key:
- - bar
- - baz
- invalid
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (ERROR
-                (string_scalar)))))))))
-
-================================================================================
-Invalid sequene item on same line as previous item [INVALID]
-================================================================================
----
-- { y: z }- invalid
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (flow_mapping
-      (flow_pair
-        key: (flow_node
-          (plain_scalar
-            (string_scalar)))
-        value: (flow_node
-          (plain_scalar
-            (string_scalar)))))))
-
-================================================================================
-Invalid tabs as indendation in a mapping [INVALID]
-================================================================================
----
-a:
-	b:
-		c: value
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Invalid tag [INVALID]
-================================================================================
----
-!invalid{}tag scalar
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (tag)
-    (flow_mapping)))
-
-================================================================================
-Invalid text after block scalar indicator [INVALID]
-================================================================================
----
-folded: > first line
-  second line
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (plain_scalar
-      (string_scalar))))
-
-================================================================================
-Invalid value after mapping [INVALID]
-================================================================================
-foo:
-  bar
-invalid
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (ERROR
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Key with anchor after missing explicit mapping value
-================================================================================
----
-a: 1
-? b
-&anchor c: 3
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Literal Block Scalar
-================================================================================
-a: |
- ab
- 
- cd
- ef
- 
-
-...
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))))))
-
-================================================================================
-Literal block scalar with more spaces in first line [INVALID]
-================================================================================
----
-block scalar: |
-     
-  more spaces at the beginning
-  are invalid
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (ERROR)))))
-
-================================================================================
-Literal unicode
-================================================================================
----
-wanted: love ♥ and peace ☮
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Lookahead test cases
-================================================================================
-- bla"keks: foo
-- bla]keks: foo
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Mapping starting at --- line [INVALID]
-================================================================================
---- key1: value1
-    key2: value2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar))))
-  (MISSING _eof))
-
-================================================================================
-Mapping with anchor on document start line [INVALID]
-================================================================================
---- &anchor a: b
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (anchor
-        (anchor_name))
-      (plain_scalar
-        (string_scalar))))
-  (MISSING _eof))
-
-================================================================================
-Mapping, key and flow sequence item anchors
-================================================================================
----
-&mapping
-&key [ &item a, b, c ]: value
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (anchor
-        (anchor_name))
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (anchor
-              (anchor_name))
-            (flow_sequence
-              (flow_node
-                (anchor
-                  (anchor_name))
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Missing colon [INVALID]
-================================================================================
-top1:
-  key1: val1
-top2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (ERROR
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Missing comma in flow [INVALID]
-================================================================================
-key: [ word1
-#  xxx
-  word2 ]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (ERROR
-          (flow_node
-            (plain_scalar
-              (string_scalar)))
-          (comment))))))
-
-================================================================================
-Missing document-end marker before directive [INVALID]
-================================================================================
----
-scalar1 # comment
-%YAML 1.2
----
-scalar2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document)
-  (ERROR
-    (flow_node
-      (plain_scalar
-        (string_scalar)))
-    (comment))
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Missing space in YAML directive
-================================================================================
-%YAML1.2
----
-key: value
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (reserved_directive
-      (directive_name))
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Mixed Block Mapping (explicit to implicit)
-================================================================================
-? a
-: 13
-1.5: d
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (float_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Mixed Block Mapping (implicit to explicit)
-================================================================================
-a: 4.2
-? 23
-: d
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (float_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (integer_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-More indented lines at the beginning of folded block scalars
-================================================================================
----
-a: >2
-   more indented
-  regular
-b: >2
-
-
-   more indented
-  regular
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))))))
-
-================================================================================
-Multi-level Mapping Indent
-================================================================================
-a:
-  b:
-    c: d
-  e:
-    f: g
-h: i
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (block_node
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar)))))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (block_node
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Multiline double quoted flow mapping key
-================================================================================
----
-- { "single line": value}
-- { "multi
-  line": value}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (double_quote_scalar))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (double_quote_scalar))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Multiline double quoted implicit keys [INVALID]
-================================================================================
-"a\nb": 1
-"c
- d": 1
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (double_quote_scalar
-              (escape_sequence)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (ERROR)))))
-
-================================================================================
-Multiline doublequoted flow mapping key without value
-================================================================================
----
-- { "single line", a: b}
-- { "multi
-  line", a: b}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_node
-                (double_quote_scalar))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_node
-                (double_quote_scalar))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Multiline implicit keys [INVALID]
-================================================================================
-a\nb: 1
-c
- d: 1
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (plain_scalar
-        (integer_scalar)))))
-
-================================================================================
-Multiline plain flow mapping key
-================================================================================
----
-- { single line: value}
-- { multi
-  line: value}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Multiline plain flow mapping key without value
-================================================================================
----
-- { single line, a: b}
-- { multi
-  line, a: b}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Multiline plain scalar with empty line
-================================================================================
----
-plain: a
- b
-
- c
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Multiline plain value with tabs on empty lines
-================================================================================
-key:
-  value
-  with
-  	
-  tabs
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Multiline Scalar at Top Level
-================================================================================
-a
-b  
-  c
-d
-
-e
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Multiline Scalar at Top Level [1.3]
-================================================================================
----
-a
-b  
-  c
-d
-
-e
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Multiline Scalar in Mapping
-================================================================================
-a: b
- c
-d:
- e
-  f
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Multiline scalar that looks like a YAML directive
-================================================================================
----
-scalar
-%YAML 1.2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Multiline single quoted implicit keys [INVALID]
-================================================================================
-'a\nb': 1
-'c
- d': 1
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (single_quote_scalar))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (ERROR)))))
-
-================================================================================
-Multiple Entry Block Sequence
-================================================================================
-- foo
-- bar
-- 42
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Multiple Pair Block Mapping
-================================================================================
-foo: blue
-bar: arrr
-baz: jazz
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Nested flow collections
-================================================================================
----
-{
- a: [
-  b, c, {
-   d: [e, f]
-  }
- ]
-}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (flow_mapping
-                  (flow_pair
-                    key: (flow_node
-                      (plain_scalar
-                        (string_scalar)))
-                    value: (flow_node
-                      (flow_sequence
-                        (flow_node
-                          (plain_scalar
-                            (string_scalar)))
-                        (flow_node
-                          (plain_scalar
-                            (string_scalar)))))))))))))))
-
-================================================================================
-Nested flow collections on one line
-================================================================================
----
-{ a: [b, c, { d: [e, f] } ] }
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (flow_mapping
-                  (flow_pair
-                    key: (flow_node
-                      (plain_scalar
-                        (string_scalar)))
-                    value: (flow_node
-                      (flow_sequence
-                        (flow_node
-                          (plain_scalar
-                            (string_scalar)))
-                        (flow_node
-                          (plain_scalar
-                            (string_scalar)))))))))))))))
-
-================================================================================
-Nested flow mapping sequence and mappings
-================================================================================
----
-{ top1: [item1, {key2: value2}, item3], top2: value2 }
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (flow_mapping
-                  (flow_pair
-                    key: (flow_node
-                      (plain_scalar
-                        (string_scalar)))
-                    value: (flow_node
-                      (plain_scalar
-                        (string_scalar))))))
-              (flow_node
-                (plain_scalar
-                  (string_scalar))))))
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Nested implicit complex keys
-================================================================================
----
-[
-  [ a, [ [[b,c]]: d, e]]: 23
-]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_sequence
-        (flow_pair
-          key: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (flow_sequence
-                  (flow_pair
-                    key: (flow_node
-                      (flow_sequence
-                        (flow_node
-                          (flow_sequence
-                            (flow_node
-                              (plain_scalar
-                                (string_scalar)))
-                            (flow_node
-                              (plain_scalar
-                                (string_scalar)))))))
-                    value: (flow_node
-                      (plain_scalar
-                        (string_scalar))))
-                  (flow_node
-                    (plain_scalar
-                      (string_scalar)))))))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Nested top level flow mapping
-================================================================================
-{ key: [[[
-  value
- ]]]
-}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (flow_sequence
-                  (flow_node
-                    (flow_sequence
-                      (flow_node
-                        (plain_scalar
-                          (string_scalar))))))))))))))
-
-================================================================================
-Node Anchor and Tag on Seperate Lines
-================================================================================
-key: &anchor
- !!map
-  a: b
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (tag)
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Node anchor in sequence [INVALID]
-================================================================================
-- item1
-&node
-- item2
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (plain_scalar
-      (string_scalar))))
-
-================================================================================
-Node anchor not indented [INVALID]
-================================================================================
-key: &x
-!!map
-  a: b
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))))
-        (ERROR
-          (tag))))))
-
-================================================================================
-Node and Mapping Key Anchors
-================================================================================
----
-top1: &node1
-  &k1 key1: one
-top2: &node2 # comment
-  key2: two
-top3:
-  &k3 key3: three
-top4:
-  &node4
-  &k4 key4: four
-top5:
-  &node5
-  key5: five
-top6: &val6
-  six
-top7:
-  &val7 seven
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (anchor
-                    (anchor_name))
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (comment)
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (anchor
-                    (anchor_name))
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (anchor
-                    (anchor_name))
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Node and Mapping Key Anchors [1.3]
-================================================================================
----
-top1: &node1
-  &k1 key1: one
-top2: &node2 # comment
-  key2: two
-top3:
-  &k3 key3: three
-top4: &node4
-  &k4 key4: four
-top5: &node5
-  key5: five
-top6: &val6
-  six
-top7:
-  &val7 seven
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (anchor
-                    (anchor_name))
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (comment)
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (anchor
-                    (anchor_name))
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (anchor
-                    (anchor_name))
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Non-Specific Tags on Scalars
-================================================================================
-- plain
-- "double quoted"
-- 'single quoted'
-- >
-  block
-- plain again
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (double_quote_scalar)))
-        (block_sequence_item
-          (flow_node
-            (single_quote_scalar)))
-        (block_sequence_item
-          (block_node
-            (block_scalar)))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Plain mapping key ending with colon
-================================================================================
----
-key ends with two colons::: value
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Plain Scalar looking like key, comment, anchor and tag
-================================================================================
-k:#foo
- &a !t s
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Plain Scalar looking like key, comment, anchor and tag [1.3]
-================================================================================
----
-k:#foo
- &a !t s
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Plain scalar with backslashes
-================================================================================
----
-plain\value\with\backslashes
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Plain URL in flow mapping
-================================================================================
-- { url: http://example.org }
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Scalar value with two anchors [INVALID]
-================================================================================
-top1: &node1
-  &k1 key1: val1
-top2: &node2
-  &v2 val2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (anchor
-                    (anchor_name))
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))))
-        (ERROR
-          (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Scalars on --- line
-================================================================================
---- "quoted
-string"
---- &node foo
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (double_quote_scalar)))
-  (document
-    (flow_node
-      (anchor
-        (anchor_name))
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Sequence entry that looks like two with wrong indentation
-================================================================================
-- single multiline
- - sequence entry
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Sequence Indent
-================================================================================
-foo:
-- 42
-bar:
-  - 44
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (integer_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (integer_scalar)))))))))))
-
-================================================================================
-Sequence on same Line as Mapping Key [INVALID]
-================================================================================
-key: - a
-     - b
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Sequence With Same Indentation as Parent Mapping
-================================================================================
-1:
-- 2
-- 3
-4: 5
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (integer_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (integer_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (integer_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (integer_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Simple Mapping Indent
-================================================================================
-foo:
-  bar: baz
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Single block sequence with anchor
-================================================================================
-&sequence
-- a
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (anchor
-        (anchor_name))
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Single block sequence with anchor and explicit document start
-================================================================================
---- &sequence
-- a
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (anchor
-        (anchor_name))
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Single Entry Block Sequence
-================================================================================
-- foo
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Single Pair Block Mapping
-================================================================================
-foo: bar
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 2.1. Sequence of Scalars
-================================================================================
-- Mark McGwire
-- Sammy Sosa
-- Ken Griffey
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 2.2. Mapping Scalars to Scalars
-================================================================================
-hr:  65    # Home runs
-avg: 0.278 # Batting average
-rbi: 147   # Runs Batted In
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (comment)
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (float_scalar))))
-        (comment)
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (comment)))))
-
-================================================================================
-Spec Example 2.3. Mapping Scalars to Sequences
-================================================================================
-american:
-  - Boston Red Sox
-  - Detroit Tigers
-  - New York Yankees
-national:
-  - New York Mets
-  - Chicago Cubs
-  - Atlanta Braves
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 2.4. Sequence of Mappings
-================================================================================
--
-  name: Mark McGwire
-  hr:   65
-  avg:  0.278
--
-  name: Sammy Sosa
-  hr:   63
-  avg:  0.288
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (float_scalar)))))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (float_scalar)))))))))))
-
-================================================================================
-Spec Example 2.5. Sequence of Sequences
-================================================================================
-- [name        , hr, avg  ]
-- [Mark McGwire, 65, 0.278]
-- [Sammy Sosa  , 63, 0.288]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar))))))
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (integer_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar))))))
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (integer_scalar)))
-              (flow_node
-                (plain_scalar
-                  (float_scalar))))))))))
-
-================================================================================
-Spec Example 2.6. Mapping of Mappings
-================================================================================
-Mark McGwire: {hr: 65, avg: 0.278}
-Sammy Sosa: {
-    hr: 63,
-    avg: 0.288
-  }
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar))))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (float_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar))))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (float_scalar)))))))))))
-
-================================================================================
-Spec Example 2.7. Two Documents in a Stream
-================================================================================
-# Ranking of 1998 home runs
----
-- Mark McGwire
-- Sammy Sosa
-- Ken Griffey
-
-# Team ranking
----
-- Chicago Cubs
-- St Louis Cardinals
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment)
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (comment))))
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 2.8. Play by Play Feed from a Game
-================================================================================
----
-time: 20:03:20
-player: Sammy Sosa
-action: strike (miss)
-...
----
-time: 20:03:47
-player: Sammy Sosa
-action: grand slam
-...
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar)))))))
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 2.9. Single Document with Two Comments
-================================================================================
----
-hr: # 1998 hr ranking
-  - Mark McGwire
-  - Sammy Sosa
-rbi:
-  # 1998 rbi ranking
-  - Sammy Sosa
-  - Ken Griffey
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          (comment)
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          (comment)
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 2.10. Node for “Sammy Sosa” appears twice in this document
-================================================================================
----
-hr:
-  - Mark McGwire
-  # Following node labeled SS
-  - &SS Sammy Sosa
-rbi:
-  - *SS # Subsequent occurrence
-  - Ken Griffey
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (comment)
-              (block_sequence_item
-                (flow_node
-                  (anchor
-                    (anchor_name))
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (alias
-                    (alias_name))))
-              (comment)
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 2.11. Mapping between Sequences
-================================================================================
-? - Detroit Tigers
-  - Chicago cubs
-:
-  - 2001-07-23
-
-? [ New York Yankees,
-    Atlanta Braves ]
-: [ 2001-07-02, 2001-08-12,
-    2001-08-14 ]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar))))))))))
-
-================================================================================
-Spec Example 2.12. Compact Nested Mapping
-================================================================================
----
-# Products purchased
-- item    : Super Hoop
-  quantity: 1
-- item    : Basketball
-  quantity: 4
-- item    : Big Shoes
-  quantity: 1
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (comment)
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar)))))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar)))))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar)))))))))))
-
-================================================================================
-Spec Example 2.13. In literals, newlines are preserved
-================================================================================
-# ASCII Art
---- |
-  \//||\/||
-  // ||  ||__
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment)
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Spec Example 2.14. In the folded scalars, newlines become spaces
-================================================================================
---- >
-  Mark McGwire's
-  year was crippled
-  by a knee injury.
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Spec Example 2.15. Folded newlines are preserved for "more indented" and blank lines
-================================================================================
->
- Sammy Sosa completed another
- fine season with great stats.
-
-   63 Home Runs
-   0.288 Batting Average
-
- What a year!
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Spec Example 2.16. Indentation determines scope
-================================================================================
-name: Mark McGwire
-accomplishment: >
-  Mark set a major league
-  home run record in 1998.
-stats: |
-  65 Home Runs
-  0.278 Batting Average
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 2.17. Quoted Scalars
-================================================================================
-unicode: "Sosa did fine.\u263A"
-control: "\b1998\t1999\t2000\n"
-hex esc: "\x0d\x0a is \r\n"
-
-single: '"Howdy!" he cried.'
-quoted: ' # Not a ''comment''.'
-tie-fighter: '|\-*-/|'
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar
-              (escape_sequence))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar
-              (escape_sequence)
-              (escape_sequence)
-              (escape_sequence)
-              (escape_sequence))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar
-              (escape_sequence)
-              (escape_sequence)
-              (escape_sequence)
-              (escape_sequence))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (single_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (single_quote_scalar
-              (escape_sequence)
-              (escape_sequence))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (single_quote_scalar)))))))
-
-================================================================================
-Spec Example 2.18. Multi-line Flow Scalars
-================================================================================
-plain:
-  This unquoted scalar
-  spans many lines.
-
-quoted: "So does this
-  quoted scalar.\n"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar
-              (escape_sequence))))))))
-
-================================================================================
-Spec Example 2.23. Various Explicit Tags
-================================================================================
----
-not-date: !!str 2002-04-28
-
-picture: !!binary |
- R0lGODlhDAAMAIQAAP//9/X
- 17unp5WZmZgAAAOfn515eXv
- Pz7Y6OjuDg4J+fn5OTk6enp
- 56enmleECcgggoBADs=
-
-application specific tag: !something |
- The semantics of the tag
- above may be different for
- different documents.
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (tag)
-            (block_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (tag)
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 2.24. Global Tags
-================================================================================
-%TAG ! tag:clarkevans.com,2002:
---- !shape
-  # Use the ! handle for presenting
-  # tag:clarkevans.com,2002:circle
-- !circle
-  center: &ORIGIN {x: 73, y: 129}
-  radius: 7
-- !line
-  start: *ORIGIN
-  finish: { x: 89, y: 102 }
-- !label
-  start: *ORIGIN
-  color: 0xFFEEBB
-  text: Pretty vector drawing.
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (tag_directive
-      (tag_handle)
-      (tag_prefix))
-    (block_node
-      (tag)
-      (comment)
-      (comment)
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (tag)
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (anchor
-                    (anchor_name))
-                  (flow_mapping
-                    (flow_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (integer_scalar))))
-                    (flow_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (integer_scalar)))))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar)))))))
-        (block_sequence_item
-          (block_node
-            (tag)
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (alias
-                    (alias_name))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (flow_mapping
-                    (flow_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (integer_scalar))))
-                    (flow_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (integer_scalar))))))))))
-        (block_sequence_item
-          (block_node
-            (tag)
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (alias
-                    (alias_name))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 2.25. Unordered Sets
-================================================================================
-# Sets are represented as a
-# Mapping where each key is
-# associated with a null value
---- !!set
-? Mark McGwire
-? Sammy Sosa
-? Ken Griff
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment)
-  (comment)
-  (comment)
-  (document
-    (block_node
-      (tag)
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 2.26. Ordered Mappings
-================================================================================
-# Ordered maps are represented as
-# A sequence of mappings, with
-# each mapping having one key
---- !!omap
-- Mark McGwire: 65
-- Sammy Sosa: 63
-- Ken Griffy: 58
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment)
-  (comment)
-  (comment)
-  (document
-    (block_node
-      (tag)
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar)))))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar)))))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar)))))))))))
-
-================================================================================
-Spec Example 2.27. Invoice
-================================================================================
---- !<tag:clarkevans.com,2002:invoice>
-invoice: 34843
-date   : 2001-01-23
-bill-to: &id001
-    given  : Chris
-    family : Dumars
-    address:
-        lines: |
-            458 Walkman Dr.
-            Suite #292
-        city    : Royal Oak
-        state   : MI
-        postal  : 48046
-ship-to: *id001
-product:
-    - sku         : BL394D
-      quantity    : 4
-      description : Basketball
-      price       : 450.00
-    - sku         : BL4438H
-      quantity    : 1
-      description : Super Hoop
-      price       : 2392.00
-tax  : 251.42
-total: 4443.52
-comments:
-    Late afternoon is best.
-    Backup contact is Nancy
-    Billsmer @ 338-4338.
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (tag)
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (block_node
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (block_node
-                        (block_scalar)))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (integer_scalar))))))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (alias
-              (alias_name))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (block_node
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (integer_scalar))))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (float_scalar)))))))
-              (block_sequence_item
-                (block_node
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (integer_scalar))))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (float_scalar))))))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (float_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (float_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 2.28. Log File
-================================================================================
----
-Time: 2001-11-23 15:01:42 -5
-User: ed
-Warning:
-  This is an error message
-  for the log file
----
-Time: 2001-11-23 15:02:31 -5
-User: ed
-Warning:
-  A slightly different error
-  message.
----
-Date: 2001-11-23 15:03:17 -5
-User: ed
-Fatal:
-  Unknown variable "bar"
-Stack:
-  - file: TopClass.py
-    line: 23
-    code: |
-      x = MoreObject("345\n")
-  - file: MoreClass.py
-    line: 58
-    code: |-
-      foo = bar
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar)))))))
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar)))))))
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (block_node
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (integer_scalar))))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (block_node
-                        (block_scalar))))))
-              (block_sequence_item
-                (block_node
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (integer_scalar))))
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (block_node
-                        (block_scalar)))))))))))))
-
-================================================================================
-Spec Example 5.3. Block Structure Indicators
-================================================================================
-sequence:
-- one
-- two
-mapping:
-  ? sky
-  : blue
-  sea : green
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 5.4. Flow Collection Indicators
-================================================================================
-sequence: [ one, two, ]
-mapping: { sky: blue, sea: green }
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 5.5. Comment Indicator
-================================================================================
-# Comment only.
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment))
-
-================================================================================
-Spec Example 5.6. Node Property Indicators
-================================================================================
-anchored: !local &anchor value
-alias: *anchor
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (alias
-              (alias_name))))))))
-
-================================================================================
-Spec Example 5.7. Block Scalar Indicators
-================================================================================
-literal: |
-  some
-  text
-folded: >
-  some
-  text
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 5.8. Quoted Scalar Indicators
-================================================================================
-single: 'text'
-double: "text"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (single_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))))))
-
-================================================================================
-Spec Example 5.9. Directive Indicator
-================================================================================
-%YAML 1.2
---- text
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (yaml_directive
-      (yaml_version))
-    (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Spec Example 5.12. Tabs and Spaces
-================================================================================
-# Tabs and spaces
-quoted: "Quoted 	"
-block:	|
-  void main() {
-  	printf("Hello, world!\n");
-  }
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment)
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 6.1. Indentation Spaces
-================================================================================
-  # Leading comment line spaces are
-   # neither content nor indentation.
-    
-Not indented:
- By one space: |
-    By four
-      spaces
- Flow style: [    # Leading spaces
-   By two,        # in flow style
-  Also by two,    # are neither
-  	Still by two   # content nor
-    ]             # indentation.
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment)
-  (comment)
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (block_node
-                  (block_scalar)))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (flow_sequence
-                    (comment)
-                    (flow_node
-                      (plain_scalar
-                        (string_scalar)))
-                    (comment)
-                    (flow_node
-                      (plain_scalar
-                        (string_scalar)))
-                    (comment)
-                    (flow_node
-                      (plain_scalar
-                        (string_scalar)))
-                    (comment))))
-              (comment))))))))
-
-================================================================================
-Spec Example 6.2. Indentation Indicators
-================================================================================
-? a
-: -	b
-  -  -	c
-     - d
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (block_node
-                  (block_sequence
-                    (block_sequence_item
-                      (flow_node
-                        (plain_scalar
-                          (string_scalar))))
-                    (block_sequence_item
-                      (flow_node
-                        (plain_scalar
-                          (string_scalar))))))))))))))
-
-================================================================================
-Spec Example 6.3. Separation Spaces
-================================================================================
-- foo:	 bar
-- - baz
-  -	baz
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 6.4. Line Prefixes
-================================================================================
-plain: text
-  lines
-quoted: "text
-  	lines"
-block: |
-  text
-   	lines
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 6.5. Empty Lines
-================================================================================
-Folding:
-  "Empty line
-   	
-  as a line feed"
-Chomping: |
-  Clipped empty lines
- 
-
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 6.5. Empty Lines [1.3]
-================================================================================
-Folding:
-  "Empty line
-
-  as a line feed"
-Chomping: |
-  Clipped empty lines
- 
-
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 6.6. Line Folding
-================================================================================
->-
-  trimmed
-  
- 
-
-  as
-  space
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Spec Example 6.6. Line Folding [1.3]
-================================================================================
---- >-
-  trimmed
-  
- 
-
-  as
-  space
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Spec Example 6.7. Block Folding
-================================================================================
->
-  foo 
- 
-  	 bar
-
-  baz
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Spec Example 6.8. Flow Folding
-================================================================================
-"
-  foo 
- 
-  	 bar
-
-  baz
-"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (double_quote_scalar))))
-
-================================================================================
-Spec Example 6.8. Flow Folding [1.3]
-================================================================================
----
-"
-  foo 
- 
-    bar
-
-  baz
-"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (double_quote_scalar))))
-
-================================================================================
-Spec Example 6.9. Separated Comment
-================================================================================
-key:    # Comment
-  value
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          (comment)
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 6.10. Comment Lines
-================================================================================
-  # Comment
-   
-
-
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment))
-
-================================================================================
-Spec Example 6.11. Multi-Line Comments
-================================================================================
-key:    # Comment
-        # lines
-  value
-
-
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          (comment)
-          (comment)
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 6.12. Separation Spaces
-================================================================================
-{ first: Sammy, last: Sosa }:
-# Statistics:
-  hr:  # Home runs
-     65
-  avg: # Average
-   0.278
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))))
-          (comment)
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                (comment)
-                value: (flow_node
-                  (plain_scalar
-                    (integer_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                (comment)
-                value: (flow_node
-                  (plain_scalar
-                    (float_scalar)))))))))))
-
-================================================================================
-Spec Example 6.13. Reserved Directives
-================================================================================
-%FOO  bar baz # Should be ignored
-              # with a warning.
---- "foo"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (reserved_directive
-      (directive_name)
-      (directive_parameter)
-      (directive_parameter))
-    (comment)
-    (comment)
-    (flow_node
-      (double_quote_scalar))))
-
-================================================================================
-Spec Example 6.13. Reserved Directives [1.3]
-================================================================================
-%FOO  bar baz # Should be ignored
-              # with a warning.
----
-"foo"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (reserved_directive
-      (directive_name)
-      (directive_parameter)
-      (directive_parameter))
-    (comment)
-    (comment)
-    (flow_node
-      (double_quote_scalar))))
-
-================================================================================
-Spec Example 6.14. “YAML” directive
-================================================================================
-%YAML 1.3 # Attempt parsing
-          # with a warning
----
-"foo"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (yaml_directive
-      (yaml_version))
-    (comment)
-    (comment)
-    (flow_node
-      (double_quote_scalar))))
-
-================================================================================
-Spec Example 6.16. “TAG” directive
-================================================================================
-%TAG !yaml! tag:yaml.org,2002:
----
-!yaml!str "foo"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (tag_directive
-      (tag_handle)
-      (tag_prefix))
-    (flow_node
-      (tag)
-      (double_quote_scalar))))
-
-================================================================================
-Spec Example 6.18. Primary Tag Handle
-================================================================================
-# Private
-!foo "bar"
-...
-# Global
-%TAG ! tag:example.com,2000:app/
----
-!foo "bar"
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment)
-  (document
-    (flow_node
-      (tag)
-      (double_quote_scalar)))
-  (comment)
-  (document
-    (tag_directive
-      (tag_handle)
-      (tag_prefix))
-    (flow_node
-      (tag)
-      (double_quote_scalar))))
-
-================================================================================
-Spec Example 6.18. Primary Tag Handle [1.3]
-================================================================================
-# Private
----
-!foo "bar"
-...
-# Global
-%TAG ! tag:example.com,2000:app/
----
-!foo "bar"
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment)
-  (document
-    (flow_node
-      (tag)
-      (double_quote_scalar)))
-  (comment)
-  (document
-    (tag_directive
-      (tag_handle)
-      (tag_prefix))
-    (flow_node
-      (tag)
-      (double_quote_scalar))))
-
-================================================================================
-Spec Example 6.19. Secondary Tag Handle
-================================================================================
-%TAG !! tag:example.com,2000:app/
----
-!!int 1 - 3 # Interval, not integer
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (tag_directive
-      (tag_handle)
-      (tag_prefix))
-    (flow_node
-      (tag)
-      (plain_scalar
-        (string_scalar))))
-  (comment))
-
-================================================================================
-Spec Example 6.20. Tag Handles
-================================================================================
-%TAG !e! tag:example.com,2000:app/
----
-!e!foo "bar"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (tag_directive
-      (tag_handle)
-      (tag_prefix))
-    (flow_node
-      (tag)
-      (double_quote_scalar))))
-
-================================================================================
-Spec Example 6.21. Local Tag Prefix
-================================================================================
-%TAG !m! !my-
---- # Bulb here
-!m!light fluorescent
-...
-%TAG !m! !my-
---- # Color here
-!m!light green
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (tag_directive
-      (tag_handle)
-      (tag_prefix))
-    (comment)
-    (flow_node
-      (tag)
-      (plain_scalar
-        (string_scalar))))
-  (document
-    (tag_directive
-      (tag_handle)
-      (tag_prefix))
-    (comment)
-    (flow_node
-      (tag)
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Spec Example 6.22. Global Tag Prefix
-================================================================================
-%TAG !e! tag:example.com,2000:app/
----
-- !e!foo "bar"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (tag_directive
-      (tag_handle)
-      (tag_prefix))
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (tag)
-            (double_quote_scalar)))))))
-
-================================================================================
-Spec Example 6.23. Node Properties
-================================================================================
-!!str &a1 "foo":
-  !!str bar
-&a2 baz : *a1
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (tag)
-            (anchor
-              (anchor_name))
-            (double_quote_scalar))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (alias
-              (alias_name))))))))
-
-================================================================================
-Spec Example 6.24. Verbatim Tags
-================================================================================
-!<tag:yaml.org,2002:str> foo :
-  !<!bar> baz
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 6.26. Tag Shorthands
-================================================================================
-%TAG !e! tag:example.com,2000:app/
----
-- !local foo
-- !!str bar
-- !e!tag%21 baz
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (tag_directive
-      (tag_handle)
-      (tag_prefix))
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 6.28. Non-Specific Tags
-================================================================================
-# Assuming conventional resolution:
-- "12"
-- 12
-- ! 12
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment)
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (double_quote_scalar)))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (block_sequence_item
-          (flow_node
-            (tag)
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Spec Example 6.29. Node Anchors
-================================================================================
-First occurrence: &anchor Value
-Second occurrence: *anchor
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (alias
-              (alias_name))))))))
-
-================================================================================
-Spec Example 7.1. Alias Nodes
-================================================================================
-First occurrence: &anchor Foo
-Second occurrence: *anchor
-Override anchor: &anchor Bar
-Reuse anchor: *anchor
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (alias
-              (alias_name))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (alias
-              (alias_name))))))))
-
-================================================================================
-Spec Example 7.2. Empty Content
-================================================================================
-{
-  foo : !!str,
-  !!str : bar,
-}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)))
-        (flow_pair
-          key: (flow_node
-            (tag))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 7.3. Completely Empty Flow Nodes
-================================================================================
-{
-  ? foo :,
-  : bar,
-}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (flow_pair
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 7.4. Double Quoted Implicit Keys
-================================================================================
-"implicit block key" : [
-  "implicit flow key" : value,
- ]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (double_quote_scalar))
-          value: (flow_node
-            (flow_sequence
-              (flow_pair
-                key: (flow_node
-                  (double_quote_scalar))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 7.5. Double Quoted Line Breaks
-================================================================================
-"folded 
-to a space,	
- 
-to a line feed, or 	\
- \ 	non-content"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (double_quote_scalar
-        (escape_sequence)
-        (escape_sequence)))))
-
-================================================================================
-Spec Example 7.5. Double Quoted Line Breaks [1.3]
-================================================================================
----
-"folded 
-to a space,
- 
-to a line feed, or 	\
- \ 	non-content"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (double_quote_scalar
-        (escape_sequence)
-        (escape_sequence)))))
-
-================================================================================
-Spec Example 7.6. Double Quoted Lines
-================================================================================
-" 1st non-empty
-
- 2nd non-empty 
-	3rd non-empty "
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (double_quote_scalar))))
-
-================================================================================
-Spec Example 7.6. Double Quoted Lines [1.3]
-================================================================================
----
-" 1st non-empty
-
- 2nd non-empty 
- 3rd non-empty "
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (double_quote_scalar))))
-
-================================================================================
-Spec Example 7.7. Single Quoted Characters
-================================================================================
-'here''s to "quotes"'
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (single_quote_scalar
-        (escape_sequence)))))
-
-================================================================================
-Spec Example 7.7. Single Quoted Characters [1.3]
-================================================================================
----
-'here''s to "quotes"'
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (single_quote_scalar
-        (escape_sequence)))))
-
-================================================================================
-Spec Example 7.8. Single Quoted Implicit Keys
-================================================================================
-'implicit block key' : [
-  'implicit flow key' : value,
- ]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (single_quote_scalar))
-          value: (flow_node
-            (flow_sequence
-              (flow_pair
-                key: (flow_node
-                  (single_quote_scalar))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 7.9. Single Quoted Lines
-================================================================================
-' 1st non-empty
-
- 2nd non-empty 
-	3rd non-empty '
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (single_quote_scalar))))
-
-================================================================================
-Spec Example 7.9. Single Quoted Lines [1.3]
-================================================================================
----
-' 1st non-empty
-
- 2nd non-empty 
- 3rd non-empty '
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (single_quote_scalar))))
-
-================================================================================
-Spec Example 7.10. Plain Characters
-================================================================================
-# Outside flow collection:
-- ::vector
-- ": - ()"
-- Up, up, and away!
-- -123
-- http://example.com/foo#bar
-# Inside flow collection:
-- [ ::vector,
-  ": - ()",
-  "Up, up and away!",
-  -123,
-  http://example.com/foo#bar ]
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment)
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (double_quote_scalar)))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (comment)
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (double_quote_scalar))
-              (flow_node
-                (double_quote_scalar))
-              (flow_node
-                (plain_scalar
-                  (integer_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar))))))))))
-
-================================================================================
-Spec Example 7.11. Plain Implicit Keys
-================================================================================
-implicit block key : [
-  implicit flow key : value,
- ]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (flow_sequence
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 7.12. Plain Lines
-================================================================================
-1st non-empty
-
- 2nd non-empty 
-	3rd non-empty
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Spec Example 7.13. Flow Sequence
-================================================================================
-- [ one, two, ]
-- [three ,four]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar))))))
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar))))))))))
-
-================================================================================
-Spec Example 7.14. Flow Sequence Entries
-================================================================================
-[
-"double
- quoted", 'single
-           quoted',
-plain
- text, [ nested ],
-single: pair,
-]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_sequence
-        (flow_node
-          (double_quote_scalar))
-        (flow_node
-          (single_quote_scalar))
-        (flow_node
-          (plain_scalar
-            (string_scalar)))
-        (flow_node
-          (flow_sequence
-            (flow_node
-              (plain_scalar
-                (string_scalar)))))
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 7.15. Flow Mappings
-================================================================================
-- { one : two , three: four , }
-- {five: six,seven : eight}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 7.16. Flow Mapping Entries
-================================================================================
-{
-? explicit: entry,
-implicit: entry,
-?
-}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (flow_pair)))))
-
-================================================================================
-Spec Example 7.17. Flow Mapping Separate Values
-================================================================================
-{
-unquoted : "separate",
-http://foo.com,
-omitted value:,
-: omitted key,
-}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))
-        (flow_node
-          (plain_scalar
-            (string_scalar)))
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (flow_pair
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 7.18. Flow Mapping Adjacent Values
-================================================================================
-{
-"adjacent":value,
-"readable": value,
-"empty":
-}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (double_quote_scalar))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (flow_pair
-          key: (flow_node
-            (double_quote_scalar))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (flow_pair
-          key: (flow_node
-            (double_quote_scalar)))))))
-
-================================================================================
-Spec Example 7.19. Single Pair Flow Mappings
-================================================================================
-[
-foo: bar
-]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_sequence
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 7.20. Single Pair Explicit Entry
-================================================================================
-[
-? foo
- bar : baz
-]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_sequence
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 7.21. Single Pair Implicit Entries
-================================================================================
-- [ YAML : separate ]
-- [ : empty key entry ]
-- [ {JSON: like}:adjacent ]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_pair
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_pair
-                key: (flow_node
-                  (flow_mapping
-                    (flow_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 7.21. Single Pair Implicit Entries [1.3
-================================================================================
-- [ YAML : separate ]
-- [ : empty key entry ]
-- [ "JSON like":adjacent ]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_pair
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_pair
-                key: (flow_node
-                  (double_quote_scalar))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 7.23. Flow Content
-================================================================================
-- [ a, b ]
-- { a: b }
-- "a"
-- 'b'
-- c
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar))))))
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (flow_node
-            (double_quote_scalar)))
-        (block_sequence_item
-          (flow_node
-            (single_quote_scalar)))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Spec Example 7.24. Flow Nodes
-================================================================================
-- !!str "a"
-- 'b'
-- &anchor "c"
-- *anchor
-- !!str
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (tag)
-            (double_quote_scalar)))
-        (block_sequence_item
-          (flow_node
-            (single_quote_scalar)))
-        (block_sequence_item
-          (flow_node
-            (anchor
-              (anchor_name))
-            (double_quote_scalar)))
-        (block_sequence_item
-          (flow_node
-            (alias
-              (alias_name))))
-        (block_sequence_item
-          (flow_node
-            (tag)))))))
-
-================================================================================
-Spec Example 8.1. Block Scalar Header
-================================================================================
-- | # Empty header↓
- literal
-- >1 # Indentation indicator↓
-  folded
-- |+ # Chomping indicator↓
- keep
-
-- >1- # Both indicators↓
-  strip
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (block_scalar
-              (comment))))
-        (block_sequence_item
-          (block_node
-            (block_scalar
-              (comment))))
-        (block_sequence_item
-          (block_node
-            (block_scalar
-              (comment))))
-        (block_sequence_item
-          (block_node
-            (block_scalar
-              (comment))))))))
-
-================================================================================
-Spec Example 8.2. Block Indentation Indicator
-================================================================================
-- |
- detected
-- >
- 
-  
-  # detected
-- |1
-  explicit
-- >
- 	
- detected
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (block_scalar)))
-        (block_sequence_item
-          (block_node
-            (block_scalar)))
-        (block_sequence_item
-          (block_node
-            (block_scalar)))
-        (block_sequence_item
-          (block_node
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 8.2. Block Indentation Indicator [1.3]
-================================================================================
-- |
- detected
-- >
- 
-  
-  # detected
-- |1
-  explicit
-- >
- detected
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (block_scalar)))
-        (block_sequence_item
-          (block_node
-            (block_scalar)))
-        (block_sequence_item
-          (block_node
-            (block_scalar)))
-        (block_sequence_item
-          (block_node
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 8.4. Chomping Final Line Break
-================================================================================
-strip: |-
-  text
-clip: |
-  text
-keep: |+
-  text
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 8.5. Chomping Trailing Lines
-================================================================================
- # Strip
-  # Comments:
-strip: |-
-  # text
-  
- # Clip
-  # comments:
-
-clip: |
-  # text
- 
- # Keep
-  # comments:
-
-keep: |+
-  # text
-
- # Trail
-  # comments.
-
---------------------------------------------------------------------------------
-
-(stream
-  (comment)
-  (comment)
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (comment)
-        (comment)
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (comment)
-        (comment)
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (comment)
-        (comment)))))
-
-================================================================================
-Spec Example 8.6. Empty Scalar Chomping
-================================================================================
-strip: >-
-
-clip: >
-
-keep: |+
-
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 8.7. Literal Scalar
-================================================================================
-|
- literal
- 	text
-
-
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Spec Example 8.7. Literal Scalar [1.3]
-================================================================================
---- |
- literal
- 	text
-
-
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Spec Example 8.8. Literal Content
-================================================================================
-|
- 
-  
-  literal
-   
-  
-  text
-
- # Comment
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar)))
-  (comment))
-
-================================================================================
-Spec Example 8.8. Literal Content [1.3]
-================================================================================
---- |
- 
-  
-  literal
-   
-  
-  text
-
- # Comment
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar)))
-  (comment))
-
-================================================================================
-Spec Example 8.9. Folded Scalar
-================================================================================
->
- folded
- text
-
-
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Spec Example 8.9. Folded Scalar [1.3]
-================================================================================
---- >
- folded
- text
-
-
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Spec Example 8.10. Folded Lines - 8.13. Final Empty Lines
-================================================================================
->
-
- folded
- line
-
- next
- line
-   * bullet
-
-   * list
-   * lines
-
- last
- line
-
-# Comment
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar)))
-  (comment))
-
-================================================================================
-Spec Example 8.14. Block Sequence
-================================================================================
-block sequence:
-  - one
-  - two : three
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (block_node
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))))))))))))
-
-================================================================================
-Spec Example 8.15. Block Sequence Entry Types
-================================================================================
-- # Empty
-- |
- block node
-- - one # Compact
-  - two # sequence
-- one: two # Compact mapping
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item)
-        (comment)
-        (block_sequence_item
-          (block_node
-            (block_scalar)))
-        (block_sequence_item
-          (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (comment)
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (comment))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (comment))))))))
-
-================================================================================
-Spec Example 8.16. Block Mappings
-================================================================================
-block mapping:
- key: value
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 8.17. Explicit Block Mapping Entries
-================================================================================
-? explicit key # Empty value
-? |
-  block key
-: - one # Explicit compact
-  - two # block value
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (comment)
-        (block_mapping_pair
-          key: (block_node
-            (block_scalar))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (comment)
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (comment))))))))
-
-================================================================================
-Spec Example 8.18. Implicit Block Mapping Entries
-================================================================================
-plain key: in-line value
-: # Both empty
-"quoted key":
-- entry
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair)
-        (comment)
-        (block_mapping_pair
-          key: (flow_node
-            (double_quote_scalar))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 8.19. Compact Block Mappings
-================================================================================
-- sun: yellow
-- ? earth: blue
-  : moon: white
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (block_node
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))))
-                value: (block_node
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))))))))))))
-
-================================================================================
-Spec Example 8.20. Block Node Types
-================================================================================
--
-  "flow in block"
-- >
- Block scalar
-- !!map # Block collection
-  foo : bar
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (double_quote_scalar)))
-        (block_sequence_item
-          (block_node
-            (block_scalar)))
-        (block_sequence_item
-          (block_node
-            (tag)
-            (comment)
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 8.21. Block Scalar Nodes
-================================================================================
-literal: |2
-  value
-folded:
-   !foo
-  >1
- value
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (tag)
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 8.21. Block Scalar Nodes [1.3]
-================================================================================
-literal: |2
-  value
-folded: !foo >1
- value
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (tag)
-            (block_scalar)))))))
-
-================================================================================
-Spec Example 8.22. Block Collection Nodes
-================================================================================
-sequence: !!seq
-- entry
-- !!seq
- - nested
-mapping: !!map
- foo: bar
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (tag)
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (block_node
-                  (tag)
-                  (block_sequence
-                    (block_sequence_item
-                      (flow_node
-                        (plain_scalar
-                          (string_scalar))))))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (tag)
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Spec Example 9.2. Document Markers
-================================================================================
-%YAML 1.2
----
-Document
-... # Suffix
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (yaml_directive
-      (yaml_version))
-    (flow_node
-      (plain_scalar
-        (string_scalar))))
-  (comment))
-
-================================================================================
-Spec Example 9.3. Bare Documents
-================================================================================
-Bare
-document
-...
-# No document
-...
-|
-%!PS-Adobe-2.0 # Not the first line
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar))))
-  (comment)
-  (document)
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Spec Example 9.4. Explicit Documents
-================================================================================
----
-{ matches
-% : 20 }
-...
----
-# Empty
-...
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar)))))))
-  (document
-    (comment)))
-
-================================================================================
-Spec Example 9.5. Directives Documents
-================================================================================
-%YAML 1.2
---- |
-%!PS-Adobe-2.0
-...
-%YAML 1.2
----
-# Empty
-...
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (yaml_directive
-      (yaml_version))
-    (block_node
-      (block_scalar)))
-  (document
-    (yaml_directive
-      (yaml_version))
-    (comment)))
-
-================================================================================
-Spec Example 9.6. Stream
-================================================================================
-Document
----
-# Empty
-...
-%YAML 1.2
----
-matches %: 20
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar))))
-  (document
-    (comment))
-  (document
-    (yaml_directive
-      (yaml_version))
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Spec Example 9.6. Stream [1.3]
-================================================================================
-Mapping: Document
----
-# Empty
-...
-%YAML 1.2
----
-matches %: 20
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar)))))))
-  (document
-    (comment))
-  (document
-    (yaml_directive
-      (yaml_version))
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))))))
-
-================================================================================
-Tab after document header
-================================================================================
----	scalar
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Tab at beginning of line followed by a flow mapping
-================================================================================
-	{}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (flow_mapping))))
-
-================================================================================
-Tag shorthand used in documents but only defined in the first
-================================================================================
-%TAG !prefix! tag:example.com,2011:
---- !prefix!A
-a: b
---- !prefix!B
-c: d
---- !prefix!C
-e: f
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (tag_directive
-      (tag_handle)
-      (tag_prefix))
-    (block_node
-      (tag)
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar)))))))
-  (document
-    (block_node
-      (tag)
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar)))))))
-  (document
-    (block_node
-      (tag)
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Tags for Block Objects
-================================================================================
-foo: !!seq
-  - !!str a
-  - !!map
-    key: !!str value
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (tag)
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (tag)
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (block_node
-                  (tag)
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (tag)
-                        (plain_scalar
-                          (string_scalar))))))))))))))
-
-================================================================================
-Tags for Flow Objects
-================================================================================
-!!map {
-  k: !!seq
-  [ a, !!str b]
-}
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (tag)
-      (flow_mapping
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (tag)
-                (plain_scalar
-                  (string_scalar))))))))))
-
-================================================================================
-Tags for Root Objects
-================================================================================
---- !!map
-? a
-: b
---- !!seq
-- !!str c
---- !!str
-d
-e
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (tag)
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar)))))))
-  (document
-    (block_node
-      (tag)
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar)))))))
-  (document
-    (flow_node
-      (tag)
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Tags in Block Sequence
-================================================================================
- - !!str a
- - b
- - !!int 42
- - d
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_sequence_item
-          (flow_node
-            (tag)
-            (plain_scalar
-              (integer_scalar))))
-        (block_sequence_item
-          (flow_node
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Tags in Explicit Mapping
-================================================================================
-? !!str a
-: !!int 47
-? c
-: !!str d
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar))))))))
-
-================================================================================
-Tags in Implicit Mapping
-================================================================================
-!!str a: b
-c: !!int 42
-e: !!str f
-g: h
-!!int 23: !!bool false
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (tag)
-            (plain_scalar
-              (integer_scalar)))
-          value: (flow_node
-            (tag)
-            (plain_scalar
-              (boolean_scalar))))))))
-
-================================================================================
-Tags on Empty Scalars
-================================================================================
-- !!str
--
-  !!null : a
-  b: !!str
-- !!str : !!null
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (tag)))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (tag))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_mapping_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (tag))))))
-        (block_sequence_item
-          (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (tag))
-                value: (flow_node
-                  (tag))))))))))
-
-================================================================================
-Three dashes and content without space
-================================================================================
----word1
-word2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Three dashes and content without space [1.3]
-================================================================================
----
----word1
-word2
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Trailing comment in multiline plain scalar [INVALID]
-================================================================================
----
-plain: a
-       b # end of scalar
-       c
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (comment)
-        (ERROR)))))
-
-================================================================================
-Trailing content after quoted value [INVALID]
-================================================================================
-key1: "quoted1"
-key2: "quoted2" trailing content
-key3: "quoted3"
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (double_quote_scalar)))
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (double_quote_scalar))))
-
-================================================================================
-Trailing content that looks like a mapping [INVALID]
-================================================================================
-key1: "quoted1"
-key2: "quoted2" no key: nor value
-key3: "quoted3"
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (double_quote_scalar)))
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (double_quote_scalar))))
-
-================================================================================
-Two document start markers
-================================================================================
----
----
-
---------------------------------------------------------------------------------
-
-(stream
-  (document)
-  (document))
-
-================================================================================
-Various combinations of explicit block mappings
-================================================================================
-complex1:
-  ? - a
-complex2:
-  ? - a
-  : b
-complex3:
-  ? - a
-  : >
-    b
-complex4:
-  ? >
-    a
-  :
-complex5:
-  ? - a
-  : - b
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (block_node
-                  (block_sequence
-                    (block_sequence_item
-                      (flow_node
-                        (plain_scalar
-                          (string_scalar))))))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (block_node
-                  (block_sequence
-                    (block_sequence_item
-                      (flow_node
-                        (plain_scalar
-                          (string_scalar))))))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (block_node
-                  (block_sequence
-                    (block_sequence_item
-                      (flow_node
-                        (plain_scalar
-                          (string_scalar))))))
-                value: (block_node
-                  (block_scalar))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (block_node
-                  (block_scalar))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (block_node
-                  (block_sequence
-                    (block_sequence_item
-                      (flow_node
-                        (plain_scalar
-                          (string_scalar))))))
-                value: (block_node
-                  (block_sequence
-                    (block_sequence_item
-                      (flow_node
-                        (plain_scalar
-                          (string_scalar))))))))))))))
-
-================================================================================
-Various combinations of tags and anchors
-================================================================================
----
-&a1
-!!str
-scalar1
----
-!!str
-&a2
-scalar2
----
-&a3
-!!str scalar3
----
-&a4 !!map
-&a5 !!str key5: value4
----
-a6: 1
-&anchor6 b6: 2
----
-!!map
-&a8 !!str key8: value7
----
-!!map
-!!str &a10 key10: value9
----
-!!str &a11
-value11
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (anchor
-        (anchor_name))
-      (tag)
-      (plain_scalar
-        (string_scalar))))
-  (document
-    (flow_node
-      (tag)
-      (anchor
-        (anchor_name))
-      (plain_scalar
-        (string_scalar))))
-  (document
-    (flow_node
-      (anchor
-        (anchor_name))
-      (tag)
-      (plain_scalar
-        (string_scalar))))
-  (document
-    (block_node
-      (anchor
-        (anchor_name))
-      (tag)
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (anchor
-              (anchor_name))
-            (tag)
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar)))))))
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (integer_scalar)))))))
-  (document
-    (block_node
-      (tag)
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (anchor
-              (anchor_name))
-            (tag)
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar)))))))
-  (document
-    (block_node
-      (tag)
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (tag)
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar)))))))
-  (document
-    (flow_node
-      (tag)
-      (anchor
-        (anchor_name))
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Various empty or newline only quoted strings
-================================================================================
----
-a: '
-  '
-b: '  
-  '
-c: "
-  "
-d: "  
-  "
-e: '
-
-  '
-f: "
-
-  "
-g: '
-
-
-  '
-h: "
-
-
-  "
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (single_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (single_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (single_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (single_quote_scalar)))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))))))
-
-================================================================================
-Various location of anchors in flow sequence
-================================================================================
-&flowseq [
- a: b,
- &c c: d,
- { &e e: f },
- &g { g: h }
-]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (flow_node
-      (anchor
-        (anchor_name))
-      (flow_sequence
-        (flow_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (flow_pair
-          key: (flow_node
-            (anchor
-              (anchor_name))
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (flow_node
-          (flow_mapping
-            (flow_pair
-              key: (flow_node
-                (anchor
-                  (anchor_name))
-                (plain_scalar
-                  (string_scalar)))
-              value: (flow_node
-                (plain_scalar
-                  (string_scalar))))))
-        (flow_node
-          (anchor
-            (anchor_name))
-          (flow_mapping
-            (flow_pair
-              key: (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              value: (flow_node
-                (plain_scalar
-                  (string_scalar))))))))))
-
-================================================================================
-Various Trailing Comments
-================================================================================
-a: "double
-  quotes" # lala
-b: plain
- value  # lala
-c  : #lala
-  d
-? # lala
- - seq1
-: # lala
- - #lala
-  seq2
-e:
- &node # lala
- - x: y
-block: > # lala
-  abcde
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))
-        (comment)
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (comment)
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          (comment)
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          (comment)
-          key: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))))
-          (comment)
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (comment)
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (comment)
-            (block_sequence
-              (block_sequence_item
-                (block_node
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar
-              (comment))))))))
-
-================================================================================
-Various Trailing Comments [1.3]
-================================================================================
-a: "double
-  quotes" # lala
-b: plain
- value  # lala
-c  : #lala
-  d
-? # lala
- - seq1
-: # lala
- - #lala
-  seq2
-e: &node # lala
- - x: y
-block: > # lala
-  abcde
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (double_quote_scalar)))
-        (comment)
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (comment)
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          (comment)
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          (comment)
-          key: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))))
-          (comment)
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (comment)
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (comment)
-            (block_sequence
-              (block_sequence_item
-                (block_node
-                  (block_mapping
-                    (block_mapping_pair
-                      key: (flow_node
-                        (plain_scalar
-                          (string_scalar)))
-                      value: (flow_node
-                        (plain_scalar
-                          (string_scalar))))))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_scalar
-              (comment))))))))
-
-================================================================================
-Various trailing tabs
-================================================================================
-a: b	
-seq:	
- - a	
-c: d	#X
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (comment)))))
-
-================================================================================
-Whitespace After Scalars in Flow
-================================================================================
-- [a, b , c ]
-- { "a"  : b
-   , c : 'd' ,
-   e   : "f"
-  }
-- [      ]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_sequence
-        (block_sequence_item
-          (flow_node
-            (flow_sequence
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar)))
-              (flow_node
-                (plain_scalar
-                  (string_scalar))))))
-        (block_sequence_item
-          (flow_node
-            (flow_mapping
-              (flow_pair
-                key: (flow_node
-                  (double_quote_scalar))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (single_quote_scalar)))
-              (flow_pair
-                key: (flow_node
-                  (plain_scalar
-                    (string_scalar)))
-                value: (flow_node
-                  (double_quote_scalar))))))
-        (block_sequence_item
-          (flow_node
-            (flow_sequence)))))))
-
-================================================================================
-Whitespace around colon in mappings
-================================================================================
-"top1" : 
-  "key1" : &alias1 scalar1
-'top2' : 
-  'key2' : &alias2 scalar2
-top3: &node3 
-  *alias1 : scalar3
-top4: 
-  *alias2 : scalar4
-top5   :    
-  scalar5
-top6: 
-  &anchor6 'key6' : scalar6
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (double_quote_scalar))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (double_quote_scalar))
-                value: (flow_node
-                  (anchor
-                    (anchor_name))
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (single_quote_scalar))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (single_quote_scalar))
-                value: (flow_node
-                  (anchor
-                    (anchor_name))
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (anchor
-              (anchor_name))
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (alias
-                    (alias_name)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (alias
-                    (alias_name)))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar)))
-          value: (block_node
-            (block_mapping
-              (block_mapping_pair
-                key: (flow_node
-                  (anchor
-                    (anchor_name))
-                  (single_quote_scalar))
-                value: (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
-
-================================================================================
-Wrong indendation in Map [INVALID]
-================================================================================
-key:
-  ok: 1
- wrong: 2
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (plain_scalar
-      (string_scalar)))
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (plain_scalar
-        (integer_scalar)))))
-
-================================================================================
-Wrong indendation in mapping [INVALID]
-================================================================================
-k1: v1
- k2: v2
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-Wrong indendation in Sequence [INVALID]
-================================================================================
-key:
-   - ok
-   - also ok
-  - wrong
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (flow_node
-    (plain_scalar
-      (string_scalar)))
-  (block_sequence_item
-    (flow_node
-      (plain_scalar
-        (string_scalar))))
-  (flow_node
-    (plain_scalar
-      (string_scalar))))
-
-================================================================================
-Wrong indented flow sequence [INVALID]
-================================================================================
----
-flow: [a,
-b,
-c]
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (ERROR
-          (flow_node
-            (plain_scalar
-              (string_scalar)))
-          (string_scalar)
-          (string_scalar))))))
-
-================================================================================
-Wrong indented multiline quoted scalar [INVALID]
-================================================================================
----
-quoted: "a
-b
-c"
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (flow_node
-            (plain_scalar
-              (string_scalar))))
-        (ERROR
-          (string_scalar)
-          (string_scalar))))))
-
-================================================================================
-Wrong indented sequence item [INVALID]
-================================================================================
-- key: value
- - item1
-
---------------------------------------------------------------------------------
-
-(ERROR
-  (block_mapping_pair
-    key: (flow_node
-      (plain_scalar
-        (string_scalar)))
-    value: (flow_node
-      (plain_scalar
-        (string_scalar)))))
-
-================================================================================
-YAML directive without document end marker [INVALID]
-================================================================================
----
-key: value
-%YAML 1.2
----
-
---------------------------------------------------------------------------------
-
-(stream
-  (ERROR
-    (block_mapping_pair
-      key: (flow_node
-        (plain_scalar
-          (string_scalar)))
-      value: (flow_node
-        (plain_scalar
-          (string_scalar)))))
-  (document
-    (yaml_directive
-      (yaml_version))))
-
-================================================================================
-Zero indented block scalar
-================================================================================
---- >
-line1
-line2
-line3
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Zero indented block scalar with line that looks like a comment
-================================================================================
---- >
-line1
-# no comment
-line3
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_scalar))))
-
-================================================================================
-Zero-indented sequences in explicit mapping keys
-================================================================================
----
-?
-- a
-- b
-:
-- c
-- d
-
---------------------------------------------------------------------------------
-
-(stream
-  (document
-    (block_node
-      (block_mapping
-        (block_mapping_pair
-          key: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))))
-          value: (block_node
-            (block_sequence
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar))))
-              (block_sequence_item
-                (flow_node
-                  (plain_scalar
-                    (string_scalar)))))))))))
diff --git a/test/highlight/core.yaml b/test/highlight/core.yaml
new file mode 100644
index 0000000..8ec6d05
--- /dev/null
+++ b/test/highlight/core.yaml
@@ -0,0 +1,32 @@
+A null: null
+# <- @property
+#     ^ @punctuation.delimiter
+#       ^^^^ @constant.builtin
+Also a null: # Empty
+#            ^^^^^^^ @comment
+Not a null: ""
+#           ^^ @string
+Booleans: [ true, True, false, FALSE ]
+#         ^ @punctuation.bracket
+#                                    ^ @punctuation.bracket
+#               ^ @punctuation.delimiter
+#           ^^^^ @boolean
+#                 ^^^^ @boolean
+#                       ^^^^^ @boolean
+#                              ^^^^^ @boolean
+Integers: [ 0, 0o7, 0x3A, -19 ]
+#           ^ @number
+#              ^^^ @number
+#                   ^^^^ @number
+#                         ^^^ @number
+Floats: [ 0., -0.0, .5, +12e03, -2E+05 ]
+#         ^^ @number
+#             ^^^^ @number
+#                   ^^ @number
+#                       ^^^^^^ @number
+#                               ^^^^^^ @number
+Also floats: [ .inf, -.Inf, +.INF, .NAN ]
+#              ^^^^ @number
+#                    ^^^^^ @number
+#                           ^^^^^ @number
+#                                  ^^^^ @number
diff --git a/yaml-test-suite b/yaml-test-suite
deleted file mode 160000
index 053b73a..0000000
--- a/yaml-test-suite
+++ /dev/null
@@ -1,1 +0,0 @@
-Subproject commit 053b73a9c12c0cd76da797fdc2ffbd4bb5264c12