summaryrefslogtreecommitdiff
path: root/textproc
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--textproc/Makefile8
-rw-r--r--textproc/angle-grinder/Makefile2
-rw-r--r--textproc/aq/Makefile2
-rw-r--r--textproc/bat/Makefile2
-rw-r--r--textproc/biodiff/Makefile2
-rw-r--r--textproc/cast2gif/Makefile2
-rw-r--r--textproc/choose/Makefile1
-rw-r--r--textproc/code-minimap/Makefile2
-rw-r--r--textproc/comrak/Makefile1
-rw-r--r--textproc/csview/Makefile2
-rw-r--r--textproc/csvlens/Makefile2
-rw-r--r--textproc/difftastic/Makefile2
-rw-r--r--textproc/doxx/Makefile1
-rw-r--r--textproc/evtx/Makefile2
-rw-r--r--textproc/fblog/Makefile2
-rw-r--r--textproc/feluda/Makefile1
-rw-r--r--textproc/fzf/Makefile2
-rw-r--r--textproc/fzf/distinfo10
-rw-r--r--textproc/grass/Makefile2
-rw-r--r--textproc/harper/Makefile2
-rw-r--r--textproc/harper/Makefile.crates62
-rw-r--r--textproc/harper/distinfo130
-rw-r--r--textproc/html-query/Makefile1
-rw-r--r--textproc/htmlq/Makefile2
-rw-r--r--textproc/itstool/Makefile9
-rw-r--r--textproc/itstool/distinfo4
-rw-r--r--textproc/itstool/files/patch-PR1888
-rw-r--r--textproc/itstool/files/patch-itstool.in52
-rw-r--r--textproc/itstool/files/patch-py-lxml1490
-rw-r--r--textproc/jaq/Makefile2
-rw-r--r--textproc/jless/Makefile2
-rw-r--r--textproc/jnv/Makefile1
-rw-r--r--textproc/jql/Makefile1
-rw-r--r--textproc/kibana8/Makefile10
-rw-r--r--textproc/logseq/Makefile3
-rw-r--r--textproc/mdbook-linkcheck/Makefile2
-rw-r--r--textproc/mdbook-mermaid/Makefile2
-rw-r--r--textproc/mdbook/Makefile1
-rw-r--r--textproc/mdq/Makefile2
-rw-r--r--textproc/meilisearch/Makefile2
-rw-r--r--textproc/opensearch-dashboards210/Makefile15
-rw-r--r--textproc/opensearch-dashboards210/distinfo3
-rw-r--r--textproc/opensearch-dashboards213/Makefile15
-rw-r--r--textproc/opensearch-dashboards213/distinfo3
-rw-r--r--textproc/opensearch-dashboards216/Makefile85
-rw-r--r--textproc/opensearch-dashboards216/distinfo3
-rw-r--r--textproc/opensearch-dashboards216/files/opensearch-dashboards.in79
-rw-r--r--textproc/opensearch-dashboards216/files/pkg-deinstall.in20
-rw-r--r--textproc/opensearch-dashboards216/pkg-descr3
-rw-r--r--textproc/otree/Makefile1
-rw-r--r--textproc/py-charset-normalizer/Makefile2
-rw-r--r--textproc/py-charset-normalizer/distinfo6
-rw-r--r--textproc/py-charset-normalizer/files/patch-pyproject.toml9
-rw-r--r--textproc/py-elastic-transport/Makefile26
-rw-r--r--textproc/py-elastic-transport/distinfo3
-rw-r--r--textproc/py-elastic-transport/pkg-descr4
-rw-r--r--textproc/py-elasticsearch/Makefile13
-rw-r--r--textproc/py-elasticsearch/distinfo6
-rw-r--r--textproc/py-elasticsearch7/Makefile44
-rw-r--r--textproc/py-elasticsearch7/distinfo3
-rw-r--r--textproc/py-elasticsearch7/pkg-descr15
-rw-r--r--textproc/py-grimoire-elk/Makefile1
-rw-r--r--textproc/py-jiter/Makefile2
-rw-r--r--textproc/py-json-repair/Makefile25
-rw-r--r--textproc/py-json-repair/distinfo3
-rw-r--r--textproc/py-json-repair/files/patch-pyproject.toml18
-rw-r--r--textproc/py-json-repair/pkg-descr1
-rw-r--r--textproc/py-mkdocs-include-markdown-plugin/Makefile2
-rw-r--r--textproc/py-mkdocs-include-markdown-plugin/distinfo6
-rw-r--r--textproc/py-ocrmypdf/Makefile1
-rw-r--r--textproc/py-pdfminer.six/Makefile1
-rw-r--r--textproc/py-pikepdf/Makefile2
-rw-r--r--textproc/py-pycddl/Makefile2
-rw-r--r--textproc/py-python-frontmatter/Makefile28
-rw-r--r--textproc/py-python-frontmatter/distinfo3
-rw-r--r--textproc/py-python-frontmatter/pkg-descr2
-rw-r--r--textproc/py-python-pptx/Makefile2
-rw-r--r--textproc/py-qrcode/Makefile1
-rw-r--r--textproc/py-sphinx-gallery/Makefile1
-rw-r--r--textproc/py-sphinxcontrib-actdiag/Makefile2
-rw-r--r--textproc/py-sphinxcontrib-blockdiag/Makefile2
-rw-r--r--textproc/py-sphinxcontrib-nwdiag/Makefile2
-rw-r--r--textproc/py-sphinxcontrib-seqdiag/Makefile9
-rw-r--r--textproc/py-sphinxcontrib-svg2pdfconverter/Makefile1
-rw-r--r--textproc/py-tiktoken/Makefile2
-rw-r--r--textproc/py-tokenizers/Makefile5
-rw-r--r--textproc/py-tokenizers/Makefile.crates97
-rw-r--r--textproc/py-tokenizers/distinfo196
-rw-r--r--textproc/py-towncrier/Makefile2
-rw-r--r--textproc/py-towncrier/distinfo6
-rw-r--r--textproc/py-wordcloud/Makefile1
-rw-r--r--textproc/py-xhtml2pdf/Makefile1
-rw-r--r--textproc/quickwit/Makefile2
-rw-r--r--textproc/riffdiff/Makefile1
-rw-r--r--textproc/ripgrep-all/Makefile2
-rw-r--r--textproc/ripgrep/Makefile2
-rw-r--r--textproc/rubygem-asciidoctor-pdf/Makefile4
-rw-r--r--textproc/rubygem-commonmarker/Makefile2
-rw-r--r--textproc/rubygem-elasticsearch-api/Makefile2
-rw-r--r--textproc/rubygem-elasticsearch-api/distinfo6
-rw-r--r--textproc/rubygem-elasticsearch-api8/Makefile2
-rw-r--r--textproc/rubygem-elasticsearch-api8/distinfo6
-rw-r--r--textproc/rubygem-elasticsearch/Makefile2
-rw-r--r--textproc/rubygem-elasticsearch/distinfo6
-rw-r--r--textproc/rubygem-elasticsearch8/Makefile2
-rw-r--r--textproc/rubygem-elasticsearch8/distinfo6
-rw-r--r--textproc/rubygem-gitlab-glfm-markdown/Makefile1
-rw-r--r--textproc/sad/Makefile2
-rw-r--r--textproc/sd/Makefile2
-rw-r--r--textproc/sonic/Makefile2
-rw-r--r--textproc/television/Makefile1
-rw-r--r--textproc/tokay/Makefile1
-rw-r--r--textproc/tomlq/Makefile2
-rw-r--r--textproc/tree-sitter-grammars/Makefile75
-rw-r--r--textproc/tree-sitter-grammars/Makefile.GH_TUPLE198
-rw-r--r--textproc/tree-sitter-grammars/Makefile.crates54
-rw-r--r--textproc/tree-sitter-grammars/distinfo511
-rw-r--r--textproc/tree-sitter-grammars/files/patch-src_main.rs33
-rw-r--r--textproc/tree-sitter-grammars/gh_tuples.sh36
-rw-r--r--textproc/tree-sitter-grammars/pkg-descr9
-rw-r--r--textproc/tree-sitter-grammars/pkg-plist203
-rw-r--r--textproc/ttynt/Makefile2
-rw-r--r--textproc/tui-journal/Makefile1
-rw-r--r--textproc/typst/Makefile2
-rw-r--r--textproc/xan/Makefile1
-rw-r--r--textproc/xml2rfc/Makefile2
-rw-r--r--textproc/xml2rfc/distinfo6
-rw-r--r--textproc/xsv-rs/Makefile2
128 files changed, 3178 insertions, 714 deletions
diff --git a/textproc/Makefile b/textproc/Makefile
index 8844023e0091..cc5bbaff286a 100644
--- a/textproc/Makefile
+++ b/textproc/Makefile
@@ -525,9 +525,6 @@
SUBDIR += openjade
SUBDIR += opensearch
SUBDIR += opensearch-dashboards
- SUBDIR += opensearch-dashboards210
- SUBDIR += opensearch-dashboards213
- SUBDIR += opensearch-dashboards216
SUBDIR += opensearch-dashboards219
SUBDIR += opensearch13
SUBDIR += opensearch210
@@ -1375,6 +1372,7 @@
SUBDIR += py-dparse
SUBDIR += py-duecredit
SUBDIR += py-ebcdic
+ SUBDIR += py-elastic-transport
SUBDIR += py-elasticsearch
SUBDIR += py-elasticsearch-async
SUBDIR += py-elasticsearch-curator
@@ -1382,6 +1380,7 @@
SUBDIR += py-elasticsearch-dsl6
SUBDIR += py-elasticsearch5
SUBDIR += py-elasticsearch6
+ SUBDIR += py-elasticsearch7
SUBDIR += py-elementpath
SUBDIR += py-emeraldtree
SUBDIR += py-empy
@@ -1433,6 +1432,7 @@
SUBDIR += py-jinjanator-plugins
SUBDIR += py-jiter
SUBDIR += py-jq
+ SUBDIR += py-json-repair
SUBDIR += py-json2html
SUBDIR += py-jsonslicer
SUBDIR += py-jsx-lexer
@@ -1566,6 +1566,7 @@
SUBDIR += py-python-bidi
SUBDIR += py-python-docs-theme
SUBDIR += py-python-docx
+ SUBDIR += py-python-frontmatter
SUBDIR += py-python-gettext
SUBDIR += py-python-lsp-black
SUBDIR += py-python-lsp-jsonrpc
@@ -2121,6 +2122,7 @@
SUBDIR += translate-shell
SUBDIR += translate-toolkit
SUBDIR += trdsql
+ SUBDIR += tree-sitter-grammars
SUBDIR += ts-hunspell
SUBDIR += tth
SUBDIR += tttcmds
diff --git a/textproc/angle-grinder/Makefile b/textproc/angle-grinder/Makefile
index 9f3c7b037300..3924c1fb834c 100644
--- a/textproc/angle-grinder/Makefile
+++ b/textproc/angle-grinder/Makefile
@@ -1,7 +1,7 @@
PORTNAME= angle-grinder
DISTVERSIONPREFIX= v
DISTVERSION= 0.19.4
-PORTREVISION= 10
+PORTREVISION= 11
CATEGORIES= textproc
MAINTAINER= lcook@FreeBSD.org
diff --git a/textproc/aq/Makefile b/textproc/aq/Makefile
index e95b13424a87..9627e421f78f 100644
--- a/textproc/aq/Makefile
+++ b/textproc/aq/Makefile
@@ -1,6 +1,6 @@
PORTNAME= aq
DISTVERSION= 0.3.0
-PORTREVISION= 11
+PORTREVISION= 12
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/bat/Makefile b/textproc/bat/Makefile
index 9decd89f9f71..7602d1131bfd 100644
--- a/textproc/bat/Makefile
+++ b/textproc/bat/Makefile
@@ -1,7 +1,7 @@
PORTNAME= bat
DISTVERSIONPREFIX= v
DISTVERSION= 0.25.0
-PORTREVISION= 11
+PORTREVISION= 12
CATEGORIES= textproc
MAINTAINER= pizzamig@FreeBSD.org
diff --git a/textproc/biodiff/Makefile b/textproc/biodiff/Makefile
index 9f7a6c6d7420..0a85a76ae16e 100644
--- a/textproc/biodiff/Makefile
+++ b/textproc/biodiff/Makefile
@@ -1,7 +1,7 @@
PORTNAME= biodiff
DISTVERSIONPREFIX= v
DISTVERSION= 1.2.1
-PORTREVISION= 11
+PORTREVISION= 12
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/cast2gif/Makefile b/textproc/cast2gif/Makefile
index 63c934e482de..b5318f9ac781 100644
--- a/textproc/cast2gif/Makefile
+++ b/textproc/cast2gif/Makefile
@@ -2,7 +2,7 @@ PORTNAME= cast2gif
DISTVERSIONPREFIX= v
DISTVERSION= 0.1.0-5
DISTVERSIONSUFFIX= -g7373161
-PORTREVISION= 17
+PORTREVISION= 18
CATEGORIES= textproc
MAINTAINER= eduardo@FreeBSD.org
diff --git a/textproc/choose/Makefile b/textproc/choose/Makefile
index e1ace5f649cf..f6268a5c3789 100644
--- a/textproc/choose/Makefile
+++ b/textproc/choose/Makefile
@@ -1,6 +1,7 @@
PORTNAME= choose
DISTVERSIONPREFIX= v
DISTVERSION= 1.3.7
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= tagattie@FreeBSD.org
diff --git a/textproc/code-minimap/Makefile b/textproc/code-minimap/Makefile
index 2ff337dd72a6..85c5ba286344 100644
--- a/textproc/code-minimap/Makefile
+++ b/textproc/code-minimap/Makefile
@@ -1,7 +1,7 @@
PORTNAME= code-minimap
DISTVERSIONPREFIX= v
DISTVERSION= 0.6.8
-PORTREVISION= 5
+PORTREVISION= 6
CATEGORIES= textproc
MAINTAINER= dereks@lifeofadishwasher.com
diff --git a/textproc/comrak/Makefile b/textproc/comrak/Makefile
index 67cc7d1230b2..337e12b8b085 100644
--- a/textproc/comrak/Makefile
+++ b/textproc/comrak/Makefile
@@ -1,6 +1,7 @@
PORTNAME= comrak
DISTVERSIONPREFIX= v
DISTVERSION= 0.40.0
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/csview/Makefile b/textproc/csview/Makefile
index 2ea7378326ab..7d9aa9de47e1 100644
--- a/textproc/csview/Makefile
+++ b/textproc/csview/Makefile
@@ -1,7 +1,7 @@
PORTNAME= csview
DISTVERSIONPREFIX= v
DISTVERSION= 1.3.3
-PORTREVISION= 9
+PORTREVISION= 10
CATEGORIES= textproc
MAINTAINER= ruben@verweg.com
diff --git a/textproc/csvlens/Makefile b/textproc/csvlens/Makefile
index a3288ccad3d4..e671cf1c4655 100644
--- a/textproc/csvlens/Makefile
+++ b/textproc/csvlens/Makefile
@@ -1,7 +1,7 @@
PORTNAME= csvlens
DISTVERSIONPREFIX= v
DISTVERSION= 0.13.0
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= textproc
MAINTAINER= tagattie@FreeBSD.org
diff --git a/textproc/difftastic/Makefile b/textproc/difftastic/Makefile
index 62c11e086158..f547c4ecd0cd 100644
--- a/textproc/difftastic/Makefile
+++ b/textproc/difftastic/Makefile
@@ -1,6 +1,6 @@
PORTNAME= difftastic
DISTVERSION= 0.64.0
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= textproc
MAINTAINER= amdmi3@FreeBSD.org
diff --git a/textproc/doxx/Makefile b/textproc/doxx/Makefile
index 61c1b04fd103..9ff472017577 100644
--- a/textproc/doxx/Makefile
+++ b/textproc/doxx/Makefile
@@ -1,6 +1,7 @@
PORTNAME= doxx
DISTVERSIONPREFIX= v
DISTVERSION= 0.1.1
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= wen@FreeBSD.org
diff --git a/textproc/evtx/Makefile b/textproc/evtx/Makefile
index 75c0e967c034..3d21f1fbe457 100644
--- a/textproc/evtx/Makefile
+++ b/textproc/evtx/Makefile
@@ -1,7 +1,7 @@
PORTNAME= evtx
DISTVERSION= 0.8.1
DISTVERSIONPREFIX= v
-PORTREVISION= 19
+PORTREVISION= 20
CATEGORIES= textproc
MAINTAINER= acm@FreeBSD.org
diff --git a/textproc/fblog/Makefile b/textproc/fblog/Makefile
index 59fcd375b104..77a2b28085fc 100644
--- a/textproc/fblog/Makefile
+++ b/textproc/fblog/Makefile
@@ -1,7 +1,7 @@
PORTNAME= fblog
DISTVERSIONPREFIX= v
DISTVERSION= 4.14.0
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/feluda/Makefile b/textproc/feluda/Makefile
index aeb0da5aeddf..280cc13277fc 100644
--- a/textproc/feluda/Makefile
+++ b/textproc/feluda/Makefile
@@ -1,6 +1,7 @@
PORTNAME= feluda
DISTVERSIONPREFIX= v
DISTVERSION= 1.9.8 # Cargo.lock patched: `make patch cargo-crates`
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= nxjoseph@protonmail.com
diff --git a/textproc/fzf/Makefile b/textproc/fzf/Makefile
index 13ad9d87bb84..b1ee7ca90a6c 100644
--- a/textproc/fzf/Makefile
+++ b/textproc/fzf/Makefile
@@ -1,6 +1,6 @@
PORTNAME= fzf
DISTVERSIONPREFIX= v
-DISTVERSION= 0.65.1
+DISTVERSION= 0.65.2
CATEGORIES= textproc
MASTER_SITES= https://raw.githubusercontent.com/${GH_ACCOUNT}/${GH_PROJECT}/${DISTVERSIONFULL}/:gomod
DISTFILES= go.mod:gomod
diff --git a/textproc/fzf/distinfo b/textproc/fzf/distinfo
index 75a1bbb3d8b9..531bcdd3f232 100644
--- a/textproc/fzf/distinfo
+++ b/textproc/fzf/distinfo
@@ -1,5 +1,5 @@
-TIMESTAMP = 1754375690
-SHA256 (go/textproc_fzf/junegunn-fzf-v0.65.1_GH0/go.mod) = 6cc838db5cb7817cbb9522b55c9715ab6f543a0eaf3b5178cd9db42bd60640ae
-SIZE (go/textproc_fzf/junegunn-fzf-v0.65.1_GH0/go.mod) = 527
-SHA256 (go/textproc_fzf/junegunn-fzf-v0.65.1_GH0/junegunn-fzf-v0.65.1_GH0.tar.gz) = 82fa35dc3ba5d716db26a507f90bb0e724f586123c28ad3fb376bd8384669abf
-SIZE (go/textproc_fzf/junegunn-fzf-v0.65.1_GH0/junegunn-fzf-v0.65.1_GH0.tar.gz) = 347658
+TIMESTAMP = 1756803631
+SHA256 (go/textproc_fzf/junegunn-fzf-v0.65.2_GH0/go.mod) = 6cc838db5cb7817cbb9522b55c9715ab6f543a0eaf3b5178cd9db42bd60640ae
+SIZE (go/textproc_fzf/junegunn-fzf-v0.65.2_GH0/go.mod) = 527
+SHA256 (go/textproc_fzf/junegunn-fzf-v0.65.2_GH0/junegunn-fzf-v0.65.2_GH0.tar.gz) = 53b7e0077833f96ae04fd1e312ed65b2d5c427422b652dd3ce6c2d1702f8ce56
+SIZE (go/textproc_fzf/junegunn-fzf-v0.65.2_GH0/junegunn-fzf-v0.65.2_GH0.tar.gz) = 347841
diff --git a/textproc/grass/Makefile b/textproc/grass/Makefile
index 5ecbe315b497..4e8f8ee61e84 100644
--- a/textproc/grass/Makefile
+++ b/textproc/grass/Makefile
@@ -1,6 +1,6 @@
PORTNAME= grass
DISTVERSION= 0.13.4
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= textproc
MAINTAINER= vishwin@FreeBSD.org
diff --git a/textproc/harper/Makefile b/textproc/harper/Makefile
index 4673bd9f18cc..8fcd9368a703 100644
--- a/textproc/harper/Makefile
+++ b/textproc/harper/Makefile
@@ -1,6 +1,6 @@
PORTNAME= harper
DISTVERSIONPREFIX= v
-DISTVERSION= 0.58.0
+DISTVERSION= 0.61.0
CATEGORIES= textproc
MAINTAINER= ashish@FreeBSD.org
diff --git a/textproc/harper/Makefile.crates b/textproc/harper/Makefile.crates
index 866102b78a49..619f278a5672 100644
--- a/textproc/harper/Makefile.crates
+++ b/textproc/harper/Makefile.crates
@@ -21,12 +21,11 @@ CARGO_CRATES= addr2line-0.24.2 \
atomic_float-1.1.0 \
autocfg-1.5.0 \
backtrace-0.3.75 \
- base64-0.22.1 \
bincode-2.0.1 \
bit-set-0.8.0 \
bit-vec-0.8.0 \
bitflags-1.3.2 \
- bitflags-2.9.2 \
+ bitflags-2.9.3 \
blanket-0.4.0 \
block-0.1.6 \
bstr-1.12.0 \
@@ -65,9 +64,9 @@ CARGO_CRATES= addr2line-0.24.2 \
ciborium-0.2.2 \
ciborium-io-0.2.2 \
ciborium-ll-0.2.2 \
- clap-4.5.43 \
- clap_builder-4.5.43 \
- clap_derive-4.5.41 \
+ clap-4.5.45 \
+ clap_builder-4.5.44 \
+ clap_derive-4.5.45 \
clap_lex-0.7.5 \
codespan-reporting-0.12.0 \
colorchoice-1.0.4 \
@@ -153,6 +152,7 @@ CARGO_CRATES= addr2line-0.24.2 \
fluent-uri-0.1.4 \
fnv-1.0.7 \
foldhash-0.1.5 \
+ foldhash-0.2.0 \
foreign-types-0.5.0 \
foreign-types-macros-0.2.3 \
foreign-types-shared-0.3.1 \
@@ -203,17 +203,12 @@ CARGO_CRATES= addr2line-0.24.2 \
hashbrown-0.13.2 \
hashbrown-0.14.5 \
hashbrown-0.15.5 \
+ hashbrown-0.16.0 \
heck-0.5.0 \
hermit-abi-0.5.2 \
hexf-parse-0.2.1 \
html5ever-0.35.0 \
- http-1.3.1 \
- http-body-1.0.1 \
- http-body-util-0.1.3 \
httparse-1.10.1 \
- hyper-1.6.0 \
- hyper-rustls-0.27.7 \
- hyper-util-0.1.16 \
iana-time-zone-0.1.63 \
iana-time-zone-haiku-0.1.2 \
icu_collections-2.0.0 \
@@ -226,10 +221,8 @@ CARGO_CRATES= addr2line-0.24.2 \
ident_case-1.0.1 \
idna-1.0.3 \
idna_adapter-1.2.1 \
- indexmap-2.10.0 \
+ indexmap-2.11.0 \
io-uring-0.7.9 \
- ipnet-2.11.0 \
- iri-string-0.7.8 \
is-docker-0.2.0 \
is-macro-0.3.7 \
is-wsl-0.4.0 \
@@ -253,7 +246,6 @@ CARGO_CRATES= addr2line-0.24.2 \
lock_api-0.4.13 \
log-0.4.27 \
lru-0.16.0 \
- lru-slab-0.1.2 \
lsp-types-0.97.0 \
mac-0.1.1 \
macerator-0.2.8 \
@@ -276,7 +268,7 @@ CARGO_CRATES= addr2line-0.24.2 \
ndarray-0.16.1 \
ndk-sys-0.5.0+25.2.9519653 \
new_debug_unreachable-1.0.6 \
- nu-ansi-term-0.46.0 \
+ nu-ansi-term-0.50.1 \
num-0.4.3 \
num-bigint-0.4.6 \
num-complex-0.4.6 \
@@ -297,7 +289,6 @@ CARGO_CRATES= addr2line-0.24.2 \
option-ext-0.2.0 \
ordered-float-4.6.0 \
ordered-float-5.0.0 \
- overload-0.1.1 \
parking-2.2.1 \
parking_lot-0.12.4 \
parking_lot_core-0.9.11 \
@@ -329,9 +320,6 @@ CARGO_CRATES= addr2line-0.24.2 \
pulp-0.21.5 \
quickcheck-1.0.3 \
quickcheck_macros-1.1.0 \
- quinn-0.11.8 \
- quinn-proto-0.11.12 \
- quinn-udp-0.5.13 \
quote-1.0.40 \
r-efi-5.3.0 \
rand-0.8.5 \
@@ -346,8 +334,8 @@ CARGO_CRATES= addr2line-0.24.2 \
raw-cpuid-11.5.0 \
raw-window-handle-0.6.2 \
rawpointer-0.2.1 \
- rayon-1.10.0 \
- rayon-core-1.12.1 \
+ rayon-1.11.0 \
+ rayon-core-1.13.0 \
reborrow-0.5.5 \
redox_syscall-0.5.17 \
redox_users-0.4.6 \
@@ -357,9 +345,7 @@ CARGO_CRATES= addr2line-0.24.2 \
regex-syntax-0.8.5 \
relative-path-1.9.3 \
renderdoc-sys-1.1.0 \
- reqwest-0.12.23 \
resolve-path-0.1.0 \
- ring-0.17.14 \
rmp-0.8.14 \
rmp-serde-1.3.0 \
rs-conllu-0.3.0 \
@@ -367,12 +353,8 @@ CARGO_CRATES= addr2line-0.24.2 \
rstest_macros-0.25.0 \
rustc-demangle-0.1.26 \
rustc-hash-1.1.0 \
- rustc-hash-2.1.1 \
rustc_version-0.4.1 \
rustix-1.0.8 \
- rustls-0.23.29 \
- rustls-pki-types-1.12.0 \
- rustls-webpki-0.103.4 \
rustversion-1.0.21 \
ryu-1.0.20 \
safetensors-0.4.5 \
@@ -385,18 +367,16 @@ CARGO_CRATES= addr2line-0.24.2 \
serde-wasm-bindgen-0.6.5 \
serde_bytes-0.11.17 \
serde_derive-1.0.219 \
- serde_json-1.0.142 \
+ serde_json-1.0.143 \
serde_repr-0.1.20 \
serde_spanned-0.6.9 \
serde_spanned-1.0.0 \
- serde_urlencoded-0.7.1 \
sharded-slab-0.1.7 \
shlex-1.3.0 \
siphasher-1.0.1 \
slab-0.4.11 \
slotmap-1.0.7 \
smallvec-1.15.1 \
- socket2-0.5.10 \
socket2-0.6.0 \
spin-0.10.0 \
spirv-0.3.0+sdk-1.3.268.0 \
@@ -410,7 +390,6 @@ CARGO_CRATES= addr2line-0.24.2 \
strum-0.27.2 \
strum_macros-0.26.4 \
strum_macros-0.27.2 \
- subtle-2.6.1 \
syn-2.0.104 \
sync_wrapper-1.0.2 \
synstructure-0.13.2 \
@@ -422,9 +401,9 @@ CARGO_CRATES= addr2line-0.24.2 \
text_placeholder-0.5.1 \
thin-vec-0.2.14 \
thiserror-1.0.69 \
- thiserror-2.0.15 \
+ thiserror-2.0.16 \
thiserror-impl-1.0.69 \
- thiserror-impl-2.0.15 \
+ thiserror-impl-2.0.16 \
thread-tree-0.3.3 \
thread_local-1.1.9 \
time-0.3.41 \
@@ -432,11 +411,8 @@ CARGO_CRATES= addr2line-0.24.2 \
time-macros-0.2.22 \
tinystr-0.8.1 \
tinytemplate-1.2.1 \
- tinyvec-1.9.0 \
- tinyvec_macros-0.1.1 \
tokio-1.47.1 \
tokio-macros-2.5.0 \
- tokio-rustls-0.26.2 \
tokio-util-0.7.15 \
toml-0.8.23 \
toml-0.9.2 \
@@ -447,7 +423,6 @@ CARGO_CRATES= addr2line-0.24.2 \
toml_write-0.1.2 \
toml_writer-1.0.2 \
tower-0.5.2 \
- tower-http-0.6.6 \
tower-layer-0.3.3 \
tower-lsp-server-0.22.1 \
tower-service-0.3.3 \
@@ -456,7 +431,7 @@ CARGO_CRATES= addr2line-0.24.2 \
tracing-attributes-0.1.30 \
tracing-core-0.1.34 \
tracing-log-0.2.0 \
- tracing-subscriber-0.3.19 \
+ tracing-subscriber-0.3.20 \
tracing-wasm-0.2.1 \
tree-sitter-0.25.8 \
tree-sitter-bash-0.25.0 \
@@ -465,7 +440,7 @@ CARGO_CRATES= addr2line-0.24.2 \
tree-sitter-clojure-0.1.0 \
tree-sitter-cmake-0.7.1 \
tree-sitter-cpp-0.23.4 \
- tree-sitter-go-0.23.4 \
+ tree-sitter-go-0.25.0 \
tree-sitter-haskell-0.23.1 \
tree-sitter-html-0.23.2 \
tree-sitter-java-0.23.5 \
@@ -474,7 +449,7 @@ CARGO_CRATES= addr2line-0.24.2 \
tree-sitter-language-0.1.5 \
tree-sitter-lua-0.2.0 \
tree-sitter-nix-0.3.0 \
- tree-sitter-php-0.23.11 \
+ tree-sitter-php-0.24.2 \
tree-sitter-python-0.23.6 \
tree-sitter-ruby-0.23.1 \
tree-sitter-rust-0.24.0 \
@@ -483,7 +458,6 @@ CARGO_CRATES= addr2line-0.24.2 \
tree-sitter-swift-0.7.1 \
tree-sitter-toml-ng-0.7.0 \
tree-sitter-typescript-0.23.2 \
- try-lock-0.2.5 \
typst-syntax-0.13.1 \
typst-timing-0.13.1 \
typst-utils-0.13.1 \
@@ -498,7 +472,6 @@ CARGO_CRATES= addr2line-0.24.2 \
unicode-width-0.2.1 \
unicode-xid-0.2.6 \
unscanny-0.1.0 \
- untrusted-0.9.0 \
unty-0.0.4 \
url-2.5.4 \
utf-8-0.7.6 \
@@ -510,7 +483,6 @@ CARGO_CRATES= addr2line-0.24.2 \
version_check-0.9.5 \
void-1.0.2 \
walkdir-2.5.0 \
- want-0.3.1 \
wasi-0.11.1+wasi-snapshot-preview1 \
wasi-0.14.2+wasi-0.2.4 \
wasm-bindgen-0.2.100 \
@@ -522,7 +494,6 @@ CARGO_CRATES= addr2line-0.24.2 \
web-sys-0.3.77 \
web-time-1.1.0 \
web_atoms-0.1.3 \
- webpki-roots-1.0.2 \
wgpu-25.0.2 \
wgpu-core-25.0.2 \
wgpu-core-deps-apple-25.0.0 \
@@ -580,7 +551,6 @@ CARGO_CRATES= addr2line-0.24.2 \
zerocopy-derive-0.8.26 \
zerofrom-0.1.6 \
zerofrom-derive-0.1.6 \
- zeroize-1.8.1 \
zerotrie-0.2.2 \
zerovec-0.11.2 \
zerovec-derive-0.11.1 \
diff --git a/textproc/harper/distinfo b/textproc/harper/distinfo
index 265e0cc94e43..810d664debc0 100644
--- a/textproc/harper/distinfo
+++ b/textproc/harper/distinfo
@@ -1,4 +1,4 @@
-TIMESTAMP = 1755588578
+TIMESTAMP = 1756895303
SHA256 (rust/crates/addr2line-0.24.2.crate) = dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1
SIZE (rust/crates/addr2line-0.24.2.crate) = 39015
SHA256 (rust/crates/adler2-2.0.1.crate) = 320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa
@@ -45,8 +45,6 @@ SHA256 (rust/crates/autocfg-1.5.0.crate) = c08606f8c3cbf4ce6ec8e28fb0014a2c08670
SIZE (rust/crates/autocfg-1.5.0.crate) = 18729
SHA256 (rust/crates/backtrace-0.3.75.crate) = 6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002
SIZE (rust/crates/backtrace-0.3.75.crate) = 92665
-SHA256 (rust/crates/base64-0.22.1.crate) = 72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6
-SIZE (rust/crates/base64-0.22.1.crate) = 81597
SHA256 (rust/crates/bincode-2.0.1.crate) = 36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740
SIZE (rust/crates/bincode-2.0.1.crate) = 70469
SHA256 (rust/crates/bit-set-0.8.0.crate) = 08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3
@@ -55,8 +53,8 @@ SHA256 (rust/crates/bit-vec-0.8.0.crate) = 5e764a1d40d510daf35e07be9eb06e7577090
SIZE (rust/crates/bit-vec-0.8.0.crate) = 24132
SHA256 (rust/crates/bitflags-1.3.2.crate) = bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a
SIZE (rust/crates/bitflags-1.3.2.crate) = 23021
-SHA256 (rust/crates/bitflags-2.9.2.crate) = 6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29
-SIZE (rust/crates/bitflags-2.9.2.crate) = 47977
+SHA256 (rust/crates/bitflags-2.9.3.crate) = 34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d
+SIZE (rust/crates/bitflags-2.9.3.crate) = 47777
SHA256 (rust/crates/blanket-0.4.0.crate) = 56791e4bd64c99fc361e01008f45c984baa93f12a0957d1b3c51dd2c6baab453
SIZE (rust/crates/blanket-0.4.0.crate) = 20262
SHA256 (rust/crates/block-0.1.6.crate) = 0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a
@@ -133,12 +131,12 @@ SHA256 (rust/crates/ciborium-io-0.2.2.crate) = 05afea1e0a06c9be33d539b876f1ce369
SIZE (rust/crates/ciborium-io-0.2.2.crate) = 6697
SHA256 (rust/crates/ciborium-ll-0.2.2.crate) = 57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9
SIZE (rust/crates/ciborium-ll-0.2.2.crate) = 14695
-SHA256 (rust/crates/clap-4.5.43.crate) = 50fd97c9dc2399518aa331917ac6f274280ec5eb34e555dd291899745c48ec6f
-SIZE (rust/crates/clap-4.5.43.crate) = 58340
-SHA256 (rust/crates/clap_builder-4.5.43.crate) = c35b5830294e1fa0462034af85cc95225a4cb07092c088c55bda3147cfcd8f65
-SIZE (rust/crates/clap_builder-4.5.43.crate) = 169708
-SHA256 (rust/crates/clap_derive-4.5.41.crate) = ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491
-SIZE (rust/crates/clap_derive-4.5.41.crate) = 33493
+SHA256 (rust/crates/clap-4.5.45.crate) = 1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318
+SIZE (rust/crates/clap-4.5.45.crate) = 58337
+SHA256 (rust/crates/clap_builder-4.5.44.crate) = b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8
+SIZE (rust/crates/clap_builder-4.5.44.crate) = 169799
+SHA256 (rust/crates/clap_derive-4.5.45.crate) = 14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6
+SIZE (rust/crates/clap_derive-4.5.45.crate) = 33545
SHA256 (rust/crates/clap_lex-0.7.5.crate) = b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675
SIZE (rust/crates/clap_lex-0.7.5.crate) = 13469
SHA256 (rust/crates/codespan-reporting-0.12.0.crate) = fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81
@@ -309,6 +307,8 @@ SHA256 (rust/crates/fnv-1.0.7.crate) = 3f9eec918d3f24069decb9af1554cad7c880e2da2
SIZE (rust/crates/fnv-1.0.7.crate) = 11266
SHA256 (rust/crates/foldhash-0.1.5.crate) = d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2
SIZE (rust/crates/foldhash-0.1.5.crate) = 21901
+SHA256 (rust/crates/foldhash-0.2.0.crate) = 77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb
+SIZE (rust/crates/foldhash-0.2.0.crate) = 23329
SHA256 (rust/crates/foreign-types-0.5.0.crate) = d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965
SIZE (rust/crates/foreign-types-0.5.0.crate) = 7824
SHA256 (rust/crates/foreign-types-macros-0.2.3.crate) = 1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742
@@ -409,6 +409,8 @@ SHA256 (rust/crates/hashbrown-0.14.5.crate) = e5274423e17b7c9fc20b6e7e208532f9b1
SIZE (rust/crates/hashbrown-0.14.5.crate) = 141498
SHA256 (rust/crates/hashbrown-0.15.5.crate) = 9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1
SIZE (rust/crates/hashbrown-0.15.5.crate) = 140908
+SHA256 (rust/crates/hashbrown-0.16.0.crate) = 5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d
+SIZE (rust/crates/hashbrown-0.16.0.crate) = 141708
SHA256 (rust/crates/heck-0.5.0.crate) = 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea
SIZE (rust/crates/heck-0.5.0.crate) = 11517
SHA256 (rust/crates/hermit-abi-0.5.2.crate) = fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c
@@ -417,20 +419,8 @@ SHA256 (rust/crates/hexf-parse-0.2.1.crate) = dfa686283ad6dd069f105e5ab091b04c62
SIZE (rust/crates/hexf-parse-0.2.1.crate) = 4662
SHA256 (rust/crates/html5ever-0.35.0.crate) = 55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4
SIZE (rust/crates/html5ever-0.35.0.crate) = 76142
-SHA256 (rust/crates/http-1.3.1.crate) = f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565
-SIZE (rust/crates/http-1.3.1.crate) = 106063
-SHA256 (rust/crates/http-body-1.0.1.crate) = 1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184
-SIZE (rust/crates/http-body-1.0.1.crate) = 6125
-SHA256 (rust/crates/http-body-util-0.1.3.crate) = b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a
-SIZE (rust/crates/http-body-util-0.1.3.crate) = 16975
SHA256 (rust/crates/httparse-1.10.1.crate) = 6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87
SIZE (rust/crates/httparse-1.10.1.crate) = 45190
-SHA256 (rust/crates/hyper-1.6.0.crate) = cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80
-SIZE (rust/crates/hyper-1.6.0.crate) = 153923
-SHA256 (rust/crates/hyper-rustls-0.27.7.crate) = e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58
-SIZE (rust/crates/hyper-rustls-0.27.7.crate) = 35435
-SHA256 (rust/crates/hyper-util-0.1.16.crate) = 8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e
-SIZE (rust/crates/hyper-util-0.1.16.crate) = 101184
SHA256 (rust/crates/iana-time-zone-0.1.63.crate) = b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8
SIZE (rust/crates/iana-time-zone-0.1.63.crate) = 32919
SHA256 (rust/crates/iana-time-zone-haiku-0.1.2.crate) = f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f
@@ -455,14 +445,10 @@ SHA256 (rust/crates/idna-1.0.3.crate) = 686f825264d630750a544639377bae737628043f
SIZE (rust/crates/idna-1.0.3.crate) = 142515
SHA256 (rust/crates/idna_adapter-1.2.1.crate) = 3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344
SIZE (rust/crates/idna_adapter-1.2.1.crate) = 10389
-SHA256 (rust/crates/indexmap-2.10.0.crate) = fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661
-SIZE (rust/crates/indexmap-2.10.0.crate) = 95836
+SHA256 (rust/crates/indexmap-2.11.0.crate) = f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9
+SIZE (rust/crates/indexmap-2.11.0.crate) = 99851
SHA256 (rust/crates/io-uring-0.7.9.crate) = d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4
SIZE (rust/crates/io-uring-0.7.9.crate) = 99792
-SHA256 (rust/crates/ipnet-2.11.0.crate) = 469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130
-SIZE (rust/crates/ipnet-2.11.0.crate) = 29718
-SHA256 (rust/crates/iri-string-0.7.8.crate) = dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2
-SIZE (rust/crates/iri-string-0.7.8.crate) = 141493
SHA256 (rust/crates/is-docker-0.2.0.crate) = 928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3
SIZE (rust/crates/is-docker-0.2.0.crate) = 2664
SHA256 (rust/crates/is-macro-0.3.7.crate) = 1d57a3e447e24c22647738e4607f1df1e0ec6f72e16182c4cd199f647cdfb0e4
@@ -509,8 +495,6 @@ SHA256 (rust/crates/log-0.4.27.crate) = 13dc2df351e3202783a1fe0d44375f7295ffb404
SIZE (rust/crates/log-0.4.27.crate) = 48120
SHA256 (rust/crates/lru-0.16.0.crate) = 86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed
SIZE (rust/crates/lru-0.16.0.crate) = 16517
-SHA256 (rust/crates/lru-slab-0.1.2.crate) = 112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154
-SIZE (rust/crates/lru-slab-0.1.2.crate) = 9090
SHA256 (rust/crates/lsp-types-0.97.0.crate) = 53353550a17c04ac46c585feb189c2db82154fc84b79c7a66c96c2c644f66071
SIZE (rust/crates/lsp-types-0.97.0.crate) = 70764
SHA256 (rust/crates/mac-0.1.1.crate) = c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4
@@ -555,8 +539,8 @@ SHA256 (rust/crates/ndk-sys-0.5.0+25.2.9519653.crate) = 8c196769dd60fd4f363e11d9
SIZE (rust/crates/ndk-sys-0.5.0+25.2.9519653.crate) = 307233
SHA256 (rust/crates/new_debug_unreachable-1.0.6.crate) = 650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086
SIZE (rust/crates/new_debug_unreachable-1.0.6.crate) = 2582
-SHA256 (rust/crates/nu-ansi-term-0.46.0.crate) = 77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84
-SIZE (rust/crates/nu-ansi-term-0.46.0.crate) = 24311
+SHA256 (rust/crates/nu-ansi-term-0.50.1.crate) = d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399
+SIZE (rust/crates/nu-ansi-term-0.50.1.crate) = 28536
SHA256 (rust/crates/num-0.4.3.crate) = 35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23
SIZE (rust/crates/num-0.4.3.crate) = 9575
SHA256 (rust/crates/num-bigint-0.4.6.crate) = a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9
@@ -597,8 +581,6 @@ SHA256 (rust/crates/ordered-float-4.6.0.crate) = 7bb71e1b3fa6ca1c61f383464aaf2bb
SIZE (rust/crates/ordered-float-4.6.0.crate) = 23633
SHA256 (rust/crates/ordered-float-5.0.0.crate) = e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01
SIZE (rust/crates/ordered-float-5.0.0.crate) = 23364
-SHA256 (rust/crates/overload-0.1.1.crate) = b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39
-SIZE (rust/crates/overload-0.1.1.crate) = 24439
SHA256 (rust/crates/parking-2.2.1.crate) = f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba
SIZE (rust/crates/parking-2.2.1.crate) = 10685
SHA256 (rust/crates/parking_lot-0.12.4.crate) = 70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13
@@ -661,12 +643,6 @@ SHA256 (rust/crates/quickcheck-1.0.3.crate) = 588f6378e4dd99458b60ec275b4477add4
SIZE (rust/crates/quickcheck-1.0.3.crate) = 28069
SHA256 (rust/crates/quickcheck_macros-1.1.0.crate) = f71ee38b42f8459a88d3362be6f9b841ad2d5421844f61eb1c59c11bff3ac14a
SIZE (rust/crates/quickcheck_macros-1.1.0.crate) = 11744
-SHA256 (rust/crates/quinn-0.11.8.crate) = 626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8
-SIZE (rust/crates/quinn-0.11.8.crate) = 79949
-SHA256 (rust/crates/quinn-proto-0.11.12.crate) = 49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e
-SIZE (rust/crates/quinn-proto-0.11.12.crate) = 235821
-SHA256 (rust/crates/quinn-udp-0.5.13.crate) = fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970
-SIZE (rust/crates/quinn-udp-0.5.13.crate) = 32621
SHA256 (rust/crates/quote-1.0.40.crate) = 1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d
SIZE (rust/crates/quote-1.0.40.crate) = 31063
SHA256 (rust/crates/r-efi-5.3.0.crate) = 69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f
@@ -695,10 +671,10 @@ SHA256 (rust/crates/raw-window-handle-0.6.2.crate) = 20675572f6f24e9e76ef639bc55
SIZE (rust/crates/raw-window-handle-0.6.2.crate) = 20234
SHA256 (rust/crates/rawpointer-0.2.1.crate) = 60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3
SIZE (rust/crates/rawpointer-0.2.1.crate) = 7490
-SHA256 (rust/crates/rayon-1.10.0.crate) = b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa
-SIZE (rust/crates/rayon-1.10.0.crate) = 180155
-SHA256 (rust/crates/rayon-core-1.12.1.crate) = 1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2
-SIZE (rust/crates/rayon-core-1.12.1.crate) = 70701
+SHA256 (rust/crates/rayon-1.11.0.crate) = 368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f
+SIZE (rust/crates/rayon-1.11.0.crate) = 182470
+SHA256 (rust/crates/rayon-core-1.13.0.crate) = 22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91
+SIZE (rust/crates/rayon-core-1.13.0.crate) = 73151
SHA256 (rust/crates/reborrow-0.5.5.crate) = 03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430
SIZE (rust/crates/reborrow-0.5.5.crate) = 3789
SHA256 (rust/crates/redox_syscall-0.5.17.crate) = 5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77
@@ -717,12 +693,8 @@ SHA256 (rust/crates/relative-path-1.9.3.crate) = ba39f3699c378cd8970968dcbff9c43
SIZE (rust/crates/relative-path-1.9.3.crate) = 22400
SHA256 (rust/crates/renderdoc-sys-1.1.0.crate) = 19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832
SIZE (rust/crates/renderdoc-sys-1.1.0.crate) = 10366
-SHA256 (rust/crates/reqwest-0.12.23.crate) = d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb
-SIZE (rust/crates/reqwest-0.12.23.crate) = 161307
SHA256 (rust/crates/resolve-path-0.1.0.crate) = 321e5e41b3b192dab6f1e75b9deacb6688b4b8c5e68906a78e8f43e7c2887bb5
SIZE (rust/crates/resolve-path-0.1.0.crate) = 9129
-SHA256 (rust/crates/ring-0.17.14.crate) = a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7
-SIZE (rust/crates/ring-0.17.14.crate) = 1502610
SHA256 (rust/crates/rmp-0.8.14.crate) = 228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4
SIZE (rust/crates/rmp-0.8.14.crate) = 29687
SHA256 (rust/crates/rmp-serde-1.3.0.crate) = 52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db
@@ -737,18 +709,10 @@ SHA256 (rust/crates/rustc-demangle-0.1.26.crate) = 56f7d92ca342cea22a06f2121d944
SIZE (rust/crates/rustc-demangle-0.1.26.crate) = 30340
SHA256 (rust/crates/rustc-hash-1.1.0.crate) = 08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2
SIZE (rust/crates/rustc-hash-1.1.0.crate) = 9331
-SHA256 (rust/crates/rustc-hash-2.1.1.crate) = 357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d
-SIZE (rust/crates/rustc-hash-2.1.1.crate) = 14154
SHA256 (rust/crates/rustc_version-0.4.1.crate) = cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92
SIZE (rust/crates/rustc_version-0.4.1.crate) = 12245
SHA256 (rust/crates/rustix-1.0.8.crate) = 11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8
SIZE (rust/crates/rustix-1.0.8.crate) = 416688
-SHA256 (rust/crates/rustls-0.23.29.crate) = 2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1
-SIZE (rust/crates/rustls-0.23.29.crate) = 370867
-SHA256 (rust/crates/rustls-pki-types-1.12.0.crate) = 229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79
-SIZE (rust/crates/rustls-pki-types-1.12.0.crate) = 64740
-SHA256 (rust/crates/rustls-webpki-0.103.4.crate) = 0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc
-SIZE (rust/crates/rustls-webpki-0.103.4.crate) = 84241
SHA256 (rust/crates/rustversion-1.0.21.crate) = 8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d
SIZE (rust/crates/rustversion-1.0.21.crate) = 21001
SHA256 (rust/crates/ryu-1.0.20.crate) = 28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f
@@ -773,16 +737,14 @@ SHA256 (rust/crates/serde_bytes-0.11.17.crate) = 8437fd221bde2d4ca316d61b90e337e
SIZE (rust/crates/serde_bytes-0.11.17.crate) = 13256
SHA256 (rust/crates/serde_derive-1.0.219.crate) = 5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00
SIZE (rust/crates/serde_derive-1.0.219.crate) = 57798
-SHA256 (rust/crates/serde_json-1.0.142.crate) = 030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7
-SIZE (rust/crates/serde_json-1.0.142.crate) = 155363
+SHA256 (rust/crates/serde_json-1.0.143.crate) = d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a
+SIZE (rust/crates/serde_json-1.0.143.crate) = 155342
SHA256 (rust/crates/serde_repr-0.1.20.crate) = 175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c
SIZE (rust/crates/serde_repr-0.1.20.crate) = 12627
SHA256 (rust/crates/serde_spanned-0.6.9.crate) = bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3
SIZE (rust/crates/serde_spanned-0.6.9.crate) = 10210
SHA256 (rust/crates/serde_spanned-1.0.0.crate) = 40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83
SIZE (rust/crates/serde_spanned-1.0.0.crate) = 10956
-SHA256 (rust/crates/serde_urlencoded-0.7.1.crate) = d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd
-SIZE (rust/crates/serde_urlencoded-0.7.1.crate) = 12822
SHA256 (rust/crates/sharded-slab-0.1.7.crate) = f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6
SIZE (rust/crates/sharded-slab-0.1.7.crate) = 58227
SHA256 (rust/crates/shlex-1.3.0.crate) = 0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64
@@ -795,8 +757,6 @@ SHA256 (rust/crates/slotmap-1.0.7.crate) = dbff4acf519f630b3a3ddcfaea6c06b42174d
SIZE (rust/crates/slotmap-1.0.7.crate) = 61390
SHA256 (rust/crates/smallvec-1.15.1.crate) = 67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03
SIZE (rust/crates/smallvec-1.15.1.crate) = 38116
-SHA256 (rust/crates/socket2-0.5.10.crate) = e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678
-SIZE (rust/crates/socket2-0.5.10.crate) = 58169
SHA256 (rust/crates/socket2-0.6.0.crate) = 233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807
SIZE (rust/crates/socket2-0.6.0.crate) = 57974
SHA256 (rust/crates/spin-0.10.0.crate) = d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591
@@ -823,8 +783,6 @@ SHA256 (rust/crates/strum_macros-0.26.4.crate) = 4c6bee85a5a24955dc440386795aa37
SIZE (rust/crates/strum_macros-0.26.4.crate) = 27531
SHA256 (rust/crates/strum_macros-0.27.2.crate) = 7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7
SIZE (rust/crates/strum_macros-0.27.2.crate) = 30522
-SHA256 (rust/crates/subtle-2.6.1.crate) = 13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292
-SIZE (rust/crates/subtle-2.6.1.crate) = 14562
SHA256 (rust/crates/syn-2.0.104.crate) = 17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40
SIZE (rust/crates/syn-2.0.104.crate) = 299699
SHA256 (rust/crates/sync_wrapper-1.0.2.crate) = 0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263
@@ -847,12 +805,12 @@ SHA256 (rust/crates/thin-vec-0.2.14.crate) = 144f754d318415ac792f9d69fc87abbbfc0
SIZE (rust/crates/thin-vec-0.2.14.crate) = 35087
SHA256 (rust/crates/thiserror-1.0.69.crate) = b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52
SIZE (rust/crates/thiserror-1.0.69.crate) = 22198
-SHA256 (rust/crates/thiserror-2.0.15.crate) = 80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850
-SIZE (rust/crates/thiserror-2.0.15.crate) = 29026
+SHA256 (rust/crates/thiserror-2.0.16.crate) = 3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0
+SIZE (rust/crates/thiserror-2.0.16.crate) = 29095
SHA256 (rust/crates/thiserror-impl-1.0.69.crate) = 4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1
SIZE (rust/crates/thiserror-impl-1.0.69.crate) = 18365
-SHA256 (rust/crates/thiserror-impl-2.0.15.crate) = 44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0
-SIZE (rust/crates/thiserror-impl-2.0.15.crate) = 21214
+SHA256 (rust/crates/thiserror-impl-2.0.16.crate) = 6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960
+SIZE (rust/crates/thiserror-impl-2.0.16.crate) = 21214
SHA256 (rust/crates/thread-tree-0.3.3.crate) = ffbd370cb847953a25954d9f63e14824a36113f8c72eecf6eccef5dc4b45d630
SIZE (rust/crates/thread-tree-0.3.3.crate) = 12263
SHA256 (rust/crates/thread_local-1.1.9.crate) = f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185
@@ -867,16 +825,10 @@ SHA256 (rust/crates/tinystr-0.8.1.crate) = 5d4f6d1145dcb577acf783d4e601bc1d76a13
SIZE (rust/crates/tinystr-0.8.1.crate) = 23333
SHA256 (rust/crates/tinytemplate-1.2.1.crate) = be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc
SIZE (rust/crates/tinytemplate-1.2.1.crate) = 26490
-SHA256 (rust/crates/tinyvec-1.9.0.crate) = 09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71
-SIZE (rust/crates/tinyvec-1.9.0.crate) = 54137
-SHA256 (rust/crates/tinyvec_macros-0.1.1.crate) = 1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20
-SIZE (rust/crates/tinyvec_macros-0.1.1.crate) = 5865
SHA256 (rust/crates/tokio-1.47.1.crate) = 89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038
SIZE (rust/crates/tokio-1.47.1.crate) = 829790
SHA256 (rust/crates/tokio-macros-2.5.0.crate) = 6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8
SIZE (rust/crates/tokio-macros-2.5.0.crate) = 12617
-SHA256 (rust/crates/tokio-rustls-0.26.2.crate) = 8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b
-SIZE (rust/crates/tokio-rustls-0.26.2.crate) = 31655
SHA256 (rust/crates/tokio-util-0.7.15.crate) = 66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df
SIZE (rust/crates/tokio-util-0.7.15.crate) = 124255
SHA256 (rust/crates/toml-0.8.23.crate) = dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362
@@ -897,8 +849,6 @@ SHA256 (rust/crates/toml_writer-1.0.2.crate) = fcc842091f2def52017664b53082ecbbe
SIZE (rust/crates/toml_writer-1.0.2.crate) = 16988
SHA256 (rust/crates/tower-0.5.2.crate) = d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9
SIZE (rust/crates/tower-0.5.2.crate) = 109417
-SHA256 (rust/crates/tower-http-0.6.6.crate) = adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2
-SIZE (rust/crates/tower-http-0.6.6.crate) = 133515
SHA256 (rust/crates/tower-layer-0.3.3.crate) = 121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e
SIZE (rust/crates/tower-layer-0.3.3.crate) = 6180
SHA256 (rust/crates/tower-lsp-server-0.22.1.crate) = 88f3f8ec0dcfdda4d908bad2882fe0f89cf2b606e78d16491323e918dfa95765
@@ -915,8 +865,8 @@ SHA256 (rust/crates/tracing-core-0.1.34.crate) = b9d12581f227e93f094d3af2ae690a5
SIZE (rust/crates/tracing-core-0.1.34.crate) = 63760
SHA256 (rust/crates/tracing-log-0.2.0.crate) = ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3
SIZE (rust/crates/tracing-log-0.2.0.crate) = 17561
-SHA256 (rust/crates/tracing-subscriber-0.3.19.crate) = e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008
-SIZE (rust/crates/tracing-subscriber-0.3.19.crate) = 198345
+SHA256 (rust/crates/tracing-subscriber-0.3.20.crate) = 2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5
+SIZE (rust/crates/tracing-subscriber-0.3.20.crate) = 212274
SHA256 (rust/crates/tracing-wasm-0.2.1.crate) = 4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07
SIZE (rust/crates/tracing-wasm-0.2.1.crate) = 9372
SHA256 (rust/crates/tree-sitter-0.25.8.crate) = 6d7b8994f367f16e6fa14b5aebbcb350de5d7cbea82dc5b00ae997dd71680dd2
@@ -933,8 +883,8 @@ SHA256 (rust/crates/tree-sitter-cmake-0.7.1.crate) = 7c1b35d1dd7396d24b3e826bb0f
SIZE (rust/crates/tree-sitter-cmake-0.7.1.crate) = 49838
SHA256 (rust/crates/tree-sitter-cpp-0.23.4.crate) = df2196ea9d47b4ab4a31b9297eaa5a5d19a0b121dceb9f118f6790ad0ab94743
SIZE (rust/crates/tree-sitter-cpp-0.23.4.crate) = 971129
-SHA256 (rust/crates/tree-sitter-go-0.23.4.crate) = b13d476345220dbe600147dd444165c5791bf85ef53e28acbedd46112ee18431
-SIZE (rust/crates/tree-sitter-go-0.23.4.crate) = 105624
+SHA256 (rust/crates/tree-sitter-go-0.25.0.crate) = c8560a4d2f835cc0d4d2c2e03cbd0dde2f6114b43bc491164238d333e28b16ea
+SIZE (rust/crates/tree-sitter-go-0.25.0.crate) = 110415
SHA256 (rust/crates/tree-sitter-haskell-0.23.1.crate) = 977c51e504548cba13fc27cb5a2edab2124cf6716a1934915d07ab99523b05a4
SIZE (rust/crates/tree-sitter-haskell-0.23.1.crate) = 842034
SHA256 (rust/crates/tree-sitter-html-0.23.2.crate) = 261b708e5d92061ede329babaaa427b819329a9d427a1d710abb0f67bbef63ee
@@ -951,8 +901,8 @@ SHA256 (rust/crates/tree-sitter-lua-0.2.0.crate) = 5cdb9adf0965fec58e7660cbb3a05
SIZE (rust/crates/tree-sitter-lua-0.2.0.crate) = 40860
SHA256 (rust/crates/tree-sitter-nix-0.3.0.crate) = 4952a9733f3a98f6683a0ccd1035d84ab7a52f7e84eeed58548d86765ad92de3
SIZE (rust/crates/tree-sitter-nix-0.3.0.crate) = 45486
-SHA256 (rust/crates/tree-sitter-php-0.23.11.crate) = f066e94e9272cfe4f1dcb07a1c50c66097eca648f2d7233d299c8ae9ed8c130c
-SIZE (rust/crates/tree-sitter-php-0.23.11.crate) = 475556
+SHA256 (rust/crates/tree-sitter-php-0.24.2.crate) = 0d8c17c3ab69052c5eeaa7ff5cd972dd1bc25d1b97ee779fec391ad3b5df5592
+SIZE (rust/crates/tree-sitter-php-0.24.2.crate) = 623737
SHA256 (rust/crates/tree-sitter-python-0.23.6.crate) = 3d065aaa27f3aaceaf60c1f0e0ac09e1cb9eb8ed28e7bcdaa52129cffc7f4b04
SIZE (rust/crates/tree-sitter-python-0.23.6.crate) = 175831
SHA256 (rust/crates/tree-sitter-ruby-0.23.1.crate) = be0484ea4ef6bb9c575b4fdabde7e31340a8d2dbc7d52b321ac83da703249f95
@@ -969,8 +919,6 @@ SHA256 (rust/crates/tree-sitter-toml-ng-0.7.0.crate) = e9adc2c898ae49730e857d75b
SIZE (rust/crates/tree-sitter-toml-ng-0.7.0.crate) = 22919
SHA256 (rust/crates/tree-sitter-typescript-0.23.2.crate) = 6c5f76ed8d947a75cc446d5fccd8b602ebf0cde64ccf2ffa434d873d7a575eff
SIZE (rust/crates/tree-sitter-typescript-0.23.2.crate) = 829457
-SHA256 (rust/crates/try-lock-0.2.5.crate) = e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b
-SIZE (rust/crates/try-lock-0.2.5.crate) = 4314
SHA256 (rust/crates/typst-syntax-0.13.1.crate) = 5ba949ac75a374ea6b2f61d32e6c63acb818e6179d16f78b2cba988fbb5e23a8
SIZE (rust/crates/typst-syntax-0.13.1.crate) = 73642
SHA256 (rust/crates/typst-timing-0.13.1.crate) = 8ba4541664e98be2023db2267d92af206190eb903063a0229c668e1ab9dca976
@@ -999,8 +947,6 @@ SHA256 (rust/crates/unicode-xid-0.2.6.crate) = ebc1c04c71510c7f702b52b7c350734c9
SIZE (rust/crates/unicode-xid-0.2.6.crate) = 15744
SHA256 (rust/crates/unscanny-0.1.0.crate) = e9df2af067a7953e9c3831320f35c1cc0600c30d44d9f7a12b01db1cd88d6b47
SIZE (rust/crates/unscanny-0.1.0.crate) = 10338
-SHA256 (rust/crates/untrusted-0.9.0.crate) = 8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1
-SIZE (rust/crates/untrusted-0.9.0.crate) = 14447
SHA256 (rust/crates/unty-0.0.4.crate) = 6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae
SIZE (rust/crates/unty-0.0.4.crate) = 7200
SHA256 (rust/crates/url-2.5.4.crate) = 32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60
@@ -1023,8 +969,6 @@ SHA256 (rust/crates/void-1.0.2.crate) = 6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacff
SIZE (rust/crates/void-1.0.2.crate) = 2356
SHA256 (rust/crates/walkdir-2.5.0.crate) = 29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b
SIZE (rust/crates/walkdir-2.5.0.crate) = 23951
-SHA256 (rust/crates/want-0.3.1.crate) = bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e
-SIZE (rust/crates/want-0.3.1.crate) = 6398
SHA256 (rust/crates/wasi-0.11.1+wasi-snapshot-preview1.crate) = ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b
SIZE (rust/crates/wasi-0.11.1+wasi-snapshot-preview1.crate) = 28477
SHA256 (rust/crates/wasi-0.14.2+wasi-0.2.4.crate) = 9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3
@@ -1047,8 +991,6 @@ SHA256 (rust/crates/web-time-1.1.0.crate) = 5a6580f308b1fad9207618087a65c04e7a10
SIZE (rust/crates/web-time-1.1.0.crate) = 18026
SHA256 (rust/crates/web_atoms-0.1.3.crate) = 57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414
SIZE (rust/crates/web_atoms-0.1.3.crate) = 27392
-SHA256 (rust/crates/webpki-roots-1.0.2.crate) = 7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2
-SIZE (rust/crates/webpki-roots-1.0.2.crate) = 255109
SHA256 (rust/crates/wgpu-25.0.2.crate) = ec8fb398f119472be4d80bc3647339f56eb63b2a331f6a3d16e25d8144197dd9
SIZE (rust/crates/wgpu-25.0.2.crate) = 189625
SHA256 (rust/crates/wgpu-core-25.0.2.crate) = f7b882196f8368511d613c6aeec80655160db6646aebddf8328879a88d54e500
@@ -1163,8 +1105,6 @@ SHA256 (rust/crates/zerofrom-0.1.6.crate) = 50cc42e0333e05660c3587f3bf9d0478688e
SIZE (rust/crates/zerofrom-0.1.6.crate) = 5669
SHA256 (rust/crates/zerofrom-derive-0.1.6.crate) = d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502
SIZE (rust/crates/zerofrom-derive-0.1.6.crate) = 8305
-SHA256 (rust/crates/zeroize-1.8.1.crate) = ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde
-SIZE (rust/crates/zeroize-1.8.1.crate) = 20029
SHA256 (rust/crates/zerotrie-0.2.2.crate) = 36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595
SIZE (rust/crates/zerotrie-0.2.2.crate) = 74423
SHA256 (rust/crates/zerovec-0.11.2.crate) = 4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428
@@ -1173,5 +1113,5 @@ SHA256 (rust/crates/zerovec-derive-0.11.1.crate) = 5b96237efa0c878c64bd89c436f66
SIZE (rust/crates/zerovec-derive-0.11.1.crate) = 21294
SHA256 (rust/crates/zip-1.1.4.crate) = 9cc23c04387f4da0374be4533ad1208cbb091d5c11d070dfef13676ad6497164
SIZE (rust/crates/zip-1.1.4.crate) = 77910
-SHA256 (Automattic-harper-v0.58.0_GH0.tar.gz) = 4611b9d16301aae5eabf8411657ecee78288ff46801dfd0d4a0069173f0e763a
-SIZE (Automattic-harper-v0.58.0_GH0.tar.gz) = 7311147
+SHA256 (Automattic-harper-v0.61.0_GH0.tar.gz) = 9b003620c37d7dacdc26a6cbaf83ad4ab31034446a997b331acd0441f94a1336
+SIZE (Automattic-harper-v0.61.0_GH0.tar.gz) = 7319804
diff --git a/textproc/html-query/Makefile b/textproc/html-query/Makefile
index e895a4a5a8c1..413166bcd04e 100644
--- a/textproc/html-query/Makefile
+++ b/textproc/html-query/Makefile
@@ -1,6 +1,7 @@
PORTNAME= html-query
DISTVERSIONPREFIX= html-query-v
DISTVERSION= 1.2.2
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/htmlq/Makefile b/textproc/htmlq/Makefile
index 7fb2368d25ba..1d556f7f5ebe 100644
--- a/textproc/htmlq/Makefile
+++ b/textproc/htmlq/Makefile
@@ -1,7 +1,7 @@
PORTNAME= htmlq
DISTVERSIONPREFIX= v
DISTVERSION= 0.4.0
-PORTREVISION= 32
+PORTREVISION= 33
CATEGORIES= textproc
MAINTAINER= 0mp@FreeBSD.org
diff --git a/textproc/itstool/Makefile b/textproc/itstool/Makefile
index 30f5f2ed34bb..eaae15ca3c38 100644
--- a/textproc/itstool/Makefile
+++ b/textproc/itstool/Makefile
@@ -1,9 +1,12 @@
PORTNAME= itstool
PORTVERSION= 2.0.7
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= textproc
MASTER_SITES= https://files.itstool.org/itstool/
+PATCH_SITES= https://github.com/itstool/itstool/commit/
+PATCHFILES= 32c7d07664dc37765100285d1202d488cd6a27e8.patch:-p1
+
MAINTAINER= sunpoet@FreeBSD.org
COMMENT= Translate XML with PO files using W3C Internationalization Tag Set rules
WWW= https://itstool.org/ \
@@ -12,9 +15,9 @@ WWW= https://itstool.org/ \
LICENSE= GPLv3
LICENSE_FILE= ${WRKSRC}/COPYING.GPL3
-RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}libxml2-python>=0:textproc/libxml2-python@${PY_FLAVOR}
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}lxml5>=0:devel/py-lxml5@${PY_FLAVOR}
-USES= python tar:bzip2
+USES= autoreconf python tar:bzip2
GNU_CONFIGURE= yes
NO_ARCH= yes
diff --git a/textproc/itstool/distinfo b/textproc/itstool/distinfo
index 6f95f612faf6..f9d5bbff5dfa 100644
--- a/textproc/itstool/distinfo
+++ b/textproc/itstool/distinfo
@@ -1,3 +1,5 @@
-TIMESTAMP = 1632582980
+TIMESTAMP = 1756517770
SHA256 (itstool-2.0.7.tar.bz2) = 6b9a7cd29a12bb95598f5750e8763cee78836a1a207f85b74d8b3275b27e87ca
SIZE (itstool-2.0.7.tar.bz2) = 104648
+SHA256 (32c7d07664dc37765100285d1202d488cd6a27e8.patch) = 4e64a2e884f9d4cbc493732fcbde9f1d5bed534f9a66330bbcc1cbeb54808c1e
+SIZE (32c7d07664dc37765100285d1202d488cd6a27e8.patch) = 3095
diff --git a/textproc/itstool/files/patch-PR18 b/textproc/itstool/files/patch-PR18
deleted file mode 100644
index b4cafecdb0b1..000000000000
--- a/textproc/itstool/files/patch-PR18
+++ /dev/null
@@ -1,88 +0,0 @@
-# https://github.com/itstool/itstool/pull/18
-# https://github.com/itstool/itstool/issues/17
-
-From 98d04cdabf1721cb541ecd234c975f13fde4fa41 Mon Sep 17 00:00:00 2001
-From: Guido Trentalancia <guido@trentalancia.com>
-Date: Wed, 1 Nov 2017 18:20:36 +0100
-Subject: [PATCH 1/2] Revert "Be more careful about libxml2 memory management"
-
-This reverts commit 9b84c007a73e8275ca45762f1bfa3ab7c3a852e2.
----
- itstool.in | 13 ++-----------
- 1 file changed, 2 insertions(+), 11 deletions(-)
-
-diff --git itstool.in itstool.in
-index a16eba9..c1d0585 100755
---- itstool.in
-+++ itstool.in
-@@ -477,7 +477,6 @@ class Document (object):
- if load_dtd:
- ctxt.loadSubset(1)
- if keep_entities:
-- ctxt.loadSubset(1)
- ctxt.ctxtUseOptions(libxml2.XML_PARSE_DTDLOAD)
- ctxt.replaceEntities(0)
- else:
-@@ -1044,7 +1043,6 @@ class Document (object):
- if self._load_dtd:
- ctxt.loadSubset(1)
- if self._keep_entities:
-- ctxt.loadSubset(1)
- ctxt.ctxtUseOptions(libxml2.XML_PARSE_DTDLOAD)
- ctxt.replaceEntities(0)
- else:
-@@ -1071,9 +1069,7 @@ class Document (object):
- ph_node = msg.get_placeholder(child.name).node
- if self.has_child_elements(ph_node):
- self.merge_translations(translations, None, ph_node, strict=strict)
-- newnode = ph_node.copyNode(1)
-- newnode.setTreeDoc(self._doc)
-- child.replaceNode(newnode)
-+ child.replaceNode(ph_node)
- else:
- repl = self.get_translated(ph_node, translations, strict=strict, lang=lang)
- child.replaceNode(repl)
-@@ -1088,15 +1084,10 @@ class Document (object):
- (lang + ' ') if lang is not None else '',
- msgstr.encode('utf-8')))
- self._xml_err = ''
-- ctxt.doc().freeDoc()
- return node
- retnode = node.copyNode(2)
-- retnode.setTreeDoc(self._doc)
- for child in xml_child_iter(trnode):
-- newnode = child.copyNode(1)
-- newnode.setTreeDoc(self._doc)
-- retnode.addChild(newnode)
--
-+ retnode.addChild(child.copyNode(1))
- ctxt.doc().freeDoc()
- return retnode
-
-
-From 1549b6d12eb2f35e5c7f1b1856c21768e92ba794 Mon Sep 17 00:00:00 2001
-From: Guido Trentalancia <guido@trentalancia.com>
-Date: Wed, 1 Nov 2017 18:23:44 +0100
-Subject: [PATCH 2/2] Fix a segmentation fault bug introduced with version
- 2.0.4.
-
-https://github.com/itstool/itstool/issues/17
-
-This fix seems a lot easier than the previous reverted commit.
----
- itstool.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git itstool.in itstool.in
-index c1d0585..e492e95 100755
---- itstool.in
-+++ itstool.in
-@@ -1048,7 +1048,7 @@ class Document (object):
- else:
- ctxt.replaceEntities(1)
- ctxt.parseDocument()
-- trnode = ctxt.doc().getRootElement()
-+ trnode = ctxt.doc().getRootElement().copyNode(1)
- try:
- self._check_errors()
- except libxml2.parserError:
diff --git a/textproc/itstool/files/patch-itstool.in b/textproc/itstool/files/patch-itstool.in
deleted file mode 100644
index ea6ed79c3781..000000000000
--- a/textproc/itstool/files/patch-itstool.in
+++ /dev/null
@@ -1,52 +0,0 @@
-# Workaround https://github.com/itstool/itstool/issues/25
-# Obtained from Fedora
-
---- itstool.in.orig 2018-08-21 15:27:24 UTC
-+++ itstool.in
-@@ -44,9 +44,22 @@ if PY3:
- else:
- return str(s)
- ustr_type = str
-+ def pr_str(s):
-+ """Return a string that can be safely print()ed"""
-+ # Since print works on both bytes and unicode, just return the argument
-+ return s
- else:
- string_types = basestring,
- ustr = ustr_type = unicode
-+ def pr_str(s):
-+ """Return a string that can be safely print()ed"""
-+ if isinstance(s, str):
-+ # Since print works on str, just return the argument
-+ return s
-+ else:
-+ # print may not work on unicode if the output encoding cannot be
-+ # detected, so just encode with UTF-8
-+ return unicode.encode(s, 'utf-8')
-
- NS_ITS = 'http://www.w3.org/2005/11/its'
- NS_ITST = 'http://itstool.org/extensions/'
-@@ -1060,9 +1073,9 @@ class Document (object):
- if strict:
- raise
- else:
-- sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
-+ sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
- (lang + ' ') if lang is not None else '',
-- msgstr.encode('utf-8')))
-+ msgstr)))
- self._xml_err = ''
- return node
- def scan_node(node):
-@@ -1087,9 +1100,9 @@ class Document (object):
- if strict:
- raise
- else:
-- sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
-+ sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
- (lang + ' ') if lang is not None else '',
-- msgstr.encode('utf-8')))
-+ msgstr)))
- self._xml_err = ''
- ctxt.doc().freeDoc()
- return node
diff --git a/textproc/itstool/files/patch-py-lxml b/textproc/itstool/files/patch-py-lxml
new file mode 100644
index 000000000000..897eaf6349d7
--- /dev/null
+++ b/textproc/itstool/files/patch-py-lxml
@@ -0,0 +1,1490 @@
+Obtained from: https://github.com/itstool/itstool/pull/57
+
+--- configure.ac.orig 2021-09-25 15:09:48 UTC
++++ configure.ac
+@@ -12,7 +12,7 @@ AM_PATH_PYTHON([2.6])
+
+ AM_PATH_PYTHON([2.6])
+
+-py_module=libxml2
++py_module=lxml
+ AC_MSG_CHECKING(for python module $py_module)
+ echo "import $py_module" | $PYTHON - &>/dev/null
+ if test $? -ne 0; then
+--- itstool.in.orig 2025-08-30 01:59:59 UTC
++++ itstool.in
+@@ -24,7 +24,8 @@ import hashlib
+
+ import gettext
+ import hashlib
+-import libxml2
++from copy import deepcopy
++from lxml import etree
+ import optparse
+ import os
+ import os.path
+@@ -190,7 +191,7 @@ class Placeholder (object):
+ class Placeholder (object):
+ def __init__ (self, node):
+ self.node = node
+- self.name = ustr(node.name, 'utf-8')
++ self.name = ustr(xml_localname(node), 'utf-8')
+
+
+ class Message (object):
+@@ -243,32 +244,30 @@ class Message (object):
+ def add_start_tag (self, node):
+ if len(self._message) == 0 or not(isinstance(self._message[-1], string_types)):
+ self._message.append('')
+- if node.ns() is not None and node.ns().name is not None:
+- self._message[-1] += ('<%s:%s' % (ustr(node.ns().name, 'utf-8'), ustr(node.name, 'utf-8')))
+- else:
+- self._message[-1] += ('<%s' % ustr(node.name, 'utf-8'))
+- for prop in xml_attr_iter(node):
+- name = prop.name
+- if prop.ns() is not None:
+- name = prop.ns().name + ':' + name
+- atval = prop.content
++ self._message[-1] += ('<%s' % ustr(xml_qname(node), 'utf-8'))
++ for name, atval in node.items():
++ qname = etree.QName(name)
++ if qname.namespace is not None:
++ # lxml doesn't expose the prefix of attributes, so we use
++ # an XPath expression to get the attribute's prefixed name.
++ # This is horribly inefficient.
++ expr = 'name(@*[local-name()="%s" and namespace-uri()="%s"])' % (
++ qname.localname, qname.namespace)
++ name = node.xpath(expr)
+ if not isinstance(atval, ustr_type):
+ atval = ustr(atval, 'utf-8')
+ atval = atval.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;').replace('"', '&quot;')
+ self._message += " %s=\"%s\"" % (name, atval)
+- if node.children is not None:
++ if len(node) > 0 or node.text:
+ self._message[-1] += '>'
+ else:
+ self._message[-1] += '/>'
+
+ def add_end_tag (self, node):
+- if node.children is not None:
++ if len(node) > 0 or node.text:
+ if len(self._message) == 0 or not(isinstance(self._message[-1], string_types)):
+ self._message.append('')
+- if node.ns() is not None and node.ns().name is not None:
+- self._message[-1] += ('</%s:%s>' % (ustr(node.ns().name, 'utf-8'), ustr(node.name, 'utf-8')))
+- else:
+- self._message[-1] += ('</%s>' % ustr(node.name, 'utf-8'))
++ self._message[-1] += ('</%s>' % ustr(xml_qname(node), 'utf-8'))
+
+ def is_empty (self):
+ return self._empty
+@@ -379,69 +378,86 @@ class Message (object):
+ return ret
+
+
+-def xml_child_iter (node):
+- child = node.children
+- while child is not None:
+- yield child
+- child = child.next
++def xml_localname (node):
++ return etree.QName(node.tag).localname
+
+-def xml_attr_iter (node):
+- attr = node.get_properties()
+- while attr is not None:
+- yield attr
+- attr = attr.next
++def xml_qname (node):
++ qname = etree.QName(node.tag).localname
++ if node.prefix is not None:
++ qname = node.prefix + ':' + qname
++ return qname
+
+-def xml_is_ns_name (node, ns, name):
+- if node.type != 'element':
+- return False
+- return node.name == name and node.ns() is not None and node.ns().content == ns
++def xml_content (node):
++ if isinstance(node, string_types):
++ return node
++ if isinstance(node, XMLAttr):
++ return node.parent.get(node.tag)
++ return etree.tostring(node, method='text', encoding='unicode')
+
++def xml_delete_node (node):
++ parent = node.getparent()
++ prev = node.getprevious()
++ tail = node.tail
++ if parent is not None:
++ parent.remove(node)
++ if prev is not None:
++ if prev.tail is None or re.fullmatch(r'\s+', prev.tail):
++ prev.tail = tail
++ else:
++ prev.tail += tail
++ elif parent is not None:
++ if parent.text is None or re.fullmatch(r'\s+', parent.text):
++ parent.text = tail
++ else:
++ parent.text += tail
++
+ def xml_get_node_path(node):
+ # The built-in nodePath() method only does numeric indexes
+ # when necessary for disambiguation. For various reasons,
+ # we prefer always using indexes.
+- name = node.name
+- if node.ns() is not None and node.ns().name is not None:
+- name = node.ns().name + ':' + name
+- if node.type == 'attribute':
++ name = xml_qname(node)
++ if isinstance(node, XMLAttr):
+ name = '@' + name
+ name = '/' + name
+- if node.type == 'element' and node.parent.type == 'element':
++ if node.getparent() is not None:
+ count = 1
+- prev = node.previousElementSibling()
++ prev = node.getprevious()
+ while prev is not None:
+- if prev.name == node.name:
+- if prev.ns() is None:
+- if node.ns() is None:
+- count += 1
+- else:
+- if node.ns() is not None:
+- if prev.ns().name == node.ns().name:
+- count += 1
+- prev = prev.previousElementSibling()
++ if prev.tag == node.tag:
++ count += 1
++ prev = prev.getprevious()
+ name = '%s[%i]' % (name, count)
+- if node.parent.type == 'element':
+- name = xml_get_node_path(node.parent) + name
++ name = xml_get_node_path(node.getparent()) + name
+ return name
+
+-def xml_error_catcher(doc, error):
+- doc._xml_err += " %s" % error
+
+-def fix_node_ns (node, nsdefs):
+- childnsdefs = nsdefs.copy()
+- nsdef = node.nsDefs()
+- while nsdef is not None:
+- nextnsdef = nsdef.next
+- if nsdef.name in nsdefs and nsdefs[nsdef.name] == nsdef.content:
+- node.removeNsDef(nsdef.content)
+- else:
+- childnsdefs[nsdef.name] = nsdef.content
+- nsdef = nextnsdef
+- for child in xml_child_iter(node):
+- if child.type == 'element':
+- fix_node_ns(child, childnsdefs)
++# lxml doesn't support attribute nodes, so we have to emulate them.
++class XMLAttr (object):
++ def __init__(self, element, tag):
++ self.parent = element
++ self.tag = tag
++ self.attrib = {}
++ self.sourceline = element.sourceline
+
++ def __repr__(self):
++ return '%s@%s' % (repr(self.parent), self.tag)
+
++ def __eq__(self, other):
++ return other and self.parent == other.parent and self.tag == other.tag
++
++ def __ne__(self, other):
++ return not self.__eq__(other)
++
++ def __hash__(self):
++ return hash(repr(self))
++
++ def getparent(self):
++ return self.parent
++
++ def get(self, default=None):
++ return default
++
++
+ class LocNote (object):
+ def __init__(self, locnote=None, locnoteref=None, locnotetype=None, space=False):
+ self.locnote = locnote
+@@ -464,82 +480,51 @@ class Document (object):
+
+ class Document (object):
+ def __init__ (self, filename, messages, load_dtd=False, keep_entities=False):
+- self._xml_err = ''
+- libxml2.registerErrorHandler(xml_error_catcher, self)
+- try:
+- ctxt = libxml2.createFileParserCtxt(filename)
+- except:
+- sys.stderr.write('Error: cannot open XML file %s\n' % filename)
+- sys.exit(1)
+- ctxt.lineNumbers(1)
+ self._load_dtd = load_dtd
+ self._keep_entities = keep_entities
+- if load_dtd:
+- ctxt.loadSubset(1)
+- if keep_entities:
+- ctxt.loadSubset(1)
+- ctxt.ctxtUseOptions(libxml2.XML_PARSE_DTDLOAD)
+- ctxt.replaceEntities(0)
+- else:
+- ctxt.replaceEntities(1)
+- ctxt.parseDocument()
++ parser = etree.XMLParser(load_dtd = load_dtd or keep_entities,
++ resolve_entities = not(keep_entities))
++ doc = etree.parse(filename, parser)
++ doc.xinclude()
+ self._filename = filename
+- self._doc = ctxt.doc()
++ self._doc = doc
+ self._localrules = []
+- def pre_process (node):
+- for child in xml_child_iter(node):
+- if xml_is_ns_name(child, 'http://www.w3.org/2001/XInclude', 'include'):
+- if child.nsProp('parse', None) == 'text':
+- child.xincludeProcessTree()
+- elif xml_is_ns_name(child, NS_ITS, 'rules'):
+- if child.hasNsProp('href', NS_XLINK):
+- href = child.nsProp('href', NS_XLINK)
+- fileref = os.path.join(os.path.dirname(filename), href)
+- if not os.path.exists(fileref):
+- if opts.itspath is not None:
+- for pathdir in opts.itspath:
+- fileref = os.path.join(pathdir, href)
+- if os.path.exists(fileref):
+- break
+- if not os.path.exists(fileref):
+- sys.stderr.write('Error: Could not locate ITS file %s\n' % href)
+- sys.exit(1)
+- hctxt = libxml2.createFileParserCtxt(fileref)
+- hctxt.replaceEntities(1)
+- hctxt.parseDocument()
+- root = hctxt.doc().getRootElement()
+- version = None
+- if root.hasNsProp('version', None):
+- version = root.nsProp('version', None)
+- else:
+- sys.stderr.write('Warning: ITS file %s missing version attribute\n' %
+- os.path.basename(href))
+- if version is not None and version not in ('1.0', '2.0'):
+- sys.stderr.write('Warning: Skipping ITS file %s with unknown version %s\n' %
+- (os.path.basename(href), root.nsProp('version', None)))
+- else:
+- self._localrules.append(root)
++ for child in doc.iter():
++ if child.tag == '{' + NS_ITS + '}rules':
++ href = child.get('{' + NS_XLINK + '}href')
++ if href is not None:
++ fileref = os.path.join(os.path.dirname(filename), href)
++ if not os.path.exists(fileref):
++ if opts.itspath is not None:
++ for pathdir in opts.itspath:
++ fileref = os.path.join(pathdir, href)
++ if os.path.exists(fileref):
++ break
++ if not os.path.exists(fileref):
++ sys.stderr.write('Error: Could not locate ITS file %s\n' % href)
++ sys.exit(1)
++ root = etree.parse(fileref).getroot()
+ version = None
+- if child.hasNsProp('version', None):
+- version = child.nsProp('version', None)
++ version = root.get('version')
++ if version is None:
++ sys.stderr.write('Warning: ITS file %s missing version attribute\n' %
++ os.path.basename(href))
++ elif version not in ('1.0', '2.0'):
++ sys.stderr.write('Warning: Skipping ITS file %s with unknown version %s\n' %
++ (os.path.basename(href), root.get('version')))
+ else:
+- root = child.doc.getRootElement()
+- if root.hasNsProp('version', NS_ITS):
+- version = root.nsProp('version', NS_ITS)
+- else:
+- sys.stderr.write('Warning: Local ITS rules missing version attribute\n')
+- if version is not None and version not in ('1.0', '2.0'):
+- sys.stderr.write('Warning: Skipping local ITS rules with unknown version %s\n' %
+- version)
+- else:
+- self._localrules.append(child)
+- pre_process(child)
+- pre_process(self._doc)
+- try:
+- self._check_errors()
+- except libxml2.parserError as e:
+- sys.stderr.write('Error: Could not parse document:\n%s\n' % ustr(e))
+- sys.exit(1)
++ self._localrules.append(root)
++ version = child.get('version')
++ if version is None:
++ root = child.getroottree()
++ version = root.get('{' + NS_ITS + '}version')
++ if version is None:
++ sys.stderr.write('Warning: Local ITS rules missing version attribute\n')
++ elif version not in ('1.0', '2.0'):
++ sys.stderr.write('Warning: Skipping local ITS rules with unknown version %s\n' %
++ version)
++ else:
++ self._localrules.append(child)
+ self._msgs = messages
+ self._its_translate_nodes = {}
+ self._its_within_text_nodes = {}
+@@ -556,13 +541,6 @@ class Document (object):
+
+ self._clear_cache()
+
+- def __del__ (self):
+- self._doc.freeDoc()
+-
+- def _check_errors(self):
+- if self._xml_err:
+- raise libxml2.parserError(self._xml_err)
+-
+ def _clear_cache(self):
+ self._its_translate_nodes_cache = {}
+ self._its_locale_filters_cache = {}
+@@ -570,123 +548,107 @@ class Document (object):
+
+ def get_its_params(self, rules):
+ params = {}
+- for child in xml_child_iter(rules):
+- if xml_is_ns_name(child, NS_ITS, 'param'):
+- params[child.nsProp('name', None)] = child.getContent()
++ for child in rules.iterchildren():
++ if child.tag == '{' + NS_ITS + '}param':
++ params[child.get('name')] = xml_content(child)
+ return params
+
+- def register_its_params(self, xpath, params, userparams={}):
+- for param in params:
+- if param in userparams:
+- xpath.xpathRegisterVariable(name, None, userparams[param])
++ def register_its_params(self, var, params, userparams={}):
++ for name in params:
++ if name in userparams:
++ var[name] = userparams[name]
+ else:
+- xpath.xpathRegisterVariable(name, None, params[param])
++ var[name] = params[name]
+
+ def apply_its_rule(self, rule, xpath):
+ self._clear_cache()
+- if rule.type != 'element':
+- return
+- if xml_is_ns_name(rule, NS_ITS, 'translateRule'):
+- if rule.nsProp('selector', None) is not None:
+- for node in self._try_xpath_eval(xpath, rule.nsProp('selector', None)):
+- self._its_translate_nodes[node] = rule.nsProp('translate', None)
+- elif xml_is_ns_name(rule, NS_ITS, 'withinTextRule'):
+- if rule.nsProp('selector', None) is not None:
+- for node in self._try_xpath_eval(xpath, rule.nsProp('selector', None)):
+- self._its_within_text_nodes[node] = rule.nsProp('withinText', None)
+- elif xml_is_ns_name(rule, NS_ITST, 'preserveSpaceRule'):
+- if rule.nsProp('selector', None) is not None:
+- for node in self._try_xpath_eval(xpath, rule.nsProp('selector', None)):
+- val = rule.nsProp('preserveSpace', None)
++ if rule.tag == '{' + NS_ITS + '}translateRule':
++ sel = rule.get('selector')
++ if sel is not None:
++ for node in self._try_xpath_eval(xpath, sel):
++ self._its_translate_nodes[node] = rule.get('translate')
++ elif rule.tag == '{' + NS_ITS + '}withinTextRule':
++ sel = rule.get('selector')
++ if sel is not None:
++ for node in self._try_xpath_eval(xpath, sel):
++ self._its_within_text_nodes[node] = rule.get('withinText')
++ elif rule.tag == '{' + NS_ITST + '}preserveSpaceRule':
++ sel = rule.get('selector')
++ if sel is not None:
++ for node in self._try_xpath_eval(xpath, sel):
++ val = rule.get('preserveSpace')
+ if val == 'yes':
+ self._its_preserve_space_nodes[node] = 'preserve'
+- elif xml_is_ns_name(rule, NS_ITS, 'preserveSpaceRule'):
+- if rule.nsProp('selector', None) is not None:
+- for node in self._try_xpath_eval(xpath, rule.nsProp('selector', None)):
+- self._its_preserve_space_nodes[node] = rule.nsProp('space', None)
+- elif xml_is_ns_name(rule, NS_ITS, 'localeFilterRule'):
+- if rule.nsProp('selector', None) is not None:
+- if rule.hasNsProp('localeFilterList', None):
+- lst = rule.nsProp('localeFilterList', None)
+- else:
+- lst = '*'
+- if rule.hasNsProp('localeFilterType', None):
+- typ = rule.nsProp('localeFilterType', None)
+- else:
+- typ = 'include'
+- for node in self._try_xpath_eval(xpath, rule.nsProp('selector', None)):
++ elif rule.tag == '{' + NS_ITS + '}preserveSpaceRule':
++ sel = rule.get('selector')
++ if sel is not None:
++ for node in self._try_xpath_eval(xpath, sel):
++ self._its_preserve_space_nodes[node] = rule.get('space')
++ elif rule.tag == '{' + NS_ITS + '}localeFilterRule':
++ sel = rule.get('selector')
++ if sel is not None:
++ lst = rule.get('localeFilterList', '*')
++ typ = rule.get('localeFilterType', 'include')
++ for node in self._try_xpath_eval(xpath, sel):
+ self._its_locale_filters[node] = (lst, typ)
+- elif xml_is_ns_name(rule, NS_ITST, 'dropRule'):
+- if rule.nsProp('selector', None) is not None:
+- for node in self._try_xpath_eval(xpath, rule.nsProp('selector', None)):
+- self._itst_drop_nodes[node] = rule.nsProp('drop', None)
+- elif xml_is_ns_name(rule, NS_ITS, 'idValueRule'):
+- sel = rule.nsProp('selector', None)
+- idv = rule.nsProp('idValue', None)
++ elif rule.tag == '{' + NS_ITST + '}dropRule':
++ sel = rule.get('selector')
++ if sel is not None:
++ for node in self._try_xpath_eval(xpath, sel):
++ self._itst_drop_nodes[node] = rule.get('drop')
++ elif rule.tag == '{' + NS_ITS + '}idValueRule':
++ sel = rule.get('selector')
++ idv = rule.get('idValue')
+ if sel is not None and idv is not None:
+ for node in self._try_xpath_eval(xpath, sel):
+- try:
+- oldnode = xpath.contextNode()
+- except:
+- oldnode = None
+- xpath.setContextNode(node)
+- idvalue = self._try_xpath_eval(xpath, idv)
++ idvalue = self._try_xpath_eval(xpath, idv, node=node)
+ if isinstance(idvalue, string_types):
+ self._its_id_values[node] = idvalue
+ else:
+ for val in idvalue:
+- self._its_id_values[node] = val.content
++ self._its_id_values[node] = xml_content(val)
+ break
+- xpath.setContextNode(oldnode)
+ pass
+- elif xml_is_ns_name(rule, NS_ITST, 'contextRule'):
+- if rule.nsProp('selector', None) is not None:
+- for node in self._try_xpath_eval(xpath, rule.nsProp('selector', None)):
+- if rule.hasNsProp('context', None):
+- self._itst_contexts[node] = rule.nsProp('context', None)
+- elif rule.hasNsProp('contextPointer', None):
+- try:
+- oldnode = xpath.contextNode()
+- except:
+- oldnode = None
+- xpath.setContextNode(node)
+- ctxt = self._try_xpath_eval(xpath, rule.nsProp('contextPointer', None))
++ elif rule.tag == '{' + NS_ITST + '}contextRule':
++ sel = rule.get('selector')
++ if sel is not None:
++ for node in self._try_xpath_eval(xpath, sel):
++ ctxt = rule.get('context')
++ cp = rule.get('contextPointer')
++ if ctxt is not None:
++ self._itst_contexts[node] = ctxt
++ elif cp is not None:
++ ctxt = self._try_xpath_eval(xpath, cp, node=node)
+ if isinstance(ctxt, string_types):
+ self._itst_contexts[node] = ctxt
+ else:
+ for ctxt in ctxt:
+- self._itst_contexts[node] = ctxt.content
++ self._itst_contexts[node] = xml_content(ctxt)
+ break
+- xpath.setContextNode(oldnode)
+- elif xml_is_ns_name(rule, NS_ITS, 'locNoteRule'):
++ elif rule.tag == '{' + NS_ITS + '}locNoteRule':
+ locnote = None
+- notetype = rule.nsProp('locNoteType', None)
+- for child in xml_child_iter(rule):
+- if xml_is_ns_name(child, NS_ITS, 'locNote'):
+- locnote = LocNote(locnote=child.content, locnotetype=notetype)
+- break
++ notetype = rule.get('locNoteType')
++ for child in rule.iterchildren('{' + NS_ITS + '}locNote'):
++ locnote = LocNote(locnote=xml_content(child), locnotetype=notetype)
++ break
+ if locnote is None:
+- if rule.hasNsProp('locNoteRef', None):
+- locnote = LocNote(locnoteref=rule.nsProp('locNoteRef', None), locnotetype=notetype)
+- if rule.nsProp('selector', None) is not None:
+- for node in self._try_xpath_eval(xpath, rule.nsProp('selector', None)):
++ if 'locNoteRef' in rule.attrib:
++ locnote = LocNote(locnoteref=rule.get('locNoteRef'), locnotetype=notetype)
++ sel = rule.get('selector')
++ if sel is not None:
++ for node in self._try_xpath_eval(xpath, sel):
+ if locnote is not None:
+ self._its_loc_notes.setdefault(node, []).append(locnote)
+ else:
+- if rule.hasNsProp('locNotePointer', None):
+- sel = rule.nsProp('locNotePointer', None)
++ if 'locNotePointer' in rule.attrib:
++ sel = rule.get('locNotePointer')
+ ref = False
+- elif rule.hasNsProp('locNoteRefPointer', None):
+- sel = rule.nsProp('locNoteRefPointer', None)
++ elif 'locNoteRefPointer' in rule.attrib:
++ sel = rule.get('locNoteRefPointer')
+ ref = True
+ else:
+ continue
+- try:
+- oldnode = xpath.contextNode()
+- except:
+- oldnode = None
+- xpath.setContextNode(node)
+- note = self._try_xpath_eval(xpath, sel)
++ note = self._try_xpath_eval(xpath, sel, node=node)
+ if isinstance(note, string_types):
+ if ref:
+ nodenote = LocNote(locnoteref=note, locnotetype=notetype)
+@@ -695,55 +657,56 @@ class Document (object):
+ self._its_loc_notes.setdefault(node, []).append(nodenote)
+ else:
+ for note in note:
++ text = xml_content(note)
+ if ref:
+- nodenote = LocNote(locnoteref=note.content, locnotetype=notetype)
++ nodenote = LocNote(locnoteref=text, locnotetype=notetype)
+ else:
+- nodenote = LocNote(locnote=note.content, locnotetype=notetype,
++ nodenote = LocNote(locnote=text, locnotetype=notetype,
+ space=self.get_preserve_space(note))
+ self._its_loc_notes.setdefault(node, []).append(nodenote)
+ break
+- xpath.setContextNode(oldnode)
+- elif xml_is_ns_name(rule, NS_ITS, 'langRule'):
+- if rule.nsProp('selector', None) is not None and rule.nsProp('langPointer', None) is not None:
+- for node in self._try_xpath_eval(xpath, rule.nsProp('selector', None)):
+- try:
+- oldnode = xpath.contextNode()
+- except:
+- oldnode = None
+- xpath.setContextNode(node)
+- res = self._try_xpath_eval(xpath, rule.nsProp('langPointer', None))
++ elif rule.tag == '{' + NS_ITS + '}langRule':
++ sel = rule.get('selector')
++ lp = rule.get('langPointer')
++ if sel is not None and lp is not None:
++ for node in self._try_xpath_eval(xpath, sel):
++ res = self._try_xpath_eval(xpath, lp, node=node)
+ if len(res) > 0:
+- self._its_lang[node] = res[0].content
++ self._its_lang[node] = xml_content(res[0])
+ # We need to construct language attributes, not just read
+ # language information. Technically, langPointer could be
+ # any XPath expression. But if it looks like an attribute
+ # accessor, just use the attribute name.
+- if rule.nsProp('langPointer', None)[0] == '@':
+- self._itst_lang_attr[node] = rule.nsProp('langPointer', None)[1:]
+- xpath.setContextNode(oldnode)
+- elif xml_is_ns_name(rule, NS_ITST, 'credits'):
+- if rule.nsProp('appendTo', None) is not None:
+- for node in self._try_xpath_eval(xpath, rule.nsProp('appendTo', None)):
++ # TODO: This should probably be skipped if langPointer
++ # equals '@xml:lang' which is the default.
++ if lp[0] == '@':
++ name = lp[1:]
++ if ':' in name:
++ prefix, lname = name.split(':', 2)
++ nsuri = node.nsmap.get(prefix)
++ if nsuri is None:
++ name = lname
++ else:
++ name = '{' + nsuri + '}' + lname
++ self._itst_lang_attr[node] = name
++ elif rule.tag == '{' + NS_ITST + '}credits':
++ sel = rule.get('appendTo')
++ if sel is not None:
++ for node in self._try_xpath_eval(xpath, sel):
+ self._itst_credits = (node, rule)
+ break
+- elif (xml_is_ns_name(rule, NS_ITS, 'externalResourceRefRule') or
+- xml_is_ns_name(rule, NS_ITST, 'externalRefRule')):
+- sel = rule.nsProp('selector', None)
+- if xml_is_ns_name(rule, NS_ITS, 'externalResourceRefRule'):
+- ptr = rule.nsProp('externalResourceRefPointer', None)
++ elif (rule.tag == '{' + NS_ITS + '}externalResourceRefRule' or
++ rule.tag == '{' + NS_ITST + '}externalRefRule'):
++ sel = rule.get('selector')
++ if rule.tag == '{' + NS_ITS + '}externalResourceRefRule':
++ ptr = rule.get('externalResourceRefPointer')
+ else:
+- ptr = rule.nsProp('refPointer', None)
++ ptr = rule.get('refPointer')
+ if sel is not None and ptr is not None:
+ for node in self._try_xpath_eval(xpath, sel):
+- try:
+- oldnode = xpath.contextNode()
+- except:
+- oldnode = None
+- xpath.setContextNode(node)
+- res = self._try_xpath_eval(xpath, ptr)
++ res = self._try_xpath_eval(xpath, ptr, node=node)
+ if len(res) > 0:
+- self._its_externals[node] = res[0].content
+- xpath.setContextNode(oldnode)
++ self._its_externals[node] = xml_content(res[0])
+
+ def apply_its_rules(self, builtins, userparams={}):
+ self._clear_cache()
+@@ -773,94 +736,59 @@ class Document (object):
+
+ def apply_its_file(self, filename, userparams={}):
+ self._clear_cache()
+- doc = libxml2.parseFile(filename)
+- root = doc.getRootElement()
+- if not xml_is_ns_name(root, NS_ITS, 'rules'):
++ parser = etree.XMLParser(resolve_entities = False)
++ root = etree.parse(filename, parser).getroot()
++ if root.tag != '{' + NS_ITS + '}rules':
+ return
+- version = None
+- if root.hasNsProp('version', None):
+- version = root.nsProp('version', None)
+- else:
++ version = root.get('version')
++ if version is None:
+ sys.stderr.write('Warning: ITS file %s missing version attribute\n' %
+ os.path.basename(filename))
+- if version is not None and version not in ('1.0', '2.0'):
++ elif version not in ('1.0', '2.0'):
+ sys.stderr.write('Warning: Skipping ITS file %s with unknown version %s\n' %
+- (os.path.basename(filename), root.nsProp('version', None)))
++ (os.path.basename(filename), root.get('version')))
+ return
+ matched = True
+- for match in xml_child_iter(root):
+- if xml_is_ns_name(match, NS_ITST, 'match'):
++ for match in root.iterchildren():
++ if match.tag == '{' + NS_ITST + '}match':
+ matched = False
+- xpath = self._doc.xpathNewContext()
+- par = match
+- nss = {}
+- while par is not None:
+- nsdef = par.nsDefs()
+- while nsdef is not None:
+- if nsdef.name is not None:
+- if nsdef.name not in nss:
+- nss[nsdef.name] = nsdef.content
+- xpath.xpathRegisterNs(nsdef.name, nsdef.content)
+- nsdef = nsdef.next
+- par = par.parent
+- if match.hasNsProp('selector', None):
+- if len(self._try_xpath_eval(xpath, match.nsProp('selector', None))) > 0:
++ sel = match.get('selector')
++ if sel is not None:
++ ns = { k: v for k, v in match.nsmap.items() if k is not None }
++ xpath = (ns, {})
++ if len(self._try_xpath_eval(xpath, sel)) > 0:
+ matched = True
+ break
+ if matched == False:
+ return
++ ns = { k: v for k, v in match.nsmap.items() if k is not None }
++ var = {}
+ params = self.get_its_params(root)
+- for rule in xml_child_iter(root):
+- xpath = self._doc.xpathNewContext()
+- par = match
+- nss = {}
+- while par is not None:
+- nsdef = par.nsDefs()
+- while nsdef is not None:
+- if nsdef.name is not None:
+- if nsdef.name not in nss:
+- nss[nsdef.name] = nsdef.content
+- xpath.xpathRegisterNs(nsdef.name, nsdef.content)
+- nsdef = nsdef.next
+- par = par.parent
+- self.register_its_params(xpath, params, userparams=userparams)
++ self.register_its_params(var, params, userparams=userparams)
++ xpath = (ns, var)
++ for rule in root.iterchildren():
+ self.apply_its_rule(rule, xpath)
+
+ def apply_local_its_rules(self, userparams={}):
+ self._clear_cache()
+ for rules in self._localrules:
+- def reg_ns(xpath, node):
+- if node.parent is not None:
+- reg_ns(xpath, node.parent)
+- nsdef = node.nsDefs()
+- while nsdef is not None:
+- if nsdef.name is not None:
+- xpath.xpathRegisterNs(nsdef.name, nsdef.content)
+- nsdef = nsdef.next
+- xpath = self._doc.xpathNewContext()
+- reg_ns(xpath, rules)
++ var = {}
+ params = self.get_its_params(rules)
+- self.register_its_params(xpath, params, userparams=userparams)
+- for rule in xml_child_iter(rules):
+- if rule.type != 'element':
+- continue
+- if rule.nsDefs() is not None:
+- rule_xpath = self._doc.xpathNewContext()
+- reg_ns(rule_xpath, rule)
+- self.register_its_params(rule_xpath, params, userparams=userparams)
+- else:
+- rule_xpath = xpath
++ self.register_its_params(var, params, userparams=userparams)
++ for rule in rules.iterchildren():
++ ns = { k: v for k, v in rule.nsmap.items() if k is not None }
++ rule_xpath = (ns, var)
+ self.apply_its_rule(rule, rule_xpath)
+
+ def _append_credits(self, parent, node, trdata):
+- if xml_is_ns_name(node, NS_ITST, 'for-each'):
+- select = node.nsProp('select', None)
++ if node.tag == '{' + NS_ITST + '}for-each':
++ select = node.get('select')
+ if select == 'years':
+ for year in trdata[2].split(','):
+- for child in xml_child_iter(node):
++ for child in node.iterchildren():
+ self._append_credits(parent, child, trdata + (year.strip(),))
+- elif xml_is_ns_name(node, NS_ITST, 'value-of'):
+- select = node.nsProp('select', None)
++ elif node.tag == '{' + NS_ITST + '}value-of':
++ select = node.get('select')
+ val = None
+ if select == 'name':
+ val = trdata[0]
+@@ -873,11 +801,20 @@ class Document (object):
+ if val is not None:
+ if not PY3:
+ val = val.encode('utf-8')
+- parent.addContent(val)
++ if len(parent):
++ if parent[-1].tail:
++ parent[-1].tail += val
++ else:
++ parent[-1].tail = val
++ else:
++ if parent.text:
++ parent.text += val
++ else:
++ parent.text = val
+ else:
+- newnode = node.copyNode(2)
+- parent.addChild(newnode)
+- for child in xml_child_iter(node):
++ newnode = parent.makeelement(node.tag, node.attrib)
++ parent.append(newnode)
++ for child in node.iterchildren():
+ self._append_credits(newnode, child, trdata)
+
+ def merge_credits(self, translations, language, node):
+@@ -895,7 +832,7 @@ class Document (object):
+ if not match:
+ continue
+ trdata = match.groups()
+- for node in xml_child_iter(self._itst_credits[1]):
++ for node in self._itst_credits[1].iterchildren():
+ self._append_credits(self._itst_credits[0], node, trdata)
+
+ def join_translations(self, translations, node=None, strict=False):
+@@ -903,29 +840,30 @@ class Document (object):
+ if node is None:
+ is_root = True
+ self.generate_messages(comments=False)
+- node = self._doc.getRootElement()
+- if node is None or node.type != 'element':
++ node = self._doc.getroot()
++ if node is None:
+ return
+ if self.get_itst_drop(node) == 'yes':
+- prev = node.prev
+- node.unlinkNode()
+- node.freeNode()
+- if prev is not None and prev.isBlankNode():
+- prev.unlinkNode()
+- prev.freeNode()
++ xml_delete_node(node)
+ return
+ msg = self._msgs.get_message_by_node(node)
+ if msg is None:
+- self.translate_attrs(node, node)
+- children = [child for child in xml_child_iter(node)]
+- for child in children:
++ #self.translate_attrs(node, node)
++ for child in node.iterchildren():
+ self.join_translations(translations, node=child, strict=strict)
+ else:
+- prevnode = None
+- if node.prev is not None and node.prev.type == 'text':
+- prevtext = node.prev.content
+- if re.sub(r'\s+', '', prevtext) == '':
+- prevnode = node.prev
++ prevtext = None
++ prev = node.getprevious()
++ if prev is None:
++ parent = node.getparent()
++ if parent is not None:
++ prevtext = parent.text
++ else:
++ prevtext = prev.tail
++ if prevtext is not None:
++ if not re.fullmatch(r'\s+', prevtext):
++ prevtext = None
++ i = 0
+ for lang in sorted(list(translations.keys()), reverse=True):
+ locale = self.get_its_locale_filter(node)
+ lmatch = match_locale_list(locale[0], lang)
+@@ -933,24 +871,25 @@ class Document (object):
+ continue
+ newnode = self.get_translated(node, translations[lang], strict=strict, lang=lang)
+ if newnode != node:
+- newnode.setProp('xml:lang', lang)
+- node.addNextSibling(newnode)
+- if prevnode is not None:
+- node.addNextSibling(prevnode.copyNode(0))
+- if is_root:
+- # Because of the way we create nodes and rewrite the document,
+- # we end up with lots of redundant namespace definitions. We
+- # kill them off in one fell swoop at the end.
+- fix_node_ns(node, {})
+- self._check_errors()
++ newnode.set('{' + NS_XML + '}lang', lang)
++ node.addnext(newnode)
++ if i == 0:
++ # Move tail to first new node
++ newnode.tail = node.tail
++ if prevtext is not None:
++ node.tail = prevtext
++ else:
++ if prevtext is not None:
++ newnode.tail = prevtext
++ i += 1
+
+ def merge_translations(self, translations, language, node=None, strict=False):
+ is_root = False
+ if node is None:
+ is_root = True
+ self.generate_messages(comments=False)
+- node = self._doc.getRootElement()
+- if node is None or node.type != 'element':
++ node = self._doc.getroot()
++ if node is None:
+ return
+ drop = False
+ locale = self.get_its_locale_filter(node)
+@@ -962,26 +901,23 @@ class Document (object):
+ if match_locale_list(locale[0], language):
+ drop = True
+ if self.get_itst_drop(node) == 'yes' or drop:
+- prev = node.prev
+- node.unlinkNode()
+- node.freeNode()
+- if prev is not None and prev.isBlankNode():
+- prev.unlinkNode()
+- prev.freeNode()
++ xml_delete_node(node)
+ return
+ if is_root:
+ self.merge_credits(translations, language, node)
+ msg = self._msgs.get_message_by_node(node)
+ if msg is None:
+ self.translate_attrs(node, node)
+- children = [child for child in xml_child_iter(node)]
+- for child in children:
++ for child in node.iterchildren():
+ self.merge_translations(translations, language, node=child, strict=strict)
+ else:
+ newnode = self.get_translated(node, translations, strict=strict, lang=language)
+ if newnode != node:
+ self.translate_attrs(node, newnode)
+- node.replaceNode(newnode)
++ newnode.tail = node.tail
++ parent = node.getparent()
++ if parent is not None:
++ parent.replace(node, newnode)
+ if is_root:
+ # Apply language attributes to untranslated nodes. We don't do
+ # this before processing, because then these attributes would
+@@ -998,31 +934,27 @@ class Document (object):
+ origlang = self._its_lang.get(lcpar)
+ if origlang is not None:
+ break
+- lcpar = lcpar.parent
++ lcpar = lcpar.getparent()
+ if origlang is not None:
+- lcnode.setProp(attr, origlang)
++ lcnode.set(attr, origlang)
+ # And then set the language attribute on the root node.
+ if language is not None:
+ attr = self._itst_lang_attr.get(node)
+ if attr is not None:
+- node.setProp(attr, language)
+- # Because of the way we create nodes and rewrite the document,
+- # we end up with lots of redundant namespace definitions. We
+- # kill them off in one fell swoop at the end.
+- fix_node_ns(node, {})
+- self._check_errors()
++ node.set(attr, language)
+
+ def translate_attrs(self, oldnode, newnode):
+- trans_attrs = [attr for attr in xml_attr_iter(oldnode) if self._its_translate_nodes.get(attr, 'no') == 'yes']
+- for attr in trans_attrs:
+- srccontent = attr.get_content()
++ for attrname, srccontent in oldnode.items():
++ attr = XMLAttr(oldnode, attrname)
++ if self._its_translate_nodes.get(attr, 'no') != 'yes':
++ continue
+ if not PY3:
+ srccontent = srccontent.decode('utf-8')
+ newcontent = translations.ugettext(srccontent)
+ if newcontent:
+ if not PY3:
+ newcontent = newcontent.encode('utf-8')
+- newnode.setProp(attr.name, newcontent)
++ newnode.set(attrname, newcontent)
+
+ def get_translated (self, node, translations, strict=False, lang=None):
+ msg = self._msgs.get_message_by_node(node)
+@@ -1037,106 +969,90 @@ class Document (object):
+ trans = translations.ugettext(msgstr)
+ if trans is None:
+ return node
+- nss = {}
+- def reg_ns(node, nss):
+- if node.parent is not None:
+- reg_ns(node.parent, nss)
+- nsdef = node.nsDefs()
+- while nsdef is not None:
+- nss[nsdef.name] = nsdef.content
+- nsdef = nsdef.next
+- reg_ns(node, nss)
+- nss['_'] = NS_BLANK
+- try:
+- blurb = node.doc.intSubset().serialize('utf-8')
+- except Exception:
+- blurb = ''
+- blurb += '<' + ustr(node.name, 'utf-8')
+- for nsname in list(nss.keys()):
++ blurb = ''
++ doc = node.getroottree()
++ if doc.docinfo.internalDTD:
++ # This is an ugly hack to serialize the DTD. We copy the
++ # document, replace the document element, serialize the
++ # document and remove the last line which contains the
++ # document element, leaving only the DTD.
++ copy = deepcopy(doc)
++ root = copy.getroot()
++ newroot = root.makeelement(root.tag)
++ copy._setroot(newroot)
++ blurb = re.sub('.*$', '', etree.tostring(copy, encoding='unicode'))
++ localname = ustr(xml_localname(node), 'utf-8')
++ blurb += '<' + localname
++ blurb += ' xmlns:_="%s"' % NS_BLANK
++ for nsname, nsuri in node.nsmap.items():
+ if nsname is None:
+- blurb += ' xmlns="%s"' % nss[nsname]
++ blurb += ' xmlns="%s"' % nsuri
+ else:
+- blurb += ' xmlns:%s="%s"' % (nsname, nss[nsname])
+- blurb += '>%s</%s>' % (trans, ustr(node.name, 'utf-8'))
+- if not PY3:
+- blurb = blurb.encode('utf-8')
+- ctxt = libxml2.createDocParserCtxt(blurb)
+- if self._load_dtd:
+- ctxt.loadSubset(1)
+- if self._keep_entities:
+- ctxt.loadSubset(1)
+- ctxt.ctxtUseOptions(libxml2.XML_PARSE_DTDLOAD)
+- ctxt.replaceEntities(0)
+- else:
+- ctxt.replaceEntities(1)
+- ctxt.parseDocument()
+- trnode = ctxt.doc().getRootElement()
++ blurb += ' xmlns:%s="%s"' % (nsname, nsuri)
++ blurb += '>%s</%s>' % (trans, localname)
++ parser = etree.XMLParser(load_dtd = self._load_dtd or self._keep_entities,
++ resolve_entities = not(self._keep_entities))
+ try:
+- self._check_errors()
+- except libxml2.parserError:
++ trnode = etree.fromstring(blurb, parser)
++ except:
+ if strict:
+ raise
+ else:
+ sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+- (lang + ' ') if lang is not None else '',
+- msgstr.encode('utf-8')))
+- self._xml_err = ''
++ (lang + ' ') if lang is not None else '',
++ msgstr.encode('utf-8')))
+ return node
+- def scan_node(node):
+- children = [child for child in xml_child_iter(node)]
+- for child in children:
+- if child.type != 'element':
++ try:
++ for child in trnode.iterdescendants():
++ if isinstance(child, (etree._Entity, etree._Comment, etree._ProcessingInstruction)):
+ continue
+- if child.ns() is not None and child.ns().content == NS_BLANK:
+- ph_node = msg.get_placeholder(child.name).node
+- if self.has_child_elements(ph_node):
++ qname = etree.QName(child.tag)
++ if qname.namespace == NS_BLANK:
++ ph = msg.get_placeholder(qname.localname)
++ if ph is None:
++ sys.stderr.write('Warning: Could not find placeholder %s\n' % (
++ qname.localname))
++ continue
++ ph_node = ph.node
++ if len(ph_node):
+ self.merge_translations(translations, None, ph_node, strict=strict)
+- newnode = ph_node.copyNode(1)
+- newnode.setTreeDoc(self._doc)
+- child.replaceNode(newnode)
++ newnode = deepcopy(ph_node)
++ newnode.tail = child.tail
++ child.getparent().replace(child, newnode)
+ else:
+ repl = self.get_translated(ph_node, translations, strict=strict, lang=lang)
+- child.replaceNode(repl)
+- scan_node(child)
+- try:
+- scan_node(trnode)
++ repl.tail = child.tail
++ child.getparent().replace(child, repl)
+ except:
++ raise
+ if strict:
+ raise
+ else:
+ sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+ (lang + ' ') if lang is not None else '',
+ msgstr.encode('utf-8')))
+- self._xml_err = ''
+- ctxt.doc().freeDoc()
+ return node
+- retnode = node.copyNode(2)
+- retnode.setTreeDoc(self._doc)
+- for child in xml_child_iter(trnode):
+- newnode = child.copyNode(1)
+- newnode.setTreeDoc(self._doc)
+- retnode.addChild(newnode)
++ retnode = self._doc.getroot().makeelement(node.tag, node.attrib, node.nsmap)
++ retnode.text = trnode.text
++ for child in trnode.iterchildren():
++ retnode.append(child)
+
+- ctxt.doc().freeDoc()
+ return retnode
+
+ def generate_messages(self, comments=True):
+ if self._itst_credits is not None:
+ self._msgs.add_credits()
+- for child in xml_child_iter(self._doc):
+- if child.type == 'element':
+- self.generate_message(child, None, comments=comments)
+- break
++ if self._doc is not None:
++ self.generate_message(self._doc.getroot(), None, comments=comments)
+
+ def generate_message(self, node, msg, comments=True, path=None):
+- if node.type in ('text', 'cdata') and msg is not None:
+- msg.add_text(node.content)
++ if isinstance(node, etree._Entity):
++ msg.add_entity_ref(node.name)
+ return
+- if node.type == 'entity_ref':
+- msg.add_entity_ref(node.name);
+- if node.type != 'element':
++ # Only allow elements
++ if isinstance(node, XMLAttr) or not isinstance(node.tag, str):
+ return
+- if node.hasNsProp('drop', NS_ITST) and node.nsProp('drop', NS_ITST) == 'yes':
++ if node.get('{' + NS_ITST + '}drop', 'no') == 'yes':
+ return
+ if self._itst_drop_nodes.get(node, 'no') == 'yes':
+ return
+@@ -1158,9 +1074,7 @@ class Document (object):
+ if msg is not None:
+ msg.add_placeholder(node)
+ msg = Message()
+- ctxt = None
+- if node.hasNsProp('context', NS_ITST):
+- ctxt = node.nsProp('context', NS_ITST)
++ ctxt = node.get('{' + NS_ITST + '}context')
+ if ctxt is None:
+ ctxt = self._itst_contexts.get(node)
+ if ctxt is not None:
+@@ -1173,27 +1087,38 @@ class Document (object):
+ msg.set_preserve_space()
+ if self.get_its_locale_filter(node) != ('*', 'include'):
+ msg.set_locale_filter(self.get_its_locale_filter(node))
+- msg.add_source('%s:%i' % (self._doc.name, node.lineNo()))
+- msg.add_marker('%s/%s' % (ustr(node.parent.name, 'utf-8'), ustr(node.name, 'utf-8')))
++ msg.add_source('%s:%i' % (self._doc.docinfo.URL, node.sourceline))
++ parent = node.getparent()
++ if parent is None:
++ ptag = '#root'
++ else:
++ ptag = xml_localname(parent)
++ msg.add_marker('%s/%s' % (ustr(ptag, 'utf-8'), ustr(xml_localname(node), 'utf-8')))
+ else:
+ withinText = True
+ msg.add_start_tag(node)
+
+ if not withinText:
+ # Add msg for translatable node attributes
+- for attr in xml_attr_iter(node):
++ for attrname, attrval in node.items():
++ attr = XMLAttr(node, attrname)
+ if self._its_translate_nodes.get(attr, 'no') == 'yes':
+ attr_msg = Message()
+ if self.get_preserve_space(attr):
+ attr_msg.set_preserve_space()
+- attr_msg.add_source('%s:%i' % (self._doc.name, node.lineNo()))
+- attr_msg.add_marker('%s/%s@%s' % (node.parent.name, node.name, attr.name))
+- attr_msg.add_text(attr.content)
++ attr_msg.add_source('%s:%i' % (self._doc.docinfo.URL, node.sourceline))
++ attr_msg.add_marker('%s/%s@%s' % (
++ xml_localname(node.getparent()),
++ xml_localname(node),
++ etree.QName(attrname).localname))
++ attr_msg.add_text(attrval)
+ if comments:
+ for locnote in self.get_its_loc_notes(attr):
+ comment = Comment(locnote)
+ comment.add_marker ('%s/%s@%s' % (
+- node.parent.name, node.name, attr.name))
++ xml_localname(node.getparent()),
++ xml_localname(node),
++ etree.QName(attrname).localname))
+ attr_msg.add_comment(comment)
+ self._msgs.add_message(attr_msg, attr)
+
+@@ -1204,15 +1129,16 @@ class Document (object):
+ for locnote in self.get_its_loc_notes(cnode, inherit=(not withinText)):
+ comment = Comment(locnote)
+ if withinText:
+- comment.add_marker('.%s/%s' % (path, cnode.name))
++ comment.add_marker('.%s/%s' % (path, xml_localname(cnode)))
+ msg.add_comment(comment)
+ hasnote = True
+ if hasnote or not is_unit:
+ break
+- cnode = cnode.parent
++ cnode = cnode.getparent()
+
+ self.generate_external_resource_message(node)
+- for attr in xml_attr_iter(node):
++ for attrname in node.keys():
++ attr = XMLAttr(node, attrname)
+ self.generate_external_resource_message(attr)
+ idvalue = self.get_its_id_value(attr)
+ if idvalue is not None:
+@@ -1220,9 +1146,13 @@ class Document (object):
+ msg.add_id_value(basename + '#' + idvalue)
+
+ if withinText:
+- path = path + '/' + node.name
+- for child in xml_child_iter(node):
++ path = path + '/' + node.tag
++ if node.text is not None and msg is not None:
++ msg.add_text(node.text)
++ for child in node.iterchildren():
+ self.generate_message(child, msg, comments=comments, path=path)
++ if child.tail is not None and msg is not None:
++ msg.add_text(child.tail)
+
+ if translate:
+ if is_unit and not msg.is_empty():
+@@ -1234,12 +1164,17 @@ class Document (object):
+ if node not in self._its_externals:
+ return
+ resref = self._its_externals[node]
+- if node.type == 'element':
+- translate = self.get_its_translate(node)
+- marker = '%s/%s' % (node.parent.name, node.name)
++ if isinstance(node, XMLAttr):
++ elem = node.getparent()
++ translate = self.get_its_translate(elem)
++ marker = '%s/%s/@%s' % (
++ xml_localname(elem.getparent()),
++ xml_localname(elem),
++ xml_localname(node))
+ else:
+- translate = self.get_its_translate(node.parent)
+- marker = '%s/%s/@%s' % (node.parent.parent.name, node.parent.name, node.name)
++ translate = self.get_its_translate(node)
++ marker = '%s/%s' % (xml_localname(node.getparent()),
++ xml_localname(node))
+ if translate == 'no':
+ return
+ msg = Message()
+@@ -1253,7 +1188,7 @@ class Document (object):
+ txt = "external ref='%s' md5='%s'" % (resref, filemd5)
+ msg.set_context('_')
+ msg.add_text(txt)
+- msg.add_source('%s:%i' % (self._doc.name, node.lineNo()))
++ msg.add_source('%s:%i' % (self._doc.docinfo.URL, node.sourceline))
+ msg.add_marker(marker)
+ msg.add_comment(Comment('This is a reference to an external file such as an image or'
+ ' video. When the file changes, the md5 hash will change to'
+@@ -1265,44 +1200,41 @@ class Document (object):
+ def is_translation_unit (self, node):
+ return self.get_its_within_text(node) != 'yes'
+
+- def has_child_elements(self, node):
+- return len([child for child in xml_child_iter(node) if child.type=='element'])
+-
+ def get_preserve_space (self, node):
+- while node.type in ('attribute', 'element'):
+- if node.getSpacePreserve() == 1:
++ while node is not None:
++ if node.get('{' + NS_XML + '}space') == 'preserve':
+ return True
+ if node in self._its_preserve_space_nodes:
+ return (self._its_preserve_space_nodes[node] == 'preserve')
+- node = node.parent
++ node = node.getparent()
+ return False
+
+ def get_its_translate(self, node):
+ if node in self._its_translate_nodes_cache:
+ return self._its_translate_nodes_cache[node]
+ val = None
+- if node.hasNsProp('translate', NS_ITS):
+- val = node.nsProp('translate', NS_ITS)
+- elif xml_is_ns_name(node, NS_ITS, 'span') and node.hasNsProp('translate', None):
+- val = node.nsProp('translate', None)
++ if '{' + NS_ITS + '}translate' in node.attrib:
++ val = node.get('{' + NS_ITS + '}translate')
++ elif node.tag == '{' + NS_ITS + '}span' and 'translate' in node.attrib:
++ val = node.get('translate')
+ elif node in self._its_translate_nodes:
+ val = self._its_translate_nodes[node]
+ if val is not None:
+ self._its_translate_nodes_cache[node] = val
+ return val
+- if node.type == 'attribute':
++ if isinstance(node, XMLAttr):
+ return 'no'
+- if node.parent.type == 'element':
+- parval = self.get_its_translate(node.parent)
++ if node.getparent() is not None:
++ parval = self.get_its_translate(node.getparent())
+ self._its_translate_nodes_cache[node] = parval
+ return parval
+ return 'yes'
+
+ def get_its_within_text(self, node):
+- if node.hasNsProp('withinText', NS_ITS):
+- val = node.nsProp('withinText', NS_ITS)
+- elif xml_is_ns_name(node, NS_ITS, 'span') and node.hasNsProp('withinText', None):
+- val = node.nsProp('withinText', None)
++ if '{' + NS_ITS + '}withinText' in node.attrib:
++ val = node.get('{' + NS_ITS + '}withinText')
++ elif node.tag == '{' + NS_ITS + '}span' and 'withinText' in node.attrib:
++ val = node.get('withinText')
+ else:
+ return self._its_within_text_nodes.get(node, 'no')
+ if val in ('yes', 'nested'):
+@@ -1312,73 +1244,63 @@ class Document (object):
+ def get_its_locale_filter(self, node):
+ if node in self._its_locale_filters_cache:
+ return self._its_locale_filters_cache[node]
+- if node.hasNsProp('localeFilterList', NS_ITS) or node.hasNsProp('localeFilterType', NS_ITS):
+- if node.hasNsProp('localeFilterList', NS_ITS):
+- lst = node.nsProp('localeFilterList', NS_ITS)
+- else:
+- lst = '*'
+- if node.hasNsProp('localeFilterType', NS_ITS):
+- typ = node.nsProp('localeFilterType', NS_ITS)
+- else:
+- typ = 'include'
++ if ('{' + NS_ITS + '}localeFilterList' in node.attrib or
++ '{' + NS_ITS + '}localeFilterType' in node.attrib):
++ lst = node.get('{' + NS_ITS + '}localeFilterList', '*')
++ typ = node.get('{' + NS_ITS + '}localeFilterType', 'include')
+ return (lst, typ)
+- if (xml_is_ns_name(node, NS_ITS, 'span') and
+- (node.hasNsProp('localeFilterList', None) or node.hasNsProp('localeFilterType', None))):
+- if node.hasNsProp('localeFilterList', None):
+- lst = node.nsProp('localeFilterList', None)
+- else:
+- lst = '*'
+- if node.hasNsProp('localeFilterType', None):
+- typ = node.nsProp('localeFilterType', None)
+- else:
+- typ = 'include'
++ if (node.tag == '{' + NS_ITS + '}span' and
++ ('localeFilterList' in node.attrib or 'localeFilterType' in node.attrib)):
++ lst = node.get('localeFilterList', '*')
++ typ = node.get('localeFilterType', 'include')
+ return (lst, typ)
+ if node in self._its_locale_filters:
+ return self._its_locale_filters[node]
+- if node.parent.type == 'element':
+- parval = self.get_its_locale_filter(node.parent)
++ if node.getparent() is not None:
++ parval = self.get_its_locale_filter(node.getparent())
+ self._its_locale_filters_cache[node] = parval
+ return parval
+ return ('*', 'include')
+
+ def get_itst_drop(self, node):
+- if node.hasNsProp('drop', NS_ITST) and node.nsProp('drop', NS_ITST) == 'yes':
++ if node.get('{' + NS_ITST + '}drop') == 'yes':
+ return 'yes'
+ if self._itst_drop_nodes.get(node, 'no') == 'yes':
+ return 'yes'
+ return 'no'
+
+ def get_its_id_value(self, node):
+- if node.hasNsProp('id', NS_XML):
+- return node.nsProp('id', NS_XML)
++ if '{' + NS_XML + '}id' in node.attrib:
++ return node.get('{' + NS_XML + '}id')
+ return self._its_id_values.get(node, None)
+
+ def get_its_loc_notes(self, node, inherit=True):
+ if node in self._its_loc_notes_cache:
+ return self._its_loc_notes_cache[node]
+ ret = []
+- if ( node.hasNsProp('locNote', NS_ITS) or
+- node.hasNsProp('locNoteRef', NS_ITS) or
+- node.hasNsProp('locNoteType', NS_ITS) ):
+- notetype = node.nsProp('locNoteType', NS_ITS)
+- if node.hasNsProp('locNote', NS_ITS):
+- ret.append(LocNote(locnote=node.nsProp('locNote', NS_ITS), locnotetype=notetype))
+- elif node.hasNsProp('locNoteRef', NS_ITS):
+- ret.append(LocNote(locnoteref=node.nsProp('locNoteRef', NS_ITS), locnotetype=notetype))
+- elif xml_is_ns_name(node, NS_ITS, 'span'):
+- if ( node.hasNsProp('locNote', None) or
+- node.hasNsProp('locNoteRef', None) or
+- node.hasNsProp('locNoteType', None) ):
+- notetype = node.nsProp('locNoteType', None)
+- if node.hasNsProp('locNote', None):
+- ret.append(LocNote(locnote=node.nsProp('locNote', None), locnotetype=notetype))
+- elif node.hasNsProp('locNoteRef', None):
+- ret.append(LocNote(locnoteref=node.nsProp('locNoteRef', None), locnotetype=notetype))
++ if ( '{' + NS_ITS + '}locNote' in node.attrib or
++ '{' + NS_ITS + '}locNoteRef' in node.attrib or
++ '{' + NS_ITS + '}locNoteType' in node.attrib ):
++ notetype = node.get('{' + NS_ITS + '}locNoteType')
++ if '{' + NS_ITS + '}locNote' in node.attrib:
++ ret.append(LocNote(locnote=node.get('{' + NS_ITS + '}locNote'), locnotetype=notetype))
++ elif '{' + NS_ITS + '}locNoteRef' in node.attrib:
++ ret.append(LocNote(locnoteref=node.get('{' + NS_ITS + '}locNoteRef'), locnotetype=notetype))
++ elif node.tag == '{' + NS_ITS + '}span':
++ if ( 'locNote' in node.attrib or
++ 'locNoteRef' in node.attrib or
++ 'locNoteType' in node.attrib ):
++ notetype = node.get('locNoteType')
++ if 'locNote' in node.attrib:
++ ret.append(LocNote(locnote=node.get('locNote'), locnotetype=notetype))
++ elif 'locNoteRef' in node.attrib:
++ ret.append(LocNote(locnoteref=node.get('locNoteRef'), locnotetype=notetype))
+ for locnote in reversed(self._its_loc_notes.get(node, [])):
+ ret.append(locnote)
+ if (len(ret) == 0 and inherit and
+- node.type != 'attribute' and node.parent is not None and node.parent.type == 'element'):
+- parval = self.get_its_loc_notes(node.parent)
++ not isinstance(node, XMLAttr) and
++ node.getparent() is not None):
++ parval = self.get_its_loc_notes(node.getparent())
+ self._its_loc_notes_cache[node] = parval
+ return parval
+ self._its_loc_notes_cache[node] = ret
+@@ -1386,12 +1308,12 @@ class Document (object):
+
+ def output_test_data(self, category, out, node=None):
+ if node is None:
+- node = self._doc.getRootElement()
++ node = self._doc.getroot()
+ compval = ''
+ if category == 'translate':
+ compval = 'translate="%s"' % self.get_its_translate(node)
+ elif category == 'withinText':
+- if node.type != 'attribute':
++ if not isinstance(node, XMLAttr):
+ compval = 'withinText="%s"' % self.get_its_within_text(node)
+ elif category == 'localeFilter':
+ compval = 'localeFilterList="%s"\tlocaleFilterType="%s"' % self.get_its_locale_filter(node)
+@@ -1422,16 +1344,32 @@ class Document (object):
+ out.write('%s\t%s\r\n' % (xml_get_node_path(node), compval))
+ else:
+ out.write('%s\r\n' % (xml_get_node_path(node)))
+- for attr in sorted(xml_attr_iter(node), key=ustr):
++ for attrname in sorted(node.keys(), key=ustr):
++ attr = XMLAttr(node, attrname)
+ self.output_test_data(category, out, attr)
+- for child in xml_child_iter(node):
+- if child.type == 'element':
+- self.output_test_data(category, out, child)
++ for child in node.iterchildren():
++ self.output_test_data(category, out, child)
+
+- @staticmethod
+- def _try_xpath_eval (xpath, expr):
++ def _try_xpath_eval (self, xpath, expr, node=None):
++ if node is None:
++ node = self._doc
++ elif isinstance(node, XMLAttr):
++ # lxml doesn't support attributes as XPath context nodes.
++ if expr == '.':
++ return [ node ]
++ sys.stderr.write('Warning: Unsupported XPath on attribute: %s\n' % expr)
++ return []
+ try:
+- return xpath.xpathEval(expr)
++ result = node.xpath(expr, namespaces=xpath[0], **xpath[1])
++ if not isinstance(result, str):
++ for i in range(len(result)):
++ val = result[i]
++ # Use lxml's "smart string" feature to determine
++ # the attribute node.
++ if (isinstance(val, etree._ElementUnicodeResult) and
++ val.is_attribute):
++ result[i] = XMLAttr(val.getparent(), val.attrname)
++ return result
+ except:
+ sys.stderr.write('Warning: Invalid XPath: %s\n' % expr)
+ return []
+@@ -1636,11 +1574,11 @@ if __name__ == '__main__':
+ raise
+ sys.stderr.write('Error: Could not merge translations:\n%s\n' % ustr(e))
+ sys.exit(1)
+- serialized = doc._doc.serialize('utf-8')
+- if PY3:
+- # For some reason, under py3, our serialized data is returns as a str.
+- # Let's encode it to bytes
+- serialized = serialized.encode('utf-8')
++ # lxml generates XML declarations with single quotes.
++ serialized = (
++ b'<?xml version="1.0" encoding="utf-8"?>\n' +
++ etree.tostring(doc._doc, encoding='utf-8') +
++ b'\n')
+ fout = out
+ fout_is_str = isinstance(fout, string_types)
+ if fout_is_str:
+@@ -1675,11 +1613,11 @@ if __name__ == '__main__':
+ for itsfile in opts.itsfile:
+ doc.apply_its_file(itsfile, userparams=userparams)
+ doc.join_translations(translations, strict=opts.strict)
+- serialized = doc._doc.serialize('utf-8')
+- if PY3:
+- # For some reason, under py3, our serialized data is returns as a str.
+- # Let's encode it to bytes
+- serialized = serialized.encode('utf-8')
++ # lxml generates XML declarations with single quotes.
++ serialized = (
++ b'<?xml version="1.0" encoding="utf-8"?>\n' +
++ etree.tostring(doc._doc, encoding='utf-8') +
++ b'\n')
+ out.write(serialized)
+ out.flush()
+
diff --git a/textproc/jaq/Makefile b/textproc/jaq/Makefile
index f9ec541f6038..04cc2e7d5dea 100644
--- a/textproc/jaq/Makefile
+++ b/textproc/jaq/Makefile
@@ -1,7 +1,7 @@
PORTNAME= jaq
DISTVERSIONPREFIX= v
DISTVERSION= 2.2.0
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/jless/Makefile b/textproc/jless/Makefile
index aac265179c10..ecd6bfa8d4a1 100644
--- a/textproc/jless/Makefile
+++ b/textproc/jless/Makefile
@@ -1,7 +1,7 @@
PORTNAME= jless
DISTVERSIONPREFIX= v
DISTVERSION= 0.9.0
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= textproc
MAINTAINER= lwhsu@FreeBSD.org
diff --git a/textproc/jnv/Makefile b/textproc/jnv/Makefile
index c0dae3861612..31fd5118f452 100644
--- a/textproc/jnv/Makefile
+++ b/textproc/jnv/Makefile
@@ -1,6 +1,7 @@
PORTNAME= jnv
DISTVERSIONPREFIX= v
DISTVERSION= 0.6.1
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/jql/Makefile b/textproc/jql/Makefile
index f563f7be84e0..ded26afcb5d5 100644
--- a/textproc/jql/Makefile
+++ b/textproc/jql/Makefile
@@ -1,6 +1,7 @@
PORTNAME= jql
DISTVERSIONPREFIX= jql-v
DISTVERSION= 8.0.7
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/kibana8/Makefile b/textproc/kibana8/Makefile
index b253abe594bd..86e36625a02c 100644
--- a/textproc/kibana8/Makefile
+++ b/textproc/kibana8/Makefile
@@ -1,5 +1,6 @@
PORTNAME= kibana
DISTVERSION= 8.11.3
+PORTREVISION= 1
DISTVERSIONSUFFIX= -linux-x86_64
CATEGORIES= textproc www
MASTER_SITES= https://artifacts.elastic.co/downloads/kibana/ \
@@ -13,15 +14,12 @@ WWW= https://www.elastic.co/products/kibana
LICENSE= APACHE20
-DEPRECATED= Depends on expired www/*node18
-EXPIRATION_DATE=2025-09-01
-
-BUILD_DEPENDS= npm-node18>=9.7.2:www/npm-node18
+BUILD_DEPENDS= npm-node20>=9.7.2:www/npm-node20
LIB_DEPENDS= libre2.so:devel/re2 \
libuv.so:devel/libuv
-RUN_DEPENDS= ${LOCALBASE}/bin/node:www/node18
+RUN_DEPENDS= ${LOCALBASE}/bin/node:www/node20
-USES= compiler:c++17-lang cpe nodejs:18,build,run python:build
+USES= compiler:c++17-lang cpe nodejs:20,build,run python:build
CPE_VENDOR= elastic
USE_GITHUB= nodefault
diff --git a/textproc/logseq/Makefile b/textproc/logseq/Makefile
index fa05ee97b46b..ceee25c36b54 100644
--- a/textproc/logseq/Makefile
+++ b/textproc/logseq/Makefile
@@ -14,6 +14,9 @@ WWW= https://logseq.com
LICENSE= AGPLv3
LICENSE_FILE= ${WRKSRC}/LICENSE
+DEPRECATED= Depends on expired devel/electron34
+EXPIRATION_DATE=2025-12-01
+
ONLY_FOR_ARCHS= amd64
RUN_DEPENDS= git:devel/git
diff --git a/textproc/mdbook-linkcheck/Makefile b/textproc/mdbook-linkcheck/Makefile
index 4d3fae875e9b..d19c43469220 100644
--- a/textproc/mdbook-linkcheck/Makefile
+++ b/textproc/mdbook-linkcheck/Makefile
@@ -1,7 +1,7 @@
PORTNAME= mdbook-linkcheck
DISTVERSIONPREFIX= v
DISTVERSION= 0.7.7
-PORTREVISION= 26
+PORTREVISION= 27
CATEGORIES= textproc
MAINTAINER= ports@FreeBSD.org
diff --git a/textproc/mdbook-mermaid/Makefile b/textproc/mdbook-mermaid/Makefile
index a7734c6c3fb2..05fab773c796 100644
--- a/textproc/mdbook-mermaid/Makefile
+++ b/textproc/mdbook-mermaid/Makefile
@@ -1,7 +1,7 @@
PORTNAME= mdbook-mermaid
DISTVERSIONPREFIX= v
DISTVERSION= 0.15.0
-PORTREVISION= 3
+PORTREVISION= 4
CATEGORIES= textproc
MAINTAINER= eduardo@FreeBSD.org
diff --git a/textproc/mdbook/Makefile b/textproc/mdbook/Makefile
index edefe70c0407..d59b2466cd41 100644
--- a/textproc/mdbook/Makefile
+++ b/textproc/mdbook/Makefile
@@ -1,6 +1,7 @@
PORTNAME= mdbook
DISTVERSIONPREFIX= v
DISTVERSION= 0.4.52
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= eduardo@FreeBSD.org
diff --git a/textproc/mdq/Makefile b/textproc/mdq/Makefile
index fb5a435e124a..0c5ecd114c6c 100644
--- a/textproc/mdq/Makefile
+++ b/textproc/mdq/Makefile
@@ -1,7 +1,7 @@
PORTNAME= mdq
DISTVERSIONPREFIX= v
DISTVERSION= 0.6.1
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/meilisearch/Makefile b/textproc/meilisearch/Makefile
index 8aef6ba85ecd..c74664f5e5f8 100644
--- a/textproc/meilisearch/Makefile
+++ b/textproc/meilisearch/Makefile
@@ -1,7 +1,7 @@
PORTNAME= meilisearch
DISTVERSIONPREFIX= v
DISTVERSION= 1.9.0
-PORTREVISION= 11
+PORTREVISION= 12
CATEGORIES= textproc
MASTER_SITES= https://github.com/meilisearch/mini-dashboard/releases/download/v${DASHBOARD_VERSION}/build.zip?dummy=/:mini_dashboard_assets \
https://dlwqk3ibdg1xh.cloudfront.net/:dic_upstream \
diff --git a/textproc/opensearch-dashboards210/Makefile b/textproc/opensearch-dashboards210/Makefile
deleted file mode 100644
index 704005f50f67..000000000000
--- a/textproc/opensearch-dashboards210/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-DISTVERSION= 2.10.0
-
-PORTREVISION= 1
-
-PKGNAMESUFFIX= 210
-
-COMMENT= Visualization dashboards for OpenSearch
-
-CONFLICTS= opensearch-dashboards opensearch-dashboards213 opensearch-dashboards216
-
-DISTINFO_FILE= ${.CURDIR}/distinfo
-
-MASTERDIR= ${.CURDIR}/../../textproc/opensearch-dashboards216
-
-.include "${MASTERDIR}/Makefile"
diff --git a/textproc/opensearch-dashboards210/distinfo b/textproc/opensearch-dashboards210/distinfo
deleted file mode 100644
index 8153ae230e27..000000000000
--- a/textproc/opensearch-dashboards210/distinfo
+++ /dev/null
@@ -1,3 +0,0 @@
-TIMESTAMP = 1702759624
-SHA256 (opensearch-dashboards-2.10.0-linux-x64.tar.gz) = df1463540f3831de79ceb03cf2d4c691ac4f63b244943fb84ca67636877bb6d1
-SIZE (opensearch-dashboards-2.10.0-linux-x64.tar.gz) = 324084481
diff --git a/textproc/opensearch-dashboards213/Makefile b/textproc/opensearch-dashboards213/Makefile
deleted file mode 100644
index 1dd11446754c..000000000000
--- a/textproc/opensearch-dashboards213/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-DISTVERSION= 2.13.0
-
-PORTREVISION= 1
-
-PKGNAMESUFFIX= 213
-
-COMMENT= Visualization dashboards for OpenSearch
-
-CONFLICTS= opensearch-dashboards opensearch-dashboards210
-
-DISTINFO_FILE= ${.CURDIR}/distinfo
-
-MASTERDIR= ${.CURDIR}/../../textproc/opensearch-dashboards216
-
-.include "${MASTERDIR}/Makefile"
diff --git a/textproc/opensearch-dashboards213/distinfo b/textproc/opensearch-dashboards213/distinfo
deleted file mode 100644
index 9d1adcd3dff1..000000000000
--- a/textproc/opensearch-dashboards213/distinfo
+++ /dev/null
@@ -1,3 +0,0 @@
-TIMESTAMP = 1732498735
-SHA256 (opensearch-dashboards-2.13.0-linux-x64.tar.gz) = 97264961f3913d627dda1dcf6088a656de161a96ba77e65902d49d4c029374a7
-SIZE (opensearch-dashboards-2.13.0-linux-x64.tar.gz) = 319095349
diff --git a/textproc/opensearch-dashboards216/Makefile b/textproc/opensearch-dashboards216/Makefile
deleted file mode 100644
index 227521da1181..000000000000
--- a/textproc/opensearch-dashboards216/Makefile
+++ /dev/null
@@ -1,85 +0,0 @@
-PORTNAME= opensearch-dashboards
-DISTVERSION?= 2.16.0
-PORTREVISION?= 0
-DISTVERSIONSUFFIX= -linux-x64
-CATEGORIES= textproc www
-MASTER_SITES= https://artifacts.opensearch.org/releases/bundle/${PORTNAME}/${DISTVERSION}/
-PKGNAMESUFFIX?= 216
-
-MAINTAINER= opensearch@FreeBSD.org
-COMMENT?= Visualization dashboards for OpenSearch
-WWW= https://opensearch.org
-
-LICENSE= APACHE20
-LICENSE_FILE= ${WRKSRC}/LICENSE.txt
-
-DEPRECATED= Depends on expired www/npm-node18
-EXPIRATION_DATE=2025-09-01
-
-CONFLICTS?= opensearch-dashboards opensearch-dashboards210 opensearch-dashboards213
-
-BUILD_DEPENDS= npm-node18>0:www/npm-node18
-
-USES= nodejs:18,build,run python:build
-USE_RC_SUBR= ${PORTNAME}
-
-SUB_FILES= pkg-deinstall
-SUB_LIST= PORTNAME="${PORTNAME}" \
- PKGNAMESUFFIX="${PKGNAMESUFFIX}" \
- WWWDIR=${WWWDIR}
-
-WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}
-
-NODE_VER= 18.18.0
-NO_BUILD= yes
-
-_DEVDIR= ${WRKDIR}/.devdir
-
-post-patch:
- @${REINPLACE_CMD} -e 's|14.20.1|${NODE_VER}|g' ${WRKSRC}/package.json
- ${RM} \
- ${WRKSRC}/bin/*.orig \
- ${WRKSRC}/bin/*.bak \
- ${WRKSRC}/package.json.bak
- ${RM} -r ${WRKSRC}/plugins/reportsDashboards/.chromium
-
-do-install:
- ${MKDIR} ${STAGEDIR}${WWWDIR} ${STAGEDIR}${ETCDIR}
- ${INSTALL_DATA} ${WRKSRC}/config/opensearch_dashboards.yml ${STAGEDIR}${ETCDIR}/opensearch_dashboards.yml.sample
- (cd ${WRKSRC} && \
- ${COPYTREE_SHARE} "data node_modules package.json plugins src" ${STAGEDIR}${WWWDIR} && \
- ${COPYTREE_BIN} bin ${STAGEDIR}${WWWDIR})
-
-post-install:
- ${ECHO} "@sample ${ETCDIR}/opensearch_dashboards.yml.sample" >> ${TMPPLIST}
- ${FIND} -s ${STAGEDIR}${WWWDIR} -not -type d | ${SORT} | \
- ${SED} -e 's#^${STAGEDIR}${PREFIX}/##' >> ${TMPPLIST}
- ${ECHO} "@dir(www,www) ${WWWDIR}/data" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/reportsDashboards/node_modules/set-interval-async/test/resources/legacy" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/reportsDashboards/node_modules/set-interval-async/test/resources/fixed" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/reportsDashboards/node_modules/set-interval-async/test/resources/dynamic" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/reportsDashboards/node_modules/set-interval-async/examples/fixed" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/reportsDashboards/node_modules/set-interval-async/examples/dynamic" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/observabilityDashboards/server/adaptors/integrations/__test__" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/observabilityDashboards/server/adaptors/integrations/repository/__test__" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Alerts/components/AlertFlyout" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/CreateDetector/components/ConfigureAlerts/components/AlertCondition" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/components/AlertTriggerView" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/components/DetectorBasicDetailsView" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/components/DetectorRulesView" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/components/FieldMappingsView" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/components/UpdateAlertConditions" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/components/UpdateDetectorBasicDetails" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/components/UpdateDetectorRules" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/components/UpdateFieldMappings" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/containers/AlertTriggersView" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/containers/DetectorDetails" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/containers/DetectorDetailsView" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/containers/Detectors" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Detectors/containers/EditFieldMappings" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Rules/components/DeleteModal" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Rules/components/RuleEditor/components" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityAnalyticsDashboards/test/mocks/Rules/components/RulesTable" >> ${TMPPLIST}
- ${ECHO} "@dir ${WWWDIR}/plugins/securityDashboards/server/multitenancy/test" >> ${TMPPLIST}
-
-.include <bsd.port.mk>
diff --git a/textproc/opensearch-dashboards216/distinfo b/textproc/opensearch-dashboards216/distinfo
deleted file mode 100644
index 9bd52da5a3f6..000000000000
--- a/textproc/opensearch-dashboards216/distinfo
+++ /dev/null
@@ -1,3 +0,0 @@
-TIMESTAMP = 1746825057
-SHA256 (opensearch-dashboards-2.16.0-linux-x64.tar.gz) = e3ebdd00c21cf7508609c93bfca5aa3d99b66a2681add231af38383bed33d12a
-SIZE (opensearch-dashboards-2.16.0-linux-x64.tar.gz) = 327600245
diff --git a/textproc/opensearch-dashboards216/files/opensearch-dashboards.in b/textproc/opensearch-dashboards216/files/opensearch-dashboards.in
deleted file mode 100644
index 7043fa9301a9..000000000000
--- a/textproc/opensearch-dashboards216/files/opensearch-dashboards.in
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-
-# PROVIDE: opensearch_dashboards
-# REQUIRE: DAEMON
-# BEFORE: LOGIN
-# KEYWORD: shutdown
-
-. /etc/rc.subr
-
-name=opensearch_dashboards
-rcvar=opensearch_dashboards_enable
-
-load_rc_config $name
-
-: ${opensearch_dashboards_enable:="NO"}
-: ${opensearch_dashboards_config:="%%ETCDIR%%/opensearch_dashboards.yml"}
-: ${opensearch_dashboards_user:="www"}
-: ${opensearch_dashboards_group:="www"}
-: ${opensearch_dashboards_log:="/var/log/opensearch_dashboards.log"}
-: ${opensearch_dashboards_syslog_output_enable:="NO"}
-
-start_precmd="opensearch_dashboards_start_precmd"
-reload_cmd="opensearch_dashboards_reload_cmd"
-extra_commands="reload"
-
-if checkyesno opensearch_dashboards_syslog_output_enable; then
- if [ -n "${opensearch_dashboards_syslog_output_tag}" ]; then
- opensearch_dashboards_syslog_output_flags="-T ${opensearch_dashboards_syslog_output_tag}"
- else
- opensearch_dashboards_syslog_output_flags="-T ${name}"
- fi
- if [ -n "${opensearch_dashboards_syslog_output_priority}" ]; then
- opensearch_dashboards_syslog_output_flags="${opensearch_dashboards_syslog_output_flags} -s ${opensearch_dashboards_syslog_output_priority}"
- fi
- if [ -n "${opensearch_dashboards_syslog_output_facility}" ]; then
- opensearch_dashboards_syslog_output_flags="${opensearch_dashboards_syslog_output_flags} -l ${opensearch_dashboards_syslog_output_facility}"
- fi
-fi
-
-NODE="%%LOCALBASE%%/bin/node"
-
-required_files="${opensearch_dashboards_config}"
-pidfile="/var/run/${name}.pid"
-
-command="/usr/sbin/daemon"
-command_args="-f ${opensearch_dashboards_syslog_output_flags} -P ${pidfile} -t ${name} \
- /usr/bin/env NODE_ENV=production ${opensearch_dashboards_env} \
- ${NODE} %%WWWDIR%%/src/cli/dist serve \
- --config ${opensearch_dashboards_config} --log-file ${opensearch_dashboards_log} \
- ${opensearch_dashboards_args}"
-
-opensearch_dashboards_start_precmd()
-{
- if [ ! -e "${pidfile}" ]; then
- install -m 0600 -o ${opensearch_dashboards_user} -g ${opensearch_dashboards_group} /dev/null ${pidfile}
- fi
- if [ ! -f ${opensearch_dashboards_log} ]; then
- install -o ${opensearch_dashboards_user} -g ${opensearch_dashboards_group} -m 640 /dev/null ${opensearch_dashboards_log}
- fi
- if [ ! -d %%WWWDIR%%/optimize ]; then
- install -d -o ${opensearch_dashboards_user} -g ${opensearch_dashboards_group} %%WWWDIR%%/optimize
- else
- # We may have installed a plugin as root which will cause files in here
- # to be owned by root:wheel. Fix with a chown.
- chown -R ${opensearch_dashboards_user}:${opensearch_dashboards_group} %%WWWDIR%%/optimize
- fi
-}
-
-opensearch_dashboards_reload_cmd()
-{
- if [ -z "$rc_pid" ]; then
- _run_rc_notrunning
- return 1
- else
- pkill -HUP -P ${rc_pid}
- fi
-}
-
-run_rc_command "$1"
diff --git a/textproc/opensearch-dashboards216/files/pkg-deinstall.in b/textproc/opensearch-dashboards216/files/pkg-deinstall.in
deleted file mode 100644
index 0699ab559805..000000000000
--- a/textproc/opensearch-dashboards216/files/pkg-deinstall.in
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-
-case "$2" in
-POST-DEINSTALL)
- if [ -d %%WWWDIR%%/optimize ]; then
- /usr/bin/find %%WWWDIR%%/optimize/ -delete
- fi
-
- cat <<EOMSG
-
-If %%PORTNAME%%%%PKGNAMESUFFIX%% is being deleted permanently, and you do not wish to keep any
-data that was in the cluster, then you may wish to delete the
-%%WWWDIR%% directory. This can be done by with the command:
-
- # rm -rf %%WWWDIR%%
-
-Please ignore this if %%PORTNAME%%%%PKGNAMESUFFIX%% is being upgraded
-EOMSG
- ;;
-esac
diff --git a/textproc/opensearch-dashboards216/pkg-descr b/textproc/opensearch-dashboards216/pkg-descr
deleted file mode 100644
index 2669760829b1..000000000000
--- a/textproc/opensearch-dashboards216/pkg-descr
+++ /dev/null
@@ -1,3 +0,0 @@
-OpenSearch Dashboards is the default visualization tool for data in OpenSearch.
-It also serves as a user interface for many of the OpenSearch plugins,
-including security, alerting, Index State Management, SQL, and more.
diff --git a/textproc/otree/Makefile b/textproc/otree/Makefile
index 139409ac9761..8a085f61d659 100644
--- a/textproc/otree/Makefile
+++ b/textproc/otree/Makefile
@@ -1,6 +1,7 @@
PORTNAME= otree
DISTVERSIONPREFIX= v
DISTVERSION= 0.5.2
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= olgeni@FreeBSD.org
diff --git a/textproc/py-charset-normalizer/Makefile b/textproc/py-charset-normalizer/Makefile
index f588d08bedc4..9f737e705d69 100644
--- a/textproc/py-charset-normalizer/Makefile
+++ b/textproc/py-charset-normalizer/Makefile
@@ -1,5 +1,5 @@
PORTNAME= charset-normalizer
-PORTVERSION= 3.4.2
+PORTVERSION= 3.4.3
CATEGORIES= textproc python
MASTER_SITES= PYPI \
https://github.com/jawah/charset_normalizer/releases/download/${PORTVERSION}/
diff --git a/textproc/py-charset-normalizer/distinfo b/textproc/py-charset-normalizer/distinfo
index 156ab3cfccea..50827d200a14 100644
--- a/textproc/py-charset-normalizer/distinfo
+++ b/textproc/py-charset-normalizer/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1747546584
-SHA256 (charset_normalizer-3.4.2.tar.gz) = 5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63
-SIZE (charset_normalizer-3.4.2.tar.gz) = 126367
+TIMESTAMP = 1755062578
+SHA256 (charset_normalizer-3.4.3.tar.gz) = 6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14
+SIZE (charset_normalizer-3.4.3.tar.gz) = 122371
diff --git a/textproc/py-charset-normalizer/files/patch-pyproject.toml b/textproc/py-charset-normalizer/files/patch-pyproject.toml
deleted file mode 100644
index 53436d36b469..000000000000
--- a/textproc/py-charset-normalizer/files/patch-pyproject.toml
+++ /dev/null
@@ -1,9 +0,0 @@
---- pyproject.toml.orig 2025-05-02 06:41:54 UTC
-+++ pyproject.toml
-@@ -1,5 +1,5 @@
- [build-system]
--requires = ["setuptools", "setuptools-scm", "mypy>=1.4.1,<=1.15.0"]
-+requires = ["setuptools", "setuptools-scm"]
- build-backend = "setuptools.build_meta"
-
- [project]
diff --git a/textproc/py-elastic-transport/Makefile b/textproc/py-elastic-transport/Makefile
new file mode 100644
index 000000000000..7e2340e807c9
--- /dev/null
+++ b/textproc/py-elastic-transport/Makefile
@@ -0,0 +1,26 @@
+PORTNAME= elastic-transport
+PORTVERSION= 8.17.1
+CATEGORIES= textproc python
+MASTER_SITES= PYPI
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+DISTNAME= elastic_transport-${PORTVERSION}
+
+MAINTAINER= sunpoet@FreeBSD.org
+COMMENT= Transport classes and utilities shared among Python Elastic client libraries
+WWW= https://elastic-transport-python.readthedocs.io/en/latest/ \
+ https://github.com/elastic/elastic-transport-python
+
+LICENSE= APACHE20
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}setuptools>=0:devel/py-setuptools@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}wheel>=0:devel/py-wheel@${PY_FLAVOR}
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}certifi>=0:security/py-certifi@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}urllib3>=1.26.2,1<3,1:net/py-urllib3@${PY_FLAVOR}
+
+USES= python
+USE_PYTHON= autoplist concurrent pep517
+
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/textproc/py-elastic-transport/distinfo b/textproc/py-elastic-transport/distinfo
new file mode 100644
index 000000000000..62d8b2c356d7
--- /dev/null
+++ b/textproc/py-elastic-transport/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1755062436
+SHA256 (elastic_transport-8.17.1.tar.gz) = 5edef32ac864dca8e2f0a613ef63491ee8d6b8cfb52881fa7313ba9290cac6d2
+SIZE (elastic_transport-8.17.1.tar.gz) = 73425
diff --git a/textproc/py-elastic-transport/pkg-descr b/textproc/py-elastic-transport/pkg-descr
new file mode 100644
index 000000000000..f1bfec4d7b81
--- /dev/null
+++ b/textproc/py-elastic-transport/pkg-descr
@@ -0,0 +1,4 @@
+Transport classes and utilities shared among Python Elastic client libraries
+
+This library was lifted from elasticsearch-py and then transformed to be used
+across all Elastic services rather than only Elasticsearch.
diff --git a/textproc/py-elasticsearch/Makefile b/textproc/py-elasticsearch/Makefile
index 7f256d4959a1..076496d45275 100644
--- a/textproc/py-elasticsearch/Makefile
+++ b/textproc/py-elasticsearch/Makefile
@@ -1,5 +1,5 @@
PORTNAME= elasticsearch
-PORTVERSION= 7.17.12
+PORTVERSION= 8.19.0
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
@@ -12,19 +12,18 @@ WWW= https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/in
LICENSE= APACHE20
LICENSE_FILE= ${WRKSRC}/LICENSE
-BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}setuptools>=0:devel/py-setuptools@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}wheel>=0:devel/py-wheel@${PY_FLAVOR}
-RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}certifi>=0:security/py-certifi@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}urllib3>=1.21.1,1<2,1:net/py-urllib3@${PY_FLAVOR}
+BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}hatchling>=0:devel/py-hatchling@${PY_FLAVOR}
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}elastic-transport>=8.15.1<9:textproc/py-elastic-transport@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}python-dateutil>=0:devel/py-python-dateutil@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}typing-extensions>=0:devel/py-typing-extensions@${PY_FLAVOR}
TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}coverage>=0:devel/py-coverage@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}mock>=0:devel/py-mock@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}pytest>=0,1:devel/py-pytest@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pytest-cov>=0:devel/py-pytest-cov@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pyyaml>=0:devel/py-pyyaml@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}requests>=2.0.0<3.0.0:www/py-requests@${PY_FLAVOR}
USES= cpe python
-USE_PYTHON= autoplist concurrent nose pep517
+USE_PYTHON= autoplist concurrent pep517 pytest
NO_ARCH= yes
diff --git a/textproc/py-elasticsearch/distinfo b/textproc/py-elasticsearch/distinfo
index cd404d6ee02c..e439725d3ac8 100644
--- a/textproc/py-elasticsearch/distinfo
+++ b/textproc/py-elasticsearch/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1753796098
-SHA256 (elasticsearch-7.17.12.tar.gz) = a1f5733ae8cf1dbf0a78593389f2503c87dd97429976099832bf0626cdfaac8b
-SIZE (elasticsearch-7.17.12.tar.gz) = 248018
+TIMESTAMP = 1755062580
+SHA256 (elasticsearch-8.19.0.tar.gz) = 66fe755e55127afc47c68eca6858006932d9d128b68834a15e7e9894517cfb67
+SIZE (elasticsearch-8.19.0.tar.gz) = 777512
diff --git a/textproc/py-elasticsearch7/Makefile b/textproc/py-elasticsearch7/Makefile
new file mode 100644
index 000000000000..8c3af7b11b90
--- /dev/null
+++ b/textproc/py-elasticsearch7/Makefile
@@ -0,0 +1,44 @@
+PORTNAME= elasticsearch
+PORTVERSION= 7.17.12
+CATEGORIES= textproc python
+MASTER_SITES= PYPI
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+PKGNAMESUFFIX= 7
+
+MAINTAINER= sunpoet@FreeBSD.org
+COMMENT= Official Python low-level client for Elasticsearch
+WWW= https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/index.html \
+ https://github.com/elastic/elasticsearch-py
+
+LICENSE= APACHE20
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}setuptools>=0:devel/py-setuptools@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}wheel>=0:devel/py-wheel@${PY_FLAVOR}
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}certifi>=0:security/py-certifi@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}urllib3>=1.21.1,1<2,1:net/py-urllib3@${PY_FLAVOR}
+TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}coverage>=0:devel/py-coverage@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}mock>=0:devel/py-mock@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}pytest>=0,1:devel/py-pytest@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}pytest-cov>=0:devel/py-pytest-cov@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}pyyaml>=0:devel/py-pyyaml@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}requests>=2.0.0<3.0.0:www/py-requests@${PY_FLAVOR}
+
+USES= cpe python
+USE_PYTHON= autoplist concurrent nose pep517
+
+NO_ARCH= yes
+
+CPE_VENDOR= elastic
+
+PORTSCOUT= limit:^7\.
+
+OPTIONS_DEFINE= ASYNC REQUESTS
+OPTIONS_DEFAULT=REQUESTS
+ASYNC_DESC= Asynchronous support
+REQUESTS_DESC= Enable requests support
+
+ASYNC_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}aiohttp>=3<4:www/py-aiohttp@${PY_FLAVOR}
+REQUESTS_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}requests>=2.4.0<3.0.0:www/py-requests@${PY_FLAVOR}
+
+.include <bsd.port.mk>
diff --git a/textproc/py-elasticsearch7/distinfo b/textproc/py-elasticsearch7/distinfo
new file mode 100644
index 000000000000..cd404d6ee02c
--- /dev/null
+++ b/textproc/py-elasticsearch7/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1753796098
+SHA256 (elasticsearch-7.17.12.tar.gz) = a1f5733ae8cf1dbf0a78593389f2503c87dd97429976099832bf0626cdfaac8b
+SIZE (elasticsearch-7.17.12.tar.gz) = 248018
diff --git a/textproc/py-elasticsearch7/pkg-descr b/textproc/py-elasticsearch7/pkg-descr
new file mode 100644
index 000000000000..1ff006ebff06
--- /dev/null
+++ b/textproc/py-elasticsearch7/pkg-descr
@@ -0,0 +1,15 @@
+Official low-level client for Elasticsearch. Its goal is to provide common
+ground for all Elasticsearch-related code in Python; because of this it tries to
+be opinion-free and very extendable.
+
+For a more high level client library with more limited scope, have a look at
+elasticsearch-dsl - a more pythonic library sitting on top of elasticsearch-py.
+
+It provides a more convenient and idiomatic way to write and manipulate queries.
+It stays close to the Elasticsearch JSON DSL, mirroring its terminology and
+structure while exposing the whole range of the DSL from Python either directly
+using defined classes or a queryset-like expressions.
+
+It also provides an optional persistence layer for working with documents as
+Python objects in an ORM-like fashion: defining mappings, retrieving and saving
+documents, wrapping the document data in user-defined classes.
diff --git a/textproc/py-grimoire-elk/Makefile b/textproc/py-grimoire-elk/Makefile
index cca7630aa6e7..52e4fc4a0aac 100644
--- a/textproc/py-grimoire-elk/Makefile
+++ b/textproc/py-grimoire-elk/Makefile
@@ -1,5 +1,6 @@
PORTNAME= grimoire-elk
DISTVERSION= 1.3.4
+PORTREVISION= 1
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-jiter/Makefile b/textproc/py-jiter/Makefile
index fba028dc03b8..f4fe3b30a825 100644
--- a/textproc/py-jiter/Makefile
+++ b/textproc/py-jiter/Makefile
@@ -1,6 +1,6 @@
PORTNAME= jiter
DISTVERSION= 0.10.0
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-json-repair/Makefile b/textproc/py-json-repair/Makefile
new file mode 100644
index 000000000000..5d61179ad4de
--- /dev/null
+++ b/textproc/py-json-repair/Makefile
@@ -0,0 +1,25 @@
+PORTNAME= json-repair
+DISTVERSION= 0.50.0
+CATEGORIES= textproc python
+MASTER_SITES= PYPI
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+DISTNAME= ${PORTNAME:S/-/_/}-${PORTVERSION}
+
+MAINTAINER= yuri@FreeBSD.org
+COMMENT= Package to repair broken json strings
+WWW= https://github.com/mangiucugna/json_repair/
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BUILD_DEPENDS= ${PY_SETUPTOOLS} \
+ ${PYTHON_PKGNAMEPREFIX}wheel>=0.44.0:devel/py-wheel@${PY_FLAVOR}
+
+USES= python
+USE_PYTHON= pep517 autoplist pytest
+
+NO_ARCH= yes
+
+# tests as of 0.50.0: 3 failed, 94 passed, 4 errors in 7.12s, see https://github.com/mangiucugna/json_repair/issues/147
+
+.include <bsd.port.mk>
diff --git a/textproc/py-json-repair/distinfo b/textproc/py-json-repair/distinfo
new file mode 100644
index 000000000000..7349e6e3c8d5
--- /dev/null
+++ b/textproc/py-json-repair/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1756617943
+SHA256 (json_repair-0.50.0.tar.gz) = 1d42a3f353e389cf6051941b45fa44b6d130af3c91406a749e88586d830adb89
+SIZE (json_repair-0.50.0.tar.gz) = 34815
diff --git a/textproc/py-json-repair/files/patch-pyproject.toml b/textproc/py-json-repair/files/patch-pyproject.toml
new file mode 100644
index 000000000000..fc5dd52bcba2
--- /dev/null
+++ b/textproc/py-json-repair/files/patch-pyproject.toml
@@ -0,0 +1,18 @@
+--- pyproject.toml.orig 2025-08-31 06:16:42 UTC
++++ pyproject.toml
+@@ -4,8 +4,6 @@ version = "0.50.0"
+ [project]
+ name = "json_repair"
+ version = "0.50.0"
+-license = "MIT"
+-license-files = ["LICENSE"]
+ authors = [
+ { name="Stefano Baccianella", email="4247706+mangiucugna@users.noreply.github.com" },
+ ]
+@@ -111,4 +109,4 @@ line-ending = "auto"
+
+ [tool.ruff.lint.per-file-ignores]
+ # Explicit re-exports is fine in __init__.py, still a code smell elsewhere.
+-"__init__.py" = ["PLC0414"]
+\ No newline at end of file
++"__init__.py" = ["PLC0414"]
diff --git a/textproc/py-json-repair/pkg-descr b/textproc/py-json-repair/pkg-descr
new file mode 100644
index 000000000000..969888f55d45
--- /dev/null
+++ b/textproc/py-json-repair/pkg-descr
@@ -0,0 +1 @@
+json-repair is a simple package that can be used to fix an invalid json string.
diff --git a/textproc/py-mkdocs-include-markdown-plugin/Makefile b/textproc/py-mkdocs-include-markdown-plugin/Makefile
index a55ff4800c34..ca344e5edc98 100644
--- a/textproc/py-mkdocs-include-markdown-plugin/Makefile
+++ b/textproc/py-mkdocs-include-markdown-plugin/Makefile
@@ -1,5 +1,5 @@
PORTNAME= mkdocs-include-markdown-plugin
-DISTVERSION= 7.1.6
+DISTVERSION= 7.1.7
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-mkdocs-include-markdown-plugin/distinfo b/textproc/py-mkdocs-include-markdown-plugin/distinfo
index b071448d487b..499415975b84 100644
--- a/textproc/py-mkdocs-include-markdown-plugin/distinfo
+++ b/textproc/py-mkdocs-include-markdown-plugin/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1749914985
-SHA256 (mkdocs_include_markdown_plugin-7.1.6.tar.gz) = a0753cb82704c10a287f1e789fc9848f82b6beb8749814b24b03dd9f67816677
-SIZE (mkdocs_include_markdown_plugin-7.1.6.tar.gz) = 23391
+TIMESTAMP = 1756792428
+SHA256 (mkdocs_include_markdown_plugin-7.1.7.tar.gz) = 677637e04c2d3497c50340be522e2a7f614124f592c7982d88b859f88d527a4c
+SIZE (mkdocs_include_markdown_plugin-7.1.7.tar.gz) = 23451
diff --git a/textproc/py-ocrmypdf/Makefile b/textproc/py-ocrmypdf/Makefile
index faba4fd54e22..dee7b7751944 100644
--- a/textproc/py-ocrmypdf/Makefile
+++ b/textproc/py-ocrmypdf/Makefile
@@ -1,5 +1,6 @@
PORTNAME= ocrmypdf
DISTVERSION= 16.10.4
+PORTREVISION= 1
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-pdfminer.six/Makefile b/textproc/py-pdfminer.six/Makefile
index 89a52d8bed1a..1e0934f7d07c 100644
--- a/textproc/py-pdfminer.six/Makefile
+++ b/textproc/py-pdfminer.six/Makefile
@@ -1,5 +1,6 @@
PORTNAME= pdfminer.six
DISTVERSION= 20250506
+PORTREVISION= 1
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-pikepdf/Makefile b/textproc/py-pikepdf/Makefile
index 560df16a06fc..4ee349f7d1e8 100644
--- a/textproc/py-pikepdf/Makefile
+++ b/textproc/py-pikepdf/Makefile
@@ -1,6 +1,6 @@
PORTNAME= pikepdf
DISTVERSION= 9.9.0
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-pycddl/Makefile b/textproc/py-pycddl/Makefile
index f19cdcc433b4..4114110a3f05 100644
--- a/textproc/py-pycddl/Makefile
+++ b/textproc/py-pycddl/Makefile
@@ -1,7 +1,7 @@
PORTNAME= pycddl
DISTVERSIONPREFIX= v
DISTVERSION= 0.6.3
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= textproc python
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-python-frontmatter/Makefile b/textproc/py-python-frontmatter/Makefile
new file mode 100644
index 000000000000..32740622b34f
--- /dev/null
+++ b/textproc/py-python-frontmatter/Makefile
@@ -0,0 +1,28 @@
+PORTNAME= python-frontmatter
+DISTVERSION= 1.1.0
+CATEGORIES= textproc python
+MASTER_SITES= PYPI
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= yuri@FreeBSD.org
+COMMENT= Parse and manage posts with YAML (or other) frontmatter
+WWW= https://python-frontmatter.readthedocs.io/en/latest/ \
+ https://github.com/eyeseast/python-frontmatter
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pyyaml>0:devel/py-pyyaml@${PY_FLAVOR}
+TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}mypy>0:devel/py-mypy@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}toml>0:textproc/py-toml@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}types-toml>0:devel/py-types-toml@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}types-pyyaml>0:devel/py-types-pyyaml@${PY_FLAVOR}
+
+USES= python
+USE_PYTHON= distutils autoplist pytest
+
+NO_ARCH= yes
+
+# tests as of 1.1.0: 56 passed in 1.97s
+
+.include <bsd.port.mk>
diff --git a/textproc/py-python-frontmatter/distinfo b/textproc/py-python-frontmatter/distinfo
new file mode 100644
index 000000000000..5aa2436ee7e1
--- /dev/null
+++ b/textproc/py-python-frontmatter/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1756689260
+SHA256 (python-frontmatter-1.1.0.tar.gz) = 7118d2bd56af9149625745c58c9b51fb67e8d1294a0c76796dafdc72c36e5f6d
+SIZE (python-frontmatter-1.1.0.tar.gz) = 16256
diff --git a/textproc/py-python-frontmatter/pkg-descr b/textproc/py-python-frontmatter/pkg-descr
new file mode 100644
index 000000000000..84e8bc048c4c
--- /dev/null
+++ b/textproc/py-python-frontmatter/pkg-descr
@@ -0,0 +1,2 @@
+python-frontmatter is a Jekyll-style YAML front matter offers a useful way
+to add arbitrary, structured metadata to text documents, regardless of type.
diff --git a/textproc/py-python-pptx/Makefile b/textproc/py-python-pptx/Makefile
index 840004805027..3ca6233c21f1 100644
--- a/textproc/py-python-pptx/Makefile
+++ b/textproc/py-python-pptx/Makefile
@@ -1,6 +1,6 @@
PORTNAME= python-pptx
DISTVERSION= 1.0.2
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-qrcode/Makefile b/textproc/py-qrcode/Makefile
index f23efec48fd6..f36a4e7b8eac 100644
--- a/textproc/py-qrcode/Makefile
+++ b/textproc/py-qrcode/Makefile
@@ -1,5 +1,6 @@
PORTNAME= qrcode
PORTVERSION= 8.2
+PORTREVISION= 1
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-sphinx-gallery/Makefile b/textproc/py-sphinx-gallery/Makefile
index 23da49c0a24a..f1b1a8c87cb9 100644
--- a/textproc/py-sphinx-gallery/Makefile
+++ b/textproc/py-sphinx-gallery/Makefile
@@ -1,5 +1,6 @@
PORTNAME= sphinx-gallery
PORTVERSION= 0.19.0
+PORTREVISION= 1
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-sphinxcontrib-actdiag/Makefile b/textproc/py-sphinxcontrib-actdiag/Makefile
index 48e02c9f23b4..fab6e52e6e5b 100644
--- a/textproc/py-sphinxcontrib-actdiag/Makefile
+++ b/textproc/py-sphinxcontrib-actdiag/Makefile
@@ -1,6 +1,6 @@
PORTNAME= sphinxcontrib-actdiag
PORTVERSION= 3.0.0
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= textproc
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-sphinxcontrib-blockdiag/Makefile b/textproc/py-sphinxcontrib-blockdiag/Makefile
index e4763bf44293..3465a8488680 100644
--- a/textproc/py-sphinxcontrib-blockdiag/Makefile
+++ b/textproc/py-sphinxcontrib-blockdiag/Makefile
@@ -1,6 +1,6 @@
PORTNAME= sphinxcontrib-blockdiag
PORTVERSION= 3.0.0
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= textproc
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-sphinxcontrib-nwdiag/Makefile b/textproc/py-sphinxcontrib-nwdiag/Makefile
index 6ef6fe808d4d..42ddd89648fc 100644
--- a/textproc/py-sphinxcontrib-nwdiag/Makefile
+++ b/textproc/py-sphinxcontrib-nwdiag/Makefile
@@ -1,6 +1,6 @@
PORTNAME= sphinxcontrib-nwdiag
PORTVERSION= 2.0.0
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= textproc
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-sphinxcontrib-seqdiag/Makefile b/textproc/py-sphinxcontrib-seqdiag/Makefile
index 862b546fabb5..2fd70083db5f 100644
--- a/textproc/py-sphinxcontrib-seqdiag/Makefile
+++ b/textproc/py-sphinxcontrib-seqdiag/Makefile
@@ -1,6 +1,6 @@
PORTNAME= sphinxcontrib-seqdiag
PORTVERSION= 3.0.0
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= textproc
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
@@ -12,11 +12,14 @@ WWW= https://github.com/blockdiag/${PORTNAME}
LICENSE= BSD2CLAUSE
LICENSE_FILE= ${WRKSRC}/LICENSE
-RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}seqdiag>=0.9.3:graphics/py-seqdiag@${PY_FLAVOR} \
+BUILD_DEPENDS= ${PY_SETUPTOOLS} \
+ ${PYTHON_PKGNAMEPREFIX}wheel>=0:devel/py-wheel@${PY_FLAVOR}
+RUN_DEPENDS= ${PY_SETUPTOOLS} \
+ ${PYTHON_PKGNAMEPREFIX}seqdiag>=0.9.3:graphics/py-seqdiag@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}sphinx>=2.0:textproc/py-sphinx@${PY_FLAVOR}
USES= python
-USE_PYTHON= autoplist distutils
+USE_PYTHON= autoplist pep517
NO_ARCH= yes
diff --git a/textproc/py-sphinxcontrib-svg2pdfconverter/Makefile b/textproc/py-sphinxcontrib-svg2pdfconverter/Makefile
index e42816d6b6c9..88857f0810dc 100644
--- a/textproc/py-sphinxcontrib-svg2pdfconverter/Makefile
+++ b/textproc/py-sphinxcontrib-svg2pdfconverter/Makefile
@@ -1,5 +1,6 @@
PORTNAME= sphinxcontrib-svg2pdfconverter
PORTVERSION= 1.3.0
+PORTREVISION= 1
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-tiktoken/Makefile b/textproc/py-tiktoken/Makefile
index 3c3afbb59c60..f0e384638d32 100644
--- a/textproc/py-tiktoken/Makefile
+++ b/textproc/py-tiktoken/Makefile
@@ -1,6 +1,6 @@
PORTNAME= tiktoken
PORTVERSION= 0.9.0
-PORTREVISION= 4
+PORTREVISION= 5
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-tokenizers/Makefile b/textproc/py-tokenizers/Makefile
index 12ae6127235a..4227ba8a3d11 100644
--- a/textproc/py-tokenizers/Makefile
+++ b/textproc/py-tokenizers/Makefile
@@ -1,5 +1,6 @@
PORTNAME= tokenizers
-DISTVERSION= 0.21.4
+DISTVERSION= 0.22.0
+PORTREVISION= 1
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
@@ -21,7 +22,7 @@ TEST_DEPENDS= ${LOCALBASE}/libdata/pkgconfig/oniguruma.pc:devel/oniguruma \
USES= cargo python
USE_PYTHON= autoplist pep517 pytest
-PYTEST_BROKEN_TESTS= test_datasets test_gzip
+PYTEST_BROKEN_TESTS= test_gzip
CARGO_CARGOTOML=${WRKSRC}/bindings/python/Cargo.toml
CARGO_CARGOLOCK=${WRKSRC}/bindings/python/Cargo.lock
diff --git a/textproc/py-tokenizers/Makefile.crates b/textproc/py-tokenizers/Makefile.crates
index 2b55624b4b13..f1c05a287689 100644
--- a/textproc/py-tokenizers/Makefile.crates
+++ b/textproc/py-tokenizers/Makefile.crates
@@ -1,17 +1,20 @@
-CARGO_CRATES= ahash-0.8.12 \
+CARGO_CRATES= addr2line-0.24.2 \
+ adler2-2.0.1 \
+ ahash-0.8.12 \
aho-corasick-1.1.3 \
- anstream-0.6.19 \
+ anstream-0.6.20 \
anstyle-1.0.11 \
anstyle-parse-0.2.7 \
- anstyle-query-1.1.3 \
- anstyle-wincon-3.0.9 \
- autocfg-1.4.0 \
+ anstyle-query-1.1.4 \
+ anstyle-wincon-3.0.10 \
+ autocfg-1.5.0 \
+ backtrace-0.3.75 \
base64-0.13.1 \
- bitflags-2.9.1 \
- bumpalo-3.18.1 \
- castaway-0.2.3 \
- cc-1.2.27 \
- cfg-if-1.0.1 \
+ bitflags-2.9.3 \
+ bumpalo-3.19.0 \
+ castaway-0.2.4 \
+ cc-1.2.34 \
+ cfg-if-1.0.3 \
colorchoice-1.0.4 \
compact_str-0.9.0 \
console-0.15.11 \
@@ -29,22 +32,33 @@ CARGO_CRATES= ahash-0.8.12 \
encode_unicode-1.0.0 \
env_filter-0.1.3 \
env_logger-0.11.8 \
- errno-0.3.12 \
+ errno-0.3.13 \
esaxx-rs-0.1.10 \
fastrand-2.3.0 \
fnv-1.0.7 \
+ futures-0.3.31 \
+ futures-channel-0.3.31 \
+ futures-core-0.3.31 \
+ futures-executor-0.3.31 \
+ futures-io-0.3.31 \
+ futures-macro-0.3.31 \
+ futures-sink-0.3.31 \
+ futures-task-0.3.31 \
+ futures-util-0.3.31 \
getrandom-0.3.3 \
+ gimli-0.31.1 \
heck-0.5.0 \
ident_case-1.0.1 \
indicatif-0.17.11 \
indoc-2.0.6 \
+ io-uring-0.7.10 \
is_terminal_polyfill-1.70.1 \
itertools-0.14.0 \
itoa-1.0.15 \
jiff-0.2.15 \
jiff-static-0.2.15 \
js-sys-0.3.77 \
- libc-0.2.173 \
+ libc-0.2.175 \
linux-raw-sys-0.9.4 \
log-0.4.27 \
macro_rules_attribute-0.2.2 \
@@ -53,6 +67,8 @@ CARGO_CRATES= ahash-0.8.12 \
memchr-2.7.5 \
memoffset-0.9.1 \
minimal-lexical-0.2.1 \
+ miniz_oxide-0.8.9 \
+ mio-1.0.4 \
monostate-0.1.14 \
monostate-impl-0.1.14 \
ndarray-0.16.1 \
@@ -62,50 +78,59 @@ CARGO_CRATES= ahash-0.8.12 \
num-traits-0.2.19 \
number_prefix-0.4.0 \
numpy-0.25.0 \
+ object-0.36.7 \
once_cell-1.21.3 \
once_cell_polyfill-1.70.1 \
onig-6.5.1 \
onig_sys-69.9.1 \
paste-1.0.15 \
+ pin-project-lite-0.2.16 \
+ pin-utils-0.1.0 \
pkg-config-0.3.32 \
portable-atomic-1.11.1 \
portable-atomic-util-0.2.4 \
ppv-lite86-0.2.21 \
- proc-macro2-1.0.95 \
+ proc-macro2-1.0.101 \
pyo3-0.25.1 \
+ pyo3-async-runtimes-0.25.0 \
pyo3-build-config-0.25.1 \
pyo3-ffi-0.25.1 \
pyo3-macros-0.25.1 \
pyo3-macros-backend-0.25.1 \
quote-1.0.40 \
r-efi-5.3.0 \
- rand-0.9.1 \
+ rand-0.9.2 \
rand_chacha-0.9.0 \
rand_core-0.9.3 \
rawpointer-0.2.1 \
- rayon-1.10.0 \
+ rayon-1.11.0 \
rayon-cond-0.4.0 \
- rayon-core-1.12.1 \
- regex-1.11.1 \
- regex-automata-0.4.9 \
- regex-syntax-0.8.5 \
+ rayon-core-1.13.0 \
+ regex-1.11.2 \
+ regex-automata-0.4.10 \
+ regex-syntax-0.8.6 \
+ rustc-demangle-0.1.26 \
rustc-hash-2.1.1 \
- rustix-1.0.7 \
- rustversion-1.0.21 \
+ rustix-1.0.8 \
+ rustversion-1.0.22 \
ryu-1.0.20 \
serde-1.0.219 \
serde_derive-1.0.219 \
- serde_json-1.0.140 \
+ serde_json-1.0.143 \
shlex-1.3.0 \
+ signal-hook-registry-1.4.6 \
+ slab-0.4.11 \
smallvec-1.15.1 \
spm_precompiled-0.1.4 \
static_assertions-1.1.0 \
strsim-0.11.1 \
- syn-2.0.103 \
+ syn-2.0.106 \
target-lexicon-0.13.2 \
- tempfile-3.20.0 \
- thiserror-2.0.12 \
- thiserror-impl-2.0.12 \
+ tempfile-3.21.0 \
+ thiserror-2.0.16 \
+ thiserror-impl-2.0.16 \
+ tokio-1.47.1 \
+ tokio-macros-2.5.0 \
unicode-ident-1.0.18 \
unicode-normalization-alignments-0.1.12 \
unicode-segmentation-1.12.0 \
@@ -114,23 +139,35 @@ CARGO_CRATES= ahash-0.8.12 \
unindent-0.2.4 \
utf8parse-0.2.2 \
version_check-0.9.5 \
- wasi-0.14.2+wasi-0.2.4 \
+ wasi-0.11.1+wasi-snapshot-preview1 \
+ wasi-0.14.3+wasi-0.2.4 \
wasm-bindgen-0.2.100 \
wasm-bindgen-backend-0.2.100 \
wasm-bindgen-macro-0.2.100 \
wasm-bindgen-macro-support-0.2.100 \
wasm-bindgen-shared-0.2.100 \
web-time-1.1.0 \
+ windows-link-0.1.3 \
windows-sys-0.59.0 \
+ windows-sys-0.60.2 \
windows-targets-0.52.6 \
+ windows-targets-0.53.3 \
windows_aarch64_gnullvm-0.52.6 \
+ windows_aarch64_gnullvm-0.53.0 \
windows_aarch64_msvc-0.52.6 \
+ windows_aarch64_msvc-0.53.0 \
windows_i686_gnu-0.52.6 \
+ windows_i686_gnu-0.53.0 \
windows_i686_gnullvm-0.52.6 \
+ windows_i686_gnullvm-0.53.0 \
windows_i686_msvc-0.52.6 \
+ windows_i686_msvc-0.53.0 \
windows_x86_64_gnu-0.52.6 \
+ windows_x86_64_gnu-0.53.0 \
windows_x86_64_gnullvm-0.52.6 \
+ windows_x86_64_gnullvm-0.53.0 \
windows_x86_64_msvc-0.52.6 \
- wit-bindgen-rt-0.39.0 \
- zerocopy-0.8.25 \
- zerocopy-derive-0.8.25
+ windows_x86_64_msvc-0.53.0 \
+ wit-bindgen-0.45.0 \
+ zerocopy-0.8.26 \
+ zerocopy-derive-0.8.26
diff --git a/textproc/py-tokenizers/distinfo b/textproc/py-tokenizers/distinfo
index 992cdc7eac24..8fe7c03e2d2c 100644
--- a/textproc/py-tokenizers/distinfo
+++ b/textproc/py-tokenizers/distinfo
@@ -1,34 +1,40 @@
-TIMESTAMP = 1754375508
-SHA256 (tokenizers-0.21.4.tar.gz) = fa23f85fbc9a02ec5c6978da172cdcbac23498c3ca9f3645c5c68740ac007880
-SIZE (tokenizers-0.21.4.tar.gz) = 351253
+TIMESTAMP = 1756545522
+SHA256 (tokenizers-0.22.0.tar.gz) = 2e33b98525be8453f355927f3cab312c36cd3e44f4d7e9e97da2fa94d0a49dcb
+SIZE (tokenizers-0.22.0.tar.gz) = 362771
+SHA256 (rust/crates/addr2line-0.24.2.crate) = dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1
+SIZE (rust/crates/addr2line-0.24.2.crate) = 39015
+SHA256 (rust/crates/adler2-2.0.1.crate) = 320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa
+SIZE (rust/crates/adler2-2.0.1.crate) = 13366
SHA256 (rust/crates/ahash-0.8.12.crate) = 5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75
SIZE (rust/crates/ahash-0.8.12.crate) = 43413
SHA256 (rust/crates/aho-corasick-1.1.3.crate) = 8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916
SIZE (rust/crates/aho-corasick-1.1.3.crate) = 183311
-SHA256 (rust/crates/anstream-0.6.19.crate) = 301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933
-SIZE (rust/crates/anstream-0.6.19.crate) = 28767
+SHA256 (rust/crates/anstream-0.6.20.crate) = 3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192
+SIZE (rust/crates/anstream-0.6.20.crate) = 28797
SHA256 (rust/crates/anstyle-1.0.11.crate) = 862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd
SIZE (rust/crates/anstyle-1.0.11.crate) = 15880
SHA256 (rust/crates/anstyle-parse-0.2.7.crate) = 4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2
SIZE (rust/crates/anstyle-parse-0.2.7.crate) = 21707
-SHA256 (rust/crates/anstyle-query-1.1.3.crate) = 6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9
-SIZE (rust/crates/anstyle-query-1.1.3.crate) = 10190
-SHA256 (rust/crates/anstyle-wincon-3.0.9.crate) = 403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882
-SIZE (rust/crates/anstyle-wincon-3.0.9.crate) = 12561
-SHA256 (rust/crates/autocfg-1.4.0.crate) = ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26
-SIZE (rust/crates/autocfg-1.4.0.crate) = 17712
+SHA256 (rust/crates/anstyle-query-1.1.4.crate) = 9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2
+SIZE (rust/crates/anstyle-query-1.1.4.crate) = 10192
+SHA256 (rust/crates/anstyle-wincon-3.0.10.crate) = 3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a
+SIZE (rust/crates/anstyle-wincon-3.0.10.crate) = 12558
+SHA256 (rust/crates/autocfg-1.5.0.crate) = c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8
+SIZE (rust/crates/autocfg-1.5.0.crate) = 18729
+SHA256 (rust/crates/backtrace-0.3.75.crate) = 6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002
+SIZE (rust/crates/backtrace-0.3.75.crate) = 92665
SHA256 (rust/crates/base64-0.13.1.crate) = 9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8
SIZE (rust/crates/base64-0.13.1.crate) = 61002
-SHA256 (rust/crates/bitflags-2.9.1.crate) = 1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967
-SIZE (rust/crates/bitflags-2.9.1.crate) = 47913
-SHA256 (rust/crates/bumpalo-3.18.1.crate) = 793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee
-SIZE (rust/crates/bumpalo-3.18.1.crate) = 96348
-SHA256 (rust/crates/castaway-0.2.3.crate) = 0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5
-SIZE (rust/crates/castaway-0.2.3.crate) = 11509
-SHA256 (rust/crates/cc-1.2.27.crate) = d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc
-SIZE (rust/crates/cc-1.2.27.crate) = 107070
-SHA256 (rust/crates/cfg-if-1.0.1.crate) = 9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268
-SIZE (rust/crates/cfg-if-1.0.1.crate) = 8683
+SHA256 (rust/crates/bitflags-2.9.3.crate) = 34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d
+SIZE (rust/crates/bitflags-2.9.3.crate) = 47777
+SHA256 (rust/crates/bumpalo-3.19.0.crate) = 46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43
+SIZE (rust/crates/bumpalo-3.19.0.crate) = 96414
+SHA256 (rust/crates/castaway-0.2.4.crate) = dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a
+SIZE (rust/crates/castaway-0.2.4.crate) = 12546
+SHA256 (rust/crates/cc-1.2.34.crate) = 42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc
+SIZE (rust/crates/cc-1.2.34.crate) = 111754
+SHA256 (rust/crates/cfg-if-1.0.3.crate) = 2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9
+SIZE (rust/crates/cfg-if-1.0.3.crate) = 8719
SHA256 (rust/crates/colorchoice-1.0.4.crate) = b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75
SIZE (rust/crates/colorchoice-1.0.4.crate) = 8196
SHA256 (rust/crates/compact_str-0.9.0.crate) = 3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a
@@ -63,16 +69,36 @@ SHA256 (rust/crates/env_filter-0.1.3.crate) = 186e05a59d4c50738528153b83b0b0194d
SIZE (rust/crates/env_filter-0.1.3.crate) = 15191
SHA256 (rust/crates/env_logger-0.11.8.crate) = 13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f
SIZE (rust/crates/env_logger-0.11.8.crate) = 32538
-SHA256 (rust/crates/errno-0.3.12.crate) = cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18
-SIZE (rust/crates/errno-0.3.12.crate) = 12423
+SHA256 (rust/crates/errno-0.3.13.crate) = 778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad
+SIZE (rust/crates/errno-0.3.13.crate) = 12449
SHA256 (rust/crates/esaxx-rs-0.1.10.crate) = d817e038c30374a4bcb22f94d0a8a0e216958d4c3dcde369b1439fec4bdda6e6
SIZE (rust/crates/esaxx-rs-0.1.10.crate) = 175210
SHA256 (rust/crates/fastrand-2.3.0.crate) = 37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be
SIZE (rust/crates/fastrand-2.3.0.crate) = 15076
SHA256 (rust/crates/fnv-1.0.7.crate) = 3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1
SIZE (rust/crates/fnv-1.0.7.crate) = 11266
+SHA256 (rust/crates/futures-0.3.31.crate) = 65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876
+SIZE (rust/crates/futures-0.3.31.crate) = 54953
+SHA256 (rust/crates/futures-channel-0.3.31.crate) = 2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10
+SIZE (rust/crates/futures-channel-0.3.31.crate) = 31971
+SHA256 (rust/crates/futures-core-0.3.31.crate) = 05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e
+SIZE (rust/crates/futures-core-0.3.31.crate) = 14318
+SHA256 (rust/crates/futures-executor-0.3.31.crate) = 1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f
+SIZE (rust/crates/futures-executor-0.3.31.crate) = 17965
+SHA256 (rust/crates/futures-io-0.3.31.crate) = 9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6
+SIZE (rust/crates/futures-io-0.3.31.crate) = 9047
+SHA256 (rust/crates/futures-macro-0.3.31.crate) = 162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650
+SIZE (rust/crates/futures-macro-0.3.31.crate) = 11341
+SHA256 (rust/crates/futures-sink-0.3.31.crate) = e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7
+SIZE (rust/crates/futures-sink-0.3.31.crate) = 7958
+SHA256 (rust/crates/futures-task-0.3.31.crate) = f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988
+SIZE (rust/crates/futures-task-0.3.31.crate) = 11217
+SHA256 (rust/crates/futures-util-0.3.31.crate) = 9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81
+SIZE (rust/crates/futures-util-0.3.31.crate) = 162124
SHA256 (rust/crates/getrandom-0.3.3.crate) = 26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4
SIZE (rust/crates/getrandom-0.3.3.crate) = 49493
+SHA256 (rust/crates/gimli-0.31.1.crate) = 07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f
+SIZE (rust/crates/gimli-0.31.1.crate) = 279515
SHA256 (rust/crates/heck-0.5.0.crate) = 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea
SIZE (rust/crates/heck-0.5.0.crate) = 11517
SHA256 (rust/crates/ident_case-1.0.1.crate) = b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39
@@ -81,6 +107,8 @@ SHA256 (rust/crates/indicatif-0.17.11.crate) = 183b3088984b400f4cfac3620d5e076c8
SIZE (rust/crates/indicatif-0.17.11.crate) = 66577
SHA256 (rust/crates/indoc-2.0.6.crate) = f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd
SIZE (rust/crates/indoc-2.0.6.crate) = 17164
+SHA256 (rust/crates/io-uring-0.7.10.crate) = 046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b
+SIZE (rust/crates/io-uring-0.7.10.crate) = 103070
SHA256 (rust/crates/is_terminal_polyfill-1.70.1.crate) = 7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf
SIZE (rust/crates/is_terminal_polyfill-1.70.1.crate) = 7492
SHA256 (rust/crates/itertools-0.14.0.crate) = 2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285
@@ -93,8 +121,8 @@ SHA256 (rust/crates/jiff-static-0.2.15.crate) = 03343451ff899767262ec32146f6d559
SIZE (rust/crates/jiff-static-0.2.15.crate) = 76146
SHA256 (rust/crates/js-sys-0.3.77.crate) = 1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f
SIZE (rust/crates/js-sys-0.3.77.crate) = 55538
-SHA256 (rust/crates/libc-0.2.173.crate) = d8cfeafaffdbc32176b64fb251369d52ea9f0a8fbc6f8759edffef7b525d64bb
-SIZE (rust/crates/libc-0.2.173.crate) = 777353
+SHA256 (rust/crates/libc-0.2.175.crate) = 6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543
+SIZE (rust/crates/libc-0.2.175.crate) = 788728
SHA256 (rust/crates/linux-raw-sys-0.9.4.crate) = cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12
SIZE (rust/crates/linux-raw-sys-0.9.4.crate) = 2311088
SHA256 (rust/crates/log-0.4.27.crate) = 13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94
@@ -111,6 +139,10 @@ SHA256 (rust/crates/memoffset-0.9.1.crate) = 488016bfae457b036d996092f6cb4486776
SIZE (rust/crates/memoffset-0.9.1.crate) = 9032
SHA256 (rust/crates/minimal-lexical-0.2.1.crate) = 68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a
SIZE (rust/crates/minimal-lexical-0.2.1.crate) = 94841
+SHA256 (rust/crates/miniz_oxide-0.8.9.crate) = 1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316
+SIZE (rust/crates/miniz_oxide-0.8.9.crate) = 67132
+SHA256 (rust/crates/mio-1.0.4.crate) = 78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c
+SIZE (rust/crates/mio-1.0.4.crate) = 104212
SHA256 (rust/crates/monostate-0.1.14.crate) = aafe1be9d0c75642e3e50fedc7ecadf1ef1cbce6eb66462153fc44245343fbee
SIZE (rust/crates/monostate-0.1.14.crate) = 15081
SHA256 (rust/crates/monostate-impl-0.1.14.crate) = c402a4092d5e204f32c9e155431046831fa712637043c58cb73bc6bc6c9663b5
@@ -129,6 +161,8 @@ SHA256 (rust/crates/number_prefix-0.4.0.crate) = 830b246a0e5f20af87141b25c173cd1
SIZE (rust/crates/number_prefix-0.4.0.crate) = 6922
SHA256 (rust/crates/numpy-0.25.0.crate) = 29f1dee9aa8d3f6f8e8b9af3803006101bb3653866ef056d530d53ae68587191
SIZE (rust/crates/numpy-0.25.0.crate) = 81623
+SHA256 (rust/crates/object-0.36.7.crate) = 62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87
+SIZE (rust/crates/object-0.36.7.crate) = 329938
SHA256 (rust/crates/once_cell-1.21.3.crate) = 42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d
SIZE (rust/crates/once_cell-1.21.3.crate) = 34534
SHA256 (rust/crates/once_cell_polyfill-1.70.1.crate) = a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad
@@ -139,6 +173,10 @@ SHA256 (rust/crates/onig_sys-69.9.1.crate) = c7f86c6eef3d6df15f23bcfb6af487cbd2f
SIZE (rust/crates/onig_sys-69.9.1.crate) = 656378
SHA256 (rust/crates/paste-1.0.15.crate) = 57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a
SIZE (rust/crates/paste-1.0.15.crate) = 18374
+SHA256 (rust/crates/pin-project-lite-0.2.16.crate) = 3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b
+SIZE (rust/crates/pin-project-lite-0.2.16.crate) = 30504
+SHA256 (rust/crates/pin-utils-0.1.0.crate) = 8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184
+SIZE (rust/crates/pin-utils-0.1.0.crate) = 7580
SHA256 (rust/crates/pkg-config-0.3.32.crate) = 7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c
SIZE (rust/crates/pkg-config-0.3.32.crate) = 21370
SHA256 (rust/crates/portable-atomic-1.11.1.crate) = f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483
@@ -147,10 +185,12 @@ SHA256 (rust/crates/portable-atomic-util-0.2.4.crate) = d8a2f0d8d040d7848a709caf
SIZE (rust/crates/portable-atomic-util-0.2.4.crate) = 47043
SHA256 (rust/crates/ppv-lite86-0.2.21.crate) = 85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9
SIZE (rust/crates/ppv-lite86-0.2.21.crate) = 22522
-SHA256 (rust/crates/proc-macro2-1.0.95.crate) = 02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778
-SIZE (rust/crates/proc-macro2-1.0.95.crate) = 51820
+SHA256 (rust/crates/proc-macro2-1.0.101.crate) = 89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de
+SIZE (rust/crates/proc-macro2-1.0.101.crate) = 53886
SHA256 (rust/crates/pyo3-0.25.1.crate) = 8970a78afe0628a3e3430376fc5fd76b6b45c4d43360ffd6cdd40bdde72b682a
SIZE (rust/crates/pyo3-0.25.1.crate) = 1121993
+SHA256 (rust/crates/pyo3-async-runtimes-0.25.0.crate) = d73cc6b1b7d8b3cef02101d37390dbdfe7e450dfea14921cae80a9534ba59ef2
+SIZE (rust/crates/pyo3-async-runtimes-0.25.0.crate) = 51342
SHA256 (rust/crates/pyo3-build-config-0.25.1.crate) = 458eb0c55e7ece017adeba38f2248ff3ac615e53660d7c71a238d7d2a01c7598
SIZE (rust/crates/pyo3-build-config-0.25.1.crate) = 34126
SHA256 (rust/crates/pyo3-ffi-0.25.1.crate) = 7114fe5457c61b276ab77c5055f206295b812608083644a5c5b2640c3102565c
@@ -163,42 +203,48 @@ SHA256 (rust/crates/quote-1.0.40.crate) = 1885c039570dc00dcb4ff087a89e185fd56bae
SIZE (rust/crates/quote-1.0.40.crate) = 31063
SHA256 (rust/crates/r-efi-5.3.0.crate) = 69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f
SIZE (rust/crates/r-efi-5.3.0.crate) = 64532
-SHA256 (rust/crates/rand-0.9.1.crate) = 9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97
-SIZE (rust/crates/rand-0.9.1.crate) = 97986
+SHA256 (rust/crates/rand-0.9.2.crate) = 6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1
+SIZE (rust/crates/rand-0.9.2.crate) = 99930
SHA256 (rust/crates/rand_chacha-0.9.0.crate) = d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb
SIZE (rust/crates/rand_chacha-0.9.0.crate) = 18258
SHA256 (rust/crates/rand_core-0.9.3.crate) = 99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38
SIZE (rust/crates/rand_core-0.9.3.crate) = 24543
SHA256 (rust/crates/rawpointer-0.2.1.crate) = 60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3
SIZE (rust/crates/rawpointer-0.2.1.crate) = 7490
-SHA256 (rust/crates/rayon-1.10.0.crate) = b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa
-SIZE (rust/crates/rayon-1.10.0.crate) = 180155
+SHA256 (rust/crates/rayon-1.11.0.crate) = 368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f
+SIZE (rust/crates/rayon-1.11.0.crate) = 182470
SHA256 (rust/crates/rayon-cond-0.4.0.crate) = 2964d0cf57a3e7a06e8183d14a8b527195c706b7983549cd5462d5aa3747438f
SIZE (rust/crates/rayon-cond-0.4.0.crate) = 10659
-SHA256 (rust/crates/rayon-core-1.12.1.crate) = 1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2
-SIZE (rust/crates/rayon-core-1.12.1.crate) = 70701
-SHA256 (rust/crates/regex-1.11.1.crate) = b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191
-SIZE (rust/crates/regex-1.11.1.crate) = 254170
-SHA256 (rust/crates/regex-automata-0.4.9.crate) = 809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908
-SIZE (rust/crates/regex-automata-0.4.9.crate) = 618525
-SHA256 (rust/crates/regex-syntax-0.8.5.crate) = 2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c
-SIZE (rust/crates/regex-syntax-0.8.5.crate) = 357541
+SHA256 (rust/crates/rayon-core-1.13.0.crate) = 22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91
+SIZE (rust/crates/rayon-core-1.13.0.crate) = 73151
+SHA256 (rust/crates/regex-1.11.2.crate) = 23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912
+SIZE (rust/crates/regex-1.11.2.crate) = 166265
+SHA256 (rust/crates/regex-automata-0.4.10.crate) = 6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6
+SIZE (rust/crates/regex-automata-0.4.10.crate) = 622754
+SHA256 (rust/crates/regex-syntax-0.8.6.crate) = caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001
+SIZE (rust/crates/regex-syntax-0.8.6.crate) = 358808
+SHA256 (rust/crates/rustc-demangle-0.1.26.crate) = 56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace
+SIZE (rust/crates/rustc-demangle-0.1.26.crate) = 30340
SHA256 (rust/crates/rustc-hash-2.1.1.crate) = 357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d
SIZE (rust/crates/rustc-hash-2.1.1.crate) = 14154
-SHA256 (rust/crates/rustix-1.0.7.crate) = c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266
-SIZE (rust/crates/rustix-1.0.7.crate) = 414500
-SHA256 (rust/crates/rustversion-1.0.21.crate) = 8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d
-SIZE (rust/crates/rustversion-1.0.21.crate) = 21001
+SHA256 (rust/crates/rustix-1.0.8.crate) = 11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8
+SIZE (rust/crates/rustix-1.0.8.crate) = 416688
+SHA256 (rust/crates/rustversion-1.0.22.crate) = b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d
+SIZE (rust/crates/rustversion-1.0.22.crate) = 21096
SHA256 (rust/crates/ryu-1.0.20.crate) = 28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f
SIZE (rust/crates/ryu-1.0.20.crate) = 48738
SHA256 (rust/crates/serde-1.0.219.crate) = 5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6
SIZE (rust/crates/serde-1.0.219.crate) = 78983
SHA256 (rust/crates/serde_derive-1.0.219.crate) = 5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00
SIZE (rust/crates/serde_derive-1.0.219.crate) = 57798
-SHA256 (rust/crates/serde_json-1.0.140.crate) = 20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373
-SIZE (rust/crates/serde_json-1.0.140.crate) = 154852
+SHA256 (rust/crates/serde_json-1.0.143.crate) = d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a
+SIZE (rust/crates/serde_json-1.0.143.crate) = 155342
SHA256 (rust/crates/shlex-1.3.0.crate) = 0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64
SIZE (rust/crates/shlex-1.3.0.crate) = 18713
+SHA256 (rust/crates/signal-hook-registry-1.4.6.crate) = b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b
+SIZE (rust/crates/signal-hook-registry-1.4.6.crate) = 19277
+SHA256 (rust/crates/slab-0.4.11.crate) = 7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589
+SIZE (rust/crates/slab-0.4.11.crate) = 18549
SHA256 (rust/crates/smallvec-1.15.1.crate) = 67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03
SIZE (rust/crates/smallvec-1.15.1.crate) = 38116
SHA256 (rust/crates/spm_precompiled-0.1.4.crate) = 5851699c4033c63636f7ea4cf7b7c1f1bf06d0cc03cfb42e711de5a5c46cf326
@@ -207,16 +253,20 @@ SHA256 (rust/crates/static_assertions-1.1.0.crate) = a2eb9349b6444b326872e140eb1
SIZE (rust/crates/static_assertions-1.1.0.crate) = 18480
SHA256 (rust/crates/strsim-0.11.1.crate) = 7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f
SIZE (rust/crates/strsim-0.11.1.crate) = 14266
-SHA256 (rust/crates/syn-2.0.103.crate) = e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8
-SIZE (rust/crates/syn-2.0.103.crate) = 298990
+SHA256 (rust/crates/syn-2.0.106.crate) = ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6
+SIZE (rust/crates/syn-2.0.106.crate) = 301514
SHA256 (rust/crates/target-lexicon-0.13.2.crate) = e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a
SIZE (rust/crates/target-lexicon-0.13.2.crate) = 27923
-SHA256 (rust/crates/tempfile-3.20.0.crate) = e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1
-SIZE (rust/crates/tempfile-3.20.0.crate) = 42306
-SHA256 (rust/crates/thiserror-2.0.12.crate) = 567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708
-SIZE (rust/crates/thiserror-2.0.12.crate) = 28693
-SHA256 (rust/crates/thiserror-impl-2.0.12.crate) = 7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d
-SIZE (rust/crates/thiserror-impl-2.0.12.crate) = 21141
+SHA256 (rust/crates/tempfile-3.21.0.crate) = 15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e
+SIZE (rust/crates/tempfile-3.21.0.crate) = 42581
+SHA256 (rust/crates/thiserror-2.0.16.crate) = 3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0
+SIZE (rust/crates/thiserror-2.0.16.crate) = 29095
+SHA256 (rust/crates/thiserror-impl-2.0.16.crate) = 6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960
+SIZE (rust/crates/thiserror-impl-2.0.16.crate) = 21214
+SHA256 (rust/crates/tokio-1.47.1.crate) = 89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038
+SIZE (rust/crates/tokio-1.47.1.crate) = 829790
+SHA256 (rust/crates/tokio-macros-2.5.0.crate) = 6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8
+SIZE (rust/crates/tokio-macros-2.5.0.crate) = 12617
SHA256 (rust/crates/unicode-ident-1.0.18.crate) = 5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512
SIZE (rust/crates/unicode-ident-1.0.18.crate) = 47743
SHA256 (rust/crates/unicode-normalization-alignments-0.1.12.crate) = 43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de
@@ -233,8 +283,10 @@ SHA256 (rust/crates/utf8parse-0.2.2.crate) = 06abde3611657adf66d383f00b093d7faec
SIZE (rust/crates/utf8parse-0.2.2.crate) = 13499
SHA256 (rust/crates/version_check-0.9.5.crate) = 0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a
SIZE (rust/crates/version_check-0.9.5.crate) = 15554
-SHA256 (rust/crates/wasi-0.14.2+wasi-0.2.4.crate) = 9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3
-SIZE (rust/crates/wasi-0.14.2+wasi-0.2.4.crate) = 140921
+SHA256 (rust/crates/wasi-0.11.1+wasi-snapshot-preview1.crate) = ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b
+SIZE (rust/crates/wasi-0.11.1+wasi-snapshot-preview1.crate) = 28477
+SHA256 (rust/crates/wasi-0.14.3+wasi-0.2.4.crate) = 6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95
+SIZE (rust/crates/wasi-0.14.3+wasi-0.2.4.crate) = 144010
SHA256 (rust/crates/wasm-bindgen-0.2.100.crate) = 1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5
SIZE (rust/crates/wasm-bindgen-0.2.100.crate) = 48288
SHA256 (rust/crates/wasm-bindgen-backend-0.2.100.crate) = 2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6
@@ -247,29 +299,51 @@ SHA256 (rust/crates/wasm-bindgen-shared-0.2.100.crate) = 1a05d73b933a847d6cccdda
SIZE (rust/crates/wasm-bindgen-shared-0.2.100.crate) = 8570
SHA256 (rust/crates/web-time-1.1.0.crate) = 5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb
SIZE (rust/crates/web-time-1.1.0.crate) = 18026
+SHA256 (rust/crates/windows-link-0.1.3.crate) = 5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a
+SIZE (rust/crates/windows-link-0.1.3.crate) = 6154
SHA256 (rust/crates/windows-sys-0.59.0.crate) = 1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b
SIZE (rust/crates/windows-sys-0.59.0.crate) = 2387323
+SHA256 (rust/crates/windows-sys-0.60.2.crate) = f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb
+SIZE (rust/crates/windows-sys-0.60.2.crate) = 2518479
SHA256 (rust/crates/windows-targets-0.52.6.crate) = 9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973
SIZE (rust/crates/windows-targets-0.52.6.crate) = 6403
+SHA256 (rust/crates/windows-targets-0.53.3.crate) = d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91
+SIZE (rust/crates/windows-targets-0.53.3.crate) = 7099
SHA256 (rust/crates/windows_aarch64_gnullvm-0.52.6.crate) = 32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3
SIZE (rust/crates/windows_aarch64_gnullvm-0.52.6.crate) = 435718
+SHA256 (rust/crates/windows_aarch64_gnullvm-0.53.0.crate) = 86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764
+SIZE (rust/crates/windows_aarch64_gnullvm-0.53.0.crate) = 782443
SHA256 (rust/crates/windows_aarch64_msvc-0.52.6.crate) = 09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469
SIZE (rust/crates/windows_aarch64_msvc-0.52.6.crate) = 832615
+SHA256 (rust/crates/windows_aarch64_msvc-0.53.0.crate) = c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c
+SIZE (rust/crates/windows_aarch64_msvc-0.53.0.crate) = 834446
SHA256 (rust/crates/windows_i686_gnu-0.52.6.crate) = 8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b
SIZE (rust/crates/windows_i686_gnu-0.52.6.crate) = 880402
+SHA256 (rust/crates/windows_i686_gnu-0.53.0.crate) = c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3
+SIZE (rust/crates/windows_i686_gnu-0.53.0.crate) = 936973
SHA256 (rust/crates/windows_i686_gnullvm-0.52.6.crate) = 0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66
SIZE (rust/crates/windows_i686_gnullvm-0.52.6.crate) = 475940
+SHA256 (rust/crates/windows_i686_gnullvm-0.53.0.crate) = 9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11
+SIZE (rust/crates/windows_i686_gnullvm-0.53.0.crate) = 854056
SHA256 (rust/crates/windows_i686_msvc-0.52.6.crate) = 240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66
SIZE (rust/crates/windows_i686_msvc-0.52.6.crate) = 901163
+SHA256 (rust/crates/windows_i686_msvc-0.53.0.crate) = 581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d
+SIZE (rust/crates/windows_i686_msvc-0.53.0.crate) = 903450
SHA256 (rust/crates/windows_x86_64_gnu-0.52.6.crate) = 147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78
SIZE (rust/crates/windows_x86_64_gnu-0.52.6.crate) = 836363
+SHA256 (rust/crates/windows_x86_64_gnu-0.53.0.crate) = 2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba
+SIZE (rust/crates/windows_x86_64_gnu-0.53.0.crate) = 902585
SHA256 (rust/crates/windows_x86_64_gnullvm-0.52.6.crate) = 24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d
SIZE (rust/crates/windows_x86_64_gnullvm-0.52.6.crate) = 435707
+SHA256 (rust/crates/windows_x86_64_gnullvm-0.53.0.crate) = 0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57
+SIZE (rust/crates/windows_x86_64_gnullvm-0.53.0.crate) = 782434
SHA256 (rust/crates/windows_x86_64_msvc-0.52.6.crate) = 589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec
SIZE (rust/crates/windows_x86_64_msvc-0.52.6.crate) = 832564
-SHA256 (rust/crates/wit-bindgen-rt-0.39.0.crate) = 6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1
-SIZE (rust/crates/wit-bindgen-rt-0.39.0.crate) = 12241
-SHA256 (rust/crates/zerocopy-0.8.25.crate) = a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb
-SIZE (rust/crates/zerocopy-0.8.25.crate) = 252714
-SHA256 (rust/crates/zerocopy-derive-0.8.25.crate) = 28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef
-SIZE (rust/crates/zerocopy-derive-0.8.25.crate) = 87671
+SHA256 (rust/crates/windows_x86_64_msvc-0.53.0.crate) = 271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486
+SIZE (rust/crates/windows_x86_64_msvc-0.53.0.crate) = 834400
+SHA256 (rust/crates/wit-bindgen-0.45.0.crate) = 052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814
+SIZE (rust/crates/wit-bindgen-0.45.0.crate) = 60405
+SHA256 (rust/crates/zerocopy-0.8.26.crate) = 1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f
+SIZE (rust/crates/zerocopy-0.8.26.crate) = 249223
+SHA256 (rust/crates/zerocopy-derive-0.8.26.crate) = 9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181
+SIZE (rust/crates/zerocopy-derive-0.8.26.crate) = 88080
diff --git a/textproc/py-towncrier/Makefile b/textproc/py-towncrier/Makefile
index 026787f85914..5a358a1aa2ba 100644
--- a/textproc/py-towncrier/Makefile
+++ b/textproc/py-towncrier/Makefile
@@ -1,5 +1,5 @@
PORTNAME= towncrier
-PORTVERSION= 24.8.0
+PORTVERSION= 25.8.0
CATEGORIES= textproc
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-towncrier/distinfo b/textproc/py-towncrier/distinfo
index ee4bd46189e2..40850e8114cc 100644
--- a/textproc/py-towncrier/distinfo
+++ b/textproc/py-towncrier/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1724486427
-SHA256 (towncrier-24.8.0.tar.gz) = 013423ee7eed102b2f393c287d22d95f66f1a3ea10a4baa82d298001a7f18af3
-SIZE (towncrier-24.8.0.tar.gz) = 61635
+TIMESTAMP = 1756801504
+SHA256 (towncrier-25.8.0.tar.gz) = eef16d29f831ad57abb3ae32a0565739866219f1ebfbdd297d32894eb9940eb1
+SIZE (towncrier-25.8.0.tar.gz) = 76322
diff --git a/textproc/py-wordcloud/Makefile b/textproc/py-wordcloud/Makefile
index c159c5c5af49..01b1c7502512 100644
--- a/textproc/py-wordcloud/Makefile
+++ b/textproc/py-wordcloud/Makefile
@@ -1,5 +1,6 @@
PORTNAME= wordcloud
DISTVERSION= 1.9.4
+PORTREVISION= 1
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/py-xhtml2pdf/Makefile b/textproc/py-xhtml2pdf/Makefile
index a7be02e3fb4d..97001d33a8a8 100644
--- a/textproc/py-xhtml2pdf/Makefile
+++ b/textproc/py-xhtml2pdf/Makefile
@@ -1,5 +1,6 @@
PORTNAME= xhtml2pdf
PORTVERSION= 0.2.17
+PORTREVISION= 1
CATEGORIES= textproc python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/quickwit/Makefile b/textproc/quickwit/Makefile
index cd5a62fd3883..bb421bd5e3ef 100644
--- a/textproc/quickwit/Makefile
+++ b/textproc/quickwit/Makefile
@@ -1,7 +1,7 @@
PORTNAME= quickwit
DISTVERSIONPREFIX= v
DISTVERSION= 0.8.2
-PORTREVISION= 9
+PORTREVISION= 10
CATEGORIES= textproc
MAINTAINER= ashish@FreeBSD.org
diff --git a/textproc/riffdiff/Makefile b/textproc/riffdiff/Makefile
index df4818f40824..af5d004dd022 100644
--- a/textproc/riffdiff/Makefile
+++ b/textproc/riffdiff/Makefile
@@ -1,5 +1,6 @@
PORTNAME= riffdiff
DISTVERSION= 3.4.0
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/ripgrep-all/Makefile b/textproc/ripgrep-all/Makefile
index 0d554b446ac4..dd8009fe5ff5 100644
--- a/textproc/ripgrep-all/Makefile
+++ b/textproc/ripgrep-all/Makefile
@@ -1,7 +1,7 @@
PORTNAME= ripgrep-all
DISTVERSIONPREFIX= v
DISTVERSION= 0.9.6
-PORTREVISION= 38
+PORTREVISION= 39
CATEGORIES= textproc
MAINTAINER= alexis.praga@free.fr
diff --git a/textproc/ripgrep/Makefile b/textproc/ripgrep/Makefile
index ae433b7df000..e6c33ceb7467 100644
--- a/textproc/ripgrep/Makefile
+++ b/textproc/ripgrep/Makefile
@@ -1,6 +1,6 @@
PORTNAME= ripgrep
DISTVERSION= 14.1.1
-PORTREVISION= 7
+PORTREVISION= 8
CATEGORIES= textproc
MAINTAINER= petteri.valkonen@iki.fi
diff --git a/textproc/rubygem-asciidoctor-pdf/Makefile b/textproc/rubygem-asciidoctor-pdf/Makefile
index 5a621dd08beb..6cc7d285371d 100644
--- a/textproc/rubygem-asciidoctor-pdf/Makefile
+++ b/textproc/rubygem-asciidoctor-pdf/Makefile
@@ -1,6 +1,6 @@
PORTNAME= asciidoctor-pdf
PORTVERSION= 2.3.19
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= textproc rubygems
MASTER_SITES= RG
@@ -17,7 +17,7 @@ RUN_DEPENDS= rubygem-asciidoctor>=2.0<3:textproc/rubygem-asciidoctor \
rubygem-matrix>=0.4<1:math/rubygem-matrix \
rubygem-prawn24>=2.4.0<2.5:print/rubygem-prawn24 \
rubygem-prawn-icon3>=3.1.0<3.2:print/rubygem-prawn-icon3 \
- rubygem-prawn-svg>=0.36.1<0.37:print/rubygem-prawn-svg \
+ rubygem-prawn-svg036>=0.36.1<0.37:print/rubygem-prawn-svg036 \
rubygem-prawn-table>=0.2.0<0.3:print/rubygem-prawn-table \
rubygem-prawn-templates>=0.1.0<0.2:print/rubygem-prawn-templates \
rubygem-treetop>=1.6.0<1.7:devel/rubygem-treetop \
diff --git a/textproc/rubygem-commonmarker/Makefile b/textproc/rubygem-commonmarker/Makefile
index abbb13aa55ee..b362dbfe5c8d 100644
--- a/textproc/rubygem-commonmarker/Makefile
+++ b/textproc/rubygem-commonmarker/Makefile
@@ -1,6 +1,6 @@
PORTNAME= commonmarker
PORTVERSION= 2.3.1
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= textproc rubygems
MASTER_SITES= RG
DISTFILES= ${DISTNAME}.gem
diff --git a/textproc/rubygem-elasticsearch-api/Makefile b/textproc/rubygem-elasticsearch-api/Makefile
index 5f4a34edbb62..4dae1c8b1533 100644
--- a/textproc/rubygem-elasticsearch-api/Makefile
+++ b/textproc/rubygem-elasticsearch-api/Makefile
@@ -1,5 +1,5 @@
PORTNAME= elasticsearch-api
-PORTVERSION= 9.0.0
+PORTVERSION= 9.1.0
CATEGORIES= textproc rubygems
MASTER_SITES= RG
diff --git a/textproc/rubygem-elasticsearch-api/distinfo b/textproc/rubygem-elasticsearch-api/distinfo
index 07e9b5f96cce..379a489f747e 100644
--- a/textproc/rubygem-elasticsearch-api/distinfo
+++ b/textproc/rubygem-elasticsearch-api/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1745936424
-SHA256 (rubygem/elasticsearch-api-9.0.0.gem) = 00af6b58bd5786d994d12f9899b787789a345a74a9ea887b1926790a432a50c7
-SIZE (rubygem/elasticsearch-api-9.0.0.gem) = 217088
+TIMESTAMP = 1755062618
+SHA256 (rubygem/elasticsearch-api-9.1.0.gem) = 6454dc3955ff39ccd8dd74929e9c592611f823d850057f64b4abb684105a18e6
+SIZE (rubygem/elasticsearch-api-9.1.0.gem) = 228864
diff --git a/textproc/rubygem-elasticsearch-api8/Makefile b/textproc/rubygem-elasticsearch-api8/Makefile
index 7cf6a33e7765..74a0107e2ba2 100644
--- a/textproc/rubygem-elasticsearch-api8/Makefile
+++ b/textproc/rubygem-elasticsearch-api8/Makefile
@@ -1,5 +1,5 @@
PORTNAME= elasticsearch-api
-PORTVERSION= 8.18.0
+PORTVERSION= 8.19.0
CATEGORIES= textproc rubygems
MASTER_SITES= RG
PKGNAMESUFFIX= 8
diff --git a/textproc/rubygem-elasticsearch-api8/distinfo b/textproc/rubygem-elasticsearch-api8/distinfo
index 52c33b2c26b3..51409acfa1ba 100644
--- a/textproc/rubygem-elasticsearch-api8/distinfo
+++ b/textproc/rubygem-elasticsearch-api8/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1745178236
-SHA256 (rubygem/elasticsearch-api-8.18.0.gem) = 56ea86d763a8dd781374b76eba6b45977e267510c09e979d1ebe018463379666
-SIZE (rubygem/elasticsearch-api-8.18.0.gem) = 209920
+TIMESTAMP = 1755062620
+SHA256 (rubygem/elasticsearch-api-8.19.0.gem) = 1f820f666576cbe333bc8564c410574668f6dcd08690889281466bf0506f34c0
+SIZE (rubygem/elasticsearch-api-8.19.0.gem) = 213504
diff --git a/textproc/rubygem-elasticsearch/Makefile b/textproc/rubygem-elasticsearch/Makefile
index 8f2e578b93ce..8ee1e6e143c0 100644
--- a/textproc/rubygem-elasticsearch/Makefile
+++ b/textproc/rubygem-elasticsearch/Makefile
@@ -1,5 +1,5 @@
PORTNAME= elasticsearch
-PORTVERSION= 9.0.0
+PORTVERSION= 9.1.0
CATEGORIES= textproc rubygems
MASTER_SITES= RG
diff --git a/textproc/rubygem-elasticsearch/distinfo b/textproc/rubygem-elasticsearch/distinfo
index e5c6de6ab54f..228f21d18cc5 100644
--- a/textproc/rubygem-elasticsearch/distinfo
+++ b/textproc/rubygem-elasticsearch/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1745936422
-SHA256 (rubygem/elasticsearch-9.0.0.gem) = f5e37ae4256c976dbf38e3b1298e1e32addd936b424c1f16ff89306ce3479329
-SIZE (rubygem/elasticsearch-9.0.0.gem) = 15872
+TIMESTAMP = 1755062616
+SHA256 (rubygem/elasticsearch-9.1.0.gem) = 16832abc97dd44a2a94fad7f1e61fe1698d1992ba3cdc15719bbcaebb3e23478
+SIZE (rubygem/elasticsearch-9.1.0.gem) = 15872
diff --git a/textproc/rubygem-elasticsearch8/Makefile b/textproc/rubygem-elasticsearch8/Makefile
index ea654f6a006a..9168a5c5ea0f 100644
--- a/textproc/rubygem-elasticsearch8/Makefile
+++ b/textproc/rubygem-elasticsearch8/Makefile
@@ -1,5 +1,5 @@
PORTNAME= elasticsearch
-PORTVERSION= 8.18.0
+PORTVERSION= 8.19.0
CATEGORIES= textproc rubygems
MASTER_SITES= RG
PKGNAMESUFFIX= 8
diff --git a/textproc/rubygem-elasticsearch8/distinfo b/textproc/rubygem-elasticsearch8/distinfo
index 625d76138955..4905a61bc7e4 100644
--- a/textproc/rubygem-elasticsearch8/distinfo
+++ b/textproc/rubygem-elasticsearch8/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1745178234
-SHA256 (rubygem/elasticsearch-8.18.0.gem) = 2bad7699b49dfd3a66b9a2fefa86460d884bbc6600eba189df46822134a45671
-SIZE (rubygem/elasticsearch-8.18.0.gem) = 25088
+TIMESTAMP = 1755062622
+SHA256 (rubygem/elasticsearch-8.19.0.gem) = 59f5368a89f5fe29e9da13684d0295360c8efcbeff8ad4b06c1854dc777a508b
+SIZE (rubygem/elasticsearch-8.19.0.gem) = 25088
diff --git a/textproc/rubygem-gitlab-glfm-markdown/Makefile b/textproc/rubygem-gitlab-glfm-markdown/Makefile
index f327b29d7ea2..9d1aafcef66c 100644
--- a/textproc/rubygem-gitlab-glfm-markdown/Makefile
+++ b/textproc/rubygem-gitlab-glfm-markdown/Makefile
@@ -1,5 +1,6 @@
PORTNAME= gitlab-glfm-markdown
PORTVERSION= 0.0.33
+PORTREVISION= 1
CATEGORIES= textproc rubygems
MASTER_SITES= RG
diff --git a/textproc/sad/Makefile b/textproc/sad/Makefile
index ee90d3719fc9..bb364c2f7b0e 100644
--- a/textproc/sad/Makefile
+++ b/textproc/sad/Makefile
@@ -1,7 +1,7 @@
PORTNAME= sad
DISTVERSIONPREFIX= v
DISTVERSION= 0.4.32
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/sd/Makefile b/textproc/sd/Makefile
index 5fc2f5ae65d7..8d74ffcd4ada 100644
--- a/textproc/sd/Makefile
+++ b/textproc/sd/Makefile
@@ -1,7 +1,7 @@
PORTNAME= sd
DISTVERSIONPREFIX= v
DISTVERSION= 1.0.0
-PORTREVISION= 16
+PORTREVISION= 17
CATEGORIES= textproc
MAINTAINER= bofh@FreeBSD.org
diff --git a/textproc/sonic/Makefile b/textproc/sonic/Makefile
index 4e98b270cf41..51e40fe77050 100644
--- a/textproc/sonic/Makefile
+++ b/textproc/sonic/Makefile
@@ -1,7 +1,7 @@
PORTNAME= sonic
DISTVERSIONPREFIX= v
DISTVERSION= 1.4.9
-PORTREVISION= 10
+PORTREVISION= 11
CATEGORIES= textproc
MASTER_SITES+= https://clrd.ninjal.ac.jp/unidic_archive/cwj/2.1.2/:unidic
DISTFILES+= unidic-mecab-2.1.2_src.zip:unidic # check cargo-crates/lindera-unidic-XXX/build.rs
diff --git a/textproc/television/Makefile b/textproc/television/Makefile
index e67c7639208b..62db60ec5f63 100644
--- a/textproc/television/Makefile
+++ b/textproc/television/Makefile
@@ -1,5 +1,6 @@
PORTNAME= television
DISTVERSION= 0.13.3
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= uzsolt@FreeBSD.org
diff --git a/textproc/tokay/Makefile b/textproc/tokay/Makefile
index cf87d56807dc..c8dce3a5f691 100644
--- a/textproc/tokay/Makefile
+++ b/textproc/tokay/Makefile
@@ -1,6 +1,7 @@
PORTNAME= tokay
DISTVERSIONPREFIX= v
DISTVERSION= 0.6.12
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/tomlq/Makefile b/textproc/tomlq/Makefile
index 7e69bd2dd519..9bc05ad8ae9d 100644
--- a/textproc/tomlq/Makefile
+++ b/textproc/tomlq/Makefile
@@ -1,6 +1,6 @@
PORTNAME= tomlq
DISTVERSION= 0.2.2
-PORTREVISION= 3
+PORTREVISION= 4
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/tree-sitter-grammars/Makefile b/textproc/tree-sitter-grammars/Makefile
new file mode 100644
index 000000000000..586c9ea4c669
--- /dev/null
+++ b/textproc/tree-sitter-grammars/Makefile
@@ -0,0 +1,75 @@
+PORTNAME= tree-sitter-grammars
+DISTVERSIONPREFIX= v
+DISTVERSION= 0.4.2
+DISTVERSIONSUFFIX= +1f9f9dd
+CATEGORIES= textproc
+MASTER_SITES+= https://git.sr.ht/~nbsp/tree-sitter-gemini/archive/:gemini \
+ https://git.sr.ht/~ecs/tree-sitter-hare/archive/:hare \
+ https://git.sr.ht/~jummit/tree-sitter-wren/archive/:wren \
+ https://gitlab.com/gabmus/tree-sitter-blueprint/-/archive/${BLUEPRINT_HASH}/:blueprint \
+ https://gitlab.com/TheZoq2/tree-sitter-lpf/-/archive/${LPF_HASH}/:lpf \
+ https://gitlab.com/xasc/tree-sitter-t32/-/archive/${T32_HASH}/:t32 \
+ https://raw.githubusercontent.com/helix-editor/helix/:lng
+DISTFILES+= ${BLUEPRINT_HASH}${EXTRACT_SUFX}:blueprint \
+ ${LPF_HASH}${EXTRACT_SUFX}:lpf \
+ ${T32_HASH}${EXTRACT_SUFX}:t32 \
+ ${GEMINI_HASH}${EXTRACT_SUFX}:gemini \
+ ${HARE_HASH}${EXTRACT_SUFX}:hare \
+ ${LANG_HASH}/languages.toml:lng \
+ ${WREN_HASH}${EXTRACT_SUFX}:wren
+EXTRACT_ONLY+= ${_DISTFILES:N*languages.toml}
+
+MAINTAINER= mikael@FreeBSD.org
+COMMENT= Collection of tree-sitter grammars
+WWW= https://github.com/lapce/tree-sitter-grammars
+
+BUILD_DEPENDS= tree-sitter:devel/tree-sitter-cli
+
+USES= cargo
+
+USE_GITHUB= yes
+GH_ACCOUNT= lapce
+
+BLUEPRINT_HASH= 863cea9f83ad5637300478e0559262f1e791684b
+LPF_HASH= db7372e60c722ca7f12ab359e57e6bf7611ab126
+T32_HASH= 6da5e3cbabd376b566d04282005e52ffe67ef74a
+GEMINI_HASH= 3cc5e4bdf572d5df4277fc2e54d6299bd59a54b3
+HARE_HASH= 07035a248943575444aa0b893ffe306e1444c0ab
+LANG_HASH= 0a4432b104099534f7a25b8ea4148234db146ab6
+WREN_HASH= 6748694be32f11e7ec6b5faeb1b48ca6156d4e06
+
+post-extract:
+.for d in blueprint lpf t32 gemini hare wren
+ ${MKDIR} ${WRKSRC}/grammars/tree-sitter-${d}
+.endfor
+ ${MV} ${WRKDIR}/tree-sitter-blueprint-${BLUEPRINT_HASH}/* ${WRKSRC}/grammars/tree-sitter-blueprint
+ ${MV} ${WRKDIR}/tree-sitter-lpf-${LPF_HASH}/* ${WRKSRC}/grammars/tree-sitter-lpf
+ ${MV} ${WRKDIR}/tree-sitter-t32-${T32_HASH}/* ${WRKSRC}/grammars/tree-sitter-t32
+ ${MV} ${WRKDIR}/tree-sitter-gemini-${GEMINI_HASH}/* ${WRKSRC}/grammars/tree-sitter-gemini
+ ${MV} ${WRKDIR}/tree-sitter-hare-${HARE_HASH}/* ${WRKSRC}/grammars/tree-sitter-hare
+ ${MV} ${WRKDIR}/tree-sitter-wren-${WREN_HASH}/* ${WRKSRC}/grammars/tree-sitter-wren
+
+ # Recreate link correctly
+.for d in markdown_inline ocaml-interface tsx wast
+ ${RM} ${WRKSRC}/grammars/tree-sitter-${d}
+.endfor
+ ${LN} -s ${WRKSRC}/grammars/tree-sitter-markdown ${WRKSRC}/grammars/tree-sitter-markdown_inline
+ ${LN} -s ${WRKSRC}/grammars/tree-sitter-ocaml ${WRKSRC}/grammars/tree-sitter-ocaml-interface
+ ${LN} -s ${WRKSRC}/grammars/tree-sitter-typescript ${WRKSRC}/grammars/tree-sitter-tsx
+ ${LN} -s ${WRKSRC}/grammars/tree-sitter-wat ${WRKSRC}/grammars/tree-sitter-wast
+
+ ${CP} ${DISTDIR}/${LANG_HASH}/languages.toml ${WRKSRC}
+
+post-build:
+ cd ${WRKSRC}; \
+ ${CARGO_TARGET_DIR}/release/build-tree-sitter --output ./output --tmp ${WRKSRC}/grammars
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${DATADIR}
+ cd ${WRKSRC}/output && \
+ ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR}
+
+ ${ECHO} -n ${DISTVERSION}${DISTVERSIONSUFFIX} > ${STAGEDIR}${DATADIR}/version
+
+.include <Makefile.GH_TUPLE>
+.include <bsd.port.mk>
diff --git a/textproc/tree-sitter-grammars/Makefile.GH_TUPLE b/textproc/tree-sitter-grammars/Makefile.GH_TUPLE
new file mode 100644
index 000000000000..92e060fb2cf6
--- /dev/null
+++ b/textproc/tree-sitter-grammars/Makefile.GH_TUPLE
@@ -0,0 +1,198 @@
+# sh gh_tuples > Makefile.GH_TUPLE
+GH_TUPLE= tree-sitter:tree-sitter-rust:9c84af007b0f144954adb26b3f336495cbb320a7:ts0/grammars/tree-sitter-rust \
+ FuelLabs:tree-sitter-sway:e491a005ee1d310f4c138bf215afd44cfebf959c:ts1/grammars/tree-sitter-sway \
+ ikatyang:tree-sitter-toml:7cff70bbcbbc62001b465603ca1ea88edd668704:ts2/grammars/tree-sitter-toml \
+ Beaglefoot:tree-sitter-awk:a799bc5da7c2a84bc9a06ba5f3540cf1191e4ee3:ts3/grammars/tree-sitter-awk \
+ yusdacra:tree-sitter-protobuf:19c211a01434d9f03efff99f85e19f967591b175:ts4/grammars/tree-sitter-protobuf \
+ elixir-lang:tree-sitter-elixir:b20eaa75565243c50be5e35e253d8beb58f45d56:ts5/grammars/tree-sitter-elixir \
+ ram02z:tree-sitter-fish:84436cf24c2b3176bfbb220922a0fdbd0141e406:ts6/grammars/tree-sitter-fish \
+ lsh:tree-sitter-mojo:3d7c53b8038f9ebbb57cd2e61296180aa5c1cf64:ts7/grammars/tree-sitter-mojo \
+ sogaiu:tree-sitter-janet-simple:51271e260346878e1a1aa6c506ce6a797b7c25e2:ts8/grammars/tree-sitter-janet-simple \
+ tree-sitter:tree-sitter-json:73076754005a460947cafe8e03a8cf5fa4fa2938:ts9/grammars/tree-sitter-json \
+ Joakker:tree-sitter-json5:c23f7a9b1ee7d45f516496b1e0e4be067264fa0d:ts10/grammars/tree-sitter-json5 \
+ tree-sitter:tree-sitter-c:7175a6dd5fc1cee660dce6fe23f6043d75af424a:ts11/grammars/tree-sitter-c \
+ tree-sitter:tree-sitter-cpp:670404d7c689be1c868a46f919ba2a3912f2b7ef:ts12/grammars/tree-sitter-cpp \
+ tree-sitter:tree-sitter-c-sharp:5b60f99545fea00a33bbfae5be956f684c4c69e2:ts13/grammars/tree-sitter-c-sharp \
+ bufbuild:tree-sitter-cel:9f2b65da14c216df53933748e489db0f11121464:ts14/grammars/tree-sitter-cel \
+ jzelinskie:tree-sitter-spicedb:a4e4645651f86d6684c15dfa9931b7841dc52a66:ts15/grammars/tree-sitter-spicedb \
+ tree-sitter:tree-sitter-go:64457ea6b73ef5422ed1687178d4545c3e91334a:ts16/grammars/tree-sitter-go \
+ camdencheek:tree-sitter-go-mod:e8f51f8e4363a3d9a427e8f63f4c1bbc5ef5d8d0:ts17/grammars/tree-sitter-gomod \
+ dannylongeuay:tree-sitter-go-template:395a33e08e69f4155156f0b90138a6c86764c979:ts18/grammars/tree-sitter-gotmpl \
+ omertuc:tree-sitter-go-work:6dd9dd79fb51e9f2abc829d5e97b15015b6a8ae2:ts19/grammars/tree-sitter-gowork \
+ tree-sitter:tree-sitter-javascript:f772967f7b7bc7c28f845be2420a38472b16a8ee:ts20/grammars/tree-sitter-javascript \
+ tree-sitter:tree-sitter-typescript:b1bf4825d9eaa0f3bdeb1e52f099533328acfbdf:ts21/grammars/tree-sitter-typescript \
+ tree-sitter:tree-sitter-typescript:b1bf4825d9eaa0f3bdeb1e52f099533328acfbdf:ts22/grammars/tree-sitter-tsx \
+ tree-sitter:tree-sitter-css:769203d0f9abe1a9a691ac2b9fe4bb4397a73c51:ts23/grammars/tree-sitter-css \
+ serenadeai:tree-sitter-scss:c478c6868648eff49eb04a4df90d703dc45b312a:ts24/grammars/tree-sitter-scss \
+ tree-sitter:tree-sitter-html:29f53d8f4f2335e61bf6418ab8958dac3282077a:ts25/grammars/tree-sitter-html \
+ tree-sitter:tree-sitter-python:4bfdd9033a2225cc95032ce77066b7aeca9e2efc:ts26/grammars/tree-sitter-python \
+ nickel-lang:tree-sitter-nickel:e1d9337864d209898a08c26b8cd4c2dd14c15148:ts27/grammars/tree-sitter-nickel \
+ nix-community:tree-sitter-nix:1b69cf1fa92366eefbe6863c184e5d2ece5f187d:ts28/grammars/tree-sitter-nix \
+ tree-sitter:tree-sitter-ruby:206c7077164372c596ffa8eaadb9435c28941364:ts29/grammars/tree-sitter-ruby \
+ tree-sitter:tree-sitter-bash:f8fb3274f72a30896075585b32b0c54cad65c086:ts30/grammars/tree-sitter-bash \
+ tree-sitter:tree-sitter-php:f860e598194f4a71747f91789bf536b393ad4a56:ts31/grammars/tree-sitter-php \
+ tree-sitter:tree-sitter-php:cf1f4a0f1c01c705c1d6cf992b104028d5df0b53:ts32/grammars/tree-sitter-php-only \
+ EmranMR:tree-sitter-blade:4c66efe1e05c639c555ee70092021b8223d2f440:ts33/grammars/tree-sitter-blade \
+ gbprod:tree-sitter-twig:807b293fec3fead64f54c64fdf6fb05516c032b9:ts34/grammars/tree-sitter-twig \
+ latex-lsp:tree-sitter-latex:8c75e93cd08ccb7ce1ccab22c1fbd6360e3bcea6:ts35/grammars/tree-sitter-latex \
+ latex-lsp:tree-sitter-bibtex:ccfd77db0ed799b6c22c214fe9d2937f47bc8b34:ts36/grammars/tree-sitter-bibtex \
+ Julian:tree-sitter-lean:d98426109258b266e1e92358c5f11716d2e8f638:ts37/grammars/tree-sitter-lean \
+ tree-sitter:tree-sitter-julia:8fb38abff74652c4faddbf04d2d5bbbc6b4bae25:ts39/grammars/tree-sitter-julia \
+ tree-sitter:tree-sitter-java:09d650def6cdf7f479f4b78f595e9ef5b58ce31e:ts40/grammars/tree-sitter-java \
+ amaanq:tree-sitter-smali:5ae51e15c4d1ac93cba6127caf3d1f0a072c140c:ts41/grammars/tree-sitter-smali \
+ cbarrete:tree-sitter-ledger:1f864fb2bf6a87fe1b48545cc6adc6d23090adf7:ts42/grammars/tree-sitter-ledger \
+ polarmutex:tree-sitter-beancount:f3741a3a68ade59ec894ed84a64673494d2ba8f3:ts43/grammars/tree-sitter-beancount \
+ tree-sitter:tree-sitter-ocaml:9965d208337d88bbf1a38ad0b0fe49e5f5ec9677:ts44/grammars/tree-sitter-ocaml \
+ tree-sitter:tree-sitter-ocaml:9965d208337d88bbf1a38ad0b0fe49e5f5ec9677:ts45/grammars/tree-sitter-ocaml-interface \
+ tree-sitter-grammars:tree-sitter-lua:88e446476a1e97a8724dff7a23e2d709855077f2:ts46/grammars/tree-sitter-lua \
+ Himujjal:tree-sitter-svelte:be7f2e7db1fc19f0852265ec60923fc058380739:ts47/grammars/tree-sitter-svelte \
+ ikatyang:tree-sitter-vue:91fe2754796cd8fba5f229505a23fa08f3546c06:ts48/grammars/tree-sitter-vue \
+ ikatyang:tree-sitter-yaml:0e36bed171768908f331ff7dff9d956bae016efb:ts49/grammars/tree-sitter-yaml \
+ tree-sitter:tree-sitter-haskell:d7ac98f49e3ed7e17541256fe3881a967d7ffdd3:ts50/grammars/tree-sitter-haskell \
+ MercuryTechnologies:tree-sitter-haskell-persistent:58a6ccfd56d9f1de8fb9f77e6c42151f8f0d0f3d:ts51/grammars/tree-sitter-haskell-persistent \
+ postsolar:tree-sitter-purescript:5ef5592674ea42de75fc2792972e4ea0b6e3da6c:ts52/grammars/tree-sitter-purescript \
+ maxxnino:tree-sitter-zig:0d08703e4c3f426ec61695d7617415fff97029bd:ts53/grammars/tree-sitter-zig \
+ the-mikedavis:tree-sitter-tsq:48b5e9f82ae0a4727201626f33a17f69f8e0ff86:ts54/grammars/tree-sitter-tsq \
+ uyha:tree-sitter-cmake:6e51463ef3052dd3b328322c22172eda093727ad:ts55/grammars/tree-sitter-cmake \
+ alemuller:tree-sitter-make:a4b9187417d6be349ee5fd4b6e77b4172c6827dd:ts56/grammars/tree-sitter-make \
+ theHamsta:tree-sitter-glsl:88408ffc5e27abcffced7010fc77396ae3636d7e:ts57/grammars/tree-sitter-glsl \
+ tree-sitter-perl:tree-sitter-perl:e99bb5283805db4cb86c964722d709df21b0ac16:ts58/grammars/tree-sitter-perl \
+ tree-sitter-perl:tree-sitter-pod:39da859947b94abdee43e431368e1ae975c0a424:ts59/grammars/tree-sitter-pod \
+ stsewd:tree-sitter-comment:aefcc2813392eb6ffe509aa0fc8b4e9b57413ee1:ts60/grammars/tree-sitter-comment \
+ szebniok:tree-sitter-wgsl:272e89ef2aeac74178edb9db4a83c1ffef80a463:ts61/grammars/tree-sitter-wgsl \
+ benwilliamgraham:tree-sitter-llvm:e9948edc41e9e5869af99dddb2b5ff5cc5581af6:ts62/grammars/tree-sitter-llvm \
+ Flakebi:tree-sitter-llvm-mir:06fabca19454b2dc00c1b211a7cb7ad0bc2585f1:ts63/grammars/tree-sitter-llvm-mir \
+ Flakebi:tree-sitter-tablegen:568dd8a937347175fd58db83d4c4cdaeb6069bd2:ts64/grammars/tree-sitter-tablegen \
+ tree-sitter-grammars:tree-sitter-markdown:62516e8c78380e3b51d5b55727995d2c511436d8:ts65/grammars/tree-sitter-markdown \
+ tree-sitter-grammars:tree-sitter-markdown:62516e8c78380e3b51d5b55727995d2c511436d8:ts66/grammars/tree-sitter-markdown_inline \
+ UserNobody14:tree-sitter-dart:e398400a0b785af3cf571f5a57eccab242f0cdf9:ts67/grammars/tree-sitter-dart \
+ tree-sitter:tree-sitter-scala:7891815f42dca9ed6aeb464c2edc39d479ab965c:ts68/grammars/tree-sitter-scala \
+ camdencheek:tree-sitter-dockerfile:8ee3a0f7587b2bd8c45c8cb7d28bd414604aec62:ts69/grammars/tree-sitter-dockerfile \
+ the-mikedavis:tree-sitter-git-commit:6f193a66e9aa872760823dff020960c6cedc37b3:ts70/grammars/tree-sitter-git-commit \
+ the-mikedavis:tree-sitter-diff:fd74c78fa88a20085dbc7bbeaba066f4d1692b63:ts71/grammars/tree-sitter-diff \
+ the-mikedavis:tree-sitter-git-rebase:d8a4207ebbc47bd78bacdf48f883db58283f9fd8:ts72/grammars/tree-sitter-git-rebase \
+ tree-sitter:tree-sitter-regex:e1cfca3c79896ff79842f057ea13e529b66af636:ts73/grammars/tree-sitter-regex \
+ the-mikedavis:tree-sitter-git-config:9c2a1b7894e6d9eedfe99805b829b4ecd871375e:ts74/grammars/tree-sitter-git-config \
+ mtoohey31:tree-sitter-gitattributes:3dd50808e3096f93dccd5e9dc7dc3dba2eb12dc4:ts75/grammars/tree-sitter-gitattributes \
+ shunsambongi:tree-sitter-gitignore:f4685bf11ac466dd278449bcfe5fd014e94aa504:ts76/grammars/tree-sitter-gitignore \
+ bkegley:tree-sitter-graphql:5e66e961eee421786bdda8495ed1db045e06b5fe:ts77/grammars/tree-sitter-graphql \
+ elm-tooling:tree-sitter-elm:df4cb639c01b76bc9ac9cc66788709a6da20002c:ts78/grammars/tree-sitter-elm \
+ elixir-lang:tree-sitter-iex:39f20bb51f502e32058684e893c0c0b00bb2332c:ts79/grammars/tree-sitter-iex \
+ jaredramirez:tree-sitter-rescript:467dcf99f68c47823d7b378779a6b282d7ef9782:ts80/grammars/tree-sitter-rescript \
+ the-mikedavis:tree-sitter-erlang:9d4b36a76d5519e3dbf1ec4f4b61bb1a293f584c:ts81/grammars/tree-sitter-erlang \
+ fwcd:tree-sitter-kotlin:a4f71eb9b8c9b19ded3e0e9470be4b1b77c2b569:ts82/grammars/tree-sitter-kotlin \
+ MichaHoffmann:tree-sitter-hcl:3cb7fc28247efbcb2973b97e71c78838ad98a583:ts83/grammars/tree-sitter-hcl \
+ milisims:tree-sitter-org:698bb1a34331e68f83fc24bdd1b6f97016bb30de:ts84/grammars/tree-sitter-org \
+ JoranHonig:tree-sitter-solidity:08338dcee32603383fcef08f36321900bb7a354b:ts85/grammars/tree-sitter-solidity \
+ gleam-lang:tree-sitter-gleam:bcf9c45b56cbe46e9dac5eee0aee75df270000ac:ts86/grammars/tree-sitter-gleam \
+ zee-editor:tree-sitter-ron:7762d709a0f7c1f9e269d0125a2e8a7a69006146:ts87/grammars/tree-sitter-ron \
+ Hubro:tree-sitter-robot:322e4cc65754d2b3fdef4f2f8a71e0762e3d13af:ts88/grammars/tree-sitter-robot \
+ r-lib:tree-sitter-r:cc04302e1bff76fa02e129f332f44636813b0c3c:ts89/grammars/tree-sitter-r \
+ alex-pinkus:tree-sitter-swift:57c1c6d6ffa1c44b330182d41717e6fe37430704:ts90/grammars/tree-sitter-swift \
+ tree-sitter:tree-sitter-embedded-template:d21df11b0ecc6fd211dbe11278e92ef67bd17e97:ts91/grammars/tree-sitter-embedded-template \
+ connorlay:tree-sitter-eex:f742f2fe327463335e8671a87c0b9b396905d1d1:ts92/grammars/tree-sitter-eex \
+ phoenixframework:tree-sitter-heex:2e1348c3cf2c9323e87c2744796cf3f3868aa82a:ts93/grammars/tree-sitter-heex \
+ DerekStride:tree-sitter-sql:da2d1eff425b146d3c8cab7be8dfa98b11d896dc:ts94/grammars/tree-sitter-sql \
+ PrestonKnopp:tree-sitter-gdscript:1f1e782fe2600f50ae57b53876505b8282388d77:ts95/grammars/tree-sitter-gdscript \
+ PrestonKnopp:tree-sitter-godot-resource:2ffb90de47417018651fc3b970e5f6b67214dc9d:ts96/grammars/tree-sitter-godot-resource \
+ nushell:tree-sitter-nu:358c4f509eb97f0148bbd25ad36acc729819b9c1:ts97/grammars/tree-sitter-nu \
+ vala-lang:tree-sitter-vala:c9eea93ba2ec4ec1485392db11945819779745b3:ts98/grammars/tree-sitter-vala \
+ joelspadin:tree-sitter-devicetree:877adbfa0174d25894c40fa75ad52d4515a36368:ts100/grammars/tree-sitter-devicetree \
+ starkware-libs:tree-sitter-cairo:e3a0212261c125cb38248458cd856c0ffee2b398:ts101/grammars/tree-sitter-cairo \
+ fvacek:tree-sitter-cpon:0d01fcdae5a53191df5b1349f9bce053833270e7:ts102/grammars/tree-sitter-cpon \
+ tree-sitter-grammars:tree-sitter-odin:b5f668ef8918aab13812ce73acd89fe191fb8c5e:ts103/grammars/tree-sitter-odin \
+ staysail:tree-sitter-meson:32a83e8f200c347232fa795636cfe60dde22957a:ts104/grammars/tree-sitter-meson \
+ metio:tree-sitter-ssh-client-config:e45c6d5c71657344d4ecaf87dafae7736f776c57:ts105/grammars/tree-sitter-sshclientconfig \
+ 6cdh:tree-sitter-scheme:af3af6c9356b936f8a515a1e449c32e804c2b1a8:ts106/grammars/tree-sitter-scheme \
+ v-analyzer:v-analyzer:e14fdf6e661b10edccc744102e4ccf0b187aa8ad:ts107/grammars/tree-sitter-v \
+ tree-sitter:tree-sitter-verilog:4457145e795b363f072463e697dfe2f6973c9a52:ts108/grammars/tree-sitter-verilog \
+ the-mikedavis:tree-sitter-edoc:74774af7b45dd9cefbf9510328fc6ff2374afc50:ts109/grammars/tree-sitter-edoc \
+ tree-sitter:tree-sitter-jsdoc:189a6a4829beb9cdbe837260653b4a3dfb0cc3db:ts110/grammars/tree-sitter-jsdoc \
+ bollian:tree-sitter-openscad:5c3ce93df0ac1da7197cf6ae125aade26d6b8972:ts111/grammars/tree-sitter-openscad \
+ victorhqc:tree-sitter-prisma:eca2596a355b1a9952b4f80f8f9caed300a272b5:ts112/grammars/tree-sitter-prisma \
+ sogaiu:tree-sitter-clojure:e57c569ae332ca365da623712ae1f50f84daeae2:ts113/grammars/tree-sitter-clojure \
+ ckafi:tree-sitter-elvish:e50787cadd3bc54f6d9c0704493a79078bb8a4e5:ts114/grammars/tree-sitter-elvish \
+ stadelmanma:tree-sitter-fortran:f0f2f100952a353e64e26b0fa710b4c296d7af13:ts115/grammars/tree-sitter-fortran \
+ Philipp-M:tree-sitter-ungrammar:a7e104629cff5a8b7367187610631e8f5eb7c6ea:ts116/grammars/tree-sitter-ungrammar \
+ rydesun:tree-sitter-dot:917230743aa10f45a408fea2ddb54bbbf5fbe7b7:ts117/grammars/tree-sitter-dot \
+ eonpatapon:tree-sitter-cue:61843e3beebf19417e4fede4e8be4df1084317ad:ts118/grammars/tree-sitter-cue \
+ slint-ui:tree-sitter-slint:4a0558cc0fcd7a6110815b9bbd7cc12d7ab31e74:ts119/grammars/tree-sitter-slint \
+ alexanderbrevig:tree-sitter-task:f2cb435c5dbf3ee19493e224485d977cb2d36d8b:ts120/grammars/tree-sitter-task \
+ synaptiko:tree-sitter-xit:7d7902456061bc2ad21c64c44054f67b5515734c:ts121/grammars/tree-sitter-xit \
+ greym0uth:tree-sitter-esdl:df83acc8cacd0cfb139eecee0e718dc32c4f92e2:ts122/grammars/tree-sitter-esdl \
+ Isopod:tree-sitter-pascal:2fd40f477d3e2794af152618ccfac8d92eb72a66:ts123/grammars/tree-sitter-pascal \
+ Giorbo:tree-sitter-sml:bd4055d5554614520d4a0706b34dc0c317c6b608:ts124/grammars/tree-sitter-sml \
+ sourcegraph:tree-sitter-jsonnet:0475a5017ad7dc84845d1d33187f2321abcb261d:ts125/grammars/tree-sitter-jsonnet \
+ briot:tree-sitter-ada:ba0894efa03beb70780156b91e28c716b7a4764d:ts126/grammars/tree-sitter-ada \
+ virchau13:tree-sitter-astro:947e93089e60c66e681eba22283f4037841451e7:ts127/grammars/tree-sitter-astro \
+ vito:tree-sitter-bass:501133e260d768ed4e1fd7374912ed5c86d6fd90:ts128/grammars/tree-sitter-bass \
+ wasm-lsp:tree-sitter-wasm:2ca28a9f9d709847bf7a3de0942a84e912f59088:ts129/grammars/tree-sitter-wat \
+ wasm-lsp:tree-sitter-wasm:2ca28a9f9d709847bf7a3de0942a84e912f59088:ts130/grammars/tree-sitter-wast \
+ gdamore:tree-sitter-d:5566f8ce8fc24186fad06170bbb3c8d97c935d74:ts131/grammars/tree-sitter-d \
+ charmbracelet:tree-sitter-vhs:9534865e614c95eb9418e5e73f061c32fa4d9540:ts132/grammars/tree-sitter-vhs \
+ amaanq:tree-sitter-kdl:3ca569b9f9af43593c24f9e7a21f02f43a13bb88:ts133/grammars/tree-sitter-kdl \
+ RenjiSann:tree-sitter-xml:48a7c2b6fb9d515577e115e6788937e837815651:ts134/grammars/tree-sitter-xml \
+ KMikeeU:tree-sitter-dtd:6116becb02a6b8e9588ef73d300a9ba4622e156f:ts135/grammars/tree-sitter-dtd \
+ hh9527:tree-sitter-wit:c917790ab9aec50c5fd664cbfad8dd45110cfff3:ts136/grammars/tree-sitter-wit \
+ justinmk:tree-sitter-ini:4d247fb876b4ae6b347687de4a179511bf67fcbc:ts137/grammars/tree-sitter-ini \
+ inko-lang:tree-sitter-inko:7860637ce1b43f5f79cfb7cc3311bf3234e9479f:ts138/grammars/tree-sitter-inko \
+ the-mikedavis:tree-sitter-bicep:d8e097fcfa143854861ef737161163a09cc2916b:ts139/grammars/tree-sitter-bicep \
+ yuja:tree-sitter-qmljs:0b2b25bcaa7d4925d5f0dda16f6a99c588a437f1:ts140/grammars/tree-sitter-qmljs \
+ monaqa:tree-sitter-mermaid:d787c66276e7e95899230539f556e8b83ee16f6d:ts141/grammars/tree-sitter-mermaid \
+ acristoffers:tree-sitter-matlab:6071891a8c39600203eba20513666cf93b4d650a:ts142/grammars/tree-sitter-matlab \
+ mfelsche:tree-sitter-ponylang:ef66b151bc2604f431b5668fcec4747db4290e11:ts143/grammars/tree-sitter-ponylang \
+ jbellerb:tree-sitter-dhall:affb6ee38d629c9296749767ab832d69bb0d9ea8:ts144/grammars/tree-sitter-dhall \
+ mtoohey31:tree-sitter-pem:be67a4330a1aa507c7297bc322204f936ec1132c:ts145/grammars/tree-sitter-pem \
+ ath3:tree-sitter-passwd:20239395eacdc2e0923a7e5683ad3605aee7b716:ts146/grammars/tree-sitter-passwd \
+ ath3:tree-sitter-hosts:301b9379ce7dfc8bdbe2c2699a6887dcb73953f9:ts147/grammars/tree-sitter-hosts \
+ Jummit:tree-sitter-uxntal:d68406066648cd6db4c6a2f11ec305af02079884:ts148/grammars/tree-sitter-uxntal \
+ Philipp-M:tree-sitter-yuck:e3d91a3c65decdea467adebe4127b8366fa47919:ts149/grammars/tree-sitter-yuck \
+ PRQL:tree-sitter-prql:09e158cd3650581c0af4c49c2e5b10c4834c8646:ts150/grammars/tree-sitter-prql \
+ erasin:tree-sitter-po:417cee9abb2053ed26b19e7de972398f2da9b29e:ts151/grammars/tree-sitter-po \
+ naclsn:tree-sitter-nasm:a0db15db6fcfb1bf2cc8702500e55e558825c48b:ts152/grammars/tree-sitter-nasm \
+ sirius94:tree-sitter-gas:60f443646b20edee3b7bf18f3a4fb91dc214259a:ts153/grammars/tree-sitter-gas \
+ stsewd:tree-sitter-rst:25e6328872ac3a764ba8b926aea12719741103f1:ts154/grammars/tree-sitter-rst \
+ amaanq:tree-sitter-capnp:fc6e2addf103861b9b3dffb82c543eb6b71061aa:ts155/grammars/tree-sitter-capnp \
+ indoorvivants:tree-sitter-smithy:8327eb84d55639ffbe08c9dc82da7fff72a1ad07:ts156/grammars/tree-sitter-smithy \
+ teburd:tree-sitter-vhdl:c57313adee2231100db0a7880033f6865deeadb2:ts157/grammars/tree-sitter-vhdl \
+ FallenAngel97:tree-sitter-rego:9ac75e71b2d791e0aadeef68098319d86a2a14cf:ts158/grammars/tree-sitter-rego \
+ alaviss:tree-sitter-nim:c5f0ce3b65222f5dbb1a12f9fe894524881ad590:ts159/grammars/tree-sitter-nim \
+ pfeiferj:tree-sitter-hurl:cd1a0ada92cc73dd0f4d7eedc162be4ded758591:ts160/grammars/tree-sitter-hurl \
+ markdoc-extra:tree-sitter-markdoc:5ffe71b29e8a3f94823913ea9cea51fcfa7e3bf8:ts161/grammars/tree-sitter-markdoc \
+ lefp:tree-sitter-opencl:8e1d24a57066b3cd1bb9685bbc1ca9de5c1b78fb:ts162/grammars/tree-sitter-opencl \
+ IndianBoy42:tree-sitter-just:379fbe36d1e441bc9414ea050ad0c85c9d6935ea:ts163/grammars/tree-sitter-just \
+ willcassella:tree-sitter-gn:e18d6e36a79b20dafb58f19d407bd38b0e60260e:ts164/grammars/tree-sitter-gn \
+ alexanderbrevig:tree-sitter-forth:90189238385cf636b9ee99ce548b9e5b5e569d48:ts166/grammars/tree-sitter-forth \
+ kaashyapan:tree-sitter-fsharp:18da392fd9bd5e79f357abcce13f61f3a15e3951:ts167/grammars/tree-sitter-fsharp \
+ uben0:tree-sitter-typst:13863ddcbaa7b68ee6221cea2e3143415e64aea4:ts169/grammars/tree-sitter-typst \
+ varpeti:tree-sitter-jinja2:a533cd3c33aea6acb0f9bf9a56f35dcfe6a8eb53:ts170/grammars/tree-sitter-jinja2 \
+ kareigu:tree-sitter-jjdescription:2ddec6cad07b366aee276a608e1daa2c29d3caf2:ts171/grammars/tree-sitter-jjdescription \
+ kylegoetz:tree-sitter-unison:1f505e2447fa876a87aee47ff3d70b9e141c744f:ts173/grammars/tree-sitter-unison \
+ arnarg:tree-sitter-todotxt:3937c5cd105ec4127448651a21aef45f52d19609:ts174/grammars/tree-sitter-todotxt \
+ sigmaSd:tree-sitter-strace:2b18fdf9a01e7ec292cc6006724942c81beb7fd5:ts175/grammars/tree-sitter-strace \
+ tree-sitter:tree-sitter-agda:c21c3a0f996363ed17b8ac99d827fe5a4821f217:ts177/grammars/tree-sitter-agda \
+ vrischmann:tree-sitter-templ:db662414ccd6f7c78b1e834e7abe11c224b04759:ts178/grammars/tree-sitter-templ \
+ dynamotn:tree-sitter-dbml:2e2fa5640268c33c3d3f27f7e676f631a9c68fd9:ts179/grammars/tree-sitter-dbml \
+ tree-sitter-grammars:tree-sitter-bitbake:10bacac929ff36a1e8f4056503fe4f8717b21b94:ts180/grammars/tree-sitter-bitbake \
+ Tudyx:tree-sitter-log:62cfe307e942af3417171243b599cc7deac5eab9:ts181/grammars/tree-sitter-log \
+ urbit-pilled:tree-sitter-hoon:1d5df35af3e0afe592832a67b9fb3feeeba1f7b6:ts182/grammars/tree-sitter-hoon \
+ antosha417:tree-sitter-hocon:c390f10519ae69fdb03b3e5764f5592fb6924bcc:ts183/grammars/tree-sitter-hocon \
+ mtoohey31:tree-sitter-koka:96d070c3700692858035f3524cc0ad944cef2594:ts184/grammars/tree-sitter-koka \
+ tact-lang:tree-sitter-tact:ec57ab29c86d632639726631fb2bb178d23e1c91:ts185/grammars/tree-sitter-tact \
+ apple:tree-sitter-pkl:c03f04a313b712f8ab00a2d862c10b37318699ae:ts186/grammars/tree-sitter-pkl \
+ murtaza64:tree-sitter-groovy:235009aad0f580211fc12014bb0846c3910130c1:ts187/grammars/tree-sitter-groovy \
+ google:tree-sitter-fidl:bdbb635a7f5035e424f6173f2f11b9cd79703f8d:ts188/grammars/tree-sitter-fidl \
+ airbus-cert:tree-sitter-powershell:c9316be0faca5d5b9fd3b57350de650755f42dc0:ts189/grammars/tree-sitter-powershell \
+ mtoohey31:tree-sitter-ld:0e9695ae0ede47b8744a8e2ad44d4d40c5d4e4c9:ts190/grammars/tree-sitter-ld \
+ tree-sitter-grammars:tree-sitter-hyprlang:27af9b74acf89fa6bed4fb8cb8631994fcb2e6f3:ts191/grammars/tree-sitter-hyprlang \
+ tree-sitter-grammars:tree-sitter-tcl:56ad1fa6a34ba800e5495d1025a9b0fda338d5b8:ts192/grammars/tree-sitter-tcl \
+ madskjeldgaard:tree-sitter-supercollider:3b35bd0fded4423c8fb30e9585c7bacbcd0e8095:ts193/grammars/tree-sitter-supercollider \
+ ember-tooling:tree-sitter-glimmer:5dc6d1040e8ff8978ff3680e818d85447bbc10aa:ts194/grammars/tree-sitter-glimmer \
+ novusnota:tree-sitter-ohm:80f14f0e477ddacc1e137d5ed8e830329e3fb7a3:ts195/grammars/tree-sitter-ohm \
+ glehmann:tree-sitter-earthfile:dbfb970a59cd87b628d087eb8e3fbe19c8e20601:ts196/grammars/tree-sitter-earthfile \
+ adl-lang:tree-sitter-adl:2787d04beadfbe154d3f2da6e98dc45a1b134bbf:ts197/grammars/tree-sitter-adl \
+ kepet19:tree-sitter-ldif:0a917207f65ba3e3acfa9cda16142ee39c4c1aaa:ts198/grammars/tree-sitter-ldif \
+ Alexis-Lapierre:tree-sitter-xtc:7bc11b736250c45e25cfb0215db2f8393779957e:ts199/grammars/tree-sitter-xtc \
+ tzakian:tree-sitter-move:8bc0d1692caa8763fef54d48068238d9bf3c0264:ts200/grammars/tree-sitter-move \
+ pest-parser:tree-sitter-pest:a8a98a824452b1ec4da7f508386a187a2f234b85:ts201/grammars/tree-sitter-pest \
+ Wilfred:tree-sitter-elisp:e5524fdccf8c22fc726474a910e4ade976dfc7bb:ts202/grammars/tree-sitter-elisp
diff --git a/textproc/tree-sitter-grammars/Makefile.crates b/textproc/tree-sitter-grammars/Makefile.crates
new file mode 100644
index 000000000000..568ad7af0e57
--- /dev/null
+++ b/textproc/tree-sitter-grammars/Makefile.crates
@@ -0,0 +1,54 @@
+CARGO_CRATES= anstyle-1.0.8 \
+ anyhow-1.0.86 \
+ cc-1.1.7 \
+ cfg-if-1.0.0 \
+ clap-4.5.13 \
+ clap_builder-4.5.13 \
+ clap_derive-4.5.13 \
+ clap_lex-0.7.2 \
+ dunce-1.0.4 \
+ either-1.13.0 \
+ equivalent-1.0.1 \
+ hashbrown-0.14.5 \
+ heck-0.5.0 \
+ indexmap-2.3.0 \
+ itertools-0.12.1 \
+ lazy_static-1.5.0 \
+ memchr-2.7.4 \
+ nu-ansi-term-0.46.0 \
+ once_cell-1.19.0 \
+ overload-0.1.1 \
+ pin-project-lite-0.2.14 \
+ proc-macro2-1.0.86 \
+ quote-1.0.36 \
+ same-file-1.0.6 \
+ serde-1.0.204 \
+ serde_derive-1.0.204 \
+ serde_spanned-0.6.7 \
+ sharded-slab-0.1.7 \
+ syn-2.0.72 \
+ thread_local-1.1.8 \
+ toml-0.8.19 \
+ toml_datetime-0.6.8 \
+ toml_edit-0.22.20 \
+ tracing-0.1.40 \
+ tracing-attributes-0.1.27 \
+ tracing-core-0.1.32 \
+ tracing-subscriber-0.3.18 \
+ unicode-ident-1.0.12 \
+ walkdir-2.5.0 \
+ winapi-0.3.9 \
+ winapi-i686-pc-windows-gnu-0.4.0 \
+ winapi-util-0.1.9 \
+ winapi-x86_64-pc-windows-gnu-0.4.0 \
+ windows-sys-0.59.0 \
+ windows-targets-0.52.6 \
+ windows_aarch64_gnullvm-0.52.6 \
+ windows_aarch64_msvc-0.52.6 \
+ windows_i686_gnu-0.52.6 \
+ windows_i686_gnullvm-0.52.6 \
+ windows_i686_msvc-0.52.6 \
+ windows_x86_64_gnu-0.52.6 \
+ windows_x86_64_gnullvm-0.52.6 \
+ windows_x86_64_msvc-0.52.6 \
+ winnow-0.6.18
diff --git a/textproc/tree-sitter-grammars/distinfo b/textproc/tree-sitter-grammars/distinfo
new file mode 100644
index 000000000000..d890b9b8b2b9
--- /dev/null
+++ b/textproc/tree-sitter-grammars/distinfo
@@ -0,0 +1,511 @@
+TIMESTAMP = 1756728877
+SHA256 (863cea9f83ad5637300478e0559262f1e791684b.tar.gz) = fe7c9e240ec7b77174061c96980c5d708bd8016793121d49ca7b3ac92c55f9e5
+SIZE (863cea9f83ad5637300478e0559262f1e791684b.tar.gz) = 38370
+SHA256 (db7372e60c722ca7f12ab359e57e6bf7611ab126.tar.gz) = bdf44d3d144e5e25401d567a6e803849857e2b9fc0a7e2359f592ca8ba2a99e5
+SIZE (db7372e60c722ca7f12ab359e57e6bf7611ab126.tar.gz) = 22929
+SHA256 (6da5e3cbabd376b566d04282005e52ffe67ef74a.tar.gz) = 3439e4bb95c246c1d1a5396b57cf8e2fda073885c79bc6624e1dbdda7b016e89
+SIZE (6da5e3cbabd376b566d04282005e52ffe67ef74a.tar.gz) = 1390042
+SHA256 (3cc5e4bdf572d5df4277fc2e54d6299bd59a54b3.tar.gz) = 8da6c0db66d71db423213debda1298aa023f00e17976e3c8e56b36ec8ae2b895
+SIZE (3cc5e4bdf572d5df4277fc2e54d6299bd59a54b3.tar.gz) = 11158
+SHA256 (07035a248943575444aa0b893ffe306e1444c0ab.tar.gz) = a59074fff56ce73fd8c2b2e5609977b6ce22c6aa2b41452f5732339c1b7186a4
+SIZE (07035a248943575444aa0b893ffe306e1444c0ab.tar.gz) = 92672
+SHA256 (0a4432b104099534f7a25b8ea4148234db146ab6/languages.toml) = 600842bec59d9cb1622ab46c2a6d7b2ca80f6de44f24f124900ce850abd72ef7
+SIZE (0a4432b104099534f7a25b8ea4148234db146ab6/languages.toml) = 103835
+SHA256 (6748694be32f11e7ec6b5faeb1b48ca6156d4e06.tar.gz) = 3550ddcbc7c7aefc021a9e810cc0515e3ac4087ae8166d9cf712d16596afabfb
+SIZE (6748694be32f11e7ec6b5faeb1b48ca6156d4e06.tar.gz) = 68260
+SHA256 (rust/crates/anstyle-1.0.8.crate) = 1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1
+SIZE (rust/crates/anstyle-1.0.8.crate) = 15771
+SHA256 (rust/crates/anyhow-1.0.86.crate) = b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da
+SIZE (rust/crates/anyhow-1.0.86.crate) = 46741
+SHA256 (rust/crates/cc-1.1.7.crate) = 26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc
+SIZE (rust/crates/cc-1.1.7.crate) = 81694
+SHA256 (rust/crates/cfg-if-1.0.0.crate) = baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd
+SIZE (rust/crates/cfg-if-1.0.0.crate) = 7934
+SHA256 (rust/crates/clap-4.5.13.crate) = 0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc
+SIZE (rust/crates/clap-4.5.13.crate) = 56267
+SHA256 (rust/crates/clap_builder-4.5.13.crate) = 64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99
+SIZE (rust/crates/clap_builder-4.5.13.crate) = 164093
+SHA256 (rust/crates/clap_derive-4.5.13.crate) = 501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0
+SIZE (rust/crates/clap_derive-4.5.13.crate) = 30132
+SHA256 (rust/crates/clap_lex-0.7.2.crate) = 1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97
+SIZE (rust/crates/clap_lex-0.7.2.crate) = 12805
+SHA256 (rust/crates/dunce-1.0.4.crate) = 56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b
+SIZE (rust/crates/dunce-1.0.4.crate) = 8034
+SHA256 (rust/crates/either-1.13.0.crate) = 60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0
+SIZE (rust/crates/either-1.13.0.crate) = 19169
+SHA256 (rust/crates/equivalent-1.0.1.crate) = 5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5
+SIZE (rust/crates/equivalent-1.0.1.crate) = 6615
+SHA256 (rust/crates/hashbrown-0.14.5.crate) = e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1
+SIZE (rust/crates/hashbrown-0.14.5.crate) = 141498
+SHA256 (rust/crates/heck-0.5.0.crate) = 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea
+SIZE (rust/crates/heck-0.5.0.crate) = 11517
+SHA256 (rust/crates/indexmap-2.3.0.crate) = de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0
+SIZE (rust/crates/indexmap-2.3.0.crate) = 83027
+SHA256 (rust/crates/itertools-0.12.1.crate) = ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569
+SIZE (rust/crates/itertools-0.12.1.crate) = 137761
+SHA256 (rust/crates/lazy_static-1.5.0.crate) = bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe
+SIZE (rust/crates/lazy_static-1.5.0.crate) = 14025
+SHA256 (rust/crates/memchr-2.7.4.crate) = 78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3
+SIZE (rust/crates/memchr-2.7.4.crate) = 96670
+SHA256 (rust/crates/nu-ansi-term-0.46.0.crate) = 77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84
+SIZE (rust/crates/nu-ansi-term-0.46.0.crate) = 24311
+SHA256 (rust/crates/once_cell-1.19.0.crate) = 3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92
+SIZE (rust/crates/once_cell-1.19.0.crate) = 33046
+SHA256 (rust/crates/overload-0.1.1.crate) = b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39
+SIZE (rust/crates/overload-0.1.1.crate) = 24439
+SHA256 (rust/crates/pin-project-lite-0.2.14.crate) = bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02
+SIZE (rust/crates/pin-project-lite-0.2.14.crate) = 28817
+SHA256 (rust/crates/proc-macro2-1.0.86.crate) = 5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77
+SIZE (rust/crates/proc-macro2-1.0.86.crate) = 48958
+SHA256 (rust/crates/quote-1.0.36.crate) = 0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7
+SIZE (rust/crates/quote-1.0.36.crate) = 28507
+SHA256 (rust/crates/same-file-1.0.6.crate) = 93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502
+SIZE (rust/crates/same-file-1.0.6.crate) = 10183
+SHA256 (rust/crates/serde-1.0.204.crate) = bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12
+SIZE (rust/crates/serde-1.0.204.crate) = 78253
+SHA256 (rust/crates/serde_derive-1.0.204.crate) = e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222
+SIZE (rust/crates/serde_derive-1.0.204.crate) = 55871
+SHA256 (rust/crates/serde_spanned-0.6.7.crate) = eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d
+SIZE (rust/crates/serde_spanned-0.6.7.crate) = 9164
+SHA256 (rust/crates/sharded-slab-0.1.7.crate) = f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6
+SIZE (rust/crates/sharded-slab-0.1.7.crate) = 58227
+SHA256 (rust/crates/syn-2.0.72.crate) = dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af
+SIZE (rust/crates/syn-2.0.72.crate) = 267069
+SHA256 (rust/crates/thread_local-1.1.8.crate) = 8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c
+SIZE (rust/crates/thread_local-1.1.8.crate) = 13962
+SHA256 (rust/crates/toml-0.8.19.crate) = a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e
+SIZE (rust/crates/toml-0.8.19.crate) = 50974
+SHA256 (rust/crates/toml_datetime-0.6.8.crate) = 0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41
+SIZE (rust/crates/toml_datetime-0.6.8.crate) = 12028
+SHA256 (rust/crates/toml_edit-0.22.20.crate) = 583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d
+SIZE (rust/crates/toml_edit-0.22.20.crate) = 106726
+SHA256 (rust/crates/tracing-0.1.40.crate) = c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef
+SIZE (rust/crates/tracing-0.1.40.crate) = 79459
+SHA256 (rust/crates/tracing-attributes-0.1.27.crate) = 34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7
+SIZE (rust/crates/tracing-attributes-0.1.27.crate) = 32241
+SHA256 (rust/crates/tracing-core-0.1.32.crate) = c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54
+SIZE (rust/crates/tracing-core-0.1.32.crate) = 61221
+SHA256 (rust/crates/tracing-subscriber-0.3.18.crate) = ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b
+SIZE (rust/crates/tracing-subscriber-0.3.18.crate) = 196312
+SHA256 (rust/crates/unicode-ident-1.0.12.crate) = 3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b
+SIZE (rust/crates/unicode-ident-1.0.12.crate) = 42168
+SHA256 (rust/crates/walkdir-2.5.0.crate) = 29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b
+SIZE (rust/crates/walkdir-2.5.0.crate) = 23951
+SHA256 (rust/crates/winapi-0.3.9.crate) = 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419
+SIZE (rust/crates/winapi-0.3.9.crate) = 1200382
+SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6
+SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = 2918815
+SHA256 (rust/crates/winapi-util-0.1.9.crate) = cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb
+SIZE (rust/crates/winapi-util-0.1.9.crate) = 12464
+SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
+SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 2947998
+SHA256 (rust/crates/windows-sys-0.59.0.crate) = 1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b
+SIZE (rust/crates/windows-sys-0.59.0.crate) = 2387323
+SHA256 (rust/crates/windows-targets-0.52.6.crate) = 9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973
+SIZE (rust/crates/windows-targets-0.52.6.crate) = 6403
+SHA256 (rust/crates/windows_aarch64_gnullvm-0.52.6.crate) = 32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3
+SIZE (rust/crates/windows_aarch64_gnullvm-0.52.6.crate) = 435718
+SHA256 (rust/crates/windows_aarch64_msvc-0.52.6.crate) = 09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469
+SIZE (rust/crates/windows_aarch64_msvc-0.52.6.crate) = 832615
+SHA256 (rust/crates/windows_i686_gnu-0.52.6.crate) = 8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b
+SIZE (rust/crates/windows_i686_gnu-0.52.6.crate) = 880402
+SHA256 (rust/crates/windows_i686_gnullvm-0.52.6.crate) = 0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66
+SIZE (rust/crates/windows_i686_gnullvm-0.52.6.crate) = 475940
+SHA256 (rust/crates/windows_i686_msvc-0.52.6.crate) = 240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66
+SIZE (rust/crates/windows_i686_msvc-0.52.6.crate) = 901163
+SHA256 (rust/crates/windows_x86_64_gnu-0.52.6.crate) = 147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78
+SIZE (rust/crates/windows_x86_64_gnu-0.52.6.crate) = 836363
+SHA256 (rust/crates/windows_x86_64_gnullvm-0.52.6.crate) = 24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d
+SIZE (rust/crates/windows_x86_64_gnullvm-0.52.6.crate) = 435707
+SHA256 (rust/crates/windows_x86_64_msvc-0.52.6.crate) = 589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec
+SIZE (rust/crates/windows_x86_64_msvc-0.52.6.crate) = 832564
+SHA256 (rust/crates/winnow-0.6.18.crate) = 68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f
+SIZE (rust/crates/winnow-0.6.18.crate) = 163357
+SHA256 (lapce-tree-sitter-grammars-v0.4.2+1f9f9dd_GH0.tar.gz) = ff4dde64caf5f08a1adf0d2f2edcbb51a4ef3a42fedd6367bb59ff795513a5e9
+SIZE (lapce-tree-sitter-grammars-v0.4.2+1f9f9dd_GH0.tar.gz) = 7427
+SHA256 (tree-sitter-tree-sitter-rust-9c84af007b0f144954adb26b3f336495cbb320a7_GH0.tar.gz) = 9e0ab987ca5754e64807a874e28c58e879ad7bd4c17df4d4ac829e66f4367d75
+SIZE (tree-sitter-tree-sitter-rust-9c84af007b0f144954adb26b3f336495cbb320a7_GH0.tar.gz) = 434065
+SHA256 (FuelLabs-tree-sitter-sway-e491a005ee1d310f4c138bf215afd44cfebf959c_GH0.tar.gz) = 038f0997954eed8158404b7759e3ecee4262fb312f9f1a812a3eb404ed19269e
+SIZE (FuelLabs-tree-sitter-sway-e491a005ee1d310f4c138bf215afd44cfebf959c_GH0.tar.gz) = 251319
+SHA256 (ikatyang-tree-sitter-toml-7cff70bbcbbc62001b465603ca1ea88edd668704_GH0.tar.gz) = 93f36067123041867dabfd649c3588186c1643dfb1f69ad1fea3377c5b693294
+SIZE (ikatyang-tree-sitter-toml-7cff70bbcbbc62001b465603ca1ea88edd668704_GH0.tar.gz) = 162420
+SHA256 (Beaglefoot-tree-sitter-awk-a799bc5da7c2a84bc9a06ba5f3540cf1191e4ee3_GH0.tar.gz) = 6744809bcc3fcabcd66a1d05ba5842c04a7eb2b8ed0ccf459e329c245ba6757b
+SIZE (Beaglefoot-tree-sitter-awk-a799bc5da7c2a84bc9a06ba5f3540cf1191e4ee3_GH0.tar.gz) = 140974
+SHA256 (yusdacra-tree-sitter-protobuf-19c211a01434d9f03efff99f85e19f967591b175_GH0.tar.gz) = c2fd2810873a2d189b3ea4b40facea6443b0b1f4b5d3e80aedc46c6bec3c2953
+SIZE (yusdacra-tree-sitter-protobuf-19c211a01434d9f03efff99f85e19f967591b175_GH0.tar.gz) = 36678
+SHA256 (elixir-lang-tree-sitter-elixir-b20eaa75565243c50be5e35e253d8beb58f45d56_GH0.tar.gz) = 60d40aac41a64c9fe338336c27aaddc6747ac7bd1da941ac1187464bfe475939
+SIZE (elixir-lang-tree-sitter-elixir-b20eaa75565243c50be5e35e253d8beb58f45d56_GH0.tar.gz) = 594652
+SHA256 (ram02z-tree-sitter-fish-84436cf24c2b3176bfbb220922a0fdbd0141e406_GH0.tar.gz) = b76a38020cd4a2af27fc5891b4a257981e039f6e8e88a9a4652edfb68b79776f
+SIZE (ram02z-tree-sitter-fish-84436cf24c2b3176bfbb220922a0fdbd0141e406_GH0.tar.gz) = 56036
+SHA256 (lsh-tree-sitter-mojo-3d7c53b8038f9ebbb57cd2e61296180aa5c1cf64_GH0.tar.gz) = fed56c962b12c08dc37c47ec172cc944d4e09ade505e7b6b63f2da6073ae63c9
+SIZE (lsh-tree-sitter-mojo-3d7c53b8038f9ebbb57cd2e61296180aa5c1cf64_GH0.tar.gz) = 296400
+SHA256 (sogaiu-tree-sitter-janet-simple-51271e260346878e1a1aa6c506ce6a797b7c25e2_GH0.tar.gz) = e9b07af9c1664f07f1822511a7dae4ede8852d846c8b15d0c6c110f4167c397e
+SIZE (sogaiu-tree-sitter-janet-simple-51271e260346878e1a1aa6c506ce6a797b7c25e2_GH0.tar.gz) = 38483
+SHA256 (tree-sitter-tree-sitter-json-73076754005a460947cafe8e03a8cf5fa4fa2938_GH0.tar.gz) = 8915d65c0cfe9e601de7c1d9df9fe90a750bf7986a08293a901b136c6dc17dde
+SIZE (tree-sitter-tree-sitter-json-73076754005a460947cafe8e03a8cf5fa4fa2938_GH0.tar.gz) = 13568
+SHA256 (Joakker-tree-sitter-json5-c23f7a9b1ee7d45f516496b1e0e4be067264fa0d_GH0.tar.gz) = 69d1cd7aaa463fcf29fe40a0541a969192fd1057b55299183915ea0ce00be1dc
+SIZE (Joakker-tree-sitter-json5-c23f7a9b1ee7d45f516496b1e0e4be067264fa0d_GH0.tar.gz) = 18151
+SHA256 (tree-sitter-tree-sitter-c-7175a6dd5fc1cee660dce6fe23f6043d75af424a_GH0.tar.gz) = 617ab936681b75d45fb5dc26a58888552167f174d996b7e274fb4af090b62e5b
+SIZE (tree-sitter-tree-sitter-c-7175a6dd5fc1cee660dce6fe23f6043d75af424a_GH0.tar.gz) = 249834
+SHA256 (tree-sitter-tree-sitter-cpp-670404d7c689be1c868a46f919ba2a3912f2b7ef_GH0.tar.gz) = 8f7906cd42871cb8e9b4566133577553dd1910a65180db021cdbb3f3844b44a7
+SIZE (tree-sitter-tree-sitter-cpp-670404d7c689be1c868a46f919ba2a3912f2b7ef_GH0.tar.gz) = 717987
+SHA256 (tree-sitter-tree-sitter-c-sharp-5b60f99545fea00a33bbfae5be956f684c4c69e2_GH0.tar.gz) = e3eb979624d6133edce8d7dd634bfb2a09a5afdea8d8922c088c8709fabdda1e
+SIZE (tree-sitter-tree-sitter-c-sharp-5b60f99545fea00a33bbfae5be956f684c4c69e2_GH0.tar.gz) = 1050713
+SHA256 (bufbuild-tree-sitter-cel-9f2b65da14c216df53933748e489db0f11121464_GH0.tar.gz) = 2d80c0c13fe04046a1c4145c65e61b42358a105d9a7e2c2ad509e456ee9c73b7
+SIZE (bufbuild-tree-sitter-cel-9f2b65da14c216df53933748e489db0f11121464_GH0.tar.gz) = 55860
+SHA256 (jzelinskie-tree-sitter-spicedb-a4e4645651f86d6684c15dfa9931b7841dc52a66_GH0.tar.gz) = 39bb5a8a8882e14889f05881f352ff481ad5773a2f5b434752e9d1d8d605374c
+SIZE (jzelinskie-tree-sitter-spicedb-a4e4645651f86d6684c15dfa9931b7841dc52a66_GH0.tar.gz) = 27447
+SHA256 (tree-sitter-tree-sitter-go-64457ea6b73ef5422ed1687178d4545c3e91334a_GH0.tar.gz) = 039d827c7af2659a3f2d76511602c50c2528e5648f11a13da98c0ba253986093
+SIZE (tree-sitter-tree-sitter-go-64457ea6b73ef5422ed1687178d4545c3e91334a_GH0.tar.gz) = 174010
+SHA256 (camdencheek-tree-sitter-go-mod-e8f51f8e4363a3d9a427e8f63f4c1bbc5ef5d8d0_GH0.tar.gz) = 5e0fb1303f52379bd59da781dceb07cd10fb4a0f37acd5f9fa933bf8563d4597
+SIZE (camdencheek-tree-sitter-go-mod-e8f51f8e4363a3d9a427e8f63f4c1bbc5ef5d8d0_GH0.tar.gz) = 18696
+SHA256 (dannylongeuay-tree-sitter-go-template-395a33e08e69f4155156f0b90138a6c86764c979_GH0.tar.gz) = 39394ff1d78c8bb89a1933fd9ab70da08a091a5389277d32c2de04a27c016e4d
+SIZE (dannylongeuay-tree-sitter-go-template-395a33e08e69f4155156f0b90138a6c86764c979_GH0.tar.gz) = 63721
+SHA256 (omertuc-tree-sitter-go-work-6dd9dd79fb51e9f2abc829d5e97b15015b6a8ae2_GH0.tar.gz) = 341627f8204402d3a45382700ab2d720396817f29b799e0a3cacf3dbc7933606
+SIZE (omertuc-tree-sitter-go-work-6dd9dd79fb51e9f2abc829d5e97b15015b6a8ae2_GH0.tar.gz) = 14980
+SHA256 (tree-sitter-tree-sitter-javascript-f772967f7b7bc7c28f845be2420a38472b16a8ee_GH0.tar.gz) = 551cb23a93154773138d4545421979444c14b235e663b0822ae1438d6bdd9c47
+SIZE (tree-sitter-tree-sitter-javascript-f772967f7b7bc7c28f845be2420a38472b16a8ee_GH0.tar.gz) = 303432
+SHA256 (tree-sitter-tree-sitter-typescript-b1bf4825d9eaa0f3bdeb1e52f099533328acfbdf_GH0.tar.gz) = c2015c7b4fbc4c0f609af72e360e58361c92b84cedf1917f9eb1cf9b01595b5e
+SIZE (tree-sitter-tree-sitter-typescript-b1bf4825d9eaa0f3bdeb1e52f099533328acfbdf_GH0.tar.gz) = 844003
+SHA256 (tree-sitter-tree-sitter-css-769203d0f9abe1a9a691ac2b9fe4bb4397a73c51_GH0.tar.gz) = ca9610e9a2afecc94731d57e82fa94ebf1bcbd260d9271deec9b27190d68d777
+SIZE (tree-sitter-tree-sitter-css-769203d0f9abe1a9a691ac2b9fe4bb4397a73c51_GH0.tar.gz) = 80956
+SHA256 (serenadeai-tree-sitter-scss-c478c6868648eff49eb04a4df90d703dc45b312a_GH0.tar.gz) = d2178b5ba07e1fea9be0dd2d2c4c083805cc19678362e619144505e14f61dfa2
+SIZE (serenadeai-tree-sitter-scss-c478c6868648eff49eb04a4df90d703dc45b312a_GH0.tar.gz) = 77978
+SHA256 (tree-sitter-tree-sitter-html-29f53d8f4f2335e61bf6418ab8958dac3282077a_GH0.tar.gz) = 9f7a6285c10b44cf6794122516247e2368ba6a0167b3c44989b16c75f0d221c0
+SIZE (tree-sitter-tree-sitter-html-29f53d8f4f2335e61bf6418ab8958dac3282077a_GH0.tar.gz) = 20234
+SHA256 (tree-sitter-tree-sitter-python-4bfdd9033a2225cc95032ce77066b7aeca9e2efc_GH0.tar.gz) = d815b5ecbe3a098ac62127922d617c46ba400347a711d26396fba58e728380b6
+SIZE (tree-sitter-tree-sitter-python-4bfdd9033a2225cc95032ce77066b7aeca9e2efc_GH0.tar.gz) = 252108
+SHA256 (nickel-lang-tree-sitter-nickel-e1d9337864d209898a08c26b8cd4c2dd14c15148_GH0.tar.gz) = fd985c5e2345718b2a16dfecfdfe9c354124899395fce976a88fe33b7739239e
+SIZE (nickel-lang-tree-sitter-nickel-e1d9337864d209898a08c26b8cd4c2dd14c15148_GH0.tar.gz) = 90764
+SHA256 (nix-community-tree-sitter-nix-1b69cf1fa92366eefbe6863c184e5d2ece5f187d_GH0.tar.gz) = 4a27550ee164cd01cdc983e9c659ba9c84918db92f6eaa3db0f6c338e446ce11
+SIZE (nix-community-tree-sitter-nix-1b69cf1fa92366eefbe6863c184e5d2ece5f187d_GH0.tar.gz) = 51451
+SHA256 (tree-sitter-tree-sitter-ruby-206c7077164372c596ffa8eaadb9435c28941364_GH0.tar.gz) = 782593d1a868ea51ea546979760fc61c1f4f0580ba85063c1c25b364a1aebdb0
+SIZE (tree-sitter-tree-sitter-ruby-206c7077164372c596ffa8eaadb9435c28941364_GH0.tar.gz) = 604587
+SHA256 (tree-sitter-tree-sitter-bash-f8fb3274f72a30896075585b32b0c54cad65c086_GH0.tar.gz) = db8b4f220c81f78799b9f1afe4136d0e9c23dfe2bd9dba932735bbc08d769aa6
+SIZE (tree-sitter-tree-sitter-bash-f8fb3274f72a30896075585b32b0c54cad65c086_GH0.tar.gz) = 557225
+SHA256 (tree-sitter-tree-sitter-php-f860e598194f4a71747f91789bf536b393ad4a56_GH0.tar.gz) = 10dd9365746b3d3e3aaa8c8d5aba62cf49ffdbc61c20b0388196a53a4b3b3f38
+SIZE (tree-sitter-tree-sitter-php-f860e598194f4a71747f91789bf536b393ad4a56_GH0.tar.gz) = 280630
+SHA256 (tree-sitter-tree-sitter-php-cf1f4a0f1c01c705c1d6cf992b104028d5df0b53_GH0.tar.gz) = ffc79dd528f4e73bda7ac462e5b84f67439c646daf6251686ae3d7a5c630c4f7
+SIZE (tree-sitter-tree-sitter-php-cf1f4a0f1c01c705c1d6cf992b104028d5df0b53_GH0.tar.gz) = 544987
+SHA256 (EmranMR-tree-sitter-blade-4c66efe1e05c639c555ee70092021b8223d2f440_GH0.tar.gz) = 740c781b0da0fc6390e34944da87a71b7a0472216d94dfc9378f92fdd22c5047
+SIZE (EmranMR-tree-sitter-blade-4c66efe1e05c639c555ee70092021b8223d2f440_GH0.tar.gz) = 416394
+SHA256 (gbprod-tree-sitter-twig-807b293fec3fead64f54c64fdf6fb05516c032b9_GH0.tar.gz) = a550dbc960d5504f046d7a8fa403ee42815f205a3b87fc9aa8e3c697794fc02a
+SIZE (gbprod-tree-sitter-twig-807b293fec3fead64f54c64fdf6fb05516c032b9_GH0.tar.gz) = 221835
+SHA256 (latex-lsp-tree-sitter-latex-8c75e93cd08ccb7ce1ccab22c1fbd6360e3bcea6_GH0.tar.gz) = 5c4606f958fa5668e30fffd139650640ffe1ad25841de951e6cd2cdad3a99030
+SIZE (latex-lsp-tree-sitter-latex-8c75e93cd08ccb7ce1ccab22c1fbd6360e3bcea6_GH0.tar.gz) = 1929835
+SHA256 (latex-lsp-tree-sitter-bibtex-ccfd77db0ed799b6c22c214fe9d2937f47bc8b34_GH0.tar.gz) = e97485dcd1fb0942cecb0ada8875026e45895052ddb46b31996d84ad12b639e9
+SIZE (latex-lsp-tree-sitter-bibtex-ccfd77db0ed799b6c22c214fe9d2937f47bc8b34_GH0.tar.gz) = 32355
+SHA256 (Julian-tree-sitter-lean-d98426109258b266e1e92358c5f11716d2e8f638_GH0.tar.gz) = 616cc21ce819fe5d5f226dc1b9db9250b75b14932f122991c694cb0f8c4ef291
+SIZE (Julian-tree-sitter-lean-d98426109258b266e1e92358c5f11716d2e8f638_GH0.tar.gz) = 5717653
+SHA256 (tree-sitter-tree-sitter-julia-8fb38abff74652c4faddbf04d2d5bbbc6b4bae25_GH0.tar.gz) = cb2139049a7a11cb1faf21a8604b06cbc9273ecf13ad71582a505e0a1d260b48
+SIZE (tree-sitter-tree-sitter-julia-8fb38abff74652c4faddbf04d2d5bbbc6b4bae25_GH0.tar.gz) = 720154
+SHA256 (tree-sitter-tree-sitter-java-09d650def6cdf7f479f4b78f595e9ef5b58ce31e_GH0.tar.gz) = a45d6f460f32f7c6b59c3f33a315c98a35195696fbcf5aebd53580eb9d83647f
+SIZE (tree-sitter-tree-sitter-java-09d650def6cdf7f479f4b78f595e9ef5b58ce31e_GH0.tar.gz) = 176945
+SHA256 (amaanq-tree-sitter-smali-5ae51e15c4d1ac93cba6127caf3d1f0a072c140c_GH0.tar.gz) = f2761d47216fc90ea33f02ef89932ca349400433a91c468b85957a8eed7946af
+SIZE (amaanq-tree-sitter-smali-5ae51e15c4d1ac93cba6127caf3d1f0a072c140c_GH0.tar.gz) = 147975
+SHA256 (cbarrete-tree-sitter-ledger-1f864fb2bf6a87fe1b48545cc6adc6d23090adf7_GH0.tar.gz) = ecdf8a40e831bd815fd1cbc6307083eb1c03bd0137f0df36bfb3572c3147d214
+SIZE (cbarrete-tree-sitter-ledger-1f864fb2bf6a87fe1b48545cc6adc6d23090adf7_GH0.tar.gz) = 38108
+SHA256 (polarmutex-tree-sitter-beancount-f3741a3a68ade59ec894ed84a64673494d2ba8f3_GH0.tar.gz) = 1712153b12c41f196af6bb3e804830eec9c9b6f3028d9d9c1c02b22c7be42ce3
+SIZE (polarmutex-tree-sitter-beancount-f3741a3a68ade59ec894ed84a64673494d2ba8f3_GH0.tar.gz) = 64962
+SHA256 (tree-sitter-tree-sitter-ocaml-9965d208337d88bbf1a38ad0b0fe49e5f5ec9677_GH0.tar.gz) = dd91ffef4b72b5b579938b82a493a38a00ddb2b9330ad953de63bb8a4fafcecb
+SIZE (tree-sitter-tree-sitter-ocaml-9965d208337d88bbf1a38ad0b0fe49e5f5ec9677_GH0.tar.gz) = 2872101
+SHA256 (tree-sitter-grammars-tree-sitter-lua-88e446476a1e97a8724dff7a23e2d709855077f2_GH0.tar.gz) = 93349f500ba872c4b34fed85c720a0a9193cdc713a87a10bbbb38db757bfde9a
+SIZE (tree-sitter-grammars-tree-sitter-lua-88e446476a1e97a8724dff7a23e2d709855077f2_GH0.tar.gz) = 46428
+SHA256 (Himujjal-tree-sitter-svelte-be7f2e7db1fc19f0852265ec60923fc058380739_GH0.tar.gz) = fbd77be18774681f0a2ed7e57b840bed02908c6650525ee69911cf65db8c17ad
+SIZE (Himujjal-tree-sitter-svelte-be7f2e7db1fc19f0852265ec60923fc058380739_GH0.tar.gz) = 62817
+SHA256 (ikatyang-tree-sitter-vue-91fe2754796cd8fba5f229505a23fa08f3546c06_GH0.tar.gz) = c71edcf9669d16a8f7b83ed25aa14305e2d966d4c57e9552016a1e11ebd50591
+SIZE (ikatyang-tree-sitter-vue-91fe2754796cd8fba5f229505a23fa08f3546c06_GH0.tar.gz) = 157765
+SHA256 (ikatyang-tree-sitter-yaml-0e36bed171768908f331ff7dff9d956bae016efb_GH0.tar.gz) = 46b6052ab86a14bb23406fbb5c56dc436798cb67b28a0e7fafe3183bc0c87788
+SIZE (ikatyang-tree-sitter-yaml-0e36bed171768908f331ff7dff9d956bae016efb_GH0.tar.gz) = 266363
+SHA256 (tree-sitter-tree-sitter-haskell-d7ac98f49e3ed7e17541256fe3881a967d7ffdd3_GH0.tar.gz) = f56432d98e7873cf6a698e7f2982a15b5d77812aa8fa9bf666f78f15afa81952
+SIZE (tree-sitter-tree-sitter-haskell-d7ac98f49e3ed7e17541256fe3881a967d7ffdd3_GH0.tar.gz) = 1525429
+SHA256 (MercuryTechnologies-tree-sitter-haskell-persistent-58a6ccfd56d9f1de8fb9f77e6c42151f8f0d0f3d_GH0.tar.gz) = 514889be9c03e0d0a064f9ecc0d9c494a140c3f5751bf1a19a489ac6c8b06056
+SIZE (MercuryTechnologies-tree-sitter-haskell-persistent-58a6ccfd56d9f1de8fb9f77e6c42151f8f0d0f3d_GH0.tar.gz) = 71208
+SHA256 (postsolar-tree-sitter-purescript-5ef5592674ea42de75fc2792972e4ea0b6e3da6c_GH0.tar.gz) = b5d0d37bd17625e8033aa569f40f87edc4718725151aaf49b9137c96f87a73a1
+SIZE (postsolar-tree-sitter-purescript-5ef5592674ea42de75fc2792972e4ea0b6e3da6c_GH0.tar.gz) = 569819
+SHA256 (maxxnino-tree-sitter-zig-0d08703e4c3f426ec61695d7617415fff97029bd_GH0.tar.gz) = f3602cdeb3061802d8f842a6886e96138bade66b5873a74f760b60196d0d600f
+SIZE (maxxnino-tree-sitter-zig-0d08703e4c3f426ec61695d7617415fff97029bd_GH0.tar.gz) = 804443
+SHA256 (the-mikedavis-tree-sitter-tsq-48b5e9f82ae0a4727201626f33a17f69f8e0ff86_GH0.tar.gz) = 25052d36606b3cc8851db9da44c8b6d59a900f58361cb6cc33c5a1c7499166a7
+SIZE (the-mikedavis-tree-sitter-tsq-48b5e9f82ae0a4727201626f33a17f69f8e0ff86_GH0.tar.gz) = 15047
+SHA256 (uyha-tree-sitter-cmake-6e51463ef3052dd3b328322c22172eda093727ad_GH0.tar.gz) = e89523736d1a9f63bf63660ef6635780d596a503282f8a8f8f3e0056bdce3b3c
+SIZE (uyha-tree-sitter-cmake-6e51463ef3052dd3b328322c22172eda093727ad_GH0.tar.gz) = 42568
+SHA256 (alemuller-tree-sitter-make-a4b9187417d6be349ee5fd4b6e77b4172c6827dd_GH0.tar.gz) = a1e078443fc36bfe562b40304c49e044d9230964dc82aba9e09b8cd7079ee3e0
+SIZE (alemuller-tree-sitter-make-a4b9187417d6be349ee5fd4b6e77b4172c6827dd_GH0.tar.gz) = 81522
+SHA256 (theHamsta-tree-sitter-glsl-88408ffc5e27abcffced7010fc77396ae3636d7e_GH0.tar.gz) = f1d5bf8eddd260bbce816a92c9283f7c1b02a87081050d84a0d84ea7d48f8472
+SIZE (theHamsta-tree-sitter-glsl-88408ffc5e27abcffced7010fc77396ae3636d7e_GH0.tar.gz) = 236441
+SHA256 (tree-sitter-perl-tree-sitter-perl-e99bb5283805db4cb86c964722d709df21b0ac16_GH0.tar.gz) = c5468b18b6ec3efc9dc975da8ab2ccee8805e4f3cd47a6d1871f8251b9b9b38c
+SIZE (tree-sitter-perl-tree-sitter-perl-e99bb5283805db4cb86c964722d709df21b0ac16_GH0.tar.gz) = 629397
+SHA256 (tree-sitter-perl-tree-sitter-pod-39da859947b94abdee43e431368e1ae975c0a424_GH0.tar.gz) = 749088e2d29c29360cea893658e6a3b9ce95b9de252454def6cf85bb1fdac439
+SIZE (tree-sitter-perl-tree-sitter-pod-39da859947b94abdee43e431368e1ae975c0a424_GH0.tar.gz) = 12134
+SHA256 (stsewd-tree-sitter-comment-aefcc2813392eb6ffe509aa0fc8b4e9b57413ee1_GH0.tar.gz) = 9a6d5198347fd6bc931337b50cd3509f6b44cbf7fb2ed7d7dd25666bf57a8909
+SIZE (stsewd-tree-sitter-comment-aefcc2813392eb6ffe509aa0fc8b4e9b57413ee1_GH0.tar.gz) = 118246
+SHA256 (szebniok-tree-sitter-wgsl-272e89ef2aeac74178edb9db4a83c1ffef80a463_GH0.tar.gz) = 9d820731b08c8c5ff4e9e1d81e8f78f02f93c3453f811651d4ac22a3d41a01c3
+SIZE (szebniok-tree-sitter-wgsl-272e89ef2aeac74178edb9db4a83c1ffef80a463_GH0.tar.gz) = 4534014
+SHA256 (benwilliamgraham-tree-sitter-llvm-e9948edc41e9e5869af99dddb2b5ff5cc5581af6_GH0.tar.gz) = 7a95d75df76a9e6f9a3249a7bd6e877c40656b344770be2ca5bfb69fa4177afa
+SIZE (benwilliamgraham-tree-sitter-llvm-e9948edc41e9e5869af99dddb2b5ff5cc5581af6_GH0.tar.gz) = 447218
+SHA256 (Flakebi-tree-sitter-llvm-mir-06fabca19454b2dc00c1b211a7cb7ad0bc2585f1_GH0.tar.gz) = 29cebbac66cc39c472790831471816e8eacc6889741e732461369221f98b9ae5
+SIZE (Flakebi-tree-sitter-llvm-mir-06fabca19454b2dc00c1b211a7cb7ad0bc2585f1_GH0.tar.gz) = 65850
+SHA256 (Flakebi-tree-sitter-tablegen-568dd8a937347175fd58db83d4c4cdaeb6069bd2_GH0.tar.gz) = 83e556828ce31bda84e02a658c330bd545f22ec91cfedf8260234a87eae7cda0
+SIZE (Flakebi-tree-sitter-tablegen-568dd8a937347175fd58db83d4c4cdaeb6069bd2_GH0.tar.gz) = 43563
+SHA256 (tree-sitter-grammars-tree-sitter-markdown-62516e8c78380e3b51d5b55727995d2c511436d8_GH0.tar.gz) = b69eaf8d664b6278e748588b48f613fbec5d4f461c53fa65e22c203240f93dfb
+SIZE (tree-sitter-grammars-tree-sitter-markdown-62516e8c78380e3b51d5b55727995d2c511436d8_GH0.tar.gz) = 418442
+SHA256 (UserNobody14-tree-sitter-dart-e398400a0b785af3cf571f5a57eccab242f0cdf9_GH0.tar.gz) = 17887f77d1fc54852048ba6317fcc167d3188de64ae2e93ba0e33d07a4e48256
+SIZE (UserNobody14-tree-sitter-dart-e398400a0b785af3cf571f5a57eccab242f0cdf9_GH0.tar.gz) = 465951
+SHA256 (tree-sitter-tree-sitter-scala-7891815f42dca9ed6aeb464c2edc39d479ab965c_GH0.tar.gz) = ee16a8e069f8247c91d62c321b270ad3e178d7314f79054919fa04f33e106724
+SIZE (tree-sitter-tree-sitter-scala-7891815f42dca9ed6aeb464c2edc39d479ab965c_GH0.tar.gz) = 1321018
+SHA256 (camdencheek-tree-sitter-dockerfile-8ee3a0f7587b2bd8c45c8cb7d28bd414604aec62_GH0.tar.gz) = d1c86f114d3877b8f52a2a797f455263f114b673380c9e238fa26c9d4e4f36cd
+SIZE (camdencheek-tree-sitter-dockerfile-8ee3a0f7587b2bd8c45c8cb7d28bd414604aec62_GH0.tar.gz) = 48759
+SHA256 (the-mikedavis-tree-sitter-git-commit-6f193a66e9aa872760823dff020960c6cedc37b3_GH0.tar.gz) = 59c4c5c1dd666bfb7917246adaf0b9aa33a5551140f19e87136029c5ca5119e2
+SIZE (the-mikedavis-tree-sitter-git-commit-6f193a66e9aa872760823dff020960c6cedc37b3_GH0.tar.gz) = 73696
+SHA256 (the-mikedavis-tree-sitter-diff-fd74c78fa88a20085dbc7bbeaba066f4d1692b63_GH0.tar.gz) = f52c708d5530e63ca45a2f32ca71b26ef28c0177e44faed2e1436a7209f8dc1c
+SIZE (the-mikedavis-tree-sitter-diff-fd74c78fa88a20085dbc7bbeaba066f4d1692b63_GH0.tar.gz) = 635020
+SHA256 (the-mikedavis-tree-sitter-git-rebase-d8a4207ebbc47bd78bacdf48f883db58283f9fd8_GH0.tar.gz) = 8a6c3c7086f81da8657eeaa6bd0835cc10a95810c4f4897687283020a8af3928
+SIZE (the-mikedavis-tree-sitter-git-rebase-d8a4207ebbc47bd78bacdf48f883db58283f9fd8_GH0.tar.gz) = 179404
+SHA256 (tree-sitter-tree-sitter-regex-e1cfca3c79896ff79842f057ea13e529b66af636_GH0.tar.gz) = 6876f3052032222e5b80ccf060b7a453dbf13f27a8c0eb9ba8cae5d5a9a77025
+SIZE (tree-sitter-tree-sitter-regex-e1cfca3c79896ff79842f057ea13e529b66af636_GH0.tar.gz) = 18119
+SHA256 (the-mikedavis-tree-sitter-git-config-9c2a1b7894e6d9eedfe99805b829b4ecd871375e_GH0.tar.gz) = 53f56ab3ca508696fb233b1cc8a9fa61ffe211b2976cba67dff6722de4b0f426
+SIZE (the-mikedavis-tree-sitter-git-config-9c2a1b7894e6d9eedfe99805b829b4ecd871375e_GH0.tar.gz) = 263051
+SHA256 (mtoohey31-tree-sitter-gitattributes-3dd50808e3096f93dccd5e9dc7dc3dba2eb12dc4_GH0.tar.gz) = b921b734d779931fdcb57c5201bf5ef11323b7d056c1588c06a8131e05b80d86
+SIZE (mtoohey31-tree-sitter-gitattributes-3dd50808e3096f93dccd5e9dc7dc3dba2eb12dc4_GH0.tar.gz) = 19502
+SHA256 (shunsambongi-tree-sitter-gitignore-f4685bf11ac466dd278449bcfe5fd014e94aa504_GH0.tar.gz) = 15727772801cf49bd85b147dc7f77f6c3ddabbdb3b3d55c6580e7dd8f7aa559c
+SIZE (shunsambongi-tree-sitter-gitignore-f4685bf11ac466dd278449bcfe5fd014e94aa504_GH0.tar.gz) = 16594
+SHA256 (bkegley-tree-sitter-graphql-5e66e961eee421786bdda8495ed1db045e06b5fe_GH0.tar.gz) = ff542fddb51b1f1c110bb36fa16703d2212eeae0c0d12a2e1bf813c5f5db9507
+SIZE (bkegley-tree-sitter-graphql-5e66e961eee421786bdda8495ed1db045e06b5fe_GH0.tar.gz) = 51683
+SHA256 (elm-tooling-tree-sitter-elm-df4cb639c01b76bc9ac9cc66788709a6da20002c_GH0.tar.gz) = 6b38e278af737e576828814d6c4c4e19284ac6158716ffbe265c85ab3d6bf643
+SIZE (elm-tooling-tree-sitter-elm-df4cb639c01b76bc9ac9cc66788709a6da20002c_GH0.tar.gz) = 343162
+SHA256 (elixir-lang-tree-sitter-iex-39f20bb51f502e32058684e893c0c0b00bb2332c_GH0.tar.gz) = ad744f4e1e7d8f7be61cf5b56d10d2bca5d69d91a1c08b5b62882aa3ec2592d6
+SIZE (elixir-lang-tree-sitter-iex-39f20bb51f502e32058684e893c0c0b00bb2332c_GH0.tar.gz) = 60772
+SHA256 (jaredramirez-tree-sitter-rescript-467dcf99f68c47823d7b378779a6b282d7ef9782_GH0.tar.gz) = 51b549243eeb813ff2ed5386d981f9654f10dcb62ad30c9a4da0bdeb82b84405
+SIZE (jaredramirez-tree-sitter-rescript-467dcf99f68c47823d7b378779a6b282d7ef9782_GH0.tar.gz) = 208292
+SHA256 (the-mikedavis-tree-sitter-erlang-9d4b36a76d5519e3dbf1ec4f4b61bb1a293f584c_GH0.tar.gz) = 26ebedc3e5db6f5e5bb68cd4430b8c06030466753c509dd87fce68c08901025b
+SIZE (the-mikedavis-tree-sitter-erlang-9d4b36a76d5519e3dbf1ec4f4b61bb1a293f584c_GH0.tar.gz) = 292142
+SHA256 (fwcd-tree-sitter-kotlin-a4f71eb9b8c9b19ded3e0e9470be4b1b77c2b569_GH0.tar.gz) = b73ad9648cfce7e81faf531ef8806217b4d4f70a248f61b9dda4a0d02bbb76da
+SIZE (fwcd-tree-sitter-kotlin-a4f71eb9b8c9b19ded3e0e9470be4b1b77c2b569_GH0.tar.gz) = 1619642
+SHA256 (MichaHoffmann-tree-sitter-hcl-3cb7fc28247efbcb2973b97e71c78838ad98a583_GH0.tar.gz) = 97d70265b8bbbc2e131e67fb9ecd2ab9d12b340d3252db3e1637b08385311c66
+SIZE (MichaHoffmann-tree-sitter-hcl-3cb7fc28247efbcb2973b97e71c78838ad98a583_GH0.tar.gz) = 656249
+SHA256 (milisims-tree-sitter-org-698bb1a34331e68f83fc24bdd1b6f97016bb30de_GH0.tar.gz) = bcc2088d8dfcbe1f4912c2a9b3fad3785d3738041f1847331cdcd106bfe1b1e7
+SIZE (milisims-tree-sitter-org-698bb1a34331e68f83fc24bdd1b6f97016bb30de_GH0.tar.gz) = 147549
+SHA256 (JoranHonig-tree-sitter-solidity-08338dcee32603383fcef08f36321900bb7a354b_GH0.tar.gz) = d3ab620a223e56ec28a0cba9510d8d875077edc0c60a9fb37cdac70ff4c5365e
+SIZE (JoranHonig-tree-sitter-solidity-08338dcee32603383fcef08f36321900bb7a354b_GH0.tar.gz) = 203936
+SHA256 (gleam-lang-tree-sitter-gleam-bcf9c45b56cbe46e9dac5eee0aee75df270000ac_GH0.tar.gz) = f0c923dd33937bfba1194d7d9813a31946ba38e2aca26cd5653a3d82f620599d
+SIZE (gleam-lang-tree-sitter-gleam-bcf9c45b56cbe46e9dac5eee0aee75df270000ac_GH0.tar.gz) = 146309
+SHA256 (zee-editor-tree-sitter-ron-7762d709a0f7c1f9e269d0125a2e8a7a69006146_GH0.tar.gz) = c3acdf49aba4475ee8939e1a53810af5847019b93b208a698a9754ed5b171c40
+SIZE (zee-editor-tree-sitter-ron-7762d709a0f7c1f9e269d0125a2e8a7a69006146_GH0.tar.gz) = 39410
+SHA256 (Hubro-tree-sitter-robot-322e4cc65754d2b3fdef4f2f8a71e0762e3d13af_GH0.tar.gz) = 5cd4072095f05a5f4283fc17e216e5ba619249f319185070511002db7e47afe5
+SIZE (Hubro-tree-sitter-robot-322e4cc65754d2b3fdef4f2f8a71e0762e3d13af_GH0.tar.gz) = 49824
+SHA256 (r-lib-tree-sitter-r-cc04302e1bff76fa02e129f332f44636813b0c3c_GH0.tar.gz) = 154fa91ce9459dd46a0961f6fbdee5e37591fa0ad47bf169d70d6fb62ae7d11c
+SIZE (r-lib-tree-sitter-r-cc04302e1bff76fa02e129f332f44636813b0c3c_GH0.tar.gz) = 181225
+SHA256 (alex-pinkus-tree-sitter-swift-57c1c6d6ffa1c44b330182d41717e6fe37430704_GH0.tar.gz) = eb0de4ffafd62ed5e5fdc1f59c599bb721da316834a2a766b3764f523d5d66be
+SIZE (alex-pinkus-tree-sitter-swift-57c1c6d6ffa1c44b330182d41717e6fe37430704_GH0.tar.gz) = 2858380
+SHA256 (tree-sitter-tree-sitter-embedded-template-d21df11b0ecc6fd211dbe11278e92ef67bd17e97_GH0.tar.gz) = 8b278c3f858e618a33adf57580781ecb5ad700cd9dc331ee87867ebd0f3b7839
+SIZE (tree-sitter-tree-sitter-embedded-template-d21df11b0ecc6fd211dbe11278e92ef67bd17e97_GH0.tar.gz) = 11296
+SHA256 (connorlay-tree-sitter-eex-f742f2fe327463335e8671a87c0b9b396905d1d1_GH0.tar.gz) = 43cf47279ab6e5b04b5267e7a5c44ab1a74f85140e5759fff2f8e75b92ca9ed6
+SIZE (connorlay-tree-sitter-eex-f742f2fe327463335e8671a87c0b9b396905d1d1_GH0.tar.gz) = 10620
+SHA256 (phoenixframework-tree-sitter-heex-2e1348c3cf2c9323e87c2744796cf3f3868aa82a_GH0.tar.gz) = 30e6fe486d582c67c9e1a4d1f71eaee738aff01943f23063aa6f20ef12ee9754
+SIZE (phoenixframework-tree-sitter-heex-2e1348c3cf2c9323e87c2744796cf3f3868aa82a_GH0.tar.gz) = 25657
+SHA256 (DerekStride-tree-sitter-sql-da2d1eff425b146d3c8cab7be8dfa98b11d896dc_GH0.tar.gz) = 9790c143f96735338c2ef5d5ed039c5b5f576f356838911de725d8d742269887
+SIZE (DerekStride-tree-sitter-sql-da2d1eff425b146d3c8cab7be8dfa98b11d896dc_GH0.tar.gz) = 800144
+SHA256 (PrestonKnopp-tree-sitter-gdscript-1f1e782fe2600f50ae57b53876505b8282388d77_GH0.tar.gz) = bad55180ed5a02df4ac78c841e98515b2dd2518bfe51a20def2f688c53353682
+SIZE (PrestonKnopp-tree-sitter-gdscript-1f1e782fe2600f50ae57b53876505b8282388d77_GH0.tar.gz) = 112241
+SHA256 (PrestonKnopp-tree-sitter-godot-resource-2ffb90de47417018651fc3b970e5f6b67214dc9d_GH0.tar.gz) = 88d1acc387559f556c5ee963a15fa1c738a44e8425abba4dcaf019754d35c60b
+SIZE (PrestonKnopp-tree-sitter-godot-resource-2ffb90de47417018651fc3b970e5f6b67214dc9d_GH0.tar.gz) = 23216
+SHA256 (nushell-tree-sitter-nu-358c4f509eb97f0148bbd25ad36acc729819b9c1_GH0.tar.gz) = 73c53add34fabeef3bd00589f1ed4412f44357e18d0d6120ae7fb95c35e75bbb
+SIZE (nushell-tree-sitter-nu-358c4f509eb97f0148bbd25ad36acc729819b9c1_GH0.tar.gz) = 876017
+SHA256 (vala-lang-tree-sitter-vala-c9eea93ba2ec4ec1485392db11945819779745b3_GH0.tar.gz) = 24c7d6fa9ee36b4adf3e7b55b1a012fddba0db94a77e58d9939bf61858d72be3
+SIZE (vala-lang-tree-sitter-vala-c9eea93ba2ec4ec1485392db11945819779745b3_GH0.tar.gz) = 200853
+SHA256 (joelspadin-tree-sitter-devicetree-877adbfa0174d25894c40fa75ad52d4515a36368_GH0.tar.gz) = 26ed709af78d2a57e897f203dd1620b270f478910ee7c585ef77acbe16e65237
+SIZE (joelspadin-tree-sitter-devicetree-877adbfa0174d25894c40fa75ad52d4515a36368_GH0.tar.gz) = 30875
+SHA256 (starkware-libs-tree-sitter-cairo-e3a0212261c125cb38248458cd856c0ffee2b398_GH0.tar.gz) = 457ac4f519cdb3d0437a26fbe6e3d4595dde0d142de1232d4cb36bd4afad6b30
+SIZE (starkware-libs-tree-sitter-cairo-e3a0212261c125cb38248458cd856c0ffee2b398_GH0.tar.gz) = 164081
+SHA256 (fvacek-tree-sitter-cpon-0d01fcdae5a53191df5b1349f9bce053833270e7_GH0.tar.gz) = 2b434fb60dba33c33ff16371a05bdf0af73db4ae294f3f0dcd9d0d2f4f16cb98
+SIZE (fvacek-tree-sitter-cpon-0d01fcdae5a53191df5b1349f9bce053833270e7_GH0.tar.gz) = 16885
+SHA256 (tree-sitter-grammars-tree-sitter-odin-b5f668ef8918aab13812ce73acd89fe191fb8c5e_GH0.tar.gz) = c61c102142156d917d779e30a1c1da7702b164869e7e2ad03e588f1ce535eb3d
+SIZE (tree-sitter-grammars-tree-sitter-odin-b5f668ef8918aab13812ce73acd89fe191fb8c5e_GH0.tar.gz) = 632078
+SHA256 (staysail-tree-sitter-meson-32a83e8f200c347232fa795636cfe60dde22957a_GH0.tar.gz) = 165213b0b86835a143a862050042eb6f859d615d0e4a6c03e016fe21ae2ed055
+SIZE (staysail-tree-sitter-meson-32a83e8f200c347232fa795636cfe60dde22957a_GH0.tar.gz) = 35980
+SHA256 (metio-tree-sitter-ssh-client-config-e45c6d5c71657344d4ecaf87dafae7736f776c57_GH0.tar.gz) = 448d8d2909828c2ad96ab4766f9d7e89ecbf133b34a746770cebeb6d3050bb9b
+SIZE (metio-tree-sitter-ssh-client-config-e45c6d5c71657344d4ecaf87dafae7736f776c57_GH0.tar.gz) = 496414
+SHA256 (6cdh-tree-sitter-scheme-af3af6c9356b936f8a515a1e449c32e804c2b1a8_GH0.tar.gz) = bf9dd3478b88a5b0cc7b68439e08603941ade787e55e273f07542a288fbd878d
+SIZE (6cdh-tree-sitter-scheme-af3af6c9356b936f8a515a1e449c32e804c2b1a8_GH0.tar.gz) = 49278
+SHA256 (v-analyzer-v-analyzer-e14fdf6e661b10edccc744102e4ccf0b187aa8ad_GH0.tar.gz) = 63efc87e7542b7e5592fb6197143c2a187ed8d9e9068356568f195212f0e3aa6
+SIZE (v-analyzer-v-analyzer-e14fdf6e661b10edccc744102e4ccf0b187aa8ad_GH0.tar.gz) = 1036399
+SHA256 (tree-sitter-tree-sitter-verilog-4457145e795b363f072463e697dfe2f6973c9a52_GH0.tar.gz) = f4c276128774485eccd07d33e07070cfeded4a000b08438cb6b8cf2fbd7850f4
+SIZE (tree-sitter-tree-sitter-verilog-4457145e795b363f072463e697dfe2f6973c9a52_GH0.tar.gz) = 2670797
+SHA256 (the-mikedavis-tree-sitter-edoc-74774af7b45dd9cefbf9510328fc6ff2374afc50_GH0.tar.gz) = aa5d46efc4ed9192c63ccdcfd9120f574309f117e17401ce4adcb91df7579dd9
+SIZE (the-mikedavis-tree-sitter-edoc-74774af7b45dd9cefbf9510328fc6ff2374afc50_GH0.tar.gz) = 28784
+SHA256 (tree-sitter-tree-sitter-jsdoc-189a6a4829beb9cdbe837260653b4a3dfb0cc3db_GH0.tar.gz) = ef7175e0191a39fb055015e1cf6f464f3f29206b897be561646a84cc7f17fb82
+SIZE (tree-sitter-tree-sitter-jsdoc-189a6a4829beb9cdbe837260653b4a3dfb0cc3db_GH0.tar.gz) = 13239
+SHA256 (bollian-tree-sitter-openscad-5c3ce93df0ac1da7197cf6ae125aade26d6b8972_GH0.tar.gz) = 93fd5b0f34b98766ad628b367383c9c660843a1e9b81a953061d57e88580df83
+SIZE (bollian-tree-sitter-openscad-5c3ce93df0ac1da7197cf6ae125aade26d6b8972_GH0.tar.gz) = 39332
+SHA256 (victorhqc-tree-sitter-prisma-eca2596a355b1a9952b4f80f8f9caed300a272b5_GH0.tar.gz) = 4597c60bbf7512e6ffaabb17ffaa9232f3af159841a2f3dba6769c039b79cbb7
+SIZE (victorhqc-tree-sitter-prisma-eca2596a355b1a9952b4f80f8f9caed300a272b5_GH0.tar.gz) = 31826
+SHA256 (sogaiu-tree-sitter-clojure-e57c569ae332ca365da623712ae1f50f84daeae2_GH0.tar.gz) = 7dac550c0d5445fb190615c3ea415b18f50bb09d1002fe49a7423cbdbda83ba7
+SIZE (sogaiu-tree-sitter-clojure-e57c569ae332ca365da623712ae1f50f84daeae2_GH0.tar.gz) = 58852
+SHA256 (ckafi-tree-sitter-elvish-e50787cadd3bc54f6d9c0704493a79078bb8a4e5_GH0.tar.gz) = eefc7d36da008225f946e6bd7052cab9e3e97cb88aae61812dc8935480e9e1e9
+SIZE (ckafi-tree-sitter-elvish-e50787cadd3bc54f6d9c0704493a79078bb8a4e5_GH0.tar.gz) = 60448
+SHA256 (stadelmanma-tree-sitter-fortran-f0f2f100952a353e64e26b0fa710b4c296d7af13_GH0.tar.gz) = f239f5a6f83cfaf3df1cd9d9aea4f984000b87654bd4e56330c2256f6ee45b94
+SIZE (stadelmanma-tree-sitter-fortran-f0f2f100952a353e64e26b0fa710b4c296d7af13_GH0.tar.gz) = 186957
+SHA256 (Philipp-M-tree-sitter-ungrammar-a7e104629cff5a8b7367187610631e8f5eb7c6ea_GH0.tar.gz) = bd556d6123fa7f3c26f913261ad17c9396b3f86e56b031c8534c10d64265a2e2
+SIZE (Philipp-M-tree-sitter-ungrammar-a7e104629cff5a8b7367187610631e8f5eb7c6ea_GH0.tar.gz) = 9935
+SHA256 (rydesun-tree-sitter-dot-917230743aa10f45a408fea2ddb54bbbf5fbe7b7_GH0.tar.gz) = efa297a26fa50d765513af02e9523b49007fb3a40cda34aea06c831514e1d582
+SIZE (rydesun-tree-sitter-dot-917230743aa10f45a408fea2ddb54bbbf5fbe7b7_GH0.tar.gz) = 29750
+SHA256 (eonpatapon-tree-sitter-cue-61843e3beebf19417e4fede4e8be4df1084317ad_GH0.tar.gz) = 80e5c826b2498e70730681f0e5240d4bafa950db26633519c4d9e225b3f6410e
+SIZE (eonpatapon-tree-sitter-cue-61843e3beebf19417e4fede4e8be4df1084317ad_GH0.tar.gz) = 274057
+SHA256 (slint-ui-tree-sitter-slint-4a0558cc0fcd7a6110815b9bbd7cc12d7ab31e74_GH0.tar.gz) = 01248c97ad79a1c66656ecb67f2b060cffccb039b6751963e051a50be4af67c7
+SIZE (slint-ui-tree-sitter-slint-4a0558cc0fcd7a6110815b9bbd7cc12d7ab31e74_GH0.tar.gz) = 118943
+SHA256 (alexanderbrevig-tree-sitter-task-f2cb435c5dbf3ee19493e224485d977cb2d36d8b_GH0.tar.gz) = 1e181c226959addb2713a74b371bd6520aab55aa0bf06e3937fa6dfc7b132317
+SIZE (alexanderbrevig-tree-sitter-task-f2cb435c5dbf3ee19493e224485d977cb2d36d8b_GH0.tar.gz) = 11989
+SHA256 (synaptiko-tree-sitter-xit-7d7902456061bc2ad21c64c44054f67b5515734c_GH0.tar.gz) = 27be731c4bd498ef7c9f98c268117411e626bc0264c26bff86ce042aa7aea88a
+SIZE (synaptiko-tree-sitter-xit-7d7902456061bc2ad21c64c44054f67b5515734c_GH0.tar.gz) = 12323
+SHA256 (greym0uth-tree-sitter-esdl-df83acc8cacd0cfb139eecee0e718dc32c4f92e2_GH0.tar.gz) = 21a593f63d98e1078f88289aba286e209fb08662beb6aa54dbb22bf95d9e05b0
+SIZE (greym0uth-tree-sitter-esdl-df83acc8cacd0cfb139eecee0e718dc32c4f92e2_GH0.tar.gz) = 52938
+SHA256 (Isopod-tree-sitter-pascal-2fd40f477d3e2794af152618ccfac8d92eb72a66_GH0.tar.gz) = 6c6d45ed5e53beef79b9fdfacfda74721ab44d7495f85f75c6169dcd4c11157b
+SIZE (Isopod-tree-sitter-pascal-2fd40f477d3e2794af152618ccfac8d92eb72a66_GH0.tar.gz) = 1345771
+SHA256 (Giorbo-tree-sitter-sml-bd4055d5554614520d4a0706b34dc0c317c6b608_GH0.tar.gz) = 8b40b4545e4cc8ae5b03c920279227ef40eea9586022c07846e1f1642af4b870
+SIZE (Giorbo-tree-sitter-sml-bd4055d5554614520d4a0706b34dc0c317c6b608_GH0.tar.gz) = 803804
+SHA256 (sourcegraph-tree-sitter-jsonnet-0475a5017ad7dc84845d1d33187f2321abcb261d_GH0.tar.gz) = bc64dcebfcd50259af983aec75afb991614b59b958a30f0e0602f9bc738ffd1b
+SIZE (sourcegraph-tree-sitter-jsonnet-0475a5017ad7dc84845d1d33187f2321abcb261d_GH0.tar.gz) = 34276
+SHA256 (briot-tree-sitter-ada-ba0894efa03beb70780156b91e28c716b7a4764d_GH0.tar.gz) = 9ee2a53af7d2a52fc52ce73457d4e32c35b3a45e08b79d54f82a1754bc5239ab
+SIZE (briot-tree-sitter-ada-ba0894efa03beb70780156b91e28c716b7a4764d_GH0.tar.gz) = 197561
+SHA256 (virchau13-tree-sitter-astro-947e93089e60c66e681eba22283f4037841451e7_GH0.tar.gz) = 3d54f537099f15c55ed5b867df8808cff4950a24fdbf208cf644bc888a9d330e
+SIZE (virchau13-tree-sitter-astro-947e93089e60c66e681eba22283f4037841451e7_GH0.tar.gz) = 24070
+SHA256 (vito-tree-sitter-bass-501133e260d768ed4e1fd7374912ed5c86d6fd90_GH0.tar.gz) = f6d563ba14ce6c1a4e56a298786117bf5fb80b3c20ccb5d4242030476dd0bc88
+SIZE (vito-tree-sitter-bass-501133e260d768ed4e1fd7374912ed5c86d6fd90_GH0.tar.gz) = 37945
+SHA256 (wasm-lsp-tree-sitter-wasm-2ca28a9f9d709847bf7a3de0942a84e912f59088_GH0.tar.gz) = 96f4e008abc75ec94a290f7a49963cbecaf0605f58fa0ba175ab04b96c911aeb
+SIZE (wasm-lsp-tree-sitter-wasm-2ca28a9f9d709847bf7a3de0942a84e912f59088_GH0.tar.gz) = 261289
+SHA256 (gdamore-tree-sitter-d-5566f8ce8fc24186fad06170bbb3c8d97c935d74_GH0.tar.gz) = b64cc195ab31857142461f020c53c7015b846ce50993bf2877ccbab462a255a8
+SIZE (gdamore-tree-sitter-d-5566f8ce8fc24186fad06170bbb3c8d97c935d74_GH0.tar.gz) = 996892
+SHA256 (charmbracelet-tree-sitter-vhs-9534865e614c95eb9418e5e73f061c32fa4d9540_GH0.tar.gz) = 383bbdd0e5e8998737a347bf03da332525113b78047f3b7dbb2a48beeabe9d60
+SIZE (charmbracelet-tree-sitter-vhs-9534865e614c95eb9418e5e73f061c32fa4d9540_GH0.tar.gz) = 20825
+SHA256 (amaanq-tree-sitter-kdl-3ca569b9f9af43593c24f9e7a21f02f43a13bb88_GH0.tar.gz) = d2dfbbb38de9a5ab255c0a544fad21681c91429448c72bb9868eef154c920221
+SIZE (amaanq-tree-sitter-kdl-3ca569b9f9af43593c24f9e7a21f02f43a13bb88_GH0.tar.gz) = 69044
+SHA256 (RenjiSann-tree-sitter-xml-48a7c2b6fb9d515577e115e6788937e837815651_GH0.tar.gz) = c32ea09ba83dd6ece1c22ae59be7ffb21d2ca33b866c1974a233c71ded8dd74c
+SIZE (RenjiSann-tree-sitter-xml-48a7c2b6fb9d515577e115e6788937e837815651_GH0.tar.gz) = 62031
+SHA256 (KMikeeU-tree-sitter-dtd-6116becb02a6b8e9588ef73d300a9ba4622e156f_GH0.tar.gz) = 35fddba6496ca0cc1a6b8ddb99b3c4c4b024e71b8a88794786371b3d8e6893b6
+SIZE (KMikeeU-tree-sitter-dtd-6116becb02a6b8e9588ef73d300a9ba4622e156f_GH0.tar.gz) = 31669
+SHA256 (hh9527-tree-sitter-wit-c917790ab9aec50c5fd664cbfad8dd45110cfff3_GH0.tar.gz) = 19a536788a176af07c94c9df4803a1db9dedaef5cb79d41df053b4e22fe2b595
+SIZE (hh9527-tree-sitter-wit-c917790ab9aec50c5fd664cbfad8dd45110cfff3_GH0.tar.gz) = 17587
+SHA256 (justinmk-tree-sitter-ini-4d247fb876b4ae6b347687de4a179511bf67fcbc_GH0.tar.gz) = c263fa7381ced032a874a20b942ad634f02738b02f5b1ac0da6f4ced8da712a3
+SIZE (justinmk-tree-sitter-ini-4d247fb876b4ae6b347687de4a179511bf67fcbc_GH0.tar.gz) = 17387
+SHA256 (inko-lang-tree-sitter-inko-7860637ce1b43f5f79cfb7cc3311bf3234e9479f_GH0.tar.gz) = f33306b4b857c42bd97a546524eeb4cc27f2dbb2e75a005337d35c920e4edfbe
+SIZE (inko-lang-tree-sitter-inko-7860637ce1b43f5f79cfb7cc3311bf3234e9479f_GH0.tar.gz) = 112606
+SHA256 (the-mikedavis-tree-sitter-bicep-d8e097fcfa143854861ef737161163a09cc2916b_GH0.tar.gz) = 84232fcadfe7603fb15253303f2d149cdf11d24f595c921e548396e9cd761b72
+SIZE (the-mikedavis-tree-sitter-bicep-d8e097fcfa143854861ef737161163a09cc2916b_GH0.tar.gz) = 42651
+SHA256 (yuja-tree-sitter-qmljs-0b2b25bcaa7d4925d5f0dda16f6a99c588a437f1_GH0.tar.gz) = 430aed082c818b7dd7fee7f8e87256e53a4fac3843866fd35f80c66a06f13cf3
+SIZE (yuja-tree-sitter-qmljs-0b2b25bcaa7d4925d5f0dda16f6a99c588a437f1_GH0.tar.gz) = 439576
+SHA256 (monaqa-tree-sitter-mermaid-d787c66276e7e95899230539f556e8b83ee16f6d_GH0.tar.gz) = 17c336e0e75d9c659eb5cb596537d7dd73d5443f19ab648d75ad4c1d30caa5a1
+SIZE (monaqa-tree-sitter-mermaid-d787c66276e7e95899230539f556e8b83ee16f6d_GH0.tar.gz) = 92866
+SHA256 (acristoffers-tree-sitter-matlab-6071891a8c39600203eba20513666cf93b4d650a_GH0.tar.gz) = eb76b3d9cb16ab235121268e5e970c11e8c1115f64e645e2a31c09a6b8326444
+SIZE (acristoffers-tree-sitter-matlab-6071891a8c39600203eba20513666cf93b4d650a_GH0.tar.gz) = 119617
+SHA256 (mfelsche-tree-sitter-ponylang-ef66b151bc2604f431b5668fcec4747db4290e11_GH0.tar.gz) = f8bb843ed3c850c7e5517149d98a26d0832681af4969b9e1a351169a0ec447fd
+SIZE (mfelsche-tree-sitter-ponylang-ef66b151bc2604f431b5668fcec4747db4290e11_GH0.tar.gz) = 2124346
+SHA256 (jbellerb-tree-sitter-dhall-affb6ee38d629c9296749767ab832d69bb0d9ea8_GH0.tar.gz) = e5f4feddb4b6e6f51f482d8607b42203601df8a486b70a1def15c22f7203f655
+SIZE (jbellerb-tree-sitter-dhall-affb6ee38d629c9296749767ab832d69bb0d9ea8_GH0.tar.gz) = 163182
+SHA256 (mtoohey31-tree-sitter-pem-be67a4330a1aa507c7297bc322204f936ec1132c_GH0.tar.gz) = 56c59ab004e50d711af41bde32bef4e7cc0fec1ea15b1ed0813f98124673f4db
+SIZE (mtoohey31-tree-sitter-pem-be67a4330a1aa507c7297bc322204f936ec1132c_GH0.tar.gz) = 12630
+SHA256 (ath3-tree-sitter-passwd-20239395eacdc2e0923a7e5683ad3605aee7b716_GH0.tar.gz) = 74996de5b372b2fe106acae9b3aa036f008000e173a9a1ccfd258c134ccff5a7
+SIZE (ath3-tree-sitter-passwd-20239395eacdc2e0923a7e5683ad3605aee7b716_GH0.tar.gz) = 8411
+SHA256 (ath3-tree-sitter-hosts-301b9379ce7dfc8bdbe2c2699a6887dcb73953f9_GH0.tar.gz) = ef454996b90abe0d209a6e32af509b243c2b681de8189e7d772342801a4b395e
+SIZE (ath3-tree-sitter-hosts-301b9379ce7dfc8bdbe2c2699a6887dcb73953f9_GH0.tar.gz) = 7621
+SHA256 (Jummit-tree-sitter-uxntal-d68406066648cd6db4c6a2f11ec305af02079884_GH0.tar.gz) = d61d37a65266746ae5e88bfc3af2e8eb1c90e1e9e607c6a89d71489960e5f835
+SIZE (Jummit-tree-sitter-uxntal-d68406066648cd6db4c6a2f11ec305af02079884_GH0.tar.gz) = 14142
+SHA256 (Philipp-M-tree-sitter-yuck-e3d91a3c65decdea467adebe4127b8366fa47919_GH0.tar.gz) = 8139223817da957603b359048c7ba7499d0c5e7f5a172c8f8ed0beee578aac0b
+SIZE (Philipp-M-tree-sitter-yuck-e3d91a3c65decdea467adebe4127b8366fa47919_GH0.tar.gz) = 42237
+SHA256 (PRQL-tree-sitter-prql-09e158cd3650581c0af4c49c2e5b10c4834c8646_GH0.tar.gz) = ea2b3b9ae2e26fa3444b87b59e4c8c152c7a85e18172d6dc2eeeb8f3ef2069eb
+SIZE (PRQL-tree-sitter-prql-09e158cd3650581c0af4c49c2e5b10c4834c8646_GH0.tar.gz) = 70749
+SHA256 (erasin-tree-sitter-po-417cee9abb2053ed26b19e7de972398f2da9b29e_GH0.tar.gz) = 1ebb0f779005000aeca0a6f85217295872bbd5471a3b0c6737f6bb3ab95927ee
+SIZE (erasin-tree-sitter-po-417cee9abb2053ed26b19e7de972398f2da9b29e_GH0.tar.gz) = 13949
+SHA256 (naclsn-tree-sitter-nasm-a0db15db6fcfb1bf2cc8702500e55e558825c48b_GH0.tar.gz) = 3e0943b0c1275f7e6b2b3c5a0558a623a3a18431a3b974f60fc0cf29986b1dd6
+SIZE (naclsn-tree-sitter-nasm-a0db15db6fcfb1bf2cc8702500e55e558825c48b_GH0.tar.gz) = 210318
+SHA256 (sirius94-tree-sitter-gas-60f443646b20edee3b7bf18f3a4fb91dc214259a_GH0.tar.gz) = 413a2114c0ad31bd09762be051c6351b67df38bc6f5625f835e8253a2d1cf477
+SIZE (sirius94-tree-sitter-gas-60f443646b20edee3b7bf18f3a4fb91dc214259a_GH0.tar.gz) = 35031
+SHA256 (stsewd-tree-sitter-rst-25e6328872ac3a764ba8b926aea12719741103f1_GH0.tar.gz) = b95136bea41e10508ea3232c00a7624f95a3d66c4ad75c902e5970d1ed6090f4
+SIZE (stsewd-tree-sitter-rst-25e6328872ac3a764ba8b926aea12719741103f1_GH0.tar.gz) = 201118
+SHA256 (amaanq-tree-sitter-capnp-fc6e2addf103861b9b3dffb82c543eb6b71061aa_GH0.tar.gz) = 87d53b88bf959a468237e69ab426d11882481b8ffd0a6d7178459efdce602b5e
+SIZE (amaanq-tree-sitter-capnp-fc6e2addf103861b9b3dffb82c543eb6b71061aa_GH0.tar.gz) = 74704
+SHA256 (indoorvivants-tree-sitter-smithy-8327eb84d55639ffbe08c9dc82da7fff72a1ad07_GH0.tar.gz) = aedb786363b93f14e6643ebc50d5f4cdadbddea972be771bddc05adeea1d288f
+SIZE (indoorvivants-tree-sitter-smithy-8327eb84d55639ffbe08c9dc82da7fff72a1ad07_GH0.tar.gz) = 48735
+SHA256 (teburd-tree-sitter-vhdl-c57313adee2231100db0a7880033f6865deeadb2_GH0.tar.gz) = 749e704dcfe735b386365113bfd285971bbb645fb7caa305cb2a89927680fd78
+SIZE (teburd-tree-sitter-vhdl-c57313adee2231100db0a7880033f6865deeadb2_GH0.tar.gz) = 527936
+SHA256 (FallenAngel97-tree-sitter-rego-9ac75e71b2d791e0aadeef68098319d86a2a14cf_GH0.tar.gz) = 19045edd061c3161478c674a7c9d05a573e7101b8c117542d6a1ae025f55f67c
+SIZE (FallenAngel97-tree-sitter-rego-9ac75e71b2d791e0aadeef68098319d86a2a14cf_GH0.tar.gz) = 68649
+SHA256 (alaviss-tree-sitter-nim-c5f0ce3b65222f5dbb1a12f9fe894524881ad590_GH0.tar.gz) = d17550c72c800a4578e8837a31382771bffb7dafdad1b928402281be79f4b70c
+SIZE (alaviss-tree-sitter-nim-c5f0ce3b65222f5dbb1a12f9fe894524881ad590_GH0.tar.gz) = 3707987
+SHA256 (pfeiferj-tree-sitter-hurl-cd1a0ada92cc73dd0f4d7eedc162be4ded758591_GH0.tar.gz) = 927f6e6b73bf2bcb614b7c73561e7cea6576f56530ee93ab9c684637db49c1d5
+SIZE (pfeiferj-tree-sitter-hurl-cd1a0ada92cc73dd0f4d7eedc162be4ded758591_GH0.tar.gz) = 86113
+SHA256 (markdoc-extra-tree-sitter-markdoc-5ffe71b29e8a3f94823913ea9cea51fcfa7e3bf8_GH0.tar.gz) = f1cb713db2757155c180b8037289f599e3db7c9c7e406c0f71142f5779f51879
+SIZE (markdoc-extra-tree-sitter-markdoc-5ffe71b29e8a3f94823913ea9cea51fcfa7e3bf8_GH0.tar.gz) = 22486
+SHA256 (lefp-tree-sitter-opencl-8e1d24a57066b3cd1bb9685bbc1ca9de5c1b78fb_GH0.tar.gz) = 919d96678787666c0381b2382ca4942fd1f29a688e58c3ee36e7193fbb466f13
+SIZE (lefp-tree-sitter-opencl-8e1d24a57066b3cd1bb9685bbc1ca9de5c1b78fb_GH0.tar.gz) = 321534
+SHA256 (IndianBoy42-tree-sitter-just-379fbe36d1e441bc9414ea050ad0c85c9d6935ea_GH0.tar.gz) = 0b4b9db0135097b16af94a864db9c4081d80ee004bd8f2385326e2ae367456de
+SIZE (IndianBoy42-tree-sitter-just-379fbe36d1e441bc9414ea050ad0c85c9d6935ea_GH0.tar.gz) = 101199
+SHA256 (willcassella-tree-sitter-gn-e18d6e36a79b20dafb58f19d407bd38b0e60260e_GH0.tar.gz) = 053ddff60e6eb17ea47f942566bed80dc8ef7f73994ffd333155fbeba429697b
+SIZE (willcassella-tree-sitter-gn-e18d6e36a79b20dafb58f19d407bd38b0e60260e_GH0.tar.gz) = 20208
+SHA256 (alexanderbrevig-tree-sitter-forth-90189238385cf636b9ee99ce548b9e5b5e569d48_GH0.tar.gz) = 60d169ebe3f625d6669b3cc6a72d1e7387cf7a99752df200aedbc4f3a1bfe982
+SIZE (alexanderbrevig-tree-sitter-forth-90189238385cf636b9ee99ce548b9e5b5e569d48_GH0.tar.gz) = 30325
+SHA256 (kaashyapan-tree-sitter-fsharp-18da392fd9bd5e79f357abcce13f61f3a15e3951_GH0.tar.gz) = 26c85bab44604377fbf471dcf987a1106e9254df09824d0297692abc3371d5df
+SIZE (kaashyapan-tree-sitter-fsharp-18da392fd9bd5e79f357abcce13f61f3a15e3951_GH0.tar.gz) = 1375293
+SHA256 (uben0-tree-sitter-typst-13863ddcbaa7b68ee6221cea2e3143415e64aea4_GH0.tar.gz) = 1421be8b20ae62109757aea5bf7ace1e9e4eb9b1f97ec132305d91b69939f0ed
+SIZE (uben0-tree-sitter-typst-13863ddcbaa7b68ee6221cea2e3143415e64aea4_GH0.tar.gz) = 379470
+SHA256 (varpeti-tree-sitter-jinja2-a533cd3c33aea6acb0f9bf9a56f35dcfe6a8eb53_GH0.tar.gz) = 0b25e28e46c3cbb22db8014ca862f1698b1a394eb19b2be905655834905110ec
+SIZE (varpeti-tree-sitter-jinja2-a533cd3c33aea6acb0f9bf9a56f35dcfe6a8eb53_GH0.tar.gz) = 31647
+SHA256 (kareigu-tree-sitter-jjdescription-2ddec6cad07b366aee276a608e1daa2c29d3caf2_GH0.tar.gz) = 81ed04ba1b40f2e284fb03d21ed19a29546417954fdd57815bd2195d25b9d71d
+SIZE (kareigu-tree-sitter-jjdescription-2ddec6cad07b366aee276a608e1daa2c29d3caf2_GH0.tar.gz) = 16937
+SHA256 (kylegoetz-tree-sitter-unison-1f505e2447fa876a87aee47ff3d70b9e141c744f_GH0.tar.gz) = 1849f0f7ef37b97d3c1541d270d2283c94110a6c84d28e8d4f3dd0e5d113fa73
+SIZE (kylegoetz-tree-sitter-unison-1f505e2447fa876a87aee47ff3d70b9e141c744f_GH0.tar.gz) = 403024
+SHA256 (arnarg-tree-sitter-todotxt-3937c5cd105ec4127448651a21aef45f52d19609_GH0.tar.gz) = 13386bebda9d713f37ae17625f6af74809783bc3f157b35394cb78bea3d40f81
+SIZE (arnarg-tree-sitter-todotxt-3937c5cd105ec4127448651a21aef45f52d19609_GH0.tar.gz) = 9779
+SHA256 (sigmaSd-tree-sitter-strace-2b18fdf9a01e7ec292cc6006724942c81beb7fd5_GH0.tar.gz) = 7ab7d1839d9e27356c61c70528a7de7dce7c90a85adbe21f563e522fdf454291
+SIZE (sigmaSd-tree-sitter-strace-2b18fdf9a01e7ec292cc6006724942c81beb7fd5_GH0.tar.gz) = 32053
+SHA256 (tree-sitter-tree-sitter-agda-c21c3a0f996363ed17b8ac99d827fe5a4821f217_GH0.tar.gz) = 0b109dd067a41430b6c59e95ec7d6087969aa79de464285b3c3fe89a9b2b4b80
+SIZE (tree-sitter-tree-sitter-agda-c21c3a0f996363ed17b8ac99d827fe5a4821f217_GH0.tar.gz) = 762654
+SHA256 (vrischmann-tree-sitter-templ-db662414ccd6f7c78b1e834e7abe11c224b04759_GH0.tar.gz) = 6dd97911ed476774f1e44ee824e54f6e7ed695cfa5808f8db62b7b266ab646ae
+SIZE (vrischmann-tree-sitter-templ-db662414ccd6f7c78b1e834e7abe11c224b04759_GH0.tar.gz) = 141289
+SHA256 (dynamotn-tree-sitter-dbml-2e2fa5640268c33c3d3f27f7e676f631a9c68fd9_GH0.tar.gz) = 4c5f0536a8ce2fc0f1a37e6bdf0c217fc33aa5e0a277cdba05c7d5cec768b85a
+SIZE (dynamotn-tree-sitter-dbml-2e2fa5640268c33c3d3f27f7e676f631a9c68fd9_GH0.tar.gz) = 44544
+SHA256 (tree-sitter-grammars-tree-sitter-bitbake-10bacac929ff36a1e8f4056503fe4f8717b21b94_GH0.tar.gz) = 1bebc9f3f4f7df5c1a7781f68b7f4bab180b5491140659d326e7717ab97a9dcd
+SIZE (tree-sitter-grammars-tree-sitter-bitbake-10bacac929ff36a1e8f4056503fe4f8717b21b94_GH0.tar.gz) = 338243
+SHA256 (Tudyx-tree-sitter-log-62cfe307e942af3417171243b599cc7deac5eab9_GH0.tar.gz) = fc009711ed59ad62d5ef7c3abdc82cba458a4354aad8e79d3cf3c9eef79e0f0a
+SIZE (Tudyx-tree-sitter-log-62cfe307e942af3417171243b599cc7deac5eab9_GH0.tar.gz) = 39082
+SHA256 (urbit-pilled-tree-sitter-hoon-1d5df35af3e0afe592832a67b9fb3feeeba1f7b6_GH0.tar.gz) = 250a4a64888a8215fdd4810db16ff9beadb68b84c326ebde36025d0279315f58
+SIZE (urbit-pilled-tree-sitter-hoon-1d5df35af3e0afe592832a67b9fb3feeeba1f7b6_GH0.tar.gz) = 525628
+SHA256 (antosha417-tree-sitter-hocon-c390f10519ae69fdb03b3e5764f5592fb6924bcc_GH0.tar.gz) = aac9ff83cd879ebcfb56a9297e036038eaf9ab843c43b4f7743da67d09cf4c42
+SIZE (antosha417-tree-sitter-hocon-c390f10519ae69fdb03b3e5764f5592fb6924bcc_GH0.tar.gz) = 34338
+SHA256 (mtoohey31-tree-sitter-koka-96d070c3700692858035f3524cc0ad944cef2594_GH0.tar.gz) = 3275da385f86867691dde447e6399b7b2ed6462c97daf0233817ad294802c636
+SIZE (mtoohey31-tree-sitter-koka-96d070c3700692858035f3524cc0ad944cef2594_GH0.tar.gz) = 155694
+SHA256 (tact-lang-tree-sitter-tact-ec57ab29c86d632639726631fb2bb178d23e1c91_GH0.tar.gz) = 53bdd18b27f8a8b367f807ad540e721d7e76c3ee6215116c746118b6e2d19e90
+SIZE (tact-lang-tree-sitter-tact-ec57ab29c86d632639726631fb2bb178d23e1c91_GH0.tar.gz) = 152791
+SHA256 (apple-tree-sitter-pkl-c03f04a313b712f8ab00a2d862c10b37318699ae_GH0.tar.gz) = 2c5d58333ec8f9d23cfcab8f5223cf10b92651d1a99b2278ea98aec59765be2c
+SIZE (apple-tree-sitter-pkl-c03f04a313b712f8ab00a2d862c10b37318699ae_GH0.tar.gz) = 358061
+SHA256 (murtaza64-tree-sitter-groovy-235009aad0f580211fc12014bb0846c3910130c1_GH0.tar.gz) = c0aebbd70d74b63dcfbf5ba0cc3d19273951f5bb2cb7ed435e57cfbe9a098270
+SIZE (murtaza64-tree-sitter-groovy-235009aad0f580211fc12014bb0846c3910130c1_GH0.tar.gz) = 350386
+SHA256 (google-tree-sitter-fidl-bdbb635a7f5035e424f6173f2f11b9cd79703f8d_GH0.tar.gz) = e2a12707074a718089ddd96e1187cb4899ea9161e8254f1b02169397e51f23ef
+SIZE (google-tree-sitter-fidl-bdbb635a7f5035e424f6173f2f11b9cd79703f8d_GH0.tar.gz) = 46586
+SHA256 (airbus-cert-tree-sitter-powershell-c9316be0faca5d5b9fd3b57350de650755f42dc0_GH0.tar.gz) = aa8356bbfca12ee90f1c5fe7bf97aac996b2cd798e054c0636ad7beeb3c226f2
+SIZE (airbus-cert-tree-sitter-powershell-c9316be0faca5d5b9fd3b57350de650755f42dc0_GH0.tar.gz) = 226943
+SHA256 (mtoohey31-tree-sitter-ld-0e9695ae0ede47b8744a8e2ad44d4d40c5d4e4c9_GH0.tar.gz) = 66947b7686a4b5848e7b436d2fef471a6de4826b2bdf472d928509119c7d596b
+SIZE (mtoohey31-tree-sitter-ld-0e9695ae0ede47b8744a8e2ad44d4d40c5d4e4c9_GH0.tar.gz) = 72451
+SHA256 (tree-sitter-grammars-tree-sitter-hyprlang-27af9b74acf89fa6bed4fb8cb8631994fcb2e6f3_GH0.tar.gz) = c19523223bd5e24b14f9204fcf18c1c9d6a7fb1a4d7e5fb9cca85e975de89e90
+SIZE (tree-sitter-grammars-tree-sitter-hyprlang-27af9b74acf89fa6bed4fb8cb8631994fcb2e6f3_GH0.tar.gz) = 71301
+SHA256 (tree-sitter-grammars-tree-sitter-tcl-56ad1fa6a34ba800e5495d1025a9b0fda338d5b8_GH0.tar.gz) = 69915dd805c21d083e74717902c56aeaf422017512b45459edc7bdc96e15c9d6
+SIZE (tree-sitter-grammars-tree-sitter-tcl-56ad1fa6a34ba800e5495d1025a9b0fda338d5b8_GH0.tar.gz) = 68298
+SHA256 (madskjeldgaard-tree-sitter-supercollider-3b35bd0fded4423c8fb30e9585c7bacbcd0e8095_GH0.tar.gz) = d4d1b542c70291dd5331977e5481ea625b6c523987b1a2773da23480547ee5a4
+SIZE (madskjeldgaard-tree-sitter-supercollider-3b35bd0fded4423c8fb30e9585c7bacbcd0e8095_GH0.tar.gz) = 4092970
+SHA256 (ember-tooling-tree-sitter-glimmer-5dc6d1040e8ff8978ff3680e818d85447bbc10aa_GH0.tar.gz) = ae767ae0080ddf2d9d278c38f568cc473914b1a1aa8cc1a867bf2a2003800550
+SIZE (ember-tooling-tree-sitter-glimmer-5dc6d1040e8ff8978ff3680e818d85447bbc10aa_GH0.tar.gz) = 929173
+SHA256 (novusnota-tree-sitter-ohm-80f14f0e477ddacc1e137d5ed8e830329e3fb7a3_GH0.tar.gz) = fb9b04e9b6688a632ce77ebaddd4cde1e176ef84ea914412de974b52c420aef0
+SIZE (novusnota-tree-sitter-ohm-80f14f0e477ddacc1e137d5ed8e830329e3fb7a3_GH0.tar.gz) = 55392
+SHA256 (glehmann-tree-sitter-earthfile-dbfb970a59cd87b628d087eb8e3fbe19c8e20601_GH0.tar.gz) = 52bc85556f4853ae03c6efe54d4f765fb24558db9a1fe0334bf01560db5d947a
+SIZE (glehmann-tree-sitter-earthfile-dbfb970a59cd87b628d087eb8e3fbe19c8e20601_GH0.tar.gz) = 405835
+SHA256 (adl-lang-tree-sitter-adl-2787d04beadfbe154d3f2da6e98dc45a1b134bbf_GH0.tar.gz) = 96437e9d8e45a21d3236a2e825928da34a46509750ea75670462594d63e43207
+SIZE (adl-lang-tree-sitter-adl-2787d04beadfbe154d3f2da6e98dc45a1b134bbf_GH0.tar.gz) = 34736
+SHA256 (kepet19-tree-sitter-ldif-0a917207f65ba3e3acfa9cda16142ee39c4c1aaa_GH0.tar.gz) = 117d23059cd18f39b46fc5cd78c6b6f5ebacbc3441a995ad3ed1dd83b9b56800
+SIZE (kepet19-tree-sitter-ldif-0a917207f65ba3e3acfa9cda16142ee39c4c1aaa_GH0.tar.gz) = 17750
+SHA256 (Alexis-Lapierre-tree-sitter-xtc-7bc11b736250c45e25cfb0215db2f8393779957e_GH0.tar.gz) = beb0d5ff4bf801f721a4c930d34aa7b272178182bb71d0e55abea82499e523f5
+SIZE (Alexis-Lapierre-tree-sitter-xtc-7bc11b736250c45e25cfb0215db2f8393779957e_GH0.tar.gz) = 12760
+SHA256 (tzakian-tree-sitter-move-8bc0d1692caa8763fef54d48068238d9bf3c0264_GH0.tar.gz) = f6f8f15772aa79697985a5cd785f4d8bdac6aeb7b810dcadb5f899ec87cbfc27
+SIZE (tzakian-tree-sitter-move-8bc0d1692caa8763fef54d48068238d9bf3c0264_GH0.tar.gz) = 2462642
+SHA256 (pest-parser-tree-sitter-pest-a8a98a824452b1ec4da7f508386a187a2f234b85_GH0.tar.gz) = 6c02f54bd4d4c9a75a5b8745f9686048e7e44fe5f706852bd8ed4ab0cfa23e13
+SIZE (pest-parser-tree-sitter-pest-a8a98a824452b1ec4da7f508386a187a2f234b85_GH0.tar.gz) = 34421
+SHA256 (Wilfred-tree-sitter-elisp-e5524fdccf8c22fc726474a910e4ade976dfc7bb_GH0.tar.gz) = b8517b20bf5bcd84d56eb7b70669fe24b5d9f45e33861a59f8a3552bfc6218a6
+SIZE (Wilfred-tree-sitter-elisp-e5524fdccf8c22fc726474a910e4ade976dfc7bb_GH0.tar.gz) = 26430
diff --git a/textproc/tree-sitter-grammars/files/patch-src_main.rs b/textproc/tree-sitter-grammars/files/patch-src_main.rs
new file mode 100644
index 000000000000..4197c86a3f26
--- /dev/null
+++ b/textproc/tree-sitter-grammars/files/patch-src_main.rs
@@ -0,0 +1,33 @@
+--- src/main.rs.orig 2025-08-19 16:12:37 UTC
++++ src/main.rs
+@@ -88,14 +88,14 @@ fn main() -> Result<()> {
+ }
+ };
+
+- let helix_dir = tmp_dir.join("helix");
+- checkout_repo(
+- &helix_dir,
+- "https://github.com/helix-editor/helix",
+- "0a4432b104099534f7a25b8ea4148234db146ab6",
+- )?;
++// let helix_dir = tmp_dir.join("helix");
++// checkout_repo(
++// &helix_dir,
++// "https://github.com/helix-editor/helix",
++// "0a4432b104099534f7a25b8ea4148234db146ab6",
++// )?;
+
+- let Ok(languages_config) = &fs::read_to_string(helix_dir.join("languages.toml"))
++ let Ok(languages_config) = &fs::read_to_string("languages.toml")
+ else {
+ error!("Failed to read grammars config");
+ bail!("Failed to read grammars config");
+@@ -158,7 +158,7 @@ fn build_grammar(
+ tmp_dir: &Path,
+ ) -> Result<()> {
+ let path = tmp_dir.join(format! {"tree-sitter-{}",grammar.name});
+- checkout_repo(&path, &grammar.source.git, &grammar.source.rev)?;
++// checkout_repo(&path, &grammar.source.git, &grammar.source.rev)?;
+ let path = if let Some(subpath) = grammar.source.subpath.as_ref() {
+ path.join(subpath)
+ } else {
diff --git a/textproc/tree-sitter-grammars/gh_tuples.sh b/textproc/tree-sitter-grammars/gh_tuples.sh
new file mode 100644
index 000000000000..4d4e62cf2009
--- /dev/null
+++ b/textproc/tree-sitter-grammars/gh_tuples.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# pkg install textproc/tomlq
+
+vers="v0.4.2+1f9f9dd"
+
+# https://github.com/lapce/tree-sitter-grammars/blob/v0.4.2%2B1f9f9dd/src/main.rs#L92
+
+helix_rev=$(fetch -q -o - "https://raw.githubusercontent.com/lapce/tree-sitter-grammars/refs/tags/${vers}/src/main.rs" | grep -A1 "https://github.com/helix-editor/helix" | tail -n 1 | sed -e 's# ##g' -e 's#"##g' -e 's#,##')
+
+echo "https://raw.githubusercontent.com/helix-editor/helix/${helix_rev}/languages.toml"
+exit
+fetch -q https://raw.githubusercontent.com/helix-editor/helix/${helix_rev}/languages.toml
+
+len=$(tomlq '.grammar | length' languages.toml)
+len=$(expr ${len} - 1)
+
+for i in $(seq 0 ${len})
+do
+ # git source and git rev
+ name=$(tomlq ".grammar[${i}].name" languages.toml | sed 's#"##g')
+ src=$(tomlq ".grammar[${i}].source.git" languages.toml | sed 's#"##g')
+ rev=$(tomlq ".grammar[${i}].source.rev" languages.toml | sed 's#"##g')
+ subpath=$(tomlq ".grammar[${i}].source.subpath" languages.toml | sed 's#"##g')
+
+ echo ${src} | grep -q github.com
+ if [ $? -ne 0 ]; then
+# echo "XXX $src, $rev not a github repo"
+ continue
+ fi
+
+ src_a=$(echo ${src} | awk -F '/' '{print $4}')
+ src_b=$(echo ${src} | awk -F '/' '{print $5}')
+
+ echo "${src_a}:${src_b}:${rev}:ts${i}/grammars/tree-sitter-${name} \\"
+done
diff --git a/textproc/tree-sitter-grammars/pkg-descr b/textproc/tree-sitter-grammars/pkg-descr
new file mode 100644
index 000000000000..99294eae3da0
--- /dev/null
+++ b/textproc/tree-sitter-grammars/pkg-descr
@@ -0,0 +1,9 @@
+Collection of tree-sitter grammars
+
+Language support such as tokenizing and highlighting is provided by Tree-sitter.
+Each language requires a Tree-sitter grammar to have tokenization and queries
+to provide additional features such as syntax highlighting.
+
+Lapce has select few (Rust, JSON, TOML) grammars built-in for convenience.
+All other languages need to provide an externally loadable grammar in a form of
+shared library, which this port provides.
diff --git a/textproc/tree-sitter-grammars/pkg-plist b/textproc/tree-sitter-grammars/pkg-plist
new file mode 100644
index 000000000000..036a7cddc687
--- /dev/null
+++ b/textproc/tree-sitter-grammars/pkg-plist
@@ -0,0 +1,203 @@
+%%DATADIR%%/libtree-sitter-ada.so
+%%DATADIR%%/libtree-sitter-adl.so
+%%DATADIR%%/libtree-sitter-agda.so
+%%DATADIR%%/libtree-sitter-astro.so
+%%DATADIR%%/libtree-sitter-awk.so
+%%DATADIR%%/libtree-sitter-bash.so
+%%DATADIR%%/libtree-sitter-bass.so
+%%DATADIR%%/libtree-sitter-beancount.so
+%%DATADIR%%/libtree-sitter-bibtex.so
+%%DATADIR%%/libtree-sitter-bicep.so
+%%DATADIR%%/libtree-sitter-bitbake.so
+%%DATADIR%%/libtree-sitter-blade.so
+%%DATADIR%%/libtree-sitter-blueprint.so
+%%DATADIR%%/libtree-sitter-c-sharp.so
+%%DATADIR%%/libtree-sitter-c.so
+%%DATADIR%%/libtree-sitter-cairo.so
+%%DATADIR%%/libtree-sitter-capnp.so
+%%DATADIR%%/libtree-sitter-cel.so
+%%DATADIR%%/libtree-sitter-clojure.so
+%%DATADIR%%/libtree-sitter-cmake.so
+%%DATADIR%%/libtree-sitter-comment.so
+%%DATADIR%%/libtree-sitter-cpon.so
+%%DATADIR%%/libtree-sitter-cpp.so
+%%DATADIR%%/libtree-sitter-css.so
+%%DATADIR%%/libtree-sitter-cue.so
+%%DATADIR%%/libtree-sitter-d.so
+%%DATADIR%%/libtree-sitter-dart.so
+%%DATADIR%%/libtree-sitter-dbml.so
+%%DATADIR%%/libtree-sitter-devicetree.so
+%%DATADIR%%/libtree-sitter-dhall.so
+%%DATADIR%%/libtree-sitter-diff.so
+%%DATADIR%%/libtree-sitter-dockerfile.so
+%%DATADIR%%/libtree-sitter-dot.so
+%%DATADIR%%/libtree-sitter-dtd.so
+%%DATADIR%%/libtree-sitter-earthfile.so
+%%DATADIR%%/libtree-sitter-edoc.so
+%%DATADIR%%/libtree-sitter-eex.so
+%%DATADIR%%/libtree-sitter-elisp.so
+%%DATADIR%%/libtree-sitter-elixir.so
+%%DATADIR%%/libtree-sitter-elm.so
+%%DATADIR%%/libtree-sitter-elvish.so
+%%DATADIR%%/libtree-sitter-embedded-template.so
+%%DATADIR%%/libtree-sitter-erlang.so
+%%DATADIR%%/libtree-sitter-esdl.so
+%%DATADIR%%/libtree-sitter-fidl.so
+%%DATADIR%%/libtree-sitter-fish.so
+%%DATADIR%%/libtree-sitter-forth.so
+%%DATADIR%%/libtree-sitter-fortran.so
+%%DATADIR%%/libtree-sitter-fsharp.so
+%%DATADIR%%/libtree-sitter-gas.so
+%%DATADIR%%/libtree-sitter-gdscript.so
+%%DATADIR%%/libtree-sitter-gemini.so
+%%DATADIR%%/libtree-sitter-git-commit.so
+%%DATADIR%%/libtree-sitter-git-config.so
+%%DATADIR%%/libtree-sitter-git-rebase.so
+%%DATADIR%%/libtree-sitter-gitattributes.so
+%%DATADIR%%/libtree-sitter-gitignore.so
+%%DATADIR%%/libtree-sitter-gleam.so
+%%DATADIR%%/libtree-sitter-glimmer.so
+%%DATADIR%%/libtree-sitter-glsl.so
+%%DATADIR%%/libtree-sitter-gn.so
+%%DATADIR%%/libtree-sitter-go.so
+%%DATADIR%%/libtree-sitter-godot-resource.so
+%%DATADIR%%/libtree-sitter-gomod.so
+%%DATADIR%%/libtree-sitter-gotmpl.so
+%%DATADIR%%/libtree-sitter-gowork.so
+%%DATADIR%%/libtree-sitter-graphql.so
+%%DATADIR%%/libtree-sitter-groovy.so
+%%DATADIR%%/libtree-sitter-hare.so
+%%DATADIR%%/libtree-sitter-haskell-persistent.so
+%%DATADIR%%/libtree-sitter-haskell.so
+%%DATADIR%%/libtree-sitter-hcl.so
+%%DATADIR%%/libtree-sitter-heex.so
+%%DATADIR%%/libtree-sitter-hocon.so
+%%DATADIR%%/libtree-sitter-hoon.so
+%%DATADIR%%/libtree-sitter-hosts.so
+%%DATADIR%%/libtree-sitter-html.so
+%%DATADIR%%/libtree-sitter-hurl.so
+%%DATADIR%%/libtree-sitter-hyprlang.so
+%%DATADIR%%/libtree-sitter-iex.so
+%%DATADIR%%/libtree-sitter-ini.so
+%%DATADIR%%/libtree-sitter-inko.so
+%%DATADIR%%/libtree-sitter-janet-simple.so
+%%DATADIR%%/libtree-sitter-java.so
+%%DATADIR%%/libtree-sitter-javascript.so
+%%DATADIR%%/libtree-sitter-jinja2.so
+%%DATADIR%%/libtree-sitter-jjdescription.so
+%%DATADIR%%/libtree-sitter-jsdoc.so
+%%DATADIR%%/libtree-sitter-json.so
+%%DATADIR%%/libtree-sitter-json5.so
+%%DATADIR%%/libtree-sitter-jsonnet.so
+%%DATADIR%%/libtree-sitter-julia.so
+%%DATADIR%%/libtree-sitter-just.so
+%%DATADIR%%/libtree-sitter-kdl.so
+%%DATADIR%%/libtree-sitter-koka.so
+%%DATADIR%%/libtree-sitter-kotlin.so
+%%DATADIR%%/libtree-sitter-latex.so
+%%DATADIR%%/libtree-sitter-ld.so
+%%DATADIR%%/libtree-sitter-ldif.so
+%%DATADIR%%/libtree-sitter-lean.so
+%%DATADIR%%/libtree-sitter-ledger.so
+%%DATADIR%%/libtree-sitter-llvm-mir.so
+%%DATADIR%%/libtree-sitter-llvm.so
+%%DATADIR%%/libtree-sitter-log.so
+%%DATADIR%%/libtree-sitter-lpf.so
+%%DATADIR%%/libtree-sitter-lua.so
+%%DATADIR%%/libtree-sitter-make.so
+%%DATADIR%%/libtree-sitter-markdoc.so
+%%DATADIR%%/libtree-sitter-markdown.so
+%%DATADIR%%/libtree-sitter-markdown_inline.so
+%%DATADIR%%/libtree-sitter-matlab.so
+%%DATADIR%%/libtree-sitter-mermaid.so
+%%DATADIR%%/libtree-sitter-meson.so
+%%DATADIR%%/libtree-sitter-mojo.so
+%%DATADIR%%/libtree-sitter-move.so
+%%DATADIR%%/libtree-sitter-nasm.so
+%%DATADIR%%/libtree-sitter-nickel.so
+%%DATADIR%%/libtree-sitter-nim.so
+%%DATADIR%%/libtree-sitter-nix.so
+%%DATADIR%%/libtree-sitter-nu.so
+%%DATADIR%%/libtree-sitter-ocaml-interface.so
+%%DATADIR%%/libtree-sitter-ocaml.so
+%%DATADIR%%/libtree-sitter-odin.so
+%%DATADIR%%/libtree-sitter-ohm.so
+%%DATADIR%%/libtree-sitter-opencl.so
+%%DATADIR%%/libtree-sitter-openscad.so
+%%DATADIR%%/libtree-sitter-org.so
+%%DATADIR%%/libtree-sitter-pascal.so
+%%DATADIR%%/libtree-sitter-passwd.so
+%%DATADIR%%/libtree-sitter-pem.so
+%%DATADIR%%/libtree-sitter-perl.so
+%%DATADIR%%/libtree-sitter-pest.so
+%%DATADIR%%/libtree-sitter-php-only.so
+%%DATADIR%%/libtree-sitter-php.so
+%%DATADIR%%/libtree-sitter-pkl.so
+%%DATADIR%%/libtree-sitter-po.so
+%%DATADIR%%/libtree-sitter-pod.so
+%%DATADIR%%/libtree-sitter-ponylang.so
+%%DATADIR%%/libtree-sitter-powershell.so
+%%DATADIR%%/libtree-sitter-prisma.so
+%%DATADIR%%/libtree-sitter-protobuf.so
+%%DATADIR%%/libtree-sitter-prql.so
+%%DATADIR%%/libtree-sitter-purescript.so
+%%DATADIR%%/libtree-sitter-python.so
+%%DATADIR%%/libtree-sitter-qmljs.so
+%%DATADIR%%/libtree-sitter-r.so
+%%DATADIR%%/libtree-sitter-regex.so
+%%DATADIR%%/libtree-sitter-rego.so
+%%DATADIR%%/libtree-sitter-rescript.so
+%%DATADIR%%/libtree-sitter-robot.so
+%%DATADIR%%/libtree-sitter-ron.so
+%%DATADIR%%/libtree-sitter-rst.so
+%%DATADIR%%/libtree-sitter-ruby.so
+%%DATADIR%%/libtree-sitter-rust.so
+%%DATADIR%%/libtree-sitter-scala.so
+%%DATADIR%%/libtree-sitter-scheme.so
+%%DATADIR%%/libtree-sitter-scss.so
+%%DATADIR%%/libtree-sitter-slint.so
+%%DATADIR%%/libtree-sitter-smali.so
+%%DATADIR%%/libtree-sitter-smithy.so
+%%DATADIR%%/libtree-sitter-sml.so
+%%DATADIR%%/libtree-sitter-solidity.so
+%%DATADIR%%/libtree-sitter-spicedb.so
+%%DATADIR%%/libtree-sitter-sql.so
+%%DATADIR%%/libtree-sitter-sshclientconfig.so
+%%DATADIR%%/libtree-sitter-strace.so
+%%DATADIR%%/libtree-sitter-supercollider.so
+%%DATADIR%%/libtree-sitter-svelte.so
+%%DATADIR%%/libtree-sitter-sway.so
+%%DATADIR%%/libtree-sitter-swift.so
+%%DATADIR%%/libtree-sitter-t32.so
+%%DATADIR%%/libtree-sitter-tablegen.so
+%%DATADIR%%/libtree-sitter-tact.so
+%%DATADIR%%/libtree-sitter-task.so
+%%DATADIR%%/libtree-sitter-tcl.so
+%%DATADIR%%/libtree-sitter-templ.so
+%%DATADIR%%/libtree-sitter-todotxt.so
+%%DATADIR%%/libtree-sitter-toml.so
+%%DATADIR%%/libtree-sitter-tsq.so
+%%DATADIR%%/libtree-sitter-tsx.so
+%%DATADIR%%/libtree-sitter-twig.so
+%%DATADIR%%/libtree-sitter-typescript.so
+%%DATADIR%%/libtree-sitter-typst.so
+%%DATADIR%%/libtree-sitter-ungrammar.so
+%%DATADIR%%/libtree-sitter-unison.so
+%%DATADIR%%/libtree-sitter-uxntal.so
+%%DATADIR%%/libtree-sitter-v.so
+%%DATADIR%%/libtree-sitter-vala.so
+%%DATADIR%%/libtree-sitter-verilog.so
+%%DATADIR%%/libtree-sitter-vhdl.so
+%%DATADIR%%/libtree-sitter-vhs.so
+%%DATADIR%%/libtree-sitter-vue.so
+%%DATADIR%%/libtree-sitter-wast.so
+%%DATADIR%%/libtree-sitter-wat.so
+%%DATADIR%%/libtree-sitter-wgsl.so
+%%DATADIR%%/libtree-sitter-wren.so
+%%DATADIR%%/libtree-sitter-xit.so
+%%DATADIR%%/libtree-sitter-xml.so
+%%DATADIR%%/libtree-sitter-xtc.so
+%%DATADIR%%/libtree-sitter-yaml.so
+%%DATADIR%%/libtree-sitter-yuck.so
+%%DATADIR%%/libtree-sitter-zig.so
+%%DATADIR%%/version
diff --git a/textproc/ttynt/Makefile b/textproc/ttynt/Makefile
index 2026e3b02eb0..bd948a5de4cd 100644
--- a/textproc/ttynt/Makefile
+++ b/textproc/ttynt/Makefile
@@ -1,7 +1,7 @@
PORTNAME= ttynt
DISTVERSIONPREFIX= v
DISTVERSION= 0.0.1
-PORTREVISION= 9
+PORTREVISION= 10
CATEGORIES= textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/textproc/tui-journal/Makefile b/textproc/tui-journal/Makefile
index f6ab9dfbe2e2..345c9b4c1177 100644
--- a/textproc/tui-journal/Makefile
+++ b/textproc/tui-journal/Makefile
@@ -1,6 +1,7 @@
PORTNAME= tui-journal
DISTVERSIONPREFIX= v
DISTVERSION= 0.16.0
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= dutra@FreeBSD.org
diff --git a/textproc/typst/Makefile b/textproc/typst/Makefile
index 7f9b031852e0..8681d756d4b8 100644
--- a/textproc/typst/Makefile
+++ b/textproc/typst/Makefile
@@ -1,7 +1,7 @@
PORTNAME= typst
DISTVERSIONPREFIX= v
DISTVERSION= 0.13.1
-PORTREVISION= 3
+PORTREVISION= 4
CATEGORIES= textproc
MAINTAINER= wen@FreeBSD.org
diff --git a/textproc/xan/Makefile b/textproc/xan/Makefile
index 79da1812b009..e9355f3454ff 100644
--- a/textproc/xan/Makefile
+++ b/textproc/xan/Makefile
@@ -1,5 +1,6 @@
PORTNAME= xan
DISTVERSION= 0.52.0
+PORTREVISION= 1
CATEGORIES= textproc
MAINTAINER= tagattie@FreeBSD.org
diff --git a/textproc/xml2rfc/Makefile b/textproc/xml2rfc/Makefile
index 44cbf9a7deee..eb8d426ef60e 100644
--- a/textproc/xml2rfc/Makefile
+++ b/textproc/xml2rfc/Makefile
@@ -1,5 +1,5 @@
PORTNAME= xml2rfc
-PORTVERSION= 3.30.0
+PORTVERSION= 3.30.1
CATEGORIES= textproc
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/textproc/xml2rfc/distinfo b/textproc/xml2rfc/distinfo
index 3c1c1c784127..668260943b53 100644
--- a/textproc/xml2rfc/distinfo
+++ b/textproc/xml2rfc/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1754145992
-SHA256 (xml2rfc-3.30.0.tar.gz) = b977b26edd5d930020966fa4692fc7fcdcb4f7401a8429981d4cbc0cc4bbba25
-SIZE (xml2rfc-3.30.0.tar.gz) = 420650
+TIMESTAMP = 1756661238
+SHA256 (xml2rfc-3.30.1.tar.gz) = 9299d9a9f02c41a51da28674c54cf4ed99f457ea121edcc0727026fcfd21d746
+SIZE (xml2rfc-3.30.1.tar.gz) = 421403
diff --git a/textproc/xsv-rs/Makefile b/textproc/xsv-rs/Makefile
index fa1d0b813003..c7647169c0dd 100644
--- a/textproc/xsv-rs/Makefile
+++ b/textproc/xsv-rs/Makefile
@@ -1,6 +1,6 @@
PORTNAME= xsv
DISTVERSION= 0.13.0
-PORTREVISION= 68
+PORTREVISION= 69
CATEGORIES= textproc
PKGNAMESUFFIX= -rs