From 1bbcb200406750f1f77f7c90653a8929244699c2 Mon Sep 17 00:00:00 2001 From: Antonin Delpeuch Date: Wed, 8 Oct 2025 14:56:06 +0200 Subject: [PATCH] Unvendor tree-sitter-newick For #891. --- CHANGELOG.md | 2 +- Cargo.lock | 11 + Cargo.toml | 1 + build.rs | 5 - src/parse/tree_sitter_parser.rs | 6 +- vendored_parsers/highlights/newick.scm | 9 +- vendored_parsers/tree-sitter-newick-src | 1 - .../tree-sitter-newick/.gitignore | 4 - .../tree-sitter-newick/Cargo.toml | 26 - vendored_parsers/tree-sitter-newick/README.md | 65 - .../tree-sitter-newick/binding.gyp | 19 - .../bindings/node/binding.cc | 28 - .../tree-sitter-newick/bindings/node/index.js | 19 - .../tree-sitter-newick/bindings/rust/build.rs | 40 - .../tree-sitter-newick/bindings/rust/lib.rs | 52 - .../tree-sitter-newick/example.png | Bin 90765 -> 0 bytes .../tree-sitter-newick/examples/nhx.nhx | 16 - .../tree-sitter-newick/examples/pipo.nwk | 1 - .../tree-sitter-newick/examples/simple.nwk | 9 - .../tree-sitter-newick/grammar.js | 31 - .../tree-sitter-newick/package-lock.json | 47 - .../tree-sitter-newick/package.json | 31 - .../tree-sitter-newick/queries/highlights.scm | 8 - vendored_parsers/tree-sitter-newick/shell.nix | 9 - .../tree-sitter-newick/src/grammar.json | 317 ----- .../tree-sitter-newick/src/node-types.json | 237 --- .../tree-sitter-newick/src/parser.c | 1265 ----------------- .../src/tree_sitter/parser.h | 224 --- 28 files changed, 25 insertions(+), 2458 deletions(-) mode change 120000 => 100644 vendored_parsers/highlights/newick.scm delete mode 120000 vendored_parsers/tree-sitter-newick-src delete mode 100644 vendored_parsers/tree-sitter-newick/.gitignore delete mode 100644 vendored_parsers/tree-sitter-newick/Cargo.toml delete mode 100644 vendored_parsers/tree-sitter-newick/README.md delete mode 100644 vendored_parsers/tree-sitter-newick/binding.gyp delete mode 100644 vendored_parsers/tree-sitter-newick/bindings/node/binding.cc delete mode 100644 vendored_parsers/tree-sitter-newick/bindings/node/index.js delete mode 100644 vendored_parsers/tree-sitter-newick/bindings/rust/build.rs delete mode 100644 vendored_parsers/tree-sitter-newick/bindings/rust/lib.rs delete mode 100644 vendored_parsers/tree-sitter-newick/example.png delete mode 100644 vendored_parsers/tree-sitter-newick/examples/nhx.nhx delete mode 100644 vendored_parsers/tree-sitter-newick/examples/pipo.nwk delete mode 100644 vendored_parsers/tree-sitter-newick/examples/simple.nwk delete mode 100644 vendored_parsers/tree-sitter-newick/grammar.js delete mode 100644 vendored_parsers/tree-sitter-newick/package-lock.json delete mode 100644 vendored_parsers/tree-sitter-newick/package.json delete mode 100644 vendored_parsers/tree-sitter-newick/queries/highlights.scm delete mode 100644 vendored_parsers/tree-sitter-newick/shell.nix delete mode 100644 vendored_parsers/tree-sitter-newick/src/grammar.json delete mode 100644 vendored_parsers/tree-sitter-newick/src/node-types.json delete mode 100644 vendored_parsers/tree-sitter-newick/src/parser.c delete mode 100644 vendored_parsers/tree-sitter-newick/src/tree_sitter/parser.h diff --git a/CHANGELOG.md b/CHANGELOG.md index e288d3448..b73d36245 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ### Parsing -Added support for protocol buffer files. Updated CMake, Solidity, HCL, Dart, Elm, Devicetree, Gleam and R parsers. +Added support for protocol buffer files. Updated CMake, Solidity, HCL, Dart, Elm, Devicetree, Gleam, Newick and R parsers. ### Display diff --git a/Cargo.lock b/Cargo.lock index cbfd489c9..3f0cd78a7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -300,6 +300,7 @@ dependencies = [ "tree-sitter-language", "tree-sitter-lua", "tree-sitter-make", + "tree-sitter-newick", "tree-sitter-nix", "tree-sitter-objc", "tree-sitter-ocaml", @@ -1278,6 +1279,16 @@ dependencies = [ "tree-sitter-language", ] +[[package]] +name = "tree-sitter-newick" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c5785bcf2ade84e16242b1a8d1f574334ddd26032c15a5d9bcc012e013f4e1" +dependencies = [ + "cc", + "tree-sitter-language", +] + [[package]] name = "tree-sitter-nix" version = "0.0.2" diff --git a/Cargo.toml b/Cargo.toml index c6a0d2890..6876bb236 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -100,6 +100,7 @@ tree-sitter-json = "0.24.8" tree-sitter-julia = "0.23.1" tree-sitter-lua = "0.2.0" tree-sitter-make = "1.1.1" +tree-sitter-newick = "1.1.0" tree-sitter-nix = "0.0.2" tree-sitter-objc = "3.0.2" tree-sitter-ocaml = "0.23.2" diff --git a/build.rs b/build.rs index ef70b0b0d..ba4f98ddc 100644 --- a/build.rs +++ b/build.rs @@ -117,11 +117,6 @@ fn main() { src_dir: "vendored_parsers/tree-sitter-latex-src", extra_files: vec!["scanner.c"], }, - TreeSitterParser { - name: "tree-sitter-newick", - src_dir: "vendored_parsers/tree-sitter-newick-src", - extra_files: vec![], - }, TreeSitterParser { name: "tree-sitter-perl", src_dir: "vendored_parsers/tree-sitter-perl-src", diff --git a/src/parse/tree_sitter_parser.rs b/src/parse/tree_sitter_parser.rs index 3d073dd68..ae02b2aed 100644 --- a/src/parse/tree_sitter_parser.rs +++ b/src/parse/tree_sitter_parser.rs @@ -80,7 +80,6 @@ extern "C" { fn tree_sitter_janet_simple() -> ts::Language; fn tree_sitter_kotlin() -> ts::Language; fn tree_sitter_latex() -> ts::Language; - fn tree_sitter_newick() -> ts::Language; fn tree_sitter_perl() -> ts::Language; fn tree_sitter_qmljs() -> ts::Language; fn tree_sitter_racket() -> ts::Language; @@ -707,7 +706,10 @@ pub(crate) fn from_language(language: guess::Language) -> TreeSitterConfig { } } Newick => { - let language = unsafe { tree_sitter_newick() }; + // The bindings are still using the old format, but the parser is generated for TS 0.25 + let language_fn = tree_sitter_newick::LANGUAGE; + let language = tree_sitter::Language::new(language_fn); + TreeSitterConfig { language: language.clone(), atom_nodes: [].into_iter().collect(), diff --git a/vendored_parsers/highlights/newick.scm b/vendored_parsers/highlights/newick.scm deleted file mode 120000 index c78e8aa92..000000000 --- a/vendored_parsers/highlights/newick.scm +++ /dev/null @@ -1 +0,0 @@ -../tree-sitter-newick/queries/highlights.scm \ No newline at end of file diff --git a/vendored_parsers/highlights/newick.scm b/vendored_parsers/highlights/newick.scm new file mode 100644 index 000000000..e5e11c782 --- /dev/null +++ b/vendored_parsers/highlights/newick.scm @@ -0,0 +1,8 @@ +"(" @punctuation.bracket +")" @punctuation.bracket +"[&&NHX" @punctuation.bracket +"]" @punctuation.bracket + +(name) @function +(length) @number +(nhx_entry key: (nhx_val) @keyword value: (nhx_val) @string.special) diff --git a/vendored_parsers/tree-sitter-newick-src b/vendored_parsers/tree-sitter-newick-src deleted file mode 120000 index 278a0c330..000000000 --- a/vendored_parsers/tree-sitter-newick-src +++ /dev/null @@ -1 +0,0 @@ -tree-sitter-newick/src \ No newline at end of file diff --git a/vendored_parsers/tree-sitter-newick/.gitignore b/vendored_parsers/tree-sitter-newick/.gitignore deleted file mode 100644 index 13af3e4f0..000000000 --- a/vendored_parsers/tree-sitter-newick/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.direnv/ -node_modules/ - -.envrc diff --git a/vendored_parsers/tree-sitter-newick/Cargo.toml b/vendored_parsers/tree-sitter-newick/Cargo.toml deleted file mode 100644 index 52de601c2..000000000 --- a/vendored_parsers/tree-sitter-newick/Cargo.toml +++ /dev/null @@ -1,26 +0,0 @@ -[package] -name = "tree-sitter-newick" -description = "newick grammar for the tree-sitter parsing library" -version = "0.0.1" -keywords = ["incremental", "parsing", "newick"] -categories = ["parsing", "text-editors"] -repository = "https://github.com/tree-sitter/tree-sitter-newick" -edition = "2018" -license = "MIT" - -build = "bindings/rust/build.rs" -include = [ - "bindings/rust/*", - "grammar.js", - "queries/*", - "src/*", -] - -[lib] -path = "bindings/rust/lib.rs" - -[dependencies] -tree-sitter = "~0.20.3" - -[build-dependencies] -cc = "1.0" diff --git a/vendored_parsers/tree-sitter-newick/README.md b/vendored_parsers/tree-sitter-newick/README.md deleted file mode 100644 index 86dcc6101..000000000 --- a/vendored_parsers/tree-sitter-newick/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# tree-sitter-newick - -A [tree-sitter](https://tree-sitter.github.io/tree-sitter/) grammar for the [Newick (nh, nwk)](https://en.wikipedia.org/wiki/Newick_format) and [New Hampshire X (nhx)](https://www.cs.mcgill.ca/~birch/birchhomedir/java/forester/NHX.pdf) formats for trees representation. - -# Example - -## NHX source - -``` -( - ( - ( - ADH2:0.1[&&NHX:S=human:E=1.1.1.1], - ADH1:0.11[&&NHX:S=human:E=1.1.1.1] - ):0.05[&&NHX:S=Primates:E=1.1.1.1:D=Y:B=100], - ADHY:0.1[&&NHX:S=nematode:E=1.1.1.1], - ADHX:0.12[&&NHX:S=insect:E=1.1.1.1] - ):0.1[&&NHX:S=Metazoa:E=1.1.1.1:D=N], - ( - ADH4:0.09[&&NHX:S=yeast:E=1.1.1.1], - ADH3:0.13[&&NHX:S=yeast:E=1.1.1.1], - ADH2:0.12[&&NHX:S=yeast:E=1.1.1.1], - ADH1:0.11[&&NHX:S=yeast:E=1.1.1.1] - ):0.1[&&NHX:S=Fungi] -)[&&NHX:E=1.1.1.1:D=N]; -``` - -## tree-sitter-newick highlighting - -![NHX file highlighted by tree-sitter-newick](./example.png) - -## Syntax tree - -``` -(source_file [0, 0] - [16, 0] - (tree [0, 0] - [15, 23] - clade: (clade [0, 0] - [15, 22] - clade: (clade [1, 4] - [8, 40] - clade: (clade [2, 8] - [5, 52] - leaf: (leaf [3, 12] - [3, 45] - name: (name [3, 12] - [3, 16]) - attributes: (attributes [3, 16] - [3, 45] - length: (length [3, 17] - [3, 20] - (float [3, 17] - [3, 20])) - data: (data [3, 20] - [3, 45] - entry: (nhx_entry [3, 26] - [3, 34] - key: (nhx_val [3, 27] - [3, 28]) - value: (nhx_val [3, 29] - [3, 34])) - entry: (nhx_entry [3, 34] - [3, 44] - key: (nhx_val [3, 35] - [3, 36]) - value: (nhx_val [3, 37] - [3, 44]))))) - leaf: (leaf [4, 12] - [4, 46] - name: (name [4, 12] - [4, 16]) - attributes: (attributes [4, 16] - [4, 46] - length: (length [4, 17] - [4, 21] - (float [4, 17] - [4, 21])) - data: (data [4, 21] - [4, 46] - entry: (nhx_entry [4, 27] - [4, 35] - key: (nhx_val [4, 28] - [4, 29]) - value: (nhx_val [4, 30] - [4, 35])) - entry: (nhx_entry [4, 35] - [4, 45] - key: (nhx_val [4, 36] - [4, 37]) - value: (nhx_val [4, 38] - [4, 45]))))) -... -``` diff --git a/vendored_parsers/tree-sitter-newick/binding.gyp b/vendored_parsers/tree-sitter-newick/binding.gyp deleted file mode 100644 index 6ffd592cf..000000000 --- a/vendored_parsers/tree-sitter-newick/binding.gyp +++ /dev/null @@ -1,19 +0,0 @@ -{ - "targets": [ - { - "target_name": "tree_sitter_newick_binding", - "include_dirs": [ - " -#include "nan.h" - -using namespace v8; - -extern "C" TSLanguage * tree_sitter_newick(); - -namespace { - -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_newick()); - - Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("newick").ToLocalChecked()); - Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance); -} - -NODE_MODULE(tree_sitter_newick_binding, Init) - -} // namespace diff --git a/vendored_parsers/tree-sitter-newick/bindings/node/index.js b/vendored_parsers/tree-sitter-newick/bindings/node/index.js deleted file mode 100644 index 8257391db..000000000 --- a/vendored_parsers/tree-sitter-newick/bindings/node/index.js +++ /dev/null @@ -1,19 +0,0 @@ -try { - module.exports = require("../../build/Release/tree_sitter_newick_binding"); -} catch (error1) { - if (error1.code !== 'MODULE_NOT_FOUND') { - throw error1; - } - try { - module.exports = require("../../build/Debug/tree_sitter_newick_binding"); - } catch (error2) { - if (error2.code !== 'MODULE_NOT_FOUND') { - throw error2; - } - throw error1 - } -} - -try { - module.exports.nodeTypeInfo = require("../../src/node-types.json"); -} catch (_) {} diff --git a/vendored_parsers/tree-sitter-newick/bindings/rust/build.rs b/vendored_parsers/tree-sitter-newick/bindings/rust/build.rs deleted file mode 100644 index c6061f099..000000000 --- a/vendored_parsers/tree-sitter-newick/bindings/rust/build.rs +++ /dev/null @@ -1,40 +0,0 @@ -fn main() { - let src_dir = std::path::Path::new("src"); - - let mut c_config = cc::Build::new(); - c_config.include(&src_dir); - c_config - .flag_if_supported("-Wno-unused-parameter") - .flag_if_supported("-Wno-unused-but-set-variable") - .flag_if_supported("-Wno-trigraphs"); - let parser_path = src_dir.join("parser.c"); - c_config.file(&parser_path); - - // If your language uses an external scanner written in C, - // then include this block of code: - - /* - let scanner_path = src_dir.join("scanner.c"); - c_config.file(&scanner_path); - println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap()); - */ - - c_config.compile("parser"); - println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap()); - - // If your language uses an external scanner written in C++, - // then include this block of code: - - /* - let mut cpp_config = cc::Build::new(); - cpp_config.cpp(true); - cpp_config.include(&src_dir); - cpp_config - .flag_if_supported("-Wno-unused-parameter") - .flag_if_supported("-Wno-unused-but-set-variable"); - let scanner_path = src_dir.join("scanner.cc"); - cpp_config.file(&scanner_path); - cpp_config.compile("scanner"); - println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap()); - */ -} diff --git a/vendored_parsers/tree-sitter-newick/bindings/rust/lib.rs b/vendored_parsers/tree-sitter-newick/bindings/rust/lib.rs deleted file mode 100644 index 54da1fd4e..000000000 --- a/vendored_parsers/tree-sitter-newick/bindings/rust/lib.rs +++ /dev/null @@ -1,52 +0,0 @@ -//! This crate provides newick language support for the [tree-sitter][] parsing library. -//! -//! Typically, you will use the [language][language func] function to add this language to a -//! tree-sitter [Parser][], and then use the parser to parse some code: -//! -//! ``` -//! let code = ""; -//! let mut parser = tree_sitter::Parser::new(); -//! parser.set_language(tree_sitter_newick::language()).expect("Error loading newick grammar"); -//! let tree = parser.parse(code, None).unwrap(); -//! ``` -//! -//! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html -//! [language func]: fn.language.html -//! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html -//! [tree-sitter]: https://tree-sitter.github.io/ - -use tree_sitter::Language; - -extern "C" { - fn tree_sitter_newick() -> Language; -} - -/// Get the tree-sitter [Language][] for this grammar. -/// -/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html -pub fn language() -> Language { - unsafe { tree_sitter_newick() } -} - -/// The content of the [`node-types.json`][] file for this grammar. -/// -/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types -pub const NODE_TYPES: &'static str = include_str!("../../src/node-types.json"); - -// Uncomment these to include any queries that this grammar contains - -// pub const HIGHLIGHTS_QUERY: &'static str = include_str!("../../queries/highlights.scm"); -// pub const INJECTIONS_QUERY: &'static str = include_str!("../../queries/injections.scm"); -// pub const LOCALS_QUERY: &'static str = include_str!("../../queries/locals.scm"); -// pub const TAGS_QUERY: &'static str = include_str!("../../queries/tags.scm"); - -#[cfg(test)] -mod tests { - #[test] - fn test_can_load_grammar() { - let mut parser = tree_sitter::Parser::new(); - parser - .set_language(super::language()) - .expect("Error loading newick language"); - } -} diff --git a/vendored_parsers/tree-sitter-newick/example.png b/vendored_parsers/tree-sitter-newick/example.png deleted file mode 100644 index cf8093a8ad6f3abbc87ac310374da18f8b11eb32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90765 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 Qf&>4QTgq4=+nQg8%>k diff --git a/vendored_parsers/tree-sitter-newick/examples/nhx.nhx b/vendored_parsers/tree-sitter-newick/examples/nhx.nhx deleted file mode 100644 index e9c1217b1..000000000 --- a/vendored_parsers/tree-sitter-newick/examples/nhx.nhx +++ /dev/null @@ -1,16 +0,0 @@ -( - ( - ( - ADH2:0.1[&&NHX:S=human:E=1.1.1.1], - ADH1:0.11[&&NHX:S=human:E=1.1.1.1] - ):0.05[&&NHX:S=Primates:E=1.1.1.1:D=Y:B=100], - ADHY:0.1[&&NHX:S=nematode:E=1.1.1.1], - ADHX:0.12[&&NHX:S=insect:E=1.1.1.1] - ):0.1[&&NHX:S=Metazoa:E=1.1.1.1:D=N], - ( - ADH4:0.09[&&NHX:S=yeast:E=1.1.1.1], - ADH3:0.13[&&NHX:S=yeast:E=1.1.1.1], - ADH2:0.12[&&NHX:S=yeast:E=1.1.1.1], - ADH1:0.11[&&NHX:S=yeast:E=1.1.1.1] - ):0.1[&&NHX:S=Fungi] -)[&&NHX:E=1.1.1.1:D=N]; diff --git a/vendored_parsers/tree-sitter-newick/examples/pipo.nwk b/vendored_parsers/tree-sitter-newick/examples/pipo.nwk deleted file mode 100644 index a16dbd8b1..000000000 --- a/vendored_parsers/tree-sitter-newick/examples/pipo.nwk +++ /dev/null @@ -1 +0,0 @@ -(s:0.3,:0.4); diff --git a/vendored_parsers/tree-sitter-newick/examples/simple.nwk b/vendored_parsers/tree-sitter-newick/examples/simple.nwk deleted file mode 100644 index 93070b395..000000000 --- a/vendored_parsers/tree-sitter-newick/examples/simple.nwk +++ /dev/null @@ -1,9 +0,0 @@ -(A); -(,,(,)); -(A,B,(C,D)); -(A,B,(C,D)E)F; -(:0.1,:0.2,(:0.3,:0.4):0.5); -(:0.1,:0.2,(:0.3,:0.4):0.5):0.0; -(A:0.1,B:0.2,(C:0.3,D:0.4):0.5); -(A:0.1,B:0.2,(C:0.3,D:0.4)E:0.5)F; -((B:0.2,(C:0.3,D:0.4)E:0.5)F:0.1)A; diff --git a/vendored_parsers/tree-sitter-newick/grammar.js b/vendored_parsers/tree-sitter-newick/grammar.js deleted file mode 100644 index e23459ff2..000000000 --- a/vendored_parsers/tree-sitter-newick/grammar.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = grammar({ - name: "newick", - - rules: { - source_file: $ => repeat($.tree), - tree: $ => seq($._node, ";"), - _node: $ => choice(field("leaf", $.leaf), field("clade", $.clade)), - leaf: $ => choice( - field("attributes", $.attributes), - seq(field("name", $.name), optional(field("attributes", $.attributes))), - ), - clade: $ => seq( - "(", - optional($._node), - repeat(seq(",", optional($._node))), - ")", optional($.name), optional($.attributes) - ), - attributes: $ => choice( - seq(":", field("length", $.length)), - seq(optional(seq(":", field("length", $.length))), field("data", $.data)) - ), - data: $ => seq("[&&NHX", repeat1(field("entry", $.nhx_entry)), "]"), - nhx_entry: $ => seq(":", field("key", $.nhx_val), "=", optional(field("value", $.nhx_val))), - length: $ => $.float, - - _data_safe: $ => /[^:,;()\[\]=\s]+/, - nhx_val: $ => repeat1($._data_safe), - float: $ => /\d(_?\d)*(\.\d)?(_?\d)*([eE][\+-]?\d(_?\d)*)?/, - name: $ => /[^:,;()\[\]\s]+/, - } -}); diff --git a/vendored_parsers/tree-sitter-newick/package-lock.json b/vendored_parsers/tree-sitter-newick/package-lock.json deleted file mode 100644 index 893f914b6..000000000 --- a/vendored_parsers/tree-sitter-newick/package-lock.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "tree-sitter-newick", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "tree-sitter-newick", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "nan": "^2.17.0" - }, - "devDependencies": { - "tree-sitter-cli": "^0.20.7" - } - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" - }, - "node_modules/tree-sitter-cli": { - "version": "0.20.7", - "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.20.7.tgz", - "integrity": "sha512-MHABT8oCPr4D0fatsPo6ATQ9H4h9vHpPRjlxkxJs80tpfAEKGn6A1zU3eqfCKBcgmfZDe9CiL3rKOGMzYHwA3w==", - "dev": true, - "hasInstallScript": true, - "bin": { - "tree-sitter": "cli.js" - } - } - }, - "dependencies": { - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" - }, - "tree-sitter-cli": { - "version": "0.20.7", - "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.20.7.tgz", - "integrity": "sha512-MHABT8oCPr4D0fatsPo6ATQ9H4h9vHpPRjlxkxJs80tpfAEKGn6A1zU3eqfCKBcgmfZDe9CiL3rKOGMzYHwA3w==", - "dev": true - } - } -} diff --git a/vendored_parsers/tree-sitter-newick/package.json b/vendored_parsers/tree-sitter-newick/package.json deleted file mode 100644 index fa0aa400a..000000000 --- a/vendored_parsers/tree-sitter-newick/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "tree-sitter-newick", - "version": "1.0.0", - "description": "A tree-sitter grammar for newick (extended) files", - "main": "grammar.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/delehef/tree-sitter-newick.git" - }, - "author": "Franklin Delehelle", - "license": "MIT", - "bugs": { - "url": "https://github.com/delehef/tree-sitter-newick/issues" - }, - "homepage": "https://github.com/delehef/tree-sitter-newick#readme", - "dependencies": { - "nan": "^2.17.0" - }, - "devDependencies": { - "tree-sitter-cli": "^0.20.7" - }, - "tree-sitter": [ - { - "scope": "source.newick", - "file-types": ["nh", "nhx", "nwk"] - } - ] -} diff --git a/vendored_parsers/tree-sitter-newick/queries/highlights.scm b/vendored_parsers/tree-sitter-newick/queries/highlights.scm deleted file mode 100644 index e5e11c782..000000000 --- a/vendored_parsers/tree-sitter-newick/queries/highlights.scm +++ /dev/null @@ -1,8 +0,0 @@ -"(" @punctuation.bracket -")" @punctuation.bracket -"[&&NHX" @punctuation.bracket -"]" @punctuation.bracket - -(name) @function -(length) @number -(nhx_entry key: (nhx_val) @keyword value: (nhx_val) @string.special) diff --git a/vendored_parsers/tree-sitter-newick/shell.nix b/vendored_parsers/tree-sitter-newick/shell.nix deleted file mode 100644 index e2ba42d0b..000000000 --- a/vendored_parsers/tree-sitter-newick/shell.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ pkgs ? import {} }: - -pkgs.mkShell { - buildInputs = [ - pkgs.cargo pkgs.rust-analyzer pkgs.rustc pkgs.rustfmt pkgs.clippy - pkgs.nodejs pkgs.tree-sitter pkgs.emscripten - pkgs.nodePackages.typescript pkgs.nodePackages.typescript-language-server - ]; -} diff --git a/vendored_parsers/tree-sitter-newick/src/grammar.json b/vendored_parsers/tree-sitter-newick/src/grammar.json deleted file mode 100644 index a2c9250b5..000000000 --- a/vendored_parsers/tree-sitter-newick/src/grammar.json +++ /dev/null @@ -1,317 +0,0 @@ -{ - "name": "newick", - "rules": { - "source_file": { - "type": "REPEAT", - "content": { - "type": "SYMBOL", - "name": "tree" - } - }, - "tree": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_node" - }, - { - "type": "STRING", - "value": ";" - } - ] - }, - "_node": { - "type": "CHOICE", - "members": [ - { - "type": "FIELD", - "name": "leaf", - "content": { - "type": "SYMBOL", - "name": "leaf" - } - }, - { - "type": "FIELD", - "name": "clade", - "content": { - "type": "SYMBOL", - "name": "clade" - } - } - ] - }, - "leaf": { - "type": "CHOICE", - "members": [ - { - "type": "FIELD", - "name": "attributes", - "content": { - "type": "SYMBOL", - "name": "attributes" - } - }, - { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "name", - "content": { - "type": "SYMBOL", - "name": "name" - } - }, - { - "type": "CHOICE", - "members": [ - { - "type": "FIELD", - "name": "attributes", - "content": { - "type": "SYMBOL", - "name": "attributes" - } - }, - { - "type": "BLANK" - } - ] - } - ] - } - ] - }, - "clade": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "(" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_node" - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "REPEAT", - "content": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "," - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_node" - }, - { - "type": "BLANK" - } - ] - } - ] - } - }, - { - "type": "STRING", - "value": ")" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "name" - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "attributes" - }, - { - "type": "BLANK" - } - ] - } - ] - }, - "attributes": { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": ":" - }, - { - "type": "FIELD", - "name": "length", - "content": { - "type": "SYMBOL", - "name": "length" - } - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": ":" - }, - { - "type": "FIELD", - "name": "length", - "content": { - "type": "SYMBOL", - "name": "length" - } - } - ] - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "FIELD", - "name": "data", - "content": { - "type": "SYMBOL", - "name": "data" - } - } - ] - } - ] - }, - "data": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "[&&NHX" - }, - { - "type": "REPEAT1", - "content": { - "type": "FIELD", - "name": "entry", - "content": { - "type": "SYMBOL", - "name": "nhx_entry" - } - } - }, - { - "type": "STRING", - "value": "]" - } - ] - }, - "nhx_entry": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": ":" - }, - { - "type": "FIELD", - "name": "key", - "content": { - "type": "SYMBOL", - "name": "nhx_val" - } - }, - { - "type": "STRING", - "value": "=" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "FIELD", - "name": "value", - "content": { - "type": "SYMBOL", - "name": "nhx_val" - } - }, - { - "type": "BLANK" - } - ] - } - ] - }, - "length": { - "type": "SYMBOL", - "name": "float" - }, - "_data_safe": { - "type": "PATTERN", - "value": "[^:,;()\\[\\]=\\s]+" - }, - "nhx_val": { - "type": "REPEAT1", - "content": { - "type": "SYMBOL", - "name": "_data_safe" - } - }, - "float": { - "type": "PATTERN", - "value": "\\d(_?\\d)*(\\.\\d)?(_?\\d)*([eE][\\+-]?\\d(_?\\d)*)?" - }, - "name": { - "type": "PATTERN", - "value": "[^:,;()\\[\\]\\s]+" - } - }, - "extras": [ - { - "type": "PATTERN", - "value": "\\s" - } - ], - "conflicts": [], - "precedences": [], - "externals": [], - "inline": [], - "supertypes": [] -} - diff --git a/vendored_parsers/tree-sitter-newick/src/node-types.json b/vendored_parsers/tree-sitter-newick/src/node-types.json deleted file mode 100644 index 86cae36e8..000000000 --- a/vendored_parsers/tree-sitter-newick/src/node-types.json +++ /dev/null @@ -1,237 +0,0 @@ -[ - { - "type": "attributes", - "named": true, - "fields": { - "data": { - "multiple": false, - "required": false, - "types": [ - { - "type": "data", - "named": true - } - ] - }, - "length": { - "multiple": false, - "required": false, - "types": [ - { - "type": "length", - "named": true - } - ] - } - } - }, - { - "type": "clade", - "named": true, - "fields": { - "clade": { - "multiple": true, - "required": false, - "types": [ - { - "type": "clade", - "named": true - } - ] - }, - "leaf": { - "multiple": true, - "required": false, - "types": [ - { - "type": "leaf", - "named": true - } - ] - } - }, - "children": { - "multiple": true, - "required": false, - "types": [ - { - "type": "attributes", - "named": true - }, - { - "type": "name", - "named": true - } - ] - } - }, - { - "type": "data", - "named": true, - "fields": { - "entry": { - "multiple": true, - "required": true, - "types": [ - { - "type": "nhx_entry", - "named": true - } - ] - } - } - }, - { - "type": "leaf", - "named": true, - "fields": { - "attributes": { - "multiple": false, - "required": false, - "types": [ - { - "type": "attributes", - "named": true - } - ] - }, - "name": { - "multiple": false, - "required": false, - "types": [ - { - "type": "name", - "named": true - } - ] - } - } - }, - { - "type": "length", - "named": true, - "fields": {}, - "children": { - "multiple": false, - "required": true, - "types": [ - { - "type": "float", - "named": true - } - ] - } - }, - { - "type": "nhx_entry", - "named": true, - "fields": { - "key": { - "multiple": false, - "required": true, - "types": [ - { - "type": "nhx_val", - "named": true - } - ] - }, - "value": { - "multiple": false, - "required": false, - "types": [ - { - "type": "nhx_val", - "named": true - } - ] - } - } - }, - { - "type": "nhx_val", - "named": true, - "fields": {} - }, - { - "type": "source_file", - "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": false, - "types": [ - { - "type": "tree", - "named": true - } - ] - } - }, - { - "type": "tree", - "named": true, - "fields": { - "clade": { - "multiple": false, - "required": false, - "types": [ - { - "type": "clade", - "named": true - } - ] - }, - "leaf": { - "multiple": false, - "required": false, - "types": [ - { - "type": "leaf", - "named": true - } - ] - } - } - }, - { - "type": "(", - "named": false - }, - { - "type": ")", - "named": false - }, - { - "type": ",", - "named": false - }, - { - "type": ":", - "named": false - }, - { - "type": ";", - "named": false - }, - { - "type": "=", - "named": false - }, - { - "type": "[&&NHX", - "named": false - }, - { - "type": "]", - "named": false - }, - { - "type": "float", - "named": true - }, - { - "type": "name", - "named": true - } -] \ No newline at end of file diff --git a/vendored_parsers/tree-sitter-newick/src/parser.c b/vendored_parsers/tree-sitter-newick/src/parser.c deleted file mode 100644 index 19c0db2db..000000000 --- a/vendored_parsers/tree-sitter-newick/src/parser.c +++ /dev/null @@ -1,1265 +0,0 @@ -#include - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wmissing-field-initializers" -#endif - -#define LANGUAGE_VERSION 14 -#define STATE_COUNT 51 -#define LARGE_STATE_COUNT 2 -#define SYMBOL_COUNT 26 -#define ALIAS_COUNT 0 -#define TOKEN_COUNT 12 -#define EXTERNAL_TOKEN_COUNT 0 -#define FIELD_COUNT 9 -#define MAX_ALIAS_SEQUENCE_LENGTH 6 -#define PRODUCTION_ID_COUNT 18 - -enum { - anon_sym_SEMI = 1, - anon_sym_LPAREN = 2, - anon_sym_COMMA = 3, - anon_sym_RPAREN = 4, - anon_sym_COLON = 5, - anon_sym_LBRACK_AMP_AMPNHX = 6, - anon_sym_RBRACK = 7, - anon_sym_EQ = 8, - sym__data_safe = 9, - sym_float = 10, - sym_name = 11, - sym_source_file = 12, - sym_tree = 13, - sym__node = 14, - sym_leaf = 15, - sym_clade = 16, - sym_attributes = 17, - sym_data = 18, - sym_nhx_entry = 19, - sym_length = 20, - sym_nhx_val = 21, - aux_sym_source_file_repeat1 = 22, - aux_sym_clade_repeat1 = 23, - aux_sym_data_repeat1 = 24, - aux_sym_nhx_val_repeat1 = 25, -}; - -static const char * const ts_symbol_names[] = { - [ts_builtin_sym_end] = "end", - [anon_sym_SEMI] = ";", - [anon_sym_LPAREN] = "(", - [anon_sym_COMMA] = ",", - [anon_sym_RPAREN] = ")", - [anon_sym_COLON] = ":", - [anon_sym_LBRACK_AMP_AMPNHX] = "[&&NHX", - [anon_sym_RBRACK] = "]", - [anon_sym_EQ] = "=", - [sym__data_safe] = "_data_safe", - [sym_float] = "float", - [sym_name] = "name", - [sym_source_file] = "source_file", - [sym_tree] = "tree", - [sym__node] = "_node", - [sym_leaf] = "leaf", - [sym_clade] = "clade", - [sym_attributes] = "attributes", - [sym_data] = "data", - [sym_nhx_entry] = "nhx_entry", - [sym_length] = "length", - [sym_nhx_val] = "nhx_val", - [aux_sym_source_file_repeat1] = "source_file_repeat1", - [aux_sym_clade_repeat1] = "clade_repeat1", - [aux_sym_data_repeat1] = "data_repeat1", - [aux_sym_nhx_val_repeat1] = "nhx_val_repeat1", -}; - -static const TSSymbol ts_symbol_map[] = { - [ts_builtin_sym_end] = ts_builtin_sym_end, - [anon_sym_SEMI] = anon_sym_SEMI, - [anon_sym_LPAREN] = anon_sym_LPAREN, - [anon_sym_COMMA] = anon_sym_COMMA, - [anon_sym_RPAREN] = anon_sym_RPAREN, - [anon_sym_COLON] = anon_sym_COLON, - [anon_sym_LBRACK_AMP_AMPNHX] = anon_sym_LBRACK_AMP_AMPNHX, - [anon_sym_RBRACK] = anon_sym_RBRACK, - [anon_sym_EQ] = anon_sym_EQ, - [sym__data_safe] = sym__data_safe, - [sym_float] = sym_float, - [sym_name] = sym_name, - [sym_source_file] = sym_source_file, - [sym_tree] = sym_tree, - [sym__node] = sym__node, - [sym_leaf] = sym_leaf, - [sym_clade] = sym_clade, - [sym_attributes] = sym_attributes, - [sym_data] = sym_data, - [sym_nhx_entry] = sym_nhx_entry, - [sym_length] = sym_length, - [sym_nhx_val] = sym_nhx_val, - [aux_sym_source_file_repeat1] = aux_sym_source_file_repeat1, - [aux_sym_clade_repeat1] = aux_sym_clade_repeat1, - [aux_sym_data_repeat1] = aux_sym_data_repeat1, - [aux_sym_nhx_val_repeat1] = aux_sym_nhx_val_repeat1, -}; - -static const TSSymbolMetadata ts_symbol_metadata[] = { - [ts_builtin_sym_end] = { - .visible = false, - .named = true, - }, - [anon_sym_SEMI] = { - .visible = true, - .named = false, - }, - [anon_sym_LPAREN] = { - .visible = true, - .named = false, - }, - [anon_sym_COMMA] = { - .visible = true, - .named = false, - }, - [anon_sym_RPAREN] = { - .visible = true, - .named = false, - }, - [anon_sym_COLON] = { - .visible = true, - .named = false, - }, - [anon_sym_LBRACK_AMP_AMPNHX] = { - .visible = true, - .named = false, - }, - [anon_sym_RBRACK] = { - .visible = true, - .named = false, - }, - [anon_sym_EQ] = { - .visible = true, - .named = false, - }, - [sym__data_safe] = { - .visible = false, - .named = true, - }, - [sym_float] = { - .visible = true, - .named = true, - }, - [sym_name] = { - .visible = true, - .named = true, - }, - [sym_source_file] = { - .visible = true, - .named = true, - }, - [sym_tree] = { - .visible = true, - .named = true, - }, - [sym__node] = { - .visible = false, - .named = true, - }, - [sym_leaf] = { - .visible = true, - .named = true, - }, - [sym_clade] = { - .visible = true, - .named = true, - }, - [sym_attributes] = { - .visible = true, - .named = true, - }, - [sym_data] = { - .visible = true, - .named = true, - }, - [sym_nhx_entry] = { - .visible = true, - .named = true, - }, - [sym_length] = { - .visible = true, - .named = true, - }, - [sym_nhx_val] = { - .visible = true, - .named = true, - }, - [aux_sym_source_file_repeat1] = { - .visible = false, - .named = false, - }, - [aux_sym_clade_repeat1] = { - .visible = false, - .named = false, - }, - [aux_sym_data_repeat1] = { - .visible = false, - .named = false, - }, - [aux_sym_nhx_val_repeat1] = { - .visible = false, - .named = false, - }, -}; - -enum { - field_attributes = 1, - field_clade = 2, - field_data = 3, - field_entry = 4, - field_key = 5, - field_leaf = 6, - field_length = 7, - field_name = 8, - field_value = 9, -}; - -static const char * const ts_field_names[] = { - [0] = NULL, - [field_attributes] = "attributes", - [field_clade] = "clade", - [field_data] = "data", - [field_entry] = "entry", - [field_key] = "key", - [field_leaf] = "leaf", - [field_length] = "length", - [field_name] = "name", - [field_value] = "value", -}; - -static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { - [1] = {.index = 0, .length = 1}, - [2] = {.index = 1, .length = 1}, - [3] = {.index = 2, .length = 1}, - [4] = {.index = 3, .length = 1}, - [5] = {.index = 4, .length = 1}, - [6] = {.index = 5, .length = 1}, - [7] = {.index = 6, .length = 1}, - [8] = {.index = 7, .length = 2}, - [9] = {.index = 9, .length = 2}, - [10] = {.index = 11, .length = 2}, - [11] = {.index = 13, .length = 4}, - [12] = {.index = 17, .length = 2}, - [13] = {.index = 19, .length = 1}, - [14] = {.index = 20, .length = 2}, - [15] = {.index = 22, .length = 4}, - [16] = {.index = 26, .length = 1}, - [17] = {.index = 27, .length = 2}, -}; - -static const TSFieldMapEntry ts_field_map_entries[] = { - [0] = - {field_name, 0}, - [1] = - {field_leaf, 0}, - [2] = - {field_clade, 0}, - [3] = - {field_attributes, 0}, - [4] = - {field_data, 0}, - [5] = - {field_length, 1}, - [6] = - {field_entry, 0}, - [7] = - {field_attributes, 1}, - {field_name, 0}, - [9] = - {field_clade, 0, .inherited = true}, - {field_leaf, 0, .inherited = true}, - [11] = - {field_clade, 1, .inherited = true}, - {field_leaf, 1, .inherited = true}, - [13] = - {field_clade, 0, .inherited = true}, - {field_clade, 1, .inherited = true}, - {field_leaf, 0, .inherited = true}, - {field_leaf, 1, .inherited = true}, - [17] = - {field_data, 2}, - {field_length, 1}, - [19] = - {field_entry, 1, .inherited = true}, - [20] = - {field_entry, 0, .inherited = true}, - {field_entry, 1, .inherited = true}, - [22] = - {field_clade, 1, .inherited = true}, - {field_clade, 2, .inherited = true}, - {field_leaf, 1, .inherited = true}, - {field_leaf, 2, .inherited = true}, - [26] = - {field_key, 1}, - [27] = - {field_key, 1}, - {field_value, 3}, -}; - -static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { - [0] = {0}, -}; - -static const uint16_t ts_non_terminal_alias_map[] = { - 0, -}; - -static const TSStateId ts_primary_state_ids[STATE_COUNT] = { - [0] = 0, - [1] = 1, - [2] = 2, - [3] = 3, - [4] = 4, - [5] = 5, - [6] = 6, - [7] = 7, - [8] = 8, - [9] = 9, - [10] = 10, - [11] = 11, - [12] = 12, - [13] = 13, - [14] = 14, - [15] = 15, - [16] = 16, - [17] = 17, - [18] = 18, - [19] = 19, - [20] = 20, - [21] = 21, - [22] = 22, - [23] = 23, - [24] = 24, - [25] = 25, - [26] = 26, - [27] = 27, - [28] = 28, - [29] = 29, - [30] = 30, - [31] = 31, - [32] = 32, - [33] = 33, - [34] = 34, - [35] = 35, - [36] = 36, - [37] = 37, - [38] = 38, - [39] = 39, - [40] = 40, - [41] = 41, - [42] = 42, - [43] = 43, - [44] = 44, - [45] = 45, - [46] = 46, - [47] = 47, - [48] = 48, - [49] = 49, - [50] = 50, -}; - -static inline bool sym__data_safe_character_set_1(int32_t c) { - return (c < ',' - ? (c < '\r' - ? (c < '\t' - ? c == 0 - : c <= '\n') - : (c <= '\r' || (c < '(' - ? c == ' ' - : c <= ')'))) - : (c <= ',' || (c < '[' - ? (c < '=' - ? (c >= ':' && c <= ';') - : c <= '=') - : (c <= '[' || c == ']')))); -} - -static inline bool sym_name_character_set_1(int32_t c) { - return (c < '(' - ? (c < '\r' - ? (c < '\t' - ? c == 0 - : c <= '\n') - : (c <= '\r' || c == ' ')) - : (c <= ')' || (c < '[' - ? (c < ':' - ? c == ',' - : c <= ';') - : (c <= '[' || c == ']')))); -} - -static bool ts_lex(TSLexer *lexer, TSStateId state) { - START_LEXER(); - eof = lexer->eof(lexer); - switch (state) { - case 0: - if (eof) ADVANCE(13); - if (lookahead == '(') ADVANCE(15); - if (lookahead == ')') ADVANCE(17); - if (lookahead == ',') ADVANCE(16); - if (lookahead == ':') ADVANCE(18); - if (lookahead == ';') ADVANCE(14); - if (lookahead == '=') ADVANCE(21); - if (lookahead == '[') ADVANCE(2); - if (lookahead == ']') ADVANCE(20); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\r' || - lookahead == ' ') SKIP(0) - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); - if (lookahead != 0) ADVANCE(29); - END_STATE(); - case 1: - if (lookahead == '&') ADVANCE(5); - END_STATE(); - case 2: - if (lookahead == '&') ADVANCE(1); - END_STATE(); - case 3: - if (lookahead == ':') ADVANCE(18); - if (lookahead == '=') ADVANCE(21); - if (lookahead == ']') ADVANCE(20); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\r' || - lookahead == ' ') SKIP(3) - if (lookahead != 0 && - lookahead != '(' && - lookahead != ')' && - lookahead != ',' && - lookahead != ';' && - lookahead != '[') ADVANCE(29); - END_STATE(); - case 4: - if (lookahead == 'H') ADVANCE(6); - END_STATE(); - case 5: - if (lookahead == 'N') ADVANCE(4); - END_STATE(); - case 6: - if (lookahead == 'X') ADVANCE(19); - END_STATE(); - case 7: - if (lookahead == '+' || - lookahead == '-') ADVANCE(11); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(32); - END_STATE(); - case 8: - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\r' || - lookahead == ' ') SKIP(8) - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(30); - END_STATE(); - case 9: - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(30); - END_STATE(); - case 10: - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(31); - END_STATE(); - case 11: - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(32); - END_STATE(); - case 12: - if (eof) ADVANCE(13); - if (lookahead == '(') ADVANCE(15); - if (lookahead == ')') ADVANCE(17); - if (lookahead == ',') ADVANCE(16); - if (lookahead == ':') ADVANCE(18); - if (lookahead == ';') ADVANCE(14); - if (lookahead == '[') ADVANCE(2); - if (lookahead == '\t' || - lookahead == '\n' || - lookahead == '\r' || - lookahead == ' ') SKIP(12) - if (lookahead != 0 && - lookahead != ']') ADVANCE(33); - END_STATE(); - case 13: - ACCEPT_TOKEN(ts_builtin_sym_end); - END_STATE(); - case 14: - ACCEPT_TOKEN(anon_sym_SEMI); - END_STATE(); - case 15: - ACCEPT_TOKEN(anon_sym_LPAREN); - END_STATE(); - case 16: - ACCEPT_TOKEN(anon_sym_COMMA); - END_STATE(); - case 17: - ACCEPT_TOKEN(anon_sym_RPAREN); - END_STATE(); - case 18: - ACCEPT_TOKEN(anon_sym_COLON); - END_STATE(); - case 19: - ACCEPT_TOKEN(anon_sym_LBRACK_AMP_AMPNHX); - END_STATE(); - case 20: - ACCEPT_TOKEN(anon_sym_RBRACK); - END_STATE(); - case 21: - ACCEPT_TOKEN(anon_sym_EQ); - END_STATE(); - case 22: - ACCEPT_TOKEN(sym__data_safe); - if (lookahead == '.') ADVANCE(27); - if (lookahead == '_') ADVANCE(26); - if (lookahead == 'E' || - lookahead == 'e') ADVANCE(25); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); - if (!sym__data_safe_character_set_1(lookahead)) ADVANCE(29); - END_STATE(); - case 23: - ACCEPT_TOKEN(sym__data_safe); - if (lookahead == '_') ADVANCE(27); - if (lookahead == 'E' || - lookahead == 'e') ADVANCE(25); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(23); - if (!sym__data_safe_character_set_1(lookahead)) ADVANCE(29); - END_STATE(); - case 24: - ACCEPT_TOKEN(sym__data_safe); - if (lookahead == '_') ADVANCE(28); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(24); - if (!sym__data_safe_character_set_1(lookahead)) ADVANCE(29); - END_STATE(); - case 25: - ACCEPT_TOKEN(sym__data_safe); - if (lookahead == '+' || - lookahead == '-') ADVANCE(28); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(24); - if (!sym__data_safe_character_set_1(lookahead)) ADVANCE(29); - END_STATE(); - case 26: - ACCEPT_TOKEN(sym__data_safe); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); - if (!sym__data_safe_character_set_1(lookahead)) ADVANCE(29); - END_STATE(); - case 27: - ACCEPT_TOKEN(sym__data_safe); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(23); - if (!sym__data_safe_character_set_1(lookahead)) ADVANCE(29); - END_STATE(); - case 28: - ACCEPT_TOKEN(sym__data_safe); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(24); - if (!sym__data_safe_character_set_1(lookahead)) ADVANCE(29); - END_STATE(); - case 29: - ACCEPT_TOKEN(sym__data_safe); - if (!sym__data_safe_character_set_1(lookahead)) ADVANCE(29); - END_STATE(); - case 30: - ACCEPT_TOKEN(sym_float); - if (lookahead == '.') ADVANCE(10); - if (lookahead == '_') ADVANCE(9); - if (lookahead == 'E' || - lookahead == 'e') ADVANCE(7); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(30); - END_STATE(); - case 31: - ACCEPT_TOKEN(sym_float); - if (lookahead == '_') ADVANCE(10); - if (lookahead == 'E' || - lookahead == 'e') ADVANCE(7); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(31); - END_STATE(); - case 32: - ACCEPT_TOKEN(sym_float); - if (lookahead == '_') ADVANCE(11); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(32); - END_STATE(); - case 33: - ACCEPT_TOKEN(sym_name); - if (!sym_name_character_set_1(lookahead)) ADVANCE(33); - END_STATE(); - default: - return false; - } -} - -static const TSLexMode ts_lex_modes[STATE_COUNT] = { - [0] = {.lex_state = 0}, - [1] = {.lex_state = 12}, - [2] = {.lex_state = 12}, - [3] = {.lex_state = 12}, - [4] = {.lex_state = 12}, - [5] = {.lex_state = 12}, - [6] = {.lex_state = 12}, - [7] = {.lex_state = 12}, - [8] = {.lex_state = 12}, - [9] = {.lex_state = 12}, - [10] = {.lex_state = 0}, - [11] = {.lex_state = 0}, - [12] = {.lex_state = 0}, - [13] = {.lex_state = 0}, - [14] = {.lex_state = 0}, - [15] = {.lex_state = 12}, - [16] = {.lex_state = 3}, - [17] = {.lex_state = 3}, - [18] = {.lex_state = 0}, - [19] = {.lex_state = 3}, - [20] = {.lex_state = 0}, - [21] = {.lex_state = 0}, - [22] = {.lex_state = 0}, - [23] = {.lex_state = 0}, - [24] = {.lex_state = 0}, - [25] = {.lex_state = 0}, - [26] = {.lex_state = 0}, - [27] = {.lex_state = 0}, - [28] = {.lex_state = 0}, - [29] = {.lex_state = 0}, - [30] = {.lex_state = 0}, - [31] = {.lex_state = 0}, - [32] = {.lex_state = 0}, - [33] = {.lex_state = 0}, - [34] = {.lex_state = 0}, - [35] = {.lex_state = 0}, - [36] = {.lex_state = 0}, - [37] = {.lex_state = 0}, - [38] = {.lex_state = 0}, - [39] = {.lex_state = 0}, - [40] = {.lex_state = 0}, - [41] = {.lex_state = 0}, - [42] = {.lex_state = 0}, - [43] = {.lex_state = 3}, - [44] = {.lex_state = 0}, - [45] = {.lex_state = 8}, - [46] = {.lex_state = 0}, - [47] = {.lex_state = 0}, - [48] = {.lex_state = 0}, - [49] = {.lex_state = 0}, - [50] = {.lex_state = 0}, -}; - -static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { - [0] = { - [ts_builtin_sym_end] = ACTIONS(1), - [anon_sym_SEMI] = ACTIONS(1), - [anon_sym_LPAREN] = ACTIONS(1), - [anon_sym_COMMA] = ACTIONS(1), - [anon_sym_RPAREN] = ACTIONS(1), - [anon_sym_COLON] = ACTIONS(1), - [anon_sym_LBRACK_AMP_AMPNHX] = ACTIONS(1), - [anon_sym_RBRACK] = ACTIONS(1), - [anon_sym_EQ] = ACTIONS(1), - [sym__data_safe] = ACTIONS(1), - [sym_float] = ACTIONS(1), - }, - [1] = { - [sym_source_file] = STATE(48), - [sym_tree] = STATE(4), - [sym__node] = STATE(49), - [sym_leaf] = STATE(38), - [sym_clade] = STATE(30), - [sym_attributes] = STATE(28), - [sym_data] = STATE(32), - [aux_sym_source_file_repeat1] = STATE(4), - [ts_builtin_sym_end] = ACTIONS(3), - [anon_sym_LPAREN] = ACTIONS(5), - [anon_sym_COLON] = ACTIONS(7), - [anon_sym_LBRACK_AMP_AMPNHX] = ACTIONS(9), - [sym_name] = ACTIONS(11), - }, -}; - -static const uint16_t ts_small_parse_table[] = { - [0] = 12, - ACTIONS(5), 1, - anon_sym_LPAREN, - ACTIONS(7), 1, - anon_sym_COLON, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - ACTIONS(11), 1, - sym_name, - ACTIONS(13), 1, - anon_sym_COMMA, - ACTIONS(15), 1, - anon_sym_RPAREN, - STATE(28), 1, - sym_attributes, - STATE(30), 1, - sym_clade, - STATE(32), 1, - sym_data, - STATE(34), 1, - sym__node, - STATE(38), 1, - sym_leaf, - STATE(41), 1, - aux_sym_clade_repeat1, - [37] = 11, - ACTIONS(17), 1, - ts_builtin_sym_end, - ACTIONS(19), 1, - anon_sym_LPAREN, - ACTIONS(22), 1, - anon_sym_COLON, - ACTIONS(25), 1, - anon_sym_LBRACK_AMP_AMPNHX, - ACTIONS(28), 1, - sym_name, - STATE(28), 1, - sym_attributes, - STATE(30), 1, - sym_clade, - STATE(32), 1, - sym_data, - STATE(38), 1, - sym_leaf, - STATE(49), 1, - sym__node, - STATE(3), 2, - sym_tree, - aux_sym_source_file_repeat1, - [72] = 11, - ACTIONS(5), 1, - anon_sym_LPAREN, - ACTIONS(7), 1, - anon_sym_COLON, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - ACTIONS(11), 1, - sym_name, - ACTIONS(31), 1, - ts_builtin_sym_end, - STATE(28), 1, - sym_attributes, - STATE(30), 1, - sym_clade, - STATE(32), 1, - sym_data, - STATE(38), 1, - sym_leaf, - STATE(49), 1, - sym__node, - STATE(3), 2, - sym_tree, - aux_sym_source_file_repeat1, - [107] = 10, - ACTIONS(5), 1, - anon_sym_LPAREN, - ACTIONS(7), 1, - anon_sym_COLON, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - ACTIONS(11), 1, - sym_name, - STATE(28), 1, - sym_attributes, - STATE(30), 1, - sym_clade, - STATE(32), 1, - sym_data, - STATE(38), 1, - sym_leaf, - STATE(47), 1, - sym__node, - ACTIONS(33), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - [139] = 6, - ACTIONS(7), 1, - anon_sym_COLON, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - ACTIONS(37), 1, - sym_name, - STATE(32), 1, - sym_data, - STATE(33), 1, - sym_attributes, - ACTIONS(35), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [160] = 6, - ACTIONS(7), 1, - anon_sym_COLON, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - ACTIONS(41), 1, - sym_name, - STATE(24), 1, - sym_attributes, - STATE(32), 1, - sym_data, - ACTIONS(39), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [181] = 6, - ACTIONS(7), 1, - anon_sym_COLON, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - ACTIONS(43), 1, - sym_name, - STATE(32), 1, - sym_data, - STATE(39), 1, - sym_attributes, - ACTIONS(39), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [202] = 6, - ACTIONS(7), 1, - anon_sym_COLON, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - ACTIONS(47), 1, - sym_name, - STATE(27), 1, - sym_attributes, - STATE(32), 1, - sym_data, - ACTIONS(45), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [223] = 5, - ACTIONS(7), 1, - anon_sym_COLON, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - STATE(25), 1, - sym_attributes, - STATE(32), 1, - sym_data, - ACTIONS(49), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [241] = 5, - ACTIONS(7), 1, - anon_sym_COLON, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - STATE(26), 1, - sym_attributes, - STATE(32), 1, - sym_data, - ACTIONS(51), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [259] = 5, - ACTIONS(7), 1, - anon_sym_COLON, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - STATE(32), 1, - sym_data, - STATE(42), 1, - sym_attributes, - ACTIONS(53), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [277] = 5, - ACTIONS(7), 1, - anon_sym_COLON, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - STATE(32), 1, - sym_data, - STATE(40), 1, - sym_attributes, - ACTIONS(51), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [295] = 5, - ACTIONS(7), 1, - anon_sym_COLON, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - STATE(32), 1, - sym_data, - STATE(37), 1, - sym_attributes, - ACTIONS(55), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [313] = 1, - ACTIONS(57), 5, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_COLON, - anon_sym_LBRACK_AMP_AMPNHX, - sym_name, - [321] = 3, - ACTIONS(61), 1, - sym__data_safe, - STATE(16), 1, - aux_sym_nhx_val_repeat1, - ACTIONS(59), 3, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_EQ, - [333] = 4, - ACTIONS(66), 1, - sym__data_safe, - STATE(19), 1, - aux_sym_nhx_val_repeat1, - STATE(46), 1, - sym_nhx_val, - ACTIONS(64), 2, - anon_sym_COLON, - anon_sym_RBRACK, - [347] = 3, - ACTIONS(9), 1, - anon_sym_LBRACK_AMP_AMPNHX, - STATE(23), 1, - sym_data, - ACTIONS(68), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [359] = 3, - ACTIONS(72), 1, - sym__data_safe, - STATE(16), 1, - aux_sym_nhx_val_repeat1, - ACTIONS(70), 3, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_EQ, - [371] = 4, - ACTIONS(74), 1, - anon_sym_COLON, - ACTIONS(76), 1, - anon_sym_RBRACK, - STATE(22), 1, - aux_sym_data_repeat1, - STATE(44), 1, - sym_nhx_entry, - [384] = 1, - ACTIONS(78), 4, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - anon_sym_LBRACK_AMP_AMPNHX, - [391] = 4, - ACTIONS(80), 1, - anon_sym_COLON, - ACTIONS(83), 1, - anon_sym_RBRACK, - STATE(22), 1, - aux_sym_data_repeat1, - STATE(44), 1, - sym_nhx_entry, - [404] = 1, - ACTIONS(85), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [410] = 1, - ACTIONS(51), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [416] = 1, - ACTIONS(87), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [422] = 1, - ACTIONS(89), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [428] = 1, - ACTIONS(55), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [434] = 1, - ACTIONS(91), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [440] = 3, - ACTIONS(13), 1, - anon_sym_COMMA, - ACTIONS(93), 1, - anon_sym_RPAREN, - STATE(31), 1, - aux_sym_clade_repeat1, - [450] = 1, - ACTIONS(95), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [456] = 3, - ACTIONS(97), 1, - anon_sym_COMMA, - ACTIONS(100), 1, - anon_sym_RPAREN, - STATE(31), 1, - aux_sym_clade_repeat1, - [466] = 1, - ACTIONS(102), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [472] = 1, - ACTIONS(49), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [478] = 3, - ACTIONS(13), 1, - anon_sym_COMMA, - ACTIONS(104), 1, - anon_sym_RPAREN, - STATE(29), 1, - aux_sym_clade_repeat1, - [488] = 1, - ACTIONS(106), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [494] = 3, - ACTIONS(74), 1, - anon_sym_COLON, - STATE(20), 1, - aux_sym_data_repeat1, - STATE(44), 1, - sym_nhx_entry, - [504] = 1, - ACTIONS(108), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [510] = 1, - ACTIONS(110), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [516] = 1, - ACTIONS(51), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [522] = 1, - ACTIONS(89), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [528] = 3, - ACTIONS(13), 1, - anon_sym_COMMA, - ACTIONS(112), 1, - anon_sym_RPAREN, - STATE(31), 1, - aux_sym_clade_repeat1, - [538] = 1, - ACTIONS(114), 3, - anon_sym_SEMI, - anon_sym_COMMA, - anon_sym_RPAREN, - [544] = 3, - ACTIONS(66), 1, - sym__data_safe, - STATE(19), 1, - aux_sym_nhx_val_repeat1, - STATE(50), 1, - sym_nhx_val, - [554] = 1, - ACTIONS(116), 2, - anon_sym_COLON, - anon_sym_RBRACK, - [559] = 2, - ACTIONS(118), 1, - sym_float, - STATE(18), 1, - sym_length, - [566] = 1, - ACTIONS(120), 2, - anon_sym_COLON, - anon_sym_RBRACK, - [571] = 1, - ACTIONS(122), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - [576] = 1, - ACTIONS(124), 1, - ts_builtin_sym_end, - [580] = 1, - ACTIONS(126), 1, - anon_sym_SEMI, - [584] = 1, - ACTIONS(128), 1, - anon_sym_EQ, -}; - -static const uint32_t ts_small_parse_table_map[] = { - [SMALL_STATE(2)] = 0, - [SMALL_STATE(3)] = 37, - [SMALL_STATE(4)] = 72, - [SMALL_STATE(5)] = 107, - [SMALL_STATE(6)] = 139, - [SMALL_STATE(7)] = 160, - [SMALL_STATE(8)] = 181, - [SMALL_STATE(9)] = 202, - [SMALL_STATE(10)] = 223, - [SMALL_STATE(11)] = 241, - [SMALL_STATE(12)] = 259, - [SMALL_STATE(13)] = 277, - [SMALL_STATE(14)] = 295, - [SMALL_STATE(15)] = 313, - [SMALL_STATE(16)] = 321, - [SMALL_STATE(17)] = 333, - [SMALL_STATE(18)] = 347, - [SMALL_STATE(19)] = 359, - [SMALL_STATE(20)] = 371, - [SMALL_STATE(21)] = 384, - [SMALL_STATE(22)] = 391, - [SMALL_STATE(23)] = 404, - [SMALL_STATE(24)] = 410, - [SMALL_STATE(25)] = 416, - [SMALL_STATE(26)] = 422, - [SMALL_STATE(27)] = 428, - [SMALL_STATE(28)] = 434, - [SMALL_STATE(29)] = 440, - [SMALL_STATE(30)] = 450, - [SMALL_STATE(31)] = 456, - [SMALL_STATE(32)] = 466, - [SMALL_STATE(33)] = 472, - [SMALL_STATE(34)] = 478, - [SMALL_STATE(35)] = 488, - [SMALL_STATE(36)] = 494, - [SMALL_STATE(37)] = 504, - [SMALL_STATE(38)] = 510, - [SMALL_STATE(39)] = 516, - [SMALL_STATE(40)] = 522, - [SMALL_STATE(41)] = 528, - [SMALL_STATE(42)] = 538, - [SMALL_STATE(43)] = 544, - [SMALL_STATE(44)] = 554, - [SMALL_STATE(45)] = 559, - [SMALL_STATE(46)] = 566, - [SMALL_STATE(47)] = 571, - [SMALL_STATE(48)] = 576, - [SMALL_STATE(49)] = 580, - [SMALL_STATE(50)] = 584, -}; - -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}}, REDUCE(sym_source_file, 0), - [5] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [17] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), - [19] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(2), - [22] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(45), - [25] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(36), - [28] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(12), - [31] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1), - [33] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_clade_repeat1, 1), - [35] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_clade, 4, .production_id = 15), - [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [39] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_clade, 3, .production_id = 10), - [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [45] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_clade, 2), - [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [49] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_clade, 5, .production_id = 15), - [51] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_clade, 4, .production_id = 10), - [53] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_leaf, 1, .production_id = 1), - [55] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_clade, 3), - [57] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tree, 2, .production_id = 9), - [59] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_nhx_val_repeat1, 2), - [61] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_nhx_val_repeat1, 2), SHIFT_REPEAT(16), - [64] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nhx_entry, 3, .production_id = 16), - [66] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [68] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attributes, 2, .production_id = 6), - [70] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nhx_val, 1), - [72] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [74] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [76] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [78] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_length, 1), - [80] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_data_repeat1, 2, .production_id = 14), SHIFT_REPEAT(43), - [83] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_data_repeat1, 2, .production_id = 14), - [85] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attributes, 3, .production_id = 12), - [87] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_clade, 6, .production_id = 15), - [89] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_clade, 5, .production_id = 10), - [91] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_leaf, 1, .production_id = 4), - [93] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [95] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__node, 1, .production_id = 3), - [97] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_clade_repeat1, 2, .production_id = 11), SHIFT_REPEAT(5), - [100] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_clade_repeat1, 2, .production_id = 11), - [102] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attributes, 1, .production_id = 5), - [104] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [106] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_data, 3, .production_id = 13), - [108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_clade, 4), - [110] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__node, 1, .production_id = 2), - [112] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_leaf, 2, .production_id = 8), - [116] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_data_repeat1, 1, .production_id = 7), - [118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nhx_entry, 4, .production_id = 17), - [122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_clade_repeat1, 2, .production_id = 10), - [124] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), -}; - -#ifdef __cplusplus -extern "C" { -#endif -#ifdef _WIN32 -#define extern __declspec(dllexport) -#endif - -extern const TSLanguage *tree_sitter_newick(void) { - static const TSLanguage language = { - .version = LANGUAGE_VERSION, - .symbol_count = SYMBOL_COUNT, - .alias_count = ALIAS_COUNT, - .token_count = TOKEN_COUNT, - .external_token_count = EXTERNAL_TOKEN_COUNT, - .state_count = STATE_COUNT, - .large_state_count = LARGE_STATE_COUNT, - .production_id_count = PRODUCTION_ID_COUNT, - .field_count = FIELD_COUNT, - .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, - .parse_table = &ts_parse_table[0][0], - .small_parse_table = ts_small_parse_table, - .small_parse_table_map = ts_small_parse_table_map, - .parse_actions = ts_parse_actions, - .symbol_names = ts_symbol_names, - .field_names = ts_field_names, - .field_map_slices = ts_field_map_slices, - .field_map_entries = ts_field_map_entries, - .symbol_metadata = ts_symbol_metadata, - .public_symbol_map = ts_symbol_map, - .alias_map = ts_non_terminal_alias_map, - .alias_sequences = &ts_alias_sequences[0][0], - .lex_modes = ts_lex_modes, - .lex_fn = ts_lex, - .primary_state_ids = ts_primary_state_ids, - }; - return &language; -} -#ifdef __cplusplus -} -#endif diff --git a/vendored_parsers/tree-sitter-newick/src/tree_sitter/parser.h b/vendored_parsers/tree-sitter-newick/src/tree_sitter/parser.h deleted file mode 100644 index 2b14ac104..000000000 --- a/vendored_parsers/tree-sitter-newick/src/tree_sitter/parser.h +++ /dev/null @@ -1,224 +0,0 @@ -#ifndef TREE_SITTER_PARSER_H_ -#define TREE_SITTER_PARSER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include - -#define ts_builtin_sym_error ((TSSymbol)-1) -#define ts_builtin_sym_end 0 -#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 - -typedef uint16_t TSStateId; - -#ifndef TREE_SITTER_API_H_ -typedef uint16_t TSSymbol; -typedef uint16_t TSFieldId; -typedef struct TSLanguage TSLanguage; -#endif - -typedef struct { - TSFieldId field_id; - uint8_t child_index; - bool inherited; -} TSFieldMapEntry; - -typedef struct { - uint16_t index; - uint16_t length; -} TSFieldMapSlice; - -typedef struct { - bool visible; - bool named; - bool supertype; -} TSSymbolMetadata; - -typedef struct TSLexer TSLexer; - -struct TSLexer { - int32_t lookahead; - TSSymbol result_symbol; - void (*advance)(TSLexer *, bool); - void (*mark_end)(TSLexer *); - uint32_t (*get_column)(TSLexer *); - bool (*is_at_included_range_start)(const TSLexer *); - bool (*eof)(const TSLexer *); -}; - -typedef enum { - TSParseActionTypeShift, - TSParseActionTypeReduce, - TSParseActionTypeAccept, - TSParseActionTypeRecover, -} TSParseActionType; - -typedef union { - struct { - uint8_t type; - TSStateId state; - bool extra; - bool repetition; - } shift; - struct { - uint8_t type; - uint8_t child_count; - TSSymbol symbol; - int16_t dynamic_precedence; - uint16_t production_id; - } reduce; - uint8_t type; -} TSParseAction; - -typedef struct { - uint16_t lex_state; - uint16_t external_lex_state; -} TSLexMode; - -typedef union { - TSParseAction action; - struct { - uint8_t count; - bool reusable; - } entry; -} TSParseActionEntry; - -struct TSLanguage { - uint32_t version; - uint32_t symbol_count; - uint32_t alias_count; - uint32_t token_count; - uint32_t external_token_count; - uint32_t state_count; - uint32_t large_state_count; - uint32_t production_id_count; - uint32_t field_count; - uint16_t max_alias_sequence_length; - const uint16_t *parse_table; - const uint16_t *small_parse_table; - const uint32_t *small_parse_table_map; - const TSParseActionEntry *parse_actions; - const char * const *symbol_names; - const char * const *field_names; - const TSFieldMapSlice *field_map_slices; - const TSFieldMapEntry *field_map_entries; - const TSSymbolMetadata *symbol_metadata; - const TSSymbol *public_symbol_map; - const uint16_t *alias_map; - const TSSymbol *alias_sequences; - const TSLexMode *lex_modes; - bool (*lex_fn)(TSLexer *, TSStateId); - bool (*keyword_lex_fn)(TSLexer *, TSStateId); - TSSymbol keyword_capture_token; - struct { - const bool *states; - const TSSymbol *symbol_map; - void *(*create)(void); - void (*destroy)(void *); - bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist); - unsigned (*serialize)(void *, char *); - void (*deserialize)(void *, const char *, unsigned); - } external_scanner; - const TSStateId *primary_state_ids; -}; - -/* - * Lexer Macros - */ - -#define START_LEXER() \ - bool result = false; \ - bool skip = false; \ - bool eof = false; \ - int32_t lookahead; \ - goto start; \ - next_state: \ - lexer->advance(lexer, skip); \ - start: \ - skip = false; \ - lookahead = lexer->lookahead; - -#define ADVANCE(state_value) \ - { \ - state = state_value; \ - goto next_state; \ - } - -#define SKIP(state_value) \ - { \ - skip = true; \ - state = state_value; \ - goto next_state; \ - } - -#define ACCEPT_TOKEN(symbol_value) \ - result = true; \ - lexer->result_symbol = symbol_value; \ - lexer->mark_end(lexer); - -#define END_STATE() return result; - -/* - * Parse Table Macros - */ - -#define SMALL_STATE(id) id - LARGE_STATE_COUNT - -#define STATE(id) id - -#define ACTIONS(id) id - -#define SHIFT(state_value) \ - {{ \ - .shift = { \ - .type = TSParseActionTypeShift, \ - .state = state_value \ - } \ - }} - -#define SHIFT_REPEAT(state_value) \ - {{ \ - .shift = { \ - .type = TSParseActionTypeShift, \ - .state = state_value, \ - .repetition = true \ - } \ - }} - -#define SHIFT_EXTRA() \ - {{ \ - .shift = { \ - .type = TSParseActionTypeShift, \ - .extra = true \ - } \ - }} - -#define REDUCE(symbol_val, child_count_val, ...) \ - {{ \ - .reduce = { \ - .type = TSParseActionTypeReduce, \ - .symbol = symbol_val, \ - .child_count = child_count_val, \ - __VA_ARGS__ \ - }, \ - }} - -#define RECOVER() \ - {{ \ - .type = TSParseActionTypeRecover \ - }} - -#define ACCEPT_INPUT() \ - {{ \ - .type = TSParseActionTypeAccept \ - }} - -#ifdef __cplusplus -} -#endif - -#endif // TREE_SITTER_PARSER_H_