leptris 1.9.317.0 → 1.9.318.0

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.
Files changed (386) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -0
  3. data/Rakefile +1 -1
  4. data/lib/leptris/vendor/aarch64-linux/libleptris.so +0 -0
  5. data/lib/leptris/vendor/aarch64-linux-musl/libleptris.so +0 -0
  6. data/lib/leptris/vendor/arm-linux/libleptris.so +0 -0
  7. data/lib/leptris/vendor/arm-linux-musl/libleptris.so +0 -0
  8. data/lib/leptris/vendor/arm64-darwin/libleptris.dylib +0 -0
  9. data/lib/leptris/vendor/ppc64le-linux/libleptris.so +0 -0
  10. data/lib/leptris/vendor/s390x-linux-musl/libleptris.so +0 -0
  11. data/lib/leptris/vendor/x86_64-darwin/libleptris.dylib +0 -0
  12. data/lib/leptris/vendor/x86_64-linux/libleptris.so +0 -0
  13. data/lib/leptris/vendor/x86_64-linux-musl/libleptris.so +0 -0
  14. data/lib/leptris/version.rb +1 -1
  15. data/lib/leptris/xml/descriptor.rb +10 -2
  16. data/lib/leptris/xml/ffi.rb +20 -0
  17. data/lib/leptris/xml/xsd.rb +61 -0
  18. data/lib/leptris/xml.rb +1 -0
  19. data/vendor-src/README.md +1 -1
  20. data/vendor-src/libleptris/CHANGELOG.md +21 -0
  21. data/vendor-src/libleptris/CMakeLists.txt +1 -1
  22. data/vendor-src/libleptris/src/CMakeLists.txt +1 -0
  23. data/vendor-src/libleptris/src/include/leptris/types.h +2 -0
  24. data/vendor-src/libleptris/src/include/leptris.h +27 -0
  25. data/vendor-src/libleptris/src/leptris/dom/element.h +1 -0
  26. data/vendor-src/libleptris/src/leptris/memory/arena.c +83 -3
  27. data/vendor-src/libleptris/src/leptris/xpath/evaluator.h +1 -0
  28. data/vendor-src/libleptris/src/leptris/xsd/compile.c +121 -0
  29. data/vendor-src/libleptris/test/CMakeLists.txt +3 -0
  30. data/vendor-src/libleptris/test/abi/test_descriptor.cpp +126 -0
  31. data/vendor-src/libleptris/test/memory/test_arena.cpp +106 -0
  32. data/vendor-src/libleptris/test/parser/test_large_documents.cpp +74 -0
  33. data/vendor-src/libleptris/test/xsd/README.md +12 -0
  34. data/vendor-src/libleptris/test/xsd/libxml2-cases/570702_0.xml +13 -0
  35. data/vendor-src/libleptris/test/xsd/libxml2-cases/570702_0.xsd +25 -0
  36. data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_0.xml +3 -0
  37. data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_0.xsd +11 -0
  38. data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_1.xml +4 -0
  39. data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_1.xsd +10 -0
  40. data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_2.xml +5 -0
  41. data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_3.xml +7 -0
  42. data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_4.xml +5 -0
  43. data/vendor-src/libleptris/test/xsd/libxml2-cases/579746_5.xml +6 -0
  44. data/vendor-src/libleptris/test/xsd/libxml2-cases/582887-attribute.xsd +12 -0
  45. data/vendor-src/libleptris/test/xsd/libxml2-cases/582887-common.xsd +8 -0
  46. data/vendor-src/libleptris/test/xsd/libxml2-cases/582887-element.xsd +11 -0
  47. data/vendor-src/libleptris/test/xsd/libxml2-cases/582887_0.xml +7 -0
  48. data/vendor-src/libleptris/test/xsd/libxml2-cases/582887_0.xsd +17 -0
  49. data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-1-common.xsd +6 -0
  50. data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-1-prog1.xsd +11 -0
  51. data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-1-prog2-include.xsd +9 -0
  52. data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-1-prog2.xsd +13 -0
  53. data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-1_0.xml +5 -0
  54. data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-1_0.xsd +20 -0
  55. data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-2-common.xsd +7 -0
  56. data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-2-prog1.xsd +11 -0
  57. data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-2-prog2-include.xsd +9 -0
  58. data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-2-prog2.xsd +13 -0
  59. data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-2_0.xml +5 -0
  60. data/vendor-src/libleptris/test/xsd/libxml2-cases/582906-2_0.xsd +20 -0
  61. data/vendor-src/libleptris/test/xsd/libxml2-cases/all.xsd +16 -0
  62. data/vendor-src/libleptris/test/xsd/libxml2-cases/all1_0.xml +4 -0
  63. data/vendor-src/libleptris/test/xsd/libxml2-cases/all1_0.xsd +10 -0
  64. data/vendor-src/libleptris/test/xsd/libxml2-cases/all_0.xml +1 -0
  65. data/vendor-src/libleptris/test/xsd/libxml2-cases/all_0.xsd +12 -0
  66. data/vendor-src/libleptris/test/xsd/libxml2-cases/all_1.xml +2 -0
  67. data/vendor-src/libleptris/test/xsd/libxml2-cases/all_1.xsd +12 -0
  68. data/vendor-src/libleptris/test/xsd/libxml2-cases/all_2.xml +1 -0
  69. data/vendor-src/libleptris/test/xsd/libxml2-cases/all_2.xsd +11 -0
  70. data/vendor-src/libleptris/test/xsd/libxml2-cases/all_3.xml +1 -0
  71. data/vendor-src/libleptris/test/xsd/libxml2-cases/all_4.xml +1 -0
  72. data/vendor-src/libleptris/test/xsd/libxml2-cases/all_5.xml +1 -0
  73. data/vendor-src/libleptris/test/xsd/libxml2-cases/all_6.xml +1 -0
  74. data/vendor-src/libleptris/test/xsd/libxml2-cases/all_7.xml +1 -0
  75. data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_0.xml +7 -0
  76. data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_0.xsd +26 -0
  77. data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_1.xml +8 -0
  78. data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_2.xml +8 -0
  79. data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_3.xml +7 -0
  80. data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_4.xml +7 -0
  81. data/vendor-src/libleptris/test/xsd/libxml2-cases/allsg_5.xml +8 -0
  82. data/vendor-src/libleptris/test/xsd/libxml2-cases/annot-err_0.xml +4 -0
  83. data/vendor-src/libleptris/test/xsd/libxml2-cases/annot-err_0.xsd +21 -0
  84. data/vendor-src/libleptris/test/xsd/libxml2-cases/any1_0.xml +21 -0
  85. data/vendor-src/libleptris/test/xsd/libxml2-cases/any1_0.xsd +22 -0
  86. data/vendor-src/libleptris/test/xsd/libxml2-cases/any2_0.xml +24 -0
  87. data/vendor-src/libleptris/test/xsd/libxml2-cases/any2_0.xsd +26 -0
  88. data/vendor-src/libleptris/test/xsd/libxml2-cases/any3_0.xml +17 -0
  89. data/vendor-src/libleptris/test/xsd/libxml2-cases/any3_0.xsd +17 -0
  90. data/vendor-src/libleptris/test/xsd/libxml2-cases/any4_0.xml +17 -0
  91. data/vendor-src/libleptris/test/xsd/libxml2-cases/any4_0.xsd +28 -0
  92. data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_0.xml +7 -0
  93. data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_0.xsd +13 -0
  94. data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_1.xml +12 -0
  95. data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_1.xsd +14 -0
  96. data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_2.xml +8 -0
  97. data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_3.xml +11 -0
  98. data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_4.xml +12 -0
  99. data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_5.xml +12 -0
  100. data/vendor-src/libleptris/test/xsd/libxml2-cases/any5_6.xml +13 -0
  101. data/vendor-src/libleptris/test/xsd/libxml2-cases/any6_0.xml +8 -0
  102. data/vendor-src/libleptris/test/xsd/libxml2-cases/any6_1.xsd +36 -0
  103. data/vendor-src/libleptris/test/xsd/libxml2-cases/any6_2.xsd +19 -0
  104. data/vendor-src/libleptris/test/xsd/libxml2-cases/any7_0.xml +19 -0
  105. data/vendor-src/libleptris/test/xsd/libxml2-cases/any7_1.xml +18 -0
  106. data/vendor-src/libleptris/test/xsd/libxml2-cases/any7_1.xsd +13 -0
  107. data/vendor-src/libleptris/test/xsd/libxml2-cases/any7_2.xml +20 -0
  108. data/vendor-src/libleptris/test/xsd/libxml2-cases/any7_2.xsd +13 -0
  109. data/vendor-src/libleptris/test/xsd/libxml2-cases/any8_0.xml +9 -0
  110. data/vendor-src/libleptris/test/xsd/libxml2-cases/any8_1.xsd +20 -0
  111. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-derive-errors1_0.xml +30 -0
  112. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-derive-errors1_0.xsd +223 -0
  113. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-derive1_0.xml +30 -0
  114. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-derive1_0.xsd +227 -0
  115. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-derive2_0.xml +9 -0
  116. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-derive2_0.xsd +33 -0
  117. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-errors1_0.xml +26 -0
  118. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-processContents-err1_0.xml +11 -0
  119. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-processContents-err1_0.xsd +26 -0
  120. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-processContents1_0.xml +13 -0
  121. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr-processContents1_0.xsd +32 -0
  122. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr.importA.1_0.xsd +24 -0
  123. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr.importB.1_0.xsd +21 -0
  124. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr1_0.xml +31 -0
  125. data/vendor-src/libleptris/test/xsd/libxml2-cases/anyAttr1_0.xsd +144 -0
  126. data/vendor-src/libleptris/test/xsd/libxml2-cases/attr0_0.xml +1 -0
  127. data/vendor-src/libleptris/test/xsd/libxml2-cases/attr0_0.xsd +13 -0
  128. data/vendor-src/libleptris/test/xsd/libxml2-cases/attruse_0_0.xml +8 -0
  129. data/vendor-src/libleptris/test/xsd/libxml2-cases/attruse_0_0.xsd +32 -0
  130. data/vendor-src/libleptris/test/xsd/libxml2-cases/attruse_0_1.xml +8 -0
  131. data/vendor-src/libleptris/test/xsd/libxml2-cases/attruse_0_2.xml +8 -0
  132. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug141312_0.xml +2 -0
  133. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug141312_0.xsd +16 -0
  134. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug141333.xml +9 -0
  135. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug141333.xsd +25 -0
  136. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug141333_0.xml +9 -0
  137. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug141333_0.xsd +25 -0
  138. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug143951.imp +12 -0
  139. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug143951_0.xml +9 -0
  140. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug143951_0.xsd +17 -0
  141. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug145246.xsd.imp +119 -0
  142. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug145246_0.xml +30 -0
  143. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug145246_0.xsd +173 -0
  144. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug152470_1.xml +9 -0
  145. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug152470_1.xsd +49 -0
  146. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug167754_0.xml +12 -0
  147. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug167754_0.xsd +29 -0
  148. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug303566_1.xml +19 -0
  149. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug303566_1.xsd +63 -0
  150. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug306806_0.xml +111 -0
  151. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug306806_1.xsd +544 -0
  152. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug309338_0.xml +4 -0
  153. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug309338_1.xsd +13 -0
  154. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug310264_0.xml +41 -0
  155. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug310264_0.xsd +18 -0
  156. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug312957_0.xml +14 -0
  157. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug312957_1.xsd +39 -0
  158. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug313982_0.xml +4 -0
  159. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug313982_0.xsd +11 -0
  160. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug321475_0.xml +10 -0
  161. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug321475_1.xsd +48 -0
  162. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug322411_0.xml +93 -0
  163. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug322411_1.xml +67 -0
  164. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug322411_1.xsd +35 -0
  165. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug323510_0.xml +3 -0
  166. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug323510_1.xsd +12 -0
  167. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug455953_0.xml +9 -0
  168. data/vendor-src/libleptris/test/xsd/libxml2-cases/bug455953_0.xsd +29 -0
  169. data/vendor-src/libleptris/test/xsd/libxml2-cases/changelog093_0.xml +14 -0
  170. data/vendor-src/libleptris/test/xsd/libxml2-cases/changelog093_1.xsd +253 -0
  171. data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_0.xml +3 -0
  172. data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_0.xsd +13 -0
  173. data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_1.xml +3 -0
  174. data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_1.xsd +13 -0
  175. data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_2.xml +4 -0
  176. data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_2.xsd +13 -0
  177. data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_3.xml +4 -0
  178. data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_4.xml +2 -0
  179. data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_5.xml +6 -0
  180. data/vendor-src/libleptris/test/xsd/libxml2-cases/choice_6.xml +7 -0
  181. data/vendor-src/libleptris/test/xsd/libxml2-cases/complex-type-extension_0.xml +12 -0
  182. data/vendor-src/libleptris/test/xsd/libxml2-cases/complex-type-extension_0.xsd +27 -0
  183. data/vendor-src/libleptris/test/xsd/libxml2-cases/cos-ct-extends-1-3_0.xml +9 -0
  184. data/vendor-src/libleptris/test/xsd/libxml2-cases/cos-ct-extends-1-3_0.xsd +51 -0
  185. data/vendor-src/libleptris/test/xsd/libxml2-cases/cos-st-restricts-1-2-err_0.xml +3 -0
  186. data/vendor-src/libleptris/test/xsd/libxml2-cases/cos-st-restricts-1-2-err_0.xsd +30 -0
  187. data/vendor-src/libleptris/test/xsd/libxml2-cases/ct-sc-nobase_0.xml +4 -0
  188. data/vendor-src/libleptris/test/xsd/libxml2-cases/ct-sc-nobase_0.xsd +24 -0
  189. data/vendor-src/libleptris/test/xsd/libxml2-cases/date-whitespace_0.xml +29 -0
  190. data/vendor-src/libleptris/test/xsd/libxml2-cases/date-whitespace_0.xsd +20 -0
  191. data/vendor-src/libleptris/test/xsd/libxml2-cases/date-whitespace_1.xml +33 -0
  192. data/vendor-src/libleptris/test/xsd/libxml2-cases/date_0.xml +27 -0
  193. data/vendor-src/libleptris/test/xsd/libxml2-cases/date_0.xsd +122 -0
  194. data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-1.xml +37 -0
  195. data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-1.xsd +29 -0
  196. data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-1_0.xml +24 -0
  197. data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-1_1.xsd +19 -0
  198. data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-2_0.xml +14 -0
  199. data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-2_1.xsd +18 -0
  200. data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-3_0.xml +17 -0
  201. data/vendor-src/libleptris/test/xsd/libxml2-cases/decimal-3_1.xsd +18 -0
  202. data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-extension-err_0.xml +9 -0
  203. data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-extension-err_0.xsd +22 -0
  204. data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-extension_0.xml +9 -0
  205. data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-extension_0.xsd +22 -0
  206. data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-restriction-2-1-1_0.xml +8 -0
  207. data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-restriction-2-1-1_0.xsd +56 -0
  208. data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-restriction-4-1-err_0.xml +8 -0
  209. data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-ok-restriction-4-1-err_0.xsd +69 -0
  210. data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-restriction-anyAttr_0.xml +12 -0
  211. data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-restriction-anyAttr_0.xsd +24 -0
  212. data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-restriction-anyType.xml +9 -0
  213. data/vendor-src/libleptris/test/xsd/libxml2-cases/derivation-restriction-anyType.xsd +22 -0
  214. data/vendor-src/libleptris/test/xsd/libxml2-cases/deter0_0.xml +5 -0
  215. data/vendor-src/libleptris/test/xsd/libxml2-cases/deter0_0.xsd +16 -0
  216. data/vendor-src/libleptris/test/xsd/libxml2-cases/dur_0.xml +13 -0
  217. data/vendor-src/libleptris/test/xsd/libxml2-cases/dur_0.xsd +72 -0
  218. data/vendor-src/libleptris/test/xsd/libxml2-cases/elem0_0.xml +3 -0
  219. data/vendor-src/libleptris/test/xsd/libxml2-cases/elem0_0.xsd +16 -0
  220. data/vendor-src/libleptris/test/xsd/libxml2-cases/element-err_0.xml +4 -0
  221. data/vendor-src/libleptris/test/xsd/libxml2-cases/element-err_0.xsd +39 -0
  222. data/vendor-src/libleptris/test/xsd/libxml2-cases/element-minmax-err_0.xml +5 -0
  223. data/vendor-src/libleptris/test/xsd/libxml2-cases/element-minmax-err_0.xsd +11 -0
  224. data/vendor-src/libleptris/test/xsd/libxml2-cases/empty-value_0.xml +2 -0
  225. data/vendor-src/libleptris/test/xsd/libxml2-cases/empty-value_1.xml +2 -0
  226. data/vendor-src/libleptris/test/xsd/libxml2-cases/empty-value_1.xsd +24 -0
  227. data/vendor-src/libleptris/test/xsd/libxml2-cases/empty_0.xml +1 -0
  228. data/vendor-src/libleptris/test/xsd/libxml2-cases/empty_0.xsd +13 -0
  229. data/vendor-src/libleptris/test/xsd/libxml2-cases/empty_1.xsd +9 -0
  230. data/vendor-src/libleptris/test/xsd/libxml2-cases/extension0_0.xml +7 -0
  231. data/vendor-src/libleptris/test/xsd/libxml2-cases/extension0_0.xsd +20 -0
  232. data/vendor-src/libleptris/test/xsd/libxml2-cases/extension1_0.xml +1 -0
  233. data/vendor-src/libleptris/test/xsd/libxml2-cases/extension1_0.xsd +17 -0
  234. data/vendor-src/libleptris/test/xsd/libxml2-cases/extension1_1.xml +1 -0
  235. data/vendor-src/libleptris/test/xsd/libxml2-cases/extension1_2.xml +1 -0
  236. data/vendor-src/libleptris/test/xsd/libxml2-cases/extension2_0.xml +4 -0
  237. data/vendor-src/libleptris/test/xsd/libxml2-cases/extension2_1.xsd +17 -0
  238. data/vendor-src/libleptris/test/xsd/libxml2-cases/facet-unionST-err1_0.xml +4 -0
  239. data/vendor-src/libleptris/test/xsd/libxml2-cases/facet-unionST-err1_0.xsd +27 -0
  240. data/vendor-src/libleptris/test/xsd/libxml2-cases/facet-whiteSpace_0.xml +7 -0
  241. data/vendor-src/libleptris/test/xsd/libxml2-cases/facet-whiteSpace_0.xsd +12 -0
  242. data/vendor-src/libleptris/test/xsd/libxml2-cases/group0_0.xml +3 -0
  243. data/vendor-src/libleptris/test/xsd/libxml2-cases/group0_0.xsd +18 -0
  244. data/vendor-src/libleptris/test/xsd/libxml2-cases/hexbinary_0.xml +20 -0
  245. data/vendor-src/libleptris/test/xsd/libxml2-cases/hexbinary_0.xsd +35 -0
  246. data/vendor-src/libleptris/test/xsd/libxml2-cases/hexbinary_1.xml +15 -0
  247. data/vendor-src/libleptris/test/xsd/libxml2-cases/idc-keyref-err1_0.xml +14 -0
  248. data/vendor-src/libleptris/test/xsd/libxml2-cases/idc-keyref-err1_1.xsd +53 -0
  249. data/vendor-src/libleptris/test/xsd/libxml2-cases/import-455953.xsd +24 -0
  250. data/vendor-src/libleptris/test/xsd/libxml2-cases/import-bad-1_0.imp +5 -0
  251. data/vendor-src/libleptris/test/xsd/libxml2-cases/import0_0.imp +13 -0
  252. data/vendor-src/libleptris/test/xsd/libxml2-cases/import0_0.xml +8 -0
  253. data/vendor-src/libleptris/test/xsd/libxml2-cases/import0_0.xsd +21 -0
  254. data/vendor-src/libleptris/test/xsd/libxml2-cases/import1_0.imp +8 -0
  255. data/vendor-src/libleptris/test/xsd/libxml2-cases/import1_0.xml +11 -0
  256. data/vendor-src/libleptris/test/xsd/libxml2-cases/import1_0.xsd +30 -0
  257. data/vendor-src/libleptris/test/xsd/libxml2-cases/import1_0b.imp +8 -0
  258. data/vendor-src/libleptris/test/xsd/libxml2-cases/import2_0.imp +24 -0
  259. data/vendor-src/libleptris/test/xsd/libxml2-cases/import2_0.xml +8 -0
  260. data/vendor-src/libleptris/test/xsd/libxml2-cases/import2_0.xsd +24 -0
  261. data/vendor-src/libleptris/test/xsd/libxml2-cases/include1_0.inc +28 -0
  262. data/vendor-src/libleptris/test/xsd/libxml2-cases/include1_0.xml +8 -0
  263. data/vendor-src/libleptris/test/xsd/libxml2-cases/include1_0.xsd +15 -0
  264. data/vendor-src/libleptris/test/xsd/libxml2-cases/include2_0.inc +17 -0
  265. data/vendor-src/libleptris/test/xsd/libxml2-cases/include2_0.xml +9 -0
  266. data/vendor-src/libleptris/test/xsd/libxml2-cases/include2_0.xsd +14 -0
  267. data/vendor-src/libleptris/test/xsd/libxml2-cases/include3_0.inc +5 -0
  268. data/vendor-src/libleptris/test/xsd/libxml2-cases/include3_0.xml +7 -0
  269. data/vendor-src/libleptris/test/xsd/libxml2-cases/include3_0.xsd +9 -0
  270. data/vendor-src/libleptris/test/xsd/libxml2-cases/issue303_0.xml +1 -0
  271. data/vendor-src/libleptris/test/xsd/libxml2-cases/issue303_0.xsd +19 -0
  272. data/vendor-src/libleptris/test/xsd/libxml2-cases/issue40_0.xml +3 -0
  273. data/vendor-src/libleptris/test/xsd/libxml2-cases/issue40_0.xsd +10 -0
  274. data/vendor-src/libleptris/test/xsd/libxml2-cases/issue491_0.xml +1 -0
  275. data/vendor-src/libleptris/test/xsd/libxml2-cases/issue491_0.xsd +18 -0
  276. data/vendor-src/libleptris/test/xsd/libxml2-cases/item_0.xml +6 -0
  277. data/vendor-src/libleptris/test/xsd/libxml2-cases/item_0.xsd +39 -0
  278. data/vendor-src/libleptris/test/xsd/libxml2-cases/item_1.xsd +42 -0
  279. data/vendor-src/libleptris/test/xsd/libxml2-cases/length1_0.xml +1 -0
  280. data/vendor-src/libleptris/test/xsd/libxml2-cases/length1_0.xsd +11 -0
  281. data/vendor-src/libleptris/test/xsd/libxml2-cases/length2_0.xml +5 -0
  282. data/vendor-src/libleptris/test/xsd/libxml2-cases/length2_0.xsd +14 -0
  283. data/vendor-src/libleptris/test/xsd/libxml2-cases/length3_0.xml +5 -0
  284. data/vendor-src/libleptris/test/xsd/libxml2-cases/length3_0.xsd +10 -0
  285. data/vendor-src/libleptris/test/xsd/libxml2-cases/list0_0.xml +6 -0
  286. data/vendor-src/libleptris/test/xsd/libxml2-cases/list0_0.xsd +13 -0
  287. data/vendor-src/libleptris/test/xsd/libxml2-cases/list0_1.xml +3 -0
  288. data/vendor-src/libleptris/test/xsd/libxml2-cases/list0_1.xsd +13 -0
  289. data/vendor-src/libleptris/test/xsd/libxml2-cases/list0_2.xml +4 -0
  290. data/vendor-src/libleptris/test/xsd/libxml2-cases/mixed0_0.xml +1 -0
  291. data/vendor-src/libleptris/test/xsd/libxml2-cases/mixed0_0.xsd +5 -0
  292. data/vendor-src/libleptris/test/xsd/libxml2-cases/mixed1_0.xml +1 -0
  293. data/vendor-src/libleptris/test/xsd/libxml2-cases/mixed1_0.xsd +7 -0
  294. data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_0.xml +2 -0
  295. data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_0.xsd +16 -0
  296. data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_1.xml +2 -0
  297. data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_1.xsd +16 -0
  298. data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_2.xml +2 -0
  299. data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_3.xml +2 -0
  300. data/vendor-src/libleptris/test/xsd/libxml2-cases/ns0_4.xml +3 -0
  301. data/vendor-src/libleptris/test/xsd/libxml2-cases/ns1_0.xml +2 -0
  302. data/vendor-src/libleptris/test/xsd/libxml2-cases/ns1_0.xsd +3 -0
  303. data/vendor-src/libleptris/test/xsd/libxml2-cases/ns2_0.xml +1 -0
  304. data/vendor-src/libleptris/test/xsd/libxml2-cases/ns2_0.xsd +15 -0
  305. data/vendor-src/libleptris/test/xsd/libxml2-cases/nvdcve_0.xml +5235 -0
  306. data/vendor-src/libleptris/test/xsd/libxml2-cases/nvdcve_0.xsd +498 -0
  307. data/vendor-src/libleptris/test/xsd/libxml2-cases/oss-fuzz-51295_0.xml +1 -0
  308. data/vendor-src/libleptris/test/xsd/libxml2-cases/oss-fuzz-51295_0.xsd +4 -0
  309. data/vendor-src/libleptris/test/xsd/libxml2-cases/po0_0.xml +32 -0
  310. data/vendor-src/libleptris/test/xsd/libxml2-cases/po0_0.xsd +59 -0
  311. data/vendor-src/libleptris/test/xsd/libxml2-cases/po1_0.xml +34 -0
  312. data/vendor-src/libleptris/test/xsd/libxml2-cases/po1_0.xsd +64 -0
  313. data/vendor-src/libleptris/test/xsd/libxml2-cases/poschargrp0_0.xml +2 -0
  314. data/vendor-src/libleptris/test/xsd/libxml2-cases/poschargrp0_0.xsd +14 -0
  315. data/vendor-src/libleptris/test/xsd/libxml2-cases/regexp-char-ref_0.xml +7 -0
  316. data/vendor-src/libleptris/test/xsd/libxml2-cases/regexp-char-ref_0.xsd +20 -0
  317. data/vendor-src/libleptris/test/xsd/libxml2-cases/regexp-char-ref_1.xsd +20 -0
  318. data/vendor-src/libleptris/test/xsd/libxml2-cases/restrict-CT-attr-ref_0.xml +3 -0
  319. data/vendor-src/libleptris/test/xsd/libxml2-cases/restrict-CT-attr-ref_0.xsd +30 -0
  320. data/vendor-src/libleptris/test/xsd/libxml2-cases/restriction-attr1_0.xml +3 -0
  321. data/vendor-src/libleptris/test/xsd/libxml2-cases/restriction-attr1_0.xsd +18 -0
  322. data/vendor-src/libleptris/test/xsd/libxml2-cases/restriction-enum-1_0.xml +7 -0
  323. data/vendor-src/libleptris/test/xsd/libxml2-cases/restriction-enum-1_1.xsd +19 -0
  324. data/vendor-src/libleptris/test/xsd/libxml2-cases/restriction0_0.xml +5 -0
  325. data/vendor-src/libleptris/test/xsd/libxml2-cases/restriction0_0.xsd +21 -0
  326. data/vendor-src/libleptris/test/xsd/libxml2-cases/scc-no-xmlns_0.xml +3 -0
  327. data/vendor-src/libleptris/test/xsd/libxml2-cases/scc-no-xmlns_0.xsd +11 -0
  328. data/vendor-src/libleptris/test/xsd/libxml2-cases/scc-no-xsi_0.xml +3 -0
  329. data/vendor-src/libleptris/test/xsd/libxml2-cases/scc-no-xsi_0.xsd +11 -0
  330. data/vendor-src/libleptris/test/xsd/libxml2-cases/seq-dubl-elem1_0.xml +7 -0
  331. data/vendor-src/libleptris/test/xsd/libxml2-cases/seq-dubl-elem1_0.xsd +25 -0
  332. data/vendor-src/libleptris/test/xsd/libxml2-cases/seq0_0.xml +61 -0
  333. data/vendor-src/libleptris/test/xsd/libxml2-cases/seq0_0.xsd +64 -0
  334. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute1_0.xml +2 -0
  335. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute1_0.xsd +13 -0
  336. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute2_0.xml +2 -0
  337. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute2_0.xsd +13 -0
  338. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-1_0.xml +2 -0
  339. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-1_0.xsd +15 -0
  340. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-2-form_0.xml +2 -0
  341. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-2-form_0.xsd +16 -0
  342. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-2-st_0.xml +2 -0
  343. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-2-st_0.xsd +22 -0
  344. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-2-type_0.xml +2 -0
  345. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute3-2-type_0.xsd +16 -0
  346. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute4_0.xml +2 -0
  347. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-attribute4_0.xsd +17 -0
  348. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element1_0.xml +2 -0
  349. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element1_0.xsd +9 -0
  350. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element2-1_0.xml +2 -0
  351. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element2-1_0.xsd +17 -0
  352. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element2-2_0.xml +2 -0
  353. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element2-2_0.xsd +48 -0
  354. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element3_0.xml +2 -0
  355. data/vendor-src/libleptris/test/xsd/libxml2-cases/src-element3_0.xsd +29 -0
  356. data/vendor-src/libleptris/test/xsd/libxml2-cases/subst-group-1_0.xsd +45 -0
  357. data/vendor-src/libleptris/test/xsd/libxml2-cases/subst-group-1_1.xml +12 -0
  358. data/vendor-src/libleptris/test/xsd/libxml2-cases/union2_1.xml +6 -0
  359. data/vendor-src/libleptris/test/xsd/libxml2-cases/union2_1.xsd +21 -0
  360. data/vendor-src/libleptris/test/xsd/libxml2-cases/union_0_0.xml +8 -0
  361. data/vendor-src/libleptris/test/xsd/libxml2-cases/union_0_0.xsd +53 -0
  362. data/vendor-src/libleptris/test/xsd/libxml2-cases/v012-reader-schema-main.xsd +6 -0
  363. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-complexTypes.xsd +37 -0
  364. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first0_0.xml +33 -0
  365. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first0_0.xsd +67 -0
  366. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first1_0.xml +33 -0
  367. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first1_0.xsd +47 -0
  368. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first2_0.xml +33 -0
  369. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first2_0.xsd +89 -0
  370. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first3_0.xml +33 -0
  371. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first3_0.xsd +68 -0
  372. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first4_0.xml +33 -0
  373. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first4_0.xsd +150 -0
  374. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first4_1.xml +33 -0
  375. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first4_2.xml +33 -0
  376. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first5_0.xml +33 -0
  377. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-first5_0.xsd +85 -0
  378. data/vendor-src/libleptris/test/xsd/libxml2-cases/vdv-simpleTypes.xsd +38 -0
  379. data/vendor-src/libleptris/test/xsd/libxml2-cases/xml.xsd +117 -0
  380. data/vendor-src/libleptris/test/xsd/libxml2-cases/xsd-list-itemType_0.xml +3 -0
  381. data/vendor-src/libleptris/test/xsd/libxml2-cases/xsd-list-itemType_0.xsd +14 -0
  382. data/vendor-src/libleptris/test/xsd/libxml2-cases/xsd-simpleType-varieties_0.xml +8 -0
  383. data/vendor-src/libleptris/test/xsd/libxml2-cases/xsd-simpleType-varieties_0.xsd +45 -0
  384. data/vendor-src/libleptris/test/xsd/test_xsd_compile.cpp +154 -0
  385. data/vendor-src/libleptris/vcpkg.json +1 -1
  386. metadata +356 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 44f00da545382eef1ba06a526478752ab7f2fb16ecc609a60df9fd88f1cd46aa
4
- data.tar.gz: bcc75b40350199bdb1db2dd502d1d6fa1f0398f499bbda57e2aaf4bfe1c4901f
3
+ metadata.gz: a6c90b838dcbd3165155494321e171c57f470145b959ee40656f40dce4f84897
4
+ data.tar.gz: 6c7e1f5205388ca6a0f476378e04ca235f48134e02b25873392d59b013a77698
5
5
  SHA512:
6
- metadata.gz: 75b5e89df9de5a924bfdcce746668b6a2f81114d459de3ec9b8aae72c2acb11a6c1c26c1bd12b2a1227fc19d52873004badd77298ba9f4437877679a8dfa52c2
7
- data.tar.gz: b1ed2f7fef77ba8900ab4a323cc1915ef501fd6cc11078b3912187349b7c62b13fb58766c623ad0db6f1a67ed71bcab19c9d5740785a951867769ea8b18d4852
6
+ metadata.gz: ba48e81789e2dfc95c4c4da2c1c11e7609f2b0f32c9449d65681150ceeb169696bc07a2af29cf12be6514231973a41f580307ec50300dd6b7669ba8489a282ba
7
+ data.tar.gz: 670b0d55d9fc1a1eb3e4ce595e8505fab58be7803618a39229adfba8ba5a4d7204bdb4b807888022b92ed3f00d93dd6374b73997b01368a1bd584212cc3bc027
data/CHANGELOG.md CHANGED
@@ -1,3 +1,49 @@
1
+ ## [1.9.317.1] - 2026-10-08
2
+
3
+ ### Fixed
4
+
5
+ - **The published 1.9.317.0 gem predates PR #395**: a parallel
6
+ release race published 1.9.317.0 from the carrier-folds ride
7
+ (bd81bdf) before the `:unqualified` ns form merged — this patch
8
+ release carries the #1560 `ns: :unqualified` DSL (element rows
9
+ bind the unwritten spelling under both namespace-less and
10
+ default-xmlns documents; the serialize→re-parse→re-walk
11
+ round-trip agrees) and the #1565 nested-capture serialization
12
+ pin to the published artifact line. Main already carried both
13
+ (PR #395); only the gem lagged.
14
+
15
+ ## [1.9.317.0] - 2026-10-08
16
+
17
+ ### Added — engine sync (libleptris 1.9.315-1.9.317)
18
+
19
+ - **Unqualified-only ns form for child rows (1.9.317, #1560)**:
20
+ `ns: :unqualified` matches the UNWRITTEN spelling — an
21
+ unprefixed child binds under both a namespace-less document and
22
+ a default-`xmlns` document, and prefixed spellings never bind
23
+ (the `NS_ANY` superset lutaml-model#932 had to settle for). The
24
+ form keys on the spelling, not the URI, so
25
+ serialize→re-parse→re-walk round-trips agree: a default-ns child
26
+ serializes bare and still re-binds. Element-row only (attributes
27
+ have no unprefixed namespace by XML rules). `PLAN_NS_UNQUALIFIED
28
+ = 3` attached; all three shapes + the round-trip spec-pinned.
29
+
30
+ ### Fixed — engine sync (1.9.316)
31
+
32
+ - **Nested captures emit their own rows (#1565)**: a captured
33
+ child's rows resolve against the CAPTURING row's
34
+ `child_plan_index` plan, so a child bound by a nested row (the
35
+ `w:font`-in-`w:fonts` shape) serializes its own attribute and
36
+ child rows instead of silently vanishing — pinned through
37
+ `Descriptor#serialize`.
38
+
39
+ ### Engine sync (1.9.315)
40
+
41
+ - Carrier-by-pointer node identity for the higher-order argument
42
+ channel (QT3 fold-left-009/016): element members keep their node
43
+ pointer, `intersect` dedups by node, single-element results ride
44
+ the carrier. Engine-internal to the XQuery engine — the binding
45
+ contract is unchanged (suite carries it).
46
+
1
47
  ## [1.9.314.0] - 2026-10-07
2
48
 
3
49
  ### Changed — engine sync (libleptris 1.9.314)
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.317"
11
+ LIBLEPTRIS_VERSION = "1.9.318"
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leptris
4
- VERSION = "1.9.317.0"
4
+ VERSION = "1.9.318.0"
5
5
  end
@@ -175,11 +175,15 @@ class Leptris::XML::Descriptor
175
175
  case ns
176
176
  when nil, :none then [Leptris::XML::FFI::PLAN_NS_NONE, nil]
177
177
  when :any then [Leptris::XML::FFI::PLAN_NS_ANY, nil]
178
+ when :unqualified
179
+ # libleptris 1.9.317 (#1560): the UNWRITTEN spelling.
180
+ [Leptris::XML::FFI::PLAN_NS_UNQUALIFIED, nil]
178
181
  when Hash
179
182
  [Leptris::XML::FFI::PLAN_NS_EXACT,
180
183
  anchor_string(anchors, ns.fetch(:exact))]
181
184
  else
182
- raise ArgumentError, "ns must be :none, :any, or {exact: uri}"
185
+ raise ArgumentError,
186
+ "ns must be :none, :any, :unqualified, or {exact: uri}"
183
187
  end
184
188
  ep[:ns_form] = ns_form
185
189
  ep[:ns_uri] = ns_uri
@@ -230,10 +234,14 @@ class Leptris::XML::Descriptor
230
234
  # defaults to NONE for backward compatibility. WILDCARD
231
235
  # rows (#1552) read an explicit :ns through pad0 (an
232
236
  # explicit :none filters no-namespace remainder alone;
233
- # unset stays the catch-all ANY default).
237
+ # unset stays the catch-all ANY default). :unqualified
238
+ # (libleptris 1.9.317, #1560) matches the unwritten
239
+ # spelling on element rows — element-row only (attributes
240
+ # have no unprefixed namespace by XML rules).
234
241
  cp[:ns_form] =
235
242
  case row[:ns]
236
243
  when :any then Leptris::XML::FFI::PLAN_NS_ANY
244
+ when :unqualified then Leptris::XML::FFI::PLAN_NS_UNQUALIFIED
237
245
  when Hash then Leptris::XML::FFI::PLAN_NS_EXACT
238
246
  else Leptris::XML::FFI::PLAN_NS_NONE
239
247
  end
@@ -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
@@ -380,6 +381,13 @@ module Leptris
380
381
  PLAN_NS_NONE = 0
381
382
  PLAN_NS_EXACT = 1
382
383
  PLAN_NS_ANY = 2
384
+ # libleptris 1.9.317 (#1560): matches the UNWRITTEN spelling
385
+ # on element rows — no written prefix, regardless of the
386
+ # effective namespace URI (binds under both a namespace-less
387
+ # and a default-xmlns document; prefixed spellings never
388
+ # bind). Attributes have no unprefixed namespace by XML
389
+ # rules, so the form is element-row only.
390
+ PLAN_NS_UNQUALIFIED = 3
383
391
 
384
392
  PLAN_VALUE_ELEMENT = 0
385
393
  PLAN_VALUE_SCALAR = 1
@@ -1276,6 +1284,18 @@ attach_function :leptris_parse_string,
1276
1284
  :column, :int
1277
1285
  end
1278
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
+
1279
1299
  attach_function :leptris_rng_parse,
1280
1300
  [:string, :size_t, :pointer], :leptris_relaxng
1281
1301
  attach_function :leptris_rng_parse_file,
@@ -0,0 +1,61 @@
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
+ # A compiled XSD schema (libleptris >= 1.9.318, #1075 tier-1):
13
+ # the compilation surface — a declaration census and schema-level
14
+ # error reporting. Validation is a later tier and not exposed yet.
15
+ #
16
+ # schema = Leptris::XML::XSD.compile(xsd_text)
17
+ # schema.declaration_count # => top-level schema declarations
18
+ # schema.error # => nil, or the engine's message
19
+ #
20
+ class Schema
21
+ # GC-managed compiled handle.
22
+ class Handle < ::FFI::AutoPointer
23
+ def self.release(ptr)
24
+ Leptris::XML::FFI.leptris_xsd_free(ptr)
25
+ end
26
+ end
27
+
28
+ # Compile a schema from XML text. Raises Error when the text is
29
+ # not usable at all (not well-formed, no root); schema-level
30
+ # problems compile to a handle whose #error carries the detail
31
+ # — the tier-1 contract.
32
+ def self.compile(schema_xml)
33
+ xml = schema_xml.to_s
34
+ status = ::FFI::MemoryPointer.new(:int)
35
+ raw = Leptris::XML::FFI.leptris_xsd_compile(xml, xml.bytesize, status)
36
+ if raw.null?
37
+ raise Leptris::XML::Error,
38
+ "schema compile failed (status #{status.read_int}): " \
39
+ "#{Leptris::XML::FFI.leptris_last_error}"
40
+ end
41
+ new(Handle.new(raw))
42
+ end
43
+
44
+ def initialize(handle)
45
+ @handle = handle
46
+ end
47
+
48
+ # Number of top-level schema declarations the compiler
49
+ # recognized (elements, types, groups, ...).
50
+ def declaration_count
51
+ Leptris::XML::FFI.leptris_xsd_declaration_count(@handle)
52
+ end
53
+
54
+ # The engine's schema-level error message, or nil when the
55
+ # schema compiled cleanly.
56
+ def error
57
+ msg = Leptris::XML::FFI.leptris_xsd_error(@handle)
58
+ msg.nil? || msg.empty? ? nil : msg
59
+ end
60
+ end
61
+ 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/vendor-src/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  Sources vendored in this gem (recompile rights; the ruby
2
2
  variant builds them at install via extconf.rb):
3
3
 
4
- - libleptris v1.9.317
4
+ - libleptris v1.9.318
5
5
  - utf8proc v2.11.0
6
6
 
7
7
  Rebuild by hand:
@@ -1,5 +1,26 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [1.9.318] - 2026-10-08
4
+
5
+ ### Performance
6
+
7
+ - **Per-thread small-span arena recycle — the tiny-doc fixed row
8
+ (#1436, PR #1580).** The global retain tier deliberately skipped
9
+ spans below 256 KB, so every small document paid full malloc/free
10
+ bookkeeping per create/destroy cycle; the quiet-hardware profile
11
+ named that cycle as the heart of the ~185 ns/doc tiny-doc row. A
12
+ per-thread LIFO cache inside the arena's retain seam hands the
13
+ previous document's span back with no allocator, no spinlock, and
14
+ no cross-thread traffic. Three standing contracts preserved:
15
+ exact-size take (the fail-fast capacity never silently widens),
16
+ custom-allocator stand-down (hooked accounting sees every
17
+ malloc/free pair), and ASAN bypass with thread-cleanup drain.
18
+ Measured on bench_doc_lifecycle (interleaved A/B, Release):
19
+ tight cycle 183/203/183 → 166/159/159 ns/doc (~15% off the
20
+ fixed row).
21
+
22
+
23
+
3
24
  ## [1.9.317] - 2026-10-07
4
25
 
5
26
  ### Added
@@ -3,7 +3,7 @@
3
3
  cmake_minimum_required(VERSION 3.20)
4
4
 
5
5
  project(leptris
6
- VERSION 1.9.317
6
+ VERSION 1.9.318
7
7
  DESCRIPTION "Fast XML parser and XPath evaluator in pure C"
8
8
  LANGUAGES C CXX
9
9
  )
@@ -27,6 +27,7 @@ set(LEPTRIS_SOURCES
27
27
  leptris/sch/schematron.c
28
28
  leptris/diff/diff.c
29
29
  leptris/rng/parse.c
30
+ leptris/xsd/compile.c
30
31
  leptris/rng/rng_public.c
31
32
  leptris/rng/rng_regex.c
32
33
  leptris/rng/validate.c
@@ -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,33 @@ 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);
885
912
  /* Validate an instance document against the parsed schema
886
913
  * (phase-2 core subset: element/attribute/text/data/value/
887
914
  * 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 (or
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
- leptris_free_hook(base);
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]);
@@ -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
  /* ============================================================================
@@ -0,0 +1,121 @@
1
+ /* lib/src/leptris/xsd/compile.c — #1075 XSD tier 1, slice 1: the
2
+ * compilation surface. Parses schema text through the standard XML
3
+ * parser and models the top-level declaration set. Later slices
4
+ * grow the model (datatypes, facets, content models, identity
5
+ * constraints) — this slice's contract is the API shape, the
6
+ * xs:schema identity check, and the declaration enumeration. */
7
+ #include <stdlib.h>
8
+ #include <string.h>
9
+
10
+ #include "../../include/leptris.h"
11
+
12
+ #define XSD_NS "http://www.w3.org/2001/XMLSchema"
13
+
14
+ struct leptris_xsd_schema {
15
+ size_t declaration_count;
16
+ char* error;
17
+ };
18
+
19
+ static void xsd_set_error(struct leptris_xsd_schema* s, const char* msg) {
20
+ free(s->error);
21
+ s->error = NULL;
22
+ if (msg) {
23
+ size_t n = strlen(msg) + 1;
24
+ s->error = (char*)malloc(n);
25
+ if (s->error) memcpy(s->error, msg, n);
26
+ }
27
+ }
28
+
29
+ /* A top-level schema-language declaration component. */
30
+ static int xsd_is_declaration(const char* local, const char* uri) {
31
+ if (uri && strcmp(uri, XSD_NS) != 0) return 0;
32
+ if (!local) return 0;
33
+ static const char* names[] = {
34
+ "element", "attribute", "simpleType", "complexType",
35
+ "group", "attributeGroup", "notation", "include",
36
+ "import", "redefine", NULL
37
+ };
38
+ for (int i = 0; names[i]; i++)
39
+ if (strcmp(local, names[i]) == 0) return 1;
40
+ return 0;
41
+ }
42
+
43
+ LEPTRIS_API LeptrisXsdSchema leptris_xsd_compile(const char* xsd_text,
44
+ size_t len,
45
+ LeptrisStatus* status) {
46
+ if (status) *status = LEPTRIS_OK;
47
+ if (!xsd_text || len == 0) {
48
+ if (status) *status = LEPTRIS_ERROR_PARSE;
49
+ return NULL;
50
+ }
51
+
52
+ struct leptris_xsd_schema* s =
53
+ (struct leptris_xsd_schema*)calloc(1, sizeof(*s));
54
+ if (!s) {
55
+ if (status) *status = LEPTRIS_ERROR_MEMORY;
56
+ return NULL;
57
+ }
58
+
59
+ LeptrisDocument doc = leptris_parse_string(xsd_text, len, status);
60
+ if (!doc) {
61
+ xsd_set_error(s, "schema document is not well-formed XML");
62
+ goto fail;
63
+ }
64
+
65
+ LeptrisElement root = leptris_document_root(doc);
66
+ if (!root) {
67
+ xsd_set_error(s, "schema document has no root element");
68
+ goto fail;
69
+ }
70
+
71
+ const char* local = NULL;
72
+ const char* prefix = NULL;
73
+ const char* uri = NULL;
74
+ leptris_element_expanded_name(root, &local, &prefix, &uri);
75
+ /* Accept the XML Schema namespace under any prefix, and the
76
+ * unprefixed spelling libxml2 fixtures use without a default
77
+ * xmlns (compilation is namespace-driven from here on). */
78
+ if (!local || strcmp(local, "schema") != 0 ||
79
+ (uri && strcmp(uri, XSD_NS) != 0)) {
80
+ xsd_set_error(s, "root element is not xs:schema");
81
+ goto fail;
82
+ }
83
+
84
+ for (LeptrisNodeRef n =
85
+ leptris_node_first_child(leptris_element_as_node(root));
86
+ n; n = leptris_node_next_sibling(n)) {
87
+ if (leptris_node_get_type(n) != LEPTRIS_NODE_TYPE_ELEMENT)
88
+ continue;
89
+ leptris_element_expanded_name((LeptrisElement)n, &local, &prefix,
90
+ &uri);
91
+ if (xsd_is_declaration(local, uri))
92
+ s->declaration_count++;
93
+ }
94
+
95
+ leptris_document_free(doc);
96
+ return s;
97
+
98
+ fail:
99
+ if (doc) leptris_document_free(doc);
100
+ if (status) *status = LEPTRIS_ERROR_PARSE;
101
+ /* Failure returns an error-carrying handle (the documented
102
+ * contract): leptris_xsd_error says why, free it the same way. */
103
+ return (LeptrisXsdSchema)s;
104
+ }
105
+
106
+ LEPTRIS_API void leptris_xsd_free(LeptrisXsdSchema schema) {
107
+ struct leptris_xsd_schema* s = (struct leptris_xsd_schema*)schema;
108
+ if (!s) return;
109
+ free(s->error);
110
+ free(s);
111
+ }
112
+
113
+ LEPTRIS_API size_t leptris_xsd_declaration_count(LeptrisXsdSchema schema) {
114
+ if (!schema) return 0;
115
+ return ((struct leptris_xsd_schema*)schema)->declaration_count;
116
+ }
117
+
118
+ LEPTRIS_API const char* leptris_xsd_error(LeptrisXsdSchema schema) {
119
+ if (!schema) return NULL;
120
+ return ((struct leptris_xsd_schema*)schema)->error;
121
+ }
@@ -116,6 +116,9 @@ leptris_add_test(test_text_borrowed dom/test_text_borrowed.cpp)
116
116
  leptris_add_test(test_compact dom/test_compact.cpp)
117
117
  leptris_add_test(test_digest dom/test_digest.cpp)
118
118
  leptris_add_test(test_rng rng/test_rng.cpp)
119
+ leptris_add_test(test_xsd_compile xsd/test_xsd_compile.cpp)
120
+ target_compile_definitions(test_xsd_compile PRIVATE
121
+ LEPTRIS_XSD_CASES_DIR="${CMAKE_CURRENT_SOURCE_DIR}/xsd/libxml2-cases")
119
122
  target_compile_definitions(test_rng PRIVATE
120
123
  LEPTRIS_RNG_INCLUDE_DIR="${CMAKE_CURRENT_SOURCE_DIR}/rng/include-cases")
121
124
  leptris_add_test(test_rng_corpus rng/test_rng_corpus.cpp)