From 18a1d183c4c0cc40438bae2ebf8191aaf2dee8dc Mon Sep 17 00:00:00 2001 From: ObserverOfTime Date: Fri, 8 Nov 2024 08:27:15 +0200 Subject: [PATCH] feat: update to tree-sitter 0.24 --- .editorconfig | 44 +- .gitattributes | 39 +- .github/workflows/ci.yml | 14 +- .github/workflows/release.yml | 11 + .gitignore | 40 +- CMakeLists.txt | 58 + Cargo.lock | 96 + Cargo.toml | 27 +- Makefile | 94 + Package.resolved | 16 + Package.swift | 41 + binding.gyp | 30 +- bindings/c/tree-sitter-udev.h | 16 + bindings/c/tree-sitter-udev.pc.in | 10 + bindings/go/binding.go | 15 + bindings/go/binding_test.go | 15 + bindings/node/binding.cc | 35 +- bindings/node/binding_test.js | 9 + bindings/node/index.d.ts | 27 + bindings/node/index.js | 18 +- bindings/python/tests/test_binding.py | 11 + bindings/python/tree_sitter_udev/__init__.py | 37 + bindings/python/tree_sitter_udev/__init__.pyi | 7 + bindings/python/tree_sitter_udev/binding.c | 27 + bindings/python/tree_sitter_udev/py.typed | 0 bindings/rust/build.rs | 15 +- bindings/rust/lib.rs | 25 +- bindings/swift/TreeSitterUdev/udev.h | 16 + .../TreeSitterUdevTests.swift | 12 + go.mod | 7 + go.sum | 36 + grammar.js | 3 + jsconfig.json | 9 - package-lock.json | 370 +- package.json | 61 +- pyproject.toml | 29 + queries/injections.scm | 2 +- setup.py | 64 + src/grammar.json | 1 + src/node-types.json | 1 + src/parser.c | 3394 +++++++++-------- src/tree_sitter/alloc.h | 54 + src/tree_sitter/array.h | 290 ++ src/tree_sitter/parser.h | 52 +- tree-sitter.json | 29 + 45 files changed, 3381 insertions(+), 1826 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 CMakeLists.txt create mode 100644 Cargo.lock create mode 100644 Makefile create mode 100644 Package.resolved create mode 100644 Package.swift create mode 100644 bindings/c/tree-sitter-udev.h create mode 100644 bindings/c/tree-sitter-udev.pc.in create mode 100644 bindings/go/binding.go create mode 100644 bindings/go/binding_test.go create mode 100644 bindings/node/binding_test.js create mode 100644 bindings/node/index.d.ts create mode 100644 bindings/python/tests/test_binding.py create mode 100644 bindings/python/tree_sitter_udev/__init__.py create mode 100644 bindings/python/tree_sitter_udev/__init__.pyi create mode 100644 bindings/python/tree_sitter_udev/binding.c create mode 100644 bindings/python/tree_sitter_udev/py.typed create mode 100644 bindings/swift/TreeSitterUdev/udev.h create mode 100644 bindings/swift/TreeSitterUdevTests/TreeSitterUdevTests.swift create mode 100644 go.mod create mode 100644 go.sum delete mode 100644 jsconfig.json create mode 100644 pyproject.toml create mode 100644 setup.py create mode 100644 src/tree_sitter/alloc.h create mode 100644 src/tree_sitter/array.h create mode 100644 tree-sitter.json diff --git a/.editorconfig b/.editorconfig index f8fe7c7..65330c4 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,11 +2,45 @@ root = true [*] charset = utf-8 -end_of_line = lf + +[*.{json,toml,yml,gyp}] +indent_style = space +indent_size = 2 + +[*.js] +indent_style = space indent_size = 2 + +[*.scm] +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 -insert_final_newline = true -trim_trailing_whitespace = true +indent_size = 4 -[grammar.js] -quote_type = single +[*.go] +indent_style = tab +indent_size = 8 + +[Makefile] +indent_style = tab +indent_size = 8 + +[parser.c] +indent_size = 2 + +[{alloc,array,parser}.h] +indent_size = 2 diff --git a/.gitattributes b/.gitattributes index 4eb6b22..7e2cae0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,6 +1,37 @@ -* text eol=lf +* text=auto eol=lf -src/** linguist-generated -bindings/** linguist-generated -binding.gyp linguist-generated +# Generated source files +src/*.json linguist-generated +src/parser.c linguist-generated +src/tree_sitter/* linguist-generated + +# C bindings +bindings/c/* linguist-generated +CMakeLists.txt linguist-generated +Makefile linguist-generated + +# Rust bindings +bindings/rust/* linguist-generated Cargo.toml linguist-generated +Cargo.lock linguist-generated + +# Node.js bindings +bindings/node/* linguist-generated +binding.gyp linguist-generated +package.json linguist-generated +package-lock.json linguist-generated + +# Python bindings +bindings/python/** linguist-generated +setup.py linguist-generated +pyproject.toml linguist-generated + +# Go bindings +bindings/go/* linguist-generated +go.mod linguist-generated +go.sum linguist-generated + +# Swift bindings +bindings/swift/** linguist-generated +Package.swift linguist-generated +Package.resolved linguist-generated diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4873eff..4185066 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,10 +24,10 @@ jobs: name: Test parser runs-on: ubuntu-latest steps: - - name: Set up repository - uses: tree-sitter/parser-setup-action@v1.1 - with: - node-version: ${{vars.NODE_VERSION}} + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set up tree-sitter + uses: tree-sitter/setup-action/cli@v1 - name: Clone systemd rules uses: actions/checkout@v4 with: @@ -42,9 +42,11 @@ jobs: path: examples/udev-extra-rules repository: openSUSE/udev-extra-rules - name: Run tests - uses: tree-sitter/parser-test-action@v1.2 + uses: tree-sitter/parser-test-action@v2 + - name: Parse sample files + uses: tree-sitter/parse-action@v4 with: - corpus-files: |- + files: |- examples/systemd/rules.d/*.rules examples/systemd/test/fuzz/fuzz-udev-rules/*.rules examples/udev-extra-rules/*.rules diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..6ab621d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,11 @@ +name: Publish package + +on: + push: + tags: ["*"] + +jobs: + release: + uses: tree-sitter/workflows/.github/workflows/release.yml@main + permissions: + contents: write diff --git a/.gitignore b/.gitignore index a3d18fc..308fcab 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,40 @@ -node_modules/ -yarn.lock -Cargo.lock +# Rust artifacts +target/ +# Node artifacts build/ -target/ +prebuilds/ +node_modules/ + +# Swift artifacts +.build/ + +# Go artifacts +_obj/ + +# Python artifacts +.venv/ +dist/ +*.egg-info +*.whl + +# C artifacts +*.a +*.so +*.so.* +*.dylib +*.dll +*.pc + +# Example dirs +/examples/*/ + +# Grammar volatiles *.wasm +*.obj *.o + +# Archives +*.tar.gz +*.tgz +*.zip diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..608dfb7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,58 @@ +cmake_minimum_required(VERSION 3.13) + +project(tree-sitter-udev + VERSION "0.3.0" + DESCRIPTION "udev rules grammar for tree-sitter" + HOMEPAGE_URL "https://github.com/tree-sitter-grammars/tree-sitter-udev" + LANGUAGES C) + +option(BUILD_SHARED_LIBS "Build using shared libraries" ON) +option(TREE_SITTER_REUSE_ALLOCATOR "Reuse the library allocator" OFF) + +set(TREE_SITTER_ABI_VERSION 15 CACHE STRING "Tree-sitter ABI version") +if(NOT ${TREE_SITTER_ABI_VERSION} MATCHES "^[0-9]+$") + unset(TREE_SITTER_ABI_VERSION CACHE) + message(FATAL_ERROR "TREE_SITTER_ABI_VERSION must be an integer") +endif() + +find_program(TREE_SITTER_CLI tree-sitter DOC "Tree-sitter CLI") + +add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/parser.c" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/grammar.json" + COMMAND "${TREE_SITTER_CLI}" generate src/grammar.json + --abi=${TREE_SITTER_ABI_VERSION} + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "Generating parser.c") + +add_library(tree-sitter-udev src/parser.c) +if(EXISTS src/scanner.c) + target_sources(tree-sitter-udev PRIVATE src/scanner.c) +endif() +target_include_directories(tree-sitter-udev PRIVATE src) + +target_compile_definitions(tree-sitter-udev PRIVATE + $<$:TREE_SITTER_REUSE_ALLOCATOR> + $<$:TREE_SITTER_DEBUG>) + +set_target_properties(tree-sitter-udev + PROPERTIES + C_STANDARD 11 + POSITION_INDEPENDENT_CODE ON + SOVERSION "${TREE_SITTER_ABI_VERSION}.${PROJECT_VERSION_MAJOR}" + DEFINE_SYMBOL "") + +configure_file(bindings/c/tree-sitter-udev.pc.in + "${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-udev.pc" @ONLY) + +include(GNUInstallDirs) + +install(FILES bindings/c/tree-sitter-udev.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/tree_sitter") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-udev.pc" + DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig") +install(TARGETS tree-sitter-udev + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + +add_custom_target(ts-test "${TREE_SITTER_CLI}" test + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "tree-sitter test") diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..c48e007 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,96 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "cc" +version = "1.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baee610e9452a8f6f0a1b6194ec09ff9e2d85dea54432acdae41aa0761c95d70" +dependencies = [ + "shlex", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" + +[[package]] +name = "tree-sitter" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9871f16d6cf5c4757dcf30d5d2172a2df6987c510c017bbb7abfb7f9aa24d06" +dependencies = [ + "cc", + "regex", + "regex-syntax", + "streaming-iterator", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-language" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8ddffe35a0e5eeeadf13ff7350af564c6e73993a24db62caee1822b185c2600" + +[[package]] +name = "tree-sitter-udev" +version = "0.3.0" +dependencies = [ + "cc", + "tree-sitter", + "tree-sitter-language", +] diff --git a/Cargo.toml b/Cargo.toml index 3e5165e..f7e86bc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,26 +1,27 @@ [package] name = "tree-sitter-udev" -description = "udev grammar for the tree-sitter parsing library" -version = "0.2.1" -keywords = ["incremental", "parsing", "udev"] -categories = ["parsing", "text-editors"] +description = "udev rules grammar for tree-sitter" +version = "0.3.0" +authors = ["ObserverOfTime "] +license = "MIT" +readme = "README.md" +keywords = ["incremental", "parsing", "tree-sitter", "udev"] +categories = ["parser-implementations", "parsing", "text-editors"] repository = "https://github.com/tree-sitter-grammars/tree-sitter-udev" edition = "2021" -license = "MIT" +autoexamples = false build = "bindings/rust/build.rs" -include = [ - "bindings/rust/*", - "grammar.js", - "queries/*", - "src/*", -] +include = ["bindings/rust/*", "grammar.js", "queries/*", "src/*"] [lib] path = "bindings/rust/lib.rs" [dependencies] -tree-sitter = "~0.20.10" +tree-sitter-language = "0.1" [build-dependencies] -cc = "^1.0" +cc = "1.1.22" + +[dev-dependencies] +tree-sitter = "0.24.3" diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b99e1fd --- /dev/null +++ b/Makefile @@ -0,0 +1,94 @@ +ifeq ($(OS),Windows_NT) +$(error Windows is not supported) +endif + +LANGUAGE_NAME := tree-sitter-udev +HOMEPAGE_URL := https://github.com/tree-sitter-grammars/tree-sitter-udev +VERSION := 0.3.0 + +# repository +SRC_DIR := src + +TS ?= tree-sitter + +# install directory layout +PREFIX ?= /usr/local +INCLUDEDIR ?= $(PREFIX)/include +LIBDIR ?= $(PREFIX)/lib +PCLIBDIR ?= $(LIBDIR)/pkgconfig + +# source/object files +PARSER := $(SRC_DIR)/parser.c +EXTRAS := $(filter-out $(PARSER),$(wildcard $(SRC_DIR)/*.c)) +OBJS := $(patsubst %.c,%.o,$(PARSER) $(EXTRAS)) + +# flags +ARFLAGS ?= rcs +override CFLAGS += -I$(SRC_DIR) -std=c11 -fPIC + +# ABI versioning +SONAME_MAJOR = $(shell sed -n 's/\#define LANGUAGE_VERSION //p' $(PARSER)) +SONAME_MINOR = $(word 1,$(subst ., ,$(VERSION))) + +# OS-specific bits +ifeq ($(shell uname),Darwin) + SOEXT = dylib + SOEXTVER_MAJOR = $(SONAME_MAJOR).$(SOEXT) + SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).$(SOEXT) + LINKSHARED = -dynamiclib -Wl,-install_name,$(LIBDIR)/lib$(LANGUAGE_NAME).$(SOEXTVER),-rpath,@executable_path/../Frameworks +else + SOEXT = so + SOEXTVER_MAJOR = $(SOEXT).$(SONAME_MAJOR) + SOEXTVER = $(SOEXT).$(SONAME_MAJOR).$(SONAME_MINOR) + LINKSHARED = -shared -Wl,-soname,lib$(LANGUAGE_NAME).$(SOEXTVER) +endif +ifneq ($(filter $(shell uname),FreeBSD NetBSD DragonFly),) + PCLIBDIR := $(PREFIX)/libdata/pkgconfig +endif + +all: lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) $(LANGUAGE_NAME).pc + +lib$(LANGUAGE_NAME).a: $(OBJS) + $(AR) $(ARFLAGS) $@ $^ + +lib$(LANGUAGE_NAME).$(SOEXT): $(OBJS) + $(CC) $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@ +ifneq ($(STRIP),) + $(STRIP) $@ +endif + +$(LANGUAGE_NAME).pc: bindings/c/$(LANGUAGE_NAME).pc.in + sed -e 's|@PROJECT_VERSION@|$(VERSION)|' \ + -e 's|@CMAKE_INSTALL_LIBDIR@|$(LIBDIR:$(PREFIX)/%=%)|' \ + -e 's|@CMAKE_INSTALL_INCLUDEDIR@|$(INCLUDEDIR:$(PREFIX)/%=%)|' \ + -e 's|@PROJECT_DESCRIPTION@|$(DESCRIPTION)|' \ + -e 's|@PROJECT_HOMEPAGE_URL@|$(HOMEPAGE_URL)|' \ + -e 's|@CMAKE_INSTALL_PREFIX@|$(PREFIX)|' $< > $@ + +$(PARSER): $(SRC_DIR)/grammar.json + $(TS) generate $^ + +install: all + install -d '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter '$(DESTDIR)$(PCLIBDIR)' '$(DESTDIR)$(LIBDIR)' + install -m644 bindings/c/$(LANGUAGE_NAME).h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h + install -m644 $(LANGUAGE_NAME).pc '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc + install -m644 lib$(LANGUAGE_NAME).a '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a + install -m755 lib$(LANGUAGE_NAME).$(SOEXT) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) + ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) + ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) + +uninstall: + $(RM) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a \ + '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) \ + '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) \ + '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) \ + '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h \ + '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc + +clean: + $(RM) $(OBJS) $(LANGUAGE_NAME).pc lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) + +test: + $(TS) test + +.PHONY: all install uninstall clean test diff --git a/Package.resolved b/Package.resolved new file mode 100644 index 0000000..9e0a023 --- /dev/null +++ b/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "SwiftTreeSitter", + "repositoryURL": "https://github.com/ChimeHQ/SwiftTreeSitter", + "state": { + "branch": null, + "revision": "2599e95310b3159641469d8a21baf2d3d200e61f", + "version": "0.8.0" + } + } + ] + }, + "version": 1 +} diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..777011b --- /dev/null +++ b/Package.swift @@ -0,0 +1,41 @@ +// swift-tools-version:5.3 + +import Foundation +import PackageDescription + +var sources = ["src/parser.c"] +if FileManager.default.fileExists(atPath: "src/scanner.c") { + sources.append("src/scanner.c") +} + +let package = Package( + name: "TreeSitterUdev", + products: [ + .library(name: "TreeSitterUdev", targets: ["TreeSitterUdev"]), + ], + dependencies: [ + .package(url: "https://github.com/ChimeHQ/SwiftTreeSitter", from: "0.8.0"), + ], + targets: [ + .target( + name: "TreeSitterUdev", + dependencies: [], + path: ".", + sources: sources, + resources: [ + .copy("queries") + ], + publicHeadersPath: "bindings/swift", + cSettings: [.headerSearchPath("src")] + ), + .testTarget( + name: "TreeSitterUdevTests", + dependencies: [ + "SwiftTreeSitter", + "TreeSitterUdev", + ], + path: "bindings/swift/TreeSitterUdevTests" + ) + ], + cLanguageStandard: .c11 +) diff --git a/binding.gyp b/binding.gyp index 7a13d58..1971fdc 100644 --- a/binding.gyp +++ b/binding.gyp @@ -2,20 +2,34 @@ "targets": [ { "target_name": "tree_sitter_udev_binding", + "dependencies": [ + " -#include "nan.h" +#include -using namespace v8; +typedef struct TSLanguage TSLanguage; -extern "C" TSLanguage * tree_sitter_udev(); +extern "C" TSLanguage *tree_sitter_udev(); -namespace { +// "tree-sitter", "language" hashed with BLAKE2 +const napi_type_tag LANGUAGE_TYPE_TAG = { + 0x8AF2E5212AD58ABF, 0xD5006CAD83ABBA16 +}; -NAN_METHOD(New) {} - -void Init(Local exports, Local module) { - Local tpl = Nan::New(New); - tpl->SetClassName(Nan::New("Language").ToLocalChecked()); - tpl->InstanceTemplate()->SetInternalFieldCount(1); - - Local constructor = Nan::GetFunction(tpl).ToLocalChecked(); - Local instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked(); - Nan::SetInternalFieldPointer(instance, 0, tree_sitter_udev()); - - Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("udev").ToLocalChecked()); - Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance); +Napi::Object Init(Napi::Env env, Napi::Object exports) { + auto language = Napi::External::New(env, tree_sitter_udev()); + language.TypeTag(&LANGUAGE_TYPE_TAG); + exports["language"] = language; + return exports; } -NODE_MODULE(tree_sitter_udev_binding, Init) - -} // namespace +NODE_API_MODULE(tree_sitter_udev_binding, Init) diff --git a/bindings/node/binding_test.js b/bindings/node/binding_test.js new file mode 100644 index 0000000..55becac --- /dev/null +++ b/bindings/node/binding_test.js @@ -0,0 +1,9 @@ +const assert = require("node:assert"); +const { test } = require("node:test"); + +const Parser = require("tree-sitter"); + +test("can load grammar", () => { + const parser = new Parser(); + assert.doesNotThrow(() => parser.setLanguage(require("."))); +}); diff --git a/bindings/node/index.d.ts b/bindings/node/index.d.ts new file mode 100644 index 0000000..528e060 --- /dev/null +++ b/bindings/node/index.d.ts @@ -0,0 +1,27 @@ +type BaseNode = { + type: string; + named: boolean; +}; + +type ChildNode = { + multiple: boolean; + required: boolean; + types: BaseNode[]; +}; + +type NodeInfo = + | (BaseNode & { + subtypes: BaseNode[]; + }) + | (BaseNode & { + fields: { [name: string]: ChildNode }; + children: ChildNode[]; + }); + +type Language = { + language: unknown; + nodeTypeInfo: NodeInfo[]; +}; + +declare const language: Language; +export = language; diff --git a/bindings/node/index.js b/bindings/node/index.js index 93669d2..6657bcf 100644 --- a/bindings/node/index.js +++ b/bindings/node/index.js @@ -1,18 +1,6 @@ -try { - module.exports = require("../../build/Release/tree_sitter_udev_binding"); -} catch (error1) { - if (error1.code !== 'MODULE_NOT_FOUND') { - throw error1; - } - try { - module.exports = require("../../build/Debug/tree_sitter_udev_binding"); - } catch (error2) { - if (error2.code !== 'MODULE_NOT_FOUND') { - throw error2; - } - throw error1 - } -} +const root = require("path").join(__dirname, "..", ".."); + +module.exports = require("node-gyp-build")(root); try { module.exports.nodeTypeInfo = require("../../src/node-types.json"); diff --git a/bindings/python/tests/test_binding.py b/bindings/python/tests/test_binding.py new file mode 100644 index 0000000..87cacba --- /dev/null +++ b/bindings/python/tests/test_binding.py @@ -0,0 +1,11 @@ +from unittest import TestCase + +import tree_sitter, tree_sitter_udev + + +class TestLanguage(TestCase): + def test_can_load_grammar(self): + try: + tree_sitter.Language(tree_sitter_udev.language()) + except Exception: + self.fail("Error loading udev grammar") diff --git a/bindings/python/tree_sitter_udev/__init__.py b/bindings/python/tree_sitter_udev/__init__.py new file mode 100644 index 0000000..98de8a1 --- /dev/null +++ b/bindings/python/tree_sitter_udev/__init__.py @@ -0,0 +1,37 @@ +"""udev rules grammar for tree-sitter""" + +from importlib.resources import files as _files + +from ._binding import language + + +def _get_query(name, file): + query = _files(f"{__package__}.queries") / file + globals()[name] = query.read_text() + return globals()[name] + + +def __getattr__(name): + if name == "HIGHLIGHTS_QUERY": + return _get_query("HIGHLIGHTS_QUERY", "highlights.scm") + if name == "INJECTIONS_QUERY": + return _get_query("INJECTIONS_QUERY", "injections.scm") + if name == "TAGS_QUERY": + return _get_query("TAGS_QUERY", "tags.scm") + + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + +__all__ = [ + "language", + "HIGHLIGHTS_QUERY", + "INJECTIONS_QUERY", + "TAGS_QUERY", +] + + +def __dir__(): + return sorted(__all__ + [ + "__all__", "__builtins__", "__cached__", "__doc__", "__file__", + "__loader__", "__name__", "__package__", "__path__", "__spec__", + ]) diff --git a/bindings/python/tree_sitter_udev/__init__.pyi b/bindings/python/tree_sitter_udev/__init__.pyi new file mode 100644 index 0000000..043c23f --- /dev/null +++ b/bindings/python/tree_sitter_udev/__init__.pyi @@ -0,0 +1,7 @@ +from typing import Final + +HIGHLIGHTS_QUERY: Final[str] +INJECTIONS_QUERY: Final[str] +TAGS_QUERY: Final[str] + +def language() -> object: ... diff --git a/bindings/python/tree_sitter_udev/binding.c b/bindings/python/tree_sitter_udev/binding.c new file mode 100644 index 0000000..03cbad0 --- /dev/null +++ b/bindings/python/tree_sitter_udev/binding.c @@ -0,0 +1,27 @@ +#include + +typedef struct TSLanguage TSLanguage; + +TSLanguage *tree_sitter_udev(void); + +static PyObject* _binding_language(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(args)) { + return PyCapsule_New(tree_sitter_udev(), "tree_sitter.Language", NULL); +} + +static PyMethodDef methods[] = { + {"language", _binding_language, METH_NOARGS, + "Get the tree-sitter language for this grammar."}, + {NULL, NULL, 0, NULL} +}; + +static struct PyModuleDef module = { + .m_base = PyModuleDef_HEAD_INIT, + .m_name = "_binding", + .m_doc = NULL, + .m_size = -1, + .m_methods = methods +}; + +PyMODINIT_FUNC PyInit__binding(void) { + return PyModule_Create(&module); +} diff --git a/bindings/python/tree_sitter_udev/py.typed b/bindings/python/tree_sitter_udev/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs index 1f36798..743fbc5 100644 --- a/bindings/rust/build.rs +++ b/bindings/rust/build.rs @@ -2,11 +2,20 @@ fn main() { let src_dir = std::path::Path::new("src"); let mut c_config = cc::Build::new(); - c_config.include(src_dir); + c_config.std("c11").include(src_dir); + + #[cfg(target_env = "msvc")] + c_config.flag("-utf-8"); let parser_path = src_dir.join("parser.c"); c_config.file(&parser_path); - - c_config.compile("parser"); println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap()); + + let scanner_path = src_dir.join("scanner.c"); + if scanner_path.exists() { + c_config.file(&scanner_path); + println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap()); + } + + c_config.compile("tree-sitter-udev"); } diff --git a/bindings/rust/lib.rs b/bindings/rust/lib.rs index 5c3d487..75dc057 100644 --- a/bindings/rust/lib.rs +++ b/bindings/rust/lib.rs @@ -1,6 +1,6 @@ //! This crate provides udev language support for the [tree-sitter][] parsing library. //! -//! Typically, you will use the [language][language func] function to add this language to a +//! Typically, you will use the [LANGUAGE][] constant to add this language to a //! tree-sitter [Parser][], and then use the parser to parse some code: //! //! ``` @@ -11,28 +11,27 @@ //! KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/scheduler}="none" //! "#; //! let mut parser = tree_sitter::Parser::new(); -//! parser.set_language(tree_sitter_udev::language()).expect("Error loading udev grammar"); +//! let language = tree_sitter_udev::LANGUAGE; +//! parser +//! .set_language(&language.into()) +//! .expect("Error loading udev parser"); //! 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; +use tree_sitter_language::LanguageFn; extern "C" { - fn tree_sitter_udev() -> Language; + fn tree_sitter_udev() -> *const (); } -/// Get the tree-sitter [Language][] for this grammar. +/// The tree-sitter [`LanguageFn`][LanguageFn] for this grammar. /// -/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html -pub fn language() -> Language { - unsafe { tree_sitter_udev() } -} +/// [LanguageFn]: https://docs.rs/tree-sitter-language/*/tree_sitter_language/struct.LanguageFn.html +pub const LANGUAGE: LanguageFn = unsafe { LanguageFn::from_raw(tree_sitter_udev) }; /// The content of the [`node-types.json`][] file for this grammar. /// @@ -54,7 +53,7 @@ mod tests { fn test_can_load_grammar() { let mut parser = tree_sitter::Parser::new(); parser - .set_language(super::language()) - .expect("Error loading udev language"); + .set_language(&super::LANGUAGE.into()) + .expect("Error loading udev parser"); } } diff --git a/bindings/swift/TreeSitterUdev/udev.h b/bindings/swift/TreeSitterUdev/udev.h new file mode 100644 index 0000000..c846af9 --- /dev/null +++ b/bindings/swift/TreeSitterUdev/udev.h @@ -0,0 +1,16 @@ +#ifndef TREE_SITTER_UDEV_H_ +#define TREE_SITTER_UDEV_H_ + +typedef struct TSLanguage TSLanguage; + +#ifdef __cplusplus +extern "C" { +#endif + +const TSLanguage *tree_sitter_udev(void); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_UDEV_H_ diff --git a/bindings/swift/TreeSitterUdevTests/TreeSitterUdevTests.swift b/bindings/swift/TreeSitterUdevTests/TreeSitterUdevTests.swift new file mode 100644 index 0000000..5ae2ef6 --- /dev/null +++ b/bindings/swift/TreeSitterUdevTests/TreeSitterUdevTests.swift @@ -0,0 +1,12 @@ +import XCTest +import SwiftTreeSitter +import TreeSitterUdev + +final class TreeSitterUdevTests: XCTestCase { + func testCanLoadGrammar() throws { + let parser = Parser() + let language = Language(language: tree_sitter_udev()) + XCTAssertNoThrow(try parser.setLanguage(language), + "Error loading udev grammar") + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..d515939 --- /dev/null +++ b/go.mod @@ -0,0 +1,7 @@ +module github.com/tree-sitter-grammars/tree-sitter-udev + +go 1.22 + +require github.com/tree-sitter/go-tree-sitter v0.24.0 + +require github.com/mattn/go-pointer v0.0.1 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..0a48bbe --- /dev/null +++ b/go.sum @@ -0,0 +1,36 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= +github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tree-sitter/go-tree-sitter v0.24.0 h1:kRZb6aBNfcI/u0Qh8XEt3zjNVnmxTisDBN+kXK0xRYQ= +github.com/tree-sitter/go-tree-sitter v0.24.0/go.mod h1:x681iFVoLMEwOSIHA1chaLkXlroXEN7WY+VHGFaoDbk= +github.com/tree-sitter/tree-sitter-c v0.21.5-0.20240818205408-927da1f210eb h1:A8425heRM8mylnv4H58FPUiH+aYivyitre0PzxrfmWs= +github.com/tree-sitter/tree-sitter-c v0.21.5-0.20240818205408-927da1f210eb/go.mod h1:dOF6gtQiF9UwNh995T5OphYmtIypkjsp3ap7r9AN/iA= +github.com/tree-sitter/tree-sitter-cpp v0.22.4-0.20240818224355-b1a4e2b25148 h1:AfFPZwtwGN01BW1jDdqBVqscTwetvMpydqYZz57RSlc= +github.com/tree-sitter/tree-sitter-cpp v0.22.4-0.20240818224355-b1a4e2b25148/go.mod h1:Bh6U3viD57rFXRYIQ+kmiYtr+1Bx0AceypDLJJSyi9s= +github.com/tree-sitter/tree-sitter-embedded-template v0.21.1-0.20240819044651-ffbf64942c33 h1:TwqSV3qLp3tKSqirGLRHnjFk9Tc2oy57LIl+FQ4GjI4= +github.com/tree-sitter/tree-sitter-embedded-template v0.21.1-0.20240819044651-ffbf64942c33/go.mod h1:CvCKCt3v04Ufos1zZnNCelBDeCGRpPucaN8QczoUsN4= +github.com/tree-sitter/tree-sitter-go v0.21.3-0.20240818010209-8c0f0e7a6012 h1:Xvxck3tE5FW7F7bTS97iNM2ADMyCMJztVqn5HYKdJGo= +github.com/tree-sitter/tree-sitter-go v0.21.3-0.20240818010209-8c0f0e7a6012/go.mod h1:T40D0O1cPvUU/+AmiXVXy1cncYQT6wem4Z0g4SfAYvY= +github.com/tree-sitter/tree-sitter-html v0.20.5-0.20240818004741-d11201a263d0 h1:c46K6uh5Dz00zJeU9BfjXdb8I+E4RkUdfnWJpQADXFo= +github.com/tree-sitter/tree-sitter-html v0.20.5-0.20240818004741-d11201a263d0/go.mod h1:hcNt/kOJHcIcuMvouE7LJcYdeFUFbVpBJ6d4wmOA+tU= +github.com/tree-sitter/tree-sitter-java v0.21.1-0.20240824015150-576d8097e495 h1:jrt4qbJVEFs4H93/ITxygHc6u0TGqAkkate7TQ4wFSA= +github.com/tree-sitter/tree-sitter-java v0.21.1-0.20240824015150-576d8097e495/go.mod h1:oyaR7fLnRV0hT9z6qwE9GkaeTom/hTDwK3H2idcOJFc= +github.com/tree-sitter/tree-sitter-javascript v0.21.5-0.20240818005344-15887341e5b5 h1:om4X9AVg3asL8gxNJDcz4e/Wp+VpQj1PY3uJXKr6EOg= +github.com/tree-sitter/tree-sitter-javascript v0.21.5-0.20240818005344-15887341e5b5/go.mod h1:nNqgPoV/h9uYWk6kYEFdEAhNVOacpfpRW5SFmdaP4tU= +github.com/tree-sitter/tree-sitter-json v0.21.1-0.20240818005659-bdd69eb8c8a5 h1:pfV3G3k7NCKqKk8THBmyuh2zA33lgYHS3GVrzRR8ry4= +github.com/tree-sitter/tree-sitter-json v0.21.1-0.20240818005659-bdd69eb8c8a5/go.mod h1:GbMKRjLfk0H+PI7nLi1Sx5lHf5wCpLz9al8tQYSxpEk= +github.com/tree-sitter/tree-sitter-php v0.22.9-0.20240819002312-a552625b56c1 h1:ZXZMDwE+IhUtGug4Brv6NjJWUU3rfkZBKpemf6RY8/g= +github.com/tree-sitter/tree-sitter-php v0.22.9-0.20240819002312-a552625b56c1/go.mod h1:UKCLuYnJ312Mei+3cyTmGOHzn0YAnaPRECgJmHtzrqs= +github.com/tree-sitter/tree-sitter-python v0.21.1-0.20240818005537-55a9b8a4fbfb h1:EXEM82lFM7JjJb6qiKZXkpIDaCcbV2obNn82ghwj9lw= +github.com/tree-sitter/tree-sitter-python v0.21.1-0.20240818005537-55a9b8a4fbfb/go.mod h1:lXCF1nGG5Dr4J3BTS0ObN4xJCCICiSu/b+Xe/VqMV7g= +github.com/tree-sitter/tree-sitter-ruby v0.21.1-0.20240818211811-7dbc1e2d0e2d h1:fcYCvoXdcP1uRQYXqJHRy6Hec+uKScQdKVtMwK9JeCI= +github.com/tree-sitter/tree-sitter-ruby v0.21.1-0.20240818211811-7dbc1e2d0e2d/go.mod h1:T1nShQ4v5AJtozZ8YyAS4uzUtDAJj/iv4YfwXSbUHzg= +github.com/tree-sitter/tree-sitter-rust v0.21.3-0.20240818005432-2b43eafe6447 h1:o9alBu1J/WjrcTKEthYtXmdkDc5OVXD+PqlvnEZ0Lzc= +github.com/tree-sitter/tree-sitter-rust v0.21.3-0.20240818005432-2b43eafe6447/go.mod h1:1Oh95COkkTn6Ezp0vcMbvfhRP5gLeqqljR0BYnBzWvc= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/grammar.js b/grammar.js index 70cf018..ddeeebf 100644 --- a/grammar.js +++ b/grammar.js @@ -4,6 +4,9 @@ * @license MIT */ +/// +// @ts-check + const O = optional, I = token.immediate; /** @param {string} name */ diff --git a/jsconfig.json b/jsconfig.json deleted file mode 100644 index baff603..0000000 --- a/jsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "files": ["grammar.js"], - "exclude": ["node_modules"], - "compilerOptions": { - "checkJs": true, - "module": "Node16", - "types": ["tree-sitter-cli/dsl"] - } -} diff --git a/package-lock.json b/package-lock.json index 599ca9f..5b2924a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,33 +1,385 @@ { "name": "tree-sitter-udev", - "version": "0.2.1", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tree-sitter-udev", - "version": "0.2.1", + "version": "0.3.0", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "nan": "^2.18.0" + "node-addon-api": "^8.2.1", + "node-gyp-build": "^4.8.2" }, "devDependencies": { - "tree-sitter-cli": "~0.21.0" + "prebuildify": "^6.0.1", + "tree-sitter-cli": "^0.24.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ObserverOfTime" + }, + "peerDependencies": { + "tree-sitter": "^0.21.1" + }, + "peerDependenciesMeta": { + "tree-sitter": { + "optional": false + } + } + }, + "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" + } + ], + "license": "MIT" + }, + "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, + "license": "MIT", + "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" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/nan": { - "version": "2.18.0", + "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, + "license": "ISC" + }, + "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, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "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, "license": "MIT" }, + "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" + } + ], + "license": "BSD-3-Clause" + }, + "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, + "license": "ISC" + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/node-abi": { + "version": "3.71.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz", + "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.2.1.tgz", + "integrity": "sha512-vmEOvxwiH8tlOcv4SyE8RH34rI5/nWVaigUeAUPawC6f0+HoDthwI0vkMu4tbtsZrXq6QXFfrkhjofzKEs5tpA==", + "license": "MIT", + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "ISC", + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/prebuildify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/prebuildify/-/prebuildify-6.0.1.tgz", + "integrity": "sha512-8Y2oOOateom/s8dNBsGIcnm6AxPmLH4/nanQzL5lQMU+sC0CMhzARZHizwr36pUPLdvBnOkCNQzxg4djuFSgIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "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.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "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" + } + ], + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "node-addon-api": "^8.0.0", + "node-gyp-build": "^4.8.0" + } + }, "node_modules/tree-sitter-cli": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.21.0.tgz", - "integrity": "sha512-wA7wT5724fNQW82XDH6zT6ZcYonjrAKLCHHuhLsPcAKULrhp3rNuMvlgBdB5FUBvmjHNhtTZF/qpHenMoRJPBw==", + "version": "0.24.3", + "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.24.3.tgz", + "integrity": "sha512-5vS0SiJf31tMTn9CYLsu5l18qXaw5MLFka3cuGxOB5f4TtgoUSK1Sog6rKmqBc7PvFJq37YcQBjj9giNy2cJPw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "tree-sitter": "cli.js" + }, + "engines": { + "node": ">=12.0.0" } + }, + "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, + "license": "MIT" + }, + "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, + "license": "ISC" } } } diff --git a/package.json b/package.json index 022b5e9..247d084 100644 --- a/package.json +++ b/package.json @@ -1,39 +1,54 @@ { "name": "tree-sitter-udev", - "version": "0.2.1", + "version": "0.3.0", + "description": "udev rules grammar for tree-sitter", + "repository": "https://github.com/tree-sitter-grammars/tree-sitter-udev", "license": "MIT", - "description": "udev grammar for tree-sitter", - "repository": "tree-sitter-grammars/tree-sitter-udev", "author": { "name": "ObserverOfTime", - "email": "chronobserver@disroot.org", - "url": "https://observeroftime.github.io/" + "email": "chronobserver@disroot.org" }, + "funding": { + "url": "https://github.com/sponsors/ObserverOfTime", + "type": "github" + }, + "main": "bindings/node", + "types": "bindings/node", "keywords": [ + "incremental", + "parsing", "tree-sitter", - "parser", - "lexer", "udev" ], - "scripts": { - "build": "tree-sitter generate --no-bindings", - "parse": "tree-sitter parse", - "test": "tree-sitter test" - }, - "main": "bindings/node", + "files": [ + "grammar.js", + "binding.gyp", + "prebuilds/**", + "bindings/node/*", + "queries/*", + "src/**", + "*.wasm" + ], "dependencies": { - "nan": "^2.18.0" + "node-addon-api": "^8.2.1", + "node-gyp-build": "^4.8.2" }, "devDependencies": { - "tree-sitter-cli": "~0.21.0" + "prebuildify": "^6.0.1", + "tree-sitter-cli": "^0.24.3" + }, + "peerDependencies": { + "tree-sitter": "^0.21.1" }, - "tree-sitter": [ - { - "scope": "text.udev", - "highlights": "queries/highlights.scm", - "injections": "queries/injections.scm", - "tags": "queries/tags.scm", - "file-types": ["rules"] + "peerDependenciesMeta": { + "tree-sitter": { + "optional": true } - ] + }, + "scripts": { + "install": "node-gyp-build", + "prestart": "tree-sitter build --wasm", + "start": "tree-sitter playground", + "test": "node --test bindings/node/*_test.js" + } } diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..6e417c7 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,29 @@ +[build-system] +requires = ["setuptools>=42", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "tree-sitter-udev" +description = "udev rules grammar for tree-sitter" +version = "0.3.0" +keywords = ["incremental", "parsing", "tree-sitter", "udev"] +classifiers = [ + "Intended Audience :: Developers", + "Topic :: Software Development :: Compilers", + "Topic :: Text Processing :: Linguistic", + "Typing :: Typed", +] +authors = [{ name = "ObserverOfTime", email = "chronobserver@disroot.org" }] +requires-python = ">=3.9" +license.text = "MIT" +readme = "README.md" + +[project.urls] +Homepage = "https://github.com/tree-sitter-grammars/tree-sitter-udev" + +[project.optional-dependencies] +core = ["tree-sitter~=0.22"] + +[tool.cibuildwheel] +build = "cp39-*" +build-frontend = "build" diff --git a/queries/injections.scm b/queries/injections.scm index 2920c5a..5cdfffa 100644 --- a/queries/injections.scm +++ b/queries/injections.scm @@ -1,5 +1,5 @@ ((match - key: "PROGRAM" + key: [ "PROGRAM" "RUN" ] (value (content) @injection.content)) (#set! injection.language "bash")) diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..4f780b3 --- /dev/null +++ b/setup.py @@ -0,0 +1,64 @@ +from os import path +from platform import system + +from setuptools import Extension, find_packages, setup +from setuptools.command.build import build +from wheel.bdist_wheel import bdist_wheel + +sources = [ + "bindings/python/tree_sitter_udev/binding.c", + "src/parser.c", +] +if path.exists("src/scanner.c"): + sources.extend("src/scanner.c") + +if system() != "Windows": + cflags = ["-std=c11", "-fvisibility=hidden"] +else: + cflags = ["/std:c11", "/utf-8"] + + +class Build(build): + def run(self): + if path.isdir("queries"): + dest = path.join(self.build_lib, "tree_sitter_udev", "queries") + self.copy_tree("queries", dest) + super().run() + + +class BdistWheel(bdist_wheel): + def get_tag(self): + python, abi, platform = super().get_tag() + if python.startswith("cp"): + python, abi = "cp39", "abi3" + return python, abi, platform + + +setup( + packages=find_packages("bindings/python"), + package_dir={"": "bindings/python"}, + package_data={ + "tree_sitter_udev": ["*.pyi", "py.typed"], + "tree_sitter_udev.queries": ["*.scm"], + }, + ext_package="tree_sitter_udev", + ext_modules=[ + Extension( + name="_binding", + sources=sources, + extra_compile_args=cflags, + define_macros=[ + ("Py_LIMITED_API", "0x03090000"), + ("PY_SSIZE_T_CLEAN", None), + ("TREE_SITTER_HIDE_SYMBOLS", None), + ], + include_dirs=["src"], + py_limited_api=True, + ) + ], + cmdclass={ + "build": Build, + "bdist_wheel": BdistWheel + }, + zip_safe=False +) diff --git a/src/grammar.json b/src/grammar.json index 9019d36..892e486 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -1,4 +1,5 @@ { + "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json", "name": "udev", "rules": { "rules": { diff --git a/src/node-types.json b/src/node-types.json index 2e3eb00..641c8f6 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -354,6 +354,7 @@ { "type": "rules", "named": true, + "root": true, "fields": {}, "children": { "multiple": true, diff --git a/src/parser.c b/src/parser.c index 62fe451..1ee9900 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1,7 +1,6 @@ #include "tree_sitter/parser.h" #if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wmissing-field-initializers" #endif @@ -903,14 +902,14 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [18] = 18, [19] = 6, [20] = 5, - [21] = 9, - [22] = 10, - [23] = 11, - [24] = 13, - [25] = 17, - [26] = 8, - [27] = 16, - [28] = 28, + [21] = 21, + [22] = 12, + [23] = 14, + [24] = 15, + [25] = 16, + [26] = 18, + [27] = 17, + [28] = 11, [29] = 29, [30] = 30, [31] = 31, @@ -924,24 +923,24 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [39] = 39, [40] = 40, [41] = 41, - [42] = 37, - [43] = 37, - [44] = 41, - [45] = 6, - [46] = 8, - [47] = 9, - [48] = 16, - [49] = 10, + [42] = 36, + [43] = 38, + [44] = 36, + [45] = 5, + [46] = 17, + [47] = 16, + [48] = 18, + [49] = 15, [50] = 50, [51] = 51, [52] = 52, - [53] = 16, + [53] = 13, [54] = 54, - [55] = 15, + [55] = 18, [56] = 56, [57] = 57, [58] = 58, - [59] = 16, + [59] = 18, [60] = 60, [61] = 61, [62] = 62, @@ -961,17 +960,17 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [76] = 76, [77] = 77, [78] = 78, - [79] = 75, + [79] = 79, [80] = 80, [81] = 81, - [82] = 80, + [82] = 82, [83] = 83, - [84] = 75, + [84] = 84, [85] = 85, [86] = 86, [87] = 87, [88] = 88, - [89] = 89, + [89] = 75, [90] = 90, [91] = 91, [92] = 92, @@ -979,16 +978,16 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [94] = 94, [95] = 95, [96] = 96, - [97] = 77, - [98] = 98, - [99] = 99, - [100] = 100, + [97] = 97, + [98] = 85, + [99] = 90, + [100] = 85, [101] = 101, - [102] = 102, + [102] = 75, [103] = 103, - [104] = 104, - [105] = 80, - [106] = 81, + [104] = 82, + [105] = 105, + [106] = 106, [107] = 107, [108] = 108, [109] = 109, @@ -1025,30 +1024,35 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [140] = 140, [141] = 141, [142] = 142, - [143] = 109, - [144] = 144, - [145] = 116, - [146] = 146, - [147] = 118, - [148] = 123, - [149] = 109, - [150] = 150, - [151] = 118, - [152] = 152, - [153] = 153, - [154] = 138, + [143] = 143, + [144] = 112, + [145] = 145, + [146] = 117, + [147] = 122, + [148] = 142, + [149] = 149, + [150] = 117, + [151] = 151, + [152] = 142, + [153] = 110, + [154] = 154, [155] = 155, - [156] = 156, - [157] = 125, + [156] = 139, + [157] = 157, [158] = 158, - [159] = 159, - [160] = 138, - [161] = 124, - [162] = 122, - [163] = 150, - [164] = 146, - [165] = 124, - [166] = 122, + [159] = 110, + [160] = 107, + [161] = 123, + [162] = 135, + [163] = 158, + [164] = 107, + [165] = 123, + [166] = 166, +}; + +static TSCharacterRange aux_sym_c_escape_token1_character_set_1[] = { + {'\'', '\''}, {'?', '?'}, {'\\', '\\'}, {'a', 'b'}, {'e', 'f'}, {'n', 'n'}, {'r', 'r'}, {'t', 't'}, + {'v', 'v'}, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1056,544 +1060,562 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(238); - if (lookahead == '\n') ADVANCE(239); - if (lookahead == '!') ADVANCE(16); - if (lookahead == '"') ADVANCE(285); - if (lookahead == '#') ADVANCE(344); - if (lookahead == '$') ADVANCE(11); - if (lookahead == '%') ADVANCE(13); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '+') ADVANCE(319); - if (lookahead == ',') ADVANCE(240); - if (lookahead == '-') ADVANCE(17); - if (lookahead == ':') ADVANCE(17); - if (lookahead == '=') ADVANCE(283); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(3); - if (lookahead == '\\') ADVANCE(2); - if (lookahead == 'e') ADVANCE(286); - if (lookahead == '{') ADVANCE(252); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '}') ADVANCE(320); + if (eof) ADVANCE(239); + ADVANCE_MAP( + '\n', 240, + '!', 17, + '"', 286, + '#', 345, + '$', 11, + '%', 13, + '*', 299, + '+', 320, + ',', 241, + '-', 18, + ':', 18, + '=', 284, + '?', 300, + '[', 3, + '\\', 2, + 'e', 287, + '{', 253, + '|', 301, + '}', 321, + ); if (lookahead == '\t' || - lookahead == ' ') SKIP(235) + lookahead == ' ') SKIP(236); if (('.' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(275); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(276); END_STATE(); case 1: - if (lookahead == '\n') ADVANCE(343); + if (lookahead == '\n') ADVANCE(344); END_STATE(); case 2: - if (lookahead == '\n') ADVANCE(343); - if (lookahead == '"') ADVANCE(297); - if (lookahead == 'U') ADVANCE(234); - if (lookahead == 'u') ADVANCE(229); - if (lookahead == 'x') ADVANCE(224); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(305); - if (lookahead == '\'' || - lookahead == '?' || - lookahead == '\\' || - lookahead == 'a' || - lookahead == 'b' || - lookahead == 'e' || - lookahead == 'f' || - lookahead == 'n' || - lookahead == 'r' || - ('t' <= lookahead && lookahead <= 'v')) ADVANCE(302); + if (lookahead == '\n') ADVANCE(344); + if (lookahead == '"') ADVANCE(298); + if (lookahead == 'U') ADVANCE(235); + if (lookahead == 'u') ADVANCE(230); + if (lookahead == 'x') ADVANCE(225); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(306); + if (set_contains(aux_sym_c_escape_token1_character_set_1, 9, lookahead)) ADVANCE(303); END_STATE(); case 3: if (lookahead == '!') ADVANCE(116); if (lookahead != 0 && + lookahead != '!' && lookahead != '"' && lookahead != '[' && lookahead != ']') ADVANCE(116); END_STATE(); case 4: - if (lookahead == '"') ADVANCE(285); - if (lookahead == '$') ADVANCE(291); - if (lookahead == '%') ADVANCE(294); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(290); - if (lookahead == '\\') ADVANCE(289); - if (lookahead == '{') ADVANCE(252); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '\t' || - lookahead == ' ') ADVANCE(292); - if (lookahead != 0) ADVANCE(287); + ADVANCE_MAP( + '"', 286, + '$', 292, + '%', 295, + '*', 299, + '?', 300, + '[', 291, + '\\', 290, + '{', 253, + '|', 301, + '\t', 293, + ' ', 293, + ); + if (lookahead != 0) ADVANCE(288); END_STATE(); case 5: - if (lookahead == '"') ADVANCE(285); - if (lookahead == '$') ADVANCE(291); - if (lookahead == '%') ADVANCE(294); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(290); - if (lookahead == '\\') ADVANCE(289); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '\t' || - lookahead == ' ') ADVANCE(292); - if (lookahead != 0) ADVANCE(287); + ADVANCE_MAP( + '"', 286, + '$', 292, + '%', 295, + '*', 299, + '?', 300, + '[', 291, + '\\', 290, + '|', 301, + '\t', 293, + ' ', 293, + ); + if (lookahead != 0) ADVANCE(288); END_STATE(); case 6: - if (lookahead == '"') ADVANCE(285); - if (lookahead == '$') ADVANCE(291); - if (lookahead == '%') ADVANCE(294); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(290); - if (lookahead == '\\') ADVANCE(288); - if (lookahead == '{') ADVANCE(252); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '\t' || - lookahead == ' ') ADVANCE(293); - if (lookahead != 0) ADVANCE(287); + ADVANCE_MAP( + '"', 286, + '$', 292, + '%', 295, + '*', 299, + '?', 300, + '[', 291, + '\\', 289, + '{', 253, + '|', 301, + '\t', 294, + ' ', 294, + ); + if (lookahead != 0) ADVANCE(288); END_STATE(); case 7: - if (lookahead == '"') ADVANCE(285); - if (lookahead == '$') ADVANCE(291); - if (lookahead == '%') ADVANCE(294); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(290); - if (lookahead == '\\') ADVANCE(288); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '\t' || - lookahead == ' ') ADVANCE(293); - if (lookahead != 0) ADVANCE(287); + ADVANCE_MAP( + '"', 286, + '$', 292, + '%', 295, + '*', 299, + '?', 300, + '[', 291, + '\\', 289, + '|', 301, + '\t', 294, + ' ', 294, + ); + if (lookahead != 0) ADVANCE(288); END_STATE(); case 8: - if (lookahead == '"') ADVANCE(285); - if (lookahead == '%') ADVANCE(13); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '+') ADVANCE(318); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(3); - if (lookahead == '\\') ADVANCE(1); - if (lookahead == '{') ADVANCE(252); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '}') ADVANCE(253); + ADVANCE_MAP( + '"', 286, + '%', 13, + '*', 299, + '+', 319, + '?', 300, + '[', 3, + '\\', 1, + '{', 253, + '|', 301, + '}', 254, + ); if (lookahead == '\t' || - lookahead == ' ') SKIP(12) + lookahead == ' ') SKIP(12); if (('.' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(275); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(276); END_STATE(); case 9: - if (lookahead == '"') ADVANCE(285); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(290); - if (lookahead == '\\') ADVANCE(289); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '\t' || - lookahead == ' ') ADVANCE(295); - if (lookahead != 0) ADVANCE(287); + ADVANCE_MAP( + '"', 286, + '*', 299, + '?', 300, + '[', 291, + '\\', 290, + '|', 301, + '\t', 296, + ' ', 296, + ); + if (lookahead != 0) ADVANCE(288); END_STATE(); case 10: - if (lookahead == '"') ADVANCE(285); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(290); - if (lookahead == '\\') ADVANCE(288); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '\t' || - lookahead == ' ') ADVANCE(296); - if (lookahead != 0) ADVANCE(287); + ADVANCE_MAP( + '"', 286, + '*', 299, + '?', 300, + '[', 291, + '\\', 289, + '|', 301, + '\t', 297, + ' ', 297, + ); + if (lookahead != 0) ADVANCE(288); END_STATE(); case 11: - if (lookahead == '$') ADVANCE(342); - if (lookahead == 'a') ADVANCE(206); - if (lookahead == 'd') ADVANCE(130); - if (lookahead == 'e') ADVANCE(171); - if (lookahead == 'i') ADVANCE(127); - if (lookahead == 'k') ADVANCE(131); - if (lookahead == 'l') ADVANCE(145); - if (lookahead == 'm') ADVANCE(117); - if (lookahead == 'n') ADVANCE(118); - if (lookahead == 'p') ADVANCE(119); - if (lookahead == 'r') ADVANCE(132); - if (lookahead == 's') ADVANCE(216); + ADVANCE_MAP( + '$', 343, + 'a', 206, + 'd', 130, + 'e', 171, + 'i', 127, + 'k', 131, + 'l', 145, + 'm', 117, + 'n', 118, + 'p', 119, + 'r', 132, + 's', 217, + ); END_STATE(); case 12: - if (lookahead == '%') ADVANCE(13); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '+') ADVANCE(318); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(3); - if (lookahead == '\\') ADVANCE(1); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '}') ADVANCE(253); + ADVANCE_MAP( + '%', 13, + '*', 299, + '+', 319, + '?', 300, + '[', 3, + '\\', 1, + '|', 301, + '}', 254, + ); if (lookahead == '\t' || - lookahead == ' ') SKIP(12) + lookahead == ' ') SKIP(12); if (('.' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(275); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(276); END_STATE(); case 13: - if (lookahead == '%') ADVANCE(325); - if (lookahead == 'E') ADVANCE(314); - if (lookahead == 'M') ADVANCE(315); - if (lookahead == 'N') ADVANCE(324); - if (lookahead == 'P') ADVANCE(321); - if (lookahead == 'S') ADVANCE(323); - if (lookahead == 'b') ADVANCE(312); - if (lookahead == 'c') ADVANCE(317); - if (lookahead == 'k') ADVANCE(309); - if (lookahead == 'm') ADVANCE(316); - if (lookahead == 'n') ADVANCE(310); - if (lookahead == 'p') ADVANCE(311); - if (lookahead == 'r') ADVANCE(322); - if (lookahead == 's') ADVANCE(313); + ADVANCE_MAP( + '%', 326, + 'E', 315, + 'M', 316, + 'N', 325, + 'P', 322, + 'S', 324, + 'b', 313, + 'c', 318, + 'k', 310, + 'm', 317, + 'n', 311, + 'p', 312, + 'r', 323, + 's', 314, + ); END_STATE(); case 14: - if (lookahead == '+') ADVANCE(318); + if (lookahead == '+') ADVANCE(319); if (lookahead == '\\') ADVANCE(1); - if (lookahead == '}') ADVANCE(320); + if (lookahead == '}') ADVANCE(321); if (lookahead == '\t' || - lookahead == ' ') SKIP(15) + lookahead == ' ') SKIP(15); if (lookahead == '.' || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(276); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(277); END_STATE(); case 15: - if (lookahead == '+') ADVANCE(318); + if (lookahead == '+') ADVANCE(319); if (lookahead == '\\') ADVANCE(1); if (lookahead == '\t' || - lookahead == ' ') SKIP(15) + lookahead == ' ') SKIP(15); if (lookahead == '.' || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(276); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(277); END_STATE(); case 16: - if (lookahead == '=') ADVANCE(281); + if (lookahead == '0') ADVANCE(220); + if (lookahead == '\\') ADVANCE(1); + if (lookahead == '\t' || + lookahead == ' ') SKIP(16); + if (('1' <= lookahead && lookahead <= '7')) ADVANCE(221); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(278); END_STATE(); case 17: if (lookahead == '=') ADVANCE(282); END_STATE(); case 18: - if (lookahead == 'A') ADVANCE(24); + if (lookahead == '=') ADVANCE(283); END_STATE(); case 19: - if (lookahead == 'A') ADVANCE(43); - if (lookahead == 'E') ADVANCE(94); + if (lookahead == 'A') ADVANCE(25); END_STATE(); case 20: - if (lookahead == 'A') ADVANCE(62); + if (lookahead == 'A') ADVANCE(44); + if (lookahead == 'E') ADVANCE(95); END_STATE(); case 21: - if (lookahead == 'A') ADVANCE(59); + if (lookahead == 'A') ADVANCE(63); END_STATE(); case 22: - if (lookahead == 'A') ADVANCE(99); + if (lookahead == 'A') ADVANCE(60); END_STATE(); case 23: - if (lookahead == 'A') ADVANCE(26); + if (lookahead == 'A') ADVANCE(100); END_STATE(); case 24: - if (lookahead == 'B') ADVANCE(37); + if (lookahead == 'A') ADVANCE(27); END_STATE(); case 25: - if (lookahead == 'B') ADVANCE(91); + if (lookahead == 'B') ADVANCE(38); END_STATE(); case 26: - if (lookahead == 'B') ADVANCE(42); + if (lookahead == 'B') ADVANCE(92); END_STATE(); case 27: - if (lookahead == 'C') ADVANCE(102); - if (lookahead == 'T') ADVANCE(103); + if (lookahead == 'B') ADVANCE(43); END_STATE(); case 28: - if (lookahead == 'C') ADVANCE(57); + if (lookahead == 'C') ADVANCE(103); + if (lookahead == 'T') ADVANCE(104); END_STATE(); case 29: - if (lookahead == 'C') ADVANCE(106); + if (lookahead == 'C') ADVANCE(58); END_STATE(); case 30: - if (lookahead == 'D') ADVANCE(34); + if (lookahead == 'C') ADVANCE(107); END_STATE(); case 31: - if (lookahead == 'E') ADVANCE(111); - if (lookahead == 'R') ADVANCE(46); + if (lookahead == 'D') ADVANCE(35); END_STATE(); case 32: - if (lookahead == 'E') ADVANCE(93); - if (lookahead == 'U') ADVANCE(63); + if (lookahead == 'E') ADVANCE(112); + if (lookahead == 'R') ADVANCE(47); END_STATE(); case 33: - if (lookahead == 'E') ADVANCE(28); - if (lookahead == 'U') ADVANCE(25); - if (lookahead == 'Y') ADVANCE(61); + if (lookahead == 'E') ADVANCE(94); + if (lookahead == 'U') ADVANCE(64); END_STATE(); case 34: - if (lookahead == 'E') ADVANCE(265); + if (lookahead == 'E') ADVANCE(29); + if (lookahead == 'U') ADVANCE(26); + if (lookahead == 'Y') ADVANCE(62); END_STATE(); case 35: - if (lookahead == 'E') ADVANCE(245); + if (lookahead == 'E') ADVANCE(266); END_STATE(); case 36: - if (lookahead == 'E') ADVANCE(89); + if (lookahead == 'E') ADVANCE(246); END_STATE(); case 37: - if (lookahead == 'E') ADVANCE(51); + if (lookahead == 'E') ADVANCE(90); END_STATE(); case 38: - if (lookahead == 'E') ADVANCE(60); + if (lookahead == 'E') ADVANCE(52); END_STATE(); case 39: - if (lookahead == 'E') ADVANCE(85); + if (lookahead == 'E') ADVANCE(61); END_STATE(); case 40: - if (lookahead == 'E') ADVANCE(52); + if (lookahead == 'E') ADVANCE(86); END_STATE(); case 41: - if (lookahead == 'E') ADVANCE(86); + if (lookahead == 'E') ADVANCE(53); END_STATE(); case 42: - if (lookahead == 'E') ADVANCE(54); + if (lookahead == 'E') ADVANCE(87); END_STATE(); case 43: - if (lookahead == 'G') ADVANCE(258); + if (lookahead == 'E') ADVANCE(55); END_STATE(); case 44: - if (lookahead == 'G') ADVANCE(88); + if (lookahead == 'G') ADVANCE(259); END_STATE(); case 45: - if (lookahead == 'H') ADVANCE(242); + if (lookahead == 'G') ADVANCE(89); END_STATE(); case 46: - if (lookahead == 'I') ADVANCE(112); + if (lookahead == 'H') ADVANCE(243); END_STATE(); case 47: - if (lookahead == 'I') ADVANCE(65); + if (lookahead == 'I') ADVANCE(113); END_STATE(); case 48: - if (lookahead == 'I') ADVANCE(78); + if (lookahead == 'I') ADVANCE(66); END_STATE(); case 49: if (lookahead == 'I') ADVANCE(79); END_STATE(); case 50: - if (lookahead == 'K') ADVANCE(246); + if (lookahead == 'I') ADVANCE(80); END_STATE(); case 51: - if (lookahead == 'L') ADVANCE(268); + if (lookahead == 'K') ADVANCE(247); END_STATE(); case 52: - if (lookahead == 'L') ADVANCE(243); + if (lookahead == 'L') ADVANCE(269); END_STATE(); case 53: - if (lookahead == 'L') ADVANCE(255); + if (lookahead == 'L') ADVANCE(244); END_STATE(); case 54: - if (lookahead == 'L') ADVANCE(266); + if (lookahead == 'L') ADVANCE(256); END_STATE(); case 55: - if (lookahead == 'L') ADVANCE(47); + if (lookahead == 'L') ADVANCE(267); END_STATE(); case 56: - if (lookahead == 'L') ADVANCE(101); + if (lookahead == 'L') ADVANCE(48); END_STATE(); case 57: - if (lookahead == 'L') ADVANCE(23); + if (lookahead == 'L') ADVANCE(102); END_STATE(); case 58: - if (lookahead == 'M') ADVANCE(82); + if (lookahead == 'L') ADVANCE(24); END_STATE(); case 59: - if (lookahead == 'M') ADVANCE(261); + if (lookahead == 'M') ADVANCE(83); END_STATE(); case 60: - if (lookahead == 'M') ADVANCE(247); + if (lookahead == 'M') ADVANCE(262); END_STATE(); case 61: - if (lookahead == 'M') ADVANCE(55); - if (lookahead == 'S') ADVANCE(29); + if (lookahead == 'M') ADVANCE(248); END_STATE(); case 62: - if (lookahead == 'M') ADVANCE(35); + if (lookahead == 'M') ADVANCE(56); + if (lookahead == 'S') ADVANCE(30); END_STATE(); case 63: - if (lookahead == 'N') ADVANCE(267); + if (lookahead == 'M') ADVANCE(36); END_STATE(); case 64: - if (lookahead == 'N') ADVANCE(241); + if (lookahead == 'N') ADVANCE(268); END_STATE(); case 65: - if (lookahead == 'N') ADVANCE(50); + if (lookahead == 'N') ADVANCE(242); END_STATE(); case 66: - if (lookahead == 'N') ADVANCE(110); + if (lookahead == 'N') ADVANCE(51); END_STATE(); case 67: - if (lookahead == 'N') ADVANCE(92); + if (lookahead == 'N') ADVANCE(111); END_STATE(); case 68: - if (lookahead == 'N') ADVANCE(39); + if (lookahead == 'N') ADVANCE(93); END_STATE(); case 69: if (lookahead == 'N') ADVANCE(40); END_STATE(); case 70: - if (lookahead == 'N') ADVANCE(95); + if (lookahead == 'N') ADVANCE(41); END_STATE(); case 71: - if (lookahead == 'O') ADVANCE(30); + if (lookahead == 'N') ADVANCE(96); END_STATE(); case 72: - if (lookahead == 'O') ADVANCE(108); + if (lookahead == 'O') ADVANCE(31); END_STATE(); case 73: - if (lookahead == 'O') ADVANCE(269); + if (lookahead == 'O') ADVANCE(109); END_STATE(); case 74: - if (lookahead == 'O') ADVANCE(70); + if (lookahead == 'O') ADVANCE(270); END_STATE(); case 75: - if (lookahead == 'O') ADVANCE(44); + if (lookahead == 'O') ADVANCE(71); END_STATE(); case 76: - if (lookahead == 'O') ADVANCE(104); - if (lookahead == 'R') ADVANCE(72); + if (lookahead == 'O') ADVANCE(45); END_STATE(); case 77: - if (lookahead == 'O') ADVANCE(90); + if (lookahead == 'O') ADVANCE(105); + if (lookahead == 'R') ADVANCE(73); END_STATE(); case 78: - if (lookahead == 'O') ADVANCE(64); + if (lookahead == 'O') ADVANCE(91); END_STATE(); case 79: - if (lookahead == 'O') ADVANCE(67); + if (lookahead == 'O') ADVANCE(65); END_STATE(); case 80: - if (lookahead == 'P') ADVANCE(264); + if (lookahead == 'O') ADVANCE(68); END_STATE(); case 81: - if (lookahead == 'P') ADVANCE(22); + if (lookahead == 'P') ADVANCE(265); END_STATE(); case 82: - if (lookahead == 'P') ADVANCE(77); + if (lookahead == 'P') ADVANCE(23); END_STATE(); case 83: - if (lookahead == 'P') ADVANCE(107); - if (lookahead == 'W') ADVANCE(68); + if (lookahead == 'P') ADVANCE(78); END_STATE(); case 84: - if (lookahead == 'R') ADVANCE(251); + if (lookahead == 'P') ADVANCE(108); + if (lookahead == 'W') ADVANCE(69); END_STATE(); case 85: - if (lookahead == 'R') ADVANCE(263); + if (lookahead == 'R') ADVANCE(252); END_STATE(); case 86: - if (lookahead == 'R') ADVANCE(249); + if (lookahead == 'R') ADVANCE(264); END_STATE(); case 87: - if (lookahead == 'R') ADVANCE(75); + if (lookahead == 'R') ADVANCE(250); END_STATE(); case 88: - if (lookahead == 'R') ADVANCE(21); + if (lookahead == 'R') ADVANCE(76); END_STATE(); case 89: - if (lookahead == 'R') ADVANCE(69); + if (lookahead == 'R') ADVANCE(22); END_STATE(); case 90: - if (lookahead == 'R') ADVANCE(100); + if (lookahead == 'R') ADVANCE(70); END_STATE(); case 91: - if (lookahead == 'S') ADVANCE(113); + if (lookahead == 'R') ADVANCE(101); END_STATE(); case 92: - if (lookahead == 'S') ADVANCE(271); + if (lookahead == 'S') ADVANCE(114); END_STATE(); case 93: - if (lookahead == 'S') ADVANCE(109); + if (lookahead == 'S') ADVANCE(272); END_STATE(); case 94: - if (lookahead == 'S') ADVANCE(97); + if (lookahead == 'S') ADVANCE(110); END_STATE(); case 95: if (lookahead == 'S') ADVANCE(98); END_STATE(); case 96: - if (lookahead == 'S') ADVANCE(105); + if (lookahead == 'S') ADVANCE(99); END_STATE(); case 97: - if (lookahead == 'T') ADVANCE(260); + if (lookahead == 'S') ADVANCE(106); END_STATE(); case 98: - if (lookahead == 'T') ADVANCE(257); + if (lookahead == 'T') ADVANCE(261); END_STATE(); case 99: - if (lookahead == 'T') ADVANCE(45); + if (lookahead == 'T') ADVANCE(258); END_STATE(); case 100: - if (lookahead == 'T') ADVANCE(270); + if (lookahead == 'T') ADVANCE(46); END_STATE(); case 101: - if (lookahead == 'T') ADVANCE(262); + if (lookahead == 'T') ADVANCE(271); END_STATE(); case 102: - if (lookahead == 'T') ADVANCE(48); + if (lookahead == 'T') ADVANCE(263); END_STATE(); case 103: - if (lookahead == 'T') ADVANCE(84); + if (lookahead == 'T') ADVANCE(49); END_STATE(); case 104: - if (lookahead == 'T') ADVANCE(73); + if (lookahead == 'T') ADVANCE(85); END_STATE(); case 105: - if (lookahead == 'T') ADVANCE(38); + if (lookahead == 'T') ADVANCE(74); END_STATE(); case 106: - if (lookahead == 'T') ADVANCE(53); + if (lookahead == 'T') ADVANCE(39); END_STATE(); case 107: - if (lookahead == 'T') ADVANCE(49); + if (lookahead == 'T') ADVANCE(54); END_STATE(); case 108: - if (lookahead == 'U') ADVANCE(80); + if (lookahead == 'T') ADVANCE(50); END_STATE(); case 109: - if (lookahead == 'U') ADVANCE(56); + if (lookahead == 'U') ADVANCE(81); END_STATE(); case 110: - if (lookahead == 'V') ADVANCE(256); + if (lookahead == 'U') ADVANCE(57); END_STATE(); case 111: - if (lookahead == 'V') ADVANCE(81); + if (lookahead == 'V') ADVANCE(257); END_STATE(); case 112: - if (lookahead == 'V') ADVANCE(41); + if (lookahead == 'V') ADVANCE(82); END_STATE(); case 113: - if (lookahead == 'Y') ADVANCE(96); + if (lookahead == 'V') ADVANCE(42); END_STATE(); case 114: - if (lookahead == '\\') ADVANCE(1); - if (lookahead == 'b') ADVANCE(212); - if (lookahead == 'p') ADVANCE(196); - if (lookahead == '\t' || - lookahead == ' ') SKIP(114) + if (lookahead == 'Y') ADVANCE(97); END_STATE(); case 115: if (lookahead == '\\') ADVANCE(1); + if (lookahead == 'b') ADVANCE(212); + if (lookahead == 'c') ADVANCE(167); + if (lookahead == 'd') ADVANCE(124); + if (lookahead == 'f') ADVANCE(147); + if (lookahead == 'p') ADVANCE(123); if (lookahead == '\t' || - lookahead == ' ') SKIP(115) - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(280); - if (('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(277); + lookahead == ' ') SKIP(115); END_STATE(); case 116: - if (lookahead == ']') ADVANCE(301); + if (lookahead == ']') ADVANCE(302); if (lookahead != 0 && lookahead != '"' && lookahead != '[') ADVANCE(116); @@ -1613,17 +1635,17 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'a') ADVANCE(201); END_STATE(); case 121: - if (lookahead == 'a') ADVANCE(163); + if (lookahead == 'a') ADVANCE(164); END_STATE(); case 122: if (lookahead == 'a') ADVANCE(165); END_STATE(); case 123: - if (lookahead == 'a') ADVANCE(194); - if (lookahead == 'r') ADVANCE(178); + if (lookahead == 'a') ADVANCE(195); + if (lookahead == 'r') ADVANCE(183); END_STATE(); case 124: - if (lookahead == 'b') ADVANCE(274); + if (lookahead == 'b') ADVANCE(275); END_STATE(); case 125: if (lookahead == 'b') ADVANCE(140); @@ -1632,7 +1654,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'c') ADVANCE(144); END_STATE(); case 127: - if (lookahead == 'd') ADVANCE(329); + if (lookahead == 'd') ADVANCE(330); END_STATE(); case 128: if (lookahead == 'd') ADVANCE(160); @@ -1652,13 +1674,13 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'o') ADVANCE(180); END_STATE(); case 133: - if (lookahead == 'e') ADVANCE(337); + if (lookahead == 'e') ADVANCE(338); END_STATE(); case 134: - if (lookahead == 'e') ADVANCE(341); + if (lookahead == 'e') ADVANCE(342); END_STATE(); case 135: - if (lookahead == 'e') ADVANCE(274); + if (lookahead == 'e') ADVANCE(275); END_STATE(); case 136: if (lookahead == 'e') ADVANCE(156); @@ -1667,10 +1689,10 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'e') ADVANCE(174); END_STATE(); case 138: - if (lookahead == 'e') ADVANCE(176); + if (lookahead == 'e') ADVANCE(187); END_STATE(); case 139: - if (lookahead == 'e') ADVANCE(187); + if (lookahead == 'e') ADVANCE(176); END_STATE(); case 140: if (lookahead == 'e') ADVANCE(188); @@ -1679,19 +1701,19 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'g') ADVANCE(191); END_STATE(); case 142: - if (lookahead == 'g') ADVANCE(195); + if (lookahead == 'g') ADVANCE(196); END_STATE(); case 143: - if (lookahead == 'h') ADVANCE(328); + if (lookahead == 'h') ADVANCE(329); END_STATE(); case 144: - if (lookahead == 'h') ADVANCE(272); + if (lookahead == 'h') ADVANCE(273); END_STATE(); case 145: if (lookahead == 'i') ADVANCE(168); END_STATE(); case 146: - if (lookahead == 'i') ADVANCE(215); + if (lookahead == 'i') ADVANCE(216); END_STATE(); case 147: if (lookahead == 'i') ADVANCE(158); @@ -1703,7 +1725,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'i') ADVANCE(170); END_STATE(); case 150: - if (lookahead == 'i') ADVANCE(193); + if (lookahead == 'i') ADVANCE(194); END_STATE(); case 151: if (lookahead == 'i') ADVANCE(159); @@ -1721,7 +1743,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'k') ADVANCE(199); END_STATE(); case 156: - if (lookahead == 'l') ADVANCE(326); + if (lookahead == 'l') ADVANCE(327); END_STATE(); case 157: if (lookahead == 'l') ADVANCE(203); @@ -1742,20 +1764,19 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'm') ADVANCE(125); END_STATE(); case 163: - if (lookahead == 'm') ADVANCE(274); + if (lookahead == 'm') ADVANCE(273); END_STATE(); case 164: - if (lookahead == 'm') ADVANCE(272); + if (lookahead == 'm') ADVANCE(274); END_STATE(); case 165: - if (lookahead == 'm') ADVANCE(273); + if (lookahead == 'm') ADVANCE(275); END_STATE(); case 166: if (lookahead == 'm') ADVANCE(133); END_STATE(); case 167: if (lookahead == 'm') ADVANCE(128); - if (lookahead == 'v') ADVANCE(164); END_STATE(); case 168: if (lookahead == 'n') ADVANCE(155); @@ -1764,7 +1785,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'n') ADVANCE(274); END_STATE(); case 170: - if (lookahead == 'n') ADVANCE(273); + if (lookahead == 'n') ADVANCE(275); END_STATE(); case 171: if (lookahead == 'n') ADVANCE(214); @@ -1783,7 +1804,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'n') ADVANCE(135); END_STATE(); case 176: - if (lookahead == 'n') ADVANCE(204); + if (lookahead == 'n') ADVANCE(205); END_STATE(); case 177: if (lookahead == 'n') ADVANCE(182); @@ -1807,19 +1828,19 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'o') ADVANCE(142); END_STATE(); case 184: - if (lookahead == 'r') ADVANCE(331); + if (lookahead == 'r') ADVANCE(332); END_STATE(); case 185: - if (lookahead == 'r') ADVANCE(333); + if (lookahead == 'r') ADVANCE(334); END_STATE(); case 186: - if (lookahead == 'r') ADVANCE(334); + if (lookahead == 'r') ADVANCE(335); END_STATE(); case 187: - if (lookahead == 'r') ADVANCE(330); + if (lookahead == 'r') ADVANCE(331); END_STATE(); case 188: - if (lookahead == 'r') ADVANCE(327); + if (lookahead == 'r') ADVANCE(328); END_STATE(); case 189: if (lookahead == 'r') ADVANCE(126); @@ -1834,43 +1855,43 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'r') ADVANCE(173); END_STATE(); case 193: - if (lookahead == 'r') ADVANCE(205); + if (lookahead == 'r') ADVANCE(178); END_STATE(); case 194: - if (lookahead == 'r') ADVANCE(138); + if (lookahead == 'r') ADVANCE(204); END_STATE(); case 195: - if (lookahead == 'r') ADVANCE(122); + if (lookahead == 'r') ADVANCE(139); END_STATE(); case 196: - if (lookahead == 'r') ADVANCE(183); + if (lookahead == 'r') ADVANCE(122); END_STATE(); case 197: if (lookahead == 's') ADVANCE(210); END_STATE(); case 198: - if (lookahead == 's') ADVANCE(340); + if (lookahead == 's') ADVANCE(341); END_STATE(); case 199: - if (lookahead == 's') ADVANCE(338); + if (lookahead == 's') ADVANCE(339); END_STATE(); case 200: - if (lookahead == 't') ADVANCE(339); + if (lookahead == 't') ADVANCE(340); END_STATE(); case 201: if (lookahead == 't') ADVANCE(143); END_STATE(); case 202: - if (lookahead == 't') ADVANCE(336); + if (lookahead == 't') ADVANCE(337); END_STATE(); case 203: - if (lookahead == 't') ADVANCE(335); + if (lookahead == 't') ADVANCE(336); END_STATE(); case 204: - if (lookahead == 't') ADVANCE(274); + if (lookahead == 't') ADVANCE(273); END_STATE(); case 205: - if (lookahead == 't') ADVANCE(272); + if (lookahead == 't') ADVANCE(275); END_STATE(); case 206: if (lookahead == 't') ADVANCE(207); @@ -1897,30 +1918,28 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'v') ADVANCE(172); END_STATE(); case 214: - if (lookahead == 'v') ADVANCE(332); + if (lookahead == 'v') ADVANCE(333); END_STATE(); case 215: - if (lookahead == 'v') ADVANCE(139); + if (lookahead == 'v') ADVANCE(163); END_STATE(); case 216: - if (lookahead == 'y') ADVANCE(198); + if (lookahead == 'v') ADVANCE(138); END_STATE(); case 217: - if (('0' <= lookahead && lookahead <= '7')) ADVANCE(279); + if (lookahead == 'y') ADVANCE(198); END_STATE(); case 218: - if (('0' <= lookahead && lookahead <= '7')) ADVANCE(278); + if (('0' <= lookahead && lookahead <= '7')) ADVANCE(280); END_STATE(); case 219: - if (('0' <= lookahead && lookahead <= '7')) ADVANCE(217); + if (('0' <= lookahead && lookahead <= '7')) ADVANCE(279); END_STATE(); case 220: if (('0' <= lookahead && lookahead <= '7')) ADVANCE(218); END_STATE(); case 221: - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(306); + if (('0' <= lookahead && lookahead <= '7')) ADVANCE(219); END_STATE(); case 222: if (('0' <= lookahead && lookahead <= '9') || @@ -1935,7 +1954,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 224: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(221); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(309); END_STATE(); case 225: if (('0' <= lookahead && lookahead <= '9') || @@ -1950,7 +1969,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 227: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(225); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(224); END_STATE(); case 228: if (('0' <= lookahead && lookahead <= '9') || @@ -1970,7 +1989,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 231: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(230); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(229); END_STATE(); case 232: if (('0' <= lookahead && lookahead <= '9') || @@ -1988,541 +2007,546 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ('a' <= lookahead && lookahead <= 'f')) ADVANCE(233); END_STATE(); case 235: - if (eof) ADVANCE(238); - if (lookahead == '\n') ADVANCE(239); - if (lookahead == '!') ADVANCE(16); - if (lookahead == '"') ADVANCE(284); - if (lookahead == '#') ADVANCE(344); - if (lookahead == '$') ADVANCE(11); - if (lookahead == '%') ADVANCE(13); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '+') ADVANCE(319); - if (lookahead == ',') ADVANCE(240); - if (lookahead == '-') ADVANCE(17); - if (lookahead == ':') ADVANCE(17); - if (lookahead == '=') ADVANCE(283); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(3); - if (lookahead == '\\') ADVANCE(2); - if (lookahead == 'e') ADVANCE(286); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '}') ADVANCE(253); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(234); + END_STATE(); + case 236: + if (eof) ADVANCE(239); + ADVANCE_MAP( + '\n', 240, + '!', 17, + '"', 285, + '#', 345, + '$', 11, + '%', 13, + '*', 299, + '+', 320, + ',', 241, + '-', 18, + ':', 18, + '=', 284, + '?', 300, + '[', 3, + '\\', 2, + 'e', 287, + '|', 301, + '}', 254, + ); if (lookahead == '\t' || - lookahead == ' ') SKIP(235) + lookahead == ' ') SKIP(236); if (('.' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(275); - END_STATE(); - case 236: - if (eof) ADVANCE(238); - if (lookahead == '\n') ADVANCE(239); - if (lookahead == '!') ADVANCE(16); - if (lookahead == '"') ADVANCE(284); - if (lookahead == '#') ADVANCE(344); - if (lookahead == '+') ADVANCE(17); - if (lookahead == '-') ADVANCE(17); - if (lookahead == '0') ADVANCE(219); - if (lookahead == ':') ADVANCE(17); - if (lookahead == '=') ADVANCE(283); - if (lookahead == 'A') ADVANCE(27); - if (lookahead == 'C') ADVANCE(74); - if (lookahead == 'D') ADVANCE(31); - if (lookahead == 'E') ADVANCE(66); - if (lookahead == 'G') ADVANCE(76); - if (lookahead == 'I') ADVANCE(58); - if (lookahead == 'K') ADVANCE(36); - if (lookahead == 'L') ADVANCE(18); - if (lookahead == 'M') ADVANCE(71); - if (lookahead == 'N') ADVANCE(20); - if (lookahead == 'O') ADVANCE(83); - if (lookahead == 'P') ADVANCE(87); - if (lookahead == 'R') ADVANCE(32); - if (lookahead == 'S') ADVANCE(33); - if (lookahead == 'T') ADVANCE(19); - if (lookahead == '\\') ADVANCE(1); - if (lookahead == 'a') ADVANCE(189); - if (lookahead == 'b') ADVANCE(211); - if (lookahead == 'c') ADVANCE(167); - if (lookahead == 'd') ADVANCE(124); - if (lookahead == 'e') ADVANCE(286); - if (lookahead == 'f') ADVANCE(147); - if (lookahead == 'p') ADVANCE(123); - if (lookahead == 'v') ADVANCE(150); - if (lookahead == '{') ADVANCE(252); - if (lookahead == '}') ADVANCE(253); - if (lookahead == '\t' || - lookahead == ' ') SKIP(237) - if (('1' <= lookahead && lookahead <= '7')) ADVANCE(220); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(276); END_STATE(); case 237: - if (eof) ADVANCE(238); - if (lookahead == '\n') ADVANCE(239); - if (lookahead == '!') ADVANCE(16); - if (lookahead == '"') ADVANCE(284); - if (lookahead == '#') ADVANCE(344); - if (lookahead == '+') ADVANCE(17); - if (lookahead == '-') ADVANCE(17); - if (lookahead == '0') ADVANCE(219); - if (lookahead == ':') ADVANCE(17); - if (lookahead == '=') ADVANCE(283); - if (lookahead == 'A') ADVANCE(27); - if (lookahead == 'C') ADVANCE(74); - if (lookahead == 'D') ADVANCE(31); - if (lookahead == 'E') ADVANCE(66); - if (lookahead == 'G') ADVANCE(76); - if (lookahead == 'I') ADVANCE(58); - if (lookahead == 'K') ADVANCE(36); - if (lookahead == 'L') ADVANCE(18); - if (lookahead == 'M') ADVANCE(71); - if (lookahead == 'N') ADVANCE(20); - if (lookahead == 'O') ADVANCE(83); - if (lookahead == 'P') ADVANCE(87); - if (lookahead == 'R') ADVANCE(32); - if (lookahead == 'S') ADVANCE(33); - if (lookahead == 'T') ADVANCE(19); - if (lookahead == '\\') ADVANCE(1); - if (lookahead == 'a') ADVANCE(189); - if (lookahead == 'b') ADVANCE(211); - if (lookahead == 'c') ADVANCE(167); - if (lookahead == 'd') ADVANCE(124); - if (lookahead == 'e') ADVANCE(286); - if (lookahead == 'f') ADVANCE(147); - if (lookahead == 'p') ADVANCE(123); - if (lookahead == 'v') ADVANCE(150); - if (lookahead == '}') ADVANCE(253); + if (eof) ADVANCE(239); + ADVANCE_MAP( + '\n', 240, + '!', 17, + '"', 285, + '#', 345, + '+', 18, + '-', 18, + ':', 18, + '=', 284, + 'A', 28, + 'C', 75, + 'D', 32, + 'E', 67, + 'G', 77, + 'I', 59, + 'K', 37, + 'L', 19, + 'M', 72, + 'N', 21, + 'O', 84, + 'P', 88, + 'R', 33, + 'S', 34, + 'T', 20, + '\\', 1, + 'a', 189, + 'b', 211, + 'c', 215, + 'e', 287, + 'p', 193, + 'v', 150, + '{', 253, + '}', 254, + ); if (lookahead == '\t' || - lookahead == ' ') SKIP(237) - if (('1' <= lookahead && lookahead <= '7')) ADVANCE(220); + lookahead == ' ') SKIP(238); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(281); END_STATE(); case 238: - ACCEPT_TOKEN(ts_builtin_sym_end); + if (eof) ADVANCE(239); + ADVANCE_MAP( + '\n', 240, + '!', 17, + '"', 285, + '#', 345, + '+', 18, + '-', 18, + ':', 18, + '=', 284, + 'A', 28, + 'C', 75, + 'D', 32, + 'E', 67, + 'G', 77, + 'I', 59, + 'K', 37, + 'L', 19, + 'M', 72, + 'N', 21, + 'O', 84, + 'P', 88, + 'R', 33, + 'S', 34, + 'T', 20, + '\\', 1, + 'a', 189, + 'b', 211, + 'c', 215, + 'e', 287, + 'p', 193, + 'v', 150, + '}', 254, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(238); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(281); END_STATE(); case 239: - ACCEPT_TOKEN(aux_sym_rules_token1); + ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); case 240: - ACCEPT_TOKEN(anon_sym_COMMA); + ACCEPT_TOKEN(aux_sym_rules_token1); END_STATE(); case 241: - ACCEPT_TOKEN(anon_sym_ACTION); + ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); case 242: - ACCEPT_TOKEN(anon_sym_DEVPATH); + ACCEPT_TOKEN(anon_sym_ACTION); END_STATE(); case 243: - ACCEPT_TOKEN(anon_sym_KERNEL); - if (lookahead == 'S') ADVANCE(244); + ACCEPT_TOKEN(anon_sym_DEVPATH); END_STATE(); case 244: - ACCEPT_TOKEN(anon_sym_KERNELS); + ACCEPT_TOKEN(anon_sym_KERNEL); + if (lookahead == 'S') ADVANCE(245); END_STATE(); case 245: - ACCEPT_TOKEN(anon_sym_NAME); + ACCEPT_TOKEN(anon_sym_KERNELS); END_STATE(); case 246: - ACCEPT_TOKEN(anon_sym_SYMLINK); + ACCEPT_TOKEN(anon_sym_NAME); END_STATE(); case 247: - ACCEPT_TOKEN(anon_sym_SUBSYSTEM); - if (lookahead == 'S') ADVANCE(248); + ACCEPT_TOKEN(anon_sym_SYMLINK); END_STATE(); case 248: - ACCEPT_TOKEN(anon_sym_SUBSYSTEMS); + ACCEPT_TOKEN(anon_sym_SUBSYSTEM); + if (lookahead == 'S') ADVANCE(249); END_STATE(); case 249: - ACCEPT_TOKEN(anon_sym_DRIVER); - if (lookahead == 'S') ADVANCE(250); + ACCEPT_TOKEN(anon_sym_SUBSYSTEMS); END_STATE(); case 250: - ACCEPT_TOKEN(anon_sym_DRIVERS); + ACCEPT_TOKEN(anon_sym_DRIVER); + if (lookahead == 'S') ADVANCE(251); END_STATE(); case 251: - ACCEPT_TOKEN(anon_sym_ATTR); - if (lookahead == 'S') ADVANCE(254); + ACCEPT_TOKEN(anon_sym_DRIVERS); END_STATE(); case 252: - ACCEPT_TOKEN(anon_sym_LBRACE); + ACCEPT_TOKEN(anon_sym_ATTR); + if (lookahead == 'S') ADVANCE(255); END_STATE(); case 253: - ACCEPT_TOKEN(anon_sym_RBRACE); + ACCEPT_TOKEN(anon_sym_LBRACE); END_STATE(); case 254: - ACCEPT_TOKEN(anon_sym_ATTRS); + ACCEPT_TOKEN(anon_sym_RBRACE); END_STATE(); case 255: - ACCEPT_TOKEN(anon_sym_SYSCTL); + ACCEPT_TOKEN(anon_sym_ATTRS); END_STATE(); case 256: - ACCEPT_TOKEN(anon_sym_ENV); + ACCEPT_TOKEN(anon_sym_SYSCTL); END_STATE(); case 257: - ACCEPT_TOKEN(anon_sym_CONST); + ACCEPT_TOKEN(anon_sym_ENV); END_STATE(); case 258: - ACCEPT_TOKEN(anon_sym_TAG); - if (lookahead == 'S') ADVANCE(259); + ACCEPT_TOKEN(anon_sym_CONST); END_STATE(); case 259: - ACCEPT_TOKEN(anon_sym_TAGS); + ACCEPT_TOKEN(anon_sym_TAG); + if (lookahead == 'S') ADVANCE(260); END_STATE(); case 260: - ACCEPT_TOKEN(anon_sym_TEST); + ACCEPT_TOKEN(anon_sym_TAGS); END_STATE(); case 261: - ACCEPT_TOKEN(anon_sym_PROGRAM); + ACCEPT_TOKEN(anon_sym_TEST); END_STATE(); case 262: - ACCEPT_TOKEN(anon_sym_RESULT); + ACCEPT_TOKEN(anon_sym_PROGRAM); END_STATE(); case 263: - ACCEPT_TOKEN(anon_sym_OWNER); + ACCEPT_TOKEN(anon_sym_RESULT); END_STATE(); case 264: - ACCEPT_TOKEN(anon_sym_GROUP); + ACCEPT_TOKEN(anon_sym_OWNER); END_STATE(); case 265: - ACCEPT_TOKEN(anon_sym_MODE); + ACCEPT_TOKEN(anon_sym_GROUP); END_STATE(); case 266: - ACCEPT_TOKEN(anon_sym_SECLABEL); + ACCEPT_TOKEN(anon_sym_MODE); END_STATE(); case 267: - ACCEPT_TOKEN(anon_sym_RUN); + ACCEPT_TOKEN(anon_sym_SECLABEL); END_STATE(); case 268: - ACCEPT_TOKEN(anon_sym_LABEL); + ACCEPT_TOKEN(anon_sym_RUN); END_STATE(); case 269: - ACCEPT_TOKEN(anon_sym_GOTO); + ACCEPT_TOKEN(anon_sym_LABEL); END_STATE(); case 270: - ACCEPT_TOKEN(anon_sym_IMPORT); + ACCEPT_TOKEN(anon_sym_GOTO); END_STATE(); case 271: - ACCEPT_TOKEN(anon_sym_OPTIONS); + ACCEPT_TOKEN(anon_sym_IMPORT); END_STATE(); case 272: - ACCEPT_TOKEN(sym_system_const); + ACCEPT_TOKEN(anon_sym_OPTIONS); END_STATE(); case 273: - ACCEPT_TOKEN(sym_run_type); + ACCEPT_TOKEN(sym_system_const); END_STATE(); case 274: - ACCEPT_TOKEN(sym_import_type); + ACCEPT_TOKEN(sym_run_type); END_STATE(); case 275: - ACCEPT_TOKEN(aux_sym_attribute_token1); + ACCEPT_TOKEN(sym_import_type); END_STATE(); case 276: + ACCEPT_TOKEN(aux_sym_attribute_token1); + END_STATE(); + case 277: ACCEPT_TOKEN(aux_sym_env_var_token1); if (lookahead == '.' || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(276); - END_STATE(); - case 277: - ACCEPT_TOKEN(sym_seclabel); - if (('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(277); END_STATE(); case 278: - ACCEPT_TOKEN(sym_octal); + ACCEPT_TOKEN(sym_seclabel); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(278); END_STATE(); case 279: ACCEPT_TOKEN(sym_octal); - if (('0' <= lookahead && lookahead <= '7')) ADVANCE(278); END_STATE(); case 280: - ACCEPT_TOKEN(sym_number); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(280); + ACCEPT_TOKEN(sym_octal); + if (('0' <= lookahead && lookahead <= '7')) ADVANCE(279); END_STATE(); case 281: - ACCEPT_TOKEN(sym_match_op); + ACCEPT_TOKEN(sym_number); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(281); END_STATE(); case 282: - ACCEPT_TOKEN(sym_assignment_op); + ACCEPT_TOKEN(sym_match_op); END_STATE(); case 283: ACCEPT_TOKEN(sym_assignment_op); - if (lookahead == '=') ADVANCE(281); END_STATE(); case 284: - ACCEPT_TOKEN(anon_sym_DQUOTE); + ACCEPT_TOKEN(sym_assignment_op); + if (lookahead == '=') ADVANCE(282); END_STATE(); case 285: - ACCEPT_TOKEN(anon_sym_DQUOTE2); + ACCEPT_TOKEN(anon_sym_DQUOTE); END_STATE(); case 286: - ACCEPT_TOKEN(anon_sym_e); + ACCEPT_TOKEN(anon_sym_DQUOTE2); END_STATE(); case 287: - ACCEPT_TOKEN(aux_sym_content_token1); + ACCEPT_TOKEN(anon_sym_e); END_STATE(); case 288: ACCEPT_TOKEN(aux_sym_content_token1); - if (lookahead == '\n') ADVANCE(343); - if (lookahead == '"') ADVANCE(297); END_STATE(); case 289: ACCEPT_TOKEN(aux_sym_content_token1); - if (lookahead == '\n') ADVANCE(343); - if (lookahead == 'U') ADVANCE(234); - if (lookahead == 'u') ADVANCE(229); - if (lookahead == 'x') ADVANCE(224); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(305); - if (lookahead == '\'' || - lookahead == '?' || - lookahead == '\\' || - lookahead == 'a' || - lookahead == 'b' || - lookahead == 'e' || - lookahead == 'f' || - lookahead == 'n' || - lookahead == 'r' || - ('t' <= lookahead && lookahead <= 'v')) ADVANCE(302); + if (lookahead == '\n') ADVANCE(344); + if (lookahead == '"') ADVANCE(298); END_STATE(); case 290: + ACCEPT_TOKEN(aux_sym_content_token1); + if (lookahead == '\n') ADVANCE(344); + if (lookahead == 'U') ADVANCE(235); + if (lookahead == 'u') ADVANCE(230); + if (lookahead == 'x') ADVANCE(225); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(306); + if (set_contains(aux_sym_c_escape_token1_character_set_1, 9, lookahead)) ADVANCE(303); + END_STATE(); + case 291: ACCEPT_TOKEN(aux_sym_content_token1); if (lookahead == '!') ADVANCE(116); if (lookahead != 0 && + lookahead != '!' && lookahead != '"' && lookahead != '[' && lookahead != ']') ADVANCE(116); END_STATE(); - case 291: - ACCEPT_TOKEN(aux_sym_content_token1); - if (lookahead == '$') ADVANCE(342); - if (lookahead == 'a') ADVANCE(206); - if (lookahead == 'd') ADVANCE(130); - if (lookahead == 'e') ADVANCE(171); - if (lookahead == 'i') ADVANCE(127); - if (lookahead == 'k') ADVANCE(131); - if (lookahead == 'l') ADVANCE(145); - if (lookahead == 'm') ADVANCE(117); - if (lookahead == 'n') ADVANCE(118); - if (lookahead == 'p') ADVANCE(119); - if (lookahead == 'r') ADVANCE(132); - if (lookahead == 's') ADVANCE(216); - END_STATE(); case 292: ACCEPT_TOKEN(aux_sym_content_token1); - if (lookahead == '$') ADVANCE(291); - if (lookahead == '%') ADVANCE(294); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(290); - if (lookahead == '\\') ADVANCE(289); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '\t' || - lookahead == ' ') ADVANCE(292); - if (lookahead != 0 && - lookahead != '"') ADVANCE(287); + ADVANCE_MAP( + '$', 343, + 'a', 206, + 'd', 130, + 'e', 171, + 'i', 127, + 'k', 131, + 'l', 145, + 'm', 117, + 'n', 118, + 'p', 119, + 'r', 132, + 's', 217, + ); END_STATE(); case 293: ACCEPT_TOKEN(aux_sym_content_token1); - if (lookahead == '$') ADVANCE(291); - if (lookahead == '%') ADVANCE(294); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(290); - if (lookahead == '\\') ADVANCE(288); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '\t' || - lookahead == ' ') ADVANCE(293); + ADVANCE_MAP( + '$', 292, + '%', 295, + '*', 299, + '?', 300, + '[', 291, + '\\', 290, + '|', 301, + '\t', 293, + ' ', 293, + ); if (lookahead != 0 && - lookahead != '"') ADVANCE(287); + lookahead != '"') ADVANCE(288); END_STATE(); case 294: ACCEPT_TOKEN(aux_sym_content_token1); - if (lookahead == '%') ADVANCE(325); - if (lookahead == 'E') ADVANCE(314); - if (lookahead == 'M') ADVANCE(315); - if (lookahead == 'N') ADVANCE(324); - if (lookahead == 'P') ADVANCE(321); - if (lookahead == 'S') ADVANCE(323); - if (lookahead == 'b') ADVANCE(312); - if (lookahead == 'c') ADVANCE(317); - if (lookahead == 'k') ADVANCE(309); - if (lookahead == 'm') ADVANCE(316); - if (lookahead == 'n') ADVANCE(310); - if (lookahead == 'p') ADVANCE(311); - if (lookahead == 'r') ADVANCE(322); - if (lookahead == 's') ADVANCE(313); + ADVANCE_MAP( + '$', 292, + '%', 295, + '*', 299, + '?', 300, + '[', 291, + '\\', 289, + '|', 301, + '\t', 294, + ' ', 294, + ); + if (lookahead != 0 && + lookahead != '"') ADVANCE(288); END_STATE(); case 295: ACCEPT_TOKEN(aux_sym_content_token1); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(290); - if (lookahead == '\\') ADVANCE(289); - if (lookahead == '|') ADVANCE(300); - if (lookahead == '\t' || - lookahead == ' ') ADVANCE(295); - if (lookahead != 0 && - lookahead != '"') ADVANCE(287); + ADVANCE_MAP( + '%', 326, + 'E', 315, + 'M', 316, + 'N', 325, + 'P', 322, + 'S', 324, + 'b', 313, + 'c', 318, + 'k', 310, + 'm', 317, + 'n', 311, + 'p', 312, + 'r', 323, + 's', 314, + ); END_STATE(); case 296: ACCEPT_TOKEN(aux_sym_content_token1); - if (lookahead == '*') ADVANCE(298); - if (lookahead == '?') ADVANCE(299); - if (lookahead == '[') ADVANCE(290); - if (lookahead == '\\') ADVANCE(288); - if (lookahead == '|') ADVANCE(300); + if (lookahead == '*') ADVANCE(299); + if (lookahead == '?') ADVANCE(300); + if (lookahead == '[') ADVANCE(291); + if (lookahead == '\\') ADVANCE(290); + if (lookahead == '|') ADVANCE(301); if (lookahead == '\t' || lookahead == ' ') ADVANCE(296); if (lookahead != 0 && - lookahead != '"') ADVANCE(287); + lookahead != '"') ADVANCE(288); END_STATE(); case 297: - ACCEPT_TOKEN(anon_sym_BSLASH_DQUOTE); + ACCEPT_TOKEN(aux_sym_content_token1); + if (lookahead == '*') ADVANCE(299); + if (lookahead == '?') ADVANCE(300); + if (lookahead == '[') ADVANCE(291); + if (lookahead == '\\') ADVANCE(289); + if (lookahead == '|') ADVANCE(301); + if (lookahead == '\t' || + lookahead == ' ') ADVANCE(297); + if (lookahead != 0 && + lookahead != '"') ADVANCE(288); END_STATE(); case 298: - ACCEPT_TOKEN(anon_sym_STAR); + ACCEPT_TOKEN(anon_sym_BSLASH_DQUOTE); END_STATE(); case 299: - ACCEPT_TOKEN(anon_sym_QMARK); + ACCEPT_TOKEN(anon_sym_STAR); END_STATE(); case 300: - ACCEPT_TOKEN(anon_sym_PIPE); + ACCEPT_TOKEN(anon_sym_QMARK); END_STATE(); case 301: - ACCEPT_TOKEN(aux_sym_pattern_token1); + ACCEPT_TOKEN(anon_sym_PIPE); END_STATE(); case 302: - ACCEPT_TOKEN(aux_sym_c_escape_token1); + ACCEPT_TOKEN(aux_sym_pattern_token1); END_STATE(); case 303: - ACCEPT_TOKEN(aux_sym_c_escape_token2); + ACCEPT_TOKEN(aux_sym_c_escape_token1); END_STATE(); case 304: ACCEPT_TOKEN(aux_sym_c_escape_token2); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(303); END_STATE(); case 305: ACCEPT_TOKEN(aux_sym_c_escape_token2); if (('0' <= lookahead && lookahead <= '9')) ADVANCE(304); END_STATE(); case 306: - ACCEPT_TOKEN(aux_sym_c_escape_token3); + ACCEPT_TOKEN(aux_sym_c_escape_token2); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(305); END_STATE(); case 307: - ACCEPT_TOKEN(aux_sym_c_escape_token4); + ACCEPT_TOKEN(aux_sym_c_escape_token3); END_STATE(); case 308: - ACCEPT_TOKEN(aux_sym_c_escape_token5); + ACCEPT_TOKEN(aux_sym_c_escape_token4); END_STATE(); case 309: - ACCEPT_TOKEN(anon_sym_PERCENTk); + ACCEPT_TOKEN(aux_sym_c_escape_token5); END_STATE(); case 310: - ACCEPT_TOKEN(anon_sym_PERCENTn); + ACCEPT_TOKEN(anon_sym_PERCENTk); END_STATE(); case 311: - ACCEPT_TOKEN(anon_sym_PERCENTp); + ACCEPT_TOKEN(anon_sym_PERCENTn); END_STATE(); case 312: - ACCEPT_TOKEN(anon_sym_PERCENTb); + ACCEPT_TOKEN(anon_sym_PERCENTp); END_STATE(); case 313: - ACCEPT_TOKEN(anon_sym_PERCENTs); + ACCEPT_TOKEN(anon_sym_PERCENTb); END_STATE(); case 314: - ACCEPT_TOKEN(anon_sym_PERCENTE); + ACCEPT_TOKEN(anon_sym_PERCENTs); END_STATE(); case 315: - ACCEPT_TOKEN(anon_sym_PERCENTM); + ACCEPT_TOKEN(anon_sym_PERCENTE); END_STATE(); case 316: - ACCEPT_TOKEN(anon_sym_PERCENTm); + ACCEPT_TOKEN(anon_sym_PERCENTM); END_STATE(); case 317: - ACCEPT_TOKEN(anon_sym_PERCENTc); + ACCEPT_TOKEN(anon_sym_PERCENTm); END_STATE(); case 318: - ACCEPT_TOKEN(anon_sym_PLUS); + ACCEPT_TOKEN(anon_sym_PERCENTc); END_STATE(); case 319: ACCEPT_TOKEN(anon_sym_PLUS); - if (lookahead == '=') ADVANCE(282); END_STATE(); case 320: - ACCEPT_TOKEN(anon_sym_RBRACE2); + ACCEPT_TOKEN(anon_sym_PLUS); + if (lookahead == '=') ADVANCE(283); END_STATE(); case 321: - ACCEPT_TOKEN(anon_sym_PERCENTP); + ACCEPT_TOKEN(anon_sym_RBRACE2); END_STATE(); case 322: - ACCEPT_TOKEN(anon_sym_PERCENTr); + ACCEPT_TOKEN(anon_sym_PERCENTP); END_STATE(); case 323: - ACCEPT_TOKEN(anon_sym_PERCENTS); + ACCEPT_TOKEN(anon_sym_PERCENTr); END_STATE(); case 324: - ACCEPT_TOKEN(anon_sym_PERCENTN); + ACCEPT_TOKEN(anon_sym_PERCENTS); END_STATE(); case 325: - ACCEPT_TOKEN(anon_sym_PERCENT_PERCENT); + ACCEPT_TOKEN(anon_sym_PERCENTN); END_STATE(); case 326: - ACCEPT_TOKEN(anon_sym_DOLLARkernel); + ACCEPT_TOKEN(anon_sym_PERCENT_PERCENT); END_STATE(); case 327: - ACCEPT_TOKEN(anon_sym_DOLLARnumber); + ACCEPT_TOKEN(anon_sym_DOLLARkernel); END_STATE(); case 328: - ACCEPT_TOKEN(anon_sym_DOLLARdevpath); + ACCEPT_TOKEN(anon_sym_DOLLARnumber); END_STATE(); case 329: - ACCEPT_TOKEN(anon_sym_DOLLARid); + ACCEPT_TOKEN(anon_sym_DOLLARdevpath); END_STATE(); case 330: - ACCEPT_TOKEN(anon_sym_DOLLARdriver); + ACCEPT_TOKEN(anon_sym_DOLLARid); END_STATE(); case 331: - ACCEPT_TOKEN(anon_sym_DOLLARattr); + ACCEPT_TOKEN(anon_sym_DOLLARdriver); END_STATE(); case 332: - ACCEPT_TOKEN(anon_sym_DOLLARenv); + ACCEPT_TOKEN(anon_sym_DOLLARattr); END_STATE(); case 333: - ACCEPT_TOKEN(anon_sym_DOLLARmajor); + ACCEPT_TOKEN(anon_sym_DOLLARenv); END_STATE(); case 334: - ACCEPT_TOKEN(anon_sym_DOLLARminor); + ACCEPT_TOKEN(anon_sym_DOLLARmajor); END_STATE(); case 335: - ACCEPT_TOKEN(anon_sym_DOLLARresult); + ACCEPT_TOKEN(anon_sym_DOLLARminor); END_STATE(); case 336: - ACCEPT_TOKEN(anon_sym_DOLLARparent); + ACCEPT_TOKEN(anon_sym_DOLLARresult); END_STATE(); case 337: - ACCEPT_TOKEN(anon_sym_DOLLARname); + ACCEPT_TOKEN(anon_sym_DOLLARparent); END_STATE(); case 338: - ACCEPT_TOKEN(anon_sym_DOLLARlinks); + ACCEPT_TOKEN(anon_sym_DOLLARname); END_STATE(); case 339: - ACCEPT_TOKEN(anon_sym_DOLLARroot); + ACCEPT_TOKEN(anon_sym_DOLLARlinks); END_STATE(); case 340: - ACCEPT_TOKEN(anon_sym_DOLLARsys); + ACCEPT_TOKEN(anon_sym_DOLLARroot); END_STATE(); case 341: - ACCEPT_TOKEN(anon_sym_DOLLARdevnode); + ACCEPT_TOKEN(anon_sym_DOLLARsys); END_STATE(); case 342: - ACCEPT_TOKEN(anon_sym_DOLLAR_DOLLAR); + ACCEPT_TOKEN(anon_sym_DOLLARdevnode); END_STATE(); case 343: - ACCEPT_TOKEN(sym_linebreak); + ACCEPT_TOKEN(anon_sym_DOLLAR_DOLLAR); END_STATE(); case 344: + ACCEPT_TOKEN(sym_linebreak); + END_STATE(); + case 345: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - lookahead != '\n') ADVANCE(344); + lookahead != '\n') ADVANCE(345); END_STATE(); default: return false; @@ -2531,7 +2555,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { static const TSLexMode ts_lex_modes[STATE_COUNT] = { [0] = {.lex_state = 0}, - [1] = {.lex_state = 236}, + [1] = {.lex_state = 237}, [2] = {.lex_state = 5}, [3] = {.lex_state = 5}, [4] = {.lex_state = 5}, @@ -2539,16 +2563,16 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [6] = {.lex_state = 4}, [7] = {.lex_state = 7}, [8] = {.lex_state = 5}, - [9] = {.lex_state = 5}, - [10] = {.lex_state = 5}, + [9] = {.lex_state = 7}, + [10] = {.lex_state = 7}, [11] = {.lex_state = 5}, [12] = {.lex_state = 5}, [13] = {.lex_state = 5}, - [14] = {.lex_state = 7}, + [14] = {.lex_state = 5}, [15] = {.lex_state = 5}, [16] = {.lex_state = 5}, [17] = {.lex_state = 5}, - [18] = {.lex_state = 7}, + [18] = {.lex_state = 5}, [19] = {.lex_state = 6}, [20] = {.lex_state = 6}, [21] = {.lex_state = 7}, @@ -2559,13 +2583,13 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [26] = {.lex_state = 7}, [27] = {.lex_state = 7}, [28] = {.lex_state = 7}, - [29] = {.lex_state = 236}, - [30] = {.lex_state = 236}, - [31] = {.lex_state = 236}, - [32] = {.lex_state = 236}, - [33] = {.lex_state = 236}, - [34] = {.lex_state = 236}, - [35] = {.lex_state = 236}, + [29] = {.lex_state = 237}, + [30] = {.lex_state = 237}, + [31] = {.lex_state = 237}, + [32] = {.lex_state = 237}, + [33] = {.lex_state = 237}, + [34] = {.lex_state = 237}, + [35] = {.lex_state = 237}, [36] = {.lex_state = 8}, [37] = {.lex_state = 8}, [38] = {.lex_state = 8}, @@ -2590,113 +2614,113 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [57] = {.lex_state = 10}, [58] = {.lex_state = 10}, [59] = {.lex_state = 10}, - [60] = {.lex_state = 236}, - [61] = {.lex_state = 236}, - [62] = {.lex_state = 236}, - [63] = {.lex_state = 236}, - [64] = {.lex_state = 236}, - [65] = {.lex_state = 236}, - [66] = {.lex_state = 0}, - [67] = {.lex_state = 236}, - [68] = {.lex_state = 0}, - [69] = {.lex_state = 0}, - [70] = {.lex_state = 236}, - [71] = {.lex_state = 0}, - [72] = {.lex_state = 0}, - [73] = {.lex_state = 0}, - [74] = {.lex_state = 0}, + [60] = {.lex_state = 0}, + [61] = {.lex_state = 0}, + [62] = {.lex_state = 0}, + [63] = {.lex_state = 237}, + [64] = {.lex_state = 237}, + [65] = {.lex_state = 237}, + [66] = {.lex_state = 237}, + [67] = {.lex_state = 0}, + [68] = {.lex_state = 237}, + [69] = {.lex_state = 237}, + [70] = {.lex_state = 0}, + [71] = {.lex_state = 237}, + [72] = {.lex_state = 237}, + [73] = {.lex_state = 237}, + [74] = {.lex_state = 237}, [75] = {.lex_state = 14}, - [76] = {.lex_state = 236}, - [77] = {.lex_state = 14}, - [78] = {.lex_state = 0}, + [76] = {.lex_state = 237}, + [77] = {.lex_state = 237}, + [78] = {.lex_state = 237}, [79] = {.lex_state = 14}, [80] = {.lex_state = 14}, - [81] = {.lex_state = 8}, + [81] = {.lex_state = 0}, [82] = {.lex_state = 14}, - [83] = {.lex_state = 236}, - [84] = {.lex_state = 14}, - [85] = {.lex_state = 0}, - [86] = {.lex_state = 236}, - [87] = {.lex_state = 236}, - [88] = {.lex_state = 236}, - [89] = {.lex_state = 236}, - [90] = {.lex_state = 0}, - [91] = {.lex_state = 236}, - [92] = {.lex_state = 14}, - [93] = {.lex_state = 14}, + [83] = {.lex_state = 0}, + [84] = {.lex_state = 0}, + [85] = {.lex_state = 14}, + [86] = {.lex_state = 0}, + [87] = {.lex_state = 237}, + [88] = {.lex_state = 0}, + [89] = {.lex_state = 14}, + [90] = {.lex_state = 8}, + [91] = {.lex_state = 0}, + [92] = {.lex_state = 0}, + [93] = {.lex_state = 0}, [94] = {.lex_state = 0}, - [95] = {.lex_state = 0}, + [95] = {.lex_state = 237}, [96] = {.lex_state = 0}, - [97] = {.lex_state = 14}, - [98] = {.lex_state = 0}, - [99] = {.lex_state = 0}, - [100] = {.lex_state = 0}, - [101] = {.lex_state = 0}, - [102] = {.lex_state = 0}, - [103] = {.lex_state = 14}, + [97] = {.lex_state = 0}, + [98] = {.lex_state = 14}, + [99] = {.lex_state = 8}, + [100] = {.lex_state = 14}, + [101] = {.lex_state = 14}, + [102] = {.lex_state = 14}, + [103] = {.lex_state = 0}, [104] = {.lex_state = 14}, [105] = {.lex_state = 14}, - [106] = {.lex_state = 8}, - [107] = {.lex_state = 236}, - [108] = {.lex_state = 0}, - [109] = {.lex_state = 236}, - [110] = {.lex_state = 236}, - [111] = {.lex_state = 236}, - [112] = {.lex_state = 236}, - [113] = {.lex_state = 236}, - [114] = {.lex_state = 236}, - [115] = {.lex_state = 236}, - [116] = {.lex_state = 236}, - [117] = {.lex_state = 236}, - [118] = {.lex_state = 14}, - [119] = {.lex_state = 0}, - [120] = {.lex_state = 236}, - [121] = {.lex_state = 0}, - [122] = {.lex_state = 0}, - [123] = {.lex_state = 236}, + [106] = {.lex_state = 0}, + [107] = {.lex_state = 0}, + [108] = {.lex_state = 8}, + [109] = {.lex_state = 237}, + [110] = {.lex_state = 237}, + [111] = {.lex_state = 16}, + [112] = {.lex_state = 237}, + [113] = {.lex_state = 237}, + [114] = {.lex_state = 0}, + [115] = {.lex_state = 0}, + [116] = {.lex_state = 0}, + [117] = {.lex_state = 14}, + [118] = {.lex_state = 0}, + [119] = {.lex_state = 237}, + [120] = {.lex_state = 0}, + [121] = {.lex_state = 237}, + [122] = {.lex_state = 237}, + [123] = {.lex_state = 0}, [124] = {.lex_state = 0}, - [125] = {.lex_state = 115}, - [126] = {.lex_state = 8}, - [127] = {.lex_state = 236}, - [128] = {.lex_state = 0}, - [129] = {.lex_state = 0}, - [130] = {.lex_state = 0}, - [131] = {.lex_state = 0}, - [132] = {.lex_state = 236}, - [133] = {.lex_state = 236}, + [125] = {.lex_state = 237}, + [126] = {.lex_state = 0}, + [127] = {.lex_state = 237}, + [128] = {.lex_state = 237}, + [129] = {.lex_state = 237}, + [130] = {.lex_state = 237}, + [131] = {.lex_state = 237}, + [132] = {.lex_state = 237}, + [133] = {.lex_state = 0}, [134] = {.lex_state = 0}, - [135] = {.lex_state = 236}, - [136] = {.lex_state = 236}, - [137] = {.lex_state = 115}, - [138] = {.lex_state = 115}, - [139] = {.lex_state = 0}, - [140] = {.lex_state = 0}, - [141] = {.lex_state = 8}, - [142] = {.lex_state = 0}, - [143] = {.lex_state = 236}, - [144] = {.lex_state = 0}, - [145] = {.lex_state = 236}, - [146] = {.lex_state = 0}, - [147] = {.lex_state = 14}, - [148] = {.lex_state = 236}, - [149] = {.lex_state = 236}, - [150] = {.lex_state = 0}, - [151] = {.lex_state = 14}, - [152] = {.lex_state = 0}, - [153] = {.lex_state = 114}, - [154] = {.lex_state = 115}, - [155] = {.lex_state = 0}, - [156] = {.lex_state = 8}, - [157] = {.lex_state = 115}, + [135] = {.lex_state = 0}, + [136] = {.lex_state = 0}, + [137] = {.lex_state = 0}, + [138] = {.lex_state = 0}, + [139] = {.lex_state = 237}, + [140] = {.lex_state = 8}, + [141] = {.lex_state = 0}, + [142] = {.lex_state = 237}, + [143] = {.lex_state = 0}, + [144] = {.lex_state = 237}, + [145] = {.lex_state = 16}, + [146] = {.lex_state = 14}, + [147] = {.lex_state = 237}, + [148] = {.lex_state = 237}, + [149] = {.lex_state = 0}, + [150] = {.lex_state = 14}, + [151] = {.lex_state = 0}, + [152] = {.lex_state = 237}, + [153] = {.lex_state = 237}, + [154] = {.lex_state = 237}, + [155] = {.lex_state = 8}, + [156] = {.lex_state = 237}, + [157] = {.lex_state = 237}, [158] = {.lex_state = 0}, - [159] = {.lex_state = 0}, - [160] = {.lex_state = 115}, + [159] = {.lex_state = 237}, + [160] = {.lex_state = 0}, [161] = {.lex_state = 0}, [162] = {.lex_state = 0}, [163] = {.lex_state = 0}, [164] = {.lex_state = 0}, [165] = {.lex_state = 0}, - [166] = {.lex_state = 0}, + [166] = {.lex_state = 115}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -2759,11 +2783,11 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_comment] = ACTIONS(1), }, [1] = { - [sym_rules] = STATE(129), - [sym_rule] = STATE(130), - [sym_match] = STATE(128), - [sym_assignment] = STATE(71), - [aux_sym_rules_repeat1] = STATE(29), + [sym_rules] = STATE(149), + [sym_rule] = STATE(143), + [sym_match] = STATE(151), + [sym_assignment] = STATE(70), + [aux_sym_rules_repeat1] = STATE(30), [aux_sym_rule_repeat1] = STATE(31), [ts_builtin_sym_end] = ACTIONS(5), [aux_sym_rules_token1] = ACTIONS(7), @@ -2807,39 +2831,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DQUOTE2, ACTIONS(45), 1, aux_sym_content_token1, - ACTIONS(57), 1, + ACTIONS(53), 1, anon_sym_PERCENTs, - ACTIONS(60), 1, + ACTIONS(55), 1, anon_sym_PERCENTE, - ACTIONS(63), 1, + ACTIONS(57), 1, anon_sym_PERCENTc, - ACTIONS(69), 1, + ACTIONS(61), 1, anon_sym_DOLLARattr, - ACTIONS(72), 1, + ACTIONS(63), 1, anon_sym_DOLLARenv, - ACTIONS(75), 1, + ACTIONS(65), 1, anon_sym_DOLLARresult, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - STATE(2), 1, + STATE(3), 1, aux_sym__sub_c_content, - ACTIONS(48), 4, + ACTIONS(47), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - STATE(12), 4, + STATE(8), 4, sym_pattern, sym_c_escape, sym_fmt_sub, sym_var_sub, - ACTIONS(51), 5, + ACTIONS(49), 5, aux_sym_c_escape_token1, aux_sym_c_escape_token2, aux_sym_c_escape_token3, aux_sym_c_escape_token4, aux_sym_c_escape_token5, - ACTIONS(54), 11, + ACTIONS(51), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, @@ -2851,7 +2875,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENTS, anon_sym_PERCENTN, anon_sym_PERCENT_PERCENT, - ACTIONS(66), 14, + ACTIONS(59), 14, anon_sym_DOLLARkernel, anon_sym_DOLLARnumber, anon_sym_DOLLARdevpath, @@ -2867,43 +2891,43 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [79] = 15, - ACTIONS(78), 1, - sym_linebreak, - ACTIONS(80), 1, - anon_sym_DQUOTE2, - ACTIONS(82), 1, + ACTIONS(45), 1, aux_sym_content_token1, - ACTIONS(90), 1, + ACTIONS(53), 1, anon_sym_PERCENTs, - ACTIONS(92), 1, + ACTIONS(55), 1, anon_sym_PERCENTE, - ACTIONS(94), 1, + ACTIONS(57), 1, anon_sym_PERCENTc, - ACTIONS(98), 1, + ACTIONS(61), 1, anon_sym_DOLLARattr, - ACTIONS(100), 1, + ACTIONS(63), 1, anon_sym_DOLLARenv, - ACTIONS(102), 1, + ACTIONS(65), 1, anon_sym_DOLLARresult, + ACTIONS(67), 1, + sym_linebreak, + ACTIONS(69), 1, + anon_sym_DQUOTE2, STATE(4), 1, aux_sym__sub_c_content, - ACTIONS(84), 4, + ACTIONS(47), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - STATE(12), 4, + STATE(8), 4, sym_pattern, sym_c_escape, sym_fmt_sub, sym_var_sub, - ACTIONS(86), 5, + ACTIONS(49), 5, aux_sym_c_escape_token1, aux_sym_c_escape_token2, aux_sym_c_escape_token3, aux_sym_c_escape_token4, aux_sym_c_escape_token5, - ACTIONS(88), 11, + ACTIONS(51), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, @@ -2915,7 +2939,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENTS, anon_sym_PERCENTN, anon_sym_PERCENT_PERCENT, - ACTIONS(96), 14, + ACTIONS(59), 14, anon_sym_DOLLARkernel, anon_sym_DOLLARnumber, anon_sym_DOLLARdevpath, @@ -2931,43 +2955,43 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [158] = 15, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(82), 1, + ACTIONS(71), 1, + anon_sym_DQUOTE2, + ACTIONS(73), 1, aux_sym_content_token1, - ACTIONS(90), 1, + ACTIONS(85), 1, anon_sym_PERCENTs, - ACTIONS(92), 1, + ACTIONS(88), 1, anon_sym_PERCENTE, - ACTIONS(94), 1, + ACTIONS(91), 1, anon_sym_PERCENTc, - ACTIONS(98), 1, + ACTIONS(97), 1, anon_sym_DOLLARattr, ACTIONS(100), 1, anon_sym_DOLLARenv, - ACTIONS(102), 1, + ACTIONS(103), 1, anon_sym_DOLLARresult, - ACTIONS(104), 1, - anon_sym_DQUOTE2, - STATE(2), 1, + STATE(4), 1, aux_sym__sub_c_content, - ACTIONS(84), 4, + ACTIONS(76), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - STATE(12), 4, + STATE(8), 4, sym_pattern, sym_c_escape, sym_fmt_sub, sym_var_sub, - ACTIONS(86), 5, + ACTIONS(79), 5, aux_sym_c_escape_token1, aux_sym_c_escape_token2, aux_sym_c_escape_token3, aux_sym_c_escape_token4, aux_sym_c_escape_token5, - ACTIONS(88), 11, + ACTIONS(82), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, @@ -2979,7 +3003,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENTS, anon_sym_PERCENTN, anon_sym_PERCENT_PERCENT, - ACTIONS(96), 14, + ACTIONS(94), 14, anon_sym_DOLLARkernel, anon_sym_DOLLARnumber, anon_sym_DOLLARdevpath, @@ -2995,7 +3019,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [237] = 4, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, ACTIONS(106), 1, anon_sym_LBRACE, @@ -3044,7 +3068,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [290] = 4, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, ACTIONS(112), 1, anon_sym_LBRACE, @@ -3093,7 +3117,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [343] = 14, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, ACTIONS(118), 1, anon_sym_DQUOTE2, @@ -3114,7 +3138,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(120), 2, aux_sym_content_token1, anon_sym_BSLASH_DQUOTE, - STATE(28), 3, + STATE(21), 3, sym_pattern, sym_fmt_sub, sym_var_sub, @@ -3151,7 +3175,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [415] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, ACTIONS(150), 1, anon_sym_DQUOTE2, @@ -3197,46 +3221,57 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARsys, anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, - [465] = 3, - ACTIONS(78), 1, + [465] = 14, + ACTIONS(67), 1, sym_linebreak, ACTIONS(154), 1, anon_sym_DQUOTE2, - ACTIONS(156), 41, + ACTIONS(162), 1, + anon_sym_PERCENTs, + ACTIONS(164), 1, + anon_sym_PERCENTE, + ACTIONS(166), 1, + anon_sym_PERCENTc, + ACTIONS(170), 1, + anon_sym_DOLLARattr, + ACTIONS(172), 1, + anon_sym_DOLLARenv, + ACTIONS(174), 1, + anon_sym_DOLLARresult, + STATE(7), 1, + aux_sym__sub_content, + ACTIONS(156), 2, aux_sym_content_token1, + anon_sym_BSLASH_DQUOTE, + STATE(21), 3, + sym_pattern, + sym_fmt_sub, + sym_var_sub, + ACTIONS(158), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - aux_sym_c_escape_token1, - aux_sym_c_escape_token2, - aux_sym_c_escape_token3, - aux_sym_c_escape_token4, - aux_sym_c_escape_token5, + ACTIONS(160), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, anon_sym_PERCENTb, - anon_sym_PERCENTs, - anon_sym_PERCENTE, anon_sym_PERCENTM, anon_sym_PERCENTm, - anon_sym_PERCENTc, anon_sym_PERCENTP, anon_sym_PERCENTr, anon_sym_PERCENTS, anon_sym_PERCENTN, anon_sym_PERCENT_PERCENT, + ACTIONS(168), 14, anon_sym_DOLLARkernel, anon_sym_DOLLARnumber, anon_sym_DOLLARdevpath, anon_sym_DOLLARid, anon_sym_DOLLARdriver, - anon_sym_DOLLARattr, - anon_sym_DOLLARenv, anon_sym_DOLLARmajor, anon_sym_DOLLARminor, - anon_sym_DOLLARresult, anon_sym_DOLLARparent, anon_sym_DOLLARname, anon_sym_DOLLARlinks, @@ -3244,46 +3279,57 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARsys, anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, - [515] = 3, - ACTIONS(78), 1, + [537] = 14, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(114), 1, + ACTIONS(162), 1, + anon_sym_PERCENTs, + ACTIONS(164), 1, + anon_sym_PERCENTE, + ACTIONS(166), 1, + anon_sym_PERCENTc, + ACTIONS(170), 1, + anon_sym_DOLLARattr, + ACTIONS(172), 1, + anon_sym_DOLLARenv, + ACTIONS(174), 1, + anon_sym_DOLLARresult, + ACTIONS(176), 1, anon_sym_DQUOTE2, - ACTIONS(116), 41, + STATE(9), 1, + aux_sym__sub_content, + ACTIONS(156), 2, aux_sym_content_token1, + anon_sym_BSLASH_DQUOTE, + STATE(21), 3, + sym_pattern, + sym_fmt_sub, + sym_var_sub, + ACTIONS(158), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - aux_sym_c_escape_token1, - aux_sym_c_escape_token2, - aux_sym_c_escape_token3, - aux_sym_c_escape_token4, - aux_sym_c_escape_token5, + ACTIONS(160), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, anon_sym_PERCENTb, - anon_sym_PERCENTs, - anon_sym_PERCENTE, anon_sym_PERCENTM, anon_sym_PERCENTm, - anon_sym_PERCENTc, anon_sym_PERCENTP, anon_sym_PERCENTr, anon_sym_PERCENTS, anon_sym_PERCENTN, anon_sym_PERCENT_PERCENT, + ACTIONS(168), 14, anon_sym_DOLLARkernel, anon_sym_DOLLARnumber, anon_sym_DOLLARdevpath, anon_sym_DOLLARid, anon_sym_DOLLARdriver, - anon_sym_DOLLARattr, - anon_sym_DOLLARenv, anon_sym_DOLLARmajor, anon_sym_DOLLARminor, - anon_sym_DOLLARresult, anon_sym_DOLLARparent, anon_sym_DOLLARname, anon_sym_DOLLARlinks, @@ -3291,12 +3337,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARsys, anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, - [565] = 3, - ACTIONS(78), 1, + [609] = 3, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(158), 1, + ACTIONS(178), 1, anon_sym_DQUOTE2, - ACTIONS(160), 41, + ACTIONS(180), 41, aux_sym_content_token1, anon_sym_STAR, anon_sym_QMARK, @@ -3338,12 +3384,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARsys, anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, - [615] = 3, - ACTIONS(78), 1, + [659] = 3, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(162), 1, + ACTIONS(114), 1, anon_sym_DQUOTE2, - ACTIONS(164), 41, + ACTIONS(116), 41, aux_sym_content_token1, anon_sym_STAR, anon_sym_QMARK, @@ -3385,12 +3431,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARsys, anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, - [665] = 3, - ACTIONS(78), 1, + [709] = 3, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(166), 1, + ACTIONS(182), 1, anon_sym_DQUOTE2, - ACTIONS(168), 41, + ACTIONS(184), 41, aux_sym_content_token1, anon_sym_STAR, anon_sym_QMARK, @@ -3432,57 +3478,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARsys, anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, - [715] = 14, - ACTIONS(78), 1, + [759] = 3, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(170), 1, - anon_sym_DQUOTE2, - ACTIONS(178), 1, - anon_sym_PERCENTs, - ACTIONS(180), 1, - anon_sym_PERCENTE, - ACTIONS(182), 1, - anon_sym_PERCENTc, ACTIONS(186), 1, - anon_sym_DOLLARattr, - ACTIONS(188), 1, - anon_sym_DOLLARenv, - ACTIONS(190), 1, - anon_sym_DOLLARresult, - STATE(7), 1, - aux_sym__sub_content, - ACTIONS(172), 2, + anon_sym_DQUOTE2, + ACTIONS(188), 41, aux_sym_content_token1, - anon_sym_BSLASH_DQUOTE, - STATE(28), 3, - sym_pattern, - sym_fmt_sub, - sym_var_sub, - ACTIONS(174), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(176), 11, + aux_sym_c_escape_token1, + aux_sym_c_escape_token2, + aux_sym_c_escape_token3, + aux_sym_c_escape_token4, + aux_sym_c_escape_token5, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, anon_sym_PERCENTb, + anon_sym_PERCENTs, + anon_sym_PERCENTE, anon_sym_PERCENTM, anon_sym_PERCENTm, + anon_sym_PERCENTc, anon_sym_PERCENTP, anon_sym_PERCENTr, anon_sym_PERCENTS, anon_sym_PERCENTN, anon_sym_PERCENT_PERCENT, - ACTIONS(184), 14, anon_sym_DOLLARkernel, anon_sym_DOLLARnumber, anon_sym_DOLLARdevpath, anon_sym_DOLLARid, anon_sym_DOLLARdriver, + anon_sym_DOLLARattr, + anon_sym_DOLLARenv, anon_sym_DOLLARmajor, anon_sym_DOLLARminor, + anon_sym_DOLLARresult, anon_sym_DOLLARparent, anon_sym_DOLLARname, anon_sym_DOLLARlinks, @@ -3490,12 +3525,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARsys, anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, - [787] = 3, - ACTIONS(78), 1, + [809] = 3, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(192), 1, + ACTIONS(108), 1, anon_sym_DQUOTE2, - ACTIONS(194), 41, + ACTIONS(110), 41, aux_sym_content_token1, anon_sym_STAR, anon_sym_QMARK, @@ -3537,12 +3572,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARsys, anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, - [837] = 3, - ACTIONS(78), 1, + [859] = 3, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(196), 1, + ACTIONS(190), 1, anon_sym_DQUOTE2, - ACTIONS(198), 41, + ACTIONS(192), 41, aux_sym_content_token1, anon_sym_STAR, anon_sym_QMARK, @@ -3584,12 +3619,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARsys, anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, - [887] = 3, - ACTIONS(78), 1, + [909] = 3, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(108), 1, + ACTIONS(194), 1, anon_sym_DQUOTE2, - ACTIONS(110), 41, + ACTIONS(196), 41, aux_sym_content_token1, anon_sym_STAR, anon_sym_QMARK, @@ -3631,57 +3666,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARsys, anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, - [937] = 14, - ACTIONS(78), 1, + [959] = 3, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(178), 1, - anon_sym_PERCENTs, - ACTIONS(180), 1, - anon_sym_PERCENTE, - ACTIONS(182), 1, - anon_sym_PERCENTc, - ACTIONS(186), 1, - anon_sym_DOLLARattr, - ACTIONS(188), 1, - anon_sym_DOLLARenv, - ACTIONS(190), 1, - anon_sym_DOLLARresult, - ACTIONS(200), 1, + ACTIONS(198), 1, anon_sym_DQUOTE2, - STATE(14), 1, - aux_sym__sub_content, - ACTIONS(172), 2, + ACTIONS(200), 41, aux_sym_content_token1, - anon_sym_BSLASH_DQUOTE, - STATE(28), 3, - sym_pattern, - sym_fmt_sub, - sym_var_sub, - ACTIONS(174), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(176), 11, + aux_sym_c_escape_token1, + aux_sym_c_escape_token2, + aux_sym_c_escape_token3, + aux_sym_c_escape_token4, + aux_sym_c_escape_token5, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, anon_sym_PERCENTb, + anon_sym_PERCENTs, + anon_sym_PERCENTE, anon_sym_PERCENTM, anon_sym_PERCENTm, + anon_sym_PERCENTc, anon_sym_PERCENTP, anon_sym_PERCENTr, anon_sym_PERCENTS, anon_sym_PERCENTN, anon_sym_PERCENT_PERCENT, - ACTIONS(184), 14, anon_sym_DOLLARkernel, anon_sym_DOLLARnumber, anon_sym_DOLLARdevpath, anon_sym_DOLLARid, anon_sym_DOLLARdriver, + anon_sym_DOLLARattr, + anon_sym_DOLLARenv, anon_sym_DOLLARmajor, anon_sym_DOLLARminor, + anon_sym_DOLLARresult, anon_sym_DOLLARparent, anon_sym_DOLLARname, anon_sym_DOLLARlinks, @@ -3690,7 +3714,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [1009] = 4, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, ACTIONS(114), 1, anon_sym_DQUOTE2, @@ -3735,7 +3759,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [1058] = 4, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, ACTIONS(108), 1, anon_sym_DQUOTE2, @@ -3780,11 +3804,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [1107] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(154), 1, + ACTIONS(206), 1, anon_sym_DQUOTE2, - ACTIONS(156), 37, + ACTIONS(208), 37, aux_sym_content_token1, anon_sym_BSLASH_DQUOTE, anon_sym_STAR, @@ -3823,7 +3847,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [1153] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, ACTIONS(114), 1, anon_sym_DQUOTE2, @@ -3866,11 +3890,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [1199] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(158), 1, + ACTIONS(186), 1, anon_sym_DQUOTE2, - ACTIONS(160), 37, + ACTIONS(188), 37, aux_sym_content_token1, anon_sym_BSLASH_DQUOTE, anon_sym_STAR, @@ -3909,11 +3933,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [1245] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(166), 1, + ACTIONS(108), 1, anon_sym_DQUOTE2, - ACTIONS(168), 37, + ACTIONS(110), 37, aux_sym_content_token1, anon_sym_BSLASH_DQUOTE, anon_sym_STAR, @@ -3952,11 +3976,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [1291] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(108), 1, + ACTIONS(190), 1, anon_sym_DQUOTE2, - ACTIONS(110), 37, + ACTIONS(192), 37, aux_sym_content_token1, anon_sym_BSLASH_DQUOTE, anon_sym_STAR, @@ -3995,11 +4019,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [1337] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(150), 1, + ACTIONS(198), 1, anon_sym_DQUOTE2, - ACTIONS(152), 37, + ACTIONS(200), 37, aux_sym_content_token1, anon_sym_BSLASH_DQUOTE, anon_sym_STAR, @@ -4038,11 +4062,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [1383] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(196), 1, + ACTIONS(194), 1, anon_sym_DQUOTE2, - ACTIONS(198), 37, + ACTIONS(196), 37, aux_sym_content_token1, anon_sym_BSLASH_DQUOTE, anon_sym_STAR, @@ -4081,11 +4105,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOLLARdevnode, anon_sym_DOLLAR_DOLLAR, [1429] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(206), 1, + ACTIONS(178), 1, anon_sym_DQUOTE2, - ACTIONS(208), 37, + ACTIONS(180), 37, aux_sym_content_token1, anon_sym_BSLASH_DQUOTE, anon_sym_STAR, @@ -4126,60 +4150,60 @@ static const uint16_t ts_small_parse_table[] = { [1475] = 25, ACTIONS(3), 1, sym_linebreak, - ACTIONS(15), 1, + ACTIONS(210), 1, + ts_builtin_sym_end, + ACTIONS(212), 1, + aux_sym_rules_token1, + ACTIONS(224), 1, anon_sym_ATTR, - ACTIONS(17), 1, + ACTIONS(227), 1, anon_sym_ATTRS, - ACTIONS(19), 1, + ACTIONS(230), 1, anon_sym_SYSCTL, - ACTIONS(21), 1, + ACTIONS(233), 1, anon_sym_ENV, - ACTIONS(23), 1, + ACTIONS(236), 1, anon_sym_CONST, - ACTIONS(25), 1, + ACTIONS(239), 1, anon_sym_TAG, - ACTIONS(27), 1, + ACTIONS(242), 1, anon_sym_TEST, - ACTIONS(29), 1, + ACTIONS(245), 1, anon_sym_PROGRAM, - ACTIONS(33), 1, + ACTIONS(251), 1, anon_sym_SECLABEL, - ACTIONS(35), 1, + ACTIONS(254), 1, anon_sym_RUN, - ACTIONS(39), 1, + ACTIONS(260), 1, anon_sym_IMPORT, - ACTIONS(41), 1, + ACTIONS(263), 1, sym_comment, - ACTIONS(210), 1, - ts_builtin_sym_end, - ACTIONS(212), 1, - aux_sym_rules_token1, - STATE(30), 1, + STATE(29), 1, aux_sym_rules_repeat1, STATE(31), 1, aux_sym_rule_repeat1, - STATE(71), 1, + STATE(70), 1, sym_assignment, - STATE(128), 1, - sym_match, - STATE(130), 1, + STATE(143), 1, sym_rule, - ACTIONS(13), 2, + STATE(151), 1, + sym_match, + ACTIONS(221), 2, anon_sym_NAME, anon_sym_SYMLINK, - ACTIONS(11), 3, + ACTIONS(218), 3, anon_sym_KERNEL, anon_sym_SUBSYSTEM, anon_sym_DRIVER, - ACTIONS(31), 3, + ACTIONS(248), 3, anon_sym_OWNER, anon_sym_GROUP, anon_sym_MODE, - ACTIONS(37), 3, + ACTIONS(257), 3, anon_sym_LABEL, anon_sym_GOTO, anon_sym_OPTIONS, - ACTIONS(9), 7, + ACTIONS(215), 7, anon_sym_ACTION, anon_sym_DEVPATH, anon_sym_KERNELS, @@ -4190,60 +4214,60 @@ static const uint16_t ts_small_parse_table[] = { [1564] = 25, ACTIONS(3), 1, sym_linebreak, - ACTIONS(214), 1, - ts_builtin_sym_end, - ACTIONS(216), 1, - aux_sym_rules_token1, - ACTIONS(228), 1, + ACTIONS(15), 1, anon_sym_ATTR, - ACTIONS(231), 1, + ACTIONS(17), 1, anon_sym_ATTRS, - ACTIONS(234), 1, + ACTIONS(19), 1, anon_sym_SYSCTL, - ACTIONS(237), 1, + ACTIONS(21), 1, anon_sym_ENV, - ACTIONS(240), 1, + ACTIONS(23), 1, anon_sym_CONST, - ACTIONS(243), 1, + ACTIONS(25), 1, anon_sym_TAG, - ACTIONS(246), 1, + ACTIONS(27), 1, anon_sym_TEST, - ACTIONS(249), 1, + ACTIONS(29), 1, anon_sym_PROGRAM, - ACTIONS(255), 1, + ACTIONS(33), 1, anon_sym_SECLABEL, - ACTIONS(258), 1, + ACTIONS(35), 1, anon_sym_RUN, - ACTIONS(264), 1, + ACTIONS(39), 1, anon_sym_IMPORT, - ACTIONS(267), 1, + ACTIONS(41), 1, sym_comment, - STATE(30), 1, + ACTIONS(266), 1, + ts_builtin_sym_end, + ACTIONS(268), 1, + aux_sym_rules_token1, + STATE(29), 1, aux_sym_rules_repeat1, STATE(31), 1, aux_sym_rule_repeat1, - STATE(71), 1, + STATE(70), 1, sym_assignment, - STATE(128), 1, - sym_match, - STATE(130), 1, + STATE(143), 1, sym_rule, - ACTIONS(225), 2, - anon_sym_NAME, + STATE(151), 1, + sym_match, + ACTIONS(13), 2, + anon_sym_NAME, anon_sym_SYMLINK, - ACTIONS(222), 3, + ACTIONS(11), 3, anon_sym_KERNEL, anon_sym_SUBSYSTEM, anon_sym_DRIVER, - ACTIONS(252), 3, + ACTIONS(31), 3, anon_sym_OWNER, anon_sym_GROUP, anon_sym_MODE, - ACTIONS(261), 3, + ACTIONS(37), 3, anon_sym_LABEL, anon_sym_GOTO, anon_sym_OPTIONS, - ACTIONS(219), 7, + ACTIONS(9), 7, anon_sym_ACTION, anon_sym_DEVPATH, anon_sym_KERNELS, @@ -4278,9 +4302,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_IMPORT, STATE(34), 1, aux_sym_rule_repeat1, - STATE(72), 1, + STATE(60), 1, sym_assignment, - STATE(128), 1, + STATE(151), 1, sym_match, ACTIONS(13), 2, anon_sym_NAME, @@ -4314,7 +4338,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DRIVER, anon_sym_ATTR, anon_sym_TAG, - ACTIONS(214), 27, + ACTIONS(210), 27, ts_builtin_sym_end, aux_sym_rules_token1, anon_sym_ACTION, @@ -4370,7 +4394,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(13), 2, anon_sym_NAME, anon_sym_SYMLINK, - STATE(96), 2, + STATE(94), 2, sym_match, sym_assignment, ACTIONS(11), 3, @@ -4412,7 +4436,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PROGRAM, STATE(34), 1, aux_sym_rule_repeat1, - STATE(128), 1, + STATE(151), 1, sym_match, ACTIONS(278), 2, anon_sym_NAME, @@ -4478,25 +4502,25 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 1, sym_linebreak, ACTIONS(306), 1, - anon_sym_RBRACE, - ACTIONS(308), 1, aux_sym_attribute_token1, - ACTIONS(317), 1, + ACTIONS(312), 1, anon_sym_PERCENTs, - ACTIONS(320), 1, + ACTIONS(314), 1, anon_sym_PERCENTE, - ACTIONS(323), 1, + ACTIONS(316), 1, anon_sym_PERCENTc, - STATE(36), 3, + STATE(152), 1, + sym_attribute, + STATE(40), 3, sym_pattern, sym_fmt_sub, aux_sym_attribute_repeat1, - ACTIONS(311), 4, + ACTIONS(308), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(314), 11, + ACTIONS(310), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, @@ -4511,26 +4535,26 @@ static const uint16_t ts_small_parse_table[] = { [1977] = 9, ACTIONS(3), 1, sym_linebreak, - ACTIONS(326), 1, + ACTIONS(318), 1, + anon_sym_RBRACE, + ACTIONS(320), 1, aux_sym_attribute_token1, - ACTIONS(332), 1, + ACTIONS(329), 1, anon_sym_PERCENTs, - ACTIONS(334), 1, + ACTIONS(332), 1, anon_sym_PERCENTE, - ACTIONS(336), 1, + ACTIONS(335), 1, anon_sym_PERCENTc, - STATE(109), 1, - sym_attribute, - STATE(39), 3, + STATE(37), 3, sym_pattern, sym_fmt_sub, aux_sym_attribute_repeat1, - ACTIONS(328), 4, + ACTIONS(323), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(330), 11, + ACTIONS(326), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, @@ -4545,26 +4569,26 @@ static const uint16_t ts_small_parse_table[] = { [2020] = 9, ACTIONS(3), 1, sym_linebreak, - ACTIONS(326), 1, + ACTIONS(306), 1, aux_sym_attribute_token1, - ACTIONS(332), 1, + ACTIONS(312), 1, anon_sym_PERCENTs, - ACTIONS(334), 1, + ACTIONS(314), 1, anon_sym_PERCENTE, - ACTIONS(336), 1, + ACTIONS(316), 1, anon_sym_PERCENTc, - STATE(115), 1, + STATE(112), 1, sym_attribute, - STATE(39), 3, + STATE(40), 3, sym_pattern, sym_fmt_sub, aux_sym_attribute_repeat1, - ACTIONS(328), 4, + ACTIONS(308), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(330), 11, + ACTIONS(310), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, @@ -4579,26 +4603,26 @@ static const uint16_t ts_small_parse_table[] = { [2063] = 9, ACTIONS(3), 1, sym_linebreak, - ACTIONS(332), 1, + ACTIONS(306), 1, + aux_sym_attribute_token1, + ACTIONS(312), 1, anon_sym_PERCENTs, - ACTIONS(334), 1, + ACTIONS(314), 1, anon_sym_PERCENTE, - ACTIONS(336), 1, + ACTIONS(316), 1, anon_sym_PERCENTc, - ACTIONS(338), 1, - anon_sym_RBRACE, - ACTIONS(340), 1, - aux_sym_attribute_token1, - STATE(36), 3, + STATE(127), 1, + sym_attribute, + STATE(40), 3, sym_pattern, sym_fmt_sub, aux_sym_attribute_repeat1, - ACTIONS(328), 4, + ACTIONS(308), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(330), 11, + ACTIONS(310), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, @@ -4613,26 +4637,26 @@ static const uint16_t ts_small_parse_table[] = { [2106] = 9, ACTIONS(3), 1, sym_linebreak, - ACTIONS(326), 1, - aux_sym_attribute_token1, - ACTIONS(332), 1, + ACTIONS(312), 1, anon_sym_PERCENTs, - ACTIONS(334), 1, + ACTIONS(314), 1, anon_sym_PERCENTE, - ACTIONS(336), 1, + ACTIONS(316), 1, anon_sym_PERCENTc, - STATE(117), 1, - sym_attribute, - STATE(39), 3, + ACTIONS(338), 1, + anon_sym_RBRACE, + ACTIONS(340), 1, + aux_sym_attribute_token1, + STATE(37), 3, sym_pattern, sym_fmt_sub, aux_sym_attribute_repeat1, - ACTIONS(328), 4, + ACTIONS(308), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(330), 11, + ACTIONS(310), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, @@ -4647,26 +4671,26 @@ static const uint16_t ts_small_parse_table[] = { [2149] = 9, ACTIONS(3), 1, sym_linebreak, - ACTIONS(326), 1, + ACTIONS(306), 1, aux_sym_attribute_token1, - ACTIONS(332), 1, + ACTIONS(312), 1, anon_sym_PERCENTs, - ACTIONS(334), 1, + ACTIONS(314), 1, anon_sym_PERCENTE, - ACTIONS(336), 1, + ACTIONS(316), 1, anon_sym_PERCENTc, - STATE(116), 1, + STATE(125), 1, sym_attribute, - STATE(39), 3, + STATE(40), 3, sym_pattern, sym_fmt_sub, aux_sym_attribute_repeat1, - ACTIONS(328), 4, + ACTIONS(308), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(330), 11, + ACTIONS(310), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, @@ -4681,26 +4705,26 @@ static const uint16_t ts_small_parse_table[] = { [2192] = 9, ACTIONS(3), 1, sym_linebreak, - ACTIONS(326), 1, + ACTIONS(306), 1, aux_sym_attribute_token1, - ACTIONS(332), 1, + ACTIONS(312), 1, anon_sym_PERCENTs, - ACTIONS(334), 1, + ACTIONS(314), 1, anon_sym_PERCENTE, - ACTIONS(336), 1, + ACTIONS(316), 1, anon_sym_PERCENTc, - STATE(149), 1, + STATE(142), 1, sym_attribute, - STATE(39), 3, + STATE(40), 3, sym_pattern, sym_fmt_sub, aux_sym_attribute_repeat1, - ACTIONS(328), 4, + ACTIONS(308), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(330), 11, + ACTIONS(310), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, @@ -4715,26 +4739,26 @@ static const uint16_t ts_small_parse_table[] = { [2235] = 9, ACTIONS(3), 1, sym_linebreak, - ACTIONS(326), 1, + ACTIONS(306), 1, aux_sym_attribute_token1, - ACTIONS(332), 1, + ACTIONS(312), 1, anon_sym_PERCENTs, - ACTIONS(334), 1, + ACTIONS(314), 1, anon_sym_PERCENTE, - ACTIONS(336), 1, + ACTIONS(316), 1, anon_sym_PERCENTc, - STATE(143), 1, + STATE(144), 1, sym_attribute, - STATE(39), 3, + STATE(40), 3, sym_pattern, sym_fmt_sub, aux_sym_attribute_repeat1, - ACTIONS(328), 4, + ACTIONS(308), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(330), 11, + ACTIONS(310), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, @@ -4749,26 +4773,26 @@ static const uint16_t ts_small_parse_table[] = { [2278] = 9, ACTIONS(3), 1, sym_linebreak, - ACTIONS(326), 1, + ACTIONS(306), 1, aux_sym_attribute_token1, - ACTIONS(332), 1, + ACTIONS(312), 1, anon_sym_PERCENTs, - ACTIONS(334), 1, + ACTIONS(314), 1, anon_sym_PERCENTE, - ACTIONS(336), 1, + ACTIONS(316), 1, anon_sym_PERCENTc, - STATE(145), 1, + STATE(148), 1, sym_attribute, - STATE(39), 3, + STATE(40), 3, sym_pattern, sym_fmt_sub, aux_sym_attribute_repeat1, - ACTIONS(328), 4, + ACTIONS(308), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(330), 11, + ACTIONS(310), 11, anon_sym_PERCENTk, anon_sym_PERCENTn, anon_sym_PERCENTp, @@ -4785,7 +4809,7 @@ static const uint16_t ts_small_parse_table[] = { sym_linebreak, ACTIONS(342), 1, anon_sym_LBRACE, - ACTIONS(114), 20, + ACTIONS(108), 20, anon_sym_RBRACE, aux_sym_attribute_token1, anon_sym_STAR, @@ -4809,7 +4833,7 @@ static const uint16_t ts_small_parse_table[] = { [2350] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(150), 20, + ACTIONS(194), 20, anon_sym_RBRACE, aux_sym_attribute_token1, anon_sym_STAR, @@ -4833,7 +4857,7 @@ static const uint16_t ts_small_parse_table[] = { [2376] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(154), 20, + ACTIONS(190), 20, anon_sym_RBRACE, aux_sym_attribute_token1, anon_sym_STAR, @@ -4857,7 +4881,7 @@ static const uint16_t ts_small_parse_table[] = { [2402] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(196), 20, + ACTIONS(198), 20, anon_sym_RBRACE, aux_sym_attribute_token1, anon_sym_STAR, @@ -4881,7 +4905,7 @@ static const uint16_t ts_small_parse_table[] = { [2428] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(114), 20, + ACTIONS(108), 20, anon_sym_RBRACE, aux_sym_attribute_token1, anon_sym_STAR, @@ -4903,7 +4927,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PERCENTN, anon_sym_PERCENT_PERCENT, [2454] = 7, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, ACTIONS(344), 1, anon_sym_DQUOTE2, @@ -4926,57 +4950,57 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_c_escape_token4, aux_sym_c_escape_token5, [2484] = 7, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(346), 1, - aux_sym_content_token1, ACTIONS(352), 1, anon_sym_DQUOTE2, - STATE(52), 1, + ACTIONS(354), 1, + aux_sym_content_token1, + STATE(51), 1, aux_sym__c_content, STATE(54), 2, sym_pattern, sym_c_escape, - ACTIONS(348), 4, + ACTIONS(357), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(350), 5, + ACTIONS(360), 5, aux_sym_c_escape_token1, aux_sym_c_escape_token2, aux_sym_c_escape_token3, aux_sym_c_escape_token4, aux_sym_c_escape_token5, [2514] = 7, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(354), 1, - anon_sym_DQUOTE2, - ACTIONS(356), 1, + ACTIONS(346), 1, aux_sym_content_token1, - STATE(52), 1, + ACTIONS(363), 1, + anon_sym_DQUOTE2, + STATE(50), 1, aux_sym__c_content, STATE(54), 2, sym_pattern, sym_c_escape, - ACTIONS(359), 4, + ACTIONS(348), 4, anon_sym_STAR, anon_sym_QMARK, anon_sym_PIPE, aux_sym_pattern_token1, - ACTIONS(362), 5, + ACTIONS(350), 5, aux_sym_c_escape_token1, aux_sym_c_escape_token2, aux_sym_c_escape_token3, aux_sym_c_escape_token4, aux_sym_c_escape_token5, [2544] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(196), 1, + ACTIONS(182), 1, anon_sym_DQUOTE2, - ACTIONS(198), 10, + ACTIONS(184), 10, aux_sym_content_token1, anon_sym_STAR, anon_sym_QMARK, @@ -4988,7 +5012,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_c_escape_token4, aux_sym_c_escape_token5, [2563] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, ACTIONS(365), 1, anon_sym_DQUOTE2, @@ -5004,11 +5028,11 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_c_escape_token4, aux_sym_c_escape_token5, [2582] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(192), 1, + ACTIONS(198), 1, anon_sym_DQUOTE2, - ACTIONS(194), 10, + ACTIONS(200), 10, aux_sym_content_token1, anon_sym_STAR, anon_sym_QMARK, @@ -5020,11 +5044,11 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_c_escape_token4, aux_sym_c_escape_token5, [2601] = 6, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, ACTIONS(369), 1, anon_sym_DQUOTE2, - STATE(156), 1, + STATE(140), 1, sym_content, ACTIONS(371), 2, aux_sym_content_token1, @@ -5038,7 +5062,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, aux_sym_pattern_token1, [2625] = 5, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, ACTIONS(375), 1, anon_sym_DQUOTE2, @@ -5054,7 +5078,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, aux_sym_pattern_token1, [2646] = 5, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, ACTIONS(383), 1, anon_sym_DQUOTE2, @@ -5070,11 +5094,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, aux_sym_pattern_token1, [2667] = 3, - ACTIONS(78), 1, + ACTIONS(67), 1, sym_linebreak, - ACTIONS(196), 1, + ACTIONS(198), 1, anon_sym_DQUOTE2, - ACTIONS(198), 6, + ACTIONS(200), 6, aux_sym_content_token1, anon_sym_BSLASH_DQUOTE, anon_sym_STAR, @@ -5085,430 +5109,430 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 1, sym_linebreak, ACTIONS(387), 1, - anon_sym_DQUOTE, + aux_sym_rules_token1, ACTIONS(389), 1, - anon_sym_e, - STATE(95), 1, - sym__sub_value, + anon_sym_COMMA, + STATE(62), 1, + aux_sym_rule_repeat2, [2695] = 4, ACTIONS(3), 1, sym_linebreak, - ACTIONS(387), 1, - anon_sym_DQUOTE, - ACTIONS(389), 1, - anon_sym_e, - STATE(98), 1, - sym__sub_value, + ACTIONS(391), 1, + aux_sym_rules_token1, + ACTIONS(393), 1, + anon_sym_COMMA, + STATE(61), 1, + aux_sym_rule_repeat2, [2708] = 4, ACTIONS(3), 1, sym_linebreak, - ACTIONS(387), 1, - anon_sym_DQUOTE, ACTIONS(389), 1, - anon_sym_e, - STATE(100), 1, - sym__sub_value, + anon_sym_COMMA, + ACTIONS(396), 1, + aux_sym_rules_token1, + STATE(61), 1, + aux_sym_rule_repeat2, [2721] = 4, ACTIONS(3), 1, sym_linebreak, - ACTIONS(391), 1, + ACTIONS(398), 1, anon_sym_DQUOTE, - ACTIONS(393), 1, + ACTIONS(400), 1, anon_sym_e, - STATE(98), 1, - sym_value, + STATE(93), 1, + sym__sub_value, [2734] = 4, ACTIONS(3), 1, sym_linebreak, - ACTIONS(391), 1, + ACTIONS(402), 1, anon_sym_DQUOTE, - ACTIONS(393), 1, + ACTIONS(404), 1, anon_sym_e, - STATE(100), 1, + STATE(92), 1, sym_value, [2747] = 4, ACTIONS(3), 1, sym_linebreak, - ACTIONS(391), 1, + ACTIONS(398), 1, anon_sym_DQUOTE, - ACTIONS(393), 1, + ACTIONS(400), 1, anon_sym_e, - STATE(95), 1, - sym_value, + STATE(86), 1, + sym__sub_value, [2760] = 4, ACTIONS(3), 1, sym_linebreak, - ACTIONS(395), 1, - aux_sym_rules_token1, - ACTIONS(397), 1, - anon_sym_COMMA, - STATE(68), 1, - aux_sym_rule_repeat2, - [2773] = 4, - ACTIONS(3), 1, - sym_linebreak, - ACTIONS(387), 1, + ACTIONS(398), 1, anon_sym_DQUOTE, - ACTIONS(389), 1, + ACTIONS(400), 1, anon_sym_e, - STATE(90), 1, + STATE(106), 1, sym__sub_value, - [2786] = 4, + [2773] = 4, ACTIONS(3), 1, sym_linebreak, - ACTIONS(399), 1, + ACTIONS(387), 1, aux_sym_rules_token1, - ACTIONS(401), 1, + ACTIONS(389), 1, anon_sym_COMMA, - STATE(68), 1, + STATE(61), 1, aux_sym_rule_repeat2, - [2799] = 4, + [2786] = 4, ACTIONS(3), 1, sym_linebreak, - ACTIONS(397), 1, - anon_sym_COMMA, + ACTIONS(402), 1, + anon_sym_DQUOTE, ACTIONS(404), 1, - aux_sym_rules_token1, - STATE(68), 1, - aux_sym_rule_repeat2, - [2812] = 4, + anon_sym_e, + STATE(86), 1, + sym_value, + [2799] = 4, ACTIONS(3), 1, sym_linebreak, - ACTIONS(391), 1, + ACTIONS(402), 1, anon_sym_DQUOTE, - ACTIONS(393), 1, + ACTIONS(404), 1, anon_sym_e, - STATE(90), 1, + STATE(93), 1, sym_value, - [2825] = 4, + [2812] = 4, ACTIONS(3), 1, sym_linebreak, - ACTIONS(397), 1, + ACTIONS(389), 1, anon_sym_COMMA, ACTIONS(406), 1, aux_sym_rules_token1, - STATE(66), 1, + STATE(67), 1, aux_sym_rule_repeat2, - [2838] = 4, + [2825] = 4, ACTIONS(3), 1, sym_linebreak, - ACTIONS(395), 1, - aux_sym_rules_token1, - ACTIONS(397), 1, - anon_sym_COMMA, - STATE(69), 1, - aux_sym_rule_repeat2, - [2851] = 2, + ACTIONS(398), 1, + anon_sym_DQUOTE, + ACTIONS(400), 1, + anon_sym_e, + STATE(92), 1, + sym__sub_value, + [2838] = 4, ACTIONS(3), 1, sym_linebreak, - ACTIONS(408), 2, - aux_sym_rules_token1, - anon_sym_COMMA, - [2859] = 2, + ACTIONS(402), 1, + anon_sym_DQUOTE, + ACTIONS(404), 1, + anon_sym_e, + STATE(106), 1, + sym_value, + [2851] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(410), 2, - aux_sym_rules_token1, - anon_sym_COMMA, - [2867] = 3, + ACTIONS(408), 1, + anon_sym_LBRACE, + ACTIONS(410), 1, + sym_assignment_op, + [2861] = 3, ACTIONS(3), 1, sym_linebreak, ACTIONS(412), 1, - aux_sym_env_var_token1, - STATE(149), 1, - sym_env_var, - [2877] = 3, - ACTIONS(3), 1, - sym_linebreak, - ACTIONS(414), 1, sym_match_op, - ACTIONS(416), 1, + ACTIONS(414), 1, sym_assignment_op, - [2887] = 3, + [2871] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(412), 1, + ACTIONS(416), 1, aux_sym_env_var_token1, - STATE(145), 1, + STATE(152), 1, sym_env_var, - [2897] = 2, - ACTIONS(3), 1, - sym_linebreak, - ACTIONS(418), 2, - aux_sym_rules_token1, - anon_sym_COMMA, - [2905] = 3, + [2881] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(412), 1, - aux_sym_env_var_token1, - STATE(143), 1, - sym_env_var, - [2915] = 3, + ACTIONS(418), 1, + sym_match_op, + ACTIONS(420), 1, + sym_assignment_op, + [2891] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(420), 1, - anon_sym_PLUS, ACTIONS(422), 1, - anon_sym_RBRACE2, - [2925] = 3, + sym_match_op, + ACTIONS(424), 1, + sym_assignment_op, + [2901] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(424), 1, - anon_sym_RBRACE, + ACTIONS(420), 1, + sym_assignment_op, ACTIONS(426), 1, - anon_sym_PLUS, - [2935] = 3, + sym_match_op, + [2911] = 3, ACTIONS(3), 1, sym_linebreak, ACTIONS(428), 1, - anon_sym_PLUS, - ACTIONS(430), 1, - anon_sym_RBRACE2, - [2945] = 3, - ACTIONS(3), 1, - sym_linebreak, - ACTIONS(432), 1, - sym_match_op, - ACTIONS(434), 1, - sym_assignment_op, - [2955] = 3, + aux_sym_env_var_token1, + STATE(127), 1, + sym_kernel_param, + [2921] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(412), 1, + ACTIONS(416), 1, aux_sym_env_var_token1, STATE(109), 1, sym_env_var, - [2965] = 3, + [2931] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(432), 1, - sym_match_op, - ACTIONS(436), 1, - anon_sym_LBRACE, - [2975] = 3, + ACTIONS(430), 2, + aux_sym_rules_token1, + anon_sym_COMMA, + [2939] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(438), 1, - sym_match_op, - ACTIONS(440), 1, - sym_assignment_op, - [2985] = 3, + ACTIONS(416), 1, + aux_sym_env_var_token1, + STATE(112), 1, + sym_env_var, + [2949] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(414), 1, - sym_match_op, - ACTIONS(442), 1, - sym_assignment_op, - [2995] = 3, + ACTIONS(432), 2, + aux_sym_rules_token1, + anon_sym_COMMA, + [2957] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(444), 1, - anon_sym_LBRACE, - ACTIONS(446), 1, - sym_assignment_op, - [3005] = 3, + ACTIONS(434), 2, + aux_sym_rules_token1, + anon_sym_COMMA, + [2965] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(448), 1, - sym_match_op, - ACTIONS(450), 1, - sym_assignment_op, - [3015] = 2, + ACTIONS(436), 1, + anon_sym_PLUS, + ACTIONS(438), 1, + anon_sym_RBRACE2, + [2975] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(452), 2, + ACTIONS(440), 2, aux_sym_rules_token1, anon_sym_COMMA, - [3023] = 3, + [2983] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(440), 1, - sym_assignment_op, - ACTIONS(454), 1, + ACTIONS(412), 1, sym_match_op, - [3033] = 3, + ACTIONS(442), 1, + sym_assignment_op, + [2993] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(456), 1, - aux_sym_env_var_token1, - STATE(115), 1, - sym_kernel_param, - [3043] = 3, + ACTIONS(444), 2, + aux_sym_rules_token1, + anon_sym_COMMA, + [3001] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(412), 1, + ACTIONS(416), 1, aux_sym_env_var_token1, - STATE(114), 1, + STATE(148), 1, sym_env_var, - [3053] = 2, + [3011] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(458), 2, - aux_sym_rules_token1, - anon_sym_COMMA, - [3061] = 2, + ACTIONS(446), 1, + anon_sym_RBRACE, + ACTIONS(448), 1, + anon_sym_PLUS, + [3021] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(460), 2, + ACTIONS(450), 2, aux_sym_rules_token1, anon_sym_COMMA, - [3069] = 2, + [3029] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(399), 2, + ACTIONS(452), 2, aux_sym_rules_token1, anon_sym_COMMA, - [3077] = 3, + [3037] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(412), 1, - aux_sym_env_var_token1, - STATE(116), 1, - sym_env_var, - [3087] = 2, - ACTIONS(3), 1, - sym_linebreak, - ACTIONS(462), 2, + ACTIONS(454), 2, aux_sym_rules_token1, anon_sym_COMMA, - [3095] = 2, + [3045] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(464), 2, + ACTIONS(391), 2, aux_sym_rules_token1, anon_sym_COMMA, - [3103] = 2, + [3053] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(466), 2, - aux_sym_rules_token1, - anon_sym_COMMA, - [3111] = 2, + ACTIONS(456), 1, + sym_match_op, + ACTIONS(458), 1, + sym_assignment_op, + [3063] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(468), 2, + ACTIONS(460), 2, aux_sym_rules_token1, anon_sym_COMMA, - [3119] = 2, + [3071] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(470), 2, - aux_sym_rules_token1, - anon_sym_COMMA, - [3127] = 3, + ACTIONS(456), 1, + sym_match_op, + ACTIONS(462), 1, + anon_sym_LBRACE, + [3081] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(412), 1, - aux_sym_env_var_token1, - STATE(111), 1, - sym_env_var, - [3137] = 3, + ACTIONS(464), 1, + anon_sym_PLUS, + ACTIONS(466), 1, + anon_sym_RBRACE2, + [3091] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(456), 1, - aux_sym_env_var_token1, - STATE(117), 1, - sym_kernel_param, - [3147] = 3, + ACTIONS(468), 1, + anon_sym_RBRACE, + ACTIONS(470), 1, + anon_sym_PLUS, + [3101] = 3, ACTIONS(3), 1, sym_linebreak, ACTIONS(472), 1, anon_sym_PLUS, ACTIONS(474), 1, anon_sym_RBRACE2, - [3157] = 3, + [3111] = 3, ACTIONS(3), 1, sym_linebreak, - ACTIONS(476), 1, - anon_sym_RBRACE, - ACTIONS(478), 1, - anon_sym_PLUS, + ACTIONS(428), 1, + aux_sym_env_var_token1, + STATE(125), 1, + sym_kernel_param, + [3121] = 3, + ACTIONS(3), 1, + sym_linebreak, + ACTIONS(416), 1, + aux_sym_env_var_token1, + STATE(142), 1, + sym_env_var, + [3131] = 2, + ACTIONS(3), 1, + sym_linebreak, + ACTIONS(476), 2, + aux_sym_rules_token1, + anon_sym_COMMA, + [3139] = 3, + ACTIONS(3), 1, + sym_linebreak, + ACTIONS(416), 1, + aux_sym_env_var_token1, + STATE(144), 1, + sym_env_var, + [3149] = 3, + ACTIONS(3), 1, + sym_linebreak, + ACTIONS(416), 1, + aux_sym_env_var_token1, + STATE(130), 1, + sym_env_var, + [3159] = 2, + ACTIONS(3), 1, + sym_linebreak, + ACTIONS(478), 2, + aux_sym_rules_token1, + anon_sym_COMMA, [3167] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(480), 1, - sym_octal, + anon_sym_LBRACE, [3174] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(438), 1, - sym_match_op, + ACTIONS(482), 1, + anon_sym_DQUOTE2, [3181] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(474), 1, + ACTIONS(484), 1, anon_sym_RBRACE, [3188] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(482), 1, - anon_sym_RBRACE, + ACTIONS(486), 1, + sym_number, [3195] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(484), 1, - anon_sym_RBRACE, + ACTIONS(488), 1, + sym_octal, [3202] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(486), 1, + ACTIONS(446), 1, anon_sym_RBRACE, [3209] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(488), 1, - anon_sym_RBRACE, + ACTIONS(410), 1, + sym_assignment_op, [3216] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(490), 1, - anon_sym_RBRACE, + anon_sym_LBRACE, [3223] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(492), 1, - anon_sym_RBRACE, + anon_sym_LBRACE, [3230] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(476), 1, - anon_sym_RBRACE, + ACTIONS(494), 1, + anon_sym_LBRACE, [3237] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(494), 1, - anon_sym_RBRACE, + ACTIONS(496), 1, + anon_sym_RBRACE2, [3244] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(496), 1, - anon_sym_RBRACE2, + ACTIONS(456), 1, + sym_match_op, [3251] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(414), 1, - sym_match_op, + ACTIONS(498), 1, + sym_assignment_op, [3258] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(498), 1, - anon_sym_RBRACE, + ACTIONS(422), 1, + sym_match_op, [3265] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(448), 1, - sym_match_op, + ACTIONS(488), 1, + sym_system_const, [3272] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(500), 1, - anon_sym_LBRACE, + anon_sym_RBRACE, [3279] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(502), 1, - anon_sym_RBRACE, + anon_sym_LBRACE, [3286] = 2, ACTIONS(3), 1, sym_linebreak, @@ -5518,47 +5542,47 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 1, sym_linebreak, ACTIONS(506), 1, - sym_number, + anon_sym_RBRACE, [3300] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(508), 1, - anon_sym_DQUOTE2, + anon_sym_LBRACE, [3307] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(510), 1, - sym_import_type, + anon_sym_RBRACE, [3314] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(512), 1, - anon_sym_COMMA, + anon_sym_RBRACE, [3321] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(514), 1, - ts_builtin_sym_end, + anon_sym_RBRACE, [3328] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(516), 1, - aux_sym_rules_token1, + anon_sym_RBRACE, [3335] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(518), 1, - anon_sym_LBRACE, + anon_sym_RBRACE, [3342] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(520), 1, - sym_assignment_op, + anon_sym_RBRACE, [3349] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(522), 1, - sym_assignment_op, + anon_sym_LBRACE, [3356] = 2, ACTIONS(3), 1, sym_linebreak, @@ -5567,118 +5591,118 @@ static const uint16_t ts_small_parse_table[] = { [3363] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(446), 1, - sym_assignment_op, + ACTIONS(526), 1, + anon_sym_LBRACE, [3370] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(480), 1, - sym_system_const, + ACTIONS(412), 1, + sym_match_op, [3377] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(526), 1, - sym_seclabel, + ACTIONS(528), 1, + anon_sym_LBRACE, [3384] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(528), 1, - sym_number, + ACTIONS(530), 1, + anon_sym_LBRACE, [3391] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(530), 1, - anon_sym_LBRACE, + ACTIONS(532), 1, + sym_number, [3398] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(532), 1, - anon_sym_LBRACE, + ACTIONS(363), 1, + anon_sym_DQUOTE2, [3405] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(534), 1, - anon_sym_DQUOTE2, + ACTIONS(418), 1, + sym_match_op, [3412] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(536), 1, - anon_sym_LBRACE, + ACTIONS(466), 1, + anon_sym_RBRACE, [3419] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(430), 1, - anon_sym_RBRACE, + ACTIONS(534), 1, + aux_sym_rules_token1, [3426] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(432), 1, - sym_match_op, + ACTIONS(468), 1, + anon_sym_RBRACE, [3433] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(424), 1, - anon_sym_RBRACE, + ACTIONS(536), 1, + sym_seclabel, [3440] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(538), 1, - anon_sym_LBRACE, + anon_sym_RBRACE2, [3447] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(540), 1, - anon_sym_RBRACE2, + anon_sym_RBRACE, [3454] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(542), 1, + ACTIONS(474), 1, anon_sym_RBRACE, [3461] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(422), 1, - anon_sym_RBRACE, + ACTIONS(542), 1, + ts_builtin_sym_end, [3468] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(544), 1, - anon_sym_LBRACE, + anon_sym_RBRACE2, [3475] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(546), 1, - anon_sym_RBRACE2, + anon_sym_COMMA, [3482] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(548), 1, - anon_sym_LBRACE, + ACTIONS(438), 1, + anon_sym_RBRACE, [3489] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(526), 1, - sym_run_type, + ACTIONS(548), 1, + sym_number, [3496] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(550), 1, - sym_number, + sym_assignment_op, [3503] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(552), 1, - anon_sym_LBRACE, + anon_sym_DQUOTE2, [3510] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(344), 1, - anon_sym_DQUOTE2, + ACTIONS(554), 1, + sym_number, [3517] = 2, ACTIONS(3), 1, sym_linebreak, - ACTIONS(554), 1, - sym_number, + ACTIONS(536), 1, + sym_run_type, [3524] = 2, ACTIONS(3), 1, sym_linebreak, @@ -5688,12 +5712,12 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 1, sym_linebreak, ACTIONS(558), 1, - anon_sym_LBRACE, + sym_number, [3538] = 2, ACTIONS(3), 1, sym_linebreak, ACTIONS(560), 1, - sym_number, + anon_sym_LBRACE, [3545] = 2, ACTIONS(3), 1, sym_linebreak, @@ -5723,7 +5747,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 1, sym_linebreak, ACTIONS(572), 1, - anon_sym_LBRACE, + sym_import_type, }; static const uint32_t ts_small_parse_table_map[] = { @@ -5735,15 +5759,15 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(7)] = 343, [SMALL_STATE(8)] = 415, [SMALL_STATE(9)] = 465, - [SMALL_STATE(10)] = 515, - [SMALL_STATE(11)] = 565, - [SMALL_STATE(12)] = 615, - [SMALL_STATE(13)] = 665, - [SMALL_STATE(14)] = 715, - [SMALL_STATE(15)] = 787, - [SMALL_STATE(16)] = 837, - [SMALL_STATE(17)] = 887, - [SMALL_STATE(18)] = 937, + [SMALL_STATE(10)] = 537, + [SMALL_STATE(11)] = 609, + [SMALL_STATE(12)] = 659, + [SMALL_STATE(13)] = 709, + [SMALL_STATE(14)] = 759, + [SMALL_STATE(15)] = 809, + [SMALL_STATE(16)] = 859, + [SMALL_STATE(17)] = 909, + [SMALL_STATE(18)] = 959, [SMALL_STATE(19)] = 1009, [SMALL_STATE(20)] = 1058, [SMALL_STATE(21)] = 1107, @@ -5799,39 +5823,39 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(71)] = 2825, [SMALL_STATE(72)] = 2838, [SMALL_STATE(73)] = 2851, - [SMALL_STATE(74)] = 2859, - [SMALL_STATE(75)] = 2867, - [SMALL_STATE(76)] = 2877, - [SMALL_STATE(77)] = 2887, - [SMALL_STATE(78)] = 2897, - [SMALL_STATE(79)] = 2905, - [SMALL_STATE(80)] = 2915, - [SMALL_STATE(81)] = 2925, - [SMALL_STATE(82)] = 2935, - [SMALL_STATE(83)] = 2945, - [SMALL_STATE(84)] = 2955, + [SMALL_STATE(74)] = 2861, + [SMALL_STATE(75)] = 2871, + [SMALL_STATE(76)] = 2881, + [SMALL_STATE(77)] = 2891, + [SMALL_STATE(78)] = 2901, + [SMALL_STATE(79)] = 2911, + [SMALL_STATE(80)] = 2921, + [SMALL_STATE(81)] = 2931, + [SMALL_STATE(82)] = 2939, + [SMALL_STATE(83)] = 2949, + [SMALL_STATE(84)] = 2957, [SMALL_STATE(85)] = 2965, [SMALL_STATE(86)] = 2975, - [SMALL_STATE(87)] = 2985, - [SMALL_STATE(88)] = 2995, - [SMALL_STATE(89)] = 3005, - [SMALL_STATE(90)] = 3015, - [SMALL_STATE(91)] = 3023, - [SMALL_STATE(92)] = 3033, - [SMALL_STATE(93)] = 3043, - [SMALL_STATE(94)] = 3053, - [SMALL_STATE(95)] = 3061, - [SMALL_STATE(96)] = 3069, - [SMALL_STATE(97)] = 3077, - [SMALL_STATE(98)] = 3087, - [SMALL_STATE(99)] = 3095, - [SMALL_STATE(100)] = 3103, + [SMALL_STATE(87)] = 2983, + [SMALL_STATE(88)] = 2993, + [SMALL_STATE(89)] = 3001, + [SMALL_STATE(90)] = 3011, + [SMALL_STATE(91)] = 3021, + [SMALL_STATE(92)] = 3029, + [SMALL_STATE(93)] = 3037, + [SMALL_STATE(94)] = 3045, + [SMALL_STATE(95)] = 3053, + [SMALL_STATE(96)] = 3063, + [SMALL_STATE(97)] = 3071, + [SMALL_STATE(98)] = 3081, + [SMALL_STATE(99)] = 3091, + [SMALL_STATE(100)] = 3101, [SMALL_STATE(101)] = 3111, - [SMALL_STATE(102)] = 3119, - [SMALL_STATE(103)] = 3127, - [SMALL_STATE(104)] = 3137, - [SMALL_STATE(105)] = 3147, - [SMALL_STATE(106)] = 3157, + [SMALL_STATE(102)] = 3121, + [SMALL_STATE(103)] = 3131, + [SMALL_STATE(104)] = 3139, + [SMALL_STATE(105)] = 3149, + [SMALL_STATE(106)] = 3159, [SMALL_STATE(107)] = 3167, [SMALL_STATE(108)] = 3174, [SMALL_STATE(109)] = 3181, @@ -5898,270 +5922,274 @@ static const TSParseActionEntry ts_parse_actions[] = { [0] = {.entry = {.count = 0, .reusable = false}}, [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), - [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rules, 0), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(144), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(155), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(83), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), - [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), - [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), - [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), - [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), - [43] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__sub_c_content, 2), - [45] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2), SHIFT_REPEAT(12), - [48] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2), SHIFT_REPEAT(16), - [51] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2), SHIFT_REPEAT(15), - [54] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2), SHIFT_REPEAT(10), - [57] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2), SHIFT_REPEAT(165), - [60] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2), SHIFT_REPEAT(166), - [63] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2), SHIFT_REPEAT(6), - [66] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2), SHIFT_REPEAT(17), - [69] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2), SHIFT_REPEAT(163), - [72] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2), SHIFT_REPEAT(164), - [75] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2), SHIFT_REPEAT(5), - [78] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), - [80] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), - [82] = {.entry = {.count = 1, .reusable = false}}, SHIFT(12), - [84] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), - [86] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), - [88] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), - [90] = {.entry = {.count = 1, .reusable = false}}, SHIFT(165), - [92] = {.entry = {.count = 1, .reusable = false}}, SHIFT(166), - [94] = {.entry = {.count = 1, .reusable = false}}, SHIFT(6), - [96] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), - [98] = {.entry = {.count = 1, .reusable = false}}, SHIFT(163), - [100] = {.entry = {.count = 1, .reusable = false}}, SHIFT(164), - [102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(5), - [104] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), - [106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_var_sub, 1), - [110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_var_sub, 1), - [112] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), - [114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fmt_sub, 1), - [116] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fmt_sub, 1), - [118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__sub_content, 2), - [120] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2), SHIFT_REPEAT(28), - [123] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2), SHIFT_REPEAT(27), - [126] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2), SHIFT_REPEAT(22), - [129] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2), SHIFT_REPEAT(161), - [132] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2), SHIFT_REPEAT(162), - [135] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2), SHIFT_REPEAT(19), - [138] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2), SHIFT_REPEAT(25), - [141] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2), SHIFT_REPEAT(150), - [144] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2), SHIFT_REPEAT(146), - [147] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2), SHIFT_REPEAT(20), - [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fmt_sub, 5), - [152] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fmt_sub, 5), - [154] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fmt_sub, 4), - [156] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fmt_sub, 4), - [158] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_var_sub, 5), - [160] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_var_sub, 5), - [162] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__sub_c_content, 1), - [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 1), - [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_var_sub, 4), - [168] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_var_sub, 4), - [170] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), - [172] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), - [174] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), - [176] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), - [178] = {.entry = {.count = 1, .reusable = false}}, SHIFT(161), - [180] = {.entry = {.count = 1, .reusable = false}}, SHIFT(162), - [182] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), - [184] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), - [186] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), - [188] = {.entry = {.count = 1, .reusable = false}}, SHIFT(146), - [190] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), - [192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_c_escape, 1), - [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_c_escape, 1), - [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1), - [198] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1), - [200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), - [204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__sub_content, 1), - [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__sub_content, 1), - [210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rules, 1), - [212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), - [216] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(30), - [219] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(144), - [222] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(144), - [225] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(76), - [228] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(155), - [231] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(152), - [234] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(142), - [237] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(140), - [240] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(139), - [243] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(83), - [246] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(85), - [249] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(87), - [252] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(135), - [255] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(134), - [258] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(88), - [261] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(132), - [264] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(131), - [267] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2), SHIFT_REPEAT(130), - [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_rules_repeat1, 2), - [272] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2), SHIFT_REPEAT(144), - [275] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_rule_repeat1, 2), SHIFT_REPEAT(144), - [278] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2), SHIFT_REPEAT(119), - [281] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_rule_repeat1, 2), SHIFT_REPEAT(152), - [284] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2), SHIFT_REPEAT(152), - [287] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2), SHIFT_REPEAT(159), - [290] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2), SHIFT_REPEAT(158), - [293] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2), SHIFT_REPEAT(139), - [296] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2), SHIFT_REPEAT(85), - [299] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2), SHIFT_REPEAT(87), - [302] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2), - [304] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_rule_repeat1, 2), - [306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2), - [308] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2), SHIFT_REPEAT(36), - [311] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2), SHIFT_REPEAT(48), - [314] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2), SHIFT_REPEAT(49), - [317] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2), SHIFT_REPEAT(124), - [320] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2), SHIFT_REPEAT(122), - [323] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2), SHIFT_REPEAT(45), - [326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [338] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 1), - [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rules, 0, 0, 0), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(118), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(95), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(8), + [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), + [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), + [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), + [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(164), + [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(165), + [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(5), + [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(12), + [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(162), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(163), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(6), + [67] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), + [69] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [71] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__sub_c_content, 2, 0, 0), + [73] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2, 0, 0), SHIFT_REPEAT(8), + [76] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2, 0, 0), SHIFT_REPEAT(18), + [79] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2, 0, 0), SHIFT_REPEAT(13), + [82] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2, 0, 0), SHIFT_REPEAT(15), + [85] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2, 0, 0), SHIFT_REPEAT(164), + [88] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2, 0, 0), SHIFT_REPEAT(165), + [91] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2, 0, 0), SHIFT_REPEAT(5), + [94] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2, 0, 0), SHIFT_REPEAT(12), + [97] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2, 0, 0), SHIFT_REPEAT(162), + [100] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2, 0, 0), SHIFT_REPEAT(163), + [103] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 2, 0, 0), SHIFT_REPEAT(6), + [106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fmt_sub, 1, 0, 0), + [110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fmt_sub, 1, 0, 0), + [112] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_var_sub, 1, 0, 0), + [116] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_var_sub, 1, 0, 0), + [118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__sub_content, 2, 0, 0), + [120] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2, 0, 0), SHIFT_REPEAT(21), + [123] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2, 0, 0), SHIFT_REPEAT(26), + [126] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2, 0, 0), SHIFT_REPEAT(24), + [129] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2, 0, 0), SHIFT_REPEAT(160), + [132] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2, 0, 0), SHIFT_REPEAT(161), + [135] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2, 0, 0), SHIFT_REPEAT(20), + [138] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2, 0, 0), SHIFT_REPEAT(22), + [141] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2, 0, 0), SHIFT_REPEAT(135), + [144] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2, 0, 0), SHIFT_REPEAT(158), + [147] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__sub_content, 2, 0, 0), SHIFT_REPEAT(19), + [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__sub_c_content, 1, 0, 0), + [152] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__sub_c_content, 1, 0, 0), + [154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [156] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), + [158] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), + [160] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), + [162] = {.entry = {.count = 1, .reusable = false}}, SHIFT(160), + [164] = {.entry = {.count = 1, .reusable = false}}, SHIFT(161), + [166] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), + [168] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), + [170] = {.entry = {.count = 1, .reusable = false}}, SHIFT(135), + [172] = {.entry = {.count = 1, .reusable = false}}, SHIFT(158), + [174] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), + [176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), + [178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_var_sub, 5, 0, 0), + [180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_var_sub, 5, 0, 0), + [182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_c_escape, 1, 0, 0), + [184] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_c_escape, 1, 0, 0), + [186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_var_sub, 4, 0, 0), + [188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_var_sub, 4, 0, 0), + [190] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fmt_sub, 4, 0, 0), + [192] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fmt_sub, 4, 0, 0), + [194] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fmt_sub, 5, 0, 0), + [196] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_fmt_sub, 5, 0, 0), + [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, 0, 0), + [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1, 0, 0), + [202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), + [204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__sub_content, 1, 0, 0), + [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__sub_content, 1, 0, 0), + [210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), + [212] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(29), + [215] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(118), + [218] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(118), + [221] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(87), + [224] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(115), + [227] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(116), + [230] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(124), + [233] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(126), + [236] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(134), + [239] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(95), + [242] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(97), + [245] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(74), + [248] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(113), + [251] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(114), + [254] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(73), + [257] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(119), + [260] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(133), + [263] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), SHIFT_REPEAT(143), + [266] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rules, 1, 0, 0), + [268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_rules_repeat1, 2, 0, 0), + [272] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2, 0, 0), SHIFT_REPEAT(118), + [275] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_rule_repeat1, 2, 0, 0), SHIFT_REPEAT(118), + [278] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2, 0, 0), SHIFT_REPEAT(136), + [281] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_rule_repeat1, 2, 0, 0), SHIFT_REPEAT(116), + [284] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2, 0, 0), SHIFT_REPEAT(116), + [287] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2, 0, 0), SHIFT_REPEAT(137), + [290] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2, 0, 0), SHIFT_REPEAT(138), + [293] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2, 0, 0), SHIFT_REPEAT(134), + [296] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2, 0, 0), SHIFT_REPEAT(97), + [299] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2, 0, 0), SHIFT_REPEAT(74), + [302] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_rule_repeat1, 2, 0, 0), + [304] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_rule_repeat1, 2, 0, 0), + [306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [318] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2, 0, 0), + [320] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2, 0, 0), SHIFT_REPEAT(37), + [323] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2, 0, 0), SHIFT_REPEAT(48), + [326] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2, 0, 0), SHIFT_REPEAT(49), + [329] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2, 0, 0), SHIFT_REPEAT(107), + [332] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2, 0, 0), SHIFT_REPEAT(123), + [335] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attribute_repeat1, 2, 0, 0), SHIFT_REPEAT(45), + [338] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 1, 0, 0), + [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), [346] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), - [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), - [350] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), - [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__c_content, 2), - [356] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__c_content, 2), SHIFT_REPEAT(54), - [359] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__c_content, 2), SHIFT_REPEAT(53), - [362] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__c_content, 2), SHIFT_REPEAT(55), - [365] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__c_content, 1), - [367] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__c_content, 1), - [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [350] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), + [352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__c_content, 2, 0, 0), + [354] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__c_content, 2, 0, 0), SHIFT_REPEAT(54), + [357] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__c_content, 2, 0, 0), SHIFT_REPEAT(55), + [360] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__c_content, 2, 0, 0), SHIFT_REPEAT(53), + [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [365] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__c_content, 1, 0, 0), + [367] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__c_content, 1, 0, 0), + [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), [371] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), [373] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), - [375] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_content_repeat1, 2), - [377] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_content_repeat1, 2), SHIFT_REPEAT(57), - [380] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_content_repeat1, 2), SHIFT_REPEAT(59), - [383] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_content, 1), + [375] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_content_repeat1, 2, 0, 0), + [377] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_content_repeat1, 2, 0, 0), SHIFT_REPEAT(57), + [380] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_content_repeat1, 2, 0, 0), SHIFT_REPEAT(59), + [383] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_content, 1, 0, 0), [385] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), - [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), - [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), - [395] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rule, 2), - [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_rule_repeat2, 2), - [401] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat2, 2), SHIFT_REPEAT(33), - [404] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rule, 3), - [406] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rule, 1), - [408] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__sub_value, 2), - [410] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_value, 4, .production_id = 3), - [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), - [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [416] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), - [418] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_value, 2), - [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), - [436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), - [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [440] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), - [442] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), - [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), - [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [450] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), - [452] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match, 3, .production_id = 1), - [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), - [458] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_value, 3), - [460] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, .production_id = 1), - [462] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 6, .production_id = 1), - [464] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__sub_value, 3, .production_id = 2), - [466] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match, 6, .production_id = 1), - [468] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__sub_value, 3), - [470] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__sub_value, 4, .production_id = 3), - [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), - [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), - [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [486] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_env_var, 1), - [488] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_kernel_param, 1), - [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), - [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [387] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rule, 2, 0, 0), + [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [391] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_rule_repeat2, 2, 0, 0), + [393] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_rule_repeat2, 2, 0, 0), SHIFT_REPEAT(33), + [396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rule, 3, 0, 0), + [398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), + [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [406] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rule, 1, 0, 0), + [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [414] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), + [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [420] = {.entry = {.count = 1, .reusable = false}}, SHIFT(69), + [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), + [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [430] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_value, 3, 0, 0), + [432] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__sub_value, 3, 0, 2), + [434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__sub_value, 3, 0, 0), + [436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [440] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match, 3, 0, 1), + [442] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), + [444] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_value, 4, 0, 3), + [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [450] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__sub_value, 4, 0, 3), + [452] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match, 6, 0, 1), + [454] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 6, 0, 1), + [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [458] = {.entry = {.count = 1, .reusable = false}}, SHIFT(72), + [460] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_value, 2, 0, 0), + [462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [476] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__sub_value, 2, 0, 0), + [478] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, 0, 1), + [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), - [508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), - [512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [514] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), - [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), - [530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), - [534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), - [538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), - [552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), - [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), - [560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), - [562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), - [566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), - [572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), + [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [512] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_kernel_param, 1, 0, 0), + [514] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_env_var, 1, 0, 0), + [516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), + [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), + [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), + [538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [542] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), + [564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), + [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), }; #ifdef __cplusplus extern "C" { #endif -#ifdef _WIN32 -#define extern __declspec(dllexport) +#ifdef TREE_SITTER_HIDE_SYMBOLS +#define TS_PUBLIC +#elif defined(_WIN32) +#define TS_PUBLIC __declspec(dllexport) +#else +#define TS_PUBLIC __attribute__((visibility("default"))) #endif -extern const TSLanguage *tree_sitter_udev(void) { +TS_PUBLIC const TSLanguage *tree_sitter_udev(void) { static const TSLanguage language = { .version = LANGUAGE_VERSION, .symbol_count = SYMBOL_COUNT, diff --git a/src/tree_sitter/alloc.h b/src/tree_sitter/alloc.h new file mode 100644 index 0000000..1abdd12 --- /dev/null +++ b/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 +#include +#include + +// Allow clients to override allocation functions +#ifdef TREE_SITTER_REUSE_ALLOCATOR + +extern void *(*ts_current_malloc)(size_t size); +extern void *(*ts_current_calloc)(size_t count, size_t size); +extern void *(*ts_current_realloc)(void *ptr, size_t size); +extern void (*ts_current_free)(void *ptr); + +#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/src/tree_sitter/array.h b/src/tree_sitter/array.h new file mode 100644 index 0000000..15a3b23 --- /dev/null +++ b/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 +#include +#include +#include +#include + +#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/src/tree_sitter/parser.h b/src/tree_sitter/parser.h index 17b4fde..799f599 100644 --- a/src/tree_sitter/parser.h +++ b/src/tree_sitter/parser.h @@ -47,6 +47,7 @@ struct TSLexer { uint32_t (*get_column)(TSLexer *); bool (*is_at_included_range_start)(const TSLexer *); bool (*eof)(const TSLexer *); + void (*log)(const TSLexer *, const char *, ...); }; typedef enum { @@ -86,6 +87,11 @@ typedef union { } entry; } TSParseActionEntry; +typedef struct { + int32_t start; + int32_t end; +} TSCharacterRange; + struct TSLanguage { uint32_t version; uint32_t symbol_count; @@ -125,6 +131,24 @@ struct TSLanguage { const TSStateId *primary_state_ids; }; +static inline bool set_contains(TSCharacterRange *ranges, uint32_t len, int32_t lookahead) { + uint32_t index = 0; + uint32_t size = len - index; + while (size > 1) { + uint32_t half_size = size / 2; + uint32_t mid_index = index + half_size; + TSCharacterRange *range = &ranges[mid_index]; + if (lookahead >= range->start && lookahead <= range->end) { + return true; + } else if (lookahead > range->end) { + index = mid_index; + } + size -= half_size; + } + TSCharacterRange *range = &ranges[index]; + return (lookahead >= range->start && lookahead <= range->end); +} + /* * Lexer Macros */ @@ -154,6 +178,17 @@ struct TSLanguage { goto next_state; \ } +#define ADVANCE_MAP(...) \ + { \ + static const uint16_t map[] = { __VA_ARGS__ }; \ + for (uint32_t i = 0; i < sizeof(map) / sizeof(map[0]); i += 2) { \ + if (map[i] == lookahead) { \ + state = map[i + 1]; \ + goto next_state; \ + } \ + } \ + } + #define SKIP(state_value) \ { \ skip = true; \ @@ -203,14 +238,15 @@ struct TSLanguage { } \ }} -#define REDUCE(symbol_val, child_count_val, ...) \ - {{ \ - .reduce = { \ - .type = TSParseActionTypeReduce, \ - .symbol = symbol_val, \ - .child_count = child_count_val, \ - __VA_ARGS__ \ - }, \ +#define REDUCE(symbol_name, children, precedence, prod_id) \ + {{ \ + .reduce = { \ + .type = TSParseActionTypeReduce, \ + .symbol = symbol_name, \ + .child_count = children, \ + .dynamic_precedence = precedence, \ + .production_id = prod_id \ + }, \ }} #define RECOVER() \ diff --git a/tree-sitter.json b/tree-sitter.json new file mode 100644 index 0000000..6518ac0 --- /dev/null +++ b/tree-sitter.json @@ -0,0 +1,29 @@ +{ + "grammars": [ + { + "name": "udev", + "scope": "source.udev", + "file-types": [ + "rules" + ], + "injection-regex": "^udev$", + "highlights": "queries/highlights.scm", + "injections": "queries/injections.scm", + "tags": "queries/tags.scm" + } + ], + "metadata": { + "version": "0.3.0", + "license": "MIT", + "description": "udev rules grammar for tree-sitter", + "authors": [ + { + "name": "ObserverOfTime", + "email": "chronobserver@disroot.org" + } + ], + "links": { + "repository": "https://github.com/tree-sitter-grammars/tree-sitter-udev" + } + } +}