xee_xslt_compiler/
run.rs

1use xee_name::{Namespaces, FN_NAMESPACE};
2use xot::{Node, Xot};
3
4use xee_interpreter::context::StaticContext;
5use xee_interpreter::error;
6use xee_interpreter::interpreter::Program;
7use xee_interpreter::sequence;
8
9use crate::ast_ir::parse;
10
11pub fn evaluate_program(
12    xot: &mut Xot,
13    program: &Program,
14    root: Node,
15) -> error::SpannedResult<sequence::Sequence> {
16    let mut documents = xee_interpreter::xml::Documents::new();
17    let handle = documents.add_root(None, root).unwrap();
18    let root = documents.get_node_by_handle(handle).unwrap();
19    let mut dynamic_context_builder = program.dynamic_context_builder();
20    dynamic_context_builder.context_node(root);
21    dynamic_context_builder.documents(documents);
22    let context = dynamic_context_builder.build();
23    let runnable = program.runnable(&context);
24    runnable.many(xot)
25}
26
27pub fn evaluate(xot: &mut Xot, xml: &str, xslt: &str) -> error::SpannedResult<sequence::Sequence> {
28    let namespaces = Namespaces::new(
29        Namespaces::default_namespaces(),
30        "".to_string(),
31        FN_NAMESPACE.to_string(),
32    );
33    let static_context = StaticContext::from_namespaces(namespaces);
34    let root = xot.parse(xml).unwrap();
35    let program = parse(static_context, xslt).unwrap();
36    evaluate_program(xot, &program, root)
37}