chadpath 0.3.2

XPath 1.0 / XSLT engine — a fork of xrust (Apache-2.0) with XPath positional-predicate correctness fixes and parser performance improvements. Used by chadselect.
Documentation
[package]
name = "chadpath"
version = "0.3.2"
keywords = ["xml", "xpath", "xslt", "html", "scraping"]
categories = ["parser-implementations"]
description = "XPath 1.0 / XSLT engine — a fork of xrust (Apache-2.0) with XPath positional-predicate correctness fixes and parser performance improvements. Used by chadselect."
# 0.3.2: per-query allocation-churn cut on the XPath evaluation path (no
#        behaviour change; verified against the full test suite). `compose`
#        evolves a single Context in place instead of deep-cloning it every step;
#        predicate filtering uses `ctxt.clone()` (not `ContextBuilder::from`,
#        which clones the context sequence twice) and reuses the per-item context
#        Vec; boolean comparison results reuse a cached `Rc<Value>`. On a
#        `//a[…]//b[…]/text()` shape this removed tens of thousands of full-
#        Context clones per query (~30% fewer allocations on that path; the
#        consuming adapter's un-boxed axis iterators take it to ~45%).
# 0.3.1: NameTest::matches gains a fast-path for the bare `*` wildcard — it no
#        longer builds (and immediately discards) a QName for every node tested.
#        `//*`-rooted steps are the hottest real-world selector shape, so this
#        removes a per-node allocation across the whole-document sweep. No
#        behaviour change (verified against the chadselect XPath conformance suite).
authors = [
    # Original xrust authors (Apache-2.0):
    "Steve Ball <Steve.Ball@explain.com.au>",
    "Daniel Murphy <daniel@devasta.ie>",
    # chadpath fork maintainers:
    "Cerberus <markjacksoncbt@gmail.com>",
]
license = "Apache-2.0"
repository = "https://github.com/markjacksoncerberus/xrust"
documentation = "https://docs.rs/chadpath/"
readme = "README.md"
edition = "2024"
# Keep the published crate small: the W3C XML conformance corpora (~68 MB) are
# only needed to run xrust's own test suite, not to use the library.
exclude = [
    "tests/xml/",
    "tests/conformance/",
]

[features]
# The xslt feature enables XSLT support
default = ["xslt"]
xslt = []
# Do you want to run unit tests for the conformance suite
test-conformance-xml = []
test-conformance-xmlid = []


[[bench]]
name = "bench_smite"
harness = false

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
qualname = "0.0.1"
stacksafe = "1"
rust_decimal = "1.38.0"
rust_decimal_macros = "1.38.0"
lexers = "0.1.4"
unicode-segmentation = "1.12.0"
chrono = "0.4.42"
url = "2.5.7"
pkg-version = "1.0.0"
regex = "1.11.2"
hexdump = "0.1.2"
# For formatting numbers
formato = "0.3.0"
# For formatting integers
english-numbers = "0.3.3"
italian_numbers = "1.0.0"

# This is for the forest tree implementation
#generational-arena = "0.2"

[dev-dependencies]
criterion = "0.7.0"
encoding_rs = "0.8.35"
encoding_rs_io = "0.1.7"
earleybird = { git = "https://github.com/mdubinko/earleybird.git" }
indextree = "4.7.4"