leptris 1.9.201.0-arm-linux → 1.9.201.2-arm-linux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +23 -0
- data/Rakefile +52 -12
- data/ext/leptris/native/extconf.rb +85 -0
- data/ext/leptris/native/native.c +1 -1
- data/lib/leptris/version.rb +1 -1
- data/lib/leptris/xml/ffi.rb +13 -0
- data/lib/leptris/xml/native.so +0 -0
- data/vendor-src/libleptris/CHANGELOG.md +8080 -0
- data/vendor-src/libleptris/CLAUDE.md +150 -0
- data/vendor-src/libleptris/CMakeLists.txt +379 -0
- data/vendor-src/libleptris/CMakePresets.json +61 -0
- data/vendor-src/libleptris/CODE_OF_CONDUCT.md +132 -0
- data/vendor-src/libleptris/CONTEXT.md +49 -0
- data/vendor-src/libleptris/LICENSE.md +33 -0
- data/vendor-src/libleptris/README.adoc +1197 -0
- data/vendor-src/libleptris/TODO.assemble/README.md +16 -0
- data/vendor-src/libleptris/TODO.bindings/01-mutation-construction.md +18 -0
- data/vendor-src/libleptris/TODO.bindings/02-incremental-iterparse.md +15 -0
- data/vendor-src/libleptris/TODO.bindings/03-compiled-xpath.md +15 -0
- data/vendor-src/libleptris/TODO.bindings/04-pull-stax-api.md +14 -0
- data/vendor-src/libleptris/TODO.bindings/05-per-parse-options.md +17 -0
- data/vendor-src/libleptris/TODO.bindings/06-serialize-encoding-guarantees.md +14 -0
- data/vendor-src/libleptris/TODO.bindings/README.md +36 -0
- data/vendor-src/libleptris/TODO.concurrency/01-thread-safe-errors.md +19 -0
- data/vendor-src/libleptris/TODO.concurrency/02-export-surface-gate.md +24 -0
- data/vendor-src/libleptris/TODO.concurrency/03-mixed-nodeset-batch.md +14 -0
- data/vendor-src/libleptris/TODO.concurrency/04-canonical-status-message.md +13 -0
- data/vendor-src/libleptris/TODO.concurrency/05-windows-dll-name.md +10 -0
- data/vendor-src/libleptris/TODO.concurrency/06-exslt-pack.md +26 -0
- data/vendor-src/libleptris/TODO.concurrency/07-ns-set-pairs.md +11 -0
- data/vendor-src/libleptris/TODO.concurrency/08-threading-contract.md +45 -0
- data/vendor-src/libleptris/TODO.engine/01-file-sources.md +11 -0
- data/vendor-src/libleptris/TODO.engine/02-compiled-contexts.md +10 -0
- data/vendor-src/libleptris/TODO.engine/03-rust-publish.md +9 -0
- data/vendor-src/libleptris/TODO.engine/04-ruby-release-input.md +8 -0
- data/vendor-src/libleptris/TODO.engine/05-todo-md-refresh.md +7 -0
- data/vendor-src/libleptris/TODO.engine/README.md +16 -0
- data/vendor-src/libleptris/TODO.hygiene/README.md +15 -0
- data/vendor-src/libleptris/TODO.max-perf/00-INDEX.md +22 -0
- data/vendor-src/libleptris/TODO.max-perf/1-simd-html-scanner.md +15 -0
- data/vendor-src/libleptris/TODO.max-perf/10-moxml-plan-followups.md +9 -0
- data/vendor-src/libleptris/TODO.max-perf/2-compiled-dispatch-tokenizer.md +8 -0
- data/vendor-src/libleptris/TODO.max-perf/3-iterparse-fixed-cost.md +5 -0
- data/vendor-src/libleptris/TODO.max-perf/4-compact-node-micro-opts.md +17 -0
- data/vendor-src/libleptris/TODO.max-perf/5-xslt-bench-profiling-rounds.md +13 -0
- data/vendor-src/libleptris/TODO.max-perf/6-language-tails.md +9 -0
- data/vendor-src/libleptris/TODO.max-perf/7-validate-bindings.md +6 -0
- data/vendor-src/libleptris/TODO.max-perf/8-native-xml-diff-consumer.md +5 -0
- data/vendor-src/libleptris/TODO.max-perf/9-prebuilt-gem-matrix.md +14 -0
- data/vendor-src/libleptris/TODO.md +33 -0
- data/vendor-src/libleptris/TODO.transform/README.md +39 -0
- data/vendor-src/libleptris/TODO.validate/README.md +32 -0
- data/vendor-src/libleptris/TODO.xpath2/README.md +91 -0
- data/vendor-src/libleptris/TODO.xslt-full/01-xpath-fn-sequences.md +27 -0
- data/vendor-src/libleptris/TODO.xslt-full/02-xpath-fn-regex.md +13 -0
- data/vendor-src/libleptris/TODO.xslt-full/03-xpath-fn-math.md +10 -0
- data/vendor-src/libleptris/TODO.xslt-full/04-xpath-fn-strings-qname-uri.md +97 -0
- data/vendor-src/libleptris/TODO.xslt-full/05-xpath-fn-dates.md +30 -0
- data/vendor-src/libleptris/TODO.xslt-full/06-xpath-grammar-3x.md +83 -0
- data/vendor-src/libleptris/TODO.xslt-full/07-xpath-function-items.md +124 -0
- data/vendor-src/libleptris/TODO.xslt-full/08-xpath-maps-arrays.md +79 -0
- data/vendor-src/libleptris/TODO.xslt-full/09-xslt-noop-fillins.md +35 -0
- data/vendor-src/libleptris/TODO.xslt-full/10-xslt-tunnel-params.md +9 -0
- data/vendor-src/libleptris/TODO.xslt-full/11-xquery-core.md +119 -0
- data/vendor-src/libleptris/TODO.xslt-full/12-xquery-31.md +65 -0
- data/vendor-src/libleptris/TODO.xslt-full/13-perf-inprocess.md +425 -0
- data/vendor-src/libleptris/TODO.xslt-full/14-html-mode.md +803 -0
- data/vendor-src/libleptris/TODO.xslt-full/15-binding-entries.md +19 -0
- data/vendor-src/libleptris/TODO.xslt-full/16-schematron.md +156 -0
- data/vendor-src/libleptris/TODO.xslt-full/17-xml-diff.md +52 -0
- data/vendor-src/libleptris/TODO.xslt-full/18-compact-nodes.md +278 -0
- data/vendor-src/libleptris/TODO.xslt-full/README.md +26 -0
- data/vendor-src/libleptris/TODO.xslt-full/REMAINING.md +163 -0
- data/vendor-src/libleptris/TODO.xslt-full/legacy-v19/00-triage.md +171 -0
- data/vendor-src/libleptris/TODO.xslt-full/legacy-v19/01-fragment-nodes.md +19 -0
- data/vendor-src/libleptris/TODO.xslt-full/legacy-v19/02-root-node-semantics.md +34 -0
- data/vendor-src/libleptris/TODO.xslt-full/legacy-v19/03-crashes.md +15 -0
- data/vendor-src/libleptris/TODO.xslt-full/legacy-v19/04-namespaces.md +14 -0
- data/vendor-src/libleptris/TODO.xslt-full/legacy-v19/05-number-attrset-sort.md +13 -0
- data/vendor-src/libleptris/TODO.xslt-full/legacy-v19/06-document-chains.md +10 -0
- data/vendor-src/libleptris/TODO.xslt-full/legacy-v19/07-charef-serializer.md +9 -0
- data/vendor-src/libleptris/TODO.xslt-full/legacy-v19/08-perf-gate.md +8 -0
- data/vendor-src/libleptris/TODO.xslt-full/legacy-v19/09-release.md +14 -0
- data/vendor-src/libleptris/VALIDATION.md +151 -0
- data/vendor-src/libleptris/benchmarks/CMakeLists.txt +259 -0
- data/vendor-src/libleptris/benchmarks/README.adoc +228 -0
- data/vendor-src/libleptris/benchmarks/README.md +212 -0
- data/vendor-src/libleptris/benchmarks/common/benchmark.c +252 -0
- data/vendor-src/libleptris/benchmarks/common/benchmark.h +77 -0
- data/vendor-src/libleptris/benchmarks/common/test_data.c +415 -0
- data/vendor-src/libleptris/benchmarks/common/test_data.h +18 -0
- data/vendor-src/libleptris/benchmarks/comprehensive/CMakeLists.txt +184 -0
- data/vendor-src/libleptris/benchmarks/comprehensive/benchmark_decomp.cpp +110 -0
- data/vendor-src/libleptris/benchmarks/comprehensive/benchmark_first_access.cpp +261 -0
- data/vendor-src/libleptris/benchmarks/comprehensive/benchmark_many_attrs.cpp +150 -0
- data/vendor-src/libleptris/benchmarks/comprehensive/benchmark_memory.cpp +185 -0
- data/vendor-src/libleptris/benchmarks/comprehensive/benchmark_parse.cpp +270 -0
- data/vendor-src/libleptris/benchmarks/comprehensive/benchmark_parse_ops.cpp +392 -0
- data/vendor-src/libleptris/benchmarks/comprehensive/benchmark_sax.c +106 -0
- data/vendor-src/libleptris/benchmarks/comprehensive/benchmark_write.cpp +351 -0
- data/vendor-src/libleptris/benchmarks/data/attrs.xml +303 -0
- data/vendor-src/libleptris/benchmarks/data/cdata_test.xml +13 -0
- data/vendor-src/libleptris/benchmarks/data/comment_test.xml +15 -0
- data/vendor-src/libleptris/benchmarks/data/deep.xml +205 -0
- data/vendor-src/libleptris/benchmarks/data/generate_attrs.rb +22 -0
- data/vendor-src/libleptris/benchmarks/data/generate_deep.rb +25 -0
- data/vendor-src/libleptris/benchmarks/data/generate_large.rb +33 -0
- data/vendor-src/libleptris/benchmarks/data/generate_wide.rb +18 -0
- data/vendor-src/libleptris/benchmarks/data/large.xml +21003 -0
- data/vendor-src/libleptris/benchmarks/data/large_workflow.xml +4003 -0
- data/vendor-src/libleptris/benchmarks/data/medium.xml +67 -0
- data/vendor-src/libleptris/benchmarks/data/medium_workflow.xml +353 -0
- data/vendor-src/libleptris/benchmarks/data/pi_test.xml +9 -0
- data/vendor-src/libleptris/benchmarks/data/small.xml +10 -0
- data/vendor-src/libleptris/benchmarks/data/small_workflow.xml +36 -0
- data/vendor-src/libleptris/benchmarks/data/wide.xml +5003 -0
- data/vendor-src/libleptris/benchmarks/dom/bench_document_lifecycle.c +69 -0
- data/vendor-src/libleptris/benchmarks/dom/bench_leptris.c +184 -0
- data/vendor-src/libleptris/benchmarks/dom/bench_libxml2.c +176 -0
- data/vendor-src/libleptris/benchmarks/dom/bench_text_borrowed.c +74 -0
- data/vendor-src/libleptris/benchmarks/dom/dom_benchmark_v2.cpp +314 -0
- data/vendor-src/libleptris/benchmarks/fixtures/large.xml +4003 -0
- data/vendor-src/libleptris/benchmarks/fixtures/large_catalog.xml +50003 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2/eve.xml +6 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2/slashdot.rdf +66 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2/wap.xml +27 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/4rects.xml +11 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/a-valid.xml +10 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/a-wf.xml +9 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/bike.xml +41 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/circle.xml +11 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/defs.xml +14 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/desc.xml +14 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/ellipse.xml +10 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/flower2.xml +44 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/gradient.xml +16 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/group01.xml +15 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/group02.xml +13 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/group03.xml +13 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/image-valid.xml +11 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/image-wf.xml +11 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/lin-gradient.xml +16 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/marker.xml +28 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/mask.xml +13 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/mathswitch.xml +32 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/parentns.xml +12 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/path01.xml +5 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/path02.xml +10 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/patternfill.xml +12 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/polyline.xml +9 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/private.xml +19 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/rad-gradient.xml +17 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/rectangle.xml +10 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/richdesc.xml +12 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/script.xml +13 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/structure01.xml +10 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/style.xml +11 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/switch.xml +21 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/symbol-use.xml +28 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/template.xml +9 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/text01.xml +12 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/text02.xml +17 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/text03.xml +8 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/toap01.xml +10 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/toap02.xml +33 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/transform.xml +26 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/trivial.xml +6 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/twin-gradients.xml +19 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/v-template.xml +9 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/viewport-nest.xml +13 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/viewport-transform.xml +46 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/viewport.xml +11 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_svg/wf-template.xml +7 -0
- data/vendor-src/libleptris/benchmarks/fixtures/libxml2_xsdtest.xml +5286 -0
- data/vendor-src/libleptris/benchmarks/fixtures/medium.xml +403 -0
- data/vendor-src/libleptris/benchmarks/fixtures/medium_catalog.xml +3003 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/empty.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/large.xml +1 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/latintest_latin1.xml +1 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/latintest_utf8.xml +1 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/multiline.xml +3 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/small.xml +1 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/truncation.xml +19 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf16_be.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf16_be_bom.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf16_be_clean.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf16_be_nodecl.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf16_le.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf16_le_bom.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf16_le_clean.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf16_le_nodecl.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf32_be.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf32_be_bom.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf32_be_clean.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf32_be_nodecl.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf32_le.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf32_le_bom.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf32_le_clean.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf32_le_nodecl.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf8.xml +87 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf8_bom.xml +87 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf8_clean.xml +84 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml/utftest_utf8_nodecl.xml +86 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml//321/202/320/265/321/201/321/202.xml +1 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/empty.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/large.xml +1 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/latintest_latin1.xml +1 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/latintest_utf8.xml +1 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/multiline.xml +3 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/small.xml +1 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/truncation.xml +19 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf16_be.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf16_be_bom.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf16_be_clean.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf16_be_nodecl.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf16_le.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf16_le_bom.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf16_le_clean.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf16_le_nodecl.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf32_be.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf32_be_bom.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf32_be_clean.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf32_be_nodecl.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf32_le.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf32_le_bom.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf32_le_clean.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf32_le_nodecl.xml +0 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf8.xml +87 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf8_bom.xml +87 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf8_clean.xml +84 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests/utftest_utf8_nodecl.xml +86 -0
- data/vendor-src/libleptris/benchmarks/fixtures/pugixml_tests//321/202/320/265/321/201/321/202.xml +1 -0
- data/vendor-src/libleptris/benchmarks/fixtures/small.xml +38 -0
- data/vendor-src/libleptris/benchmarks/html/bench_html_parse.c +111 -0
- data/vendor-src/libleptris/benchmarks/html/gen_nokogiri_reference.rb +112 -0
- data/vendor-src/libleptris/benchmarks/html/nokogiri_html_parse.rb +64 -0
- data/vendor-src/libleptris/benchmarks/matrix/README.md +71 -0
- data/vendor-src/libleptris/benchmarks/matrix/bench2html.rb +316 -0
- data/vendor-src/libleptris/benchmarks/matrix/bench_matrix.cpp +724 -0
- data/vendor-src/libleptris/benchmarks/modification/bench_leptris_modify.c +211 -0
- data/vendor-src/libleptris/benchmarks/modification/bench_node_creation.c +130 -0
- data/vendor-src/libleptris/benchmarks/results/BENCHMARK_REPORT.md +226 -0
- data/vendor-src/libleptris/benchmarks/results/baseline_report.md +219 -0
- data/vendor-src/libleptris/benchmarks/results/benchmark_20251223_134550.json +13 -0
- data/vendor-src/libleptris/benchmarks/results/benchmark_20260129_225844.json +13 -0
- data/vendor-src/libleptris/benchmarks/results/leptris_dom_output.txt +24 -0
- data/vendor-src/libleptris/benchmarks/results/leptris_modify.json +36 -0
- data/vendor-src/libleptris/benchmarks/results/leptris_modify_optimized.json +36 -0
- data/vendor-src/libleptris/benchmarks/results/leptris_modify_session1.json +36 -0
- data/vendor-src/libleptris/benchmarks/results/leptris_modify_session2.json +36 -0
- data/vendor-src/libleptris/benchmarks/results/leptris_serialize.json +34 -0
- data/vendor-src/libleptris/benchmarks/results/leptris_xpath_output.txt +24 -0
- data/vendor-src/libleptris/benchmarks/results/libxml2_dom_output.txt +24 -0
- data/vendor-src/libleptris/benchmarks/results/libxml2_xpath_output.txt +24 -0
- data/vendor-src/libleptris/benchmarks/results/phase16_session2.json +21 -0
- data/vendor-src/libleptris/benchmarks/results/phase17.5_session1.json +30 -0
- data/vendor-src/libleptris/benchmarks/results/phase17_session1.json +30 -0
- data/vendor-src/libleptris/benchmarks/results/pugixml_dom_output.txt +51 -0
- data/vendor-src/libleptris/benchmarks/results/xpath_axes_leptris.json +318 -0
- data/vendor-src/libleptris/benchmarks/results/xpath_axes_libxml2.json +318 -0
- data/vendor-src/libleptris/benchmarks/results/xpath_functions_leptris.json +222 -0
- data/vendor-src/libleptris/benchmarks/results/xpath_functions_libxml2.json +222 -0
- data/vendor-src/libleptris/benchmarks/sax/bench_iterparse.c +115 -0
- data/vendor-src/libleptris/benchmarks/sax/bench_leptris.c +124 -0
- data/vendor-src/libleptris/benchmarks/sax/bench_libxml2.c +115 -0
- data/vendor-src/libleptris/benchmarks/serialization/bench_leptris_serialize.c +198 -0
- data/vendor-src/libleptris/benchmarks/src/benchmark_base.h +175 -0
- data/vendor-src/libleptris/benchmarks/twins/mutation_leptris.c +37 -0
- data/vendor-src/libleptris/benchmarks/twins/mutation_pugixml.cpp +28 -0
- data/vendor-src/libleptris/benchmarks/twins/parse_leptris.c +35 -0
- data/vendor-src/libleptris/benchmarks/twins/parse_pugixml.cpp +35 -0
- data/vendor-src/libleptris/benchmarks/utils.c +171 -0
- data/vendor-src/libleptris/benchmarks/utils.h +70 -0
- data/vendor-src/libleptris/benchmarks/workflows/bench_dom_modify.c +325 -0
- data/vendor-src/libleptris/benchmarks/workflows/bench_end_to_end.c +529 -0
- data/vendor-src/libleptris/benchmarks/xpath/bench_axes.c +411 -0
- data/vendor-src/libleptris/benchmarks/xpath/bench_axes_libxml2.c +108 -0
- data/vendor-src/libleptris/benchmarks/xpath/bench_diagnostic.c +431 -0
- data/vendor-src/libleptris/benchmarks/xpath/bench_functions.c +271 -0
- data/vendor-src/libleptris/benchmarks/xpath/bench_functions_libxml2.c +123 -0
- data/vendor-src/libleptris/benchmarks/xpath/bench_leptris.c +78 -0
- data/vendor-src/libleptris/benchmarks/xpath/bench_libxml2.c +98 -0
- data/vendor-src/libleptris/benchmarks/xpath/bench_pugixml.cpp +117 -0
- data/vendor-src/libleptris/benchmarks/xpath/bench_scalar_eval.c +86 -0
- data/vendor-src/libleptris/benchmarks/xpath/bench_scalar_eval_libxml2.c +70 -0
- data/vendor-src/libleptris/benchmarks/xpath/bench_xslt_transform.c +48 -0
- data/vendor-src/libleptris/benchmarks/xslt/bench_dispatch.c +52 -0
- data/vendor-src/libleptris/benchmarks/xslt/bench_dispatch_heavy.c +82 -0
- data/vendor-src/libleptris/benchmarks/xslt/bench_dispatch_pred.c +34 -0
- data/vendor-src/libleptris/benchmarks/xslt/bench_subtree_copy.c +55 -0
- data/vendor-src/libleptris/benchmarks/xslt/bench_valueof.c +46 -0
- data/vendor-src/libleptris/benchmarks/xslt/heavy_lxml.py +48 -0
- data/vendor-src/libleptris/benchmarks/xslt/scorecard_lxml.py +169 -0
- data/vendor-src/libleptris/bindings/ruby/leptris.gemspec +22 -0
- data/vendor-src/libleptris/bindings/ruby/lib/leptris/document.rb +60 -0
- data/vendor-src/libleptris/bindings/ruby/lib/leptris/element.rb +86 -0
- data/vendor-src/libleptris/bindings/ruby/lib/leptris/error.rb +6 -0
- data/vendor-src/libleptris/bindings/ruby/lib/leptris/node.rb +73 -0
- data/vendor-src/libleptris/bindings/ruby/lib/leptris/sax.rb +189 -0
- data/vendor-src/libleptris/bindings/ruby/lib/leptris/xpath.rb +44 -0
- data/vendor-src/libleptris/bindings/ruby/lib/leptris.rb +137 -0
- data/vendor-src/libleptris/bindings/ruby/spec/leptris_spec.rb +113 -0
- data/vendor-src/libleptris/bindings/ruby/spec/sax_spec.rb +141 -0
- data/vendor-src/libleptris/bindings/ruby/spec/spec_helper.rb +7 -0
- data/vendor-src/libleptris/bindings/ruby/test_full.rb +21 -0
- data/vendor-src/libleptris/bindings/rust/Cargo.lock +7 -0
- data/vendor-src/libleptris/bindings/rust/Cargo.toml +13 -0
- data/vendor-src/libleptris/bindings/rust/README.md +61 -0
- data/vendor-src/libleptris/bindings/rust/build.rs +74 -0
- data/vendor-src/libleptris/bindings/rust/src/ffi.rs +204 -0
- data/vendor-src/libleptris/bindings/rust/src/lib.rs +580 -0
- data/vendor-src/libleptris/bindings/rust/tests/integration.rs +156 -0
- data/vendor-src/libleptris/cli/ARCHITECTURE_REVIEW.md +514 -0
- data/vendor-src/libleptris/cli/CLI_ARCHITECTURE.md +851 -0
- data/vendor-src/libleptris/cli/CMakeLists.txt +46 -0
- data/vendor-src/libleptris/cli/cli.c +115 -0
- data/vendor-src/libleptris/cli/cli.h +232 -0
- data/vendor-src/libleptris/cli/commands/diff.c +208 -0
- data/vendor-src/libleptris/cli/commands/format.c +379 -0
- data/vendor-src/libleptris/cli/commands/parse.c +343 -0
- data/vendor-src/libleptris/cli/commands/validate.c +284 -0
- data/vendor-src/libleptris/cli/commands/version.c +49 -0
- data/vendor-src/libleptris/cli/commands/xpath.c +428 -0
- data/vendor-src/libleptris/cli/commands/xquery.c +188 -0
- data/vendor-src/libleptris/cli/completion/leptris.bash +86 -0
- data/vendor-src/libleptris/cli/completion/leptris.zsh +74 -0
- data/vendor-src/libleptris/cli/error.c +394 -0
- data/vendor-src/libleptris/cli/error.h +360 -0
- data/vendor-src/libleptris/cli/leptris +0 -0
- data/vendor-src/libleptris/cli/main.c +127 -0
- data/vendor-src/libleptris/cli/man/leptris-format.1.adoc +226 -0
- data/vendor-src/libleptris/cli/man/leptris-parse.1.adoc +213 -0
- data/vendor-src/libleptris/cli/man/leptris-xpath.1.adoc +479 -0
- data/vendor-src/libleptris/cli/man/leptris.1.adoc +192 -0
- data/vendor-src/libleptris/cli/options.c +451 -0
- data/vendor-src/libleptris/cli/options.h +378 -0
- data/vendor-src/libleptris/cli/output.c +841 -0
- data/vendor-src/libleptris/cli/output.h +361 -0
- data/vendor-src/libleptris/cmake/FindUtf8proc.cmake +56 -0
- data/vendor-src/libleptris/cmake/leptris-config.cmake.in +14 -0
- data/vendor-src/libleptris/cmake/leptris.pc.in +11 -0
- data/vendor-src/libleptris/cmake/modules/AdocMan.cmake +132 -0
- data/vendor-src/libleptris/docs/ARCHITECTURE_REVIEW.md +280 -0
- data/vendor-src/libleptris/docs/Doxyfile +47 -0
- data/vendor-src/libleptris/docs/FFI.md +165 -0
- data/vendor-src/libleptris/docs/README.md +47 -0
- data/vendor-src/libleptris/docs/ROADMAP-SAXON-PARITY.md +194 -0
- data/vendor-src/libleptris/docs/guide/building.md +199 -0
- data/vendor-src/libleptris/docs/guide/getting-started.md +134 -0
- data/vendor-src/libleptris/docs/guide/parsing.md +315 -0
- data/vendor-src/libleptris/docs/guide/xpath-queries.md +444 -0
- data/vendor-src/libleptris/examples/c/CMakeLists.txt +58 -0
- data/vendor-src/libleptris/examples/c/README.md +345 -0
- data/vendor-src/libleptris/examples/c/basic_example.c +80 -0
- data/vendor-src/libleptris/examples/c/dom_traversal_example.c +58 -0
- data/vendor-src/libleptris/examples/c/error_handling_example.c +121 -0
- data/vendor-src/libleptris/examples/c/namespace_example.c +49 -0
- data/vendor-src/libleptris/examples/c/xpath_example.c +74 -0
- data/vendor-src/libleptris/ports/leptris/portfile.cmake +41 -0
- data/vendor-src/libleptris/ports/leptris/usage +28 -0
- data/vendor-src/libleptris/scripts/check_dll_exports.py +54 -0
- data/vendor-src/libleptris/scripts/check_export_surface.py +84 -0
- data/vendor-src/libleptris/scripts/check_ffi_mirrors.py +163 -0
- data/vendor-src/libleptris/scripts/check_formatting.sh +30 -0
- data/vendor-src/libleptris/scripts/check_shared_exports.sh +120 -0
- data/vendor-src/libleptris/scripts/check_trailing_whitespace.sh +18 -0
- data/vendor-src/libleptris/scripts/gen-api-docs.sh +31 -0
- data/vendor-src/libleptris/scripts/run_static_analysis.sh +16 -0
- data/vendor-src/libleptris/scripts/validate.sh +199 -0
- data/vendor-src/libleptris/scripts/xslt_triage.sh +72 -0
- data/vendor-src/libleptris/src/CMakeLists.txt +597 -0
- data/vendor-src/libleptris/src/include/leptris/descriptor.h +178 -0
- data/vendor-src/libleptris/src/include/leptris/dom/document.h +213 -0
- data/vendor-src/libleptris/src/include/leptris/dom/element.h +435 -0
- data/vendor-src/libleptris/src/include/leptris/dom/serialize.h +133 -0
- data/vendor-src/libleptris/src/include/leptris/dtd.h +178 -0
- data/vendor-src/libleptris/src/include/leptris/error.h +97 -0
- data/vendor-src/libleptris/src/include/leptris/sax/sax.h +584 -0
- data/vendor-src/libleptris/src/include/leptris/types.h +386 -0
- data/vendor-src/libleptris/src/include/leptris/xpath/xpath.h +250 -0
- data/vendor-src/libleptris/src/include/leptris/xquery/xquery.h +80 -0
- data/vendor-src/libleptris/src/include/leptris.h +3701 -0
- data/vendor-src/libleptris/src/leptris/chartype.h +124 -0
- data/vendor-src/libleptris/src/leptris/common/chartype.c +90 -0
- data/vendor-src/libleptris/src/leptris/common/chartype.h +44 -0
- data/vendor-src/libleptris/src/leptris/common/cpu.c +40 -0
- data/vendor-src/libleptris/src/leptris/common/cpu.h +63 -0
- data/vendor-src/libleptris/src/leptris/common/entities.c +329 -0
- data/vendor-src/libleptris/src/leptris/common/entities.h +79 -0
- data/vendor-src/libleptris/src/leptris/common/format_number.c +273 -0
- data/vendor-src/libleptris/src/leptris/common/format_number.h +29 -0
- data/vendor-src/libleptris/src/leptris/common/port.h +171 -0
- data/vendor-src/libleptris/src/leptris/common/simd_text.c +237 -0
- data/vendor-src/libleptris/src/leptris/common/simd_text.h +104 -0
- data/vendor-src/libleptris/src/leptris/common/simd_text_avx2.c +105 -0
- data/vendor-src/libleptris/src/leptris/common/simd_text_neon.c +280 -0
- data/vendor-src/libleptris/src/leptris/common/string_view.c +204 -0
- data/vendor-src/libleptris/src/leptris/common/string_view.h +68 -0
- data/vendor-src/libleptris/src/leptris/common/types_internal.h +31 -0
- data/vendor-src/libleptris/src/leptris/core.c +201 -0
- data/vendor-src/libleptris/src/leptris/descriptor/plan.c +527 -0
- data/vendor-src/libleptris/src/leptris/diff/diff.c +491 -0
- data/vendor-src/libleptris/src/leptris/dom/cdata.c +47 -0
- data/vendor-src/libleptris/src/leptris/dom/cdata.h +73 -0
- data/vendor-src/libleptris/src/leptris/dom/comment.c +48 -0
- data/vendor-src/libleptris/src/leptris/dom/comment.h +74 -0
- data/vendor-src/libleptris/src/leptris/dom/compact.c +397 -0
- data/vendor-src/libleptris/src/leptris/dom/compact.h +307 -0
- data/vendor-src/libleptris/src/leptris/dom/diag.c +58 -0
- data/vendor-src/libleptris/src/leptris/dom/diag.h +75 -0
- data/vendor-src/libleptris/src/leptris/dom/digest.c +255 -0
- data/vendor-src/libleptris/src/leptris/dom/doctype.c +137 -0
- data/vendor-src/libleptris/src/leptris/dom/doctype.h +52 -0
- data/vendor-src/libleptris/src/leptris/dom/document_node.c +13 -0
- data/vendor-src/libleptris/src/leptris/dom/document_node.h +21 -0
- data/vendor-src/libleptris/src/leptris/dom/edges.h +60 -0
- data/vendor-src/libleptris/src/leptris/dom/element.c +1114 -0
- data/vendor-src/libleptris/src/leptris/dom/element.h +1109 -0
- data/vendor-src/libleptris/src/leptris/dom/element_index.c +444 -0
- data/vendor-src/libleptris/src/leptris/dom/element_index.h +135 -0
- data/vendor-src/libleptris/src/leptris/dom/element_modify.c +2185 -0
- data/vendor-src/libleptris/src/leptris/dom/element_query.c +1468 -0
- data/vendor-src/libleptris/src/leptris/dom/entity_ref.c +57 -0
- data/vendor-src/libleptris/src/leptris/dom/entity_ref.h +70 -0
- data/vendor-src/libleptris/src/leptris/dom/node.c +420 -0
- data/vendor-src/libleptris/src/leptris/dom/node.h +170 -0
- data/vendor-src/libleptris/src/leptris/dom/node_public.c +937 -0
- data/vendor-src/libleptris/src/leptris/dom/node_vtable.c +138 -0
- data/vendor-src/libleptris/src/leptris/dom/pi.c +70 -0
- data/vendor-src/libleptris/src/leptris/dom/pi.h +80 -0
- data/vendor-src/libleptris/src/leptris/dom/root_doc_map.c +310 -0
- data/vendor-src/libleptris/src/leptris/dom/root_doc_map.h +30 -0
- data/vendor-src/libleptris/src/leptris/dom/text.c +157 -0
- data/vendor-src/libleptris/src/leptris/dom/text.h +119 -0
- data/vendor-src/libleptris/src/leptris/dtd/content_check.c +300 -0
- data/vendor-src/libleptris/src/leptris/dtd/model.c +533 -0
- data/vendor-src/libleptris/src/leptris/dtd/model.h +354 -0
- data/vendor-src/libleptris/src/leptris/dtd/parser.c +827 -0
- data/vendor-src/libleptris/src/leptris/dtd/resolver.c +354 -0
- data/vendor-src/libleptris/src/leptris/dtd/validator.c +668 -0
- data/vendor-src/libleptris/src/leptris/encoding/encoders.c +346 -0
- data/vendor-src/libleptris/src/leptris/encoding/encoders.h +61 -0
- data/vendor-src/libleptris/src/leptris/encoding/encoding.c +451 -0
- data/vendor-src/libleptris/src/leptris/encoding/encoding.h +118 -0
- data/vendor-src/libleptris/src/leptris/encoding/unicode.c +317 -0
- data/vendor-src/libleptris/src/leptris/encoding/unicode.h +64 -0
- data/vendor-src/libleptris/src/leptris/encoding/utf16.c +204 -0
- data/vendor-src/libleptris/src/leptris/encoding/utf16.h +78 -0
- data/vendor-src/libleptris/src/leptris/encoding/wrapper.c +243 -0
- data/vendor-src/libleptris/src/leptris/error.c +134 -0
- data/vendor-src/libleptris/src/leptris/flat/direct_parse.c +1935 -0
- data/vendor-src/libleptris/src/leptris/flat/direct_parse.h +41 -0
- data/vendor-src/libleptris/src/leptris/html/html_parse.c +8040 -0
- data/vendor-src/libleptris/src/leptris/leptris.c +1264 -0
- data/vendor-src/libleptris/src/leptris/leptris_internal.h +910 -0
- data/vendor-src/libleptris/src/leptris/leptris_memory.c +179 -0
- data/vendor-src/libleptris/src/leptris/leptris_memory.h +180 -0
- data/vendor-src/libleptris/src/leptris/leptris_parse.h +195 -0
- data/vendor-src/libleptris/src/leptris/memory/arena.c +243 -0
- data/vendor-src/libleptris/src/leptris/memory/arena.h +93 -0
- data/vendor-src/libleptris/src/leptris/memory/pool.c +1055 -0
- data/vendor-src/libleptris/src/leptris/memory/pool.h +426 -0
- data/vendor-src/libleptris/src/leptris/rng/parse.c +814 -0
- data/vendor-src/libleptris/src/leptris/rng/rng_internal.h +112 -0
- data/vendor-src/libleptris/src/leptris/rng/rng_public.c +159 -0
- data/vendor-src/libleptris/src/leptris/rng/rng_regex.c +453 -0
- data/vendor-src/libleptris/src/leptris/rng/validate.c +1923 -0
- data/vendor-src/libleptris/src/leptris/sax/iterparse.c +435 -0
- data/vendor-src/libleptris/src/leptris/sax/parser.c +105 -0
- data/vendor-src/libleptris/src/leptris/sax/pull.c +489 -0
- data/vendor-src/libleptris/src/leptris/sax/recorder.c +252 -0
- data/vendor-src/libleptris/src/leptris/sax/sax_internal.h +163 -0
- data/vendor-src/libleptris/src/leptris/sax/streaming.c +1469 -0
- data/vendor-src/libleptris/src/leptris/sch/schematron.c +1588 -0
- data/vendor-src/libleptris/src/leptris/serialize/c14n.c +1143 -0
- data/vendor-src/libleptris/src/leptris/serialize/serialize.c +2333 -0
- data/vendor-src/libleptris/src/leptris/serialize/serialize.h +188 -0
- data/vendor-src/libleptris/src/leptris/simd_helpers.h +447 -0
- data/vendor-src/libleptris/src/leptris/unicode/unicode.c +237 -0
- data/vendor-src/libleptris/src/leptris/unicode/unicode.h +113 -0
- data/vendor-src/libleptris/src/leptris/xinclude/xinclude.c +794 -0
- data/vendor-src/libleptris/src/leptris/xpath/bytecode.h +229 -0
- data/vendor-src/libleptris/src/leptris/xpath/compiler.c +1478 -0
- data/vendor-src/libleptris/src/leptris/xpath/evaluator.c +1099 -0
- data/vendor-src/libleptris/src/leptris/xpath/evaluator.h +189 -0
- data/vendor-src/libleptris/src/leptris/xpath/evaluator_axes.c +787 -0
- data/vendor-src/libleptris/src/leptris/xpath/evaluator_internal.h +112 -0
- data/vendor-src/libleptris/src/leptris/xpath/evaluator_operators.c +2138 -0
- data/vendor-src/libleptris/src/leptris/xpath/evaluator_path.c +1312 -0
- data/vendor-src/libleptris/src/leptris/xpath/evaluator_types.c +294 -0
- data/vendor-src/libleptris/src/leptris/xpath/functions.c +2544 -0
- data/vendor-src/libleptris/src/leptris/xpath/functions.h +161 -0
- data/vendor-src/libleptris/src/leptris/xpath/functions_exslt.c +545 -0
- data/vendor-src/libleptris/src/leptris/xpath/functions_ext31.c +4316 -0
- data/vendor-src/libleptris/src/leptris/xpath/lexer.c +636 -0
- data/vendor-src/libleptris/src/leptris/xpath/lexer.h +25 -0
- data/vendor-src/libleptris/src/leptris/xpath/parser.c +2992 -0
- data/vendor-src/libleptris/src/leptris/xpath/parser.h +28 -0
- data/vendor-src/libleptris/src/leptris/xpath/vm.c +2903 -0
- data/vendor-src/libleptris/src/leptris/xpath/xpath_ast_cache.c +319 -0
- data/vendor-src/libleptris/src/leptris/xpath/xpath_compiled.c +263 -0
- data/vendor-src/libleptris/src/leptris/xpath/xpath_internal.h +134 -0
- data/vendor-src/libleptris/src/leptris/xpath/xpath_public.c +1139 -0
- data/vendor-src/libleptris/src/leptris/xpath/xpath_variables.c +410 -0
- data/vendor-src/libleptris/src/leptris/xpath/xpath_variables.h +230 -0
- data/vendor-src/libleptris/src/leptris/xquery/xquery.c +2641 -0
- data/vendor-src/libleptris/src/leptris/xslt/xslt_exec.c +4887 -0
- data/vendor-src/libleptris/src/leptris/xslt/xslt_functions.c +1612 -0
- data/vendor-src/libleptris/src/leptris/xslt/xslt_internal.h +862 -0
- data/vendor-src/libleptris/src/leptris/xslt/xslt_parse.c +2418 -0
- data/vendor-src/libleptris/src/leptris/xslt/xslt_pattern.c +441 -0
- data/vendor-src/libleptris/src/leptris/xslt/xslt_public.c +710 -0
- data/vendor-src/libleptris/src/leptris.symvers +16 -0
- data/vendor-src/libleptris/src/man/libleptris.5.adoc +961 -0
- data/vendor-src/libleptris/test/CMakeLists.txt +234 -0
- data/vendor-src/libleptris/test/README.md +59 -0
- data/vendor-src/libleptris/test/abi/test_descriptor.cpp +441 -0
- data/vendor-src/libleptris/test/abi/test_doctype_api.cpp +51 -0
- data/vendor-src/libleptris/test/abi/test_dom_deep_copy.cpp +110 -0
- data/vendor-src/libleptris/test/abi/test_dom_mutation_bugs.cpp +210 -0
- data/vendor-src/libleptris/test/abi/test_header_hygiene.cpp +269 -0
- data/vendor-src/libleptris/test/abi/test_namespace_mutation_and_create.cpp +198 -0
- data/vendor-src/libleptris/test/abi/test_node_get_xpath.cpp +128 -0
- data/vendor-src/libleptris/test/abi/test_nokogiri_api.cpp +392 -0
- data/vendor-src/libleptris/test/abi/test_parse_fragment.cpp +114 -0
- data/vendor-src/libleptris/test/abi/test_previous_sibling_and_c14n_ex.cpp +299 -0
- data/vendor-src/libleptris/test/abi/test_public_surface.cpp +463 -0
- data/vendor-src/libleptris/test/abi/test_serialize_abi.cpp +67 -0
- data/vendor-src/libleptris/test/abi/test_v0_5_14_bugs.cpp +299 -0
- data/vendor-src/libleptris/test/abi/test_xpath_custom_fns.cpp +106 -0
- data/vendor-src/libleptris/test/cli/test_cli.cpp +493 -0
- data/vendor-src/libleptris/test/common/test_simd_spans.cpp +88 -0
- data/vendor-src/libleptris/test/common/test_simd_text.cpp +142 -0
- data/vendor-src/libleptris/test/concurrency/test_concurrency.cpp +218 -0
- data/vendor-src/libleptris/test/diff/test_diff.cpp +244 -0
- data/vendor-src/libleptris/test/dom/test_compact.cpp +339 -0
- data/vendor-src/libleptris/test/dom/test_digest.cpp +111 -0
- data/vendor-src/libleptris/test/dom/test_document_children.cpp +270 -0
- data/vendor-src/libleptris/test/dom/test_dom.cpp +2310 -0
- data/vendor-src/libleptris/test/dom/test_map_lifecycle.cpp +111 -0
- data/vendor-src/libleptris/test/dom/test_node_surface_parity.cpp +268 -0
- data/vendor-src/libleptris/test/dom/test_text_borrowed.cpp +126 -0
- data/vendor-src/libleptris/test/dom/test_vtable.cpp +108 -0
- data/vendor-src/libleptris/test/dtd/test_dtd_validate.cpp +1227 -0
- data/vendor-src/libleptris/test/dtd/test_w3c_conformance.cpp +212 -0
- data/vendor-src/libleptris/test/fixtures/basic.xml +13 -0
- data/vendor-src/libleptris/test/fixtures/cdata.xml +5 -0
- data/vendor-src/libleptris/test/fixtures/malformed.xml +2 -0
- data/vendor-src/libleptris/test/fixtures/namespaces.xml +11 -0
- data/vendor-src/libleptris/test/fixtures/utf16_decl.xml +5 -0
- data/vendor-src/libleptris/test/fuzz/fuzz_parse.c +40 -0
- data/vendor-src/libleptris/test/html/html5lib-redlist.txt +1366 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/LICENSE +21 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/README.md +11 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/adoption01.dat +354 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/adoption02.dat +39 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/blocks.dat +695 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/comments01.dat +217 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/doctype01.dat +474 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/domjs-unsafe.dat +0 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/entities01.dat +943 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/entities02.dat +309 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/foreign-fragment.dat +645 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/html5test-com.dat +301 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/inbody01.dat +54 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/isindex.dat +49 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/main-element.dat +46 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/math.dat +104 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/menuitem-element.dat +240 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/namespace-sensitivity.dat +22 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/noscript01.dat +237 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/pending-spec-changes-plain-text-unsafe.dat +0 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/pending-spec-changes.dat +46 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/plain-text-unsafe.dat +0 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/ruby.dat +302 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/scriptdata01.dat +372 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/search-element.dat +46 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/svg.dat +104 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tables01.dat +308 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/template.dat +1673 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests1.dat +1956 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests10.dat +849 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests11.dat +523 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests12.dat +62 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests14.dat +75 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests15.dat +216 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests16.dat +2602 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests17.dat +179 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests18.dat +558 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests19.dat +1398 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests2.dat +821 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests20.dat +842 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests21.dat +306 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests22.dat +190 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests23.dat +168 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests24.dat +79 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests25.dat +288 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests26.dat +453 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests3.dat +305 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests4.dat +58 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests5.dat +210 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests6.dat +663 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests7.dat +417 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests8.dat +165 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests9.dat +472 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tests_innerHTML_1.dat +843 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/tricky01.dat +336 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/webkit01.dat +785 -0
- data/vendor-src/libleptris/test/html/html5lib-tests/tree-construction/webkit02.dat +554 -0
- data/vendor-src/libleptris/test/html/html5lib_cases.h.in +6 -0
- data/vendor-src/libleptris/test/html/nokogiri-parity-redlist.txt +1183 -0
- data/vendor-src/libleptris/test/html/nokogiri-tree-tests.dat +18107 -0
- data/vendor-src/libleptris/test/html/test_html.cpp +2191 -0
- data/vendor-src/libleptris/test/html/test_html5lib.cpp +831 -0
- data/vendor-src/libleptris/test/memory/test_arena.cpp +252 -0
- data/vendor-src/libleptris/test/memory/test_oom_injection.cpp +170 -0
- data/vendor-src/libleptris/test/memory/test_pool.cpp +331 -0
- data/vendor-src/libleptris/test/memory/test_pool_arena.cpp +180 -0
- data/vendor-src/libleptris/test/parser/test_encoding.cpp +282 -0
- data/vendor-src/libleptris/test/parser/test_large_documents.cpp +346 -0
- data/vendor-src/libleptris/test/parser/test_parser.cpp +565 -0
- data/vendor-src/libleptris/test/parser/test_simd_count.cpp +70 -0
- data/vendor-src/libleptris/test/perf/test_perf.cpp +362 -0
- data/vendor-src/libleptris/test/perf/test_stress_high_doc_count.cpp +67 -0
- data/vendor-src/libleptris/test/rng/include-cases/bad-construct.rng +7 -0
- data/vendor-src/libleptris/test/rng/include-cases/bad-override.rng +6 -0
- data/vendor-src/libleptris/test/rng/include-cases/bad-start-override.rng +5 -0
- data/vendor-src/libleptris/test/rng/include-cases/ext-lib.rng +3 -0
- data/vendor-src/libleptris/test/rng/include-cases/ext-main.rng +7 -0
- data/vendor-src/libleptris/test/rng/include-cases/lib.rng +5 -0
- data/vendor-src/libleptris/test/rng/include-cases/lib2.rng +6 -0
- data/vendor-src/libleptris/test/rng/include-cases/main.rng +4 -0
- data/vendor-src/libleptris/test/rng/include-cases/no-href.rng +4 -0
- data/vendor-src/libleptris/test/rng/include-cases/override.rng +8 -0
- data/vendor-src/libleptris/test/rng/include-cases/self-include.rng +4 -0
- data/vendor-src/libleptris/test/rng/include-cases/start-override.rng +5 -0
- data/vendor-src/libleptris/test/rng/jing-cases/000.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/000.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/000.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/001.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/001.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/001.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/002.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/002.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/002.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/003.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/003.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/003.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/004.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/004.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/004.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/005.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/005.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/005.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/006.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/006.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/006.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/007.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/007.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/007.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/008.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/008.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/008.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/009.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/009.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/009.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/010.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/010.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/010.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/011.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/011.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/011.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/012.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/012.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/012.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/013.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/013.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/013.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/014.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/014.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/014.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/015.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/015.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/015.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/016.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/016.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/016.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/017.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/017.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/017.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/018.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/018.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/018.rng +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/019.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/019.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/019.rng +7 -0
- data/vendor-src/libleptris/test/rng/jing-cases/020-book.rng +4 -0
- data/vendor-src/libleptris/test/rng/jing-cases/020.bad.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/020.ok.xml +1 -0
- data/vendor-src/libleptris/test/rng/jing-cases/020.rng +3 -0
- data/vendor-src/libleptris/test/rng/jing-cases/README.md +32 -0
- data/vendor-src/libleptris/test/rng/jing-cases/jing-ref.json +212 -0
- data/vendor-src/libleptris/test/rng/jing-cases/meta.json +1 -0
- data/vendor-src/libleptris/test/rng/test_rng.cpp +1365 -0
- data/vendor-src/libleptris/test/rng/test_rng_corpus.cpp +133 -0
- data/vendor-src/libleptris/test/rng/test_rng_corpus_msg.cpp +233 -0
- data/vendor-src/libleptris/test/sax/test_iterparse.cpp +203 -0
- data/vendor-src/libleptris/test/sax/test_pull.cpp +214 -0
- data/vendor-src/libleptris/test/sax/test_pull_batch.cpp +201 -0
- data/vendor-src/libleptris/test/sax/test_recorder.cpp +265 -0
- data/vendor-src/libleptris/test/sax/test_sax.cpp +665 -0
- data/vendor-src/libleptris/test/sax/test_streaming.cpp +434 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/README.md +15 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/extends-baseuri-fixup-01.xml +28 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/extends-recursive-01.xml +27 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/include-baseuri-fixup-01.xml +24 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/include-recursive-01.xml +24 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-name-collision-error-01.xml +20 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-name-collision-error-02.xml +20 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-name-collision-error-03.xml +20 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-name-collision-error-04.xml +23 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-name-collision-error-05.xml +20 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-name-collision-error-06.xml +25 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-pattern-global-01.xml +24 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-reference-undefined-01.xml +18 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-reference-undefined-02.xml +18 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-reference-undefined-03.xml +18 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-reference-undefined-04.xml +19 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-reference-undefined-05.xml +20 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-reference-undefined-06.xml +20 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-reference-undefined-07.xml +18 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-rule-global-01.xml +20 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-rule-global-02.xml +23 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-scope-pattern-01.xml +25 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-scope-phase-01.xml +23 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-scope-rule-01.xml +23 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/let-value-element-content-01.xml +33 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/pattern-abstract-01.xml +22 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/pattern-subordinate-document-01.xml +21 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/pattern-subordinate-document-02.xml +21 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/rule-abstract-01.xml +21 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/rule-abstract-02.xml +23 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/rule-context-attribute-01.xml +18 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/rule-context-comment-01.xml +20 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/rule-context-element-01.xml +18 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/rule-context-pi-01.xml +20 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/rule-context-root-01.xml +18 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/rule-context-text-01.xml +18 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/rule-context-variable-01.xml +22 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/rule-context-variable-02.xml +25 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/rule-context-variable-03.xml +22 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/rule-order-01.xml +21 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/schema-default-phase-01.xml +26 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/schema-default-phase-02.xml +25 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/svrl-diagnostic-01.xml +28 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/svrl-diagnostic-02.xml +25 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/svrl-name-nopath-01.xml +23 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/svrl-name-path-01.xml +23 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/svrl-property-01.xml +28 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/svrl-property-copy-of.xml +26 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/svrl-value-of-01.xml +23 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/xslt-key-01.xml +19 -0
- data/vendor-src/libleptris/test/sch/conformance-cases/xslt-key-element-content-01.xml +21 -0
- data/vendor-src/libleptris/test/sch/test_schematron.cpp +337 -0
- data/vendor-src/libleptris/test/sch/test_schematron_corpus.cpp +421 -0
- data/vendor-src/libleptris/test/serializer/test_c14n.cpp +539 -0
- data/vendor-src/libleptris/test/serializer/test_serialize.cpp +890 -0
- data/vendor-src/libleptris/test/smoke/test_smoke.cpp +41 -0
- data/vendor-src/libleptris/test/xinclude/test_xinclude.cpp +903 -0
- data/vendor-src/libleptris/test/xpath/test_bytecode_vm.cpp +755 -0
- data/vendor-src/libleptris/test/xpath/test_compiled.cpp +171 -0
- data/vendor-src/libleptris/test/xpath/test_exslt.cpp +141 -0
- data/vendor-src/libleptris/test/xpath/test_xpath.cpp +2433 -0
- data/vendor-src/libleptris/test/xpath/test_xpath_conformance.cpp +570 -0
- data/vendor-src/libleptris/test/xpath/test_xslt.cpp +4245 -0
- data/vendor-src/libleptris/test/xquery/books.xml +1 -0
- data/vendor-src/libleptris/test/xquery/qt3/README.md +28 -0
- data/vendor-src/libleptris/test/xquery/qt3/fn/concat.xml +878 -0
- data/vendor-src/libleptris/test/xquery/qt3/fn/contains.xml +795 -0
- data/vendor-src/libleptris/test/xquery/qt3/fn/ends-with.xml +556 -0
- data/vendor-src/libleptris/test/xquery/qt3/fn/starts-with.xml +644 -0
- data/vendor-src/libleptris/test/xquery/qt3/fn/substring/concepts.xml +1 -0
- data/vendor-src/libleptris/test/xquery/qt3/fn/substring.xml +449 -0
- data/vendor-src/libleptris/test/xquery/test_qt3.cpp +324 -0
- data/vendor-src/libleptris/test/xquery/test_xquery.cpp +768 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/ATTRIBUTION.md +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/array.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/array.xml +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/array.xsl +26 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-1-.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-1-.xml +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-1-.xsl +21 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-10-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-10-.xml +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-10-.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-100.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-100.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-100.xsl +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-101.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-101.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-101.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-102-inc.xsl +21 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-102.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-102.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-102.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-103.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-103.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-103.xsl +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-104.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-104.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-104.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-105.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-105.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-105.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-106.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-106.xml +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-106.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-107.out +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-107.xml +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-107.xsl +11 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-108.out +25 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-108.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-108.xsl +21 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-109.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-109.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-109.xsl +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-11-.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-11-.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-11-.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-110.ent +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-110.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-110.xml +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-110.xsl +20 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-111.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-111.xml +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-111.xsl +45 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-112.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-112.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-112.xsl +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-113.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-113.xml +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-113.xsl +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-114.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-114.xml +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-114.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-115.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-115.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-115.xsl +19 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-116.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-116.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-116.xsl +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-117.out +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-117.xml +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-117.xsl +59 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-118.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-118.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-118.xsl +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-119.out +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-119.xml +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-119.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-12-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-12-.xml +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-12-.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-120.out +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-120.xml +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-120.xsl +27 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-121.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-121.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-121.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-122.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-122.xml +11 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-122.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-123.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-123.xml +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-123.xsl +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-124.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-124.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-124.xsl +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-125.out +351 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-125.xml +118 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-125.xsl +99 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-126.out +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-126.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-126.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-127.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-127.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-127.xsl +18 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-128.out +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-128.xml +26 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-128.xsl +26 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-129.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-129.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-129.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-13-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-13-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-13-.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-130-imp1.imp +25 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-130-imp2.imp +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-130-imp3.imp +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-130-imp4.imp +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-130.doc +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-130.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-130.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-130.xsl +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-131-imp.imp +19 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-131.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-131.xml +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-131.xsl +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-132.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-132.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-132.xsl +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-133.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-133.xml +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-133.xsl +32 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-134.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-134.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-134.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-135.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-135.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-135.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-136.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-136.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-136.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-137.imp +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-137.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-137.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-137.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-138.out +23 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-138.xml +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-138.xsl +28 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-139.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-139.xml +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-139.xsl +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-14-.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-14-.xml +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-14-.xsl +23 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-140.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-140.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-140.xsl +32 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-141.out +46 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-141.xml +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-141.xsl +25 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-142.out +35 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-142.xml +65 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-142.xsl +85 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-143.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-143.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-143.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-144.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-144.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-144.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-145.err +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-145.xml +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-145.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-147-1.imp +11 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-147-2.imp +11 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-147-3.imp +57 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-147-4.imp +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-147-5.imp +27 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-147-6.imp +31 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-147.out +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-147.xml +21 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-147.xsl +29 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-148.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-148.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-148.xsl +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-149.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-149.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-149.xsl +11 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-15-.out +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-15-.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-15-.xsl +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-150.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-150.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-150.xsl +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-151.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-151.xsl +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-152.out +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-152.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-152.xsl +30 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-153.doc +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-153.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-153.xml +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-153.xsl +19 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-154.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-154.xsl +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-155.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-155.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-155.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-156.err +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-156.imp1.imp +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-156.imp2.imp +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-156.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-156.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-157.err +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-157.out +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-157.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-157.xsl +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-158.doc +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-158.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-158.xml +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-158.xsl +19 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-159.out +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-159.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-159.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-16-.out +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-16-.xml +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-16-.xsl +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-160.out +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-160.xml +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-160.xsl +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-161.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-161.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-161.xsl +18 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-163.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-163.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-163.xsl +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-164.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-164.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-164.xsl +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-165.err +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-165.xml +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-165.xsl +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-166.out +15256 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-166.xml +15255 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-166.xsl +131 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-167.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-167.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-167.xsl +20 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-168.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-168.xml +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-168.xsl +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-169.imp +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-169.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-169.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-169.xsl +11 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-17-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-17-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-17-.xsl +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-170.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-170.xml +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-170.xsl +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-171.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-171.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-171.xsl +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-172.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-172.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-172.xsl +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-173.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-173.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-173.xsl +11 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-174.err +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-174.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-174.xsl +18 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-175.err +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-175.out +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-175.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-175.xsl +33 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-176.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-176.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-176.xsl +11 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-177.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-177.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-177.xsl +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-178.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-178.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-178.xsl +18 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-179.out +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-179.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-179.xsl +24 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-18-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-18-.xml +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-18-.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-180.err +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-180.xml +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-180.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-181.out +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-181.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-181.xsl +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-182.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-182.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-182.xsl +21 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-183.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-183.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-183.xsl +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-184.err +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-184.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-184.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-186.out +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-186.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-186.xsl +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-187.err +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-187.out +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-187.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-187.xsl +42 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-188-imp.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-188.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-188.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-188.xsl +20 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-189.out +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-189.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-189.xsl +25 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-19-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-19-.xml +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-19-.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-190-imp.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-190.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-190.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-190.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-191-imp.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-191.err +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-191.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-191.xsl +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-192.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-192.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-192.xsl +33 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-193.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-193.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-193.xsl +11 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-194.err +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-194.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-194.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-195.out +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-195.xml +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-195.xsl +19 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-196.out +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-196.xml +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-196.xsl +19 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-197.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-197.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-197.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-198.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-198.xml +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-198.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-199.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-199.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-199.xsl +18 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-2-.out +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-2-.xml +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-2-.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-20-.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-20-.xml +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-20-.xsl +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-200.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-200.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-200.xsl +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-201.err +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-201.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-201.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-202.err +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-202.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-202.xsl +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-203.err +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-203.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-203.xsl +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-204.err +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-204.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-204.xsl +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-205.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-205.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-205.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-206.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-206.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-206.xsl +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-207.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-207.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-207.xsl +61 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-208.err +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-208.xml +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-208.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-209.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-209.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-209.xsl +21 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-21-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-21-.xml +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-21-.xsl +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-210.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-210.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-210.xsl +20 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-211.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-211.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-211.xsl +26 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-212.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-212.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-212.xsl +25 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-213.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-213.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-213.xsl +26 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-214.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-214.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-214.xsl +25 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-215.err +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-215.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-215.xsl +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-216.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-216.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-216.xsl +11 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-217.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-217.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-217.xsl +24 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-218.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-218.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-218.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-219.out +68 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-219.xml +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-219.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-22-.out +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-22-.xml +18 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-22-.xsl +19 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-220.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-220.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-220.xsl +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-221.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-221.xml +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-221.xsl +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-222.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-222.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-222.xsl +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-223-imp.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-223-inc.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-223.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-223.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-223.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-224.out +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-224.xml +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-224.xsl +28 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-225.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-225.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-225.xsl +32 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-23-.out +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-23-.xml +21 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-23-.xsl +20 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-24-.out +27 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-24-.xml +2419 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-24-.xsl +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-25-.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-25-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-25-.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-26-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-26-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-26-.xsl +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-27-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-27-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-27-.xsl +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-28-.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-28-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-28-.xsl +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-29-.ent +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-29-.out +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-29-.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-29-.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-3-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-3-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-3-.xsl +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-30-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-30-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-30-.xsl +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-31-.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-31-.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-31-.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-32-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-32-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-32-.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-33-.out +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-33-.xml +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-33-.xsl +29 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-35-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-35-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-35-.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-36-.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-36-.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-36-.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-36-inc.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-37-.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-37-.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-37-.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-37-inc.xsl +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-38-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-38-.xml +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-38-.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-39-.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-39-.xml +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-39-.xsl +34 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-4-.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-4-.xml +38 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-4-.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-40-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-40-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-40-.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-41-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-41-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-41-.xsl +19 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-42-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-42-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-42-.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-43-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-43-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-43-.xsl +19 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-44-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-44-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-44-.xsl +19 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-45-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-45-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-45-.xsl +27 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-46-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-46-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-46-.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-47-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-47-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-47-.xsl +18 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-48-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-48-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-48-.xsl +24 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-49-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-49-.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-49-.xsl +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-5-.out +954 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-5-.xml +475 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-5-.xsl +158 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-50-.out +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-50-.xml +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-50-.xsl +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-52.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-52.xml +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-52.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-53.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-53.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-53.xsl +11 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-54.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-54.xml +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-54.xsl +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-55.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-55.xml +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-55.xsl +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-56.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-56.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-56.xsl +28 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-57.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-57.xml +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-57.xsl +21 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-58.xsl +274 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-59.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-59.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-59.xsl +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-6-.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-6-.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-6-.xsl +32 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-60.err +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-60.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-60.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-60.xsl +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-61.out +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-61.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-61.xsl +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-62-inc.xsl +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-62.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-62.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-62.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-63.out +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-63.xml +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-63.xsl +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-64.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-64.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-64.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-65.ent +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-65.out +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-65.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-65.xsl +26 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-66.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-66.xml +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-66.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-68.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-68.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-68.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-69.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-69.xml +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-69.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-7-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-7-.xml +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-7-.xsl +11 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-70.out +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-70.xml +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-70.xsl +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-71.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-71.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-71.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-72.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-72.xml +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-72.xsl +31 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-73.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-73.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-73.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-74.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-74.xml +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-74.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-75.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-75.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-75.xsl +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-76.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-76.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-76.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-77.out +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-77.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-77.xsl +18 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-78.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-78.xml +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-78.xsl +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-79.out +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-79.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-79.xsl +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-8-.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-8-.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-8-.xsl +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-80.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-80.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-80.xsl +29 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-81.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-81.xml +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-81.xsl +18 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-82.out +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-82.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-82.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-83.out +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-83.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-83.xsl +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-84.out +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-84.xml +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-84.xsl +14 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-86.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-86.xml +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-86.xsl +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-87.out +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-87.xml +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-87.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-88.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-88.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-88.xsl +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-89.out +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-89.xml +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-89.xsl +105 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-9-.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-9-.xml +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-9-.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-90.out +13 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-90.xml +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-90.xsl +35 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-91.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-91.xml +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-91.xsl +8 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-92.out +15 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-92.xml +19 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-92.xsl +19 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-93-inc.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-93.out +3 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-93.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-93.xsl +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-94.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-94.xml +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-94.xsl +35 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-95.out +4 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-95.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-95.xsl +22 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-96.out +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-96.xml +5 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-96.xsl +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-97.out +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-97.xml +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-97.xsl +32 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-98.out +6 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-98.xml +10 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-98.xsl +31 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-99.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-99.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/bug-99.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/character.out +2 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/character.xml +23 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/character.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/date_add.out +9 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/date_add.xml +1 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/date_add.xsl +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/doc.dtd +7 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/doc.out +16 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/doc.xml +17 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/doc.xsl +62 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/inner.xsl +12 -0
- data/vendor-src/libleptris/test/xslt/libxslt_suite_general/items.xml +34 -0
- data/vendor-src/libleptris/test/xslt/open_cases.txt +0 -0
- data/vendor-src/libleptris/test/xslt/test_libxslt_suite.cpp +398 -0
- data/vendor-src/libleptris/vcpkg.json +29 -0
- data/vendor-src/utf8proc/CMakeLists.txt +133 -0
- data/vendor-src/utf8proc/Doxyfile +2765 -0
- data/vendor-src/utf8proc/LICENSE.md +93 -0
- data/vendor-src/utf8proc/MANIFEST +9 -0
- data/vendor-src/utf8proc/Makefile +203 -0
- data/vendor-src/utf8proc/NEWS.md +479 -0
- data/vendor-src/utf8proc/README.md +143 -0
- data/vendor-src/utf8proc/appveyor.yml +46 -0
- data/vendor-src/utf8proc/bench/Makefile +40 -0
- data/vendor-src/utf8proc/bench/bench.c +56 -0
- data/vendor-src/utf8proc/bench/icu.c +61 -0
- data/vendor-src/utf8proc/bench/unistring.c +60 -0
- data/vendor-src/utf8proc/bench/util.c +39 -0
- data/vendor-src/utf8proc/bench/util.h +22 -0
- data/vendor-src/utf8proc/cmake/utf8proc-config.cmake.in +5 -0
- data/vendor-src/utf8proc/data/Makefile +62 -0
- data/vendor-src/utf8proc/data/Manifest.toml +16 -0
- data/vendor-src/utf8proc/data/Project.toml +2 -0
- data/vendor-src/utf8proc/data/data_generator.jl +498 -0
- data/vendor-src/utf8proc/libutf8proc.pc.cmakein +10 -0
- data/vendor-src/utf8proc/libutf8proc.pc.in +10 -0
- data/vendor-src/utf8proc/lump.md +27 -0
- data/vendor-src/utf8proc/test/app/CMakeLists.txt +6 -0
- data/vendor-src/utf8proc/test/app/app.c +9 -0
- data/vendor-src/utf8proc/test/case.c +76 -0
- data/vendor-src/utf8proc/test/charwidth.c +91 -0
- data/vendor-src/utf8proc/test/custom.c +28 -0
- data/vendor-src/utf8proc/test/fuzz_main.c +54 -0
- data/vendor-src/utf8proc/test/fuzzer.c +97 -0
- data/vendor-src/utf8proc/test/graphemetest.c +136 -0
- data/vendor-src/utf8proc/test/iscase.c +63 -0
- data/vendor-src/utf8proc/test/iterate.c +168 -0
- data/vendor-src/utf8proc/test/maxdecomposition.c +22 -0
- data/vendor-src/utf8proc/test/misc.c +51 -0
- data/vendor-src/utf8proc/test/normtest.c +64 -0
- data/vendor-src/utf8proc/test/ossfuzz.sh +13 -0
- data/vendor-src/utf8proc/test/printproperty.c +68 -0
- data/vendor-src/utf8proc/test/tests.c +60 -0
- data/vendor-src/utf8proc/test/tests.h +27 -0
- data/vendor-src/utf8proc/test/valid.c +41 -0
- data/vendor-src/utf8proc/utf8proc.c +834 -0
- data/vendor-src/utf8proc/utf8proc.h +794 -0
- data/vendor-src/utf8proc/utf8proc_data.c +17141 -0
- data/vendor-src/utf8proc/utils.cmake +20 -0
- metadata +1528 -2
|
@@ -0,0 +1,1197 @@
|
|
|
1
|
+
= libleptris: High-Performance XML Parser & XPath Engine in C
|
|
2
|
+
:toc:
|
|
3
|
+
:toclevels: 2
|
|
4
|
+
:sectanchors:
|
|
5
|
+
:sectlinks:
|
|
6
|
+
|
|
7
|
+
image:https://img.shields.io/badge/C99-✓-blue.svg[Language]
|
|
8
|
+
image:https://img.shields.io/badge/dependencies-zero-brightgreen.svg[Runtime Dependencies]
|
|
9
|
+
image:https://img.shields.io/badge/license-MIT-blue.svg[License]
|
|
10
|
+
image:https://github.com/leptris/leptris/actions/workflows/test.yml/badge.svg[Tests,link="https://github.com/leptris/leptris/actions/workflows/test.yml"]
|
|
11
|
+
image:https://github.com/leptris/leptris/actions/workflows/asan.yml/badge.svg[ASAN,link="https://github.com/leptris/leptris/actions/workflows/asan.yml"]
|
|
12
|
+
image:https://github.com/leptris/leptris/actions/workflows/fuzz-nightly.yml/badge.svg[Fuzzing,link="https://github.com/leptris/leptris/actions/workflows/fuzz-nightly.yml"]
|
|
13
|
+
|
|
14
|
+
**libleptris** is a C99 library providing fast XML 1.0 parsing, complete
|
|
15
|
+
XPath 1.0 evaluation, event-based SAX processing, and document
|
|
16
|
+
canonicalization (C14N). It is designed for low-latency,
|
|
17
|
+
memory-efficient workloads where predictable performance and safe
|
|
18
|
+
memory handling matter.
|
|
19
|
+
|
|
20
|
+
== Highlights
|
|
21
|
+
|
|
22
|
+
* **XML 1.0 parsing** with UTF-8 validation and optional encoding
|
|
23
|
+
conversion (UTF-16, ISO-8859, Shift-JIS, EBCDIC, and others via
|
|
24
|
+
iconv). Zero-copy text nodes — borrowed views into the input buffer,
|
|
25
|
+
no per-node content copy (TODO 115).
|
|
26
|
+
* **XPath 1.0 engine** implementing all 13 axes, 27 functions, and 15
|
|
27
|
+
operators. Bytecode VM for compile-once-eval-many dispatch (TODO 120).
|
|
28
|
+
* **Streaming SAX parser** with an explicit state machine — events emit
|
|
29
|
+
as chunks arrive, memory bounded by nesting depth, not document size
|
|
30
|
+
(TODO 116). All SAX parsing routes through one state machine; the
|
|
31
|
+
legacy recursive parser has been removed (~840 lines deleted).
|
|
32
|
+
* **XInclude 1.0** with ownership-transfer splice — included documents
|
|
33
|
+
are moved (not deep-copied) into the parent tree. Cycle detection
|
|
34
|
+
via ancestor-URI tracking (TODO 117).
|
|
35
|
+
* **DTD validation** with content-model memoization — repeated element
|
|
36
|
+
types with the same children signature skip the matcher on
|
|
37
|
+
subsequent calls (TODO 119). Parameter entities, INCLUDE/IGNORE
|
|
38
|
+
conditional sections, ENTITY/ENTITIES unparsed-entity attribute
|
|
39
|
+
checking, and external subsets via
|
|
40
|
+
`leptris_document_get_dtd` + `leptris_dtd_parse_external_subset`
|
|
41
|
+
(application-supplied I/O).
|
|
42
|
+
* **Canonical XML (C14N)** for digital signatures and cryptographic
|
|
43
|
+
hashing.
|
|
44
|
+
* **Pool-based memory model** — every allocation reachable from a
|
|
45
|
+
document is released in a single `leptris_document_free` call. Zero
|
|
46
|
+
leaks across the test suite.
|
|
47
|
+
* **Compact-pointer architecture** — tree edges stored as int32_t byte
|
|
48
|
+
offsets with overflow-table fallback for macOS ASLR (TODO 121).
|
|
49
|
+
* **Recursion depth guard** — deeply nested input is rejected with a
|
|
50
|
+
parse error rather than crashing.
|
|
51
|
+
* **Per-document strict mode** — strict and lenient parsing can coexist
|
|
52
|
+
in the same thread.
|
|
53
|
+
* **Vtable-based dispatch** — adding a new node type is purely
|
|
54
|
+
additive; no switches to edit.
|
|
55
|
+
* **CLI tool** — `leptris parse`, `leptris xpath`, `leptris format`,
|
|
56
|
+
`leptris version` for command-line XML processing.
|
|
57
|
+
* **Ruby FFI binding** — `Leptris::Document.parse`, XPath, serialize,
|
|
58
|
+
and event-driven SAX (one-shot + incremental streaming) via the
|
|
59
|
+
`ffi` gem. No C extension compilation needed. See
|
|
60
|
+
link:bindings/ruby/[Ruby binding].
|
|
61
|
+
* **Python binding** — `leptris` via `cffi` (ABI mode, single
|
|
62
|
+
`cdef` mirroring the public headers): `Document.parse`, element
|
|
63
|
+
navigation, typed XPath results, serialize. Shipped from its own
|
|
64
|
+
repository, https://github.com/leptris/leptris-py[leptris/leptris-py].
|
|
65
|
+
* **Zero required runtime dependencies** — utf8proc and iconv are
|
|
66
|
+
optional features, not prerequisites.
|
|
67
|
+
* **Stable C ABI** with a documented FFI contract; bindings shipped
|
|
68
|
+
for Ruby and Python (Rust planned). See <<FFI,FFI Design>>.
|
|
69
|
+
|
|
70
|
+
== When to use libleptris
|
|
71
|
+
|
|
72
|
+
[cols="1,1",options="header"]
|
|
73
|
+
|===
|
|
74
|
+
|Use libleptris when |Consider alternatives when
|
|
75
|
+
|
|
76
|
+
|You need a C library with a small footprint and no required runtime dependencies.
|
|
77
|
+
|You need full XML Schema 1.1 validation.
|
|
78
|
+
|
|
79
|
+
|You parse documents that may not fit in memory (SAX streaming).
|
|
80
|
+
|You need schema-aware, streaming or packaged XSLT 3.0.
|
|
81
|
+
|
|
82
|
+
|You need XSLT transformation — 1.0 complete, the 3.0 core ships (see <<xslt>>).
|
|
83
|
+
|You need XQuery 1.0 (XPath only here).
|
|
84
|
+
|
|
85
|
+
|You need deterministic memory usage and zero leaks in normal operation.
|
|
86
|
+
|You need a schema-validated or event-correlated read model.
|
|
87
|
+
|
|
88
|
+
|You want to embed XML processing in another language via FFI.
|
|
89
|
+
|You're already on a platform with libxml2 + bindings you trust.
|
|
90
|
+
|
|
91
|
+
|You need C14N for XML Digital Signatures.
|
|
92
|
+
|===
|
|
93
|
+
==
|
|
94
|
+
|
|
95
|
+
== Quick start
|
|
96
|
+
|
|
97
|
+
[source,c]
|
|
98
|
+
----
|
|
99
|
+
#include <leptris.h>
|
|
100
|
+
#include <stdio.h>
|
|
101
|
+
#include <string.h>
|
|
102
|
+
|
|
103
|
+
int main(void) {
|
|
104
|
+
const char* xml = "<root><item>hello</item></root>";
|
|
105
|
+
|
|
106
|
+
LeptrisStatus status = LEPTRIS_OK;
|
|
107
|
+
LeptrisDocument doc = leptris_parse_string(xml, strlen(xml), &status);
|
|
108
|
+
if (!doc) {
|
|
109
|
+
fprintf(stderr, "parse failed: %d\n", status);
|
|
110
|
+
return 1;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
LeptrisElement root = leptris_document_root(doc);
|
|
114
|
+
printf("root element: %s\n", leptris_element_name(root));
|
|
115
|
+
|
|
116
|
+
LeptrisXPathResult items = leptris_xpath_eval(doc, NULL, "//item");
|
|
117
|
+
printf("item count: %zu\n", leptris_xpath_result_count(items));
|
|
118
|
+
leptris_xpath_result_free(items);
|
|
119
|
+
|
|
120
|
+
leptris_document_free(doc); /* releases the entire pool */
|
|
121
|
+
return 0;
|
|
122
|
+
}
|
|
123
|
+
----
|
|
124
|
+
|
|
125
|
+
Compile and run:
|
|
126
|
+
|
|
127
|
+
[source,bash]
|
|
128
|
+
----
|
|
129
|
+
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
|
|
130
|
+
cmake --build build
|
|
131
|
+
./build/cli/leptris parse 'fixtures/basic.xml'
|
|
132
|
+
./build/cli/leptris xpath 'fixtures/basic.xml' 'count(//item)'
|
|
133
|
+
----
|
|
134
|
+
|
|
135
|
+
== Installation
|
|
136
|
+
|
|
137
|
+
=== From source
|
|
138
|
+
|
|
139
|
+
[source,bash]
|
|
140
|
+
----
|
|
141
|
+
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
|
|
142
|
+
cmake --build build
|
|
143
|
+
sudo cmake --install build --prefix /usr/local
|
|
144
|
+
----
|
|
145
|
+
|
|
146
|
+
After install, the library is discoverable via `find_package(leptris)`:
|
|
147
|
+
|
|
148
|
+
[source,cmake]
|
|
149
|
+
----
|
|
150
|
+
cmake_minimum_required(VERSION 3.20)
|
|
151
|
+
project(myapp LANGUAGES C CXX)
|
|
152
|
+
|
|
153
|
+
find_package(leptris CONFIG REQUIRED)
|
|
154
|
+
target_link_libraries(myapp PRIVATE leptris::leptris)
|
|
155
|
+
----
|
|
156
|
+
|
|
157
|
+
Or via pkg-config:
|
|
158
|
+
|
|
159
|
+
[source,bash]
|
|
160
|
+
----
|
|
161
|
+
gcc myapp.c $(pkg-config --cflags --libs leptris)
|
|
162
|
+
----
|
|
163
|
+
|
|
164
|
+
=== Via vcpkg
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
git clone https://github.com/microsoft/vcpkg
|
|
168
|
+
./vcpkg/vcpkg install leptris
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
*See <<vcpkg,vcpkg integration>> for the portfile template.*
|
|
172
|
+
|
|
173
|
+
=== Via system package manager
|
|
174
|
+
|
|
175
|
+
[options="header",cols="1,1"]
|
|
176
|
+
|===
|
|
177
|
+
|Distro |Install command
|
|
178
|
+
|
|
179
|
+
|Alpine
|
|
180
|
+
|`apk add libleptris-dev` (pending)
|
|
181
|
+
|
|
182
|
+
|Debian/Ubuntu
|
|
183
|
+
|`apt install libleptris-dev` (pending)
|
|
184
|
+
|
|
185
|
+
|Homebrew
|
|
186
|
+
|`brew install leptris` (pending)
|
|
187
|
+
|
|
188
|
+
|MSYS2 (Windows)
|
|
189
|
+
|`pacman -S mingw-w64-leptris` (pending)
|
|
190
|
+
|===
|
|
191
|
+
|
|
192
|
+
== Building
|
|
193
|
+
|
|
194
|
+
=== Build options
|
|
195
|
+
|
|
196
|
+
[cols="1,1,3",options="header"]
|
|
197
|
+
|===
|
|
198
|
+
|Option |Default |Description
|
|
199
|
+
|
|
200
|
+
|`BUILD_TESTING`
|
|
201
|
+
|`ON`
|
|
202
|
+
|Build the Google Test suite under `test/`.
|
|
203
|
+
|
|
204
|
+
|`LEPTRIS_BUILD_CLI`
|
|
205
|
+
|`ON`
|
|
206
|
+
|Build the `leptris` command-line tool.
|
|
207
|
+
|
|
208
|
+
|`LEPTRIS_BUILD_BENCHMARKS`
|
|
209
|
+
|`OFF`
|
|
210
|
+
|Build performance comparison targets (libxml2 / pugixml).
|
|
211
|
+
|
|
212
|
+
|`LEPTRIS_BUILD_MAN_PAGES`
|
|
213
|
+
|`OFF`
|
|
214
|
+
|Generate man pages from the AsciiDoc sources.
|
|
215
|
+
|
|
216
|
+
|`LEPTRIS_ENABLE_UTF8PROC`
|
|
217
|
+
|`ON`
|
|
218
|
+
|UTF-8 validation via utf8proc.
|
|
219
|
+
|
|
220
|
+
|`LEPTRIS_ENABLE_ICONV`
|
|
221
|
+
|`ON`
|
|
222
|
+
|Encoding conversion via iconv (ISO-8859-1, Shift-JIS, etc.).
|
|
223
|
+
|
|
224
|
+
|`LEPTRIS_ENABLE_ASAN`
|
|
225
|
+
|`OFF`
|
|
226
|
+
|Build with AddressSanitizer.
|
|
227
|
+
|
|
228
|
+
|`LEPTRIS_ENABLE_FUZZING`
|
|
229
|
+
|`OFF`
|
|
230
|
+
|Build the libFuzzer harness.
|
|
231
|
+
|
|
232
|
+
|`LEPTRIS_BUILD_DOCS`
|
|
233
|
+
|`OFF`
|
|
234
|
+
|Generate Doxygen API docs.
|
|
235
|
+
|===
|
|
236
|
+
|
|
237
|
+
=== ASAN build (memory safety)
|
|
238
|
+
|
|
239
|
+
[source,bash]
|
|
240
|
+
----
|
|
241
|
+
cmake -B build-asan -S . -DLEPTRIS_ENABLE_ASAN=ON -DBUILD_TESTING=ON
|
|
242
|
+
cmake --build build-asan
|
|
243
|
+
ASAN_OPTIONS=detect_leaks=1 ctest --test-dir build-asan
|
|
244
|
+
----
|
|
245
|
+
|
|
246
|
+
=== Fuzzer build (requires LLVM clang)
|
|
247
|
+
|
|
248
|
+
[source,bash]
|
|
249
|
+
----
|
|
250
|
+
brew install llvm # macOS
|
|
251
|
+
export CC=/opt/homebrew/opt/llvm/bin/clang
|
|
252
|
+
cmake -B build-fuzz -S . -DLEPTRIS_ENABLE_FUZZING=ON
|
|
253
|
+
cmake --build build-fuzz --target fuzz_parse
|
|
254
|
+
./build-fuzz/fuzz_parse -max_total_time=600 corpus/
|
|
255
|
+
----
|
|
256
|
+
|
|
257
|
+
=== Doxygen API docs
|
|
258
|
+
|
|
259
|
+
[source,bash]
|
|
260
|
+
----
|
|
261
|
+
brew install doxygen
|
|
262
|
+
cmake -B build -S . -DLEPTRIS_BUILD_DOCS=ON
|
|
263
|
+
cmake --build build --target docs
|
|
264
|
+
open build/docs/api-generated/html/index.html
|
|
265
|
+
----
|
|
266
|
+
|
|
267
|
+
== Linking
|
|
268
|
+
|
|
269
|
+
The library exposes a single import target:
|
|
270
|
+
|
|
271
|
+
[source,cmake]
|
|
272
|
+
----
|
|
273
|
+
target_link_libraries(your_app PRIVATE leptris::leptris)
|
|
274
|
+
----
|
|
275
|
+
|
|
276
|
+
[source,meson]
|
|
277
|
+
----
|
|
278
|
+
leptris_dep = dependency('leptris')
|
|
279
|
+
executable('your_app', 'main.c', dependencies: leptris_dep)
|
|
280
|
+
----
|
|
281
|
+
|
|
282
|
+
== Usage
|
|
283
|
+
|
|
284
|
+
[#parse-string]
|
|
285
|
+
=== Parsing
|
|
286
|
+
|
|
287
|
+
`leptris_parse_string` is the entry point. It accepts a UTF-8 buffer
|
|
288
|
+
and a status output parameter:
|
|
289
|
+
|
|
290
|
+
[source,c]
|
|
291
|
+
----
|
|
292
|
+
LeptrisStatus status;
|
|
293
|
+
LeptrisDocument doc = leptris_parse_string(xml, strlen(xml), &status);
|
|
294
|
+
if (!doc) {
|
|
295
|
+
/* status is one of LEPTRIS_ERROR_PARSE, LEPTRIS_ERROR_MEMORY, ... */
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/* Document is now a pool of nodes; no need to track them individually. */
|
|
299
|
+
|
|
300
|
+
/* Always release the document — the pool is destroyed too. */
|
|
301
|
+
leptris_document_free(doc);
|
|
302
|
+
----
|
|
303
|
+
|
|
304
|
+
[#xpath]
|
|
305
|
+
=== XPath
|
|
306
|
+
|
|
307
|
+
[source,c]
|
|
308
|
+
----
|
|
309
|
+
LeptrisXPathResult r = leptris_xpath_eval(doc, NULL, "//item[@price > 10]");
|
|
310
|
+
if (r) {
|
|
311
|
+
size_t n = leptris_xpath_result_count(r);
|
|
312
|
+
for (size_t i = 0; i < n; i++) {
|
|
313
|
+
LeptrisNodeRef node = leptris_xpath_result_node(r, i);
|
|
314
|
+
printf(" %s\n", leptris_node_name(node));
|
|
315
|
+
}
|
|
316
|
+
leptris_xpath_result_free(r);
|
|
317
|
+
}
|
|
318
|
+
----
|
|
319
|
+
|
|
320
|
+
Supported: all 13 axes, all 27 functions, all 15 operators, full
|
|
321
|
+
predicate syntax. See <<api,xpath-coverage>> for details.
|
|
322
|
+
|
|
323
|
+
==== Parsing models: DOM, SAX, StAX, iterparse
|
|
324
|
+
|
|
325
|
+
One engine, four consumption models. Pick by how you want to pay:
|
|
326
|
+
|
|
327
|
+
[cols="2,2,3,3",options="header"]
|
|
328
|
+
|===
|
|
329
|
+
|Model |API |Memory |Use when
|
|
330
|
+
|
|
331
|
+
|DOM (tree)
|
|
332
|
+
|`leptris_parse_string`
|
|
333
|
+
|Whole document
|
|
334
|
+
|You need random access, XPath, mutation, or serialization.
|
|
335
|
+
|The default; everything else is an optimization.
|
|
336
|
+
|
|
337
|
+
|SAX (push)
|
|
338
|
+
|`leptris_sax_parse` / feed
|
|
339
|
+
|Bounded by depth
|
|
340
|
+
|The engine calls YOU as it parses. Cheapest per event, but every
|
|
341
|
+
|callback crosses the FFI boundary (~1 µs each through bindings).
|
|
342
|
+
|
|
343
|
+
|StAX-style (pull)
|
|
344
|
+
|`leptris_pull_new` / `_new_file`
|
|
345
|
+
|Bounded by the input slice
|
|
346
|
+
|YOU call the engine: `leptris_pull_next()` returns events on
|
|
347
|
+
|demand. Same streaming guarantees as SAX with zero C→host
|
|
348
|
+
|callbacks — the binding-friendly form of streaming.
|
|
349
|
+
|
|
350
|
+
|Incremental (iterparse)
|
|
351
|
+
|`leptris_iterparse_new` / `_new_file`
|
|
352
|
+
|Bounded by the largest subtree
|
|
353
|
+
|You want a TREE but not the whole document at once: each top-level
|
|
354
|
+
|child materializes in its own pool and is released when you move
|
|
355
|
+
|on. The huge-file document-processing shape.
|
|
356
|
+
|===
|
|
357
|
+
|
|
358
|
+
SAX and pull share the same streaming core (`set_streaming(1)`);
|
|
359
|
+
iterparse rides the pull API. File variants (`_new_file`) stream
|
|
360
|
+
from disk in bounded slices — no whole-document buffer.
|
|
361
|
+
|
|
362
|
+
[#sax]
|
|
363
|
+
=== Pull (StAX-style) parsing
|
|
364
|
+
|
|
365
|
+
Host-driven event loop over the streaming SAX core — no C->host
|
|
366
|
+
callbacks (each costs ~a microsecond through FFI):
|
|
367
|
+
|
|
368
|
+
[source,c]
|
|
369
|
+
----
|
|
370
|
+
LeptrisPullParser p = leptris_pull_new(xml, len);
|
|
371
|
+
const LeptrisPullEvent* ev;
|
|
372
|
+
while ((ev = leptris_pull_next(p)) != NULL) {
|
|
373
|
+
if (ev->type == LEPTRIS_PULL_START_ELEMENT)
|
|
374
|
+
handle(leptris_pull_attr_count(p), ev->name);
|
|
375
|
+
if (ev->type == LEPTRIS_PULL_ERROR) break;
|
|
376
|
+
}
|
|
377
|
+
leptris_pull_free(p);
|
|
378
|
+
----
|
|
379
|
+
|
|
380
|
+
Event strings live until the next `leptris_pull_next` call. Memory is
|
|
381
|
+
bounded by the internal input slice, not the document.
|
|
382
|
+
`leptris_pull_new_file(path)` streams the same events from disk —
|
|
383
|
+
huge documents parse with no whole-document buffer.
|
|
384
|
+
|
|
385
|
+
=== Incremental parsing (iterparse)
|
|
386
|
+
|
|
387
|
+
Bounded-memory tree iteration for huge documents
|
|
388
|
+
(`TODO.bindings/02`): each TOP-LEVEL child of the root is
|
|
389
|
+
materialized in its own pool and handed out when complete; the next
|
|
390
|
+
call releases it. Peak memory is bounded by the largest subtree, not
|
|
391
|
+
the document.
|
|
392
|
+
|
|
393
|
+
[source,c]
|
|
394
|
+
----
|
|
395
|
+
LeptrisIterparse it = leptris_iterparse_new(xml, len);
|
|
396
|
+
LeptrisElement e;
|
|
397
|
+
while ((e = leptris_iterparse_next(it)) != NULL)
|
|
398
|
+
process(e); /* valid until the next call */
|
|
399
|
+
leptris_iterparse_free(it);
|
|
400
|
+
----
|
|
401
|
+
|
|
402
|
+
v1: element names are QNames as written (prefixes are not
|
|
403
|
+
re-resolved); use the DOM path when namespace URIs matter.
|
|
404
|
+
`leptris_iterparse_new_file(path)` iterates a document on disk with
|
|
405
|
+
memory bounded by the largest subtree.
|
|
406
|
+
|
|
407
|
+
==== Iterparse v2: full-document mode, namespaces, errors (issue #586)
|
|
408
|
+
|
|
409
|
+
[source,c]
|
|
410
|
+
----
|
|
411
|
+
/* Every element, in completion order (post-order: children before
|
|
412
|
+
* parents), each with its completed subtree attached. */
|
|
413
|
+
LeptrisIterparse it = leptris_iterparse_new_ex(
|
|
414
|
+
xml, len, LEPTRIS_ITERPARSE_FULL_DOCUMENT);
|
|
415
|
+
LeptrisElement e;
|
|
416
|
+
while ((e = leptris_iterparse_next(it)) != NULL) {
|
|
417
|
+
/* namespace context of THIS element, captured at parse time */
|
|
418
|
+
const char* uri = leptris_iterparse_ns_uri(it, "p"); /* or NULL
|
|
419
|
+
for the default namespace binding */
|
|
420
|
+
size_t nscopes = leptris_iterparse_ns_count(it); /* bulk FFI */
|
|
421
|
+
process(e, uri);
|
|
422
|
+
}
|
|
423
|
+
if (leptris_iterparse_error(it))
|
|
424
|
+
fprintf(stderr, "truncated: %s\n", leptris_iterparse_error(it));
|
|
425
|
+
----
|
|
426
|
+
|
|
427
|
+
- Full mode keeps the v1 memory discipline — a fresh pool per
|
|
428
|
+
top-level child, released as you advance — and materializes the
|
|
429
|
+
root in its own pool (it yields childless at document end).
|
|
430
|
+
- Namespace bindings come from the streaming core's prefix-mapping
|
|
431
|
+
events; yielded elements carry resolved namespaces
|
|
432
|
+
(`leptris_element_namespace`), and the iterator snapshots the
|
|
433
|
+
in-scope scope per yield.
|
|
434
|
+
- Truncated or malformed input stops iteration with a retrievable
|
|
435
|
+
message instead of failing silently.
|
|
436
|
+
|
|
437
|
+
=== SAX (event-driven) parsing
|
|
438
|
+
|
|
439
|
+
[source,c]
|
|
440
|
+
----
|
|
441
|
+
static void on_start(void* ud, const char* name, const char** attrs) {
|
|
442
|
+
fprintf(stderr, "<%s>\n", name);
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
LeptrisSAXHandler handler = {0};
|
|
446
|
+
handler.start_element = on_start;
|
|
447
|
+
|
|
448
|
+
leptris_sax_parse(xml, len, &handler, NULL);
|
|
449
|
+
----
|
|
450
|
+
|
|
451
|
+
==== Chunked SAX delivery (issue #585)
|
|
452
|
+
|
|
453
|
+
Callback SAX through an FFI binding pays one dispatch per event — the
|
|
454
|
+
ffi gem's generic callback machinery costs more per event than the
|
|
455
|
+
parse itself (measured: leptris SAX *slower* than Nokogiri SAX through
|
|
456
|
+
Ruby). The recorder buffers events C-side and hands them over in bulk:
|
|
457
|
+
|
|
458
|
+
[source,c]
|
|
459
|
+
----
|
|
460
|
+
LeptrisSaxRecorder rec = leptris_sax_recorder_new();
|
|
461
|
+
leptris_sax_recorder_feed(rec, chunk, chunk_len, is_final);
|
|
462
|
+
|
|
463
|
+
size_t n = 0, alen = 0;
|
|
464
|
+
const LeptrisSaxEventRecord* rs = leptris_sax_recorder_records(rec, &n);
|
|
465
|
+
const char* arena = leptris_sax_recorder_arena(rec, &alen);
|
|
466
|
+
/* iterate n fixed-size records; strings slice the arena by the
|
|
467
|
+
* record's offset+length fields (attributes: name\0value\0 pairs
|
|
468
|
+
* at attrs_off, attr_count pairs) */
|
|
469
|
+
----
|
|
470
|
+
|
|
471
|
+
Each `feed` starts a fresh chunk (records and arena reset), so a
|
|
472
|
+
streaming host drains after every chunk and stays bounded. Event
|
|
473
|
+
semantics are identical to the callback API — the recorder is a
|
|
474
|
+
handler on the same streaming state machine. Callback count becomes
|
|
475
|
+
O(chunks), not O(events): 20 host calls for a 41,806-event document
|
|
476
|
+
(64 KB chunks).
|
|
477
|
+
|
|
478
|
+
[#xslt]
|
|
479
|
+
=== XSLT transformation
|
|
480
|
+
|
|
481
|
+
[source,c]
|
|
482
|
+
----
|
|
483
|
+
LeptrisXslt xslt = leptris_xslt_parse(sheet, strlen(sheet));
|
|
484
|
+
char* out = leptris_xslt_apply_string(xslt, doc); /* owned */
|
|
485
|
+
leptris_free_string(out);
|
|
486
|
+
leptris_xslt_free(xslt);
|
|
487
|
+
----
|
|
488
|
+
|
|
489
|
+
XSLT 1.0 is complete — every case of the libxslt regression suite
|
|
490
|
+
(205/205) matches byte-for-byte, including attribute sets,
|
|
491
|
+
`xsl:number` formats, keys, namespaces, decimal formats and DTD
|
|
492
|
+
attribute defaults. The XSLT 3.0 core ships and grows release by
|
|
493
|
+
release, each feature verified against Saxon-HE 12.7 before landing:
|
|
494
|
+
|
|
495
|
+
[cols="2,3",options="header"]
|
|
496
|
+
|===
|
|
497
|
+
|Area |Supported
|
|
498
|
+
|
|
499
|
+
|Sequences
|
|
500
|
+
|`xsl:value-of` over sequences, `xsl:sequence`-style item lists, ranges `A to B`
|
|
501
|
+
|
|
502
|
+
|Control
|
|
503
|
+
|`if/then/else`, `for $x in ... return`, `xsl:iterate` (params, `xsl:next-iteration` chaining, `xsl:break`, `xsl:on-completion`), `xsl:try`/`xsl:catch` with `$err:description`
|
|
504
|
+
|
|
505
|
+
|Constructors
|
|
506
|
+
|`xsl:copy` with `@select` (§9.9.2 per-item copy semantics), `xsl:namespace` (§11.7), `xsl:document` (§11.8), `xsl:fork` arms, `xsl:where-populated`/`xsl:on-non-empty`, `xsl:next-match`, `xsl:param @default` (the 4.0 form)
|
|
507
|
+
|
|
508
|
+
|Grouping
|
|
509
|
+
|`xsl:for-each-group`: `group-by`, `group-adjacent`, `group-starting-with`, `group-ending-with`, with `current-group()`/`current-grouping-key()`; composite keys (`use="a b"` token lists)
|
|
510
|
+
|
|
511
|
+
|Merging
|
|
512
|
+
|`xsl:merge` (§14.3): multiple `xsl:merge-source`s joined on their `xsl:merge-key`s, with `current-merge-key()` and `current-merge-group(name)`
|
|
513
|
+
|
|
514
|
+
|Strings
|
|
515
|
+
|`xsl:analyze-string` with `regex-group(n)`, `xsl:on-empty`, text value templates (`expand-text`)
|
|
516
|
+
|
|
517
|
+
|Dynamic evaluation
|
|
518
|
+
|`xsl:evaluate` (dynamic `@xpath`, `@context-item`, child `xsl:with-param`), `error($msg)`
|
|
519
|
+
|
|
520
|
+
|Secondary output
|
|
521
|
+
|`xsl:result-document` serializes its content to the `@href` file (parent directories created as needed); `xsl:character-map` with `xsl:output/@use-character-maps` substitutes characters in text and attribute values at serialization
|
|
522
|
+
|
|
523
|
+
|Modes
|
|
524
|
+
|`xsl:mode` with `use-accumulators` and all six `on-no-match` dispositions (`deep-copy`, `shallow-copy` — the 3.0 default, `shallow-skip`, `deep-skip`, `text-only-copy`, `fail`); 1.0 sheets keep the classic built-in rules
|
|
525
|
+
|
|
526
|
+
|Accumulators (§18.2)
|
|
527
|
+
|`xsl:accumulator` with `phase="start|end"` rules, `accumulator-before()`/`accumulator-after()`, applicability gating and the XTDE33xx error family
|
|
528
|
+
|===
|
|
529
|
+
|
|
530
|
+
The XPath engine inside carries the 3.1 composition core: `let`
|
|
531
|
+
bindings, the `!` simple map with per-item focus, the `=>` arrow
|
|
532
|
+
(every core and extension function serves it), and `||` string
|
|
533
|
+
concatenation, alongside `current()`, `key()`, `document()`,
|
|
534
|
+
`format-number()`, `generate-id()` and the EXSLT packs.
|
|
535
|
+
|
|
536
|
+
[#serialize]
|
|
537
|
+
=== Serialization
|
|
538
|
+
|
|
539
|
+
[source,c]
|
|
540
|
+
----
|
|
541
|
+
LeptrisSerializeOptions opts = { .indent = 2, .xml_declaration = 1 };
|
|
542
|
+
char* out = leptris_document_serialize(doc, &opts);
|
|
543
|
+
puts(out);
|
|
544
|
+
leptris_free_string(out);
|
|
545
|
+
----
|
|
546
|
+
|
|
547
|
+
[#c14n]
|
|
548
|
+
=== Canonical XML
|
|
549
|
+
|
|
550
|
+
[source,c]
|
|
551
|
+
----
|
|
552
|
+
char* canonical = leptris_c14n_canonicalize(doc, LEPTRIS_C14N_1_0, 0);
|
|
553
|
+
fputs(canonical, stdout);
|
|
554
|
+
putchar('\n'); /* canonical output may not end with newline */
|
|
555
|
+
leptris_free_string(canonical);
|
|
556
|
+
leptris_free_string(canonical);
|
|
557
|
+
----
|
|
558
|
+
|
|
559
|
+
=== Compiled XPath expressions
|
|
560
|
+
|
|
561
|
+
`TODO.bindings/03`: compile once, evaluate many times — skips the
|
|
562
|
+
per-call expression hash and cache probe of `leptris_xpath_eval`.
|
|
563
|
+
|
|
564
|
+
[source,c]
|
|
565
|
+
----
|
|
566
|
+
LeptrisXPathCompiled c = leptris_xpath_compile("//book[@n > 3]");
|
|
567
|
+
LeptrisXPathResult r = leptris_xpath_compiled_eval(c, doc, NULL);
|
|
568
|
+
leptris_xpath_result_free(r);
|
|
569
|
+
leptris_xpath_compiled_free(c);
|
|
570
|
+
----
|
|
571
|
+
|
|
572
|
+
Thread contract: the handle is immutable — any number of threads may
|
|
573
|
+
evaluate it concurrently (each against its own document); free it
|
|
574
|
+
only after the last evaluation returns. Context variants:
|
|
575
|
+
`leptris_xpath_compiled_eval_ns` (external namespace bindings) and
|
|
576
|
+
`leptris_xpath_compiled_eval_vars` ($var references) — compiled
|
|
577
|
+
counterparts of `leptris_xpath_eval_ns` / `eval_with_vars_context`.
|
|
578
|
+
|
|
579
|
+
=== FFI ergonomics (issue #535)
|
|
580
|
+
|
|
581
|
+
`leptris_node_children(parent, out, max)` copies every child handle
|
|
582
|
+
in one call (elements, text, comments, CDATA, PIs) — out=NULL
|
|
583
|
+
returns the total across all kinds. `leptris_document_serialize_into`
|
|
584
|
+
/ `leptris_element_serialize_into` write into a caller buffer:
|
|
585
|
+
buf=NULL queries the needed size (including NUL); with capacity the
|
|
586
|
+
copy happens in the same call — the serialize + read + free FFI
|
|
587
|
+
pattern collapses to one call with zero library-side allocations.
|
|
588
|
+
|
|
589
|
+
=== Per-parse options
|
|
590
|
+
|
|
591
|
+
`TODO.bindings/05`: scoped alternative to the thread-global
|
|
592
|
+
`leptris_set_strict_mode` / `leptris_set_max_depth`.
|
|
593
|
+
|
|
594
|
+
[source,c]
|
|
595
|
+
----
|
|
596
|
+
LeptrisParseOptions o = {LEPTRIS_PARSE_DEFAULT, /*strict*/ 1, /*depth*/ 4};
|
|
597
|
+
LeptrisDocument doc = leptris_parse_string_ex(xml, len, &o, &status);
|
|
598
|
+
----
|
|
599
|
+
|
|
600
|
+
Options apply to that one call; the thread defaults are restored on
|
|
601
|
+
return. Not reentrant (applied via thread-local state).
|
|
602
|
+
|
|
603
|
+
=== Serialization encoding guarantees
|
|
604
|
+
|
|
605
|
+
`TODO.bindings/06`: serialization output is ALWAYS UTF-8 — the body
|
|
606
|
+
is never transcoded (iconv is input-side only). The XML declaration
|
|
607
|
+
never lies: a document parsed as ISO-8859-1 serializes with
|
|
608
|
+
`encoding="UTF-8"` (the body was transcoded at parse time), and
|
|
609
|
+
requesting another output encoding is normalized to UTF-8.
|
|
610
|
+
`serialize(parse(serialize(x)))` is byte-stable.
|
|
611
|
+
|
|
612
|
+
== Memory model
|
|
613
|
+
|
|
614
|
+
Every byte the parser allocates that ends up referenced by a document
|
|
615
|
+
lives in the document's pool. `leptris_document_free` destroys the
|
|
616
|
+
pool and releases everything in one call.
|
|
617
|
+
|
|
618
|
+
[cols="1,3",options="header"]
|
|
619
|
+
|===
|
|
620
|
+
|Allocation |Where it lives
|
|
621
|
+
|
|
622
|
+
|Node structs (element, text, comment, CDATA, PI, doctype)
|
|
623
|
+
|Pool, allocated contiguously with content where possible.
|
|
624
|
+
|
|
625
|
+
|Node content strings
|
|
626
|
+
|Pool, contiguous with the struct (cache locality).
|
|
627
|
+
|
|
628
|
+
|Attribute names
|
|
629
|
+
|Pool hash table (interned; dedup across elements).
|
|
630
|
+
|
|
631
|
+
|Attribute values
|
|
632
|
+
|Pool, bypassing interning (attrs.xml regression fixed).
|
|
633
|
+
|
|
634
|
+
|DTD container + hash tables
|
|
635
|
+
|Pool, with DTD subsystem owned by the document.
|
|
636
|
+
|
|
637
|
+
|XPath intermediates
|
|
638
|
+
|Pool, freed at result destruction.
|
|
639
|
+
|===
|
|
640
|
+
|
|
641
|
+
For bindings: the C API has opaque handles. All freeing is
|
|
642
|
+
explicit. See the `Memory:` comment on each public function.
|
|
643
|
+
|
|
644
|
+
== Threading model
|
|
645
|
+
|
|
646
|
+
libleptris is thread-safe under the *one-document-per-thread*
|
|
647
|
+
contract (documented in `TODO.concurrency/08`):
|
|
648
|
+
|
|
649
|
+
* **Safe**: any number of threads, each owning its own `LeptrisDocument`
|
|
650
|
+
— parse, evaluate, mutate, serialize, free independently.
|
|
651
|
+
* **Safe**: read-only sharing of one document across threads
|
|
652
|
+
(parse once, evaluate concurrently from many threads).
|
|
653
|
+
* **Forbidden**: mutating one document from two threads at once, or
|
|
654
|
+
touching a document after another thread freed it.
|
|
655
|
+
|
|
656
|
+
Process-global state is either initialized at library load (SIMD
|
|
657
|
+
dispatch, the XPath function registry) or mutex-guarded (the
|
|
658
|
+
process-wide XPath AST/bytecode cache). Borrowed cache entries are
|
|
659
|
+
reference-pinned for the duration of an evaluate, so eviction never
|
|
660
|
+
frees an AST underneath a running thread.
|
|
661
|
+
|
|
662
|
+
Error reporting is channel-split:
|
|
663
|
+
|
|
664
|
+
* `leptris_last_error()` — thread-local message of the most recent
|
|
665
|
+
failure on the *calling* thread (e.g. a failed
|
|
666
|
+
`leptris_parse_string`).
|
|
667
|
+
* `leptris_document_last_error(doc)` — per-document message from the
|
|
668
|
+
last failed operation against that document (e.g. a failed
|
|
669
|
+
`leptris_xpath_eval`); immune to concurrent activity on other
|
|
670
|
+
documents.
|
|
671
|
+
|
|
672
|
+
Worker threads keep small per-thread caches (XPath free lists, the
|
|
673
|
+
root-map free list). C99 has no portable thread-exit hook, so a
|
|
674
|
+
thread that used libleptris and then exits retains those entries —
|
|
675
|
+
call `leptris_thread_cleanup()` from each worker just before it
|
|
676
|
+
exits to release them. Pooled, long-lived threads never need it.
|
|
677
|
+
|
|
678
|
+
The full pack is exercised by `test/concurrency/test_concurrency.cpp`
|
|
679
|
+
(parse/eval/serialize/free on four threads, thread-local error
|
|
680
|
+
isolation, per-document error slots), which is ThreadSanitizer-clean.
|
|
681
|
+
|
|
682
|
+
[#abi]
|
|
683
|
+
== ABI stability
|
|
684
|
+
|
|
685
|
+
Opaque handles are pointer-sized — enforced at compile time:
|
|
686
|
+
|
|
687
|
+
[source,c]
|
|
688
|
+
----
|
|
689
|
+
_Static_assert(sizeof(LeptrisDocument) == sizeof(void*), "...");
|
|
690
|
+
----
|
|
691
|
+
|
|
692
|
+
To pin enum values (bindings hard-code these):
|
|
693
|
+
|
|
694
|
+
[source,bash]
|
|
695
|
+
----
|
|
696
|
+
ctest --test-dir build -R HeaderHygiene
|
|
697
|
+
----
|
|
698
|
+
|
|
699
|
+
[#FFI]
|
|
700
|
+
== FFI design
|
|
701
|
+
|
|
702
|
+
libleptris exposes a stable C ABI. Bindings:
|
|
703
|
+
|
|
704
|
+
* *Ruby* — shipped. Uses `ffi` gem. See link:bindings/ruby/[Ruby binding].
|
|
705
|
+
* *Python* — shipped as `leptris` via `cffi` (ABI mode), from
|
|
706
|
+
https://github.com/leptris/leptris-py[leptris/leptris-py].
|
|
707
|
+
* *Rust* — shipped: crate `leptris` with safe wrappers, XPath, and
|
|
708
|
+
SAX closures. See link:bindings/rust/[Rust binding].
|
|
709
|
+
|
|
710
|
+
=== Ruby quick start
|
|
711
|
+
|
|
712
|
+
[source,ruby]
|
|
713
|
+
----
|
|
714
|
+
require 'leptris'
|
|
715
|
+
|
|
716
|
+
doc = Leptris::Document.parse('<root><item id="1">hello</item></root>')
|
|
717
|
+
root = doc.root
|
|
718
|
+
puts root.name # => "root"
|
|
719
|
+
puts root.first_child_element['id'] # => "1"
|
|
720
|
+
puts doc.xpath('count(//item)') # => 1.0
|
|
721
|
+
doc.free
|
|
722
|
+
----
|
|
723
|
+
|
|
724
|
+
Install: set `LEPTRIS_LIB_PATH` to your `libleptris.dylib` / `.so`, or
|
|
725
|
+
install libleptris system-wide. The `ffi` gem is the only dependency.
|
|
726
|
+
|
|
727
|
+
[source,bash]
|
|
728
|
+
----
|
|
729
|
+
gem install ffi
|
|
730
|
+
LEPTRIS_LIB_PATH=/path/to/libleptris.0.dylib ruby -Ilib -rleptris -e '
|
|
731
|
+
doc = Leptris::Document.parse("<r/>")
|
|
732
|
+
puts doc.root.name
|
|
733
|
+
doc.free
|
|
734
|
+
'
|
|
735
|
+
----
|
|
736
|
+
|
|
737
|
+
To parse the headers from a binding tool:
|
|
738
|
+
|
|
739
|
+
[source,bash]
|
|
740
|
+
----
|
|
741
|
+
cc -DLEPTRIS_FOR_BINDGEN -E src/include/leptris.h # strips LEPTRIS_API
|
|
742
|
+
----
|
|
743
|
+
|
|
744
|
+
=== Python quick start
|
|
745
|
+
|
|
746
|
+
[source,python]
|
|
747
|
+
----
|
|
748
|
+
from pyleptris import Document
|
|
749
|
+
|
|
750
|
+
doc = Document.parse('<root><item id="1">hello</item></root>')
|
|
751
|
+
root = doc.root
|
|
752
|
+
print(root.name) # => "root"
|
|
753
|
+
print(root.first_child_element.attribute('id')) # => "1"
|
|
754
|
+
print(doc.xpath('count(//item)')) # => 1.0
|
|
755
|
+
doc.close()
|
|
756
|
+
----
|
|
757
|
+
|
|
758
|
+
Install: `pip install cffi` and point `LEPTRIS_LIB_PATH` at your
|
|
759
|
+
`libleptris.dylib` / `.so` (or install libleptris system-wide).
|
|
760
|
+
|
|
761
|
+
[source,bash]
|
|
762
|
+
----
|
|
763
|
+
cmake -B build -S . -DLEPTRIS_BUILD_SHARED=ON
|
|
764
|
+
cmake --build build --target leptris_shared
|
|
765
|
+
LEPTRIS_LIB_PATH=$PWD/build/src/libleptris.dylib \
|
|
766
|
+
python3 -m pytest bindings/python/tests/
|
|
767
|
+
----
|
|
768
|
+
|
|
769
|
+
==== Ruby SAX
|
|
770
|
+
|
|
771
|
+
Event-driven parsing (TODO 118 Phase B) — a handlers Hash of procs;
|
|
772
|
+
all keys optional. Strings arrive as UTF-8; entity references in
|
|
773
|
+
text and attribute values arrive expanded (XML 1.0):
|
|
774
|
+
|
|
775
|
+
[source,ruby]
|
|
776
|
+
----
|
|
777
|
+
require 'leptris'
|
|
778
|
+
|
|
779
|
+
Leptris::SAX.parse('<books><book id="1">title & more</book></books>',
|
|
780
|
+
start_element: ->(name, attrs) { puts "#{name} #{attrs.inspect}" },
|
|
781
|
+
end_element: ->(name) { },
|
|
782
|
+
characters: ->(text) { },
|
|
783
|
+
error: ->(msg, line, col) { warn "#{line}:#{col} #{msg}" }
|
|
784
|
+
)
|
|
785
|
+
# prints: books {}
|
|
786
|
+
# book {"id"=>"1"}
|
|
787
|
+
----
|
|
788
|
+
|
|
789
|
+
Incremental parsing for streams (`streaming: true` selects the
|
|
790
|
+
constant-memory state machine — the same machine the one-shot API
|
|
791
|
+
uses; the default buffers chunks and parses on the final feed):
|
|
792
|
+
|
|
793
|
+
[source,ruby]
|
|
794
|
+
----
|
|
795
|
+
parser = Leptris::SAX::Parser.new({ characters: ->(t) { print t } },
|
|
796
|
+
streaming: true)
|
|
797
|
+
IO.popen('curl -s https://example.com/feed.xml') do |io|
|
|
798
|
+
io.each(4096) { |chunk| parser.feed(chunk) }
|
|
799
|
+
end
|
|
800
|
+
parser.feed('', final: true)
|
|
801
|
+
parser.free
|
|
802
|
+
----
|
|
803
|
+
|
|
804
|
+
Events: `:start_document`, `:end_document`, `:start_element`
|
|
805
|
+
(name, attrs-hash), `:end_element` (name), `:characters` (text),
|
|
806
|
+
`:comment`, `:cdata`, `:processing_instruction` (target, data),
|
|
807
|
+
`:start_prefix_mapping` / `:end_prefix_mapping` (namespace
|
|
808
|
+
declarations), `:error` (message, line, column). A `characters`
|
|
809
|
+
event may fire multiple times per text node — concatenate between
|
|
810
|
+
element events to coalesce (the SAX contract).
|
|
811
|
+
|
|
812
|
+
See link:docs/FFI.md[docs/FFI.md] for the full design document.
|
|
813
|
+
|
|
814
|
+
== CLI
|
|
815
|
+
|
|
816
|
+
[source,bash]
|
|
817
|
+
----
|
|
818
|
+
# Parse a document
|
|
819
|
+
leptris parse document.xml
|
|
820
|
+
|
|
821
|
+
# Round-trip via XPath count
|
|
822
|
+
leptris xpath --count document.xml 'count(//item)'
|
|
823
|
+
|
|
824
|
+
# Pretty-print
|
|
825
|
+
leptris format --indent 4 document.xml < ugly.xml > pretty.xml
|
|
826
|
+
|
|
827
|
+
# Validate / version
|
|
828
|
+
leptris version
|
|
829
|
+
----
|
|
830
|
+
|
|
831
|
+
Exit codes: 0 on success, 1 on parse error or invalid usage.
|
|
832
|
+
|
|
833
|
+
== Performance
|
|
834
|
+
|
|
835
|
+
Leptris is benchmarked against libxml2 and pugixml on every push via CI
|
|
836
|
+
(GitHub Actions, Linux + macOS). Numbers below are from Apple Silicon,
|
|
837
|
+
`clang -O3 -flto=thin` (LTO is default for Release builds since TODO 110).
|
|
838
|
+
|
|
839
|
+
=== Parse + SAX throughput (vs libxml2)
|
|
840
|
+
|
|
841
|
+
[cols="2,>1,>1,>1",options="header"]
|
|
842
|
+
|===
|
|
843
|
+
|Benchmark |Leptris |libxml2 |Advantage
|
|
844
|
+
|
|
845
|
+
|SAX small (~1 KB)
|
|
846
|
+
|2.8 µs (377 MB/s)
|
|
847
|
+
|7.1 µs (124 MB/s)
|
|
848
|
+
|2.5× faster
|
|
849
|
+
|
|
850
|
+
|SAX medium (~5 KB)
|
|
851
|
+
|7.5 µs (624 MB/s)
|
|
852
|
+
|26.9 µs (175 MB/s)
|
|
853
|
+
|3.6× faster
|
|
854
|
+
|
|
855
|
+
|DOM parse (~5 KB)
|
|
856
|
+
|33 µs
|
|
857
|
+
|47 µs
|
|
858
|
+
|1.4× faster
|
|
859
|
+
|===
|
|
860
|
+
|
|
861
|
+
==== Parse modes: whitespace semantics
|
|
862
|
+
|
|
863
|
+
By default leptris keeps whitespace-only text nodes — the
|
|
864
|
+
faithful-DOM behavior of libxml2/Nokogiri, and the only mode that
|
|
865
|
+
round-trips pretty-printed XML byte-for-byte. pugixml discards these
|
|
866
|
+
nodes by default (its `parse_ws_pcdata` is opt-in). For an
|
|
867
|
+
apples-to-apples parse comparison on pretty-printed documents, use
|
|
868
|
+
`leptris_parse_string_flags(..., LEPTRIS_PARSE_DROP_WS_TEXT, ...)`
|
|
869
|
+
— the equivalent of pugixml's default and libxml2's
|
|
870
|
+
`XML_PARSE_NOBLANKS`. Without the flag, leptris creates and wires
|
|
871
|
+
one text node per element that pugixml never materializes, which is
|
|
872
|
+
the entire difference on whitespace-heavy shapes (~1.1-1.4x in
|
|
873
|
+
default mode).
|
|
874
|
+
|
|
875
|
+
=== DOM read access (vs libxml2)
|
|
876
|
+
|
|
877
|
+
[cols="2,>1,>1,>1",options="header"]
|
|
878
|
+
|===
|
|
879
|
+
|Benchmark |Leptris |libxml2 |Advantage
|
|
880
|
+
|
|
881
|
+
|Attribute lookup by name
|
|
882
|
+
|1.6 µs
|
|
883
|
+
|3.0 µs
|
|
884
|
+
|1.9× faster
|
|
885
|
+
|
|
886
|
+
|Text content extraction
|
|
887
|
+
|1.4 µs
|
|
888
|
+
|3.5 µs
|
|
889
|
+
|2.6× faster
|
|
890
|
+
|
|
891
|
+
|Indexed child access (1000 × 50)
|
|
892
|
+
|2.3 µs (O(1) cached)
|
|
893
|
+
|2.5 µs
|
|
894
|
+
|9% faster
|
|
895
|
+
|===
|
|
896
|
+
|
|
897
|
+
=== XPath evaluation (vs libxml2)
|
|
898
|
+
|
|
899
|
+
Leptris's XPath engine uses a bytecode VM with per-axis
|
|
900
|
+
specialization, predicate fast paths, absolute-path fusion, a
|
|
901
|
+
per-document element index with attribute buckets, fused
|
|
902
|
+
axis+predicate opcodes, and memcpy fast paths for index-backed
|
|
903
|
+
queries (TODO 120, TODO 125–137). Numbers below are from
|
|
904
|
+
`benchmarks/xpath/bench_diagnostic` on a ~5 KB catalog fixture,
|
|
905
|
+
CPU time.
|
|
906
|
+
|
|
907
|
+
[cols="2,>1,>1,>1",options="header"]
|
|
908
|
+
|===
|
|
909
|
+
|Benchmark |Leptris |libxml2 |Advantage
|
|
910
|
+
|
|
911
|
+
|`self::*` (per-call floor)
|
|
912
|
+
|0.57 µs
|
|
913
|
+
|0.89 µs
|
|
914
|
+
|**1.6× faster**
|
|
915
|
+
|
|
916
|
+
|`child::*`
|
|
917
|
+
|0.71 µs
|
|
918
|
+
|0.94 µs
|
|
919
|
+
|**1.3× faster**
|
|
920
|
+
|
|
921
|
+
|`attribute::id`
|
|
922
|
+
|0.63 µs
|
|
923
|
+
|2.52 µs
|
|
924
|
+
|**4.0× faster**
|
|
925
|
+
|
|
926
|
+
|`descendant::*`
|
|
927
|
+
|0.72 µs
|
|
928
|
+
|0.96 µs
|
|
929
|
+
|**1.3× faster**
|
|
930
|
+
|
|
931
|
+
|`descendant::title`
|
|
932
|
+
|0.74 µs
|
|
933
|
+
|0.99 µs
|
|
934
|
+
|**1.3× faster**
|
|
935
|
+
|
|
936
|
+
|`//book` (descendant-or-self)
|
|
937
|
+
|0.55 µs
|
|
938
|
+
|~1 µs
|
|
939
|
+
|**1.8× faster**
|
|
940
|
+
|
|
941
|
+
|`//*` (all elements)
|
|
942
|
+
|0.56 µs
|
|
943
|
+
|~1 µs
|
|
944
|
+
|**1.8× faster**
|
|
945
|
+
|
|
946
|
+
|`count(//book[@id='b1'])`
|
|
947
|
+
|1.13 µs
|
|
948
|
+
|~3 µs
|
|
949
|
+
|**2.7× faster**
|
|
950
|
+
|
|
951
|
+
|`descendant::*[@id]`
|
|
952
|
+
|0.77 µs
|
|
953
|
+
|1.02 µs
|
|
954
|
+
|**1.3× faster**
|
|
955
|
+
|
|
956
|
+
|`/catalog` (root match)
|
|
957
|
+
|0.53 µs
|
|
958
|
+
|~1 µs
|
|
959
|
+
|**1.9× faster**
|
|
960
|
+
|===
|
|
961
|
+
|
|
962
|
+
Leptris BEATS libxml2 on **all 10** XPath benchmarks.
|
|
963
|
+
|
|
964
|
+
=== DOM writes (vs pugixml)
|
|
965
|
+
|
|
966
|
+
Numbers from `benchmarks/matrix` (median of 20 interleaved Release
|
|
967
|
+
runs, fresh build dirs). Pugixml's `append_attribute` does not
|
|
968
|
+
reject duplicates; the fair comparison for attribute setting is
|
|
969
|
+
find-then-set (or find-then-append), which is what a correct
|
|
970
|
+
program must do. Leptris rejects duplicates per the XML 1.0
|
|
971
|
+
attribute uniqueness rule.
|
|
972
|
+
|
|
973
|
+
[cols="2,>1,>1,>1",options="header"]
|
|
974
|
+
|===
|
|
975
|
+
|Benchmark |Leptris |pugixml |Advantage
|
|
976
|
+
|
|
977
|
+
|Append 10000 children (one parent)
|
|
978
|
+
|160 µs
|
|
979
|
+
|119 µs
|
|
980
|
+
|1.3× slower (measured; was 2.5× faster pre-attr-index — the doc-level
|
|
981
|
+
index bookkeeping is the cost of O(1) duplicate-rejecting
|
|
982
|
+
set_attribute at scale)
|
|
983
|
+
|
|
984
|
+
|Set 2000 attributes (duplicate-rejecting)
|
|
985
|
+
|347 µs
|
|
986
|
+
|~8–14 ms (find+set)
|
|
987
|
+
|**~25× faster**
|
|
988
|
+
|
|
989
|
+
|Serialize attr-heavy 2 MB
|
|
990
|
+
|490 µs
|
|
991
|
+
|799 µs
|
|
992
|
+
|**1.6× faster**
|
|
993
|
+
|
|
994
|
+
|Serialize text-heavy 2 MB
|
|
995
|
+
|566 µs
|
|
996
|
+
|521 µs
|
|
997
|
+
|1.1× slower (measured; the two are at parity within run noise)
|
|
998
|
+
|===
|
|
999
|
+
|
|
1000
|
+
See also `benchmarks/README.md` for the decomposition benchmark
|
|
1001
|
+
(`benchmark_decomp`: isolates text/element/attr/text-node costs)
|
|
1002
|
+
and the SAX benchmark (`benchmark_sax`: leptris vs libxml2 SAX2 —
|
|
1003
|
+
pugixml has no SAX interface; leptris leads every corpus shape).
|
|
1004
|
+
|
|
1005
|
+
=== Building with LTO
|
|
1006
|
+
|
|
1007
|
+
LTO is enabled by default for `Release` and `RelWithDebInfo` builds.
|
|
1008
|
+
Disable with `-DLEPTRIS_ENABLE_LTO=OFF`:
|
|
1009
|
+
|
|
1010
|
+
[source,bash]
|
|
1011
|
+
----
|
|
1012
|
+
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
|
|
1013
|
+
cmake --build build # LTO is on automatically
|
|
1014
|
+
|
|
1015
|
+
# or explicitly:
|
|
1016
|
+
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DLEPTRIS_ENABLE_LTO=ON
|
|
1017
|
+
----
|
|
1018
|
+
|
|
1019
|
+
=== Running benchmarks
|
|
1020
|
+
|
|
1021
|
+
[source,bash]
|
|
1022
|
+
----
|
|
1023
|
+
cmake -B build -S . \
|
|
1024
|
+
-DCMAKE_BUILD_TYPE=Release \
|
|
1025
|
+
-DLEPTRIS_BUILD_BENCHMARKS=ON
|
|
1026
|
+
cmake --build build
|
|
1027
|
+
|
|
1028
|
+
# Run individual benchmarks:
|
|
1029
|
+
./build/benchmarks/bench_dom_leptris
|
|
1030
|
+
./build/benchmarks/bench_sax_leptris
|
|
1031
|
+
./build/benchmarks/benchmark_write # vs pugixml + libxml2
|
|
1032
|
+
./build/benchmarks/bench_xpath_pugixml # XPath vs pugixml
|
|
1033
|
+
----
|
|
1034
|
+
|
|
1035
|
+
CI uploads a `benchmark-results-<os>` artifact per push with JSON +
|
|
1036
|
+
Markdown output from every benchmark binary.
|
|
1037
|
+
|
|
1038
|
+
[#vcpkg]
|
|
1039
|
+
== vcpkg integration
|
|
1040
|
+
|
|
1041
|
+
A vcpkg port pattern follows the jemalloc convention (see
|
|
1042
|
+
`tamatebako/jemalloc/ports/jemalloc/`). The library ships with:
|
|
1043
|
+
|
|
1044
|
+
* A `vcpkg.json` (manifest) for vcpkg consumption.
|
|
1045
|
+
* A `portfile.cmake` template for vcpkg port submission.
|
|
1046
|
+
* A `usage` file documenting the linkage pattern.
|
|
1047
|
+
|
|
1048
|
+
[source,cmake]
|
|
1049
|
+
----
|
|
1050
|
+
# portfile.cmake (excerpt — see repo for full version)
|
|
1051
|
+
vcpkg_cmake_configure(
|
|
1052
|
+
SOURCE_PATH "${SOURCE_PATH}"
|
|
1053
|
+
OPTIONS
|
|
1054
|
+
-DLEPTRIS_BUILD_CLI=OFF
|
|
1055
|
+
-DLEPTRIS_ENABLE_UTF8PROC=ON
|
|
1056
|
+
-DLEPTRIS_ENABLE_ICONV=ON
|
|
1057
|
+
)
|
|
1058
|
+
vcpkg_cmake_install()
|
|
1059
|
+
vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/leptris)
|
|
1060
|
+
----
|
|
1061
|
+
|
|
1062
|
+
== Dependencies
|
|
1063
|
+
|
|
1064
|
+
* *CMake* ≥ 3.20
|
|
1065
|
+
* *C99 compiler* (GCC, Clang, MSVC, MinGW)
|
|
1066
|
+
* Optional: *utf8proc* (Unicode), *iconv* (encoding conversion),
|
|
1067
|
+
*Doxygen* (API docs)
|
|
1068
|
+
|
|
1069
|
+
No runtime dependencies when built without utf8proc/iconv.
|
|
1070
|
+
|
|
1071
|
+
== Continuous integration
|
|
1072
|
+
|
|
1073
|
+
[cols="1,2,2",options="header"]
|
|
1074
|
+
|===
|
|
1075
|
+
|Workflow |Triggers |What it does
|
|
1076
|
+
|
|
1077
|
+
|`.github/workflows/test.yml`
|
|
1078
|
+
|Every push/PR
|
|
1079
|
+
|Build, run all 103 specs across 13 modules.
|
|
1080
|
+
|
|
1081
|
+
|`.github/workflows/asan.yml`
|
|
1082
|
+
|Every push/PR
|
|
1083
|
+
|Build with AddressSanitizer; verify zero leaks / errors.
|
|
1084
|
+
|
|
1085
|
+
|`.github/workflows/fuzz-nightly.yml`
|
|
1086
|
+
|Nightly cron
|
|
1087
|
+
|libFuzzer for 5 minutes; report any crashes.
|
|
1088
|
+
|===
|
|
1089
|
+
|
|
1090
|
+
== Project layout
|
|
1091
|
+
|
|
1092
|
+
[source,text]
|
|
1093
|
+
----
|
|
1094
|
+
leptris/
|
|
1095
|
+
src/ # library + CLI + tests source
|
|
1096
|
+
include/ # public C API headers
|
|
1097
|
+
leptris/ # internal C source
|
|
1098
|
+
dom/ # DOM node types + pool
|
|
1099
|
+
parse/ # parser
|
|
1100
|
+
xpath/ # XPath evaluator
|
|
1101
|
+
sax/ # SAX parser
|
|
1102
|
+
encode/ # UTF-16 + iconv
|
|
1103
|
+
serialize/ # output writer
|
|
1104
|
+
memory/ # pool allocator
|
|
1105
|
+
dtd/ # DTD subsystem
|
|
1106
|
+
cli/ # command-line tool
|
|
1107
|
+
test/ # 345 specs across 14 modules
|
|
1108
|
+
benchmark/ # libxml2 / pugixml comparisons
|
|
1109
|
+
bindings/ruby/ # Ruby FFI binding (TODO 118)
|
|
1110
|
+
TODO.md # open-work tracker (TODO.fix/ planning docs live in git history)
|
|
1111
|
+
.github/workflows/ # CI
|
|
1112
|
+
docs/ # README, building guide, FFI design
|
|
1113
|
+
====
|
|
1114
|
+
|
|
1115
|
+
== Roadmap
|
|
1116
|
+
|
|
1117
|
+
context, and link:docs/FFI.md[docs/FFI.md] for the FFI roadmap.
|
|
1118
|
+
|
|
1119
|
+
Shipped in v0.3.0:
|
|
1120
|
+
|
|
1121
|
+
* ✓ Zero-copy borrowed text nodes (TODO 115)
|
|
1122
|
+
* ✓ Pool-routed Parser struct (TODO 114 Phase 3)
|
|
1123
|
+
* ✓ Streaming SAX state machine (TODO 116 Phases A-C — recursive parser removed)
|
|
1124
|
+
* ✓ XInclude ownership transfer + cycle detection (TODO 117 Phases A-C)
|
|
1125
|
+
* ✓ DTD content-model memoization (TODO 119)
|
|
1126
|
+
* ✓ XPath bytecode VM, complete + wired in (TODO 120 Phases A-E)
|
|
1127
|
+
* ✓ Compact-pointer int32 overflow fix for macOS (TODO 121)
|
|
1128
|
+
* ✓ Ruby FFI binding (TODO 118)
|
|
1129
|
+
|
|
1130
|
+
Shipped post-v0.3.0 (XPath perf track):
|
|
1131
|
+
|
|
1132
|
+
* ✓ SAX API exported from shared library (TODO 122 — unblocks Ruby SAX)
|
|
1133
|
+
* ✓ XPath diagnostic benchmark suite (TODO 123)
|
|
1134
|
+
* ✓ XPath bytecode VM inline dispatch + bytecode cache (TODO 120 Phase F)
|
|
1135
|
+
* ✓ Lazy namespace init — 5-9× faster per-eval floor (TODO 125)
|
|
1136
|
+
* ✓ Specialized child/attribute/self/parent axes (TODO 126)
|
|
1137
|
+
* ✓ Specialized descendant / descendant-or-self axes (TODO 127)
|
|
1138
|
+
* ✓ Simple predicate fast paths: `[@attr]`, `[@attr='lit']`, `[N]` (TODO 128)
|
|
1139
|
+
* ✓ Specialized absolute paths `/foo` `//foo` with `//name` fusion (TODO 129)
|
|
1140
|
+
* ✓ Inline VM opcodes for common functions — `count`, `sum`, `string`, etc. (TODO 130)
|
|
1141
|
+
* ✓ Iterative descendant walk + result pre-alloc (TODO 131)
|
|
1142
|
+
* ✓ Per-document element index for O(1) descendant queries (TODO 132)
|
|
1143
|
+
* ✓ Attribute index infrastructure for predicate fast paths (TODO 133)
|
|
1144
|
+
* ✓ Fused axis+predicate opcodes — `descendant::*[@id]` now BEATS libxml2 (TODO 134)
|
|
1145
|
+
* ✓ Fast inline nodeset_add for VM hot paths (TODO 135)
|
|
1146
|
+
* ✓ Descendant-or-self fused predicate opcodes (TODO 136)
|
|
1147
|
+
* ✓ Memcpy fast path for index-backed descendant queries — Leptris BEATS libxml2 on ALL XPath benchmarks (TODO 137)
|
|
1148
|
+
* ✓ Contiguous per-document arena + content-derived block sizing (TODO 183)
|
|
1149
|
+
* ✓ Single-representation attribute strings — views only, one cache line per attr (TODO 184)
|
|
1150
|
+
* ✓ Fused attribute/text scans — K=100 parse gap vs pugixml 7.8x → ~1.5x (TODO 184)
|
|
1151
|
+
* ✓ O(K^2) attribute walks eliminated across finalize/DTD/c14n (TODO 185)
|
|
1152
|
+
* ✓ Ruby SAX binding — full callback surface + streaming (TODO 118 Phase B)
|
|
1153
|
+
|
|
1154
|
+
Planned (see TODO.md for the full open list):
|
|
1155
|
+
|
|
1156
|
+
* Extend element index to relative-descendant queries (currently
|
|
1157
|
+
only absolute paths and root-context descendant use it).
|
|
1158
|
+
* XPointer `xmlns()` scheme (needs a public namespace-context API).
|
|
1159
|
+
* Doxygen API reference polish.
|
|
1160
|
+
|
|
1161
|
+
Shipped since this list was last curated: Python bindings (cffi,
|
|
1162
|
+
pyleptris) and Rust bindings (crate `leptris` in bindings/rust); VM
|
|
1163
|
+
constant folding for `concat` / `contains` / `substring`.
|
|
1164
|
+
|
|
1165
|
+
Measured dead (recorded for honesty; see the TODO.remaining/08 and
|
|
1166
|
+
TODO.fix perf-ledger planning docs in git history, v1.1.2-era main):
|
|
1167
|
+
|
|
1168
|
+
* 32 B split-stream attrs — the family's upper-bound probe (views-
|
|
1169
|
+
only 32 B stride, no ctrl array) regressed mid-K and still lost at
|
|
1170
|
+
K=100 (TODO 185 round 6).
|
|
1171
|
+
* Parser two-pass SIMD (v3) — the floor probe (memcpy + scan + stub
|
|
1172
|
+
walk) already cost 88.5% of the current full parse (TODO 193).
|
|
1173
|
+
The single-pass parser is at a compiler-global optimum; leptris
|
|
1174
|
+
parses 6-14x faster than libxml2 and sits ~1.5-1.8x behind
|
|
1175
|
+
pugixml on attr-heavy shapes, with no remaining lever of any
|
|
1176
|
+
known class.
|
|
1177
|
+
|
|
1178
|
+
== Contributing
|
|
1179
|
+
|
|
1180
|
+
Issues and pull requests at
|
|
1181
|
+
https://github.com/leptris/leptris[github.com/leptris/leptris].
|
|
1182
|
+
|
|
1183
|
+
For C contribution, see link:docs/guide/building.md[docs/guide/building.md].
|
|
1184
|
+
For the testing policy, see `test/README.md`.
|
|
1185
|
+
|
|
1186
|
+
== Acknowledgments
|
|
1187
|
+
|
|
1188
|
+
This project draws structural inspiration from several long-running
|
|
1189
|
+
C projects in the wider ecosystem:
|
|
1190
|
+
|
|
1191
|
+
* *jemalloc* (Tebako fork) — memory model and CI patterns.
|
|
1192
|
+
* *libxml2* — public API ergonomics.
|
|
1193
|
+
* *pugixml* — pool-based XML DOM, performance targets.
|
|
1194
|
+
|
|
1195
|
+
== License
|
|
1196
|
+
|
|
1197
|
+
MIT. See link:LICENSE.md[LICENSE.md].
|