Skip to main content

xsd_schema/xpath/
mod.rs

1//! XPath2 evaluation engine
2//!
3//! This module provides the full XPath 2.0 parser, binder, and evaluator.
4//!
5//! ## Core Types (re-exported from `navigator`)
6//!
7//! - [`DomNavigator`] - Trait for cursor-based XML navigation
8//! - [`DomNodeType`] - Node type enumeration (Element, Text, Attribute, etc.)
9//! - [`XmlNodeOrder`] - Document order comparison result
10//! - [`NamespaceAxisScope`] - Scope filter for namespace axis traversal
11//!
12//! ## Parser
13//!
14//! - [`ast`] - AST node types for XPath expressions
15//! - [`arena`] - Arena-based storage for AST nodes
16//! - [`lexer`] - Stateful tokenizer with lookahead
17//! - [`parser`] - LALRPOP-based parser
18
19// Parser modules
20pub mod arena;
21pub mod ast;
22pub mod axis_iterators;
23pub mod context;
24pub mod error;
25pub mod item_set;
26pub mod iterator;
27pub mod lexer;
28pub mod node_test;
29pub mod operators;
30pub mod parser;
31pub mod timsort;
32pub mod tree_comparer;
33
34// Core function modules (ported from CoreFuncs.cs)
35pub mod atomize;
36pub mod boolean;
37pub mod cast;
38pub mod iter_adapters;
39pub mod node_ops;
40pub mod quantified;
41pub mod sequence_ops;
42pub mod string_ops;
43pub mod type_info;
44
45// XPath 2.0 function registry and dispatch
46pub mod functions;
47
48// AST binding and evaluation phases
49pub mod bind;
50pub mod eval;
51
52// High-level public API
53pub mod api;
54
55// Re-export navigator types for backward compatibility
56pub use crate::navigator::{
57    DomNavigator, DomNodeType, NamespaceAxisScope, NavigatorError, RoXmlNavigator, TypedValue,
58    XmlNodeOrder,
59};
60
61// High-level API re-exports
62pub use self::api::{EvalValue, ExternalVar, TypedEvaluator, XPathEvaluator, XPathExpr};
63
64// Re-export key parser types
65pub use self::arena::{AstArena, AstNodeId, SourceSpan};
66pub use self::ast::AstNode;
67pub use self::axis_iterators::{
68    AncestorAxis, AttributeAxis, AxisTraversal, ChildAxis, ChildOverDescendantsNodeIterator,
69    DescendantNodeIterator, FollowingNodeIterator, FollowingSiblingAxis, NamespaceAxis, ParentAxis,
70    PrecedingNodeIterator, PrecedingSiblingAxis, SelfAxis, SequentialAxisNodeIterator,
71    SpecialChildNodeIterator, SpecialDescendantNodeIterator,
72};
73pub use self::bind::bind_node;
74pub use self::context::{DynamicContext, NameBinder, VarRef, VarSlotId, VarStore, XPathContext};
75pub use self::error::XPathError;
76pub use self::eval::eval_node;
77pub use self::functions::{
78    FunctionArity, FunctionId, FunctionSignature, XPathValue, FUNCTION_REGISTRY,
79};
80pub use self::item_set::{
81    ItemSet, ItemSetIter, ItemSetIterMut, XPathComparer, XPathEqualityComparer,
82};
83pub use self::iterator::{
84    BufferedNodeIterator, DocumentOrderNodeIterator, EmptyIterator, ItemIterator,
85    PositionFilterNodeIterator, RangeIterator, VecNodeIterator, XmlItem, XmlItemRef,
86    XmlNodeIterator,
87};
88pub use self::lexer::{Lexer, Token};
89pub use self::node_test::{matches_name_test, matches_sequence_type, NodeTest};
90pub use self::parser::{
91    parse, parse_with_options, parse_xpath10, parse_xpath20, ParseError, ParsedXPath,
92};
93pub use self::timsort::{
94    timsort, timsort_by, timsort_slice, timsort_slice_by, timsort_slice_with_comparer,
95    timsort_with_comparer, FnComparer, IComparer, OrdComparer, ReverseComparer,
96};
97pub use self::tree_comparer::TreeComparer;
98
99/// Selects XPath language version for parsing and evaluation.
100#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
101pub enum XPathMode {
102    XPath10,
103    #[default]
104    XPath20,
105}
106
107/// Options for XPath parsing.
108#[derive(Debug, Clone)]
109pub struct XPathParseOptions {
110    pub mode: XPathMode,
111}
112
113impl Default for XPathParseOptions {
114    fn default() -> Self {
115        Self {
116            mode: XPathMode::XPath20,
117        }
118    }
119}