brewdoc-linux-x64-glibc 0.0.0-stage → 0.3.2

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 (576) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +128 -2
  3. package/binary/_internal/PIL/_avif.cpython-312-x86_64-linux-gnu.so +0 -0
  4. package/binary/_internal/PIL/_imaging.cpython-312-x86_64-linux-gnu.so +0 -0
  5. package/binary/_internal/PIL/_imagingcms.cpython-312-x86_64-linux-gnu.so +0 -0
  6. package/binary/_internal/PIL/_imagingft.cpython-312-x86_64-linux-gnu.so +0 -0
  7. package/binary/_internal/PIL/_imagingmath.cpython-312-x86_64-linux-gnu.so +0 -0
  8. package/binary/_internal/PIL/_imagingtk.cpython-312-x86_64-linux-gnu.so +0 -0
  9. package/binary/_internal/PIL/_webp.cpython-312-x86_64-linux-gnu.so +0 -0
  10. package/binary/_internal/_cffi_backend.cpython-312-x86_64-linux-gnu.so +0 -0
  11. package/binary/_internal/_quickjs.abi3.so +0 -0
  12. package/binary/_internal/base_library.zip +0 -0
  13. package/binary/_internal/brewdoc/_urljs/glue.js +858 -0
  14. package/binary/_internal/brewdoc/_vendor/THIRD_PARTY_NOTICES.txt +342 -0
  15. package/binary/_internal/brewdoc/_vendor/linkedom-worker.js +12650 -0
  16. package/binary/_internal/brewdoc-0.3.2.dist-info/INSTALLER +1 -0
  17. package/binary/_internal/brewdoc-0.3.2.dist-info/METADATA +157 -0
  18. package/binary/_internal/brewdoc-0.3.2.dist-info/RECORD +30 -0
  19. package/binary/_internal/brewdoc-0.3.2.dist-info/REQUESTED +0 -0
  20. package/binary/_internal/brewdoc-0.3.2.dist-info/WHEEL +4 -0
  21. package/binary/_internal/brewdoc-0.3.2.dist-info/direct_url.json +1 -0
  22. package/binary/_internal/brewdoc-0.3.2.dist-info/entry_points.txt +2 -0
  23. package/binary/_internal/brewdoc-0.3.2.dist-info/licenses/LICENSE +21 -0
  24. package/binary/_internal/brewdoc-0.3.2.dist-info/uv_cache.json +1 -0
  25. package/binary/_internal/cffi-2.1.1.dist-info/INSTALLER +1 -0
  26. package/binary/_internal/cffi-2.1.1.dist-info/METADATA +67 -0
  27. package/binary/_internal/cffi-2.1.1.dist-info/RECORD +34 -0
  28. package/binary/_internal/cffi-2.1.1.dist-info/REQUESTED +0 -0
  29. package/binary/_internal/cffi-2.1.1.dist-info/WHEEL +6 -0
  30. package/binary/_internal/cffi-2.1.1.dist-info/entry_points.txt +5 -0
  31. package/binary/_internal/cffi-2.1.1.dist-info/licenses/LICENSE +23 -0
  32. package/binary/_internal/cffi-2.1.1.dist-info/top_level.txt +2 -0
  33. package/binary/_internal/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so +0 -0
  34. package/binary/_internal/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so +0 -0
  35. package/binary/_internal/charset_normalizer-3.5.2.dist-info/INSTALLER +1 -0
  36. package/binary/_internal/charset_normalizer-3.5.2.dist-info/METADATA +892 -0
  37. package/binary/_internal/charset_normalizer-3.5.2.dist-info/RECORD +24 -0
  38. package/binary/_internal/charset_normalizer-3.5.2.dist-info/REQUESTED +0 -0
  39. package/binary/_internal/charset_normalizer-3.5.2.dist-info/WHEEL +7 -0
  40. package/binary/_internal/charset_normalizer-3.5.2.dist-info/entry_points.txt +2 -0
  41. package/binary/_internal/charset_normalizer-3.5.2.dist-info/licenses/LICENSE +21 -0
  42. package/binary/_internal/charset_normalizer-3.5.2.dist-info/top_level.txt +1 -0
  43. package/binary/_internal/cryptography/hazmat/bindings/_rust.abi3.so +0 -0
  44. package/binary/_internal/cryptography-50.0.2.dist-info/INSTALLER +1 -0
  45. package/binary/_internal/cryptography-50.0.2.dist-info/METADATA +111 -0
  46. package/binary/_internal/cryptography-50.0.2.dist-info/RECORD +122 -0
  47. package/binary/_internal/cryptography-50.0.2.dist-info/REQUESTED +0 -0
  48. package/binary/_internal/cryptography-50.0.2.dist-info/WHEEL +5 -0
  49. package/binary/_internal/cryptography-50.0.2.dist-info/licenses/LICENSE +3 -0
  50. package/binary/_internal/cryptography-50.0.2.dist-info/licenses/LICENSE.APACHE +202 -0
  51. package/binary/_internal/cryptography-50.0.2.dist-info/licenses/LICENSE.BSD +27 -0
  52. package/binary/_internal/cryptography-50.0.2.dist-info/sboms/cryptography-rust.cyclonedx.json +1365 -0
  53. package/binary/_internal/cryptography-50.0.2.dist-info/sboms/sbom.json +43 -0
  54. package/binary/_internal/libXau-154567c4.so.6.0.0 +0 -0
  55. package/binary/_internal/libavif-8a7f9d56.so.16.4.2 +0 -0
  56. package/binary/_internal/libbrotlicommon-53534446.so.1.2.0 +0 -0
  57. package/binary/_internal/libbrotlidec-7e5462ba.so.1.2.0 +0 -0
  58. package/binary/_internal/libfreetype-9fc94c80.so.6.20.6 +0 -0
  59. package/binary/_internal/libgcc_s.so.1 +0 -0
  60. package/binary/_internal/libharfbuzz-172d1f63.so.0.61421.0 +0 -0
  61. package/binary/_internal/libjpeg-31e2ca52.so.62.4.0 +0 -0
  62. package/binary/_internal/liblcms2-dade1fbf.so.2.0.19 +0 -0
  63. package/binary/_internal/liblzma-2be87c3e.so.5.8.3 +0 -0
  64. package/binary/_internal/libopenjp2-b07f72ad.so.2.5.4 +0 -0
  65. package/binary/_internal/libpng16-abb096d5.so.16.58.0 +0 -0
  66. package/binary/_internal/libpython3.12.so.1.0 +0 -0
  67. package/binary/_internal/libsharpyuv-0066295b.so.0.1.2 +0 -0
  68. package/binary/_internal/libstdc++.so.6 +0 -0
  69. package/binary/_internal/libtiff-fc87e79d.so.6.2.0 +0 -0
  70. package/binary/_internal/libwebp-51b0b3f7.so.7.2.0 +0 -0
  71. package/binary/_internal/libwebpdemux-9fe2abcc.so.2.0.17 +0 -0
  72. package/binary/_internal/libwebpmux-8fb1c9f6.so.3.1.2 +0 -0
  73. package/binary/_internal/libxcb-ad31f5a3.so.1.1.0 +0 -0
  74. package/binary/_internal/libz.so.1 +0 -0
  75. package/binary/_internal/libzstd-44be1190.so.1.5.7 +0 -0
  76. package/binary/_internal/pdfminer/cmap/78-EUC-H.json.gz +0 -0
  77. package/binary/_internal/pdfminer/cmap/78-EUC-V.json.gz +0 -0
  78. package/binary/_internal/pdfminer/cmap/78-H.json.gz +0 -0
  79. package/binary/_internal/pdfminer/cmap/78-RKSJ-H.json.gz +0 -0
  80. package/binary/_internal/pdfminer/cmap/78-RKSJ-V.json.gz +0 -0
  81. package/binary/_internal/pdfminer/cmap/78-V.json.gz +0 -0
  82. package/binary/_internal/pdfminer/cmap/78ms-RKSJ-H.json.gz +0 -0
  83. package/binary/_internal/pdfminer/cmap/78ms-RKSJ-V.json.gz +0 -0
  84. package/binary/_internal/pdfminer/cmap/83pv-RKSJ-H.json.gz +0 -0
  85. package/binary/_internal/pdfminer/cmap/83pv-RKSJ-V.json.gz +0 -0
  86. package/binary/_internal/pdfminer/cmap/90ms-RKSJ-H.json.gz +0 -0
  87. package/binary/_internal/pdfminer/cmap/90ms-RKSJ-V.json.gz +0 -0
  88. package/binary/_internal/pdfminer/cmap/90msp-RKSJ-H.json.gz +0 -0
  89. package/binary/_internal/pdfminer/cmap/90msp-RKSJ-V.json.gz +0 -0
  90. package/binary/_internal/pdfminer/cmap/90pv-RKSJ-H.json.gz +0 -0
  91. package/binary/_internal/pdfminer/cmap/90pv-RKSJ-V.json.gz +0 -0
  92. package/binary/_internal/pdfminer/cmap/Add-H.json.gz +0 -0
  93. package/binary/_internal/pdfminer/cmap/Add-RKSJ-H.json.gz +0 -0
  94. package/binary/_internal/pdfminer/cmap/Add-RKSJ-V.json.gz +0 -0
  95. package/binary/_internal/pdfminer/cmap/Add-V.json.gz +0 -0
  96. package/binary/_internal/pdfminer/cmap/B5-H.json.gz +0 -0
  97. package/binary/_internal/pdfminer/cmap/B5-V.json.gz +0 -0
  98. package/binary/_internal/pdfminer/cmap/B5pc-H.json.gz +0 -0
  99. package/binary/_internal/pdfminer/cmap/B5pc-V.json.gz +0 -0
  100. package/binary/_internal/pdfminer/cmap/CNS-EUC-H.json.gz +0 -0
  101. package/binary/_internal/pdfminer/cmap/CNS-EUC-V.json.gz +0 -0
  102. package/binary/_internal/pdfminer/cmap/CNS1-H.json.gz +0 -0
  103. package/binary/_internal/pdfminer/cmap/CNS1-V.json.gz +0 -0
  104. package/binary/_internal/pdfminer/cmap/CNS2-H.json.gz +0 -0
  105. package/binary/_internal/pdfminer/cmap/CNS2-V.json.gz +0 -0
  106. package/binary/_internal/pdfminer/cmap/ETHK-B5-H.json.gz +0 -0
  107. package/binary/_internal/pdfminer/cmap/ETHK-B5-V.json.gz +0 -0
  108. package/binary/_internal/pdfminer/cmap/ETen-B5-H.json.gz +0 -0
  109. package/binary/_internal/pdfminer/cmap/ETen-B5-V.json.gz +0 -0
  110. package/binary/_internal/pdfminer/cmap/ETenms-B5-H.json.gz +0 -0
  111. package/binary/_internal/pdfminer/cmap/ETenms-B5-V.json.gz +0 -0
  112. package/binary/_internal/pdfminer/cmap/EUC-H.json.gz +0 -0
  113. package/binary/_internal/pdfminer/cmap/EUC-V.json.gz +0 -0
  114. package/binary/_internal/pdfminer/cmap/Ext-H.json.gz +0 -0
  115. package/binary/_internal/pdfminer/cmap/Ext-RKSJ-H.json.gz +0 -0
  116. package/binary/_internal/pdfminer/cmap/Ext-RKSJ-V.json.gz +0 -0
  117. package/binary/_internal/pdfminer/cmap/Ext-V.json.gz +0 -0
  118. package/binary/_internal/pdfminer/cmap/GB-EUC-H.json.gz +0 -0
  119. package/binary/_internal/pdfminer/cmap/GB-EUC-V.json.gz +0 -0
  120. package/binary/_internal/pdfminer/cmap/GB-H.json.gz +0 -0
  121. package/binary/_internal/pdfminer/cmap/GB-V.json.gz +0 -0
  122. package/binary/_internal/pdfminer/cmap/GBK-EUC-H.json.gz +0 -0
  123. package/binary/_internal/pdfminer/cmap/GBK-EUC-V.json.gz +0 -0
  124. package/binary/_internal/pdfminer/cmap/GBK2K-H.json.gz +0 -0
  125. package/binary/_internal/pdfminer/cmap/GBK2K-V.json.gz +0 -0
  126. package/binary/_internal/pdfminer/cmap/GBKp-EUC-H.json.gz +0 -0
  127. package/binary/_internal/pdfminer/cmap/GBKp-EUC-V.json.gz +0 -0
  128. package/binary/_internal/pdfminer/cmap/GBT-EUC-H.json.gz +0 -0
  129. package/binary/_internal/pdfminer/cmap/GBT-EUC-V.json.gz +0 -0
  130. package/binary/_internal/pdfminer/cmap/GBT-H.json.gz +0 -0
  131. package/binary/_internal/pdfminer/cmap/GBT-V.json.gz +0 -0
  132. package/binary/_internal/pdfminer/cmap/GBTpc-EUC-H.json.gz +0 -0
  133. package/binary/_internal/pdfminer/cmap/GBTpc-EUC-V.json.gz +0 -0
  134. package/binary/_internal/pdfminer/cmap/GBpc-EUC-H.json.gz +0 -0
  135. package/binary/_internal/pdfminer/cmap/GBpc-EUC-V.json.gz +0 -0
  136. package/binary/_internal/pdfminer/cmap/H.json.gz +0 -0
  137. package/binary/_internal/pdfminer/cmap/HKdla-B5-H.json.gz +0 -0
  138. package/binary/_internal/pdfminer/cmap/HKdla-B5-V.json.gz +0 -0
  139. package/binary/_internal/pdfminer/cmap/HKdlb-B5-H.json.gz +0 -0
  140. package/binary/_internal/pdfminer/cmap/HKdlb-B5-V.json.gz +0 -0
  141. package/binary/_internal/pdfminer/cmap/HKgccs-B5-H.json.gz +0 -0
  142. package/binary/_internal/pdfminer/cmap/HKgccs-B5-V.json.gz +0 -0
  143. package/binary/_internal/pdfminer/cmap/HKm314-B5-H.json.gz +0 -0
  144. package/binary/_internal/pdfminer/cmap/HKm314-B5-V.json.gz +0 -0
  145. package/binary/_internal/pdfminer/cmap/HKm471-B5-H.json.gz +0 -0
  146. package/binary/_internal/pdfminer/cmap/HKm471-B5-V.json.gz +0 -0
  147. package/binary/_internal/pdfminer/cmap/HKscs-B5-H.json.gz +0 -0
  148. package/binary/_internal/pdfminer/cmap/HKscs-B5-V.json.gz +0 -0
  149. package/binary/_internal/pdfminer/cmap/Hankaku-H.json.gz +0 -0
  150. package/binary/_internal/pdfminer/cmap/Hankaku-V.json.gz +0 -0
  151. package/binary/_internal/pdfminer/cmap/Hiragana-H.json.gz +0 -0
  152. package/binary/_internal/pdfminer/cmap/Hiragana-V.json.gz +0 -0
  153. package/binary/_internal/pdfminer/cmap/KSC-EUC-H.json.gz +0 -0
  154. package/binary/_internal/pdfminer/cmap/KSC-EUC-V.json.gz +0 -0
  155. package/binary/_internal/pdfminer/cmap/KSC-H.json.gz +0 -0
  156. package/binary/_internal/pdfminer/cmap/KSC-Johab-H.json.gz +0 -0
  157. package/binary/_internal/pdfminer/cmap/KSC-Johab-V.json.gz +0 -0
  158. package/binary/_internal/pdfminer/cmap/KSC-V.json.gz +0 -0
  159. package/binary/_internal/pdfminer/cmap/KSCms-UHC-H.json.gz +0 -0
  160. package/binary/_internal/pdfminer/cmap/KSCms-UHC-HW-H.json.gz +0 -0
  161. package/binary/_internal/pdfminer/cmap/KSCms-UHC-HW-V.json.gz +0 -0
  162. package/binary/_internal/pdfminer/cmap/KSCms-UHC-V.json.gz +0 -0
  163. package/binary/_internal/pdfminer/cmap/KSCpc-EUC-H.json.gz +0 -0
  164. package/binary/_internal/pdfminer/cmap/KSCpc-EUC-V.json.gz +0 -0
  165. package/binary/_internal/pdfminer/cmap/Katakana-H.json.gz +0 -0
  166. package/binary/_internal/pdfminer/cmap/Katakana-V.json.gz +0 -0
  167. package/binary/_internal/pdfminer/cmap/NWP-H.json.gz +0 -0
  168. package/binary/_internal/pdfminer/cmap/NWP-V.json.gz +0 -0
  169. package/binary/_internal/pdfminer/cmap/README.txt +79 -0
  170. package/binary/_internal/pdfminer/cmap/RKSJ-H.json.gz +0 -0
  171. package/binary/_internal/pdfminer/cmap/RKSJ-V.json.gz +0 -0
  172. package/binary/_internal/pdfminer/cmap/Roman-H.json.gz +0 -0
  173. package/binary/_internal/pdfminer/cmap/Roman-V.json.gz +0 -0
  174. package/binary/_internal/pdfminer/cmap/UniCNS-UCS2-H.json.gz +0 -0
  175. package/binary/_internal/pdfminer/cmap/UniCNS-UCS2-V.json.gz +0 -0
  176. package/binary/_internal/pdfminer/cmap/UniCNS-UTF16-H.json.gz +0 -0
  177. package/binary/_internal/pdfminer/cmap/UniCNS-UTF16-V.json.gz +0 -0
  178. package/binary/_internal/pdfminer/cmap/UniCNS-UTF32-H.json.gz +0 -0
  179. package/binary/_internal/pdfminer/cmap/UniCNS-UTF32-V.json.gz +0 -0
  180. package/binary/_internal/pdfminer/cmap/UniCNS-UTF8-H.json.gz +0 -0
  181. package/binary/_internal/pdfminer/cmap/UniCNS-UTF8-V.json.gz +0 -0
  182. package/binary/_internal/pdfminer/cmap/UniGB-UCS2-H.json.gz +0 -0
  183. package/binary/_internal/pdfminer/cmap/UniGB-UCS2-V.json.gz +0 -0
  184. package/binary/_internal/pdfminer/cmap/UniGB-UTF16-H.json.gz +0 -0
  185. package/binary/_internal/pdfminer/cmap/UniGB-UTF16-V.json.gz +0 -0
  186. package/binary/_internal/pdfminer/cmap/UniGB-UTF32-H.json.gz +0 -0
  187. package/binary/_internal/pdfminer/cmap/UniGB-UTF32-V.json.gz +0 -0
  188. package/binary/_internal/pdfminer/cmap/UniGB-UTF8-H.json.gz +0 -0
  189. package/binary/_internal/pdfminer/cmap/UniGB-UTF8-V.json.gz +0 -0
  190. package/binary/_internal/pdfminer/cmap/UniJIS-UCS2-H.json.gz +0 -0
  191. package/binary/_internal/pdfminer/cmap/UniJIS-UCS2-HW-H.json.gz +0 -0
  192. package/binary/_internal/pdfminer/cmap/UniJIS-UCS2-HW-V.json.gz +0 -0
  193. package/binary/_internal/pdfminer/cmap/UniJIS-UCS2-V.json.gz +0 -0
  194. package/binary/_internal/pdfminer/cmap/UniJIS-UTF16-H.json.gz +0 -0
  195. package/binary/_internal/pdfminer/cmap/UniJIS-UTF16-V.json.gz +0 -0
  196. package/binary/_internal/pdfminer/cmap/UniJIS-UTF32-H.json.gz +0 -0
  197. package/binary/_internal/pdfminer/cmap/UniJIS-UTF32-V.json.gz +0 -0
  198. package/binary/_internal/pdfminer/cmap/UniJIS-UTF8-H.json.gz +0 -0
  199. package/binary/_internal/pdfminer/cmap/UniJIS-UTF8-V.json.gz +0 -0
  200. package/binary/_internal/pdfminer/cmap/UniJIS2004-UTF16-H.json.gz +0 -0
  201. package/binary/_internal/pdfminer/cmap/UniJIS2004-UTF16-V.json.gz +0 -0
  202. package/binary/_internal/pdfminer/cmap/UniJIS2004-UTF32-H.json.gz +0 -0
  203. package/binary/_internal/pdfminer/cmap/UniJIS2004-UTF32-V.json.gz +0 -0
  204. package/binary/_internal/pdfminer/cmap/UniJIS2004-UTF8-H.json.gz +0 -0
  205. package/binary/_internal/pdfminer/cmap/UniJIS2004-UTF8-V.json.gz +0 -0
  206. package/binary/_internal/pdfminer/cmap/UniJISX0213-UTF32-H.json.gz +0 -0
  207. package/binary/_internal/pdfminer/cmap/UniJISX0213-UTF32-V.json.gz +0 -0
  208. package/binary/_internal/pdfminer/cmap/UniJISX02132004-UTF32-H.json.gz +0 -0
  209. package/binary/_internal/pdfminer/cmap/UniJISX02132004-UTF32-V.json.gz +0 -0
  210. package/binary/_internal/pdfminer/cmap/UniKS-UCS2-H.json.gz +0 -0
  211. package/binary/_internal/pdfminer/cmap/UniKS-UCS2-V.json.gz +0 -0
  212. package/binary/_internal/pdfminer/cmap/UniKS-UTF16-H.json.gz +0 -0
  213. package/binary/_internal/pdfminer/cmap/UniKS-UTF16-V.json.gz +0 -0
  214. package/binary/_internal/pdfminer/cmap/UniKS-UTF32-H.json.gz +0 -0
  215. package/binary/_internal/pdfminer/cmap/UniKS-UTF32-V.json.gz +0 -0
  216. package/binary/_internal/pdfminer/cmap/UniKS-UTF8-H.json.gz +0 -0
  217. package/binary/_internal/pdfminer/cmap/UniKS-UTF8-V.json.gz +0 -0
  218. package/binary/_internal/pdfminer/cmap/V.json.gz +0 -0
  219. package/binary/_internal/pdfminer/cmap/WP-Symbol-H.json.gz +0 -0
  220. package/binary/_internal/pdfminer/cmap/WP-Symbol-V.json.gz +0 -0
  221. package/binary/_internal/pdfminer/cmap/to-unicode-Adobe-CNS1.json.gz +0 -0
  222. package/binary/_internal/pdfminer/cmap/to-unicode-Adobe-GB1.json.gz +0 -0
  223. package/binary/_internal/pdfminer/cmap/to-unicode-Adobe-Japan1.json.gz +0 -0
  224. package/binary/_internal/pdfminer/cmap/to-unicode-Adobe-Korea1.json.gz +0 -0
  225. package/binary/_internal/pdfminer/py.typed +0 -0
  226. package/binary/_internal/pdfminer_six-20260107.dist-info/INSTALLER +1 -0
  227. package/binary/_internal/pdfminer_six-20260107.dist-info/METADATA +110 -0
  228. package/binary/_internal/pdfminer_six-20260107.dist-info/RECORD +191 -0
  229. package/binary/_internal/pdfminer_six-20260107.dist-info/REQUESTED +0 -0
  230. package/binary/_internal/pdfminer_six-20260107.dist-info/WHEEL +5 -0
  231. package/binary/_internal/pdfminer_six-20260107.dist-info/licenses/LICENSE +22 -0
  232. package/binary/_internal/pdfminer_six-20260107.dist-info/top_level.txt +1 -0
  233. package/binary/_internal/pdfplumber-0.11.10.dist-info/INSTALLER +1 -0
  234. package/binary/_internal/pdfplumber-0.11.10.dist-info/METADATA +617 -0
  235. package/binary/_internal/pdfplumber-0.11.10.dist-info/RECORD +30 -0
  236. package/binary/_internal/pdfplumber-0.11.10.dist-info/REQUESTED +0 -0
  237. package/binary/_internal/pdfplumber-0.11.10.dist-info/WHEEL +5 -0
  238. package/binary/_internal/pdfplumber-0.11.10.dist-info/entry_points.txt +2 -0
  239. package/binary/_internal/pdfplumber-0.11.10.dist-info/licenses/LICENSE.txt +21 -0
  240. package/binary/_internal/pdfplumber-0.11.10.dist-info/top_level.txt +1 -0
  241. package/binary/_internal/pillow-12.3.0.dist-info/INSTALLER +1 -0
  242. package/binary/_internal/pillow-12.3.0.dist-info/METADATA +180 -0
  243. package/binary/_internal/pillow-12.3.0.dist-info/RECORD +142 -0
  244. package/binary/_internal/pillow-12.3.0.dist-info/REQUESTED +0 -0
  245. package/binary/_internal/pillow-12.3.0.dist-info/WHEEL +6 -0
  246. package/binary/_internal/pillow-12.3.0.dist-info/licenses/LICENSE +1574 -0
  247. package/binary/_internal/pillow-12.3.0.dist-info/sboms/auditwheel.cdx.json +1 -0
  248. package/binary/_internal/pillow-12.3.0.dist-info/sboms/pillow-12.3.0.cdx.json +721 -0
  249. package/binary/_internal/pillow-12.3.0.dist-info/top_level.txt +1 -0
  250. package/binary/_internal/pillow-12.3.0.dist-info/zip-safe +1 -0
  251. package/binary/_internal/pillow.libs/libXau-154567c4.so.6.0.0 +0 -0
  252. package/binary/_internal/pillow.libs/libavif-8a7f9d56.so.16.4.2 +0 -0
  253. package/binary/_internal/pillow.libs/libbrotlicommon-53534446.so.1.2.0 +0 -0
  254. package/binary/_internal/pillow.libs/libbrotlidec-7e5462ba.so.1.2.0 +0 -0
  255. package/binary/_internal/pillow.libs/libfreetype-9fc94c80.so.6.20.6 +0 -0
  256. package/binary/_internal/pillow.libs/libharfbuzz-172d1f63.so.0.61421.0 +0 -0
  257. package/binary/_internal/pillow.libs/libjpeg-31e2ca52.so.62.4.0 +0 -0
  258. package/binary/_internal/pillow.libs/liblcms2-dade1fbf.so.2.0.19 +0 -0
  259. package/binary/_internal/pillow.libs/liblzma-2be87c3e.so.5.8.3 +0 -0
  260. package/binary/_internal/pillow.libs/libopenjp2-b07f72ad.so.2.5.4 +0 -0
  261. package/binary/_internal/pillow.libs/libpng16-abb096d5.so.16.58.0 +0 -0
  262. package/binary/_internal/pillow.libs/libsharpyuv-0066295b.so.0.1.2 +0 -0
  263. package/binary/_internal/pillow.libs/libtiff-fc87e79d.so.6.2.0 +0 -0
  264. package/binary/_internal/pillow.libs/libwebp-51b0b3f7.so.7.2.0 +0 -0
  265. package/binary/_internal/pillow.libs/libwebpdemux-9fe2abcc.so.2.0.17 +0 -0
  266. package/binary/_internal/pillow.libs/libwebpmux-8fb1c9f6.so.3.1.2 +0 -0
  267. package/binary/_internal/pillow.libs/libxcb-ad31f5a3.so.1.1.0 +0 -0
  268. package/binary/_internal/pillow.libs/libzstd-44be1190.so.1.5.7 +0 -0
  269. package/binary/_internal/pycparser-3.0.dist-info/INSTALLER +1 -0
  270. package/binary/_internal/pycparser-3.0.dist-info/METADATA +244 -0
  271. package/binary/_internal/pycparser-3.0.dist-info/RECORD +15 -0
  272. package/binary/_internal/pycparser-3.0.dist-info/REQUESTED +0 -0
  273. package/binary/_internal/pycparser-3.0.dist-info/WHEEL +5 -0
  274. package/binary/_internal/pycparser-3.0.dist-info/licenses/LICENSE +27 -0
  275. package/binary/_internal/pycparser-3.0.dist-info/top_level.txt +1 -0
  276. package/binary/_internal/pypdfium2/version.json +11 -0
  277. package/binary/_internal/pypdfium2-5.13.0.dist-info/INSTALLER +1 -0
  278. package/binary/_internal/pypdfium2-5.13.0.dist-info/METADATA +1139 -0
  279. package/binary/_internal/pypdfium2-5.13.0.dist-info/RECORD +75 -0
  280. package/binary/_internal/pypdfium2-5.13.0.dist-info/REQUESTED +0 -0
  281. package/binary/_internal/pypdfium2-5.13.0.dist-info/WHEEL +6 -0
  282. package/binary/_internal/pypdfium2-5.13.0.dist-info/entry_points.txt +2 -0
  283. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/LICENSES/Apache-2.0.txt +202 -0
  284. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/LICENSES/BSD-3-Clause.txt +26 -0
  285. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/LICENSES/CC-BY-4.0.txt +317 -0
  286. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/abseil.txt +203 -0
  287. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/agg23.txt +14 -0
  288. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/fast_float.txt +27 -0
  289. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/freetype.txt +169 -0
  290. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/icu.txt +568 -0
  291. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/lcms.txt +27 -0
  292. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/libjpeg_turbo.ijg +260 -0
  293. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/libjpeg_turbo.md +135 -0
  294. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/libopenjpeg.txt +32 -0
  295. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/libpng.txt +134 -0
  296. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/libtiff.txt +21 -0
  297. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/llvm-libc.txt +278 -0
  298. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/pdfium-binaries.txt +9 -0
  299. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/pdfium.txt +230 -0
  300. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/simdutf.txt +18 -0
  301. package/binary/_internal/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/zlib.txt +29 -0
  302. package/binary/_internal/pypdfium2-5.13.0.dist-info/top_level.txt +4 -0
  303. package/binary/_internal/pypdfium2_raw/libpdfium.so +0 -0
  304. package/binary/_internal/pypdfium2_raw/version.json +10 -0
  305. package/binary/_internal/python_calamine/_python_calamine.cpython-312-x86_64-linux-gnu.so +0 -0
  306. package/binary/_internal/python_calamine-0.8.2.dist-info/INSTALLER +1 -0
  307. package/binary/_internal/python_calamine-0.8.2.dist-info/METADATA +94 -0
  308. package/binary/_internal/python_calamine-0.8.2.dist-info/RECORD +11 -0
  309. package/binary/_internal/python_calamine-0.8.2.dist-info/REQUESTED +0 -0
  310. package/binary/_internal/python_calamine-0.8.2.dist-info/WHEEL +5 -0
  311. package/binary/_internal/python_calamine-0.8.2.dist-info/licenses/LICENSE +21 -0
  312. package/binary/_internal/python_calamine-0.8.2.dist-info/sboms/python-calamine.cyclonedx.json +1615 -0
  313. package/binary/_internal/quickjs_ng-0.17.0.1.dist-info/INSTALLER +1 -0
  314. package/binary/_internal/quickjs_ng-0.17.0.1.dist-info/METADATA +161 -0
  315. package/binary/_internal/quickjs_ng-0.17.0.1.dist-info/RECORD +9 -0
  316. package/binary/_internal/quickjs_ng-0.17.0.1.dist-info/REQUESTED +0 -0
  317. package/binary/_internal/quickjs_ng-0.17.0.1.dist-info/WHEEL +7 -0
  318. package/binary/_internal/quickjs_ng-0.17.0.1.dist-info/licenses/LICENSE +21 -0
  319. package/binary/_internal/quickjs_ng-0.17.0.1.dist-info/top_level.txt +2 -0
  320. package/binary/_internal/selectolax/base.pxi +4 -0
  321. package/binary/_internal/selectolax/lexbor/attrs.pxi +123 -0
  322. package/binary/_internal/selectolax/lexbor/fragment_lookup.pxi +52 -0
  323. package/binary/_internal/selectolax/lexbor/node.pxi +1355 -0
  324. package/binary/_internal/selectolax/lexbor/node_remove.pxi +29 -0
  325. package/binary/_internal/selectolax/lexbor/selection.pxi +251 -0
  326. package/binary/_internal/selectolax/lexbor/util.pxi +114 -0
  327. package/binary/_internal/selectolax/lexbor.c +66981 -0
  328. package/binary/_internal/selectolax/lexbor.cpython-312-x86_64-linux-gnu.so +0 -0
  329. package/binary/_internal/selectolax/lexbor.pxd +682 -0
  330. package/binary/_internal/selectolax/lexbor.pyi +1534 -0
  331. package/binary/_internal/selectolax/lexbor.pyx +1046 -0
  332. package/binary/_internal/selectolax/modest/node.pxi +976 -0
  333. package/binary/_internal/selectolax/modest/selection.pxi +199 -0
  334. package/binary/_internal/selectolax/modest/util.pxi +20 -0
  335. package/binary/_internal/selectolax/py.typed +0 -0
  336. package/binary/_internal/selectolax/utils.pxi +117 -0
  337. package/binary/_internal/selectolax-0.4.13.dist-info/INSTALLER +1 -0
  338. package/binary/_internal/selectolax-0.4.13.dist-info/METADATA +222 -0
  339. package/binary/_internal/selectolax-0.4.13.dist-info/RECORD +30 -0
  340. package/binary/_internal/selectolax-0.4.13.dist-info/REQUESTED +0 -0
  341. package/binary/_internal/selectolax-0.4.13.dist-info/WHEEL +7 -0
  342. package/binary/_internal/selectolax-0.4.13.dist-info/licenses/LICENSE +10 -0
  343. package/binary/_internal/selectolax-0.4.13.dist-info/top_level.txt +1 -0
  344. package/binary/brewdoc +0 -0
  345. package/binary/licenses/installed/brewdoc/brewdoc/_vendor/THIRD_PARTY_NOTICES.txt +342 -0
  346. package/binary/licenses/installed/brewdoc/brewdoc-0.3.2.dist-info/licenses/LICENSE +21 -0
  347. package/binary/licenses/installed/cffi/cffi-2.1.1.dist-info/licenses/LICENSE +23 -0
  348. package/binary/licenses/installed/charset-normalizer/charset_normalizer-3.5.2.dist-info/licenses/LICENSE +21 -0
  349. package/binary/licenses/installed/cryptography/cryptography-50.0.2.dist-info/licenses/LICENSE +3 -0
  350. package/binary/licenses/installed/cryptography/cryptography-50.0.2.dist-info/licenses/LICENSE.APACHE +202 -0
  351. package/binary/licenses/installed/cryptography/cryptography-50.0.2.dist-info/licenses/LICENSE.BSD +27 -0
  352. package/binary/licenses/installed/interpreter/LICENSE.txt +279 -0
  353. package/binary/licenses/installed/native-runtime/GPL-3 +674 -0
  354. package/binary/licenses/installed/native-runtime/gcc-12-base-amd64-copyright +1512 -0
  355. package/binary/licenses/installed/pdfminer.six/pdfminer_six-20260107.dist-info/licenses/LICENSE +22 -0
  356. package/binary/licenses/installed/pdfplumber/pdfplumber-0.11.10.dist-info/licenses/LICENSE.txt +21 -0
  357. package/binary/licenses/installed/pillow/pillow-12.3.0.dist-info/licenses/LICENSE +1574 -0
  358. package/binary/licenses/installed/pycparser/pycparser-3.0.dist-info/licenses/LICENSE +27 -0
  359. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/LICENSES/Apache-2.0.txt +202 -0
  360. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/LICENSES/BSD-3-Clause.txt +26 -0
  361. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/LICENSES/CC-BY-4.0.txt +317 -0
  362. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/abseil.txt +203 -0
  363. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/agg23.txt +14 -0
  364. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/fast_float.txt +27 -0
  365. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/freetype.txt +169 -0
  366. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/icu.txt +568 -0
  367. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/lcms.txt +27 -0
  368. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/libjpeg_turbo.ijg +260 -0
  369. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/libjpeg_turbo.md +135 -0
  370. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/libopenjpeg.txt +32 -0
  371. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/libpng.txt +134 -0
  372. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/libtiff.txt +21 -0
  373. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/llvm-libc.txt +278 -0
  374. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/pdfium-binaries.txt +9 -0
  375. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/pdfium.txt +230 -0
  376. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/simdutf.txt +18 -0
  377. package/binary/licenses/installed/pypdfium2/pypdfium2-5.13.0.dist-info/licenses/data/linux_x64/BUILD_LICENSES/zlib.txt +29 -0
  378. package/binary/licenses/installed/python-calamine/python_calamine-0.8.2.dist-info/licenses/LICENSE +21 -0
  379. package/binary/licenses/installed/quickjs-ng/quickjs_ng-0.17.0.1.dist-info/licenses/LICENSE +21 -0
  380. package/binary/licenses/installed/runtime-hooks/pyi_rth_cryptography_openssl.py +20 -0
  381. package/binary/licenses/installed/runtime-hooks/pyi_rth_inspect.py +99 -0
  382. package/binary/licenses/installed/runtime-hooks/pyi_rth_multiprocessing.py +88 -0
  383. package/binary/licenses/installed/runtime-hooks/pyi_rth_pkgutil.py +64 -0
  384. package/binary/licenses/installed/selectolax/selectolax-0.4.13.dist-info/licenses/LICENSE +10 -0
  385. package/binary/licenses/installed-manifest.json +202 -0
  386. package/binary/licenses/supplemental/openssl/3.5.9/README-copyright.txt +9 -0
  387. package/binary/licenses/supplemental/openssl/4.0.3/README-copyright.txt +9 -0
  388. package/binary/licenses/supplemental/provenance.json +2347 -0
  389. package/binary/licenses/supplemental/pyinstaller-6.22.3/COPYING.txt +648 -0
  390. package/binary/licenses/supplemental/pyinstaller-6.22.3/bootloader/waflib/LICENSE +25 -0
  391. package/binary/licenses/supplemental/pyinstaller-6.22.3/bootloader/zlib/LICENSE +22 -0
  392. package/binary/licenses/supplemental/pyinstaller-6.22.3/doc/license.rst +24 -0
  393. package/binary/licenses/supplemental/pyinstaller-hooks-contrib-2026.8/LICENSE +521 -0
  394. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE +373 -0
  395. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.bdb.txt +126 -0
  396. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.bzip2.txt +37 -0
  397. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.cpython.txt +771 -0
  398. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.expat.txt +21 -0
  399. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.libX11.txt +942 -0
  400. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.libXau.txt +21 -0
  401. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.libedit.txt +29 -0
  402. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.libffi.txt +21 -0
  403. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.liblzma.txt +13 -0
  404. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.libuuid.txt +27 -0
  405. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.libxcb.txt +30 -0
  406. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.mpdecimal.txt +24 -0
  407. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.ncurses.txt +29 -0
  408. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.openssl-1.1.txt +124 -0
  409. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.openssl-3.txt +177 -0
  410. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.sqlite.txt +23 -0
  411. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.tcl.txt +40 -0
  412. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.tix.txt +54 -0
  413. package/binary/licenses/supplemental/python-build-standalone-20260929/LICENSE.zlib.txt +21 -0
  414. package/binary/licenses/supplemental/python-calamine-0.8.2/LICENSE +21 -0
  415. package/binary/licenses/supplemental/python-calamine-0.8.2/source-identity/Cargo.lock +620 -0
  416. package/binary/licenses/supplemental/python-calamine-0.8.2/source-identity/Cargo.toml +22 -0
  417. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/LICENSE +21 -0
  418. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/cutils.h.txt +24 -0
  419. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/dtoa.c.txt +23 -0
  420. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/dtoa.h.txt +23 -0
  421. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/libregexp-opcode.h.txt +23 -0
  422. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/libregexp.c.txt +23 -0
  423. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/libregexp.h.txt +23 -0
  424. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/libunicode.c.txt +23 -0
  425. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/libunicode.h.txt +23 -0
  426. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/list.h.txt +23 -0
  427. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/quickjs-atom.h.txt +24 -0
  428. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/quickjs-opcode.h.txt +24 -0
  429. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/quickjs.c.txt +26 -0
  430. package/binary/licenses/supplemental/quickjs-ng-0.17.0.1/engine-headers/upstream-quickjs/quickjs.h.txt +26 -0
  431. package/binary/licenses/supplemental/rust-adler2-2.0.1/LICENSE-0BSD +12 -0
  432. package/binary/licenses/supplemental/rust-adler2-2.0.1/LICENSE-APACHE +201 -0
  433. package/binary/licenses/supplemental/rust-adler2-2.0.1/LICENSE-MIT +23 -0
  434. package/binary/licenses/supplemental/rust-android_system_properties-0.1.5/LICENSE-APACHE +13 -0
  435. package/binary/licenses/supplemental/rust-android_system_properties-0.1.5/LICENSE-MIT +20 -0
  436. package/binary/licenses/supplemental/rust-atoi_simd-0.18.1/LICENSE-APACHE +201 -0
  437. package/binary/licenses/supplemental/rust-atoi_simd-0.18.1/LICENSE-MIT +25 -0
  438. package/binary/licenses/supplemental/rust-autocfg-1.5.1/LICENSE-APACHE +201 -0
  439. package/binary/licenses/supplemental/rust-autocfg-1.5.1/LICENSE-MIT +25 -0
  440. package/binary/licenses/supplemental/rust-bumpalo-3.20.3/LICENSE-APACHE +201 -0
  441. package/binary/licenses/supplemental/rust-bumpalo-3.20.3/LICENSE-MIT +25 -0
  442. package/binary/licenses/supplemental/rust-byteorder-1.5.0/COPYING +3 -0
  443. package/binary/licenses/supplemental/rust-byteorder-1.5.0/LICENSE-MIT +21 -0
  444. package/binary/licenses/supplemental/rust-calamine-0.36.0/LICENSE-MIT.md +23 -0
  445. package/binary/licenses/supplemental/rust-cc-1.2.64/LICENSE-APACHE +201 -0
  446. package/binary/licenses/supplemental/rust-cc-1.2.64/LICENSE-MIT +25 -0
  447. package/binary/licenses/supplemental/rust-cfg-if-1.0.4/LICENSE-APACHE +201 -0
  448. package/binary/licenses/supplemental/rust-cfg-if-1.0.4/LICENSE-MIT +25 -0
  449. package/binary/licenses/supplemental/rust-chrono-0.4.45/LICENSE.txt +240 -0
  450. package/binary/licenses/supplemental/rust-codepage-0.1.2/COPYRIGHT +9 -0
  451. package/binary/licenses/supplemental/rust-codepage-0.1.2/LICENSE-APACHE +202 -0
  452. package/binary/licenses/supplemental/rust-codepage-0.1.2/LICENSE-MIT +25 -0
  453. package/binary/licenses/supplemental/rust-core-foundation-sys-0.8.7/LICENSE-APACHE +201 -0
  454. package/binary/licenses/supplemental/rust-core-foundation-sys-0.8.7/LICENSE-MIT +25 -0
  455. package/binary/licenses/supplemental/rust-crc32fast-1.5.0/LICENSE-APACHE +202 -0
  456. package/binary/licenses/supplemental/rust-crc32fast-1.5.0/LICENSE-MIT +21 -0
  457. package/binary/licenses/supplemental/rust-debug_unsafe-0.1.4/LICENSE-APACHE +201 -0
  458. package/binary/licenses/supplemental/rust-debug_unsafe-0.1.4/LICENSE-MIT +25 -0
  459. package/binary/licenses/supplemental/rust-encoding_rs-0.8.35/COPYRIGHT +17 -0
  460. package/binary/licenses/supplemental/rust-encoding_rs-0.8.35/LICENSE-APACHE +202 -0
  461. package/binary/licenses/supplemental/rust-encoding_rs-0.8.35/LICENSE-MIT +25 -0
  462. package/binary/licenses/supplemental/rust-encoding_rs-0.8.35/LICENSE-WHATWG +26 -0
  463. package/binary/licenses/supplemental/rust-equivalent-1.0.2/LICENSE-APACHE +201 -0
  464. package/binary/licenses/supplemental/rust-equivalent-1.0.2/LICENSE-MIT +25 -0
  465. package/binary/licenses/supplemental/rust-fast-float2-0.2.3/LICENSE-APACHE +201 -0
  466. package/binary/licenses/supplemental/rust-fast-float2-0.2.3/LICENSE-MIT +23 -0
  467. package/binary/licenses/supplemental/rust-find-msvc-tools-0.1.9/LICENSE-APACHE +201 -0
  468. package/binary/licenses/supplemental/rust-find-msvc-tools-0.1.9/LICENSE-MIT +25 -0
  469. package/binary/licenses/supplemental/rust-flate2-1.1.9/LICENSE-APACHE +201 -0
  470. package/binary/licenses/supplemental/rust-flate2-1.1.9/LICENSE-MIT +25 -0
  471. package/binary/licenses/supplemental/rust-futures-core-0.3.32/LICENSE-APACHE +202 -0
  472. package/binary/licenses/supplemental/rust-futures-core-0.3.32/LICENSE-MIT +26 -0
  473. package/binary/licenses/supplemental/rust-futures-task-0.3.32/LICENSE-APACHE +202 -0
  474. package/binary/licenses/supplemental/rust-futures-task-0.3.32/LICENSE-MIT +26 -0
  475. package/binary/licenses/supplemental/rust-futures-util-0.3.32/LICENSE-APACHE +202 -0
  476. package/binary/licenses/supplemental/rust-futures-util-0.3.32/LICENSE-MIT +26 -0
  477. package/binary/licenses/supplemental/rust-hashbrown-0.17.1/LICENSE-APACHE +201 -0
  478. package/binary/licenses/supplemental/rust-hashbrown-0.17.1/LICENSE-MIT +25 -0
  479. package/binary/licenses/supplemental/rust-heck-0.5.0/LICENSE-APACHE +201 -0
  480. package/binary/licenses/supplemental/rust-heck-0.5.0/LICENSE-MIT +25 -0
  481. package/binary/licenses/supplemental/rust-iana-time-zone-0.1.65/LICENSE-APACHE +201 -0
  482. package/binary/licenses/supplemental/rust-iana-time-zone-0.1.65/LICENSE-MIT +25 -0
  483. package/binary/licenses/supplemental/rust-iana-time-zone-haiku-0.1.2/LICENSE-APACHE +201 -0
  484. package/binary/licenses/supplemental/rust-iana-time-zone-haiku-0.1.2/LICENSE-MIT +25 -0
  485. package/binary/licenses/supplemental/rust-indexmap-2.14.0/LICENSE-APACHE +201 -0
  486. package/binary/licenses/supplemental/rust-indexmap-2.14.0/LICENSE-MIT +25 -0
  487. package/binary/licenses/supplemental/rust-js-sys-0.3.102/LICENSE-APACHE +201 -0
  488. package/binary/licenses/supplemental/rust-js-sys-0.3.102/LICENSE-MIT +25 -0
  489. package/binary/licenses/supplemental/rust-libc-0.2.186/LICENSE-APACHE +176 -0
  490. package/binary/licenses/supplemental/rust-libc-0.2.186/LICENSE-MIT +25 -0
  491. package/binary/licenses/supplemental/rust-log-0.4.32/LICENSE-APACHE +201 -0
  492. package/binary/licenses/supplemental/rust-log-0.4.32/LICENSE-MIT +25 -0
  493. package/binary/licenses/supplemental/rust-memchr-2.8.2/COPYING +3 -0
  494. package/binary/licenses/supplemental/rust-memchr-2.8.2/LICENSE-MIT +21 -0
  495. package/binary/licenses/supplemental/rust-miniz_oxide-0.8.9/LICENSE +25 -0
  496. package/binary/licenses/supplemental/rust-miniz_oxide-0.8.9/LICENSE-APACHE.md +177 -0
  497. package/binary/licenses/supplemental/rust-miniz_oxide-0.8.9/LICENSE-MIT.md +24 -0
  498. package/binary/licenses/supplemental/rust-miniz_oxide-0.8.9/LICENSE-ZLIB.md +14 -0
  499. package/binary/licenses/supplemental/rust-num-traits-0.2.19/LICENSE-APACHE +201 -0
  500. package/binary/licenses/supplemental/rust-num-traits-0.2.19/LICENSE-MIT +25 -0
  501. package/binary/licenses/supplemental/rust-once_cell-1.21.4/LICENSE-APACHE +201 -0
  502. package/binary/licenses/supplemental/rust-once_cell-1.21.4/LICENSE-MIT +23 -0
  503. package/binary/licenses/supplemental/rust-pin-project-lite-0.2.17/LICENSE-APACHE +177 -0
  504. package/binary/licenses/supplemental/rust-pin-project-lite-0.2.17/LICENSE-MIT +23 -0
  505. package/binary/licenses/supplemental/rust-portable-atomic-1.13.1/LICENSE-APACHE +177 -0
  506. package/binary/licenses/supplemental/rust-portable-atomic-1.13.1/LICENSE-MIT +23 -0
  507. package/binary/licenses/supplemental/rust-proc-macro2-1.0.106/LICENSE-APACHE +176 -0
  508. package/binary/licenses/supplemental/rust-proc-macro2-1.0.106/LICENSE-MIT +23 -0
  509. package/binary/licenses/supplemental/rust-pyo3-0.29.0/LICENSE-APACHE +178 -0
  510. package/binary/licenses/supplemental/rust-pyo3-0.29.0/LICENSE-MIT +25 -0
  511. package/binary/licenses/supplemental/rust-pyo3-0.29.0/pyo3-runtime/LICENSE-APACHE +178 -0
  512. package/binary/licenses/supplemental/rust-pyo3-0.29.0/pyo3-runtime/LICENSE-MIT +25 -0
  513. package/binary/licenses/supplemental/rust-pyo3-build-config-0.29.0/LICENSE-APACHE +178 -0
  514. package/binary/licenses/supplemental/rust-pyo3-build-config-0.29.0/LICENSE-MIT +25 -0
  515. package/binary/licenses/supplemental/rust-pyo3-ffi-0.29.0/LICENSE-APACHE +178 -0
  516. package/binary/licenses/supplemental/rust-pyo3-ffi-0.29.0/LICENSE-MIT +25 -0
  517. package/binary/licenses/supplemental/rust-pyo3-file-0.16.0/Cargo.toml +14 -0
  518. package/binary/licenses/supplemental/rust-pyo3-file-0.16.0/README.md +90 -0
  519. package/binary/licenses/supplemental/rust-pyo3-file-0.16.0/declared-license/Apache-2.0.txt +73 -0
  520. package/binary/licenses/supplemental/rust-pyo3-macros-0.29.0/LICENSE-APACHE +178 -0
  521. package/binary/licenses/supplemental/rust-pyo3-macros-0.29.0/LICENSE-MIT +25 -0
  522. package/binary/licenses/supplemental/rust-pyo3-macros-backend-0.29.0/LICENSE-APACHE +178 -0
  523. package/binary/licenses/supplemental/rust-pyo3-macros-backend-0.29.0/LICENSE-MIT +25 -0
  524. package/binary/licenses/supplemental/rust-quick-xml-0.41.0/LICENSE-MIT.md +23 -0
  525. package/binary/licenses/supplemental/rust-quote-1.0.45/LICENSE-APACHE +176 -0
  526. package/binary/licenses/supplemental/rust-quote-1.0.45/LICENSE-MIT +23 -0
  527. package/binary/licenses/supplemental/rust-rustversion-1.0.22/LICENSE-APACHE +176 -0
  528. package/binary/licenses/supplemental/rust-rustversion-1.0.22/LICENSE-MIT +23 -0
  529. package/binary/licenses/supplemental/rust-serde-1.0.228/LICENSE-APACHE +176 -0
  530. package/binary/licenses/supplemental/rust-serde-1.0.228/LICENSE-MIT +23 -0
  531. package/binary/licenses/supplemental/rust-serde_core-1.0.228/LICENSE-APACHE +176 -0
  532. package/binary/licenses/supplemental/rust-serde_core-1.0.228/LICENSE-MIT +23 -0
  533. package/binary/licenses/supplemental/rust-serde_derive-1.0.228/LICENSE-APACHE +176 -0
  534. package/binary/licenses/supplemental/rust-serde_derive-1.0.228/LICENSE-MIT +23 -0
  535. package/binary/licenses/supplemental/rust-shlex-2.0.1/LICENSE-APACHE +13 -0
  536. package/binary/licenses/supplemental/rust-shlex-2.0.1/LICENSE-MIT +21 -0
  537. package/binary/licenses/supplemental/rust-simd-adler32-0.3.9/LICENSE.md +21 -0
  538. package/binary/licenses/supplemental/rust-slab-0.4.12/LICENSE +25 -0
  539. package/binary/licenses/supplemental/rust-syn-2.0.118/LICENSE-APACHE +176 -0
  540. package/binary/licenses/supplemental/rust-syn-2.0.118/LICENSE-MIT +23 -0
  541. package/binary/licenses/supplemental/rust-target-lexicon-0.13.5/LICENSE +220 -0
  542. package/binary/licenses/supplemental/rust-typed-path-0.12.3/LICENSE-APACHE +176 -0
  543. package/binary/licenses/supplemental/rust-typed-path-0.12.3/LICENSE-MIT +23 -0
  544. package/binary/licenses/supplemental/rust-unicode-ident-1.0.24/LICENSE-APACHE +176 -0
  545. package/binary/licenses/supplemental/rust-unicode-ident-1.0.24/LICENSE-MIT +23 -0
  546. package/binary/licenses/supplemental/rust-unicode-ident-1.0.24/LICENSE-UNICODE +39 -0
  547. package/binary/licenses/supplemental/rust-wasm-bindgen-0.2.125/LICENSE-APACHE +201 -0
  548. package/binary/licenses/supplemental/rust-wasm-bindgen-0.2.125/LICENSE-MIT +25 -0
  549. package/binary/licenses/supplemental/rust-wasm-bindgen-macro-0.2.125/LICENSE-APACHE +201 -0
  550. package/binary/licenses/supplemental/rust-wasm-bindgen-macro-0.2.125/LICENSE-MIT +25 -0
  551. package/binary/licenses/supplemental/rust-wasm-bindgen-macro-support-0.2.125/LICENSE-APACHE +201 -0
  552. package/binary/licenses/supplemental/rust-wasm-bindgen-macro-support-0.2.125/LICENSE-MIT +25 -0
  553. package/binary/licenses/supplemental/rust-wasm-bindgen-shared-0.2.125/LICENSE-APACHE +201 -0
  554. package/binary/licenses/supplemental/rust-wasm-bindgen-shared-0.2.125/LICENSE-MIT +25 -0
  555. package/binary/licenses/supplemental/rust-windows-core-0.62.2/license-apache-2.0 +201 -0
  556. package/binary/licenses/supplemental/rust-windows-core-0.62.2/license-mit +21 -0
  557. package/binary/licenses/supplemental/rust-windows-implement-0.60.2/license-apache-2.0 +201 -0
  558. package/binary/licenses/supplemental/rust-windows-implement-0.60.2/license-mit +21 -0
  559. package/binary/licenses/supplemental/rust-windows-interface-0.59.3/license-apache-2.0 +201 -0
  560. package/binary/licenses/supplemental/rust-windows-interface-0.59.3/license-mit +21 -0
  561. package/binary/licenses/supplemental/rust-windows-link-0.2.1/license-apache-2.0 +201 -0
  562. package/binary/licenses/supplemental/rust-windows-link-0.2.1/license-mit +21 -0
  563. package/binary/licenses/supplemental/rust-windows-result-0.4.1/license-apache-2.0 +201 -0
  564. package/binary/licenses/supplemental/rust-windows-result-0.4.1/license-mit +21 -0
  565. package/binary/licenses/supplemental/rust-windows-strings-0.5.1/license-apache-2.0 +201 -0
  566. package/binary/licenses/supplemental/rust-windows-strings-0.5.1/license-mit +21 -0
  567. package/binary/licenses/supplemental/rust-zip-8.6.0/LICENSE +21 -0
  568. package/binary/licenses/supplemental/rust-zlib-rs-0.6.3/LICENSE +19 -0
  569. package/binary/licenses/supplemental/rust-zopfli-0.8.3/COPYING +201 -0
  570. package/binary/licenses/supplemental/selectolax-0.4.13/LICENSE +10 -0
  571. package/binary/licenses/supplemental/selectolax-0.4.13/lexbor/LICENSE +223 -0
  572. package/binary/licenses/supplemental/selectolax-0.4.13/lexbor/NOTICE +16 -0
  573. package/binary/version.json +6 -0
  574. package/native-manifest.json +4474 -0
  575. package/native-verification.json +338 -0
  576. package/package.json +27 -4
@@ -0,0 +1,1534 @@
1
+ from __future__ import annotations
2
+
3
+ from enum import IntFlag
4
+ from typing import Any, Iterator, Literal, NoReturn, Optional, TypeVar, overload
5
+
6
+ DefaultT = TypeVar("DefaultT")
7
+
8
+ class LexborDocumentOptions(IntFlag):
9
+ """Parser options for the Lexbor document.
10
+
11
+ These mirror the ``lxb_dom_document_opt`` flags from Lexbor.
12
+
13
+ Multiple options can be combined with the bitwise OR operator, or by
14
+ combining their integer values. Both of the following are equivalent:
15
+
16
+ >>> LexborDocumentOptions.WO_EVENTS | LexborDocumentOptions.UNDEF
17
+ <LexborDocumentOptions.WO_EVENTS: 1>
18
+ >>> LexborDocumentOptions.WO_EVENTS.value | LexborDocumentOptions.UNDEF.value
19
+ 1
20
+
21
+ The combined value can be passed directly to the parser::
22
+
23
+ LexborHTMLParser(html, options=LexborDocumentOptions.WO_EVENTS)
24
+ """
25
+
26
+ """Original Lexbor name: ``LXB_DOM_DOCUMENT_OPT_UNDEF``.
27
+
28
+ Default value. No options are set.
29
+ """
30
+ UNDEF: int
31
+
32
+ """Original Lexbor name: ``LXB_DOM_DOCUMENT_OPT_WO_EVENTS``.
33
+
34
+ Disables mutation events ("without events"). When set, Lexbor skips the
35
+ document mutation callbacks (``inserted``, ``removed``, ``moved``,
36
+ ``children_changed``, ``connected``, and the attribute callbacks) while
37
+ building or modifying the tree. This can speed up parsing, but it also
38
+ disables behaviors implemented through those callbacks, such as
39
+ ``<selectedcontent>`` copying the selected ``<option>``.
40
+ """
41
+ WO_EVENTS: int
42
+
43
+ class LexborAttributes:
44
+ """A dict-like object that represents attributes."""
45
+
46
+ @staticmethod
47
+ def create(node: LexborAttributes) -> LexborAttributes: ...
48
+ def keys(self) -> Iterator[str]: ...
49
+ def items(self) -> Iterator[tuple[str, str | None]]: ...
50
+ def values(self) -> Iterator[str | None]: ...
51
+ def __iter__(self) -> Iterator[str]: ...
52
+ def __len__(self) -> int: ...
53
+ def __getitem__(self, key: str) -> str | None: ...
54
+ def __setitem__(self, key: str, value: Optional[str]) -> None: ...
55
+ def __delitem__(self, key: str) -> None: ...
56
+ def __contains__(self, key: str) -> bool: ...
57
+ def __repr__(self) -> str: ...
58
+ @overload
59
+ def get(self, key: str, default: DefaultT) -> DefaultT | str | None: ...
60
+ @overload
61
+ def get(self, key: str, default: None = ...) -> str | None: ...
62
+ @overload
63
+ def sget(self, key: str, default: str | DefaultT) -> str | DefaultT: ...
64
+ @overload
65
+ def sget(self, key: str, default: str = "") -> str: ...
66
+
67
+ class LexborSelector:
68
+ """An advanced CSS selector that supports additional operations.
69
+
70
+ Think of it as a toolkit that mimics some of the features of XPath.
71
+
72
+ Please note, this is an experimental feature that can change in the future.
73
+ """
74
+
75
+ def __init__(self, node: LexborNode, query: str): ...
76
+ def css(self, query: str) -> NoReturn: ...
77
+ @property
78
+ def matches(self) -> list[LexborNode]:
79
+ """Returns all possible matches"""
80
+ ...
81
+
82
+ @property
83
+ def any_matches(self) -> bool:
84
+ """Returns True if there are any matches"""
85
+ ...
86
+
87
+ def text_contains(
88
+ self, text: str, deep: bool = True, separator: str = "", strip: bool = False
89
+ ) -> LexborSelector:
90
+ """Filter all current matches given text."""
91
+ ...
92
+
93
+ def any_text_contains(
94
+ self, text: str, deep: bool = True, separator: str = "", strip: bool = False
95
+ ) -> bool:
96
+ """Returns True if any node in the current search scope contains specified text"""
97
+ ...
98
+
99
+ def attribute_longer_than(
100
+ self, attribute: str, length: int, start: str | None = None
101
+ ) -> LexborSelector:
102
+ """Filter all current matches by attribute length.
103
+
104
+ Similar to string-length in XPath.
105
+ """
106
+ ...
107
+
108
+ def any_attribute_longer_than(
109
+ self, attribute: str, length: int, start: str | None = None
110
+ ) -> bool:
111
+ """Returns True any href attribute longer than a specified length.
112
+
113
+ Similar to string-length in XPath.
114
+ """
115
+ ...
116
+
117
+ @property
118
+ def inner_html(self) -> str | None:
119
+ """Return HTML representation of the child nodes.
120
+
121
+ Works similar to innerHTML in JavaScript.
122
+ Unlike the `.html` property, does not include the current node.
123
+ Can be used to set HTML as well. See the setter docstring.
124
+
125
+ Returns
126
+ -------
127
+ text : str or None
128
+ """
129
+ ...
130
+
131
+ @inner_html.setter
132
+ def inner_html(self, html: str):
133
+ """Set inner HTML to the specified HTML.
134
+
135
+ Replaces existing data inside the node.
136
+ Works similar to innerHTML in JavaScript.
137
+
138
+ Parameters
139
+ ----------
140
+ html : str
141
+
142
+ """
143
+ ...
144
+
145
+ class LexborCSSSelector:
146
+ def __init__(self): ...
147
+ def find(self, query: str, node: LexborNode) -> list[LexborNode]: ...
148
+ def any_matches(self, query: str, node: LexborNode) -> bool: ...
149
+
150
+ class LexborNode:
151
+ """A class that represents HTML node (element)."""
152
+
153
+ parser: LexborHTMLParser
154
+
155
+ @property
156
+ def mem_id(self) -> int: ...
157
+ @property
158
+ def child(self) -> LexborNode | None:
159
+ """Alias for the `first_child` property.
160
+
161
+ **Deprecated**. Please use `first_child` instead.
162
+ """
163
+ ...
164
+
165
+ @property
166
+ def first_child(self) -> LexborNode | None:
167
+ """Return the first child node."""
168
+ ...
169
+
170
+ @property
171
+ def parent(self) -> LexborNode | None:
172
+ """Return the parent node."""
173
+ ...
174
+
175
+ @property
176
+ def next(self) -> LexborNode | None:
177
+ """Return next node."""
178
+ ...
179
+
180
+ @property
181
+ def prev(self) -> LexborNode | None:
182
+ """Return previous node."""
183
+ ...
184
+
185
+ @property
186
+ def last_child(self) -> LexborNode | None:
187
+ """Return last child node."""
188
+ ...
189
+
190
+ @property
191
+ def html(self) -> str | None:
192
+ """Return HTML representation of the current node including all its child nodes.
193
+
194
+ Returns
195
+ -------
196
+ text : str
197
+ """
198
+ ...
199
+
200
+ def html_pretty(
201
+ self,
202
+ indent: int = 0,
203
+ skip_ws_nodes: bool = False,
204
+ skip_comment: bool = False,
205
+ raw: bool = False,
206
+ without_closing: bool = False,
207
+ tag_with_ns: bool = False,
208
+ without_text_indent: bool = False,
209
+ full_doctype: bool = False,
210
+ html5test: bool = False,
211
+ ) -> str | None:
212
+ """Return pretty-printed HTML for the current node.
213
+
214
+ Parameters
215
+ ----------
216
+ indent : int, optional
217
+ Initial indentation level passed to Lexbor. Defaults to ``0``.
218
+ skip_ws_nodes : bool, optional
219
+ Skip text nodes that contain only whitespace.
220
+ skip_comment : bool, optional
221
+ Exclude HTML comment nodes from the serialized output.
222
+ raw : bool, optional
223
+ Serialize text and attribute values without HTML escaping.
224
+ without_closing : bool, optional
225
+ Omit closing tags for non-void elements.
226
+ tag_with_ns : bool, optional
227
+ Include namespace prefixes in serialized tag names when available.
228
+ without_text_indent : bool, optional
229
+ Disable extra indentation added around text and comment content.
230
+ full_doctype : bool, optional
231
+ Serialize the full document type declaration when a doctype node is present.
232
+ html5test : bool, optional
233
+ Serialize using Lexbor's HTML5 test formatting mode.
234
+ """
235
+ ...
236
+
237
+ def __hash__(self) -> int: ...
238
+ def text_lexbor(self) -> str:
239
+ """Returns the text of the node including text of all its child nodes.
240
+
241
+ Uses builtin method from lexbor.
242
+ """
243
+ ...
244
+
245
+ def text(
246
+ self,
247
+ deep: bool = True,
248
+ separator: str = "",
249
+ strip: bool = False,
250
+ skip_empty: bool = False,
251
+ ) -> str:
252
+ """Return concatenated text from this node.
253
+
254
+ Parameters
255
+ ----------
256
+ deep : bool, optional
257
+ When ``True`` (default), include text from all descendant nodes; when
258
+ ``False``, only include direct children.
259
+ separator : str, optional
260
+ String inserted between successive text fragments.
261
+ strip : bool, optional
262
+ If ``True``, apply ``str.strip()`` to each fragment before joining to
263
+ remove surrounding whitespace. Defaults to ``False``.
264
+ skip_empty : bool, optional
265
+ Exclude text nodes whose content is only ASCII whitespace (space,
266
+ tab, newline, form feed or carriage return) when ``True``.
267
+ Defaults to ``False``.
268
+
269
+ Returns
270
+ -------
271
+ text : str
272
+ Combined textual content assembled according to the provided options.
273
+ """
274
+ ...
275
+
276
+ def css(self, query: str) -> list[LexborNode]:
277
+ """Evaluate CSS selector against current node and its child nodes.
278
+
279
+ Matches pattern `query` against HTML tree.
280
+ `CSS selectors reference <https://www.w3schools.com/cssref/css_selectors.asp>`_.
281
+
282
+ Special selectors:
283
+
284
+ - parser.css('p:lexbor-contains("awesome" i)') -- case-insensitive contains
285
+ - parser.css('p:lexbor-contains("awesome")') -- case-sensitive contains
286
+
287
+
288
+ Parameters
289
+ ----------
290
+ query : str
291
+ CSS selector (e.g. "div > :nth-child(2n+1):not(:has(a))").
292
+
293
+ Returns
294
+ -------
295
+ selector : list of `Node` objects
296
+ """
297
+ ...
298
+
299
+ @overload
300
+ def css_first(
301
+ self, query: str, default: Any = ..., strict: Literal[True] = ...
302
+ ) -> LexborNode:
303
+ """Same as `css` but returns only the first match.
304
+
305
+ Parameters
306
+ ----------
307
+
308
+ query : str
309
+ default : bool, default None
310
+ Default value to return if there is no match.
311
+ strict: bool, default False
312
+ Set to True if you want to check if there is strictly only one match in the document.
313
+
314
+
315
+ Returns
316
+ -------
317
+ selector : `LexborNode` object
318
+ """
319
+ ...
320
+
321
+ @overload
322
+ def css_first(
323
+ self, query: str, default: DefaultT, strict: bool = False
324
+ ) -> LexborNode | DefaultT:
325
+ """Same as `css` but returns only the first match.
326
+
327
+ Parameters
328
+ ----------
329
+
330
+ query : str
331
+ default : bool, default None
332
+ Default value to return if there is no match.
333
+ strict: bool, default False
334
+ Set to True if you want to check if there is strictly only one match in the document.
335
+
336
+
337
+ Returns
338
+ -------
339
+ selector : `LexborNode` object
340
+ """
341
+ ...
342
+
343
+ @overload
344
+ def css_first(
345
+ self, query: str, default: None = ..., strict: bool = False
346
+ ) -> LexborNode | None:
347
+ """Same as `css` but returns only the first match.
348
+
349
+ Parameters
350
+ ----------
351
+
352
+ query : str
353
+ default : bool, default None
354
+ Default value to return if there is no match.
355
+ strict: bool, default False
356
+ Set to True if you want to check if there is strictly only one match in the document.
357
+
358
+
359
+ Returns
360
+ -------
361
+ selector : `LexborNode` object
362
+ """
363
+ ...
364
+
365
+ def any_css_matches(self, selectors: tuple[str]) -> bool:
366
+ """Returns True if any of CSS selectors matches a node"""
367
+ ...
368
+
369
+ def css_matches(self, selector: str) -> bool:
370
+ """Returns True if CSS selector matches a node."""
371
+ ...
372
+
373
+ @property
374
+ def tag_id(self) -> int: ...
375
+ @property
376
+ def tag(self) -> str | None:
377
+ """Return the name of the current tag (e.g. div, p, img).
378
+
379
+ For for non-tag nodes, returns the following names:
380
+
381
+ * `-text` - text node
382
+ * `-document` - document node
383
+ * `-comment` - comment node
384
+
385
+ Returns
386
+ -------
387
+ text : str
388
+ """
389
+ ...
390
+
391
+ def decompose(self, recursive: bool = True) -> None:
392
+ """Remove the current node from the tree.
393
+
394
+ Parameters
395
+ ----------
396
+ recursive : bool, default True
397
+ Whenever to delete all its child nodes
398
+
399
+ Examples
400
+ --------
401
+
402
+ >>> tree = LexborHTMLParser(html)
403
+ >>> for tag in tree.css('script'):
404
+ >>> tag.decompose()
405
+ """
406
+ ...
407
+
408
+ def strip_tags(self, tags: list[str], recursive: bool = False) -> None:
409
+ """Remove specified tags from the HTML tree.
410
+
411
+ Parameters
412
+ ----------
413
+ tags : list
414
+ List of tags to remove.
415
+ recursive : bool, default True
416
+ Whenever to delete all its child nodes
417
+
418
+ Examples
419
+ --------
420
+
421
+ >>> tree = LexborHTMLParser('<html><head></head><body><script></script><div>Hello world!</div></body></html>')
422
+ >>> tags = ['head', 'style', 'script', 'xmp', 'iframe', 'noembed', 'noframes']
423
+ >>> tree.strip_tags(tags)
424
+ >>> tree.html
425
+ '<html><body><div>Hello world!</div></body></html>'
426
+ """
427
+ ...
428
+
429
+ @property
430
+ def attributes(self) -> dict[str, str | None]:
431
+ """Get all attributes that belong to the current node.
432
+
433
+ The value of empty attributes is None.
434
+
435
+ Returns
436
+ -------
437
+ attributes : dictionary of all attributes.
438
+
439
+ Examples
440
+ --------
441
+
442
+ >>> tree = LexborHTMLParser("<div data id='my_id'></div>")
443
+ >>> node = tree.css_first('div')
444
+ >>> node.attributes
445
+ {'data': None, 'id': 'my_id'}
446
+ """
447
+ ...
448
+
449
+ @property
450
+ def attrs(self) -> LexborAttributes:
451
+ """A dict-like object that is similar to the ``attributes`` property, but operates directly on the Node data.
452
+
453
+ .. warning:: Use ``attributes`` instead, if you don't want to modify Node attributes.
454
+
455
+ Returns
456
+ -------
457
+ attributes : Attributes mapping object.
458
+
459
+ Examples
460
+ --------
461
+
462
+ >>> tree = LexborHTMLParser("<div id='a'></div>")
463
+ >>> node = tree.css_first('div')
464
+ >>> node.attrs
465
+ <div attributes, 1 items>
466
+ >>> node.attrs['id']
467
+ 'a'
468
+ >>> node.attrs['foo'] = 'bar'
469
+ >>> del node.attrs['id']
470
+ >>> node.attributes
471
+ {'foo': 'bar'}
472
+ >>> node.attrs['id'] = 'new_id'
473
+ >>> node.html
474
+ '<div foo="bar" id="new_id"></div>'
475
+ """
476
+ ...
477
+
478
+ @property
479
+ def id(self) -> str | None:
480
+ """Get the id attribute of the node.
481
+
482
+ Returns None if id does not set.
483
+
484
+ Returns
485
+ -------
486
+ text : str
487
+ """
488
+ ...
489
+
490
+ def iter(
491
+ self, include_text: bool = False, skip_empty: bool = False
492
+ ) -> Iterator[LexborNode]:
493
+ """Iterate over direct children of this node.
494
+
495
+ Parameters
496
+ ----------
497
+ include_text : bool, optional
498
+ When ``True``, yield text nodes in addition to element nodes. Defaults
499
+ to ``False``.
500
+ skip_empty : bool, optional
501
+ When ``include_text`` is ``True``, ignore text nodes made up solely
502
+ of ASCII whitespace (space, tab, newline, form feed or carriage
503
+ return). Defaults to ``False``.
504
+
505
+ Yields
506
+ ------
507
+ LexborNode
508
+ Child nodes on the same tree level as this node, filtered according
509
+ to the provided options.
510
+ """
511
+ ...
512
+
513
+ def unwrap(self, delete_empty: bool = False) -> None:
514
+ """Replace node with whatever is inside this node.
515
+
516
+ Does nothing if you perform unwrapping second time on the same node.
517
+
518
+ Parameters
519
+ ----------
520
+ delete_empty : bool, default False
521
+ If True, removes empty tags.
522
+
523
+ Examples
524
+ --------
525
+
526
+ >>> tree = LexborHTMLParser("<div>Hello <i>world</i>!</div>")
527
+ >>> tree.css_first('i').unwrap()
528
+ >>> tree.html
529
+ '<html><head></head><body><div>Hello world!</div></body></html>'
530
+
531
+ Note: by default, empty tags are ignored, use "delete_empty" to change this.
532
+ """
533
+ ...
534
+
535
+ def unwrap_tags(self, tags: list[str], delete_empty: bool = False) -> None:
536
+ """Unwraps specified tags from the HTML tree.
537
+
538
+ Works the same as the ``unwrap`` method, but applied to a list of tags.
539
+
540
+ Parameters
541
+ ----------
542
+ tags : list
543
+ List of tags to remove.
544
+ delete_empty : bool, default False
545
+ If True, removes empty tags.
546
+
547
+ Examples
548
+ --------
549
+
550
+ >>> tree = LexborHTMLParser("<div><a href="">Hello</a> <i>world</i>!</div>")
551
+ >>> tree.body.unwrap_tags(['i','a'])
552
+ >>> tree.body.html
553
+ '<body><div>Hello world!</div></body>'
554
+
555
+ Note: by default, empty tags are ignored, use "delete_empty" to change this.
556
+ """
557
+ ...
558
+
559
+ def merge_text_nodes(self) -> None:
560
+ """Iterates over all text nodes and merges all text nodes that are close to each other.
561
+
562
+ This is useful for text extraction.
563
+ Use it when you need to strip HTML tags and merge "dangling" text.
564
+
565
+ Examples
566
+ --------
567
+
568
+ >>> tree = LexborHTMLParser("<div><p><strong>J</strong>ohn</p><p>Doe</p></div>")
569
+ >>> node = tree.css_first('div')
570
+ >>> tree.unwrap_tags(["strong"])
571
+ >>> tree.text(deep=True, separator=" ", strip=True)
572
+ "J ohn Doe" # Text extraction produces an extra space because the strong tag was removed.
573
+ >>> node.merge_text_nodes()
574
+ >>> tree.text(deep=True, separator=" ", strip=True)
575
+ "John Doe"
576
+ """
577
+ ...
578
+
579
+ def traverse(
580
+ self, include_text: bool = False, skip_empty: bool = False
581
+ ) -> Iterator[LexborNode]:
582
+ """Depth-first traversal starting at the current node.
583
+
584
+ Parameters
585
+ ----------
586
+ include_text : bool, optional
587
+ When ``True``, include text nodes in the traversal sequence. Defaults
588
+ to ``False``.
589
+ skip_empty : bool, optional
590
+ Skip text nodes that contain only ASCII whitespace (space, tab,
591
+ newline, form feed or carriage return) when ``include_text`` is
592
+ ``True``. Defaults to ``False``.
593
+
594
+ Yields
595
+ ------
596
+ LexborNode
597
+ Nodes encountered in depth-first order beginning with the current
598
+ node, filtered according to the provided options.
599
+ """
600
+ ...
601
+
602
+ def replace_with(self, value: bytes | str | LexborNode) -> None:
603
+ """Replace current Node with specified value.
604
+
605
+ Parameters
606
+ ----------
607
+ value : str, bytes or Node
608
+ The text or Node instance to replace the Node with.
609
+ When a text string is passed, it's treated as text. All HTML tags will be escaped.
610
+ Convert and pass the ``Node`` object when you want to work with HTML.
611
+ Does not clone the ``Node`` object.
612
+ All future changes to the passed ``Node`` object will also be taken into account.
613
+
614
+ Examples
615
+ --------
616
+
617
+ >>> tree = LexborHTMLParser('<div>Get <img src="" alt="Laptop"></div>')
618
+ >>> img = tree.css_first('img')
619
+ >>> img.replace_with(img.attributes.get('alt', ''))
620
+ >>> tree.body.child.html
621
+ '<div>Get Laptop</div>'
622
+
623
+ >>> html_parser = LexborHTMLParser('<div>Get <span alt="Laptop"><img src="/jpg"> <div></div></span></div>')
624
+ >>> html_parser2 = LexborHTMLParser('<div>Test</div>')
625
+ >>> img_node = html_parser.css_first('img')
626
+ >>> img_node.replace_with(html_parser2.body.child)
627
+ '<div>Get <span alt="Laptop"><div>Test</div> <div></div></span></div>'
628
+ """
629
+ ...
630
+
631
+ def insert_before(self, value: bytes | str | LexborNode) -> None:
632
+ """Insert a node before the current Node.
633
+
634
+ Parameters
635
+ ----------
636
+ value : str, bytes or Node
637
+ The text or Node instance to insert before the Node.
638
+ When a text string is passed, it's treated as text. All HTML tags will be escaped.
639
+ Convert and pass the ``Node`` object when you want to work with HTML.
640
+ Does not clone the ``Node`` object.
641
+ All future changes to the passed ``Node`` object will also be taken into account.
642
+
643
+ Examples
644
+ --------
645
+
646
+ >>> tree = LexborHTMLParser('<div>Get <img src="" alt="Laptop"></div>')
647
+ >>> img = tree.css_first('img')
648
+ >>> img.insert_before(img.attributes.get('alt', ''))
649
+ >>> tree.body.child.html
650
+ '<div>Get Laptop<img src="" alt="Laptop"></div>'
651
+
652
+ >>> html_parser = LexborHTMLParser('<div>Get <span alt="Laptop"><img src="/jpg"> <div></div></span></div>')
653
+ >>> html_parser2 = LexborHTMLParser('<div>Test</div>')
654
+ >>> img_node = html_parser.css_first('img')
655
+ >>> img_node.insert_before(html_parser2.body.child)
656
+ <div>Get <span alt="Laptop"><div>Test</div><img src="/jpg"> <div></div></span></div>'
657
+ """
658
+ ...
659
+
660
+ def insert_after(self, value: bytes | str | LexborNode) -> None:
661
+ """Insert a node after the current Node.
662
+
663
+ Parameters
664
+ ----------
665
+ value : str, bytes or Node
666
+ The text or Node instance to insert after the Node.
667
+ When a text string is passed, it's treated as text. All HTML tags will be escaped.
668
+ Convert and pass the ``Node`` object when you want to work with HTML.
669
+ Does not clone the ``Node`` object.
670
+ All future changes to the passed ``Node`` object will also be taken into account.
671
+
672
+ Examples
673
+ --------
674
+
675
+ >>> tree = LexborHTMLParser('<div>Get <img src="" alt="Laptop"></div>')
676
+ >>> img = tree.css_first('img')
677
+ >>> img.insert_after(img.attributes.get('alt', ''))
678
+ >>> tree.body.child.html
679
+ '<div>Get <img src="" alt="Laptop">Laptop</div>'
680
+
681
+ >>> html_parser = LexborHTMLParser('<div>Get <span alt="Laptop"><img src="/jpg"> <div></div></span></div>')
682
+ >>> html_parser2 = LexborHTMLParser('<div>Test</div>')
683
+ >>> img_node = html_parser.css_first('img')
684
+ >>> img_node.insert_after(html_parser2.body.child)
685
+ <div>Get <span alt="Laptop"><img src="/jpg"><div>Test</div> <div></div></span></div>'
686
+ """
687
+ ...
688
+
689
+ def insert_child(self, value: bytes | str | LexborNode) -> None:
690
+ """Insert a node inside (at the end of) the current Node.
691
+
692
+ Parameters
693
+ ----------
694
+ value : str, bytes or Node
695
+ The text or Node instance to insert inside the Node.
696
+ When a text string is passed, it's treated as text. All HTML tags will be escaped.
697
+ Convert and pass the ``Node`` object when you want to work with HTML.
698
+ Does not clone the ``Node`` object.
699
+ All future changes to the passed ``Node`` object will also be taken into account.
700
+
701
+ Examples
702
+ --------
703
+
704
+ >>> tree = LexborHTMLParser('<div>Get <img src=""></div>')
705
+ >>> div = tree.css_first('div')
706
+ >>> div.insert_child('Laptop')
707
+ >>> tree.body.child.html
708
+ '<div>Get <img src="">Laptop</div>'
709
+
710
+ >>> html_parser = LexborHTMLParser('<div>Get <span alt="Laptop"> <div>Laptop</div> </span></div>')
711
+ >>> html_parser2 = LexborHTMLParser('<div>Test</div>')
712
+ >>> span_node = html_parser.css_first('span')
713
+ >>> span_node.insert_child(html_parser2.body.child)
714
+ <div>Get <span alt="Laptop"> <div>Laptop</div> <div>Test</div> </span></div>'
715
+ """
716
+ ...
717
+
718
+ @property
719
+ def raw_value(self) -> NoReturn:
720
+ """Return the raw (unparsed, original) value of a node.
721
+
722
+ Currently, works on text nodes only.
723
+
724
+ Returns
725
+ -------
726
+
727
+ raw_value : bytes
728
+
729
+ Examples
730
+ --------
731
+
732
+ >>> html_parser = LexborHTMLParser('<div>&#x3C;test&#x3E;</div>')
733
+ >>> selector = html_parser.css_first('div')
734
+ >>> selector.child.html
735
+ '&lt;test&gt;'
736
+ >>> selector.child.raw_value
737
+ b'&#x3C;test&#x3E;'
738
+ """
739
+ ...
740
+
741
+ def scripts_contain(self, query: str) -> bool:
742
+ """Returns True if any of the script tags contain specified text.
743
+
744
+ Caches script tags on the first call to improve performance.
745
+
746
+ Parameters
747
+ ----------
748
+ query : str
749
+ The query to check.
750
+ """
751
+ ...
752
+
753
+ def script_srcs_contain(self, queries: tuple[str]) -> bool:
754
+ """Returns True if any of the script SRCs attributes contain on of the specified text.
755
+
756
+ Caches values on the first call to improve performance.
757
+
758
+ Parameters
759
+ ----------
760
+ queries : tuple of str
761
+ """
762
+ ...
763
+
764
+ def remove(self, recursive: bool = True) -> None:
765
+ """An alias for the decompose method."""
766
+ ...
767
+
768
+ def select(self, query: str | None = None) -> LexborSelector:
769
+ """Select nodes given a CSS selector.
770
+
771
+ Works similarly to the the ``css`` method, but supports chained filtering and extra features.
772
+
773
+ Parameters
774
+ ----------
775
+ query : str or None
776
+ The CSS selector to use when searching for nodes.
777
+
778
+ Returns
779
+ -------
780
+ selector : The `Selector` class.
781
+ """
782
+ ...
783
+
784
+ @property
785
+ def text_content(self) -> str | None:
786
+ """Returns the text of the node if it is a text node.
787
+
788
+ Returns None for other nodes.
789
+ Unlike the ``text`` method, does not include child nodes.
790
+
791
+ Returns
792
+ -------
793
+ text : str or None.
794
+ """
795
+ ...
796
+
797
+ @property
798
+ def comment_content(self) -> str | None:
799
+ """Extract the textual content of an HTML comment node.
800
+
801
+ Returns
802
+ -------
803
+ str or None
804
+ Comment text with surrounding whitespace removed, or ``None`` if
805
+ the current node is not a comment or the comment markup cannot be
806
+ parsed.
807
+
808
+ Examples
809
+ --------
810
+ >>> parse_fragment("<!-- hello -->")[0].comment_content
811
+ 'hello'
812
+ >>> parse_fragment("<div>not a comment</div>")[0].comment_content is None
813
+ True
814
+ """
815
+ ...
816
+
817
+ @property
818
+ def inner_html(self) -> str | None:
819
+ """Return HTML representation of the child nodes.
820
+
821
+ Works similar to innerHTML in JavaScript.
822
+ Unlike the `.html` property, does not include the current node.
823
+ Can be used to set HTML as well. See the setter docstring.
824
+
825
+ Returns
826
+ -------
827
+ text : str or None
828
+ """
829
+ ...
830
+
831
+ @inner_html.setter
832
+ def inner_html(self, html: str):
833
+ """Set inner HTML to the specified HTML.
834
+
835
+ Replaces existing data inside the node.
836
+ Works similar to innerHTML in JavaScript.
837
+
838
+ Parameters
839
+ ----------
840
+ html : str
841
+
842
+ """
843
+ ...
844
+
845
+ def inner_html_pretty(
846
+ self,
847
+ indent: int = 0,
848
+ skip_ws_nodes: bool = False,
849
+ skip_comment: bool = False,
850
+ raw: bool = False,
851
+ without_closing: bool = False,
852
+ tag_with_ns: bool = False,
853
+ without_text_indent: bool = False,
854
+ full_doctype: bool = False,
855
+ html5test: bool = False,
856
+ ) -> str | None:
857
+ """Return pretty-printed HTML representation of the child nodes.
858
+
859
+ Parameters
860
+ ----------
861
+ indent : int, optional
862
+ Initial indentation level passed to Lexbor. Defaults to ``0``.
863
+ skip_ws_nodes : bool, optional
864
+ Skip text nodes that contain only whitespace.
865
+ skip_comment : bool, optional
866
+ Exclude HTML comment nodes from the serialized output.
867
+ raw : bool, optional
868
+ Serialize text and attribute values without HTML escaping.
869
+ without_closing : bool, optional
870
+ Omit closing tags for non-void elements.
871
+ tag_with_ns : bool, optional
872
+ Include namespace prefixes in serialized tag names when available.
873
+ without_text_indent : bool, optional
874
+ Disable extra indentation added around text and comment content.
875
+ full_doctype : bool, optional
876
+ Serialize the full document type declaration when a doctype node is present.
877
+ html5test : bool, optional
878
+ Serialize using Lexbor's HTML5 test formatting mode.
879
+ """
880
+ ...
881
+
882
+ def clone(self) -> LexborNode:
883
+ """Clone the current node.
884
+
885
+ You can it use to do temporary modifications without affecting the original HTML tree.
886
+
887
+ It is tied to the current parser instance.
888
+ Gets destroyed when parser instance is destroyed.
889
+ """
890
+ ...
891
+
892
+ @property
893
+ def is_element_node(self) -> bool:
894
+ """Return True if the node represents an element node."""
895
+ ...
896
+
897
+ @property
898
+ def is_text_node(self) -> bool:
899
+ """Return True if the node represents a text node."""
900
+ ...
901
+
902
+ @property
903
+ def is_comment_node(self) -> bool:
904
+ """Return True if the node represents a comment node."""
905
+ ...
906
+
907
+ @property
908
+ def is_document_node(self) -> bool:
909
+ """Return True if the node represents a document node."""
910
+ ...
911
+
912
+ @property
913
+ def is_empty_text_node(self) -> bool:
914
+ """Check whether the current node is an empty text node.
915
+
916
+ Returns
917
+ -------
918
+ bool
919
+ ``True`` when the node is a text node whose data consists solely of
920
+ ASCII whitespace characters (space, tab, newline, form feed or
921
+ carriage return).
922
+ """
923
+ ...
924
+
925
+ class LexborHTMLParser:
926
+ """The lexbor HTML parser.
927
+
928
+ Use this class to parse raw HTML.
929
+
930
+ This parser mimics most of the stuff from ``HTMLParser`` but not inherits it directly.
931
+
932
+ Parameters
933
+ ----------
934
+
935
+ html : str (unicode) or bytes
936
+ """
937
+
938
+ raw_html: bytes
939
+
940
+ def __init__(
941
+ self,
942
+ html: str | bytes,
943
+ is_fragment: bool = False,
944
+ fragment_tag: str = "div",
945
+ fragment_namespace: str = "html",
946
+ options: int = 0,
947
+ ) -> None:
948
+ """Create a parser and load HTML.
949
+
950
+ Parameters
951
+ ----------
952
+ html : str or bytes
953
+ HTML content to parse.
954
+ is_fragment : bool, optional
955
+ When ``False`` (default), the input is parsed as a full HTML document.
956
+ If the input is only a fragment, the parser still accepts it and inserts any missing required elements,
957
+ (such as `<html>`, `<head>`, and `<body>`) into the tree,
958
+ according to the HTML parsing rules in the HTML Standard.
959
+ This matches how browsers construct the DOM when they load an HTML page.
960
+
961
+ When ``True``, the input is parsed as an HTML fragment.
962
+ The parser does not insert any missing required HTML elements.
963
+ Behaves the same way as `DocumentFragment` in browsers.
964
+ When `<html>`, `<head>` or `<body>` are present, ignores them entirely.
965
+ As per the HTML Standard.
966
+ fragment_tag : str, optional
967
+ Context element tag used for fragment parsing. Defaults to ``"div"``.
968
+ Only used when ``is_fragment`` is ``True``.
969
+ fragment_namespace : str, optional
970
+ Context element namespace used for fragment parsing. Defaults to ``"html"``.
971
+ Accepts Lexbor namespace names such as ``"html"``, ``"svg"``, and ``"math"``,
972
+ or a namespace URI recognized by Lexbor. Only used when ``is_fragment`` is ``True``.
973
+ options : int, optional
974
+ Lexbor document options passed to ``lxb_html_document_dom_opt_set``.
975
+ Use the flags from :class:`LexborDocumentOptions`, e.g.
976
+ ``LexborDocumentOptions.WO_EVENTS`` to disable mutation events.
977
+
978
+ Several options can be combined with the bitwise OR operator::
979
+
980
+ LexborDocumentOptions.WO_EVENTS | LexborDocumentOptions.UNDEF
981
+
982
+ or by passing the equivalent plain integer::
983
+
984
+ LexborDocumentOptions.WO_EVENTS.value | LexborDocumentOptions.UNDEF.value
985
+
986
+ Defaults to ``0``.
987
+
988
+ """
989
+ ...
990
+
991
+ def __repr__(self) -> str:
992
+ """Return a concise representation of the parsed document.
993
+
994
+ Returns
995
+ -------
996
+ str
997
+ A string showing the number of characters in the parsed HTML.
998
+ """
999
+ ...
1000
+
1001
+ @property
1002
+ def selector(self) -> LexborCSSSelector:
1003
+ """Return a lazily created CSS selector helper.
1004
+
1005
+ Returns
1006
+ -------
1007
+ LexborCSSSelector
1008
+ Selector instance bound to this parser.
1009
+ """
1010
+ ...
1011
+
1012
+ @property
1013
+ def options(self) -> LexborDocumentOptions:
1014
+ """Return the Lexbor document options for this parser.
1015
+
1016
+ Returns
1017
+ -------
1018
+ LexborDocumentOptions
1019
+ The options currently set on the underlying Lexbor document.
1020
+ """
1021
+ ...
1022
+
1023
+ @property
1024
+ def root(self) -> LexborNode | None:
1025
+ """Return the document root node.
1026
+
1027
+ Returns
1028
+ -------
1029
+ LexborNode or None
1030
+ Root of the parsed document, or ``None`` if unavailable.
1031
+ """
1032
+ ...
1033
+
1034
+ @property
1035
+ def body(self) -> LexborNode | None:
1036
+ """Return document body.
1037
+
1038
+ Returns
1039
+ -------
1040
+ LexborNode or None
1041
+ ``<body>`` element when present, otherwise ``None``.
1042
+ """
1043
+ ...
1044
+
1045
+ @property
1046
+ def head(self) -> LexborNode | None:
1047
+ """Return document head.
1048
+
1049
+ Returns
1050
+ -------
1051
+ LexborNode or None
1052
+ ``<head>`` element when present, otherwise ``None``.
1053
+ """
1054
+ ...
1055
+
1056
+ def tags(self, name: str) -> list[LexborNode]:
1057
+ """Return all tags that match the provided name.
1058
+
1059
+ Parameters
1060
+ ----------
1061
+ name : str
1062
+ Tag name to search for (e.g., ``"div"``).
1063
+
1064
+ Returns
1065
+ -------
1066
+ list of LexborNode
1067
+ Matching elements in document order.
1068
+
1069
+ Raises
1070
+ ------
1071
+ ValueError
1072
+ If ``name`` is empty or longer than 100 characters.
1073
+ SelectolaxError
1074
+ If Lexbor cannot locate the elements.
1075
+ """
1076
+ ...
1077
+
1078
+ def text(
1079
+ self,
1080
+ deep: bool = True,
1081
+ separator: str = "",
1082
+ strip: bool = False,
1083
+ skip_empty: bool = False,
1084
+ ) -> str:
1085
+ """Returns the text of the node including text of all its child nodes.
1086
+
1087
+ Parameters
1088
+ ----------
1089
+ strip : bool, default False
1090
+ If true, calls ``str.strip()`` on each text part to remove extra white spaces.
1091
+ separator : str, default ''
1092
+ The separator to use when joining text from different nodes.
1093
+ deep : bool, default True
1094
+ If True, includes text from all child nodes.
1095
+ skip_empty : bool, optional
1096
+ Exclude text nodes whose content is only ASCII whitespace (space,
1097
+ tab, newline, form feed or carriage return) when ``True``.
1098
+ Defaults to ``False``.
1099
+
1100
+ Returns
1101
+ -------
1102
+ text : str
1103
+ Combined textual content assembled according to the provided options.
1104
+ """
1105
+ ...
1106
+
1107
+ @property
1108
+ def html(self) -> str | None:
1109
+ """Return HTML representation of the page.
1110
+
1111
+ Returns
1112
+ -------
1113
+ str or None
1114
+ Serialized HTML of the current document.
1115
+ """
1116
+ ...
1117
+
1118
+ def html_pretty(
1119
+ self,
1120
+ indent: int = 0,
1121
+ skip_ws_nodes: bool = False,
1122
+ skip_comment: bool = False,
1123
+ raw: bool = False,
1124
+ without_closing: bool = False,
1125
+ tag_with_ns: bool = False,
1126
+ without_text_indent: bool = False,
1127
+ full_doctype: bool = False,
1128
+ html5test: bool = False,
1129
+ ) -> str | None:
1130
+ """Return pretty-printed HTML representation of the page.
1131
+
1132
+ Parameters
1133
+ ----------
1134
+ indent : int, optional
1135
+ Initial indentation level passed to Lexbor. Defaults to ``0``.
1136
+ skip_ws_nodes : bool, optional
1137
+ Skip text nodes that contain only whitespace.
1138
+ skip_comment : bool, optional
1139
+ Exclude HTML comment nodes from the serialized output.
1140
+ raw : bool, optional
1141
+ Serialize text and attribute values without HTML escaping.
1142
+ without_closing : bool, optional
1143
+ Omit closing tags for non-void elements.
1144
+ tag_with_ns : bool, optional
1145
+ Include namespace prefixes in serialized tag names when available.
1146
+ without_text_indent : bool, optional
1147
+ Disable extra indentation added around text and comment content.
1148
+ full_doctype : bool, optional
1149
+ Serialize the full document type declaration when a doctype node is present.
1150
+ html5test : bool, optional
1151
+ Serialize using Lexbor's HTML5 test formatting mode.
1152
+ """
1153
+ ...
1154
+
1155
+ def css(self, query: str) -> list[LexborNode]:
1156
+ """A CSS selector.
1157
+
1158
+ Matches pattern `query` against HTML tree.
1159
+ `CSS selectors reference <https://www.w3schools.com/cssref/css_selectors.asp>`_.
1160
+
1161
+ Special selectors:
1162
+
1163
+ - parser.css('p:lexbor-contains("awesome" i)') -- case-insensitive contains
1164
+ - parser.css('p:lexbor-contains("awesome")') -- case-sensitive contains
1165
+
1166
+ Parameters
1167
+ ----------
1168
+ query : str
1169
+ CSS selector (e.g. "div > :nth-child(2n+1):not(:has(a))").
1170
+
1171
+ Returns
1172
+ -------
1173
+ selector : list of `Node` objects
1174
+ """
1175
+ ...
1176
+
1177
+ @overload
1178
+ def css_first(
1179
+ self, query: str, default: Any = ..., strict: Literal[True] = ...
1180
+ ) -> LexborNode:
1181
+ """Same as `css` but returns only the first match.
1182
+
1183
+ Parameters
1184
+ ----------
1185
+
1186
+ query : str
1187
+ default : Any, default None
1188
+ Default value to return if there is no match.
1189
+ strict: bool, default False
1190
+ Set to True if you want to check if there is strictly only one match in the document.
1191
+
1192
+
1193
+ Returns
1194
+ -------
1195
+ selector : `LexborNode` object
1196
+ """
1197
+ ...
1198
+
1199
+ @overload
1200
+ def css_first(
1201
+ self, query: str, default: DefaultT, strict: bool = False
1202
+ ) -> LexborNode | DefaultT:
1203
+ """Same as `css` but returns only the first match.
1204
+
1205
+ Parameters
1206
+ ----------
1207
+
1208
+ query : str
1209
+ default : Any, default None
1210
+ Default value to return if there is no match.
1211
+ strict: bool, default False
1212
+ Set to True if you want to check if there is strictly only one match in the document.
1213
+
1214
+
1215
+ Returns
1216
+ -------
1217
+ selector : `LexborNode` object
1218
+ """
1219
+ ...
1220
+
1221
+ @overload
1222
+ def css_first(
1223
+ self, query: str, default: None = ..., strict: bool = False
1224
+ ) -> LexborNode | None:
1225
+ """Same as `css` but returns only the first match.
1226
+
1227
+ Parameters
1228
+ ----------
1229
+
1230
+ query : str
1231
+ default : Any, default None
1232
+ Default value to return if there is no match.
1233
+ strict: bool, default False
1234
+ Set to True if you want to check if there is strictly only one match in the document.
1235
+
1236
+
1237
+ Returns
1238
+ -------
1239
+ selector : `LexborNode` object
1240
+ """
1241
+ ...
1242
+
1243
+ def strip_tags(self, tags: list[str], recursive: bool = False) -> None:
1244
+ """Remove specified tags from the node.
1245
+
1246
+ Parameters
1247
+ ----------
1248
+ tags : list of str
1249
+ List of tags to remove.
1250
+ recursive : bool, default False
1251
+ Whenever to delete all its child nodes
1252
+
1253
+ Examples
1254
+ --------
1255
+
1256
+ >>> tree = LexborHTMLParser('<html><head></head><body><script></script><div>Hello world!</div></body></html>')
1257
+ >>> tags = ['head', 'style', 'script', 'xmp', 'iframe', 'noembed', 'noframes']
1258
+ >>> tree.strip_tags(tags)
1259
+ >>> tree.html
1260
+ '<html><body><div>Hello world!</div></body></html>'
1261
+
1262
+ Returns
1263
+ -------
1264
+ None
1265
+ """
1266
+ ...
1267
+
1268
+ def select(self, query: str | None = None) -> LexborSelector | None:
1269
+ """Select nodes given a CSS selector.
1270
+
1271
+ Works similarly to the ``css`` method, but supports chained filtering and extra features.
1272
+
1273
+ Parameters
1274
+ ----------
1275
+ query : str or None
1276
+ The CSS selector to use when searching for nodes.
1277
+
1278
+ Returns
1279
+ -------
1280
+ LexborSelector or None
1281
+ Selector bound to the root node, or ``None`` if the document is empty.
1282
+ """
1283
+ ...
1284
+
1285
+ def any_css_matches(self, selectors: tuple[str]) -> bool:
1286
+ """Return ``True`` if any of the specified CSS selectors match.
1287
+
1288
+ Parameters
1289
+ ----------
1290
+ selectors : tuple[str]
1291
+ CSS selectors to evaluate.
1292
+
1293
+ Returns
1294
+ -------
1295
+ bool
1296
+ ``True`` when at least one selector matches.
1297
+ """
1298
+ ...
1299
+
1300
+ def scripts_contain(self, query: str) -> bool:
1301
+ """Return ``True`` if any script tag contains the given text.
1302
+
1303
+ Caches script tags on the first call to improve performance.
1304
+
1305
+ Parameters
1306
+ ----------
1307
+ query : str
1308
+ Text to search for within script contents.
1309
+
1310
+ Returns
1311
+ -------
1312
+ bool
1313
+ ``True`` when a matching script tag is found.
1314
+ """
1315
+ ...
1316
+
1317
+ def script_srcs_contain(self, queries: tuple[str]) -> bool:
1318
+ """Return ``True`` if any script ``src`` contains one of the strings.
1319
+
1320
+ Caches values on the first call to improve performance.
1321
+
1322
+ Parameters
1323
+ ----------
1324
+ queries : tuple of str
1325
+ Strings to look for inside ``src`` attributes.
1326
+
1327
+ Returns
1328
+ -------
1329
+ bool
1330
+ ``True`` when a matching source value is found.
1331
+ """
1332
+ ...
1333
+
1334
+ def css_matches(self, selector: str) -> bool:
1335
+ """Return ``True`` if the document matches the selector at least once.
1336
+
1337
+ Parameters
1338
+ ----------
1339
+ selector : str
1340
+ CSS selector to test.
1341
+
1342
+ Returns
1343
+ -------
1344
+ bool
1345
+ ``True`` when a match exists.
1346
+ """
1347
+ ...
1348
+
1349
+ def merge_text_nodes(self) -> None:
1350
+ """Iterates over all text nodes and merges all text nodes that are close to each other.
1351
+
1352
+ This is useful for text extraction.
1353
+ Use it when you need to strip HTML tags and merge "dangling" text.
1354
+
1355
+ Examples
1356
+ --------
1357
+
1358
+ >>> tree = LexborHTMLParser("<div><p><strong>J</strong>ohn</p><p>Doe</p></div>")
1359
+ >>> node = tree.css_first('div')
1360
+ >>> tree.unwrap_tags(["strong"])
1361
+ >>> tree.text(deep=True, separator=" ", strip=True)
1362
+ "J ohn Doe" # Text extraction produces an extra space because the strong tag was removed.
1363
+ >>> node.merge_text_nodes()
1364
+ >>> tree.text(deep=True, separator=" ", strip=True)
1365
+ "John Doe"
1366
+
1367
+ Returns
1368
+ -------
1369
+ None
1370
+ """
1371
+ ...
1372
+
1373
+ def clone(self) -> LexborHTMLParser:
1374
+ """Clone the current document tree.
1375
+
1376
+ You can use it to do temporary modifications without affecting the original HTML tree.
1377
+ It is tied to the current parser instance.
1378
+ Gets destroyed when the parser instance is destroyed.
1379
+ Document options are preserved in the cloned parser.
1380
+ The document ``head`` and ``body`` are preserved when available.
1381
+
1382
+ Returns
1383
+ -------
1384
+ LexborHTMLParser
1385
+ A parser instance backed by a deep-copied document.
1386
+ """
1387
+ ...
1388
+
1389
+ def unwrap_tags(self, tags: list[str], delete_empty: bool = False) -> None:
1390
+ """Unwraps specified tags from the HTML tree.
1391
+
1392
+ Works the same as the ``unwrap`` method, but applied to a list of tags.
1393
+
1394
+ Parameters
1395
+ ----------
1396
+ tags : list
1397
+ List of tags to remove.
1398
+ delete_empty : bool
1399
+ Whenever to delete empty tags.
1400
+
1401
+ Examples
1402
+ --------
1403
+
1404
+ >>> tree = LexborHTMLParser("<div><a href="">Hello</a> <i>world</i>!</div>")
1405
+ >>> tree.body.unwrap_tags(['i','a'])
1406
+ >>> tree.body.html
1407
+ '<body><div>Hello world!</div></body>'
1408
+
1409
+ Returns
1410
+ -------
1411
+ None
1412
+ """
1413
+ ...
1414
+
1415
+ @property
1416
+ def inner_html(self) -> str:
1417
+ """Return HTML representation of the child nodes.
1418
+
1419
+ Works similar to innerHTML in JavaScript.
1420
+ Unlike the `.html` property, does not include the current node.
1421
+ Can be used to set HTML as well. See the setter docstring.
1422
+
1423
+ Returns
1424
+ -------
1425
+ text : str | None
1426
+ """
1427
+ ...
1428
+
1429
+ @inner_html.setter
1430
+ def inner_html(self, html: str) -> None:
1431
+ """Set inner HTML to the specified HTML.
1432
+
1433
+ Replaces existing data inside the node.
1434
+ Works similar to innerHTML in JavaScript.
1435
+
1436
+ Parameters
1437
+ ----------
1438
+ html : str
1439
+
1440
+ Returns
1441
+ -------
1442
+ None
1443
+ """
1444
+ ...
1445
+
1446
+ def inner_html_pretty(
1447
+ self,
1448
+ indent: int = 0,
1449
+ skip_ws_nodes: bool = False,
1450
+ skip_comment: bool = False,
1451
+ raw: bool = False,
1452
+ without_closing: bool = False,
1453
+ tag_with_ns: bool = False,
1454
+ without_text_indent: bool = False,
1455
+ full_doctype: bool = False,
1456
+ html5test: bool = False,
1457
+ ) -> str | None:
1458
+ """Return pretty-printed HTML representation of the child nodes.
1459
+
1460
+ Parameters
1461
+ ----------
1462
+ indent : int, optional
1463
+ Initial indentation level passed to Lexbor. Defaults to ``0``.
1464
+ skip_ws_nodes : bool, optional
1465
+ Skip text nodes that contain only whitespace.
1466
+ skip_comment : bool, optional
1467
+ Exclude HTML comment nodes from the serialized output.
1468
+ raw : bool, optional
1469
+ Serialize text and attribute values without HTML escaping.
1470
+ without_closing : bool, optional
1471
+ Omit closing tags for non-void elements.
1472
+ tag_with_ns : bool, optional
1473
+ Include namespace prefixes in serialized tag names when available.
1474
+ without_text_indent : bool, optional
1475
+ Disable extra indentation added around text and comment content.
1476
+ full_doctype : bool, optional
1477
+ Serialize the full document type declaration when a doctype node is present.
1478
+ html5test : bool, optional
1479
+ Serialize using Lexbor's HTML5 test formatting mode.
1480
+ """
1481
+ ...
1482
+ def create_node(self, tag: str) -> LexborNode:
1483
+ """Given an HTML tag name, e.g. `"div"`, create a single empty node for that tag,
1484
+ e.g. `"<div></div>"`.
1485
+
1486
+
1487
+ Parameters
1488
+ ----------
1489
+ tag : str
1490
+ Name of the tag to create.
1491
+
1492
+ Returns
1493
+ -------
1494
+ LexborNode
1495
+ Newly created element node.
1496
+ Raises
1497
+ ------
1498
+ SelectolaxError
1499
+ If the element cannot be created.
1500
+
1501
+ Examples
1502
+ --------
1503
+ >>> parser = LexborHTMLParser("<div></div>")
1504
+ >>> new_node = parser.create_node("span")
1505
+ >>> new_node.tag_name
1506
+ 'span'
1507
+ >>> parser.css_first("div").append_child(new_node)
1508
+ >>> parser.html
1509
+ '<html><head></head><body><div><span></span></div></body></html>'
1510
+ """
1511
+
1512
+ def create_tag(tag: str) -> LexborNode:
1513
+ """
1514
+ Given an HTML tag name, e.g. `"div"`, create a single empty node for that tag,
1515
+ e.g. `"<div></div>"`.
1516
+
1517
+ Use `LexborHTMLParser().create_node(..)` if you need to create a node tied to a specific parser instance.
1518
+ """
1519
+ ...
1520
+
1521
+ def parse_fragment(html: str) -> list[LexborNode]:
1522
+ """
1523
+ Given HTML, parse it into a list of Nodes, such that the nodes
1524
+ correspond to the given HTML.
1525
+
1526
+ For contrast, HTMLParser adds `<html>`, `<head>`, and `<body>` tags
1527
+ if they are missing. This function does not add these tags.
1528
+ """
1529
+ ...
1530
+
1531
+ class SelectolaxError(Exception):
1532
+ """An exception that indicates error."""
1533
+
1534
+ pass