docvortex 0.5.2__tar.gz → 0.5.4__tar.gz

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 (833) hide show
  1. {docvortex-0.5.2 → docvortex-0.5.4}/PKG-INFO +16 -2
  2. {docvortex-0.5.2 → docvortex-0.5.4}/README.md +15 -1
  3. docvortex-0.5.4/docs/pdf-render-worker-leases.md +38 -0
  4. docvortex-0.5.4/docs/pdf-tight-spacing-2026-09-28.md +50 -0
  5. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/lib.rs +2 -1
  6. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/text_content.rs +26 -8
  7. docvortex-0.5.4/rust/docvortex-core/src/text_spacing.rs +118 -0
  8. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/snapshot.rs +67 -4
  9. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/_compute_backend.py +1 -1
  10. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +48 -2
  11. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/resources.py +26 -0
  12. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/odf/text.py +9 -2
  13. docvortex-0.5.4/src/docvortex/analyzers/native/office/opc.py +272 -0
  14. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +34 -47
  15. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +7 -2
  16. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/pptx/resources.py +25 -8
  17. docvortex-0.5.4/src/docvortex/analyzers/native/pdf/inline/spacing.py +92 -0
  18. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/pipeline.py +17 -1
  19. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/spatial_text.py +14 -5
  20. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/table_text_styles.py +39 -1
  21. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/pdf.py +3 -0
  22. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/detection.py +117 -9
  23. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/render_session.py +170 -71
  24. docvortex-0.5.4/src/docvortex/document/pdf/text/spacing.py +122 -0
  25. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/public_api.py +8 -0
  26. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/version.py +1 -1
  27. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex.egg-info/PKG-INFO +16 -2
  28. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex.egg-info/SOURCES.txt +10 -0
  29. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_reviewed_history.json +42 -42
  30. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/native_pdf_table_demo_manifest.json +2 -2
  31. docvortex-0.5.4/tests/fixtures/pdf_tight_spacing_review_decisions.json +216 -0
  32. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_parity.py +1 -1
  33. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_render_session.py +434 -37
  34. docvortex-0.5.4/tests/test_pdf_tight_spacing.py +217 -0
  35. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_office_title_types.py +6 -2
  36. docvortex-0.5.4/tests/unittest/test_guess_suffix_ooxml.py +155 -0
  37. docvortex-0.5.4/tests/unittest/test_office_image_alt_text.py +117 -0
  38. docvortex-0.5.4/tests/unittest/test_office_robust_fixtures.py +109 -0
  39. {docvortex-0.5.2 → docvortex-0.5.4}/tools/verify_native_abi.py +10 -1
  40. docvortex-0.5.2/src/docvortex/analyzers/native/office/opc.py +0 -38
  41. {docvortex-0.5.2 → docvortex-0.5.4}/Cargo.lock +0 -0
  42. {docvortex-0.5.2 → docvortex-0.5.4}/Cargo.toml +0 -0
  43. {docvortex-0.5.2 → docvortex-0.5.4}/LICENSE.md +0 -0
  44. {docvortex-0.5.2 → docvortex-0.5.4}/MANIFEST.in +0 -0
  45. {docvortex-0.5.2 → docvortex-0.5.4}/demo/README.md +0 -0
  46. {docvortex-0.5.2 → docvortex-0.5.4}/demo/demo.py +0 -0
  47. {docvortex-0.5.2 → docvortex-0.5.4}/demo/ebook/epub_01.epub +0 -0
  48. {docvortex-0.5.2 → docvortex-0.5.4}/demo/ebook/epub_02.epub +0 -0
  49. {docvortex-0.5.2 → docvortex-0.5.4}/demo/ms_office_docs/README.md +0 -0
  50. {docvortex-0.5.2 → docvortex-0.5.4}/demo/ms_office_docs/docx_01.doc +0 -0
  51. {docvortex-0.5.2 → docvortex-0.5.4}/demo/ms_office_docs/docx_01.docx +0 -0
  52. {docvortex-0.5.2 → docvortex-0.5.4}/demo/ms_office_docs/pptx_01.ppt +0 -0
  53. {docvortex-0.5.2 → docvortex-0.5.4}/demo/ms_office_docs/pptx_01.pptx +0 -0
  54. {docvortex-0.5.2 → docvortex-0.5.4}/demo/ms_office_docs/rtf_01.rtf +0 -0
  55. {docvortex-0.5.2 → docvortex-0.5.4}/demo/ms_office_docs/xlsx_01.xls +0 -0
  56. {docvortex-0.5.2 → docvortex-0.5.4}/demo/ms_office_docs/xlsx_01.xlsx +0 -0
  57. {docvortex-0.5.2 → docvortex-0.5.4}/demo/ofd/ofd_01.ofd +0 -0
  58. {docvortex-0.5.2 → docvortex-0.5.4}/demo/open_office_docs/docx_01.odt +0 -0
  59. {docvortex-0.5.2 → docvortex-0.5.4}/demo/open_office_docs/pptx_01.odp +0 -0
  60. {docvortex-0.5.2 → docvortex-0.5.4}/demo/open_office_docs/xlsx_01.ods +0 -0
  61. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
  62. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
  63. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/caibao1.pdf +0 -0
  64. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/demo1.pdf +0 -0
  65. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/demo2.pdf +0 -0
  66. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/demo3.pdf +0 -0
  67. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/demo4.pdf +0 -0
  68. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/demo6.pdf +0 -0
  69. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
  70. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
  71. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
  72. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
  73. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs/small_ocr.pdf +0 -0
  74. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
  75. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
  76. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
  77. {docvortex-0.5.2 → docvortex-0.5.4}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
  78. {docvortex-0.5.2 → docvortex-0.5.4}/demo/web_docs/html_01.html +0 -0
  79. {docvortex-0.5.2 → docvortex-0.5.4}/demo/web_docs/mhtml_01.mhtml +0 -0
  80. {docvortex-0.5.2 → docvortex-0.5.4}/docs/ARCHITECTURE.md +0 -0
  81. {docvortex-0.5.2 → docvortex-0.5.4}/docs/HTML_PROTOCOL.md +0 -0
  82. {docvortex-0.5.2 → docvortex-0.5.4}/docs/JSON_PROTOCOL.md +0 -0
  83. {docvortex-0.5.2 → docvortex-0.5.4}/docs/METADATA.md +0 -0
  84. {docvortex-0.5.2 → docvortex-0.5.4}/docs/PDF_FONTS.md +0 -0
  85. {docvortex-0.5.2 → docvortex-0.5.4}/docs/RENDER_OWNERSHIP.md +0 -0
  86. {docvortex-0.5.2 → docvortex-0.5.4}/docs/USAGE.md +0 -0
  87. {docvortex-0.5.2 → docvortex-0.5.4}/docs/flash-manual-annotations-2026-09-15.md +0 -0
  88. {docvortex-0.5.2 → docvortex-0.5.4}/docs/flash-round2-annotations-2026-09-15.md +0 -0
  89. {docvortex-0.5.2 → docvortex-0.5.4}/docs/flash-rule-generalization-2026-09-15.md +0 -0
  90. {docvortex-0.5.2 → docvortex-0.5.4}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
  91. {docvortex-0.5.2 → docvortex-0.5.4}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
  92. {docvortex-0.5.2 → docvortex-0.5.4}/docs/flash-title-coverage-2026-09-16.md +0 -0
  93. {docvortex-0.5.2 → docvortex-0.5.4}/docs/pdf-native-kernel-next.md +0 -0
  94. {docvortex-0.5.2 → docvortex-0.5.4}/docs/pdf-native-kernel-p4-execution.md +0 -0
  95. {docvortex-0.5.2 → docvortex-0.5.4}/docs/pdf-native-kernel.md +0 -0
  96. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-acceleration.md +0 -0
  97. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-pdf-round7.md +0 -0
  98. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-pdf-stage11-classification-render.md +0 -0
  99. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-pdf-stage12-geometry.md +0 -0
  100. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-pdf-stage13-owned-geometry.md +0 -0
  101. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-pdf-stage14-line-metrics.md +0 -0
  102. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-pdf-stage15-table-candidates.md +0 -0
  103. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-pdf-stage16-bitmap-crops.md +0 -0
  104. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-pdf-stage17-inline-styles.md +0 -0
  105. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-pdf-stage5-render.md +0 -0
  106. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-pdf-stage6-text.md +0 -0
  107. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-pdf-stage7-content.md +0 -0
  108. {docvortex-0.5.2 → docvortex-0.5.4}/docs/rust-pdf-stage9-inline.md +0 -0
  109. {docvortex-0.5.2 → docvortex-0.5.4}/docs/sdk-0.4.md +0 -0
  110. {docvortex-0.5.2 → docvortex-0.5.4}/pyproject.toml +0 -0
  111. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/Cargo.toml +0 -0
  112. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/annotation_geometry.rs +0 -0
  113. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/columns.rs +0 -0
  114. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/dedup.rs +0 -0
  115. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/extraction.rs +0 -0
  116. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/geometry.rs +0 -0
  117. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/geometry_lines.rs +0 -0
  118. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/geometry_risk.rs +0 -0
  119. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/geometry_runs.rs +0 -0
  120. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/geometry_style.rs +0 -0
  121. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/inline_pairs.rs +0 -0
  122. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/inline_styles.rs +0 -0
  123. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/note_index.rs +0 -0
  124. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/pixels.rs +0 -0
  125. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/row_geometry.rs +0 -0
  126. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/scripts.rs +0 -0
  127. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/spatial.rs +0 -0
  128. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/statistics.rs +0 -0
  129. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/table_candidates.rs +0 -0
  130. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/table_merge.rs +0 -0
  131. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/tables.rs +0 -0
  132. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/text_assignment.rs +0 -0
  133. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/text_classification.rs +0 -0
  134. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/text_pipeline.rs +0 -0
  135. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/src/text_snapshot.rs +0 -0
  136. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-core/tests/contracts.rs +0 -0
  137. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-pdfium/Cargo.toml +0 -0
  138. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-pdfium/src/classification.rs +0 -0
  139. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-pdfium/src/fonts.rs +0 -0
  140. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-pdfium/src/lib.rs +0 -0
  141. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-pdfium/src/objects.rs +0 -0
  142. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-pdfium/src/paths.rs +0 -0
  143. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-pdfium/src/text_colors.rs +0 -0
  144. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/Cargo.toml +0 -0
  145. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/classification.rs +0 -0
  146. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/conversion.rs +0 -0
  147. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/dedup.rs +0 -0
  148. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/fonts.rs +0 -0
  149. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/geometry.rs +0 -0
  150. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/geometry_document.rs +0 -0
  151. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/geometry_risk.rs +0 -0
  152. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/geometry_runs.rs +0 -0
  153. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/inline_styles.rs +0 -0
  154. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/lib.rs +0 -0
  155. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/pdfium.rs +0 -0
  156. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/pixels.rs +0 -0
  157. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/script_snapshot.rs +0 -0
  158. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/scripts.rs +0 -0
  159. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/spatial.rs +0 -0
  160. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/statistics.rs +0 -0
  161. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/table_candidates.rs +0 -0
  162. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/table_merge.rs +0 -0
  163. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/tables.rs +0 -0
  164. {docvortex-0.5.2 → docvortex-0.5.4}/rust/docvortex-python/src/text_pipeline.rs +0 -0
  165. {docvortex-0.5.2 → docvortex-0.5.4}/rust-toolchain.toml +0 -0
  166. {docvortex-0.5.2 → docvortex-0.5.4}/schemas/middle-2.0.json +0 -0
  167. {docvortex-0.5.2 → docvortex-0.5.4}/schemas/model-2.0.json +0 -0
  168. {docvortex-0.5.2 → docvortex-0.5.4}/setup.cfg +0 -0
  169. {docvortex-0.5.2 → docvortex-0.5.4}/setup.py +0 -0
  170. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/__init__.py +0 -0
  171. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/__init__.py +0 -0
  172. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/__init__.py +0 -0
  173. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
  174. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
  175. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/_shared/image.py +0 -0
  176. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
  177. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
  178. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
  179. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
  180. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
  181. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
  182. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/_shared/names.py +0 -0
  183. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
  184. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/contracts.py +0 -0
  185. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/csv.py +0 -0
  186. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
  187. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/epub/constants.py +0 -0
  188. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/epub/converter.py +0 -0
  189. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/epub/errors.py +0 -0
  190. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
  191. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/epub/package.py +0 -0
  192. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/epub/properties.py +0 -0
  193. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
  194. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/html/__init__.py +0 -0
  195. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/html/anchors.py +0 -0
  196. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/html/constants.py +0 -0
  197. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/html/converter.py +0 -0
  198. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/html/document.py +0 -0
  199. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/html/errors.py +0 -0
  200. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/html/metadata.py +0 -0
  201. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/html/resources.py +0 -0
  202. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/html/selector.py +0 -0
  203. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/mhtml/__init__.py +0 -0
  204. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/mhtml/converter.py +0 -0
  205. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/mhtml/resources.py +0 -0
  206. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/models.py +0 -0
  207. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
  208. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
  209. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
  210. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
  211. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
  212. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
  213. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/images.py +0 -0
  214. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
  215. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/models.py +0 -0
  216. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/package.py +0 -0
  217. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/path.py +0 -0
  218. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
  219. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
  220. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
  221. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/table.py +0 -0
  222. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/text.py +0 -0
  223. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
  224. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/__init__.py +0 -0
  225. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
  226. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
  227. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
  228. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
  229. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
  230. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
  231. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
  232. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
  233. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
  234. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
  235. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
  236. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
  237. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
  238. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
  239. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
  240. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
  241. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
  242. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
  243. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
  244. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
  245. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
  246. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
  247. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
  248. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
  249. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
  250. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
  251. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
  252. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
  253. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
  254. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
  255. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
  256. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
  257. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/errors.py +0 -0
  258. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/image.py +0 -0
  259. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
  260. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
  261. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
  262. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
  263. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/limits.py +0 -0
  264. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/metadata.py +0 -0
  265. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
  266. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
  267. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
  268. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
  269. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
  270. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
  271. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
  272. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
  273. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/odf/styles.py +0 -0
  274. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/odf/table.py +0 -0
  275. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
  276. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
  277. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
  278. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
  279. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
  280. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
  281. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
  282. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
  283. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
  284. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
  285. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
  286. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
  287. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
  288. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
  289. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
  290. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
  291. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
  292. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
  293. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
  294. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
  295. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
  296. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
  297. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
  298. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
  299. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
  300. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
  301. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/spreadsheet/region_discovery.py +0 -0
  302. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/streams.py +0 -0
  303. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
  304. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
  305. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
  306. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
  307. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
  308. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
  309. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
  310. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
  311. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
  312. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
  313. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
  314. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
  315. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
  316. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
  317. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
  318. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_interval_candidates.py +0 -0
  319. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_native_geometry.py +0 -0
  320. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_native_table_merge.py +0 -0
  321. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_ordered_statistics.py +0 -0
  322. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
  323. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
  324. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
  325. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
  326. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
  327. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
  328. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
  329. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
  330. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
  331. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
  332. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
  333. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
  334. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
  335. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
  336. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
  337. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
  338. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
  339. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
  340. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
  341. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
  342. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
  343. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
  344. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
  345. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
  346. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
  347. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
  348. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/inline/owned_styles.py +0 -0
  349. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
  350. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
  351. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
  352. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
  353. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
  354. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/models.py +0 -0
  355. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
  356. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
  357. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
  358. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
  359. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
  360. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
  361. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
  362. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
  363. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
  364. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
  365. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
  366. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
  367. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
  368. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
  369. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
  370. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
  371. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
  372. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
  373. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
  374. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
  375. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
  376. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
  377. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
  378. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
  379. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
  380. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
  381. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
  382. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
  383. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
  384. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
  385. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
  386. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
  387. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/api.py +0 -0
  388. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/assets/__init__.py +0 -0
  389. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/assets/images.py +0 -0
  390. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/assets/store.py +0 -0
  391. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/cli.py +0 -0
  392. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/codecs/__init__.py +0 -0
  393. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/codecs/html/__init__.py +0 -0
  394. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/codecs/html/contracts.py +0 -0
  395. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/codecs/html/materializer.py +0 -0
  396. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/codecs/html/parser.py +0 -0
  397. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/codecs/html/resources.py +0 -0
  398. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/codecs/json.py +0 -0
  399. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/__init__.py +0 -0
  400. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/inline.py +0 -0
  401. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/links.py +0 -0
  402. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/markup/__init__.py +0 -0
  403. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/markup/anchors.py +0 -0
  404. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/markup/formula.py +0 -0
  405. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/markup/projector.py +0 -0
  406. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/markup/styles.py +0 -0
  407. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/mathml.py +0 -0
  408. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/normalization.py +0 -0
  409. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/spans.py +0 -0
  410. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/table/__init__.py +0 -0
  411. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/table/blocks.py +0 -0
  412. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/table/content.py +0 -0
  413. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/table/document.py +0 -0
  414. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/table/html.py +0 -0
  415. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/table/models.py +0 -0
  416. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/table/rules.py +0 -0
  417. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/table/structure.py +0 -0
  418. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/text.py +0 -0
  419. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/content/tree.py +0 -0
  420. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/__init__.py +0 -0
  421. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/contracts.py +0 -0
  422. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/filetypes.py +0 -0
  423. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/mhtml.py +0 -0
  424. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/page_range.py +0 -0
  425. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/__init__.py +0 -0
  426. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/_document.py +0 -0
  427. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/_object_bridge.py +0 -0
  428. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/classification_bridge.py +0 -0
  429. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/classify.py +0 -0
  430. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/constants.py +0 -0
  431. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/font_runtime.py +0 -0
  432. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/images.py +0 -0
  433. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/layout.py +0 -0
  434. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/metadata.py +0 -0
  435. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/native_annotations.py +0 -0
  436. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/native_contracts.py +0 -0
  437. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/native_coordinates.py +0 -0
  438. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
  439. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/native_objects.py +0 -0
  440. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
  441. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/pdfium.py +0 -0
  442. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/raster.py +0 -0
  443. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/snapshot.py +0 -0
  444. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/snapshot_bridge.py +0 -0
  445. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/text/__init__.py +0 -0
  446. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/text/_contracts.py +0 -0
  447. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/text/_pdfium_bridge.py +0 -0
  448. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/text/dedup.py +0 -0
  449. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/text/extract.py +0 -0
  450. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/text/geometry.py +0 -0
  451. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/text/groups.py +0 -0
  452. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/pdf/visuals.py +0 -0
  453. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/properties.py +0 -0
  454. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/document/source.py +0 -0
  455. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/errors.py +0 -0
  456. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/export/__init__.py +0 -0
  457. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/export/_images.py +0 -0
  458. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/export/bundle.py +0 -0
  459. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/export/files.py +0 -0
  460. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/export/middle.py +0 -0
  461. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/__init__.py +0 -0
  462. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/_coordinates.py +0 -0
  463. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/_geometry.py +0 -0
  464. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/_hyperlink.py +0 -0
  465. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/_image.py +0 -0
  466. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/_image_operations.py +0 -0
  467. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/_image_payload.py +0 -0
  468. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/_svg_raster.py +0 -0
  469. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/_text.py +0 -0
  470. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/image_encoding.py +0 -0
  471. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/language.py +0 -0
  472. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/magika.py +0 -0
  473. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/type_identity.py +0 -0
  474. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/foundation/xml_names.py +0 -0
  475. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/geometry.py +0 -0
  476. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/metadata.py +0 -0
  477. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/options.py +0 -0
  478. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/postprocess/__init__.py +0 -0
  479. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/postprocess/content.py +0 -0
  480. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/postprocess/document.py +0 -0
  481. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/postprocess/lists.py +0 -0
  482. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/postprocess/page_blocks.py +0 -0
  483. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/postprocess/pages.py +0 -0
  484. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/postprocess/paragraphs.py +0 -0
  485. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/postprocess/visual.py +0 -0
  486. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/__init__.py +0 -0
  487. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/__init__.py +0 -0
  488. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/common/__init__.py +0 -0
  489. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/common/context.py +0 -0
  490. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/common/html_table.py +0 -0
  491. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/common/index.py +0 -0
  492. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/common/list_items.py +0 -0
  493. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/common/planner.py +0 -0
  494. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/docx/__init__.py +0 -0
  495. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/docx/assets.py +0 -0
  496. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/docx/inline.py +0 -0
  497. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/docx/math.py +0 -0
  498. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/docx/renderer.py +0 -0
  499. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/docx/styles.py +0 -0
  500. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/docx/table.py +0 -0
  501. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/epub/__init__.py +0 -0
  502. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/epub/assets.py +0 -0
  503. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/epub/package.py +0 -0
  504. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/epub/renderer.py +0 -0
  505. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/html/__init__.py +0 -0
  506. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/html/inline.py +0 -0
  507. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/html/renderer.py +0 -0
  508. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
  509. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/html/table.py +0 -0
  510. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/latex/__init__.py +0 -0
  511. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/latex/assets.py +0 -0
  512. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/latex/inline.py +0 -0
  513. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/latex/renderer.py +0 -0
  514. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/latex/table.py +0 -0
  515. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
  516. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/markdown/assets.py +0 -0
  517. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
  518. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
  519. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/markdown/inline.py +0 -0
  520. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
  521. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/markdown/table.py +0 -0
  522. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
  523. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/assets.py +0 -0
  524. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
  525. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
  526. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/formula.py +0 -0
  527. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
  528. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/inline.py +0 -0
  529. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/original.py +0 -0
  530. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
  531. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/paragraph.py +0 -0
  532. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
  533. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/styles.py +0 -0
  534. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/table.py +0 -0
  535. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
  536. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
  537. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
  538. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
  539. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
  540. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/api.py +0 -0
  541. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/contracts.py +0 -0
  542. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/docx.py +0 -0
  543. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/epub.py +0 -0
  544. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/fragments.py +0 -0
  545. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/html.py +0 -0
  546. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/latex.py +0 -0
  547. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/markdown.py +0 -0
  548. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/pdf.py +0 -0
  549. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/render/structured_content.py +0 -0
  550. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/resources/epub/docvortex.css +0 -0
  551. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
  552. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/resources/fonts/NOTICE +0 -0
  553. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/resources/fonts/manifest.json +0 -0
  554. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/resources/html/docvortex.css +0 -0
  555. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/resources/html/docvortex.min.css +0 -0
  556. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
  557. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/result.py +0 -0
  558. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/schema.py +0 -0
  559. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex/visualization.py +0 -0
  560. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex.egg-info/dependency_links.txt +0 -0
  561. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex.egg-info/entry_points.txt +0 -0
  562. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex.egg-info/not-zip-safe +0 -0
  563. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex.egg-info/requires.txt +0 -0
  564. {docvortex-0.5.2 → docvortex-0.5.4}/src/docvortex.egg-info/top_level.txt +0 -0
  565. {docvortex-0.5.2 → docvortex-0.5.4}/tests/benchmarks/compare_native_corpus.py +0 -0
  566. {docvortex-0.5.2 → docvortex-0.5.4}/tests/benchmarks/compare_pdf_revisions.py +0 -0
  567. {docvortex-0.5.2 → docvortex-0.5.4}/tests/benchmarks/flash_pdf.py +0 -0
  568. {docvortex-0.5.2 → docvortex-0.5.4}/tests/benchmarks/native_pdf_table.py +0 -0
  569. {docvortex-0.5.2 → docvortex-0.5.4}/tests/benchmarks/pdf_corpus.py +0 -0
  570. {docvortex-0.5.2 → docvortex-0.5.4}/tests/benchmarks/pdf_input.py +0 -0
  571. {docvortex-0.5.2 → docvortex-0.5.4}/tests/benchmarks/pdf_memory.py +0 -0
  572. {docvortex-0.5.2 → docvortex-0.5.4}/tests/benchmarks/pdf_render.py +0 -0
  573. {docvortex-0.5.2 → docvortex-0.5.4}/tests/benchmarks/pipeline.py +0 -0
  574. {docvortex-0.5.2 → docvortex-0.5.4}/tests/benchmarks/rust_pdf.py +0 -0
  575. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
  576. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_layout_block_expectations.json +0 -0
  577. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
  578. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
  579. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_manual_annotations.json +0 -0
  580. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_manual_review_decisions.json +0 -0
  581. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_round2_annotations.json +0 -0
  582. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_round2_review_decisions.json +0 -0
  583. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_round3_annotations.json +0 -0
  584. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
  585. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_round3_review_decisions.json +0 -0
  586. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
  587. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
  588. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
  589. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
  590. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
  591. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/pdf_char_dedup.json +0 -0
  592. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
  593. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/pdf_numeric_citations_review.json +0 -0
  594. {docvortex-0.5.2 → docvortex-0.5.4}/tests/fixtures/rtf/semantic.rtf +0 -0
  595. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_architecture.py +0 -0
  596. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_benchmark_entrypoint.py +0 -0
  597. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_brand_protocol.py +0 -0
  598. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_cli_logging.py +0 -0
  599. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_complete_pipeline.py +0 -0
  600. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_compute_backend.py +0 -0
  601. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_converter_lifecycle.py +0 -0
  602. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_document_envelope.py +0 -0
  603. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_document_metadata.py +0 -0
  604. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_export_image_names.py +0 -0
  605. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_format_matrix.py +0 -0
  606. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_geometry_api.py +0 -0
  607. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_history_geometry_tools.py +0 -0
  608. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_html_namespace.py +0 -0
  609. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_magika_runtime.py +0 -0
  610. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_mixed_font_script_reference.py +0 -0
  611. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_model_tape.py +0 -0
  612. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_bitmap_crops.py +0 -0
  613. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_classification.py +0 -0
  614. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_font_runtime.py +0 -0
  615. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_inline_styles.py +0 -0
  616. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_round3.py +0 -0
  617. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_round4.py +0 -0
  618. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_round5.py +0 -0
  619. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_round6.py +0 -0
  620. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_round7.py +0 -0
  621. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_statistics.py +0 -0
  622. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_table_candidates.py +0 -0
  623. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_text_pipeline.py +0 -0
  624. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_native_text_snapshot.py +0 -0
  625. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_analysis_api.py +0 -0
  626. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_cpu_evidence.py +0 -0
  627. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_font_geometry.py +0 -0
  628. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_font_runtime.py +0 -0
  629. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_model_text_normalization.py +0 -0
  630. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_numeric_citations.py +0 -0
  631. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_object_bridge.py +0 -0
  632. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_output_text.py +0 -0
  633. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_render_pool.py +0 -0
  634. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_snapshot.py +0 -0
  635. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_source_row_merging.py +0 -0
  636. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdf_symbol_normalization.py +0 -0
  637. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_pdfium_bridge.py +0 -0
  638. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_public_export_api.py +0 -0
  639. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_public_image_api.py +0 -0
  640. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_public_pipeline.py +0 -0
  641. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_refactor_raster.py +0 -0
  642. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_refactor_rendering.py +0 -0
  643. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_refactor_resources.py +0 -0
  644. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_release_ci_gate.py +0 -0
  645. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_render_ownership.py +0 -0
  646. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_renderer_branding.py +0 -0
  647. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_shared_boundaries.py +0 -0
  648. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_system_font_pdf_pipeline.py +0 -0
  649. {docvortex-0.5.2 → docvortex-0.5.4}/tests/test_validated_geometry.py +0 -0
  650. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
  651. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_epub_test_utils.py +0 -0
  652. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_flash_pdf_test_utils.py +0 -0
  653. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_image_mtef_test_utils.py +0 -0
  654. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_legacy_doc_test_utils.py +0 -0
  655. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
  656. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_legacy_xls_test_utils.py +0 -0
  657. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_metafile_test_utils.py +0 -0
  658. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_mhtml_test_utils.py +0 -0
  659. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_mtef_test_utils.py +0 -0
  660. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_mtef_v5_test_utils.py +0 -0
  661. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_native_test_utils.py +0 -0
  662. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_odf_test_utils.py +0 -0
  663. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_ofd_test_utils.py +0 -0
  664. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
  665. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
  666. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/_span_test_utils.py +0 -0
  667. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
  668. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
  669. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
  670. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
  671. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
  672. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
  673. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
  674. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
  675. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
  676. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
  677. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
  678. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
  679. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
  680. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
  681. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
  682. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
  683. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
  684. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
  685. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
  686. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
  687. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
  688. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
  689. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
  690. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
  691. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
  692. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
  693. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
  694. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
  695. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
  696. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/numeric_citations_introduction.pdf +0 -0
  697. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/pdfs/test.pdf +0 -0
  698. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_backend_architecture.py +0 -0
  699. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_backend_block_object_regressions.py +0 -0
  700. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_docx_assets.py +0 -0
  701. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_docx_complex_fields.py +0 -0
  702. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_docx_math.py +0 -0
  703. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_docx_render.py +0 -0
  704. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_docx_special_char_tables.py +0 -0
  705. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_docx_table.py +0 -0
  706. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_docx_table_context.py +0 -0
  707. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_docx_table_metafiles.py +0 -0
  708. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_emfplus_integration.py +0 -0
  709. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_epub_backlinks.py +0 -0
  710. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_epub_quoted_note_types.py +0 -0
  711. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_epub_render.py +0 -0
  712. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
  713. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_csv.py +0 -0
  714. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_docx_equationxml.py +0 -0
  715. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_epub.py +0 -0
  716. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_html.py +0 -0
  717. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_image_mtef.py +0 -0
  718. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
  719. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_legacy_doc.py +0 -0
  720. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
  721. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_legacy_ppt.py +0 -0
  722. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_legacy_xls.py +0 -0
  723. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
  724. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_manual_annotations.py +0 -0
  725. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_markup_anchors.py +0 -0
  726. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_mhtml.py +0 -0
  727. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_model.py +0 -0
  728. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_mtef_v5.py +0 -0
  729. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_odf.py +0 -0
  730. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_ofd.py +0 -0
  731. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_office_image_mtef.py +0 -0
  732. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_office_metafile.py +0 -0
  733. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_office_models.py +0 -0
  734. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
  735. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
  736. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
  737. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
  738. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
  739. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
  740. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
  741. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
  742. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_extractor.py +0 -0
  743. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_formulas.py +0 -0
  744. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_graphics.py +0 -0
  745. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
  746. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
  747. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
  748. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_native_text.py +0 -0
  749. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
  750. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
  751. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_samples.py +0 -0
  752. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_scripts.py +0 -0
  753. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_semantics.py +0 -0
  754. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_short_tails.py +0 -0
  755. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_tables.py +0 -0
  756. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
  757. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
  758. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_titles.py +0 -0
  759. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
  760. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_round2_annotations.py +0 -0
  761. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_round3_annotations.py +0 -0
  762. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_rtf.py +0 -0
  763. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_rule_generalization.py +0 -0
  764. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_shared_helpers.py +0 -0
  765. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_spatial_evidence.py +0 -0
  766. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
  767. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_guess_suffix_ole2.py +0 -0
  768. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_html_css_build.py +0 -0
  769. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_html_render.py +0 -0
  770. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_html_security.py +0 -0
  771. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
  772. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_latex_render.py +0 -0
  773. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_markdown_render.py +0 -0
  774. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_middle_json_block_models.py +0 -0
  775. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_middle_json_export.py +0 -0
  776. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_middle_json_validator.py +0 -0
  777. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_model_json.py +0 -0
  778. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_native_pdf_table.py +0 -0
  779. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
  780. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
  781. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
  782. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
  783. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
  784. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_ofd_assembly.py +0 -0
  785. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_ofd_vector_tables.py +0 -0
  786. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_office_demo_exports.py +0 -0
  787. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_office_demo_pages.py +0 -0
  788. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_office_parser_regressions.py +0 -0
  789. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_cjk_objects.py +0 -0
  790. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_cjk_style.py +0 -0
  791. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
  792. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_classify.py +0 -0
  793. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_demo_links.py +0 -0
  794. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
  795. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_document.py +0 -0
  796. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_formula_layout.py +0 -0
  797. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_object_clipping.py +0 -0
  798. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_original_layout.py +0 -0
  799. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_pagination.py +0 -0
  800. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
  801. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_render.py +0 -0
  802. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
  803. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_structured_tables.py +0 -0
  804. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_table_cache.py +0 -0
  805. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_table_round2.py +0 -0
  806. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_text_dedup.py +0 -0
  807. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_text_styles.py +0 -0
  808. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_title_font_plan.py +0 -0
  809. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_title_space.py +0 -0
  810. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_pdf_visualization.py +0 -0
  811. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_postprocess_page_blocks.py +0 -0
  812. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_postprocess_pages.py +0 -0
  813. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_postprocess_paragraphs.py +0 -0
  814. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_postprocess_visual.py +0 -0
  815. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_render_api.py +0 -0
  816. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_render_html_table.py +0 -0
  817. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_render_image_renderer.py +0 -0
  818. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_render_list_index_utils.py +0 -0
  819. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_structured_content_render.py +0 -0
  820. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_svg_raster.py +0 -0
  821. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_table_merge.py +0 -0
  822. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_table_merge_cell_merge.py +0 -0
  823. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_text_block_anchor.py +0 -0
  824. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_text_boundary_rules.py +0 -0
  825. {docvortex-0.5.2 → docvortex-0.5.4}/tests/unittest/test_text_utils.py +0 -0
  826. {docvortex-0.5.2 → docvortex-0.5.4}/tools/__init__.py +0 -0
  827. {docvortex-0.5.2 → docvortex-0.5.4}/tools/build_html_css.py +0 -0
  828. {docvortex-0.5.2 → docvortex-0.5.4}/tools/calibrate_pdf_geometry.py +0 -0
  829. {docvortex-0.5.2 → docvortex-0.5.4}/tools/capture_baseline.py +0 -0
  830. {docvortex-0.5.2 → docvortex-0.5.4}/tools/capture_platform_layout.py +0 -0
  831. {docvortex-0.5.2 → docvortex-0.5.4}/tools/compare_font_platforms.py +0 -0
  832. {docvortex-0.5.2 → docvortex-0.5.4}/tools/font_geometry.py +0 -0
  833. {docvortex-0.5.2 → docvortex-0.5.4}/tools/verify_native_wheel.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.5.2
3
+ Version: 0.5.4
4
4
  Summary: A fast, multi-format document parsing and conversion engine
5
5
  License-Expression: MIT
6
6
  Project-URL: Repository, https://github.com/myhloli/DocVortex
@@ -62,12 +62,14 @@ Dynamic: license-file
62
62
 
63
63
  [![PyPI](https://img.shields.io/pypi/v/docvortex?color=008cff)](https://pypi.org/project/docvortex/)
64
64
  [![Python](https://img.shields.io/pypi/pyversions/docvortex)](https://pypi.org/project/docvortex/)
65
+ [![Downloads](https://static.pepy.tech/badge/docvortex)](https://pepy.tech/project/docvortex)
66
+ [![Monthly Downloads](https://static.pepy.tech/badge/docvortex/month)](https://pepy.tech/project/docvortex)
65
67
  [![CI](https://github.com/myhloli/DocVortex/actions/workflows/ci.yml/badge.svg)](https://github.com/myhloli/DocVortex/actions/workflows/ci.yml)
66
68
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/myhloli/DocVortex/blob/main/LICENSE.md)
67
69
 
68
70
  **English** · [简体中文](https://github.com/myhloli/DocVortex/blob/main/README_zh-CN.md)
69
71
 
70
- [Quick start](#quick-start) · [Formats](#supported-formats) · [Documentation](#documentation)
72
+ [Performance](#pdf-performance) · [Quick start](#quick-start) · [Formats](#supported-formats) · [Documentation](#documentation)
71
73
 
72
74
  </div>
73
75
 
@@ -86,6 +88,18 @@ Native parsing works without an OCR or VLM inference service. Use DocVortex dire
86
88
 
87
89
  ![DocVortex pipeline: native documents become a unified representation, then Markdown, HTML, LaTeX, DOCX, EPUB, PDF or structured JSON.](https://gcore.jsdelivr.net/gh/myhloli/DocVortex@main/docs/images/docvortex-overview.jpg)
88
90
 
91
+ ## PDF performance
92
+
93
+ **The 0.5 series brings a major boost to PDF processing with Rust acceleration: public parsing is 2.76× as fast as 0.4.25 on the tested corpus.**
94
+
95
+ | Pipeline | 0.4.25 | 0.5.2 (Rust + session) | Speedup | Time reduction | Peak RSS reduction |
96
+ | --- | ---: | ---: | ---: | ---: | ---: |
97
+ | DocVortex public `parse()` | 42.36 s | 15.35 s | **2.76×** | **63.77%** | **33.45%** |
98
+ | MinerU Flash | 44.50 s | 15.78 s | **2.82×** | **64.53%** | **32.78%** |
99
+ | MinerU shared PDF processing | 76.28 s | 14.91 s | **5.12×** | **80.45%** | **36.25%** |
100
+
101
+ Same-machine warm-run comparison on 32 PDFs / 299 pages (31 PDFs for Flash); times are sums of per-document medians. RSS reductions are medians of per-document process-tree peak RSS reductions. MinerU results include improvements in both projects. The shared pipeline excludes model computation; excluding the extreme dense-table sample, its speedup is **2.46×**.
102
+
89
103
  ## Quick start
90
104
 
91
105
  Requires **Python 3.10–3.14**.
@@ -8,12 +8,14 @@
8
8
 
9
9
  [![PyPI](https://img.shields.io/pypi/v/docvortex?color=008cff)](https://pypi.org/project/docvortex/)
10
10
  [![Python](https://img.shields.io/pypi/pyversions/docvortex)](https://pypi.org/project/docvortex/)
11
+ [![Downloads](https://static.pepy.tech/badge/docvortex)](https://pepy.tech/project/docvortex)
12
+ [![Monthly Downloads](https://static.pepy.tech/badge/docvortex/month)](https://pepy.tech/project/docvortex)
11
13
  [![CI](https://github.com/myhloli/DocVortex/actions/workflows/ci.yml/badge.svg)](https://github.com/myhloli/DocVortex/actions/workflows/ci.yml)
12
14
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/myhloli/DocVortex/blob/main/LICENSE.md)
13
15
 
14
16
  **English** · [简体中文](https://github.com/myhloli/DocVortex/blob/main/README_zh-CN.md)
15
17
 
16
- [Quick start](#quick-start) · [Formats](#supported-formats) · [Documentation](#documentation)
18
+ [Performance](#pdf-performance) · [Quick start](#quick-start) · [Formats](#supported-formats) · [Documentation](#documentation)
17
19
 
18
20
  </div>
19
21
 
@@ -32,6 +34,18 @@ Native parsing works without an OCR or VLM inference service. Use DocVortex dire
32
34
 
33
35
  ![DocVortex pipeline: native documents become a unified representation, then Markdown, HTML, LaTeX, DOCX, EPUB, PDF or structured JSON.](https://gcore.jsdelivr.net/gh/myhloli/DocVortex@main/docs/images/docvortex-overview.jpg)
34
36
 
37
+ ## PDF performance
38
+
39
+ **The 0.5 series brings a major boost to PDF processing with Rust acceleration: public parsing is 2.76× as fast as 0.4.25 on the tested corpus.**
40
+
41
+ | Pipeline | 0.4.25 | 0.5.2 (Rust + session) | Speedup | Time reduction | Peak RSS reduction |
42
+ | --- | ---: | ---: | ---: | ---: | ---: |
43
+ | DocVortex public `parse()` | 42.36 s | 15.35 s | **2.76×** | **63.77%** | **33.45%** |
44
+ | MinerU Flash | 44.50 s | 15.78 s | **2.82×** | **64.53%** | **32.78%** |
45
+ | MinerU shared PDF processing | 76.28 s | 14.91 s | **5.12×** | **80.45%** | **36.25%** |
46
+
47
+ Same-machine warm-run comparison on 32 PDFs / 299 pages (31 PDFs for Flash); times are sums of per-document medians. RSS reductions are medians of per-document process-tree peak RSS reductions. MinerU results include improvements in both projects. The shared pipeline excludes model computation; excluding the extreme dense-table sample, its speedup is **2.46×**.
48
+
35
49
  ## Quick start
36
50
 
37
51
  Requires **Python 3.10–3.14**.
@@ -0,0 +1,38 @@
1
+ # PDF 渲染任务租约与空闲文档缓存
2
+
3
+ `PDFRenderSession` 保存共享输入文件、参数和取消状态;worker 使用权只持续到一次 `render()` 完成。进程池继续受既有全局预算约束,默认最多三个 worker,池的范围是当前宿主进程。
4
+
5
+ ## 调度与缓存
6
+
7
+ - 等待请求按 FIFO 获取租约,归还、取消和池关闭通过条件变量唤醒等待者。有其他请求排队时先分配一个 worker;请求不会持有部分 worker 再等待更多额度。
8
+ - 空闲 worker 优先按文档身份复用,其次选择无缓存的 worker,最后替换其他文档的缓存。每个 worker 最多保留一个 PDFium 文档。
9
+ - 渲染结果全部收到并物化为独立图片后,归还所有任务租约。空闲缓存不阻止其他文档使用进程;模型推理不持有渲染租约。
10
+ - 跨文档切换先发送 `close` 并确认旧输入释放,再发送 `open`。输入文件、常驻进程、原始像素传输和裁图算法继续复用。
11
+
12
+ ## 关闭与异常
13
+
14
+ 缓存归属和任务租约归属分别登记。A 的缓存正由 B 替换时,A 关闭会等待旧输入释放确认;它不会取消 B,也不会在确认前删除输入文件。B 已经打开自己的输入后,A 的关闭不再触碰该 worker。
15
+
16
+ 任务取消、打开或切换失败、活动进程崩溃会终止对应 worker 并归还额度。空闲进程崩溃只使缓存失效,下次请求可以重建。全池关闭直接回收活动进程,不向另一个线程正在读取的活动管道插入关闭命令。
17
+
18
+ legacy 后端仍不得与活动 session 渲染并行叠加进程预算,但可以替换空闲缓存;未关闭的 session 随后可重新加载输入。等待预算的请求在真正取得额度后再次检查后端互斥状态。
19
+
20
+ ## 接口与诊断
21
+
22
+ 公开调用签名不变,`auto` 后端选择不变。`worker_diagnostics` 继续累计实际打开输入的记录,同文档命中缓存不增加打开次数。`close_diagnostics` 记录缓存被替换或文档关闭时的输入释放;强制进程回收记录额外包含 `worker_terminated: true`。
23
+
24
+ 内部 `_workers` 仅表示该 session 当前任务的租约,正常 `render()` 返回后为空;worker 进程仍可在全局空闲池中存活。文档关闭仍确认自己的所有输入句柄已释放,然后删除临时文件。
25
+
26
+ ## 回归覆盖
27
+
28
+ 测试覆盖同文档缓存亲和性、五份打开文档共享三个进程、FIFO 与队首取消、等待超时、活动和空闲进程崩溃、切换失败、旧会话关闭与缓存替换竞态、新旧后端切换,以及完整页像素、旋转、透明度、裁图编码和图像所有权。
29
+
30
+ 性能验证分别检查无竞争时的缓存收益、真实 PDF 输出摘要和连续处理的进程树 RSS。模型调用未参与这些渲染基准,不能将其耗时直接解释为完整解析或在线服务的吞吐。
31
+
32
+ ### 本地验证(2026-09-28)
33
+
34
+ - PDF 相关回归(含真实 MinerU 五文档推理屏障):386 passed;MinerU session 与窗口专项:21 passed。五文档均能在任一解析结束前进入推理等待,此时渲染租约为零。
35
+ - 冻结基线为 `31654b8` 的原渲染模块,其余代码与原生扩展保持相同。32 PDF/299 页、4 页窗口,以及额外 64 页和逐页窗口,输出像素摘要全等,同文档打开次数保持一致。
36
+ - 32 份样本预热后各测五次,渲染 CPU 时间中位数之和为基线 4.749384 秒、候选 4.749379 秒。独立进程墙钟计时有明显噪声;一份两页财务表在初测和反序复测仍超过 5%,同渲染实现与资源路径下交替配对 31 次后为 +0.15%,不将初测或复测结果删除,也不据此声称完整解析提速。
37
+ - 两份真实 PDF 各连续五轮、16 页窗口、三个 worker:进程树峰值 RSS 中位数比例分别为 114.27% 和 82.67%,中位与最大峰值均通过既有 130% 门槛。进程身份稳定、输入释放通过,关闭池后渲染进程全部退出。有限回放不代表无限运行无泄漏。
38
+ - 原始报告保存在本地 `output/pdf/render-worker-leases-20260928/`,入口为 `summary.json`。没有运行真实模型端到端吞吐或跨平台 CI。
@@ -0,0 +1,50 @@
1
+ # 非 CJK 原生文本词距修复(2026-09-28)
2
+
3
+ ## 行为与边界
4
+
5
+ 相邻普通非 CJK 字符在同一方向和基线上、源编号连续、字号与页面墨迹尺度可信时,若 tight bbox 间隙严格大于两侧较大字号的 0.25 倍,则补一个 ASCII 空格。任意一侧为 CJK、标点或符号时不新增词界;已有空白及原有补空格规则保持不变。没有行长或样本数量门槛,不使用字距统计或词典。
6
+
7
+ 完整语料实际发现的反例决定了三个保守限制:
8
+
9
+ - 部分 PDF 用 1pt 字号配合文字矩阵放大;墨迹高度超过自身字号 1.5 倍时不进行新增推断。
10
+ - 连续数字中的窄字形(例如 Arial 的 `11`)有自然大留白,数字内部不新增空格。
11
+ - 等宽字体中的 `i` 等窄字形不能仅靠墨迹留白判词界,固定宽度标志或通用等宽字体元数据命中时跳过。
12
+
13
+ 同时排除显著字号变化、上下标位移、不可靠方向和跨行几何。这些边界有意牺牲召回率,避免误拆正常文本。
14
+
15
+ ## 接入与兼容
16
+
17
+ - Flash 从视觉行建立紧凑词界证据,在自然语言块归属和分类完成后、链接及样式物化前应用;代码、公式与原始字符不改写。复用现有去行末连字符的对齐规则。
18
+ - Rust 快照直接批量返回源词界编号;Python 回退使用同一判据。不会为补空格额外持有整页字符副本。
19
+ - MinerU Basic/Standard/Advanced 的 TXT 字符回填、Rust span 内容物化和旋转 line/span 回填均接入。实际代码区域的禁用标记会穿过整页虚拟文本框。
20
+ - Flash/Basic/Standard 的原生表格在单元格内部物化空格;表格恢复失败后的文本投影也接入。通用代码空间投影、OCR 和模型内容保持原行为。
21
+ - 公共 parse 参数及 MiddleJson schema 不变。新增 Rust span 参数可省略,旧宿主省略参数时保持原行为;内部 native protocol 升至 23,防止混用旧扩展。
22
+ - DocVortex 本地版本为 0.5.4;MinerU 最低依赖同步为 `docvortex>=0.5.4,<1`。本次未提交、推送或发布。
23
+
24
+ ## 质量验证
25
+
26
+ 输入 `demo/pdfs/中文论文2.pdf`,SHA256 为 `937cfb51e9e8abc6b3a2d8c46d38003cd2ad795a0692eab3f9e92ac604fcc9ad`。
27
+
28
+ 完整重放 41 份 PDF、457 页:40 份输出完全不变。目标论文的 21 页、187 个块新增 2,095 个空格;非空格字符、块数量、类型、顺序和坐标保持不变。原件全部 23 页已打开审阅,包括两个无变化页;第 2 页表格的 `ChatbotArena` 修复为 `Chatbot Arena`。
29
+
30
+ Python/Rust 的 41 份完整 ModelJson/MiddleJson 输出全部一致。四档均通过公共 `mineru.parser.parse()` 完整解析 23 页并导出 ModelJson、MiddleJson、Markdown、HTML 和素材;Basic/Standard/Advanced 的原生内容调用计数证明实际进入 Rust 路径。四档均恢复 `Large Language Models`、`Natural Language Processing`、`School of Computer Science`、`Pre-training of deep bidirectional transformers` 和参考文献会议名称,且不再出现 `LargeLanguageModels`。四档 HTML 已在本地浏览器检查。
31
+
32
+ 测试日志保存在本次运行目录:
33
+
34
+ - `docvortex-final.log`:2,593 项通过,3 条既有 Office 依赖警告。
35
+ - `mineru-final.log`:172 项通过。
36
+ - `python-final.log`:68 项通过,3 个仅用于 Rust 的测试按预期跳过。
37
+ - `final-focused.log`:220 项通过。
38
+ - `final-boundaries-02.log`:128 项通过,含代码空间投影隔离。
39
+ - `rust-final.log`:15 项 Rust 测试通过。
40
+ - Ruff 与两个仓库的 `git diff --check` 通过。
41
+
42
+ 仅更新 `flash_reviewed_history.json` 中目标论文的 21 页内容指纹,以及 `native_pdf_table_demo_manifest.json` 中一处单元格文字和对应 HTML 指纹。逐页裁决见 `tests/fixtures/pdf_tight_spacing_review_decisions.json`;其余基线保留。
43
+
44
+ ## 性能与证据
45
+
46
+ 冻结旧源码和扩展,在没有模型推理并发的阶段,以独立进程逐份交错测量基线与候选,各预热后计时 3 次。41 份语料中位耗时之和增加约 1.31%;目标论文由 1.6792s 到 1.7251s(+2.74%),RSS +0.14%。峰值 RSS 最大增幅约 0.80%。
47
+
48
+ 一份约 42ms 的短文档首次测得 +9.90%;反转先后顺序、各测 7 次后为 41.656ms → 43.727ms(+4.97%),没有复现持续超过 5% 的退化。模型档位单次全文耗时受模型缓存和推理影响,不用来证明原生规则性能。
49
+
50
+ 完整日志、源码快照、逐页对比和四档输出位于 `output/pdf/tight-spacing-20260928/`。主要证据:`final-tiers/`、`final-corpus-diff.json`、`review-final/`、`python-corpus/report.json`、`performance/report.json`、`performance-retest/report.json`。拒绝的早期候选保留,未作为最终输出交付。
@@ -1,6 +1,6 @@
1
1
  //! 不访问 Python 对象或 PDFium 的单线程批量计算内核。
2
2
 
3
- pub const PROTOCOL_VERSION: u32 = 22;
3
+ pub const PROTOCOL_VERSION: u32 = 23;
4
4
  pub mod columns;
5
5
  pub mod note_index;
6
6
  pub mod row_geometry;
@@ -47,6 +47,7 @@ pub mod text_pipeline;
47
47
  pub mod text_assignment;
48
48
  pub mod text_content;
49
49
  pub mod text_snapshot;
50
+ pub mod text_spacing;
50
51
 
51
52
  pub mod geometry_risk;
52
53
  pub mod geometry_runs;
@@ -85,6 +85,9 @@ fn clean(text: &str) -> String {
85
85
 
86
86
  /// 连续执行 PUA 信号、重叠附加符合成、词间空格及正文组装;空组保留调用方原文本。
87
87
  pub struct Rules<'a> {
88
+ pub ordinary: &'a HashSet<char>,
89
+ pub decimals: &'a HashSet<char>,
90
+ pub tight_spacing: &'a [bool],
88
91
  pub modifiers: &'a HashMap<String, String>,
89
92
  pub threshold: f64,
90
93
  pub compositions: &'a HashMap<(String, String), String>,
@@ -96,6 +99,9 @@ pub struct Rules<'a> {
96
99
  /// 使用本次调用固定的字符规则构造所有片段,避免重新读取可变 Python 配置。
97
100
  pub fn build(data: &TextSnapshot, groups: &[Vec<usize>], rules: &Rules<'_>) -> Vec<Content> {
98
101
  let Rules {
102
+ ordinary,
103
+ decimals,
104
+ tight_spacing,
99
105
  modifiers,
100
106
  threshold,
101
107
  compositions,
@@ -105,7 +111,8 @@ pub fn build(data: &TextSnapshot, groups: &[Vec<usize>], rules: &Rules<'_>) -> V
105
111
  } = rules;
106
112
  groups
107
113
  .iter()
108
- .map(|group| {
114
+ .enumerate()
115
+ .map(|(group_index, group)| {
109
116
  let mut result = Content {
110
117
  text: None,
111
118
  private_count: 0,
@@ -133,7 +140,7 @@ pub fn build(data: &TextSnapshot, groups: &[Vec<usize>], rules: &Rules<'_>) -> V
133
140
  return result;
134
141
  }
135
142
  let members = ordered(data, group);
136
- let mut chars: Vec<(&str, Box4)> = Vec::with_capacity(members.len());
143
+ let mut chars: Vec<(&str, Box4, usize)> = Vec::with_capacity(members.len());
137
144
  let mut cursor = 0;
138
145
  while cursor < members.len() {
139
146
  if cursor + 1 < members.len() {
@@ -148,17 +155,17 @@ pub fn build(data: &TextSnapshot, groups: &[Vec<usize>], rules: &Rules<'_>) -> V
148
155
  let b = &data.chars[modifier];
149
156
  if let Some(composed) = compositions.get(&(a.text.clone(), b.text.clone()))
150
157
  {
151
- chars.push((composed, a.bbox));
158
+ chars.push((composed, a.bbox, base));
152
159
  cursor += 2;
153
160
  continue;
154
161
  }
155
162
  }
156
163
  }
157
164
  let ch = &data.chars[members[cursor]];
158
- chars.push((&ch.text, ch.bbox));
165
+ chars.push((&ch.text, ch.bbox, members[cursor]));
159
166
  cursor += 1;
160
167
  }
161
- let mut widths: Vec<_> = chars.iter().map(|(_, b)| b[2] - b[0]).collect();
168
+ let mut widths: Vec<_> = chars.iter().map(|(_, b, _)| b[2] - b[0]).collect();
162
169
  widths.sort_by(|a, b| a.partial_cmp(b).unwrap_or(std::cmp::Ordering::Equal));
163
170
  let median = if widths.len() % 2 == 1 {
164
171
  widths[widths.len() / 2]
@@ -166,13 +173,24 @@ pub fn build(data: &TextSnapshot, groups: &[Vec<usize>], rules: &Rules<'_>) -> V
166
173
  (widths[widths.len() / 2 - 1] + widths[widths.len() / 2]) / 2.0
167
174
  };
168
175
  let mut text = String::new();
169
- for (index, &(value, bbox)) in chars.iter().enumerate() {
176
+ for (index, &(value, bbox, source)) in chars.iter().enumerate() {
170
177
  if breaks.contains(value) {
171
178
  continue;
172
179
  }
173
180
  text.push_str(value);
174
- if let Some(&(next, next_box)) = chars.get(index + 1) {
175
- if next_box[0] - bbox[2] > median * 0.25 && value != " " && next != " " {
181
+ if let Some(&(next, next_box, next_source)) = chars.get(index + 1) {
182
+ if (next_box[0] - bbox[2] > median * 0.25
183
+ || (tight_spacing.get(group_index).copied().unwrap_or(false)
184
+ && crate::text_spacing::needs_space(
185
+ data,
186
+ source,
187
+ next_source,
188
+ ordinary,
189
+ decimals,
190
+ )))
191
+ && value != " "
192
+ && next != " "
193
+ {
176
194
  text.push(' ');
177
195
  }
178
196
  }
@@ -0,0 +1,118 @@
1
+ //! 与 Python 参考实现相同的相邻非 CJK 字形词界判定。
2
+ use crate::{geometry::Box4, text_snapshot::TextSnapshot};
3
+ use std::collections::HashSet;
4
+
5
+ /// 排除汉字扩展、假名、韩文及兼容字形,不以所在整行的语言决定词界。
6
+ pub fn is_cjk(ch: char) -> bool {
7
+ matches!(ch as u32,
8
+ 0x1100..=0x11ff | 0x2e80..=0xa4cf | 0xa960..=0xa97f | 0xac00..=0xd7ff |
9
+ 0xf900..=0xfaff | 0xff66..=0xff9f | 0x1aff0..=0x1b16f | 0x20000..=0x323af)
10
+ }
11
+
12
+ /// 墨迹框只转换坐标轴;相邻间隙与页面原点平移无关。
13
+ fn local(b: Box4, angle: i32) -> Box4 {
14
+ match angle {
15
+ 90 => [b[1], -b[2], b[3], -b[0]],
16
+ 180 => [-b[2], -b[3], -b[0], -b[1]],
17
+ 270 => [-b[3], b[0], -b[1], b[2]],
18
+ _ => b,
19
+ }
20
+ }
21
+
22
+ /// 只接受解释器确认的普通单字形,避免两端标点或连字展开改变语义。
23
+ fn ordinary(text: &str, letters: &HashSet<char>) -> bool {
24
+ let mut chars = text.chars();
25
+ let Some(ch) = chars.next() else { return false };
26
+ chars.next().is_none() && !is_cjk(ch) && (ch.is_ascii_alphanumeric() || letters.contains(&ch))
27
+ }
28
+
29
+ /// 使用真实源编号、方向和基线保护,只为可靠的大墨迹间隙返回一个词界。
30
+ pub fn needs_space(
31
+ data: &TextSnapshot,
32
+ first: usize,
33
+ second: usize,
34
+ letters: &HashSet<char>,
35
+ decimals: &HashSet<char>,
36
+ ) -> bool {
37
+ let a = &data.chars[first];
38
+ let b = &data.chars[second];
39
+ if !ordinary(&a.text, letters)
40
+ || !ordinary(&b.text, letters)
41
+ || a.index.checked_add(1) != Some(b.index)
42
+ {
43
+ return false;
44
+ }
45
+ if a.text
46
+ .chars()
47
+ .all(|c| c.is_ascii_digit() || decimals.contains(&c))
48
+ && b.text
49
+ .chars()
50
+ .all(|c| c.is_ascii_digit() || decimals.contains(&c))
51
+ {
52
+ return false;
53
+ }
54
+ for font in [&data.fonts[a.font], &data.fonts[b.font]] {
55
+ let name = font.name.to_lowercase();
56
+ if font.flags & 1 != 0
57
+ || [
58
+ "mono",
59
+ "courier",
60
+ "consolas",
61
+ "menlo",
62
+ "typewriter",
63
+ "fixed",
64
+ ]
65
+ .iter()
66
+ .any(|hint| name.contains(hint))
67
+ {
68
+ return false;
69
+ }
70
+ }
71
+ let ls = data.fonts[a.font].size;
72
+ let rs = data.fonts[b.font].size;
73
+ let em = ls.max(rs);
74
+ if !ls.is_finite() || !rs.is_finite() || ls.min(rs) <= 0.0 || ls.min(rs) < 0.8 * em {
75
+ return false;
76
+ }
77
+ if !a.writing_angle.is_finite() || !b.writing_angle.is_finite() {
78
+ return false;
79
+ }
80
+ let degrees = a.writing_angle.to_degrees().rem_euclid(360.0);
81
+ let angle = ((degrees / 90.0).round_ties_even() as i32 * 90) % 360;
82
+ if ((degrees - angle as f64 + 180.0).rem_euclid(360.0) - 180.0).abs() > 0.1
83
+ || ((b.writing_angle.to_degrees() - angle as f64 + 180.0).rem_euclid(360.0) - 180.0).abs()
84
+ > 0.1
85
+ {
86
+ return false;
87
+ }
88
+ let (Some(ab), Some(bb)) = (a.tight, b.tight) else {
89
+ return false;
90
+ };
91
+ if ab.iter().chain(bb.iter()).any(|v| !v.is_finite()) {
92
+ return false;
93
+ }
94
+ let ab = local(ab, angle);
95
+ let bb = local(bb, angle);
96
+ if ab[2] <= ab[0]
97
+ || bb[2] <= bb[0]
98
+ || ab[3] <= ab[1]
99
+ || bb[3] <= bb[1]
100
+ || ab[3] - ab[1] > 1.5 * ls
101
+ || bb[3] - bb[1] > 1.5 * rs
102
+ || bb[0] - ab[2] <= 0.25 * em
103
+ || ab[3].min(bb[3]) - ab[1].max(bb[1]) < 0.5 * (ab[3] - ab[1]).min(bb[3] - bb[1])
104
+ {
105
+ return false;
106
+ }
107
+ if let (Some(ao), Some(bo)) = (a.origin, b.origin) {
108
+ let axis = usize::from(angle != 90 && angle != 270);
109
+ if ao.iter().chain(bo.iter()).any(|v| !v.is_finite())
110
+ || (ao[axis] - bo[axis]).abs() > 0.15 * em
111
+ {
112
+ return false;
113
+ }
114
+ } else if (ab[3] - bb[3]).abs() > 0.15 * em {
115
+ return false;
116
+ }
117
+ true
118
+ }
@@ -620,6 +620,7 @@ impl NativeTextSnapshot {
620
620
  Ok(Some(result))
621
621
  }
622
622
  /// 正文已有共享上下标侧车时,字符归属及内容构造连续完成,仅输出每个 span 的文本和 PUA 计数。
623
+ #[pyo3(signature = (span_bboxes, median_height, stop_flags, start_flags, height_ratio, break_flags, modifiers, overlap_threshold, private_range, tight_spacing=None))]
623
624
  fn prepare_span_texts<'py>(
624
625
  &self,
625
626
  py: Python<'py>,
@@ -632,6 +633,7 @@ impl NativeTextSnapshot {
632
633
  modifiers: HashMap<String, String>,
633
634
  overlap_threshold: f64,
634
635
  private_range: (u32, u32),
636
+ tight_spacing: Option<Vec<bool>>,
635
637
  ) -> PyResult<Option<Bound<'py, PyList>>> {
636
638
  if !overlap_threshold.is_finite()
637
639
  || self
@@ -643,6 +645,13 @@ impl NativeTextSnapshot {
643
645
  return Ok(None);
644
646
  }
645
647
  let count = span_bboxes.len();
648
+ // 旧宿主没有代码区域掩码,省略新增参数时保持历史文本组装行为。
649
+ let tight_spacing = tight_spacing.unwrap_or_else(|| vec![false; count]);
650
+ if tight_spacing.len() != count {
651
+ return Err(pyo3::exceptions::PyValueError::new_err(
652
+ "Tight spacing mask must match span count",
653
+ ));
654
+ }
646
655
  let Some(assigned) = self.assign_spans(
647
656
  py,
648
657
  span_bboxes,
@@ -660,16 +669,29 @@ impl NativeTextSnapshot {
660
669
  let category = unicode.getattr("category")?;
661
670
  let normalize = unicode.getattr("normalize")?;
662
671
  let mut spaces = HashSet::new();
672
+ let mut ordinary = HashSet::new();
673
+ let mut decimals = HashSet::new();
663
674
  let mut seen_chars = HashSet::new();
664
675
  for ch in &self.data.chars {
665
676
  for value in ch.text.chars() {
666
- if seen_chars.insert(value)
667
- && pyo3::types::PyString::new(py, &value.to_string())
668
- .call_method0("isspace")?
669
- .extract::<bool>()?
677
+ if !seen_chars.insert(value) {
678
+ continue;
679
+ }
680
+ if pyo3::types::PyString::new(py, &value.to_string())
681
+ .call_method0("isspace")?
682
+ .extract::<bool>()?
670
683
  {
671
684
  spaces.insert(value);
672
685
  }
686
+ if !value.is_ascii() && !docvortex_core::text_spacing::is_cjk(value) {
687
+ let kind: String = category.call1((value.to_string(),))?.extract()?;
688
+ if kind.starts_with('L') || kind == "Nd" {
689
+ ordinary.insert(value);
690
+ }
691
+ if kind == "Nd" {
692
+ decimals.insert(value);
693
+ }
694
+ }
673
695
  }
674
696
  }
675
697
  let mut compositions = HashMap::new();
@@ -709,6 +731,9 @@ impl NativeTextSnapshot {
709
731
  &self.data,
710
732
  &groups,
711
733
  &text_content::Rules {
734
+ ordinary: &ordinary,
735
+ decimals: &decimals,
736
+ tight_spacing: &tight_spacing,
712
737
  modifiers: &modifiers,
713
738
  threshold: overlap_threshold,
714
739
  compositions: &compositions,
@@ -734,6 +759,44 @@ impl NativeTextSnapshot {
734
759
  SPAN_CONTENT_CALLS.fetch_add(1, Ordering::Relaxed);
735
760
  Ok(Some(output))
736
761
  }
762
+ /// 在自有字符上计算可靠词界,仅返回源编号,避免 Flash 逐字符重复跨语言判定。
763
+ fn tight_space_indices(&self, py: Python<'_>) -> PyResult<Vec<usize>> {
764
+ let category = py.import("unicodedata")?.getattr("category")?;
765
+ let mut ordinary = HashSet::new();
766
+ let mut decimals = HashSet::new();
767
+ let mut seen = HashSet::new();
768
+ for ch in &self.data.chars {
769
+ for value in ch.text.chars() {
770
+ if !value.is_ascii()
771
+ && !docvortex_core::text_spacing::is_cjk(value)
772
+ && seen.insert(value)
773
+ {
774
+ let kind: String = category.call1((value.to_string(),))?.extract()?;
775
+ if kind.starts_with('L') || kind == "Nd" {
776
+ ordinary.insert(value);
777
+ }
778
+ if kind == "Nd" {
779
+ decimals.insert(value);
780
+ }
781
+ }
782
+ }
783
+ }
784
+ Ok(py.detach(|| {
785
+ (1..self.data.chars.len())
786
+ .filter(|&index| {
787
+ docvortex_core::text_spacing::needs_space(
788
+ &self.data,
789
+ index - 1,
790
+ index,
791
+ &ordinary,
792
+ &decimals,
793
+ )
794
+ })
795
+ .map(|index| self.data.chars[index].index)
796
+ .collect()
797
+ }))
798
+ }
799
+
737
800
  /// 为新鲜同源页面证据准备独立上下标记录,后续批次只传整数成员索引。
738
801
  fn prepare_script_evidence(
739
802
  &self,
@@ -10,7 +10,7 @@ from functools import lru_cache
10
10
  from pathlib import Path
11
11
  from types import ModuleType
12
12
 
13
- _PROTOCOL_VERSION = 22
13
+ _PROTOCOL_VERSION = 23
14
14
  _SELECTED_MODE = None
15
15
  _LOAD_FAILURE = None
16
16
 
@@ -7,7 +7,16 @@ from zipfile import BadZipFile, ZipFile, ZipInfo
7
7
  from loguru import logger
8
8
  from lxml import etree
9
9
 
10
- from ..opc import relationship_source_base_dir, write_zip_package
10
+ from ..opc import (
11
+ CONTENT_TYPES_MEMBER,
12
+ STRICT_OOXML_COMMON_REPLACEMENTS,
13
+ STRICT_WORDPROCESSINGML_NS,
14
+ WORDPROCESSINGML_NS,
15
+ relationship_source_base_dir,
16
+ repair_content_type_overrides,
17
+ translate_strict_ooxml_uris,
18
+ write_zip_package,
19
+ )
11
20
 
12
21
 
13
22
  PACKAGE_RELATIONSHIPS_NS = "http://schemas.openxmlformats.org/package/2006/relationships"
@@ -15,6 +24,27 @@ RELATIONSHIP_TAG = f"{{{PACKAGE_RELATIONSHIPS_NS}}}Relationship"
15
24
  ZIP_MEMBER_READ_ERRORS = (BadZipFile, RuntimeError, NotImplementedError, zlib.error)
16
25
  DOCX_EMBEDDED_OFFICE_PREFIX = "word/embeddings/"
17
26
 
27
+ STRICT_DOCX_REPLACEMENTS = STRICT_OOXML_COMMON_REPLACEMENTS + (
28
+ (
29
+ STRICT_WORDPROCESSINGML_NS.encode("utf-8"),
30
+ WORDPROCESSINGML_NS.encode("utf-8"),
31
+ ),
32
+ )
33
+
34
+ # 关系类型尾段到 part 内容类型的映射,用于按关系图补全 [Content_Types].xml Override。
35
+ DOCX_REL_CONTENT_TYPES = {
36
+ "officeDocument": "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml",
37
+ "styles": "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml",
38
+ "numbering": "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml",
39
+ "footnotes": "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml",
40
+ "endnotes": "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml",
41
+ "comments": "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml",
42
+ "settings": "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml",
43
+ "webSettings": "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml",
44
+ "fontTable": "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml",
45
+ "theme": "application/vnd.openxmlformats-officedocument.theme+xml",
46
+ }
47
+
18
48
 
19
49
  def normalize_docx_package(file_bytes: bytes) -> bytes:
20
50
  """在进入 python-docx 前修复 DOCX 包级容错问题。"""
@@ -41,10 +71,15 @@ def normalize_docx_package(file_bytes: bytes) -> bytes:
41
71
  rewritten_members: list[tuple[ZipInfo, bytes]] = []
42
72
  for info, member_data in loaded_members:
43
73
  normalized_data = member_data
74
+ if info.filename.endswith(".xml") or info.filename.endswith(".rels"):
75
+ # ISO Strict 命名空间与关系类型统一改写为 Transitional,python-docx 才能识别。
76
+ normalized_data = translate_strict_ooxml_uris(normalized_data, STRICT_DOCX_REPLACEMENTS)
77
+ if normalized_data != member_data:
78
+ changed = True
44
79
  if info.filename.endswith(".rels"):
45
80
  normalized_data = _remove_missing_internal_relationships(
46
81
  info.filename,
47
- member_data,
82
+ normalized_data,
48
83
  package_members,
49
84
  skipped_members,
50
85
  )
@@ -52,6 +87,17 @@ def normalize_docx_package(file_bytes: bytes) -> bytes:
52
87
  changed = True
53
88
  rewritten_members.append((info, normalized_data))
54
89
 
90
+ repaired_content_types = repair_content_type_overrides(
91
+ {info.filename: member_data for info, member_data in rewritten_members},
92
+ DOCX_REL_CONTENT_TYPES,
93
+ )
94
+ if repaired_content_types is not None:
95
+ rewritten_members = [
96
+ (info, repaired_content_types if info.filename == CONTENT_TYPES_MEMBER else member_data)
97
+ for info, member_data in rewritten_members
98
+ ]
99
+ changed = True
100
+
55
101
  if not changed:
56
102
  return file_bytes
57
103
 
@@ -286,8 +286,34 @@ class _DocxResources:
286
286
  "type": BlockType.IMAGE,
287
287
  "image_base64": img_base64,
288
288
  }
289
+ alt_text = self._docx_image_alt_text(image)
290
+ if alt_text:
291
+ image_block["content"] = alt_text
289
292
  self.cur_page.append(image_block)
290
293
 
294
+ @staticmethod
295
+ def _docx_image_alt_text(image: Any) -> str:
296
+ """读取 DrawingML wp:docPr 的 descr 或 VML v:shape 的 alt 替代文本。"""
297
+ element = image
298
+ while element is not None:
299
+ tag = str(getattr(element, "tag", ""))
300
+ local_name = tag.rsplit("}", 1)[-1]
301
+ if local_name in {"inline", "anchor"}:
302
+ for child in element:
303
+ child_tag = str(getattr(child, "tag", ""))
304
+ if child_tag.rsplit("}", 1)[-1] == "docPr":
305
+ descr = (child.get("descr") or "").strip()
306
+ if descr:
307
+ return descr
308
+ return ""
309
+ if local_name == "shape" and "urn:schemas-microsoft-com:vml" in tag:
310
+ alt = (element.get("alt") or "").strip()
311
+ if alt:
312
+ return alt
313
+ return ""
314
+ element = element.getparent()
315
+ return ""
316
+
291
317
  def _handle_drawingml(self, elements: list[BaseOxmlElement]):
292
318
  """
293
319
  处理 DrawingML 元素,目前先处理 chart 元素。