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,1468 @@
|
|
|
1
|
+
/* dom/element_query.c — Public element/attribute/text/namespace query API.
|
|
2
|
+
*
|
|
3
|
+
* Extracted from leptris.c (TODO 42 phase 3). These are the read-only
|
|
4
|
+
* inspection functions: leptris_element_*, leptris_element_attribute_*,
|
|
5
|
+
* leptris_element_text_*, leptris_element_namespace_*.
|
|
6
|
+
*
|
|
7
|
+
* Mutation (set_attribute, add_namespace) lives here too — they're
|
|
8
|
+
* typed wrappers around the underlying accessors.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#include "../include/leptris.h"
|
|
12
|
+
#include "../leptris_internal.h"
|
|
13
|
+
#include "element.h"
|
|
14
|
+
#include "node.h"
|
|
15
|
+
#include "text.h"
|
|
16
|
+
|
|
17
|
+
/* Forward decls from leptris_memory.c — avoid pulling leptris_memory.h
|
|
18
|
+
* directly because it conflicts with pi.h's leptris_pi_free. */
|
|
19
|
+
int leptris_element_add_namespace(struct leptris_element* elem,
|
|
20
|
+
struct leptris_namespace* ns);
|
|
21
|
+
struct leptris_namespace* leptris_namespace_new_pooled(const char* prefix,
|
|
22
|
+
const char* uri,
|
|
23
|
+
LeptrisMemoryPool* pool);
|
|
24
|
+
#include "cdata.h"
|
|
25
|
+
#include "comment.h"
|
|
26
|
+
#include "pi.h"
|
|
27
|
+
#include "../common/string_view.h"
|
|
28
|
+
#include "../common/entities.h"
|
|
29
|
+
#include "../common/port.h"
|
|
30
|
+
#include <string.h>
|
|
31
|
+
#include <stdlib.h>
|
|
32
|
+
#include <stdio.h>
|
|
33
|
+
#include <ctype.h>
|
|
34
|
+
/* Forward decls (issue #542): the expanded-name matcher and prefix
|
|
35
|
+
* resolver are defined in the attribute section below. */
|
|
36
|
+
static struct leptris_attribute* find_attr_expanded(
|
|
37
|
+
LeptrisElement elem, const char* uri, const char* local);
|
|
38
|
+
static const char* elem_resolve_attr_prefix(LeptrisElement elem,
|
|
39
|
+
const char* prefix);
|
|
40
|
+
#include <math.h>
|
|
41
|
+
|
|
42
|
+
/* ============================================================================
|
|
43
|
+
* Element Functions
|
|
44
|
+
* ============================================================================ */
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Get element name
|
|
48
|
+
*/
|
|
49
|
+
LEPTRIS_API const char* leptris_element_name(LeptrisElement elem) {
|
|
50
|
+
if (!elem) return "";
|
|
51
|
+
|
|
52
|
+
/* Use compact accessor to get element name */
|
|
53
|
+
const char* name = leptris_element_get_name(elem);
|
|
54
|
+
return name ? name : "";
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Locate the owning document by walking up the parent chain.
|
|
58
|
+
* Only the parse-time root gets `document` set on every node, but detached
|
|
59
|
+
* subtrees still reach an attached ancestor through `parent`. */
|
|
60
|
+
static struct leptris_document* element_owning_document(LeptrisElement elem) {
|
|
61
|
+
for (; elem; elem = leptris_elem_parent(elem)) {
|
|
62
|
+
if (leptris_element_get_document(elem)) return leptris_element_get_document(elem);
|
|
63
|
+
}
|
|
64
|
+
return NULL;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Get element text content (concatenated recursively)
|
|
69
|
+
*
|
|
70
|
+
* The public contract is a `const char*` owned by the element, so the result
|
|
71
|
+
* must live as long as the document — it can never be a malloc'd buffer the
|
|
72
|
+
* caller has no way to release. Two paths satisfy that:
|
|
73
|
+
*
|
|
74
|
+
* 1. A lone text/CDATA child already holds the entire content, NUL-terminated,
|
|
75
|
+
* in document-owned storage: return it directly (zero allocation).
|
|
76
|
+
* 2. Mixed content needs concatenation, so the joined string is interned in
|
|
77
|
+
* the document pool and released with leptris_document_free().
|
|
78
|
+
*/
|
|
79
|
+
LEPTRIS_API const char* leptris_element_text(LeptrisElement elem) {
|
|
80
|
+
if (!elem) return "";
|
|
81
|
+
|
|
82
|
+
LeptrisNode* child = leptris_node_first_child_internal((LeptrisNode*)elem);
|
|
83
|
+
if (!child) return "";
|
|
84
|
+
|
|
85
|
+
/* Path 1: single character-data child — hand back its own storage. */
|
|
86
|
+
if (!leptris_node_get_next_sibling(child)) {
|
|
87
|
+
if (child->type == LEPTRIS_NODE_TYPE_TEXT) {
|
|
88
|
+
const char* content = leptris_text_get_content((LeptrisTextNode*)child);
|
|
89
|
+
return content ? content : "";
|
|
90
|
+
}
|
|
91
|
+
if (child->type == LEPTRIS_NODE_TYPE_CDATA) {
|
|
92
|
+
const char* content = ((LeptrisCDATANode*)child)->content;
|
|
93
|
+
return content ? content : "";
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* Path 2: concatenate, then intern in the document pool. */
|
|
98
|
+
struct leptris_document* doc = element_owning_document(elem);
|
|
99
|
+
if (!doc || !doc->pool) return "";
|
|
100
|
+
|
|
101
|
+
char* text = leptris_element_get_text_content(elem);
|
|
102
|
+
if (!text) return "";
|
|
103
|
+
const char* owned = leptris_pool_strdup(doc->pool, text);
|
|
104
|
+
leptris_free(text);
|
|
105
|
+
return owned ? owned : "";
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Get child element text value (first text node only, not recursive)
|
|
110
|
+
* This is different from leptris_element_text which concatenates all text recursively
|
|
111
|
+
*
|
|
112
|
+
* Returns nullptr if no text/CDATA child exists, not empty string ""
|
|
113
|
+
*
|
|
114
|
+
* Behavior: Looks at the first child node. If it's text/CDATA, returns its content.
|
|
115
|
+
* If it's an element, recursively gets the child value from that element (one level deep).
|
|
116
|
+
*/
|
|
117
|
+
LEPTRIS_API const char* leptris_element_child_value(LeptrisElement elem) {
|
|
118
|
+
if (!elem) return NULL;
|
|
119
|
+
|
|
120
|
+
/* Get first child node - use node API to get ALL children (not just elements) */
|
|
121
|
+
LeptrisNode* child = leptris_node_first_child((LeptrisNode*)elem);
|
|
122
|
+
if (!child) return NULL;
|
|
123
|
+
|
|
124
|
+
/* If first child is a text node, return its content */
|
|
125
|
+
if (child->type == LEPTRIS_NODE_TYPE_TEXT) {
|
|
126
|
+
LeptrisTextNode* text = (LeptrisTextNode*)child;
|
|
127
|
+
return leptris_text_get_content(text);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* If first child is a CDATA node, return its content */
|
|
131
|
+
if (child->type == LEPTRIS_NODE_TYPE_CDATA) {
|
|
132
|
+
LeptrisCDATANode* cdata = (LeptrisCDATANode*)child;
|
|
133
|
+
return cdata->content;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* If first child is an element, recursively get its child value (one level deep) */
|
|
137
|
+
if (child->type == LEPTRIS_NODE_TYPE_ELEMENT) {
|
|
138
|
+
return leptris_element_child_value((LeptrisElement)child);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return NULL; /* Comment, PI, or other node types have no text value */
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Get attribute value by name (Public API)
|
|
146
|
+
* PERFORMANCE: Uses linked list traversal (O(n) where n = attribute count)
|
|
147
|
+
*/
|
|
148
|
+
LEPTRIS_API const char* leptris_element_attribute(LeptrisElement elem, const char* name) {
|
|
149
|
+
if (!elem || !name) return NULL;
|
|
150
|
+
|
|
151
|
+
/* Validate node type - only elements have attributes */
|
|
152
|
+
LeptrisNode* node = (LeptrisNode*)elem;
|
|
153
|
+
if (node->type != LEPTRIS_NODE_TYPE_ELEMENT) {
|
|
154
|
+
return NULL; /* Not an element node */
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* Issue #542 semantics (XML Namespaces 1.0):
|
|
158
|
+
* 1. bare name matches ONLY the no-namespace attribute —
|
|
159
|
+
* "type" never finds xmi:type (mirror of #525)
|
|
160
|
+
* 2. qualified p:local resolves p in scope and matches by
|
|
161
|
+
* URI+local — p:type finds q:type when the URIs agree
|
|
162
|
+
* 3. xml is prebound and needs no declaration
|
|
163
|
+
* 4. undeclared prefix -> NULL, never a string fallback
|
|
164
|
+
* 5. xmlns / xmlns:* are declarations — never matched here */
|
|
165
|
+
const char* colon = strchr(name, ':');
|
|
166
|
+
struct leptris_attribute* attr;
|
|
167
|
+
if (!colon) {
|
|
168
|
+
if (strcmp(name, "xmlns") == 0) return NULL; /* (5) */
|
|
169
|
+
attr = find_attr_expanded(elem, NULL, name); /* (1) */
|
|
170
|
+
} else {
|
|
171
|
+
size_t pl = (size_t)(colon - name);
|
|
172
|
+
if (pl == 5 && memcmp(name, "xmlns", 5) == 0) return NULL; /* (5) */
|
|
173
|
+
char pbuf[64];
|
|
174
|
+
if (pl >= sizeof(pbuf)) return NULL;
|
|
175
|
+
memcpy(pbuf, name, pl);
|
|
176
|
+
pbuf[pl] = '\0';
|
|
177
|
+
const char* uri = elem_resolve_attr_prefix(elem, pbuf); /* (3)(4) */
|
|
178
|
+
if (!uri) return NULL; /* (4) */
|
|
179
|
+
attr = find_attr_expanded(elem, uri, colon + 1); /* (2) */
|
|
180
|
+
}
|
|
181
|
+
if (!attr) return NULL;
|
|
182
|
+
|
|
183
|
+
/* Single representation (round 4): entity values expand lazily
|
|
184
|
+
* INTO the view (owned copy); no-entity views are already
|
|
185
|
+
* NUL-terminated C strings. */
|
|
186
|
+
if (attr_has_entities(attr)) {
|
|
187
|
+
LeptrisMemoryPool* pool = leptris_element_get_pool(elem);
|
|
188
|
+
LeptrisStringView raw_v = leptris_attr_value_sv(attr);
|
|
189
|
+
char* decoded = pool
|
|
190
|
+
? leptris_decode_entities_view(&raw_v, pool)
|
|
191
|
+
: NULL;
|
|
192
|
+
if (decoded) {
|
|
193
|
+
leptris_attr_value_set_heap(attr, leptris_sv_from_cstr(decoded));
|
|
194
|
+
attr_set_entities(attr, 0);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (leptris_attr_value_sv(attr).data && leptris_attr_value_sv(attr).length > 0)
|
|
198
|
+
return leptris_attr_value_sv(attr).data;
|
|
199
|
+
return ""; /* present-but-empty (see attribute_value_at) */
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/* ---- Expanded-name attribute support (issue #542) -----------------
|
|
203
|
+
*
|
|
204
|
+
* XML Namespaces 1.0 attribute semantics, mirroring #525 for
|
|
205
|
+
* elements: the PREFIX never matters, only the (URI, local) pair it
|
|
206
|
+
* resolves to through the OWNING element's in-scope declarations.
|
|
207
|
+
* The xml prefix is prebound; xmlns/xmlns:* are declarations and are
|
|
208
|
+
* invisible to the attribute accessors. */
|
|
209
|
+
|
|
210
|
+
#define LEPTRIS_XML_NS "http://www.w3.org/XML/1998/namespace"
|
|
211
|
+
|
|
212
|
+
/* Resolve a prefix through elem's in-scope declarations with the
|
|
213
|
+
* reserved prefixes handled. NULL result = undeclared. */
|
|
214
|
+
static const char* elem_resolve_attr_prefix(LeptrisElement elem,
|
|
215
|
+
const char* prefix) {
|
|
216
|
+
if (!prefix || !prefix[0]) return NULL; /* no namespace */
|
|
217
|
+
if (strcmp(prefix, "xml") == 0) return LEPTRIS_XML_NS;
|
|
218
|
+
if (strcmp(prefix, "xmlns") == 0) return NULL; /* reserved */
|
|
219
|
+
return leptris_element_lookup_namespace(elem, prefix);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* The attribute's prefix as a NUL-terminated string, or NULL for a
|
|
223
|
+
* no-namespace attribute. Name-derived, immutable. */
|
|
224
|
+
LEPTRIS_API const char* leptris_attribute_prefix(LeptrisAttribute attr) {
|
|
225
|
+
if (!attr) return NULL;
|
|
226
|
+
const char* n = attr->name_view.data;
|
|
227
|
+
size_t nl = attr->name_view.length;
|
|
228
|
+
const char* colon = nl ? memchr(n, ':', nl) : NULL;
|
|
229
|
+
if (!colon) return NULL;
|
|
230
|
+
struct leptris_attr_ns_cache* c = attr_get_ns_cache(attr);
|
|
231
|
+
if (c && c->prefix) return c->prefix;
|
|
232
|
+
/* Not stamped (e.g. mutation-created before #542 setters run):
|
|
233
|
+
* derive on the fly via a bounded stack buffer is NOT possible
|
|
234
|
+
* (lifetime) — callers should treat NULL-cache as no prefix
|
|
235
|
+
* data; the element-level matchers below do their own split. */
|
|
236
|
+
return NULL;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/* The attribute's namespace URI resolved through the OWNER element's
|
|
240
|
+
* in-scope declarations. NULL = no namespace or undeclared prefix.
|
|
241
|
+
* Resolved per read (mutation-correct), O(depth) in the worst case. */
|
|
242
|
+
LEPTRIS_API const char* leptris_attribute_namespace_uri(LeptrisAttribute attr) {
|
|
243
|
+
if (!attr) return NULL;
|
|
244
|
+
struct leptris_attr_ns_cache* c = attr_get_ns_cache(attr);
|
|
245
|
+
if (!c || !c->owner_elem) return NULL;
|
|
246
|
+
const char* pfx = leptris_attribute_prefix(attr);
|
|
247
|
+
if (!pfx) return NULL;
|
|
248
|
+
return elem_resolve_attr_prefix(c->owner_elem, pfx);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/* Static empty-URI check: NULL or "" both mean no namespace. */
|
|
252
|
+
static int uri_is_none(const char* uri) {
|
|
253
|
+
return !uri || !uri[0];
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/* Find an attribute by EXPANDED name. uri NULL/"" matches only
|
|
257
|
+
* no-namespace attributes; otherwise the URI must match what the
|
|
258
|
+
* attribute's prefix resolves to (prefix-agnostic). Local names
|
|
259
|
+
* compare exactly. xmlns declarations are skipped defensively. */
|
|
260
|
+
static struct leptris_attribute* find_attr_expanded(
|
|
261
|
+
LeptrisElement elem, const char* uri, const char* local) {
|
|
262
|
+
size_t ll = strlen(local);
|
|
263
|
+
struct leptris_attribute* attr = leptris_element_get_first_attribute(elem);
|
|
264
|
+
/* No-namespace search: the 15-bit name-hash prefilter (TODO 172
|
|
265
|
+
* / S9, as in leptris_dom_attr_find). A hash+length+memcmp hit
|
|
266
|
+
* against a colon-free needle implies the attr name carries no
|
|
267
|
+
* colon, so the per-attr memchr is gone from the common path —
|
|
268
|
+
* value-of @name and attribute axes ride this (#682). */
|
|
269
|
+
uint16_t lh = uri_is_none(uri) ? attr_hash15(local, ll) : 0;
|
|
270
|
+
while (attr) {
|
|
271
|
+
const char* n = attr->name_view.data;
|
|
272
|
+
size_t nl = attr->name_view.length;
|
|
273
|
+
if (nl < ll) goto next;
|
|
274
|
+
const char* colon = nl ? memchr(n, ':', nl) : NULL;
|
|
275
|
+
if (uri_is_none(uri)) {
|
|
276
|
+
if (colon) goto next; /* namespaced */
|
|
277
|
+
if (attr_name_hash(attr) == lh &&
|
|
278
|
+
leptris_memeq_short(n, local, ll)) return attr;
|
|
279
|
+
} else {
|
|
280
|
+
if (!colon) goto next; /* no namespace */
|
|
281
|
+
size_t pl = (size_t)(colon - n);
|
|
282
|
+
if (nl - pl - 1 != ll || memcmp(colon + 1, local, ll) != 0)
|
|
283
|
+
goto next;
|
|
284
|
+
/* Prefix is xmlns? that's a declaration, not an attr. */
|
|
285
|
+
if (pl == 5 && memcmp(n, "xmlns", 5) == 0) goto next;
|
|
286
|
+
/* Resolve this attr's prefix through elem in scope. */
|
|
287
|
+
char pbuf[64];
|
|
288
|
+
const char* pfx;
|
|
289
|
+
struct leptris_attr_ns_cache* c = attr_get_ns_cache(attr);
|
|
290
|
+
if (c && c->prefix) {
|
|
291
|
+
pfx = c->prefix;
|
|
292
|
+
} else if (pl < sizeof(pbuf)) {
|
|
293
|
+
memcpy(pbuf, n, pl);
|
|
294
|
+
pbuf[pl] = '\0';
|
|
295
|
+
pfx = pbuf;
|
|
296
|
+
} else {
|
|
297
|
+
goto next;
|
|
298
|
+
}
|
|
299
|
+
const char* resolved = elem_resolve_attr_prefix(elem, pfx);
|
|
300
|
+
if (resolved && strcmp(resolved, uri) == 0) return attr;
|
|
301
|
+
}
|
|
302
|
+
next:
|
|
303
|
+
attr = leptris_attr_next(attr);
|
|
304
|
+
}
|
|
305
|
+
return NULL;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
LEPTRIS_API const char* leptris_element_attribute_ns(LeptrisElement elem,
|
|
309
|
+
const char* uri,
|
|
310
|
+
const char* local) {
|
|
311
|
+
if (!elem || !local) return NULL;
|
|
312
|
+
if (((LeptrisNode*)elem)->type != LEPTRIS_NODE_TYPE_ELEMENT) return NULL;
|
|
313
|
+
struct leptris_attribute* attr = find_attr_expanded(elem, uri, local);
|
|
314
|
+
if (!attr) return NULL;
|
|
315
|
+
if (attr_has_entities(attr)) {
|
|
316
|
+
LeptrisMemoryPool* pool = leptris_element_get_pool(elem);
|
|
317
|
+
LeptrisStringView raw_v = leptris_attr_value_sv(attr);
|
|
318
|
+
char* decoded = pool
|
|
319
|
+
? leptris_decode_entities_view(&raw_v, pool)
|
|
320
|
+
: NULL;
|
|
321
|
+
if (decoded) {
|
|
322
|
+
leptris_attr_value_set_heap(attr, leptris_sv_from_cstr(decoded));
|
|
323
|
+
attr_set_entities(attr, 0);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
if (leptris_attr_value_sv(attr).data && leptris_attr_value_sv(attr).length > 0)
|
|
327
|
+
return leptris_attr_value_sv(attr).data;
|
|
328
|
+
return ""; /* present-but-empty (see attribute_value_at) */
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
LEPTRIS_API int leptris_element_has_attribute_ns(LeptrisElement elem,
|
|
332
|
+
const char* uri,
|
|
333
|
+
const char* local) {
|
|
334
|
+
if (!elem || !local) return 0;
|
|
335
|
+
return find_attr_expanded(elem, uri, local) != NULL;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
LEPTRIS_API int leptris_element_has_attribute(LeptrisElement elem, const char* name) {
|
|
339
|
+
if (!elem || !name) return 0;
|
|
340
|
+
/* Same expanded-name semantics as leptris_element_attribute
|
|
341
|
+
* (#542) — delegated so both stay in lockstep. */
|
|
342
|
+
return leptris_element_attribute(elem, name) != NULL;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Get attribute value as integer (Public API)
|
|
347
|
+
*/
|
|
348
|
+
/* ---- typed-conversion cores (architecture review C) ----
|
|
349
|
+
*
|
|
350
|
+
* The four attribute numeric getters share one contract: isspace-
|
|
351
|
+
* trimmed whole-token numbers, base 10, partial parses rejected,
|
|
352
|
+
* NULL/empty falls through to the caller's default. The element_
|
|
353
|
+
* text_* getters are deliberately separate: their contracts differ
|
|
354
|
+
* (0x hex forms, no trailing-whitespace tolerance, empty-text bool
|
|
355
|
+
* is false) and unifying them would change behavior. */
|
|
356
|
+
static int attr_num_long(const char* s, long* out) {
|
|
357
|
+
if (!s || !*s) return 0;
|
|
358
|
+
while (isspace((unsigned char)*s)) s++;
|
|
359
|
+
char* end;
|
|
360
|
+
long v = strtol(s, &end, 10);
|
|
361
|
+
while (*end && isspace((unsigned char)*end)) end++;
|
|
362
|
+
if (*end != '\0') return 0;
|
|
363
|
+
*out = v;
|
|
364
|
+
return 1;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
static int attr_num_ulong(const char* s, unsigned long* out) {
|
|
368
|
+
if (!s || !*s) return 0;
|
|
369
|
+
while (isspace((unsigned char)*s)) s++;
|
|
370
|
+
char* end;
|
|
371
|
+
unsigned long v = strtoul(s, &end, 10);
|
|
372
|
+
while (*end && isspace((unsigned char)*end)) end++;
|
|
373
|
+
if (*end != '\0') return 0;
|
|
374
|
+
*out = v;
|
|
375
|
+
return 1;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
static int attr_num_double(const char* s, double* out) {
|
|
379
|
+
if (!s || !*s) return 0;
|
|
380
|
+
while (isspace((unsigned char)*s)) s++;
|
|
381
|
+
char* end;
|
|
382
|
+
double v = strtod(s, &end);
|
|
383
|
+
while (*end && isspace((unsigned char)*end)) end++;
|
|
384
|
+
if (*end != '\0') return 0;
|
|
385
|
+
*out = v;
|
|
386
|
+
return 1;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
static int attr_num_float(const char* s, float* out) {
|
|
390
|
+
if (!s || !*s) return 0;
|
|
391
|
+
while (isspace((unsigned char)*s)) s++;
|
|
392
|
+
char* end;
|
|
393
|
+
float v = strtof(s, &end);
|
|
394
|
+
while (*end && isspace((unsigned char)*end)) end++;
|
|
395
|
+
if (*end != '\0') return 0;
|
|
396
|
+
*out = v;
|
|
397
|
+
return 1;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* Get attribute value as integer (Public API)
|
|
402
|
+
*/
|
|
403
|
+
LEPTRIS_API int leptris_element_attribute_int(LeptrisElement elem, const char* name, int default_value) {
|
|
404
|
+
long v;
|
|
405
|
+
return attr_num_long(leptris_element_attribute(elem, name), &v) ? (int)v : default_value;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Get attribute value as unsigned integer (Public API)
|
|
410
|
+
*/
|
|
411
|
+
LEPTRIS_API unsigned int leptris_element_attribute_uint(LeptrisElement elem, const char* name, unsigned int default_value) {
|
|
412
|
+
unsigned long v;
|
|
413
|
+
return attr_num_ulong(leptris_element_attribute(elem, name), &v) ? (unsigned int)v : default_value;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Get attribute value as double (Public API)
|
|
418
|
+
*/
|
|
419
|
+
LEPTRIS_API double leptris_element_attribute_double(LeptrisElement elem, const char* name, double default_value) {
|
|
420
|
+
double v;
|
|
421
|
+
return attr_num_double(leptris_element_attribute(elem, name), &v) ? v : default_value;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Get attribute value as float (Public API)
|
|
426
|
+
*/
|
|
427
|
+
LEPTRIS_API float leptris_element_attribute_float(LeptrisElement elem, const char* name, float default_value) {
|
|
428
|
+
float v;
|
|
429
|
+
return attr_num_float(leptris_element_attribute(elem, name), &v) ? v : default_value;
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Get attribute value as boolean (Public API)
|
|
433
|
+
*/
|
|
434
|
+
LEPTRIS_API int leptris_element_attribute_bool(LeptrisElement elem, const char* name, int default_value) {
|
|
435
|
+
const char* value = leptris_element_attribute(elem, name);
|
|
436
|
+
if (!value || !*value) return default_value;
|
|
437
|
+
|
|
438
|
+
/* Case-insensitive comparison for true/false/yes/no/on/off/1/0 */
|
|
439
|
+
if (strcasecmp(value, "true") == 0 ||
|
|
440
|
+
strcasecmp(value, "yes") == 0 ||
|
|
441
|
+
strcasecmp(value, "on") == 0 ||
|
|
442
|
+
strcmp(value, "1") == 0) {
|
|
443
|
+
return 1;
|
|
444
|
+
}
|
|
445
|
+
if (strcasecmp(value, "false") == 0 ||
|
|
446
|
+
strcasecmp(value, "no") == 0 ||
|
|
447
|
+
strcasecmp(value, "off") == 0 ||
|
|
448
|
+
strcmp(value, "0") == 0) {
|
|
449
|
+
return 0;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
return default_value;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* Get attribute value as string with default (Public API)
|
|
457
|
+
*/
|
|
458
|
+
LEPTRIS_API const char* leptris_element_attribute_string(LeptrisElement elem, const char* name, const char* default_value) {
|
|
459
|
+
const char* value = leptris_element_attribute(elem, name);
|
|
460
|
+
return (value != NULL) ? value : default_value;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/* ============================================================================
|
|
464
|
+
* Attribute Setter Functions (Type-safe wrappers)
|
|
465
|
+
* ============================================================================ */
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* Set attribute value as double (Public API)
|
|
469
|
+
*/
|
|
470
|
+
LEPTRIS_API int leptris_element_set_attribute_double(LeptrisElement elem, const char* name, double value) {
|
|
471
|
+
if (!elem || !name) return LEPTRIS_ERROR_NULL_ARG;
|
|
472
|
+
|
|
473
|
+
/* Convert double to string with sufficient precision (17 significant digits for IEEE 754) */
|
|
474
|
+
char buffer[64];
|
|
475
|
+
snprintf(buffer, sizeof(buffer), "%.17g", value);
|
|
476
|
+
return leptris_element_set_attribute(elem, name, buffer);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* Set attribute value as float (Public API)
|
|
481
|
+
*/
|
|
482
|
+
LEPTRIS_API int leptris_element_set_attribute_float(LeptrisElement elem, const char* name, float value) {
|
|
483
|
+
if (!elem || !name) return LEPTRIS_ERROR_NULL_ARG;
|
|
484
|
+
|
|
485
|
+
/* Convert float to string */
|
|
486
|
+
char buffer[64];
|
|
487
|
+
snprintf(buffer, sizeof(buffer), "%g", value);
|
|
488
|
+
return leptris_element_set_attribute(elem, name, buffer);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
/**
|
|
492
|
+
* Set attribute value as boolean (Public API)
|
|
493
|
+
*/
|
|
494
|
+
LEPTRIS_API int leptris_element_set_attribute_bool(LeptrisElement elem, const char* name, int value) {
|
|
495
|
+
if (!elem || !name) return LEPTRIS_ERROR_NULL_ARG;
|
|
496
|
+
|
|
497
|
+
/* Convert boolean to string */
|
|
498
|
+
const char* bool_str = value ? "true" : "false";
|
|
499
|
+
return leptris_element_set_attribute(elem, name, bool_str);
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Set attribute value as integer (Public API)
|
|
504
|
+
*/
|
|
505
|
+
LEPTRIS_API int leptris_element_set_attribute_int(LeptrisElement elem, const char* name, int value) {
|
|
506
|
+
if (!elem || !name) return LEPTRIS_ERROR_NULL_ARG;
|
|
507
|
+
|
|
508
|
+
/* Convert int to string */
|
|
509
|
+
char buffer[32];
|
|
510
|
+
snprintf(buffer, sizeof(buffer), "%d", value);
|
|
511
|
+
return leptris_element_set_attribute(elem, name, buffer);
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* Set attribute value as unsigned integer (Public API)
|
|
516
|
+
*/
|
|
517
|
+
LEPTRIS_API int leptris_element_set_attribute_uint(LeptrisElement elem, const char* name, unsigned int value) {
|
|
518
|
+
if (!elem || !name) return LEPTRIS_ERROR_NULL_ARG;
|
|
519
|
+
|
|
520
|
+
/* Convert unsigned int to string */
|
|
521
|
+
char buffer[32];
|
|
522
|
+
snprintf(buffer, sizeof(buffer), "%u", value);
|
|
523
|
+
return leptris_element_set_attribute(elem, name, buffer);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* Get child element by index (Public API)
|
|
528
|
+
* Returns the index-th ELEMENT child (skips text, comments, etc.)
|
|
529
|
+
*
|
|
530
|
+
* Performance: O(index) — walks the linked list from first_child.
|
|
531
|
+
* For sequential iteration prefer leptris_element_first_child_any +
|
|
532
|
+
* leptris_element_next_sibling_any (O(1) per step).
|
|
533
|
+
*/
|
|
534
|
+
LEPTRIS_API LeptrisElement leptris_element_child(LeptrisElement elem, size_t index) {
|
|
535
|
+
if (!elem) return NULL;
|
|
536
|
+
if (index >= elem->child_count) return NULL;
|
|
537
|
+
|
|
538
|
+
LeptrisElement child = leptris_element_get_first_child(elem);
|
|
539
|
+
for (size_t i = 0; i < index && child != NULL; i++) {
|
|
540
|
+
child = leptris_element_get_next_sibling(child);
|
|
541
|
+
}
|
|
542
|
+
return child;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/**
|
|
546
|
+
* Get parent element (Public API)
|
|
547
|
+
*/
|
|
548
|
+
LEPTRIS_API LeptrisElement leptris_element_parent(LeptrisElement elem) {
|
|
549
|
+
if (!elem) return NULL;
|
|
550
|
+
|
|
551
|
+
/* Use compact accessor to get parent */
|
|
552
|
+
return leptris_element_get_parent(elem);
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* Get root element of document (Public API)
|
|
557
|
+
* Walks up the parent chain to find the element with no parent
|
|
558
|
+
*/
|
|
559
|
+
LEPTRIS_API LeptrisElement leptris_element_root(LeptrisElement elem) {
|
|
560
|
+
if (!elem) return NULL;
|
|
561
|
+
|
|
562
|
+
/* Walk up the parent chain until we find an element with no parent */
|
|
563
|
+
LeptrisElement current = elem;
|
|
564
|
+
LeptrisElement parent = leptris_element_get_parent(current);
|
|
565
|
+
while (parent) {
|
|
566
|
+
current = parent;
|
|
567
|
+
parent = leptris_element_get_parent(current);
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
return current;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* Get first child element regardless of name (Public API)
|
|
575
|
+
*/
|
|
576
|
+
LEPTRIS_API LeptrisElement leptris_element_first_child_any(LeptrisElement elem) {
|
|
577
|
+
if (!elem) return NULL;
|
|
578
|
+
|
|
579
|
+
/* Iterate through children until we find an element */
|
|
580
|
+
LeptrisNode* child = (LeptrisNode*)leptris_element_get_first_child(elem);
|
|
581
|
+
while (child) {
|
|
582
|
+
if (child->type == LEPTRIS_NODE_TYPE_ELEMENT) {
|
|
583
|
+
return (LeptrisElement)child;
|
|
584
|
+
}
|
|
585
|
+
child = leptris_node_get_next_sibling(child);
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
return NULL;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
/**
|
|
592
|
+
* Get last child element regardless of name (Public API)
|
|
593
|
+
*/
|
|
594
|
+
LEPTRIS_API LeptrisElement leptris_element_last_child_any(LeptrisElement elem) {
|
|
595
|
+
if (!elem) return NULL;
|
|
596
|
+
|
|
597
|
+
/* Iterate through children to find the last element */
|
|
598
|
+
LeptrisElement last_elem = NULL;
|
|
599
|
+
|
|
600
|
+
LeptrisNode* child = (LeptrisNode*)leptris_element_get_first_child(elem);
|
|
601
|
+
while (child) {
|
|
602
|
+
if (child->type == LEPTRIS_NODE_TYPE_ELEMENT) {
|
|
603
|
+
last_elem = (LeptrisElement)child;
|
|
604
|
+
}
|
|
605
|
+
child = leptris_node_get_next_sibling(child);
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
return last_elem;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
/**
|
|
612
|
+
* Get next sibling element regardless of name (Public API)
|
|
613
|
+
*/
|
|
614
|
+
LEPTRIS_API LeptrisElement leptris_element_next_sibling_any(LeptrisElement elem) {
|
|
615
|
+
if (!elem) return NULL;
|
|
616
|
+
|
|
617
|
+
/* Use compact accessor to get next sibling */
|
|
618
|
+
LeptrisNode* sibling = (LeptrisNode*)leptris_element_get_next_sibling(elem);
|
|
619
|
+
|
|
620
|
+
/* Keep traversing until we find an element (skip text/comment nodes) */
|
|
621
|
+
while (sibling) {
|
|
622
|
+
if (sibling->type == LEPTRIS_NODE_TYPE_ELEMENT) {
|
|
623
|
+
return (LeptrisElement)sibling;
|
|
624
|
+
}
|
|
625
|
+
sibling = leptris_node_get_next_sibling(sibling);
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
return NULL;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/**
|
|
632
|
+
* Get child elements in bulk (Public API)
|
|
633
|
+
*
|
|
634
|
+
* Fills out_children with up to max_count element children in
|
|
635
|
+
* document order, skipping interleaved text/comment/CDATA nodes —
|
|
636
|
+
* the same chain first_child_any/next_sibling_any walk, in one call.
|
|
637
|
+
* Size the array from leptris_element_child_count (which counts
|
|
638
|
+
* element children only).
|
|
639
|
+
*/
|
|
640
|
+
LEPTRIS_API size_t leptris_element_children(
|
|
641
|
+
LeptrisElement elem, LeptrisElement* out_children, size_t max_count) {
|
|
642
|
+
if (!elem || !out_children || max_count == 0) return 0;
|
|
643
|
+
|
|
644
|
+
size_t written = 0;
|
|
645
|
+
LeptrisNode* child = (LeptrisNode*)leptris_element_get_first_child(elem);
|
|
646
|
+
while (child && written < max_count) {
|
|
647
|
+
if (child->type == LEPTRIS_NODE_TYPE_ELEMENT) {
|
|
648
|
+
out_children[written++] = (LeptrisElement)child;
|
|
649
|
+
}
|
|
650
|
+
child = leptris_node_get_next_sibling(child);
|
|
651
|
+
}
|
|
652
|
+
return written;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
/* Issue #535 (3): node-level batch children — every child kind
|
|
656
|
+
* (elements, text, comments, CDATA, PIs) in one call, matching
|
|
657
|
+
* leptris_element_children's shape. Returns the number copied;
|
|
658
|
+
* size with leptris_node_child_count. */
|
|
659
|
+
LEPTRIS_API size_t leptris_node_children(LeptrisNodeRef parent,
|
|
660
|
+
LeptrisNodeRef* out_nodes,
|
|
661
|
+
size_t max_count) {
|
|
662
|
+
if (!parent) return 0;
|
|
663
|
+
|
|
664
|
+
/* Count-query mode (out == NULL): the TOTAL across every child
|
|
665
|
+
* kind — leptris_node_child_count counts elements only, so it
|
|
666
|
+
* cannot size a mixed array. */
|
|
667
|
+
size_t written = 0;
|
|
668
|
+
LeptrisNode* child = leptris_node_first_child_internal((LeptrisNode*)parent);
|
|
669
|
+
while (child) {
|
|
670
|
+
if (out_nodes && written < max_count) {
|
|
671
|
+
out_nodes[written] = (LeptrisNodeRef)child;
|
|
672
|
+
}
|
|
673
|
+
written++;
|
|
674
|
+
child = leptris_node_get_next_sibling(child);
|
|
675
|
+
}
|
|
676
|
+
return out_nodes ? ((written < max_count) ? written : max_count) : written;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
LEPTRIS_API size_t leptris_node_children_ex(LeptrisNodeRef parent,
|
|
680
|
+
LeptrisNodeRef* out_nodes,
|
|
681
|
+
LeptrisNodeKind* out_kinds,
|
|
682
|
+
size_t max_count) {
|
|
683
|
+
if (!parent) return 0;
|
|
684
|
+
|
|
685
|
+
size_t written = 0;
|
|
686
|
+
LeptrisNode* child = leptris_node_first_child_internal((LeptrisNode*)parent);
|
|
687
|
+
while (child) {
|
|
688
|
+
if (out_nodes && written < max_count) {
|
|
689
|
+
out_nodes[written] = (LeptrisNodeRef)child;
|
|
690
|
+
if (out_kinds)
|
|
691
|
+
out_kinds[written] = (LeptrisNodeKind)child->type;
|
|
692
|
+
}
|
|
693
|
+
written++;
|
|
694
|
+
child = leptris_node_get_next_sibling(child);
|
|
695
|
+
}
|
|
696
|
+
return out_nodes ? ((written < max_count) ? written : max_count) : written;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
/**
|
|
700
|
+
* Get previous sibling element regardless of name (Public API)
|
|
701
|
+
* NOTE: Compact mode doesn't have prev_sibling pointer, so we search from parent
|
|
702
|
+
*/
|
|
703
|
+
LEPTRIS_API LeptrisElement leptris_element_previous_sibling_any(LeptrisElement elem) {
|
|
704
|
+
if (!elem) return NULL;
|
|
705
|
+
|
|
706
|
+
/* Get parent */
|
|
707
|
+
LeptrisElement parent = leptris_element_get_parent(elem);
|
|
708
|
+
if (!parent) return NULL;
|
|
709
|
+
|
|
710
|
+
/* Find previous sibling by walking from parent's first child */
|
|
711
|
+
LeptrisNode* child = (LeptrisNode*)leptris_element_get_first_child(parent);
|
|
712
|
+
LeptrisElement prev = NULL;
|
|
713
|
+
|
|
714
|
+
while (child && child != (LeptrisNode*)elem) {
|
|
715
|
+
/* Only consider element nodes as previous siblings */
|
|
716
|
+
if (child->type == LEPTRIS_NODE_TYPE_ELEMENT) {
|
|
717
|
+
prev = (LeptrisElement)child;
|
|
718
|
+
}
|
|
719
|
+
child = leptris_node_get_next_sibling(child);
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
return prev;
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
/**
|
|
726
|
+
* Get first child element with specific name (Public API)
|
|
727
|
+
* If name is NULL, returns first child regardless of name
|
|
728
|
+
*/
|
|
729
|
+
LEPTRIS_API LeptrisElement leptris_element_first_child(LeptrisElement elem, const char* name) {
|
|
730
|
+
if (!elem) return NULL;
|
|
731
|
+
|
|
732
|
+
/* Get first child and check name if specified */
|
|
733
|
+
LeptrisElement child = leptris_element_get_first_child(elem);
|
|
734
|
+
if (!name) return child;
|
|
735
|
+
|
|
736
|
+
/* Find first child with matching name via hash pre-filter (TODO 159) */
|
|
737
|
+
uint16_t target_hash = leptris_name_hash_compute(name);
|
|
738
|
+
while (child) {
|
|
739
|
+
if (leptris_elem_name_is(child, name, target_hash)) {
|
|
740
|
+
return child;
|
|
741
|
+
}
|
|
742
|
+
child = leptris_element_get_next_sibling(child);
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
return NULL;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/**
|
|
749
|
+
* Get last child element with specific name (Public API)
|
|
750
|
+
* If name is NULL, returns last child regardless of name
|
|
751
|
+
*/
|
|
752
|
+
LEPTRIS_API LeptrisElement leptris_element_last_child(LeptrisElement elem, const char* name) {
|
|
753
|
+
if (!elem) return NULL;
|
|
754
|
+
|
|
755
|
+
/* Get last child */
|
|
756
|
+
LeptrisElement last = leptris_element_get_last_child(elem);
|
|
757
|
+
if (!name || !last) return last;
|
|
758
|
+
|
|
759
|
+
/* Walk backwards from last child to find one with matching name */
|
|
760
|
+
/* Since we don't have prev_sibling, we need to walk from first child */
|
|
761
|
+
LeptrisElement found = NULL;
|
|
762
|
+
LeptrisElement child = leptris_element_get_first_child(elem);
|
|
763
|
+
while (child) {
|
|
764
|
+
const char* child_name = leptris_element_name(child);
|
|
765
|
+
if (child_name && strcmp(child_name, name) == 0) {
|
|
766
|
+
found = child; /* Keep updating to get the last one */
|
|
767
|
+
}
|
|
768
|
+
child = leptris_element_get_next_sibling(child);
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
return found;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
/**
|
|
775
|
+
* Get next sibling element with specific name (Public API)
|
|
776
|
+
* If name is NULL, returns next sibling regardless of name
|
|
777
|
+
*/
|
|
778
|
+
LEPTRIS_API LeptrisElement leptris_element_next_sibling(LeptrisElement elem, const char* name) {
|
|
779
|
+
if (!elem) return NULL;
|
|
780
|
+
|
|
781
|
+
/* Get next sibling */
|
|
782
|
+
LeptrisElement sibling = leptris_element_get_next_sibling(elem);
|
|
783
|
+
if (!name) return sibling;
|
|
784
|
+
|
|
785
|
+
/* Find next sibling with matching name */
|
|
786
|
+
while (sibling) {
|
|
787
|
+
const char* sibling_name = leptris_element_name(sibling);
|
|
788
|
+
if (sibling_name && strcmp(sibling_name, name) == 0) {
|
|
789
|
+
return sibling;
|
|
790
|
+
}
|
|
791
|
+
sibling = leptris_element_get_next_sibling(sibling);
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
return NULL;
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* Get previous sibling element with specific name (Public API)
|
|
799
|
+
* If name is NULL, returns previous sibling regardless of name
|
|
800
|
+
*/
|
|
801
|
+
LEPTRIS_API LeptrisElement leptris_element_previous_sibling(LeptrisElement elem, const char* name) {
|
|
802
|
+
if (!elem) return NULL;
|
|
803
|
+
|
|
804
|
+
/* Get parent */
|
|
805
|
+
LeptrisElement parent = leptris_element_get_parent(elem);
|
|
806
|
+
if (!parent) return NULL;
|
|
807
|
+
|
|
808
|
+
/* Find previous sibling by walking from parent's first child */
|
|
809
|
+
LeptrisElement child = leptris_element_get_first_child(parent);
|
|
810
|
+
LeptrisElement prev = NULL;
|
|
811
|
+
LeptrisElement found = NULL;
|
|
812
|
+
|
|
813
|
+
while (child && child != elem) {
|
|
814
|
+
if (!name) {
|
|
815
|
+
prev = child;
|
|
816
|
+
} else {
|
|
817
|
+
const char* child_name = leptris_element_name(child);
|
|
818
|
+
if (child_name && strcmp(child_name, name) == 0) {
|
|
819
|
+
found = child; /* Keep updating to get the most recent matching one */
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
child = leptris_element_get_next_sibling(child);
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
return name ? found : prev;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
/**
|
|
829
|
+
* Find child element by name (Public API)
|
|
830
|
+
* Searches all children for one with matching name
|
|
831
|
+
*/
|
|
832
|
+
LEPTRIS_API LeptrisElement leptris_element_find_child(LeptrisElement elem, const char* name) {
|
|
833
|
+
if (!elem || !name) return NULL;
|
|
834
|
+
|
|
835
|
+
/* Walk all children to find one with matching name */
|
|
836
|
+
LeptrisElement child = leptris_element_get_first_child(elem);
|
|
837
|
+
while (child) {
|
|
838
|
+
const char* child_name = leptris_element_name(child);
|
|
839
|
+
if (child_name && strcmp(child_name, name) == 0) {
|
|
840
|
+
return child;
|
|
841
|
+
}
|
|
842
|
+
child = leptris_element_get_next_sibling(child);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
return NULL;
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
/**
|
|
849
|
+
* Find child element by name and attribute value (Public API)
|
|
850
|
+
* Searches all children for one with matching name and attribute value
|
|
851
|
+
*/
|
|
852
|
+
LEPTRIS_API LeptrisElement leptris_element_find_child_by_attr(LeptrisElement elem,
|
|
853
|
+
const char* child_name,
|
|
854
|
+
const char* attr_name,
|
|
855
|
+
const char* attr_value) {
|
|
856
|
+
if (!elem || !attr_name || !attr_value) return NULL;
|
|
857
|
+
|
|
858
|
+
/* Walk all children to find one with matching name and attribute */
|
|
859
|
+
LeptrisElement child = leptris_element_get_first_child(elem);
|
|
860
|
+
while (child) {
|
|
861
|
+
/* If child_name is NULL, match any child. Otherwise check name matches. */
|
|
862
|
+
int name_matches = (child_name == NULL);
|
|
863
|
+
if (!name_matches) {
|
|
864
|
+
const char* child_elem_name = leptris_element_name(child);
|
|
865
|
+
name_matches = (child_elem_name && strcmp(child_elem_name, child_name) == 0);
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
if (name_matches) {
|
|
869
|
+
/* Child has matching name (or any name if child_name is NULL), check attribute */
|
|
870
|
+
const char* attr_val = leptris_element_attribute(child, attr_name);
|
|
871
|
+
if (attr_val && strcmp(attr_val, attr_value) == 0) {
|
|
872
|
+
return child;
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
child = leptris_element_get_next_sibling(child);
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
return NULL;
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
/* ============================================================================
|
|
882
|
+
* Text Content Conversion Functions (Public API)
|
|
883
|
+
* ============================================================================ */
|
|
884
|
+
|
|
885
|
+
/**
|
|
886
|
+
* Get element text content as integer (Public API)
|
|
887
|
+
*/
|
|
888
|
+
LEPTRIS_API int leptris_element_text_int(LeptrisElement elem, int default_value) {
|
|
889
|
+
const char* text = leptris_element_text(elem);
|
|
890
|
+
if (!text || !text[0]) return default_value;
|
|
891
|
+
|
|
892
|
+
/* Skip leading whitespace */
|
|
893
|
+
while (*text == ' ' || *text == '\t' || *text == '\n' || *text == '\r') {
|
|
894
|
+
text++;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
/* Check for hex prefix (0x or 0X) */
|
|
898
|
+
int is_hex = 0;
|
|
899
|
+
int is_negative = 0;
|
|
900
|
+
|
|
901
|
+
if (*text == '-') {
|
|
902
|
+
is_negative = 1;
|
|
903
|
+
text++;
|
|
904
|
+
/* Check for whitespace immediately after minus sign (invalid) */
|
|
905
|
+
if (*text == ' ' || *text == '\t' || *text == '\n' || *text == '\r') {
|
|
906
|
+
return default_value;
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
if (text[0] == '0' && (text[1] == 'x' || text[1] == 'X')) {
|
|
911
|
+
is_hex = 1;
|
|
912
|
+
text += 2;
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
/* Parse the number */
|
|
916
|
+
char* endptr;
|
|
917
|
+
long value;
|
|
918
|
+
if (is_hex) {
|
|
919
|
+
value = strtol(text, &endptr, 16);
|
|
920
|
+
} else {
|
|
921
|
+
/* Use base 10 for decimal (no octal support) */
|
|
922
|
+
value = strtol(text, &endptr, 10);
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
/* Check if entire string was consumed */
|
|
926
|
+
if (endptr == text || *endptr != '\0') {
|
|
927
|
+
return default_value;
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
return is_negative ? -(int)value : (int)value;
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
/**
|
|
934
|
+
* Get element text content as unsigned integer (Public API)
|
|
935
|
+
*/
|
|
936
|
+
LEPTRIS_API unsigned int leptris_element_text_uint(LeptrisElement elem, unsigned int default_value) {
|
|
937
|
+
const char* text = leptris_element_text(elem);
|
|
938
|
+
if (!text || !text[0]) return default_value;
|
|
939
|
+
|
|
940
|
+
/* Skip leading whitespace */
|
|
941
|
+
while (*text == ' ' || *text == '\t' || *text == '\n' || *text == '\r') {
|
|
942
|
+
text++;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
/* Check for hex prefix (0x or 0X) */
|
|
946
|
+
int is_hex = 0;
|
|
947
|
+
|
|
948
|
+
if (text[0] == '0' && (text[1] == 'x' || text[1] == 'X')) {
|
|
949
|
+
is_hex = 1;
|
|
950
|
+
text += 2;
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
/* Parse the number */
|
|
954
|
+
char* endptr;
|
|
955
|
+
unsigned long value;
|
|
956
|
+
if (is_hex) {
|
|
957
|
+
value = strtoul(text, &endptr, 16);
|
|
958
|
+
} else {
|
|
959
|
+
/* Use base 10 for decimal (no octal support) */
|
|
960
|
+
value = strtoul(text, &endptr, 10);
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
/* Check if entire string was consumed */
|
|
964
|
+
if (endptr == text || *endptr != '\0') {
|
|
965
|
+
return default_value;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
return (unsigned int)value;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
/**
|
|
972
|
+
* Get element text content as double (Public API)
|
|
973
|
+
*/
|
|
974
|
+
LEPTRIS_API double leptris_element_text_double(LeptrisElement elem, double default_value) {
|
|
975
|
+
const char* text = leptris_element_text(elem);
|
|
976
|
+
if (!text || !text[0]) return default_value;
|
|
977
|
+
|
|
978
|
+
/* Try to parse as double */
|
|
979
|
+
char* endptr;
|
|
980
|
+
double value = strtod(text, &endptr);
|
|
981
|
+
|
|
982
|
+
/* Check if entire string was consumed */
|
|
983
|
+
if (endptr == text || *endptr != '\0') {
|
|
984
|
+
return default_value;
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
return value;
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
/**
|
|
991
|
+
* Get element text content as float (Public API)
|
|
992
|
+
*/
|
|
993
|
+
LEPTRIS_API float leptris_element_text_float(LeptrisElement elem, float default_value) {
|
|
994
|
+
const char* text = leptris_element_text(elem);
|
|
995
|
+
if (!text || !text[0]) return default_value;
|
|
996
|
+
|
|
997
|
+
/* Try to parse as float */
|
|
998
|
+
char* endptr;
|
|
999
|
+
float value = strtof(text, &endptr);
|
|
1000
|
+
|
|
1001
|
+
/* Check if entire string was consumed */
|
|
1002
|
+
if (endptr == text || *endptr != '\0') {
|
|
1003
|
+
return default_value;
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
return value;
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
/**
|
|
1010
|
+
* Get element text content as boolean (Public API)
|
|
1011
|
+
*/
|
|
1012
|
+
LEPTRIS_API int leptris_element_text_bool(LeptrisElement elem, int default_value) {
|
|
1013
|
+
const char* text = leptris_element_text(elem);
|
|
1014
|
+
if (!text || !text[0]) return 0; /* Empty string is false */
|
|
1015
|
+
|
|
1016
|
+
/* Skip leading whitespace */
|
|
1017
|
+
while (*text == ' ' || *text == '\t' || *text == '\n' || *text == '\r') {
|
|
1018
|
+
text++;
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
/* Skip trailing whitespace */
|
|
1022
|
+
size_t len = strlen(text);
|
|
1023
|
+
while (len > 0 && (text[len-1] == ' ' || text[len-1] == '\t' || text[len-1] == '\n' || text[len-1] == '\r')) {
|
|
1024
|
+
len--;
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
/* Case-insensitive comparison for various false values */
|
|
1028
|
+
if ((len == 5 && strncasecmp(text, "false", 5) == 0) ||
|
|
1029
|
+
(len == 2 && strncasecmp(text, "no", 2) == 0) ||
|
|
1030
|
+
(len == 3 && strncasecmp(text, "off", 3) == 0) ||
|
|
1031
|
+
(len == 1 && text[0] == '0')) {
|
|
1032
|
+
return 0;
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
/* Case-insensitive comparison for various true values */
|
|
1036
|
+
if ((len == 4 && strncasecmp(text, "true", 4) == 0) ||
|
|
1037
|
+
(len == 3 && strncasecmp(text, "yes", 3) == 0) ||
|
|
1038
|
+
(len == 2 && strncasecmp(text, "on", 2) == 0) ||
|
|
1039
|
+
(len == 1 && text[0] == '1')) {
|
|
1040
|
+
return 1;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
/* Any non-empty text that's not explicitly false is true */
|
|
1044
|
+
return len > 0 ? 1 : 0;
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
/* ============================================================================
|
|
1048
|
+
* Namespace Operations (Public API)
|
|
1049
|
+
* ============================================================================ */
|
|
1050
|
+
|
|
1051
|
+
/**
|
|
1052
|
+
* Get element's active namespace URI
|
|
1053
|
+
* In compact mode, namespace is stored inline in the element.
|
|
1054
|
+
*/
|
|
1055
|
+
LEPTRIS_API LeptrisNamespace leptris_element_namespace(LeptrisElement elem) {
|
|
1056
|
+
if (!elem) return NULL;
|
|
1057
|
+
|
|
1058
|
+
/* In compact mode, namespace_uri is cached from namespace_uri_view */
|
|
1059
|
+
/* Trigger lazy conversion if needed */
|
|
1060
|
+
return leptris_element_get_namespace_uri(elem);
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
LEPTRIS_API void leptris_element_expanded_name(LeptrisElement elem,
|
|
1064
|
+
const char** local_name,
|
|
1065
|
+
const char** prefix,
|
|
1066
|
+
const char** namespace_uri) {
|
|
1067
|
+
if (local_name) *local_name = elem ? leptris_element_get_name(elem) : NULL;
|
|
1068
|
+
if (prefix) *prefix = elem ? leptris_element_get_prefix(elem) : NULL;
|
|
1069
|
+
if (namespace_uri)
|
|
1070
|
+
*namespace_uri = elem ? leptris_element_get_namespace_uri(elem) : NULL;
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
LEPTRIS_API const char* leptris_element_prefix(LeptrisElement elem) {
|
|
1074
|
+
/* leptris_namespace_prefix(LeptrisNamespace) cannot answer this:
|
|
1075
|
+
* in the compact architecture the prefix lives on the ELEMENT,
|
|
1076
|
+
* not on the URI-string namespace handle. */
|
|
1077
|
+
return leptris_element_get_prefix(elem);
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
/**
|
|
1081
|
+
* Get namespace URI from namespace handle
|
|
1082
|
+
* In compact mode, LeptrisNamespace is the URI string itself.
|
|
1083
|
+
*/
|
|
1084
|
+
LEPTRIS_API const char* leptris_namespace_uri(LeptrisNamespace ns) {
|
|
1085
|
+
/* In compact mode, LeptrisNamespace IS the URI string */
|
|
1086
|
+
return ns;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
/**
|
|
1090
|
+
* Get namespace prefix from namespace handle
|
|
1091
|
+
* In compact mode, namespaces are inline, so this returns NULL.
|
|
1092
|
+
* Use leptris_element_get_prefix() to get an element's prefix.
|
|
1093
|
+
*/
|
|
1094
|
+
LEPTRIS_API const char* leptris_namespace_prefix(LeptrisNamespace ns) {
|
|
1095
|
+
/* In compact mode, prefix information is stored per-element */
|
|
1096
|
+
/* Use leptris_element_get_prefix() instead */
|
|
1097
|
+
(void)ns; /* Unused */
|
|
1098
|
+
return NULL;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
/**
|
|
1102
|
+
* Resolve namespace prefix with inheritance.
|
|
1103
|
+
* Issue #222: previously this only checked the element's OWN prefix
|
|
1104
|
+
* field (e.g. "foo" in <foo:child>) and returned the element's
|
|
1105
|
+
* namespace_uri — which was rarely what callers wanted and ignored
|
|
1106
|
+
* the xmlns:prefix declarations entirely. Now delegates to
|
|
1107
|
+
* leptris_element_lookup_namespace which walks the element's
|
|
1108
|
+
* namespace-declaration list and recurses up the tree. */
|
|
1109
|
+
LEPTRIS_API const char* leptris_element_namespace_for_prefix(LeptrisElement elem, const char* prefix) {
|
|
1110
|
+
if (!elem) return NULL;
|
|
1111
|
+
return leptris_element_lookup_namespace(elem, prefix);
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
|
|
1115
|
+
|
|
1116
|
+
/**
|
|
1117
|
+
* Get hash value of element (Public API)
|
|
1118
|
+
* Returns a hash value based on the element's memory address
|
|
1119
|
+
*/
|
|
1120
|
+
LEPTRIS_API size_t leptris_element_hash_value(LeptrisElement elem) {
|
|
1121
|
+
if (!elem) return 0;
|
|
1122
|
+
|
|
1123
|
+
/* Simple hash based on pointer address */
|
|
1124
|
+
/* This works because elements are pool-allocated and stable */
|
|
1125
|
+
return (size_t)elem;
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
/* ============================================================================
|
|
1129
|
+
* FFI Helpers: indexed attribute and namespace access (TODO 138)
|
|
1130
|
+
*
|
|
1131
|
+
* O(n) walk over the attribute linked list. Nokogiri and libxml2 do
|
|
1132
|
+
* the same. The Ruby binding caches results.
|
|
1133
|
+
* ============================================================================ */
|
|
1134
|
+
|
|
1135
|
+
LEPTRIS_API const char* leptris_element_attribute_name_at(LeptrisElement elem, size_t index) {
|
|
1136
|
+
struct leptris_attribute* attr = leptris_element_get_first_attribute(elem);
|
|
1137
|
+
size_t i = 0;
|
|
1138
|
+
while (attr) {
|
|
1139
|
+
if (i == index) {
|
|
1140
|
+
if (attr->name_view.data && attr->name_view.length > 0) {
|
|
1141
|
+
return attr->name_view.data;
|
|
1142
|
+
}
|
|
1143
|
+
return NULL;
|
|
1144
|
+
}
|
|
1145
|
+
i++;
|
|
1146
|
+
attr = leptris_attr_next(attr);
|
|
1147
|
+
}
|
|
1148
|
+
return NULL;
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
LEPTRIS_API const char* leptris_element_attribute_value_at(LeptrisElement elem, size_t index) {
|
|
1152
|
+
if (!elem) return NULL;
|
|
1153
|
+
struct leptris_attribute* attr = leptris_element_get_first_attribute(elem);
|
|
1154
|
+
size_t i = 0;
|
|
1155
|
+
while (attr) {
|
|
1156
|
+
if (i == index) {
|
|
1157
|
+
if (attr_has_entities(attr)) {
|
|
1158
|
+
LeptrisMemoryPool* pool = leptris_element_get_pool(elem);
|
|
1159
|
+
if (pool) {
|
|
1160
|
+
LeptrisStringView rv_ = leptris_attr_value_sv(attr);
|
|
1161
|
+
char* decoded = leptris_decode_entities_view(&rv_, pool);
|
|
1162
|
+
if (decoded) {
|
|
1163
|
+
leptris_attr_value_set_heap(attr, leptris_sv_from_cstr(decoded));
|
|
1164
|
+
attr_set_entities(attr, 0);
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
if (leptris_attr_value_sv(attr).data &&
|
|
1169
|
+
leptris_attr_value_sv(attr).length > 0) {
|
|
1170
|
+
return leptris_attr_value_sv(attr).data;
|
|
1171
|
+
}
|
|
1172
|
+
/* Present-but-empty value: a real empty string, not
|
|
1173
|
+
* "no attribute" (issue: eg:bar="" vanished in XSLT
|
|
1174
|
+
* attribute copies). */
|
|
1175
|
+
return "";
|
|
1176
|
+
}
|
|
1177
|
+
i++;
|
|
1178
|
+
attr = leptris_attr_next(attr);
|
|
1179
|
+
}
|
|
1180
|
+
return NULL;
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
LEPTRIS_API size_t leptris_element_attribute_count(LeptrisElement elem) {
|
|
1184
|
+
if (!elem) return 0;
|
|
1185
|
+
return elem->attr_count;
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
/* Handle-based attribute iteration (TODO.remaining/06). The _at
|
|
1189
|
+
* accessors above re-walk the list from the head per call — index
|
|
1190
|
+
* iteration is O(n^2); the handle pair is O(n) total and gives
|
|
1191
|
+
* bindings a stable object to carry between calls. */
|
|
1192
|
+
LEPTRIS_API LeptrisAttribute leptris_element_first_attribute(LeptrisElement elem) {
|
|
1193
|
+
return leptris_element_get_first_attribute(elem);
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
LEPTRIS_API LeptrisAttribute leptris_attribute_next(LeptrisAttribute attr) {
|
|
1197
|
+
return attr ? leptris_attr_next(attr) : NULL;
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
LEPTRIS_API const char* leptris_attribute_get_name(LeptrisAttribute attr) {
|
|
1201
|
+
return attr ? attr_cname(attr) : "";
|
|
1202
|
+
}
|
|
1203
|
+
|
|
1204
|
+
LEPTRIS_API const char* leptris_attribute_get_value(LeptrisElement elem, LeptrisAttribute attr) {
|
|
1205
|
+
if (!attr) return "";
|
|
1206
|
+
if (attr_has_entities(attr)) {
|
|
1207
|
+
LeptrisMemoryPool* pool = leptris_element_get_pool(elem);
|
|
1208
|
+
if (pool) {
|
|
1209
|
+
LeptrisStringView rv_ = leptris_attr_value_sv(attr);
|
|
1210
|
+
char* decoded = leptris_decode_entities_view(&rv_, pool);
|
|
1211
|
+
if (decoded) {
|
|
1212
|
+
leptris_attr_value_set_heap(attr, leptris_sv_from_cstr(decoded));
|
|
1213
|
+
attr_set_entities(attr, 0);
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
return attr_cvalue(attr);
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
LEPTRIS_API size_t leptris_element_namespace_count(LeptrisElement elem) {
|
|
1221
|
+
if (!elem) return 0;
|
|
1222
|
+
size_t count = 0;
|
|
1223
|
+
/* The parser strips xmlns declarations from the regular attribute
|
|
1224
|
+
* list and moves them to elem->namespaces. Walk THAT list. */
|
|
1225
|
+
for (struct leptris_namespace* ns = leptris_elem_namespaces(elem); ns; ns = ns->next) {
|
|
1226
|
+
count++;
|
|
1227
|
+
}
|
|
1228
|
+
/* Backward compat: also count xmlns attributes in case any caller
|
|
1229
|
+
* added them via leptris_element_add_attribute instead of the
|
|
1230
|
+
* namespace API. This is the original implementation. */
|
|
1231
|
+
struct leptris_attribute* attr = leptris_element_get_first_attribute(elem);
|
|
1232
|
+
while (attr) {
|
|
1233
|
+
LeptrisStringView nv = attr->name_view;
|
|
1234
|
+
if (nv.length >= 5 && nv.data &&
|
|
1235
|
+
nv.data[0] == 'x' && nv.data[1] == 'm' &&
|
|
1236
|
+
nv.data[2] == 'l' && nv.data[3] == 'n' &&
|
|
1237
|
+
nv.data[4] == 's') {
|
|
1238
|
+
count++;
|
|
1239
|
+
}
|
|
1240
|
+
attr = leptris_attr_next(attr);
|
|
1241
|
+
}
|
|
1242
|
+
return count;
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
/* Walk the union of elem->namespaces and any xmlns:* attributes to
|
|
1246
|
+
* the N-th declaration. The parser uses elem->namespaces; legacy
|
|
1247
|
+
* callers may have used the attribute list. Both are walked in order. */
|
|
1248
|
+
static int element_namespace_decl_at(LeptrisElement elem, size_t index,
|
|
1249
|
+
const char** out_prefix,
|
|
1250
|
+
const char** out_uri) {
|
|
1251
|
+
if (!elem) return 0;
|
|
1252
|
+
size_t i = 0;
|
|
1253
|
+
for (struct leptris_namespace* ns = leptris_elem_namespaces(elem); ns; ns = ns->next) {
|
|
1254
|
+
if (i == index) {
|
|
1255
|
+
*out_prefix = ns->prefix;
|
|
1256
|
+
*out_uri = ns->uri;
|
|
1257
|
+
return 1;
|
|
1258
|
+
}
|
|
1259
|
+
i++;
|
|
1260
|
+
}
|
|
1261
|
+
struct leptris_attribute* attr = leptris_element_get_first_attribute(elem);
|
|
1262
|
+
while (attr) {
|
|
1263
|
+
LeptrisStringView nv = attr->name_view;
|
|
1264
|
+
if (nv.length >= 5 && nv.data &&
|
|
1265
|
+
nv.data[0] == 'x' && nv.data[1] == 'm' &&
|
|
1266
|
+
nv.data[2] == 'l' && nv.data[3] == 'n' &&
|
|
1267
|
+
nv.data[4] == 's') {
|
|
1268
|
+
if (i == index) {
|
|
1269
|
+
/* View data is NUL-terminated and document-lifetime —
|
|
1270
|
+
* no materialization (TODO 184 round 3). */
|
|
1271
|
+
const char* full = (const char*)nv.data;
|
|
1272
|
+
if (full && nv.length > 5) {
|
|
1273
|
+
*out_prefix = full + 6;
|
|
1274
|
+
} else {
|
|
1275
|
+
*out_prefix = NULL;
|
|
1276
|
+
}
|
|
1277
|
+
*out_uri = attr_cvalue(attr);
|
|
1278
|
+
return 1;
|
|
1279
|
+
}
|
|
1280
|
+
i++;
|
|
1281
|
+
}
|
|
1282
|
+
attr = leptris_attr_next(attr);
|
|
1283
|
+
}
|
|
1284
|
+
return 0;
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
LEPTRIS_API const char* leptris_element_namespace_decl_prefix(
|
|
1288
|
+
LeptrisElement elem, size_t index) {
|
|
1289
|
+
const char* prefix = NULL;
|
|
1290
|
+
const char* uri = NULL;
|
|
1291
|
+
if (!element_namespace_decl_at(elem, index, &prefix, &uri)) return NULL;
|
|
1292
|
+
return prefix;
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
LEPTRIS_API const char* leptris_element_namespace_decl_uri(
|
|
1296
|
+
LeptrisElement elem, size_t index) {
|
|
1297
|
+
const char* prefix = NULL;
|
|
1298
|
+
const char* uri = NULL;
|
|
1299
|
+
if (!element_namespace_decl_at(elem, index, &prefix, &uri)) return NULL;
|
|
1300
|
+
return uri;
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
/* ============================================================================
|
|
1304
|
+
* Namespace mutation (issue #186).
|
|
1305
|
+
*
|
|
1306
|
+
* Three public entry points wrap the existing internal namespace
|
|
1307
|
+
* list. The internal list lives on elem->namespaces; the parser
|
|
1308
|
+
* populates it during parse. These mutators let callers add/remove
|
|
1309
|
+
* declarations programmatically.
|
|
1310
|
+
* ============================================================================ */
|
|
1311
|
+
|
|
1312
|
+
LEPTRIS_API LeptrisStatus leptris_element_add_namespace_definition(
|
|
1313
|
+
LeptrisElement elem, const char* prefix, const char* href) {
|
|
1314
|
+
if (!elem || !href) return LEPTRIS_ERROR_NULL_ARG;
|
|
1315
|
+
leptris_document_ensure_promoted(leptris_element_get_document(elem));
|
|
1316
|
+
|
|
1317
|
+
/* Normalize empty-string prefix to NULL (default ns). */
|
|
1318
|
+
if (prefix && !*prefix) prefix = NULL;
|
|
1319
|
+
|
|
1320
|
+
LeptrisMemoryPool* pool = leptris_element_get_pool(elem);
|
|
1321
|
+
struct leptris_namespace* ns;
|
|
1322
|
+
if (pool) {
|
|
1323
|
+
ns = leptris_namespace_new_pooled(prefix, href, pool);
|
|
1324
|
+
} else {
|
|
1325
|
+
/* No pool — fall back to heap-allocating the ns struct + copies. */
|
|
1326
|
+
ns = (struct leptris_namespace*)malloc(sizeof(*ns));
|
|
1327
|
+
if (!ns) return LEPTRIS_ERROR_MEMORY;
|
|
1328
|
+
ns->prefix = prefix ? strdup(prefix) : NULL;
|
|
1329
|
+
ns->uri = strdup(href);
|
|
1330
|
+
ns->next = NULL;
|
|
1331
|
+
if (!ns->uri || (prefix && !ns->prefix)) {
|
|
1332
|
+
free(ns->prefix);
|
|
1333
|
+
free(ns->uri);
|
|
1334
|
+
free(ns);
|
|
1335
|
+
return LEPTRIS_ERROR_MEMORY;
|
|
1336
|
+
}
|
|
1337
|
+
}
|
|
1338
|
+
if (!ns) return LEPTRIS_ERROR_MEMORY;
|
|
1339
|
+
|
|
1340
|
+
/* #525: a declaration exists — unprefixed XPath name tests
|
|
1341
|
+
* must consult the resolver from here on. */
|
|
1342
|
+
{
|
|
1343
|
+
struct leptris_document* d = leptris_element_get_document(elem);
|
|
1344
|
+
if (d) d->has_namespaces = 1;
|
|
1345
|
+
}
|
|
1346
|
+
leptris_element_add_namespace(elem, ns);
|
|
1347
|
+
return LEPTRIS_OK;
|
|
1348
|
+
}
|
|
1349
|
+
|
|
1350
|
+
LEPTRIS_API LeptrisStatus leptris_element_set_default_namespace(
|
|
1351
|
+
LeptrisElement elem, const char* href) {
|
|
1352
|
+
return leptris_element_add_namespace_definition(elem, NULL, href);
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
/* #817: the namespace-setter counterpart of
|
|
1356
|
+
* leptris_element_namespace (Nokogiri node.namespace= parity).
|
|
1357
|
+
*
|
|
1358
|
+
* NULL/"" detaches: the resolved link and the name's prefix slot
|
|
1359
|
+
* clear, and an xmlns="" UNDECLARATION is added so an in-scope
|
|
1360
|
+
* default namespace cannot capture the now-unqualified name. A
|
|
1361
|
+
* non-empty URI rebinds to an IN-SCOPE declaration carrying that
|
|
1362
|
+
* URI (the prefix is adopted); a URI with no in-scope declaration
|
|
1363
|
+
* is rejected — this API does not invent declarations (call
|
|
1364
|
+
* add_namespace_definition first).
|
|
1365
|
+
*/
|
|
1366
|
+
LEPTRIS_API LeptrisStatus leptris_element_set_namespace(
|
|
1367
|
+
LeptrisElement elem, const char* uri) {
|
|
1368
|
+
if (!elem) return LEPTRIS_ERROR_NULL_ARG;
|
|
1369
|
+
LeptrisMemoryPool* pool = leptris_element_get_pool(elem);
|
|
1370
|
+
if (!pool) return LEPTRIS_ERROR_INVALID_ARG;
|
|
1371
|
+
|
|
1372
|
+
if (!uri || !*uri) {
|
|
1373
|
+
leptris_elem_set_prefix(elem, NULL, pool);
|
|
1374
|
+
leptris_elem_set_ns_uri(elem, NULL, pool);
|
|
1375
|
+
/* #1040: the xmlns="" undeclaration blocks an in-scope
|
|
1376
|
+
* DEFAULT namespace from recapturing the now-unqualified
|
|
1377
|
+
* name. When no non-empty default declaration is in scope
|
|
1378
|
+
* (own chain included) there is nothing to block — adding
|
|
1379
|
+
* one anyway lingers in the nsDef chain and serializes as
|
|
1380
|
+
* a redundant xmlns="". */
|
|
1381
|
+
int block_needed = 0;
|
|
1382
|
+
for (LeptrisElement a = elem; a && !block_needed;
|
|
1383
|
+
a = (LeptrisElement)leptris_node_parent((LeptrisNodeRef)a)) {
|
|
1384
|
+
for (int i = 0;; i++) {
|
|
1385
|
+
const char* p = leptris_element_namespace_decl_prefix(a, i);
|
|
1386
|
+
const char* u = leptris_element_namespace_decl_uri(a, i);
|
|
1387
|
+
if (!u) break;
|
|
1388
|
+
if ((!p || !*p) && *u) { block_needed = 1; break; }
|
|
1389
|
+
}
|
|
1390
|
+
}
|
|
1391
|
+
LeptrisStatus rc = LEPTRIS_OK;
|
|
1392
|
+
if (block_needed)
|
|
1393
|
+
rc = leptris_element_add_namespace_definition(elem, NULL, "");
|
|
1394
|
+
if (rc == LEPTRIS_OK)
|
|
1395
|
+
leptris_node_increment_version(LEPTRIS_ELEMENT_AS_NODE(elem));
|
|
1396
|
+
return rc;
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1399
|
+
for (LeptrisElement a = elem; a;
|
|
1400
|
+
a = (LeptrisElement)leptris_node_parent((LeptrisNodeRef)a)) {
|
|
1401
|
+
for (int i = 0;; i++) {
|
|
1402
|
+
const char* p = leptris_element_namespace_decl_prefix(a, i);
|
|
1403
|
+
const char* u = leptris_element_namespace_decl_uri(a, i);
|
|
1404
|
+
if (!u) break;
|
|
1405
|
+
if (p && *p && strcmp(u, uri) == 0) {
|
|
1406
|
+
char* pc = leptris_pool_strdup(pool, p);
|
|
1407
|
+
char* uc = leptris_pool_strdup(pool, uri);
|
|
1408
|
+
if (!pc || !uc) return LEPTRIS_ERROR_MEMORY;
|
|
1409
|
+
leptris_elem_set_prefix(elem, pc, pool);
|
|
1410
|
+
leptris_elem_set_ns_uri(elem, uc, pool);
|
|
1411
|
+
leptris_node_increment_version(LEPTRIS_ELEMENT_AS_NODE(elem));
|
|
1412
|
+
return LEPTRIS_OK;
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1415
|
+
}
|
|
1416
|
+
return LEPTRIS_ERROR_NOT_FOUND;
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
LEPTRIS_API LeptrisStatus leptris_element_remove_namespace_definition(
|
|
1420
|
+
LeptrisElement elem, const char* prefix) {
|
|
1421
|
+
if (!elem) return LEPTRIS_ERROR_NULL_ARG;
|
|
1422
|
+
/* Normalize empty prefix to NULL. */
|
|
1423
|
+
if (prefix && !*prefix) prefix = NULL;
|
|
1424
|
+
|
|
1425
|
+
/* No ns_cache = no namespace declarations on this element. */
|
|
1426
|
+
if (!elem->ns_cache) return LEPTRIS_ERROR_NOT_FOUND;
|
|
1427
|
+
|
|
1428
|
+
struct leptris_namespace** link = &elem->ns_cache->declarations;
|
|
1429
|
+
while (*link) {
|
|
1430
|
+
struct leptris_namespace* cur = *link;
|
|
1431
|
+
int match = (prefix == NULL) ? (cur->prefix == NULL)
|
|
1432
|
+
: (cur->prefix && strcmp(cur->prefix, prefix) == 0);
|
|
1433
|
+
if (match) {
|
|
1434
|
+
*link = cur->next;
|
|
1435
|
+
/* Don't free cur->prefix / cur->uri — they're pool-owned.
|
|
1436
|
+
* The struct itself may be pool-allocated too; skip free. */
|
|
1437
|
+
return LEPTRIS_OK;
|
|
1438
|
+
}
|
|
1439
|
+
link = &cur->next;
|
|
1440
|
+
}
|
|
1441
|
+
return LEPTRIS_ERROR_NOT_FOUND;
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1444
|
+
LEPTRIS_API size_t leptris_element_attributes_raw(
|
|
1445
|
+
LeptrisElement elem, const char** out_qnames, const char** out_values,
|
|
1446
|
+
size_t max_count) {
|
|
1447
|
+
if (!elem) return 0;
|
|
1448
|
+
if (!elem->ns_cache || !elem->ns_cache->raw_attrs) return 0;
|
|
1449
|
+
|
|
1450
|
+
/* Count-only query. */
|
|
1451
|
+
if (!out_qnames && !out_values) {
|
|
1452
|
+
size_t n = 0;
|
|
1453
|
+
for (struct leptris_raw_attr* r = elem->ns_cache->raw_attrs; r;
|
|
1454
|
+
r = r->next)
|
|
1455
|
+
n++;
|
|
1456
|
+
return n;
|
|
1457
|
+
}
|
|
1458
|
+
|
|
1459
|
+
size_t written = 0;
|
|
1460
|
+
for (struct leptris_raw_attr* r = elem->ns_cache->raw_attrs; r;
|
|
1461
|
+
r = r->next) {
|
|
1462
|
+
if (written >= max_count) break;
|
|
1463
|
+
if (out_qnames) out_qnames[written] = r->qname;
|
|
1464
|
+
if (out_values) out_values[written] = r->value;
|
|
1465
|
+
written++;
|
|
1466
|
+
}
|
|
1467
|
+
return written;
|
|
1468
|
+
}
|