leptris 1.9.317.1-arm-linux → 1.9.319.0-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 +30 -0
- data/Rakefile +1 -1
- data/lib/leptris/version.rb +1 -1
- data/lib/leptris/xml/ffi.rb +22 -0
- data/lib/leptris/xml/xsd.rb +93 -0
- data/lib/leptris/xml.rb +1 -0
- data/lib/libleptris.so +0 -0
- data/vendor-src/README.md +1 -1
- data/vendor-src/libleptris/CHANGELOG.md +55 -0
- data/vendor-src/libleptris/CMakeLists.txt +1 -1
- data/vendor-src/libleptris/src/CMakeLists.txt +2 -0
- data/vendor-src/libleptris/src/include/leptris/types.h +2 -0
- data/vendor-src/libleptris/src/include/leptris.h +38 -0
- data/vendor-src/libleptris/src/leptris/dom/element.h +1 -0
- data/vendor-src/libleptris/src/leptris/memory/arena.c +83 -3
- data/vendor-src/libleptris/src/leptris/rng/rng_internal.h +8 -0
- data/vendor-src/libleptris/src/leptris/rng/rng_regex.c +4 -0
- data/vendor-src/libleptris/src/leptris/xpath/evaluator.h +1 -0
- data/vendor-src/libleptris/src/leptris/xsd/compile.c +272 -0
- data/vendor-src/libleptris/src/leptris/xsd/datatypes.c +445 -0
- data/vendor-src/libleptris/src/leptris/xsd/xsd_internal.h +43 -0
- data/vendor-src/libleptris/test/CMakeLists.txt +3 -0
- data/vendor-src/libleptris/test/abi/test_descriptor.cpp +126 -0
- data/vendor-src/libleptris/test/memory/test_arena.cpp +106 -0
- data/vendor-src/libleptris/test/parser/test_large_documents.cpp +74 -0
- data/vendor-src/libleptris/test/rng/test_rng.cpp +15 -0
- data/vendor-src/libleptris/test/xsd/README.md +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/570702_0.xml +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/570702_0.xsd +25 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_0.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_0.xsd +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_1.xml +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_1.xsd +10 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_2.xml +5 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_3.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_4.xml +5 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_5.xml +6 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582887-attribute.xsd +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582887-common.xsd +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582887-element.xsd +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582887_0.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582887_0.xsd +17 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-1-common.xsd +6 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-1-prog1.xsd +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-1-prog2-include.xsd +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-1-prog2.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-1_0.xml +5 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-1_0.xsd +20 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-2-common.xsd +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-2-prog1.xsd +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-2-prog2-include.xsd +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-2-prog2.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-2_0.xml +5 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-2_0.xsd +20 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all.xsd +16 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all1_0.xml +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all1_0.xsd +10 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all_0.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all_0.xsd +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all_1.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all_1.xsd +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all_2.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all_2.xsd +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all_3.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all_4.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all_5.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all_6.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/all_7.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_0.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_0.xsd +26 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_1.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_2.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_3.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_4.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_5.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/annot-err_0.xml +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/annot-err_0.xsd +21 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any1_0.xml +21 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any1_0.xsd +22 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any2_0.xml +24 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any2_0.xsd +26 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any3_0.xml +17 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any3_0.xsd +17 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any4_0.xml +17 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any4_0.xsd +28 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_0.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_0.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_1.xml +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_1.xsd +14 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_2.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_3.xml +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_4.xml +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_5.xml +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_6.xml +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any6_0.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any6_1.xsd +36 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any6_2.xsd +19 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any7_0.xml +19 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any7_1.xml +18 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any7_1.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any7_2.xml +20 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any7_2.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any8_0.xml +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/any8_1.xsd +20 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-derive-errors1_0.xml +30 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-derive-errors1_0.xsd +223 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-derive1_0.xml +30 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-derive1_0.xsd +227 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-derive2_0.xml +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-derive2_0.xsd +33 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-errors1_0.xml +26 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-processContents-err1_0.xml +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-processContents-err1_0.xsd +26 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-processContents1_0.xml +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-processContents1_0.xsd +32 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr.importA.1_0.xsd +24 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr.importB.1_0.xsd +21 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr1_0.xml +31 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr1_0.xsd +144 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/attr0_0.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/attr0_0.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/attruse_0_0.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/attruse_0_0.xsd +32 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/attruse_0_1.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/attruse_0_2.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug141312_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug141312_0.xsd +16 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug141333.xml +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug141333.xsd +25 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug141333_0.xml +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug141333_0.xsd +25 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug143951.imp +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug143951_0.xml +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug143951_0.xsd +17 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug145246.xsd.imp +119 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug145246_0.xml +30 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug145246_0.xsd +173 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug152470_1.xml +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug152470_1.xsd +49 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug167754_0.xml +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug167754_0.xsd +29 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug303566_1.xml +19 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug303566_1.xsd +63 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug306806_0.xml +111 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug306806_1.xsd +544 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug309338_0.xml +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug309338_1.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug310264_0.xml +41 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug310264_0.xsd +18 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug312957_0.xml +14 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug312957_1.xsd +39 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug313982_0.xml +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug313982_0.xsd +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug321475_0.xml +10 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug321475_1.xsd +48 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug322411_0.xml +93 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug322411_1.xml +67 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug322411_1.xsd +35 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug323510_0.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug323510_1.xsd +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug455953_0.xml +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/bug455953_0.xsd +29 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/changelog093_0.xml +14 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/changelog093_1.xsd +253 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_0.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_0.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_1.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_1.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_2.xml +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_2.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_3.xml +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_4.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_5.xml +6 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_6.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/complex-type-extension_0.xml +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/complex-type-extension_0.xsd +27 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/cos-ct-extends-1-3_0.xml +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/cos-ct-extends-1-3_0.xsd +51 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/cos-st-restricts-1-2-err_0.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/cos-st-restricts-1-2-err_0.xsd +30 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ct-sc-nobase_0.xml +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ct-sc-nobase_0.xsd +24 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/date-whitespace_0.xml +29 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/date-whitespace_0.xsd +20 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/date-whitespace_1.xml +33 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/date_0.xml +27 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/date_0.xsd +122 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-1.xml +37 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-1.xsd +29 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-1_0.xml +24 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-1_1.xsd +19 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-2_0.xml +14 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-2_1.xsd +18 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-3_0.xml +17 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-3_1.xsd +18 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-extension-err_0.xml +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-extension-err_0.xsd +22 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-extension_0.xml +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-extension_0.xsd +22 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-restriction-2-1-1_0.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-restriction-2-1-1_0.xsd +56 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-restriction-4-1-err_0.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-restriction-4-1-err_0.xsd +69 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-restriction-anyAttr_0.xml +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-restriction-anyAttr_0.xsd +24 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-restriction-anyType.xml +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-restriction-anyType.xsd +22 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/deter0_0.xml +5 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/deter0_0.xsd +16 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/dur_0.xml +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/dur_0.xsd +72 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/elem0_0.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/elem0_0.xsd +16 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/element-err_0.xml +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/element-err_0.xsd +39 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/element-minmax-err_0.xml +5 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/element-minmax-err_0.xsd +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/empty-value_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/empty-value_1.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/empty-value_1.xsd +24 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/empty_0.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/empty_0.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/empty_1.xsd +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/extension0_0.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/extension0_0.xsd +20 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/extension1_0.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/extension1_0.xsd +17 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/extension1_1.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/extension1_2.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/extension2_0.xml +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/extension2_1.xsd +17 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/facet-unionST-err1_0.xml +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/facet-unionST-err1_0.xsd +27 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/facet-whiteSpace_0.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/facet-whiteSpace_0.xsd +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/group0_0.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/group0_0.xsd +18 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/hexbinary_0.xml +20 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/hexbinary_0.xsd +35 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/hexbinary_1.xml +15 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/idc-keyref-err1_0.xml +14 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/idc-keyref-err1_1.xsd +53 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/import-455953.xsd +24 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/import-bad-1_0.imp +5 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/import0_0.imp +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/import0_0.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/import0_0.xsd +21 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/import1_0.imp +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/import1_0.xml +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/import1_0.xsd +30 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/import1_0b.imp +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/import2_0.imp +24 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/import2_0.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/import2_0.xsd +24 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/include1_0.inc +28 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/include1_0.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/include1_0.xsd +15 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/include2_0.inc +17 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/include2_0.xml +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/include2_0.xsd +14 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/include3_0.inc +5 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/include3_0.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/include3_0.xsd +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/issue303_0.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/issue303_0.xsd +19 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/issue40_0.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/issue40_0.xsd +10 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/issue491_0.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/issue491_0.xsd +18 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/item_0.xml +6 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/item_0.xsd +39 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/item_1.xsd +42 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/length1_0.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/length1_0.xsd +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/length2_0.xml +5 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/length2_0.xsd +14 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/length3_0.xml +5 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/length3_0.xsd +10 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/list0_0.xml +6 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/list0_0.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/list0_1.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/list0_1.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/list0_2.xml +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/mixed0_0.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/mixed0_0.xsd +5 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/mixed1_0.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/mixed1_0.xsd +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_0.xsd +16 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_1.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_1.xsd +16 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_2.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_3.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_4.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ns1_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ns1_0.xsd +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ns2_0.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/ns2_0.xsd +15 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/nvdcve_0.xml +5235 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/nvdcve_0.xsd +498 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/oss-fuzz-51295_0.xml +1 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/oss-fuzz-51295_0.xsd +4 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/po0_0.xml +32 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/po0_0.xsd +59 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/po1_0.xml +34 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/po1_0.xsd +64 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/poschargrp0_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/poschargrp0_0.xsd +14 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/regexp-char-ref_0.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/regexp-char-ref_0.xsd +20 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/regexp-char-ref_1.xsd +20 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/restrict-CT-attr-ref_0.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/restrict-CT-attr-ref_0.xsd +30 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/restriction-attr1_0.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/restriction-attr1_0.xsd +18 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/restriction-enum-1_0.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/restriction-enum-1_1.xsd +19 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/restriction0_0.xml +5 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/restriction0_0.xsd +21 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/scc-no-xmlns_0.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/scc-no-xmlns_0.xsd +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/scc-no-xsi_0.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/scc-no-xsi_0.xsd +11 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/seq-dubl-elem1_0.xml +7 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/seq-dubl-elem1_0.xsd +25 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/seq0_0.xml +61 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/seq0_0.xsd +64 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute1_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute1_0.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute2_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute2_0.xsd +13 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-1_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-1_0.xsd +15 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-2-form_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-2-form_0.xsd +16 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-2-st_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-2-st_0.xsd +22 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-2-type_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-2-type_0.xsd +16 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute4_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute4_0.xsd +17 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element1_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element1_0.xsd +9 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element2-1_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element2-1_0.xsd +17 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element2-2_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element2-2_0.xsd +48 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element3_0.xml +2 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element3_0.xsd +29 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/subst-group-1_0.xsd +45 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/subst-group-1_1.xml +12 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/union2_1.xml +6 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/union2_1.xsd +21 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/union_0_0.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/union_0_0.xsd +53 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/v012-reader-schema-main.xsd +6 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-complexTypes.xsd +37 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first0_0.xml +33 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first0_0.xsd +67 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first1_0.xml +33 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first1_0.xsd +47 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first2_0.xml +33 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first2_0.xsd +89 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first3_0.xml +33 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first3_0.xsd +68 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first4_0.xml +33 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first4_0.xsd +150 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first4_1.xml +33 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first4_2.xml +33 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first5_0.xml +33 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first5_0.xsd +85 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-simpleTypes.xsd +38 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/xml.xsd +117 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/xsd-list-itemType_0.xml +3 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/xsd-list-itemType_0.xsd +14 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/xsd-simpleType-varieties_0.xml +8 -0
- data/vendor-src/libleptris/test/xsd/libxml2-cases/xsd-simpleType-varieties_0.xsd +45 -0
- data/vendor-src/libleptris/test/xsd/test_xsd_compile.cpp +266 -0
- data/vendor-src/libleptris/vcpkg.json +1 -1
- metadata +357 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2d73bfbca7f678b33985e74690f98802f0f020a438cb7f248df62b4531c3f33b
|
|
4
|
+
data.tar.gz: 81923f67f5adb8e770fa8d9228677b58f33990babc4261a38766c0186b00654e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 601ca1dfd786e2d15f76693fee886b49a25e336a6f2cbd43365bda6ca5de327239750abdf3114ff44178d276b8bb4f8bd13a2bc7884ddb8d0ed1c3a4858a6bbf
|
|
7
|
+
data.tar.gz: 3939d7264a015ef4ab66a32027896dec0adee34df022eda80afdf3f01f3c9a95a53c1f393bb634e3430f5797e99383055b765c1bf820ab2e3029cae05f87b9fc
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,33 @@
|
|
|
1
|
+
## [1.9.319.0] - 2026-10-08
|
|
2
|
+
|
|
3
|
+
### Added — engine sync (libleptris 1.9.319)
|
|
4
|
+
|
|
5
|
+
- **XSD lexical validation, slice 2 (#1075)**:
|
|
6
|
+
`XSD.builtin_valid?` covers the tier-1 built-in table (string
|
|
7
|
+
family, token, boolean, decimal/integer ranges, float/double,
|
|
8
|
+
date/time with bounds, duration, hex/base64Binary) by the
|
|
9
|
+
"xs:NAME" reference spelling; `Schema#simple_valid?` resolves
|
|
10
|
+
user simpleTypes through cycle-guarded restriction chains
|
|
11
|
+
(pattern / enumeration / min-max / length / digits facets).
|
|
12
|
+
The C face's -1 (not-in-table / unknown type) raises — a silent
|
|
13
|
+
false would let misspelled types validate nothing forever.
|
|
14
|
+
(Slice 1's compile surface rode in the parallel 1.9.318.0.)
|
|
15
|
+
|
|
16
|
+
### Fixed — engine sync (1.9.319)
|
|
17
|
+
|
|
18
|
+
- **RELAX NG exact `{n}` quantifiers (PR #1583)**: the regex
|
|
19
|
+
engine's no-comma branch never set the hi bound — `[A-Z]{3}`
|
|
20
|
+
matched `ABCD`, so any schema using exact bounds silently
|
|
21
|
+
over-accepted. Pinned through the binding's datatype path
|
|
22
|
+
(accepts ABC, rejects ABCD).
|
|
23
|
+
|
|
24
|
+
### Performance — engine sync (1.9.318)
|
|
25
|
+
|
|
26
|
+
- Per-thread small-span arena recycle (#1436): the tiny-doc
|
|
27
|
+
create/destroy row drops ~15% (183→159 ns/doc quiet-hardware) —
|
|
28
|
+
engine-internal; the binding inherits it on every
|
|
29
|
+
Document.create cycle.
|
|
30
|
+
|
|
1
31
|
## [1.9.317.1] - 2026-10-08
|
|
2
32
|
|
|
3
33
|
### Fixed
|
data/Rakefile
CHANGED
|
@@ -8,7 +8,7 @@ RSpec::Core::RakeTask.new(:spec)
|
|
|
8
8
|
# Pin for `rake compile` and the platform-gem builds. Keep in lockstep
|
|
9
9
|
# with .github/workflows/build.yml (which calls `rake compile`) and the
|
|
10
10
|
# CHANGELOG when libleptris releases.
|
|
11
|
-
LIBLEPTRIS_VERSION = "1.9.
|
|
11
|
+
LIBLEPTRIS_VERSION = "1.9.319"
|
|
12
12
|
# Vendored alongside libleptris for fn:normalize-unicode (TODO
|
|
13
13
|
# .restructure/20): built per platform with a RELOCATABLE @rpath
|
|
14
14
|
# install name, loaded by ffi.rb before libleptris so the
|
data/lib/leptris/version.rb
CHANGED
data/lib/leptris/xml/ffi.rb
CHANGED
|
@@ -157,6 +157,7 @@ module Leptris
|
|
|
157
157
|
typedef :pointer, :leptris_xpath_ns_set
|
|
158
158
|
typedef :pointer, :leptris_xpath_compiled
|
|
159
159
|
typedef :pointer, :leptris_relaxng
|
|
160
|
+
typedef :pointer, :leptris_xsd_schema
|
|
160
161
|
typedef :pointer, :leptris_xslt
|
|
161
162
|
typedef :pointer, :leptris_xquery
|
|
162
163
|
typedef :pointer, :leptris_schematron
|
|
@@ -1283,6 +1284,27 @@ attach_function :leptris_parse_string,
|
|
|
1283
1284
|
:column, :int
|
|
1284
1285
|
end
|
|
1285
1286
|
|
|
1287
|
+
# XSD tier-1 (libleptris 1.9.318, #1075): compilation surface —
|
|
1288
|
+
# compile a schema, count its top-level declarations, surface
|
|
1289
|
+
# schema-level errors. Validation is a later tier.
|
|
1290
|
+
attach_function :leptris_xsd_compile,
|
|
1291
|
+
[:string, :size_t, :pointer], :leptris_xsd_schema
|
|
1292
|
+
attach_function :leptris_xsd_free,
|
|
1293
|
+
[:leptris_xsd_schema], :void
|
|
1294
|
+
attach_function :leptris_xsd_declaration_count,
|
|
1295
|
+
[:leptris_xsd_schema], :size_t
|
|
1296
|
+
attach_function :leptris_xsd_error,
|
|
1297
|
+
[:leptris_xsd_schema], UTF8_STRING
|
|
1298
|
+
# Slice 2 (libleptris 1.9.319, #1075): lexical validation.
|
|
1299
|
+
# Built-ins take the "xs:NAME" reference spelling; -1 = not
|
|
1300
|
+
# in the tier-1 table. simple_valid resolves a user
|
|
1301
|
+
# simpleType by local name through cycle-guarded restriction
|
|
1302
|
+
# chains; -1 = unknown type.
|
|
1303
|
+
attach_function :leptris_xsd_builtin_valid,
|
|
1304
|
+
[:string, :string], :int
|
|
1305
|
+
attach_function :leptris_xsd_simple_valid,
|
|
1306
|
+
[:leptris_xsd_schema, :string, :string], :int
|
|
1307
|
+
|
|
1286
1308
|
attach_function :leptris_rng_parse,
|
|
1287
1309
|
[:string, :size_t, :pointer], :leptris_relaxng
|
|
1288
1310
|
attach_function :leptris_rng_parse_file,
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "ffi"
|
|
4
|
+
|
|
5
|
+
module Leptris::XML::XSD
|
|
6
|
+
module_function
|
|
7
|
+
|
|
8
|
+
def compile(schema_xml)
|
|
9
|
+
Schema.compile(schema_xml)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Slice 2 (libleptris 1.9.319, #1075): built-in lexical table.
|
|
13
|
+
# +builtin+ takes the "xs:NAME" reference spelling. Returns
|
|
14
|
+
# true/false; an unknown table name raises — a silent false
|
|
15
|
+
# would let misspelled types validate nothing forever.
|
|
16
|
+
def builtin_valid?(builtin, lexical)
|
|
17
|
+
r = Leptris::XML::FFI.leptris_xsd_builtin_valid(
|
|
18
|
+
builtin.to_s, lexical.to_s)
|
|
19
|
+
case r
|
|
20
|
+
when 1 then true
|
|
21
|
+
when 0 then false
|
|
22
|
+
else
|
|
23
|
+
raise ArgumentError,
|
|
24
|
+
"#{builtin.inspect} is not in the tier-1 built-in table"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# A compiled XSD schema (libleptris >= 1.9.318, #1075 tier-1):
|
|
29
|
+
# the compilation surface — a declaration census and schema-level
|
|
30
|
+
# error reporting. Validation is a later tier and not exposed yet.
|
|
31
|
+
#
|
|
32
|
+
# schema = Leptris::XML::XSD.compile(xsd_text)
|
|
33
|
+
# schema.declaration_count # => top-level schema declarations
|
|
34
|
+
# schema.error # => nil, or the engine's message
|
|
35
|
+
#
|
|
36
|
+
class Schema
|
|
37
|
+
# GC-managed compiled handle.
|
|
38
|
+
class Handle < ::FFI::AutoPointer
|
|
39
|
+
def self.release(ptr)
|
|
40
|
+
Leptris::XML::FFI.leptris_xsd_free(ptr)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Compile a schema from XML text. Raises Error when the text is
|
|
45
|
+
# not usable at all (not well-formed, no root); schema-level
|
|
46
|
+
# problems compile to a handle whose #error carries the detail
|
|
47
|
+
# — the tier-1 contract.
|
|
48
|
+
def self.compile(schema_xml)
|
|
49
|
+
xml = schema_xml.to_s
|
|
50
|
+
status = ::FFI::MemoryPointer.new(:int)
|
|
51
|
+
raw = Leptris::XML::FFI.leptris_xsd_compile(xml, xml.bytesize, status)
|
|
52
|
+
if raw.null?
|
|
53
|
+
raise Leptris::XML::Error,
|
|
54
|
+
"schema compile failed (status #{status.read_int}): " \
|
|
55
|
+
"#{Leptris::XML::FFI.leptris_last_error}"
|
|
56
|
+
end
|
|
57
|
+
new(Handle.new(raw))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def initialize(handle)
|
|
61
|
+
@handle = handle
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Number of top-level schema declarations the compiler
|
|
65
|
+
# recognized (elements, types, groups, ...).
|
|
66
|
+
def declaration_count
|
|
67
|
+
Leptris::XML::FFI.leptris_xsd_declaration_count(@handle)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# The engine's schema-level error message, or nil when the
|
|
71
|
+
# schema compiled cleanly.
|
|
72
|
+
def error
|
|
73
|
+
msg = Leptris::XML::FFI.leptris_xsd_error(@handle)
|
|
74
|
+
msg.nil? || msg.empty? ? nil : msg
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Slice 2 (libleptris 1.9.319, #1075): lexical validation of
|
|
78
|
+
# +lexical+ against the user simpleType +type_name+ (local
|
|
79
|
+
# name) — restriction chains validate every hop's facets,
|
|
80
|
+
# cycle-guarded. Unknown type names raise (the -1 contract).
|
|
81
|
+
def simple_valid?(type_name, lexical)
|
|
82
|
+
r = Leptris::XML::FFI.leptris_xsd_simple_valid(
|
|
83
|
+
@handle, type_name.to_s, lexical.to_s)
|
|
84
|
+
case r
|
|
85
|
+
when 1 then true
|
|
86
|
+
when 0 then false
|
|
87
|
+
else
|
|
88
|
+
raise ArgumentError,
|
|
89
|
+
"#{type_name.inspect} is not a simpleType in this schema"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
data/lib/leptris/xml.rb
CHANGED
|
@@ -35,6 +35,7 @@ module Leptris
|
|
|
35
35
|
autoload :XSLT, "leptris/xml/xslt"
|
|
36
36
|
autoload :XQuery, "leptris/xml/xquery"
|
|
37
37
|
autoload :RelaxNG, "leptris/xml/relaxng"
|
|
38
|
+
autoload :XSD, "leptris/xml/xsd"
|
|
38
39
|
autoload :DTD, "leptris/xml/dtd"
|
|
39
40
|
autoload :Pull, "leptris/xml/pull"
|
|
40
41
|
autoload :Iterparse, "leptris/xml/iterparse"
|
data/lib/libleptris.so
CHANGED
|
Binary file
|
data/vendor-src/README.md
CHANGED
|
@@ -1,5 +1,60 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [1.9.319] - 2026-10-08
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- **XSD validation, tier 1, slices 1–2 (#1075, PRs #1581/#1583).**
|
|
8
|
+
Slice 1: the `leptris_xsd_compile` surface (xs:schema identity
|
|
9
|
+
under any namespace spelling, top-level declaration enumeration,
|
|
10
|
+
error-carrying failure handles) plus the corpus gate — libxml2's
|
|
11
|
+
own `test/schemas` set (350 files, MIT) vendored at
|
|
12
|
+
`test/xsd/libxml2-cases`, **163/163 fixtures compiling** with a
|
|
13
|
+
pinned monotonic floor. Slice 2: `leptris_xsd_builtin_valid` —
|
|
14
|
+
the tier-1 built-in lexical table (string/Name family, token,
|
|
15
|
+
language, anyURI, QName, boolean, decimal, the integer-derivation
|
|
16
|
+
ranges, float/double, the date/time family with month/day bounds,
|
|
17
|
+
duration, hex/base64Binary) — and `leptris_xsd_simple_valid`:
|
|
18
|
+
named simpleTypes captured at compile (base + pattern /
|
|
19
|
+
enumeration / min-max inclusive-exclusive / length family /
|
|
20
|
+
total-fractionDigits facets), validated through cycle-guarded
|
|
21
|
+
restriction chains where every hop's facets bind.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- **Regex engine: `{n}` EXACT quantifiers parsed open-ended
|
|
26
|
+
(PR #1583).** The no-comma branch never set the hi bound, so
|
|
27
|
+
`[A-Z]{3}` matched `ABCD` — any RELAX NG schema using exact
|
|
28
|
+
quantifier bounds silently accepted longer runs. Root fix in the
|
|
29
|
+
quantifier parser plus a never-again spec on the direct engine
|
|
30
|
+
call; `rng_internal.h` gained C++ guards for test-side calls.
|
|
31
|
+
- Amalgamated single-TU build: the XSD datatype statics now carry
|
|
32
|
+
the `xsd_` prefix (collision with the xpath lexer's same-named
|
|
33
|
+
statics — the #1217 class).
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
## [1.9.318] - 2026-10-08
|
|
38
|
+
|
|
39
|
+
### Performance
|
|
40
|
+
|
|
41
|
+
- **Per-thread small-span arena recycle — the tiny-doc fixed row
|
|
42
|
+
(#1436, PR #1580).** The global retain tier deliberately skipped
|
|
43
|
+
spans below 256 KB, so every small document paid full malloc/free
|
|
44
|
+
bookkeeping per create/destroy cycle; the quiet-hardware profile
|
|
45
|
+
named that cycle as the heart of the ~185 ns/doc tiny-doc row. A
|
|
46
|
+
per-thread LIFO cache inside the arena's retain seam hands the
|
|
47
|
+
previous document's span back with no allocator, no spinlock, and
|
|
48
|
+
no cross-thread traffic. Three standing contracts preserved:
|
|
49
|
+
exact-size take (the fail-fast capacity never silently widens),
|
|
50
|
+
custom-allocator stand-down (hooked accounting sees every
|
|
51
|
+
malloc/free pair), and ASAN bypass with thread-cleanup drain.
|
|
52
|
+
Measured on bench_doc_lifecycle (interleaved A/B, Release):
|
|
53
|
+
tight cycle 183/203/183 → 166/159/159 ns/doc (~15% off the
|
|
54
|
+
fixed row).
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
3
58
|
## [1.9.317] - 2026-10-07
|
|
4
59
|
|
|
5
60
|
### Added
|
|
@@ -34,6 +34,8 @@ typedef struct leptris_doctype* LeptrisDoctype;
|
|
|
34
34
|
typedef const char* LeptrisNamespace;
|
|
35
35
|
typedef struct leptris_xpath_result* LeptrisXPathResult;
|
|
36
36
|
typedef struct leptris_relaxng* LeptrisRelaxNG;
|
|
37
|
+
/* #1075 XSD tier 1: opaque compiled W3C XML Schema handle. */
|
|
38
|
+
typedef struct leptris_xsd_schema* LeptrisXsdSchema;
|
|
37
39
|
#endif
|
|
38
40
|
|
|
39
41
|
/* ============================================================================
|
|
@@ -882,6 +882,44 @@ LEPTRIS_API LeptrisRelaxNG leptris_rng_parse(const char* schema,
|
|
|
882
882
|
LEPTRIS_API LeptrisRelaxNG leptris_rng_parse_file(const char* path,
|
|
883
883
|
LeptrisStatus* status);
|
|
884
884
|
LEPTRIS_API void leptris_rng_free(LeptrisRelaxNG rng);
|
|
885
|
+
|
|
886
|
+
/* ============================================================================
|
|
887
|
+
* XSD (W3C XML Schema) — #1075 tier 1, slice 1: compilation.
|
|
888
|
+
*
|
|
889
|
+
* leptris_xsd_compile parses schema text and builds the top-level
|
|
890
|
+
* declaration model (xs:element / xs:attribute / xs:simpleType /
|
|
891
|
+
* xs:complexType / xs:group / xs:attributeGroup / xs:notation).
|
|
892
|
+
* Slices that follow add the datatype/facet machinery, content
|
|
893
|
+
* models, identity constraints, and instance validation.
|
|
894
|
+
*
|
|
895
|
+
* @param xsd_text schema bytes (UTF-8)
|
|
896
|
+
* @param len byte length
|
|
897
|
+
* @param status LEPTRIS_OK, or LEPTRIS_ERROR_PARSE (not
|
|
898
|
+
* well-formed, not an xs:schema document, or no
|
|
899
|
+
* recognized XML Schema namespace spelling)
|
|
900
|
+
* @return compiled schema; on failure an error-carrying handle
|
|
901
|
+
* (leptris_xsd_error says why — free it the same way)
|
|
902
|
+
*/
|
|
903
|
+
LEPTRIS_API LeptrisXsdSchema leptris_xsd_compile(const char* xsd_text,
|
|
904
|
+
size_t len,
|
|
905
|
+
LeptrisStatus* status);
|
|
906
|
+
LEPTRIS_API void leptris_xsd_free(LeptrisXsdSchema schema);
|
|
907
|
+
/* Number of top-level schema declarations compiled (0 is valid). */
|
|
908
|
+
LEPTRIS_API size_t leptris_xsd_declaration_count(LeptrisXsdSchema schema);
|
|
909
|
+
/* Last compile error detail (NULL when the handle is valid).
|
|
910
|
+
* Schema-owned; lives until leptris_xsd_free. */
|
|
911
|
+
LEPTRIS_API const char* leptris_xsd_error(LeptrisXsdSchema schema);
|
|
912
|
+
|
|
913
|
+
/* Slice 2 — lexical validation. Built-ins take the "xs:NAME"
|
|
914
|
+
* reference spelling; -1 = not in the tier-1 table. */
|
|
915
|
+
LEPTRIS_API int leptris_xsd_builtin_valid(const char* builtin,
|
|
916
|
+
const char* lexical);
|
|
917
|
+
/* A user simpleType compiled into the schema, by local name:
|
|
918
|
+
* 1 valid, 0 invalid, -1 unknown type. Restriction chains (local
|
|
919
|
+
* bases) validate every hop's facets, cycle-guarded. */
|
|
920
|
+
LEPTRIS_API int leptris_xsd_simple_valid(LeptrisXsdSchema schema,
|
|
921
|
+
const char* type_name,
|
|
922
|
+
const char* lexical);
|
|
885
923
|
/* Validate an instance document against the parsed schema
|
|
886
924
|
* (phase-2 core subset: element/attribute/text/data/value/
|
|
887
925
|
* choice/group/interleave/repeats/ref). Returns 1 valid; on 0,
|
|
@@ -29,6 +29,7 @@ typedef struct leptris_doctype* LeptrisDoctype;
|
|
|
29
29
|
typedef const char* LeptrisNamespace;
|
|
30
30
|
typedef struct leptris_xpath_result* LeptrisXPathResult;
|
|
31
31
|
typedef struct leptris_relaxng* LeptrisRelaxNG;
|
|
32
|
+
typedef struct leptris_xsd_schema* LeptrisXsdSchema;
|
|
32
33
|
#endif
|
|
33
34
|
|
|
34
35
|
#include "node.h"
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
#include "arena.h"
|
|
5
5
|
|
|
6
|
+
#include "../common/port.h" /* LEPTRIS_THREAD_LOCAL */
|
|
6
7
|
#include <stdint.h> /* uintptr_t: was transitive via glibc's mman graph */
|
|
7
8
|
#include <stdlib.h>
|
|
8
9
|
#include <string.h>
|
|
@@ -16,6 +17,7 @@
|
|
|
16
17
|
* every byte the library takes. */
|
|
17
18
|
void* leptris_alloc_hook(size_t size);
|
|
18
19
|
void leptris_free_hook(void* ptr);
|
|
20
|
+
int leptris_custom_allocator_active(void);
|
|
19
21
|
|
|
20
22
|
#define ARENA_ALIGNMENT 8u
|
|
21
23
|
|
|
@@ -92,11 +94,78 @@ static void retain_lock(void) {
|
|
|
92
94
|
static void retain_unlock(void) { __sync_lock_release(&g_retain_lock); }
|
|
93
95
|
#endif
|
|
94
96
|
|
|
97
|
+
/* ---- Small-span TLS recycle (#1436 tiny-doc fixed row) ---------
|
|
98
|
+
* The global retain deliberately skips spans below ARENA_RETAIN_MIN
|
|
99
|
+
* ("libc zone-reuses them"), but the per-document fixed-cost profile
|
|
100
|
+
* names arena create+destroy as the heart of the ~185 ns/doc
|
|
101
|
+
* tiny-doc row: even zone-recycled, malloc/free pay bookkeeping per
|
|
102
|
+
* span, and the batched-GC shape pays first-touch faults when a
|
|
103
|
+
* batch's spans outrun the zone cache. A per-thread LIFO of small
|
|
104
|
+
* spans hands the previous document's span back with no allocator,
|
|
105
|
+
* no global spinlock, and no cross-thread traffic. Same contract as
|
|
106
|
+
* the global tier: NOT zeroed, callers memset what they need. */
|
|
107
|
+
#define ARENA_TLS_SPANS 8u
|
|
108
|
+
#define ARENA_TLS_MAX_BYTES (2u * 1024u * 1024u)
|
|
109
|
+
|
|
110
|
+
typedef struct {
|
|
111
|
+
char* base[ARENA_TLS_SPANS];
|
|
112
|
+
size_t size[ARENA_TLS_SPANS];
|
|
113
|
+
size_t count;
|
|
114
|
+
size_t bytes;
|
|
115
|
+
} ArenaSmallCache;
|
|
116
|
+
|
|
117
|
+
static LEPTRIS_THREAD_LOCAL ArenaSmallCache g_small;
|
|
118
|
+
|
|
119
|
+
/* LIFO take, EXACT size only: a reused span must report exactly the
|
|
120
|
+
* requested capacity (same as a fresh malloc), or the fail-fast
|
|
121
|
+
* bound silently widens for whoever sized a span to its budget —
|
|
122
|
+
* the exhaustion specs pin that. Small spans are near-homogeneous
|
|
123
|
+
* per workload (a 64 KB-doc stream recycles 64 KB spans), so
|
|
124
|
+
* exact-match still catches the hot case. */
|
|
125
|
+
static char* small_take(size_t request, size_t* capacity) {
|
|
126
|
+
if (request >= ARENA_RETAIN_MIN) return NULL;
|
|
127
|
+
/* Stands down under custom allocators, same as the pool
|
|
128
|
+
* recycler: hooked accounting must see every malloc/free pair. */
|
|
129
|
+
if (leptris_custom_allocator_active()) return NULL;
|
|
130
|
+
for (size_t i = g_small.count; i > 0; i--) {
|
|
131
|
+
size_t idx = i - 1;
|
|
132
|
+
if (g_small.size[idx] == request) {
|
|
133
|
+
char* found = g_small.base[idx];
|
|
134
|
+
*capacity = g_small.size[idx];
|
|
135
|
+
g_small.bytes -= g_small.size[idx];
|
|
136
|
+
g_small.base[idx] = g_small.base[g_small.count - 1];
|
|
137
|
+
g_small.size[idx] = g_small.size[g_small.count - 1];
|
|
138
|
+
g_small.count--;
|
|
139
|
+
return found;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return NULL;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* Returns 1 when the span was parked, 0 when the cache is full or
|
|
146
|
+
* the size belongs to the global tier — the caller frees then. */
|
|
147
|
+
static int small_give(char* base, size_t size) {
|
|
148
|
+
if (size >= ARENA_RETAIN_MIN) return 0;
|
|
149
|
+
if (leptris_custom_allocator_active()) return 0;
|
|
150
|
+
if (g_small.count >= ARENA_TLS_SPANS ||
|
|
151
|
+
g_small.bytes + size > ARENA_TLS_MAX_BYTES)
|
|
152
|
+
return 0;
|
|
153
|
+
g_small.base[g_small.count] = base;
|
|
154
|
+
g_small.size[g_small.count] = size;
|
|
155
|
+
g_small.count++;
|
|
156
|
+
g_small.bytes += size;
|
|
157
|
+
return 1;
|
|
158
|
+
}
|
|
159
|
+
|
|
95
160
|
/* Best fit: the smallest retained block that covers the request, so
|
|
96
161
|
* oversized blocks aren't burned on small documents. Returns the
|
|
97
|
-
* block and reports its true capacity; NULL when nothing fits
|
|
98
|
-
* the request is below the retain threshold — malloc territory). */
|
|
162
|
+
* block and reports its true capacity; NULL when nothing fits. */
|
|
99
163
|
static char* retain_take(size_t request, size_t* capacity) {
|
|
164
|
+
/* 'parked', never 'small' — MSVC's headers #define small (the
|
|
165
|
+
* OLE `#define small char`) and turn the local into a type
|
|
166
|
+
* token (C2059). */
|
|
167
|
+
char* parked = small_take(request, capacity);
|
|
168
|
+
if (parked) return parked;
|
|
100
169
|
if (request < ARENA_RETAIN_MIN) return NULL;
|
|
101
170
|
char* found = NULL;
|
|
102
171
|
size_t found_size = 0;
|
|
@@ -128,7 +197,8 @@ static void retain_give(char* base, size_t size) {
|
|
|
128
197
|
return;
|
|
129
198
|
#endif
|
|
130
199
|
if (size < ARENA_RETAIN_MIN) {
|
|
131
|
-
|
|
200
|
+
if (!small_give(base, size))
|
|
201
|
+
leptris_free_hook(base);
|
|
132
202
|
return;
|
|
133
203
|
}
|
|
134
204
|
retain_lock();
|
|
@@ -149,6 +219,16 @@ static void retain_give(char* base, size_t size) {
|
|
|
149
219
|
* blocks are process-lifetime parking by design; release them so
|
|
150
220
|
* embedded hosts and leak checkers see a clean exit. */
|
|
151
221
|
void leptris_arena_retain_drain(void) {
|
|
222
|
+
/* The small tier drains the CALLING thread's cache — the shape
|
|
223
|
+
* leptris_thread_cleanup serves. Other threads' cached spans
|
|
224
|
+
* stay reachable through their TLS slots and die with the
|
|
225
|
+
* process (the same still-reachable parking as the global
|
|
226
|
+
* tier). */
|
|
227
|
+
for (size_t i = 0; i < g_small.count; i++)
|
|
228
|
+
leptris_free_hook(g_small.base[i]);
|
|
229
|
+
g_small.count = 0;
|
|
230
|
+
g_small.bytes = 0;
|
|
231
|
+
|
|
152
232
|
retain_lock();
|
|
153
233
|
for (size_t i = 0; i < g_retain.count; i++)
|
|
154
234
|
leptris_free_hook(g_retain.base[i]);
|
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
#ifndef LEPTRIS_RNG_INTERNAL_H
|
|
9
9
|
#define LEPTRIS_RNG_INTERNAL_H
|
|
10
10
|
|
|
11
|
+
#ifdef __cplusplus
|
|
12
|
+
extern "C" {
|
|
13
|
+
#endif
|
|
14
|
+
|
|
11
15
|
#include "../include/leptris.h"
|
|
12
16
|
#include "../dom/diag.h"
|
|
13
17
|
#include <stddef.h>
|
|
@@ -109,4 +113,8 @@ int rng_regex_matches(const char* pat, const char* text);
|
|
|
109
113
|
void rng_pattern_free(RngPattern* p);
|
|
110
114
|
void rng_grammar_free(RngGrammar* g);
|
|
111
115
|
|
|
116
|
+
#ifdef __cplusplus
|
|
117
|
+
}
|
|
118
|
+
#endif
|
|
119
|
+
|
|
112
120
|
#endif
|
|
@@ -289,6 +289,10 @@ static RreNode* parse_piece(RreParser* ps) {
|
|
|
289
289
|
}
|
|
290
290
|
}
|
|
291
291
|
}
|
|
292
|
+
/* {n} with no comma is EXACT — h must be l, not the
|
|
293
|
+
* -1 "unbounded" sentinel. The old code left h = -1,
|
|
294
|
+
* so [A-Z]{3} matched ABCD (open-ended {3,}). */
|
|
295
|
+
if (*q != ',' && h == -1) h = l;
|
|
292
296
|
if (*q == '}' && l >= 0 && (h == -1 || h >= l)) {
|
|
293
297
|
lo = l;
|
|
294
298
|
hi = h;
|
|
@@ -25,6 +25,7 @@ typedef struct leptris_doctype* LeptrisDoctype;
|
|
|
25
25
|
typedef const char* LeptrisNamespace;
|
|
26
26
|
typedef struct leptris_xpath_result* LeptrisXPathResult;
|
|
27
27
|
typedef struct leptris_relaxng* LeptrisRelaxNG;
|
|
28
|
+
typedef struct leptris_xsd_schema* LeptrisXsdSchema;
|
|
28
29
|
#endif
|
|
29
30
|
|
|
30
31
|
/* ============================================================================
|