docvortex 0.4.14__tar.gz → 0.4.16__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 (678) hide show
  1. {docvortex-0.4.14/src/docvortex.egg-info → docvortex-0.4.16}/PKG-INFO +1 -1
  2. {docvortex-0.4.14 → docvortex-0.4.16}/docs/sdk-0.4.md +6 -1
  3. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/line_merging.py +64 -3
  4. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/pdf.py +14 -7
  5. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/__init__.py +2 -1
  6. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/_document.py +16 -0
  7. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/native_contracts.py +8 -0
  8. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/properties.py +2 -2
  9. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/public_api.py +1 -0
  10. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/version.py +1 -1
  11. {docvortex-0.4.14 → docvortex-0.4.16/src/docvortex.egg-info}/PKG-INFO +1 -1
  12. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex.egg-info/SOURCES.txt +1 -0
  13. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_document_metadata.py +10 -1
  14. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_pdf_analysis_api.py +5 -3
  15. docvortex-0.4.16/tests/test_pdf_cpu_evidence.py +164 -0
  16. {docvortex-0.4.14 → docvortex-0.4.16}/LICENSE.md +0 -0
  17. {docvortex-0.4.14 → docvortex-0.4.16}/MANIFEST.in +0 -0
  18. {docvortex-0.4.14 → docvortex-0.4.16}/README.md +0 -0
  19. {docvortex-0.4.14 → docvortex-0.4.16}/demo/README.md +0 -0
  20. {docvortex-0.4.14 → docvortex-0.4.16}/demo/demo.py +0 -0
  21. {docvortex-0.4.14 → docvortex-0.4.16}/demo/office_docs/README.md +0 -0
  22. {docvortex-0.4.14 → docvortex-0.4.16}/demo/office_docs/docx_01.doc +0 -0
  23. {docvortex-0.4.14 → docvortex-0.4.16}/demo/office_docs/docx_01.docx +0 -0
  24. {docvortex-0.4.14 → docvortex-0.4.16}/demo/office_docs/pptx_01.ppt +0 -0
  25. {docvortex-0.4.14 → docvortex-0.4.16}/demo/office_docs/pptx_01.pptx +0 -0
  26. {docvortex-0.4.14 → docvortex-0.4.16}/demo/office_docs/rtf_01.rtf +0 -0
  27. {docvortex-0.4.14 → docvortex-0.4.16}/demo/office_docs/xlsx_01.xls +0 -0
  28. {docvortex-0.4.14 → docvortex-0.4.16}/demo/office_docs/xlsx_01.xlsx +0 -0
  29. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
  30. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
  31. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/caibao1.pdf +0 -0
  32. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/demo1.pdf +0 -0
  33. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/demo2.pdf +0 -0
  34. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/demo3.pdf +0 -0
  35. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/demo4.pdf +0 -0
  36. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/demo6.pdf +0 -0
  37. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
  38. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
  39. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
  40. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
  41. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs/small_ocr.pdf +0 -0
  42. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
  43. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
  44. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
  45. {docvortex-0.4.14 → docvortex-0.4.16}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
  46. {docvortex-0.4.14 → docvortex-0.4.16}/docs/HTML_PROTOCOL.md +0 -0
  47. {docvortex-0.4.14 → docvortex-0.4.16}/docs/JSON_PROTOCOL.md +0 -0
  48. {docvortex-0.4.14 → docvortex-0.4.16}/docs/METADATA.md +0 -0
  49. {docvortex-0.4.14 → docvortex-0.4.16}/docs/PDF_FONTS.md +0 -0
  50. {docvortex-0.4.14 → docvortex-0.4.16}/docs/RENDER_OWNERSHIP.md +0 -0
  51. {docvortex-0.4.14 → docvortex-0.4.16}/docs/USAGE.md +0 -0
  52. {docvortex-0.4.14 → docvortex-0.4.16}/docs/flash-manual-annotations-2026-09-15.md +0 -0
  53. {docvortex-0.4.14 → docvortex-0.4.16}/docs/flash-round2-annotations-2026-09-15.md +0 -0
  54. {docvortex-0.4.14 → docvortex-0.4.16}/docs/flash-rule-generalization-2026-09-15.md +0 -0
  55. {docvortex-0.4.14 → docvortex-0.4.16}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
  56. {docvortex-0.4.14 → docvortex-0.4.16}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
  57. {docvortex-0.4.14 → docvortex-0.4.16}/docs/flash-title-coverage-2026-09-16.md +0 -0
  58. {docvortex-0.4.14 → docvortex-0.4.16}/pyproject.toml +0 -0
  59. {docvortex-0.4.14 → docvortex-0.4.16}/schemas/middle-2.0.json +0 -0
  60. {docvortex-0.4.14 → docvortex-0.4.16}/schemas/model-2.0.json +0 -0
  61. {docvortex-0.4.14 → docvortex-0.4.16}/setup.cfg +0 -0
  62. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/__init__.py +0 -0
  63. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/__init__.py +0 -0
  64. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/__init__.py +0 -0
  65. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
  66. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
  67. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/_shared/image.py +0 -0
  68. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
  69. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
  70. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
  71. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
  72. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
  73. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
  74. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/_shared/names.py +0 -0
  75. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
  76. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/contracts.py +0 -0
  77. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/csv.py +0 -0
  78. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
  79. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/epub/constants.py +0 -0
  80. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/epub/converter.py +0 -0
  81. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/epub/errors.py +0 -0
  82. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
  83. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/epub/package.py +0 -0
  84. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/epub/properties.py +0 -0
  85. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
  86. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/html/__init__.py +0 -0
  87. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/html/anchors.py +0 -0
  88. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/html/constants.py +0 -0
  89. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/html/converter.py +0 -0
  90. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/html/document.py +0 -0
  91. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/html/errors.py +0 -0
  92. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/html/metadata.py +0 -0
  93. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/html/resources.py +0 -0
  94. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/html/selector.py +0 -0
  95. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/models.py +0 -0
  96. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
  97. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
  98. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
  99. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
  100. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
  101. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
  102. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/images.py +0 -0
  103. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
  104. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/models.py +0 -0
  105. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/package.py +0 -0
  106. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/path.py +0 -0
  107. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
  108. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
  109. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
  110. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/table.py +0 -0
  111. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/text.py +0 -0
  112. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
  113. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/__init__.py +0 -0
  114. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
  115. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
  116. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
  117. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
  118. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
  119. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
  120. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
  121. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
  122. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
  123. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
  124. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
  125. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
  126. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
  127. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
  128. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
  129. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
  130. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
  131. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
  132. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
  133. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
  134. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
  135. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
  136. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
  137. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
  138. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
  139. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
  140. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
  141. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
  142. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
  143. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
  144. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
  145. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
  146. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
  147. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
  148. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/errors.py +0 -0
  149. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/image.py +0 -0
  150. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
  151. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
  152. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
  153. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
  154. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/limits.py +0 -0
  155. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/metadata.py +0 -0
  156. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
  157. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
  158. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
  159. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
  160. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
  161. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
  162. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
  163. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
  164. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/odf/styles.py +0 -0
  165. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/odf/table.py +0 -0
  166. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/odf/text.py +0 -0
  167. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
  168. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/opc.py +0 -0
  169. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
  170. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
  171. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
  172. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
  173. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
  174. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
  175. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
  176. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
  177. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
  178. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
  179. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
  180. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
  181. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
  182. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
  183. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
  184. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
  185. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
  186. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
  187. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
  188. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
  189. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
  190. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
  191. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
  192. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
  193. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
  194. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
  195. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
  196. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
  197. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/spreadsheet/region_discovery.py +0 -0
  198. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/streams.py +0 -0
  199. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
  200. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
  201. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
  202. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
  203. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
  204. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
  205. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
  206. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
  207. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
  208. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
  209. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
  210. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
  211. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
  212. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
  213. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
  214. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
  215. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
  216. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
  217. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
  218. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
  219. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
  220. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
  221. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
  222. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
  223. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
  224. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
  225. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
  226. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
  227. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
  228. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
  229. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
  230. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
  231. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
  232. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
  233. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
  234. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
  235. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
  236. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
  237. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
  238. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
  239. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
  240. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
  241. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
  242. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
  243. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
  244. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/models.py +0 -0
  245. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
  246. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
  247. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
  248. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
  249. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
  250. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
  251. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
  252. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
  253. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
  254. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
  255. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
  256. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
  257. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
  258. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
  259. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
  260. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
  261. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
  262. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
  263. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
  264. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
  265. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
  266. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
  267. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
  268. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
  269. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
  270. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
  271. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
  272. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
  273. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
  274. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
  275. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
  276. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
  277. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
  278. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
  279. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
  280. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/api.py +0 -0
  281. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/assets/__init__.py +0 -0
  282. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/assets/images.py +0 -0
  283. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/assets/store.py +0 -0
  284. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/cli.py +0 -0
  285. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/codecs/__init__.py +0 -0
  286. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/codecs/html/__init__.py +0 -0
  287. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/codecs/html/contracts.py +0 -0
  288. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/codecs/html/materializer.py +0 -0
  289. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/codecs/html/parser.py +0 -0
  290. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/codecs/html/resources.py +0 -0
  291. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/codecs/json.py +0 -0
  292. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/__init__.py +0 -0
  293. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/inline.py +0 -0
  294. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/links.py +0 -0
  295. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/markup/__init__.py +0 -0
  296. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/markup/anchors.py +0 -0
  297. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/markup/formula.py +0 -0
  298. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/markup/projector.py +0 -0
  299. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/markup/styles.py +0 -0
  300. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/mathml.py +0 -0
  301. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/normalization.py +0 -0
  302. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/spans.py +0 -0
  303. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/table/__init__.py +0 -0
  304. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/table/blocks.py +0 -0
  305. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/table/content.py +0 -0
  306. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/table/document.py +0 -0
  307. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/table/html.py +0 -0
  308. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/table/models.py +0 -0
  309. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/table/rules.py +0 -0
  310. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/table/structure.py +0 -0
  311. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/text.py +0 -0
  312. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/content/tree.py +0 -0
  313. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/__init__.py +0 -0
  314. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/contracts.py +0 -0
  315. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/detection.py +0 -0
  316. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/filetypes.py +0 -0
  317. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/page_range.py +0 -0
  318. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/classify.py +0 -0
  319. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/constants.py +0 -0
  320. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/font_runtime.py +0 -0
  321. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/images.py +0 -0
  322. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/layout.py +0 -0
  323. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/metadata.py +0 -0
  324. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/native_annotations.py +0 -0
  325. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/native_coordinates.py +0 -0
  326. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
  327. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/native_objects.py +0 -0
  328. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
  329. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/pdfium.py +0 -0
  330. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/raster.py +0 -0
  331. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/text/__init__.py +0 -0
  332. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/text/_contracts.py +0 -0
  333. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/text/dedup.py +0 -0
  334. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/text/extract.py +0 -0
  335. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/text/geometry.py +0 -0
  336. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/text/groups.py +0 -0
  337. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/pdf/visuals.py +0 -0
  338. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/document/source.py +0 -0
  339. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/errors.py +0 -0
  340. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/export/__init__.py +0 -0
  341. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/export/bundle.py +0 -0
  342. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/export/files.py +0 -0
  343. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/export/middle.py +0 -0
  344. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/__init__.py +0 -0
  345. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/_coordinates.py +0 -0
  346. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/_geometry.py +0 -0
  347. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/_hyperlink.py +0 -0
  348. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/_image.py +0 -0
  349. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/_image_operations.py +0 -0
  350. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/_image_payload.py +0 -0
  351. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/_svg_raster.py +0 -0
  352. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/_text.py +0 -0
  353. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/image_encoding.py +0 -0
  354. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/language.py +0 -0
  355. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/type_identity.py +0 -0
  356. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/foundation/xml_names.py +0 -0
  357. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/geometry.py +0 -0
  358. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/metadata.py +0 -0
  359. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/options.py +0 -0
  360. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/postprocess/__init__.py +0 -0
  361. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/postprocess/content.py +0 -0
  362. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/postprocess/document.py +0 -0
  363. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/postprocess/lists.py +0 -0
  364. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/postprocess/page_blocks.py +0 -0
  365. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/postprocess/pages.py +0 -0
  366. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/postprocess/paragraphs.py +0 -0
  367. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/postprocess/visual.py +0 -0
  368. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/__init__.py +0 -0
  369. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/__init__.py +0 -0
  370. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/common/__init__.py +0 -0
  371. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/common/context.py +0 -0
  372. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/common/html_table.py +0 -0
  373. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/common/index.py +0 -0
  374. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/common/list_items.py +0 -0
  375. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/common/planner.py +0 -0
  376. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/docx/__init__.py +0 -0
  377. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/docx/assets.py +0 -0
  378. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/docx/inline.py +0 -0
  379. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/docx/math.py +0 -0
  380. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/docx/renderer.py +0 -0
  381. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/docx/styles.py +0 -0
  382. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/docx/table.py +0 -0
  383. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/epub/__init__.py +0 -0
  384. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/epub/assets.py +0 -0
  385. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/epub/package.py +0 -0
  386. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/epub/renderer.py +0 -0
  387. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/html/__init__.py +0 -0
  388. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/html/inline.py +0 -0
  389. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/html/renderer.py +0 -0
  390. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
  391. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/html/table.py +0 -0
  392. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/latex/__init__.py +0 -0
  393. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/latex/assets.py +0 -0
  394. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/latex/inline.py +0 -0
  395. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/latex/renderer.py +0 -0
  396. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/latex/table.py +0 -0
  397. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
  398. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/markdown/assets.py +0 -0
  399. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
  400. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
  401. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/markdown/inline.py +0 -0
  402. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
  403. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/markdown/table.py +0 -0
  404. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
  405. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/assets.py +0 -0
  406. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
  407. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
  408. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/formula.py +0 -0
  409. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
  410. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/inline.py +0 -0
  411. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/original.py +0 -0
  412. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
  413. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/paragraph.py +0 -0
  414. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
  415. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/styles.py +0 -0
  416. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/table.py +0 -0
  417. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
  418. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
  419. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
  420. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
  421. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
  422. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/api.py +0 -0
  423. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/contracts.py +0 -0
  424. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/docx.py +0 -0
  425. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/epub.py +0 -0
  426. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/fragments.py +0 -0
  427. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/html.py +0 -0
  428. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/latex.py +0 -0
  429. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/markdown.py +0 -0
  430. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/pdf.py +0 -0
  431. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/render/structured_content.py +0 -0
  432. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/resources/epub/docvortex.css +0 -0
  433. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
  434. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/resources/fonts/NOTICE +0 -0
  435. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/resources/fonts/manifest.json +0 -0
  436. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/resources/html/docvortex.css +0 -0
  437. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/resources/html/docvortex.min.css +0 -0
  438. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
  439. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/result.py +0 -0
  440. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/schema.py +0 -0
  441. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex/visualization.py +0 -0
  442. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex.egg-info/dependency_links.txt +0 -0
  443. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex.egg-info/entry_points.txt +0 -0
  444. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex.egg-info/requires.txt +0 -0
  445. {docvortex-0.4.14 → docvortex-0.4.16}/src/docvortex.egg-info/top_level.txt +0 -0
  446. {docvortex-0.4.14 → docvortex-0.4.16}/tests/benchmarks/flash_pdf.py +0 -0
  447. {docvortex-0.4.14 → docvortex-0.4.16}/tests/benchmarks/native_pdf_table.py +0 -0
  448. {docvortex-0.4.14 → docvortex-0.4.16}/tests/benchmarks/pdf_render.py +0 -0
  449. {docvortex-0.4.14 → docvortex-0.4.16}/tests/benchmarks/pipeline.py +0 -0
  450. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
  451. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_layout_block_expectations.json +0 -0
  452. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
  453. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
  454. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_manual_annotations.json +0 -0
  455. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_manual_review_decisions.json +0 -0
  456. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_reviewed_history.json +0 -0
  457. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_round2_annotations.json +0 -0
  458. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_round2_review_decisions.json +0 -0
  459. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_round3_annotations.json +0 -0
  460. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
  461. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_round3_review_decisions.json +0 -0
  462. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
  463. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
  464. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
  465. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
  466. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
  467. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
  468. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/pdf_char_dedup.json +0 -0
  469. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
  470. {docvortex-0.4.14 → docvortex-0.4.16}/tests/fixtures/rtf/semantic.rtf +0 -0
  471. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_architecture.py +0 -0
  472. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_benchmark_entrypoint.py +0 -0
  473. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_brand_protocol.py +0 -0
  474. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_cli_logging.py +0 -0
  475. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_complete_pipeline.py +0 -0
  476. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_converter_lifecycle.py +0 -0
  477. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_document_envelope.py +0 -0
  478. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_format_matrix.py +0 -0
  479. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_geometry_api.py +0 -0
  480. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_history_geometry_tools.py +0 -0
  481. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_html_namespace.py +0 -0
  482. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_mixed_font_script_reference.py +0 -0
  483. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_pdf_font_geometry.py +0 -0
  484. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_pdf_font_runtime.py +0 -0
  485. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_pdf_model_text_normalization.py +0 -0
  486. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_pdf_output_text.py +0 -0
  487. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_pdf_render_pool.py +0 -0
  488. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_pdf_source_row_merging.py +0 -0
  489. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_pdf_symbol_normalization.py +0 -0
  490. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_public_export_api.py +0 -0
  491. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_public_image_api.py +0 -0
  492. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_public_pipeline.py +0 -0
  493. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_refactor_raster.py +0 -0
  494. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_refactor_rendering.py +0 -0
  495. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_refactor_resources.py +0 -0
  496. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_release_ci_gate.py +0 -0
  497. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_render_ownership.py +0 -0
  498. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_renderer_branding.py +0 -0
  499. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_shared_boundaries.py +0 -0
  500. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_system_font_pdf_pipeline.py +0 -0
  501. {docvortex-0.4.14 → docvortex-0.4.16}/tests/test_validated_geometry.py +0 -0
  502. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
  503. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_epub_test_utils.py +0 -0
  504. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_flash_pdf_test_utils.py +0 -0
  505. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_image_mtef_test_utils.py +0 -0
  506. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_legacy_doc_test_utils.py +0 -0
  507. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
  508. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_legacy_xls_test_utils.py +0 -0
  509. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_metafile_test_utils.py +0 -0
  510. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_mtef_test_utils.py +0 -0
  511. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_mtef_v5_test_utils.py +0 -0
  512. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_native_test_utils.py +0 -0
  513. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_odf_test_utils.py +0 -0
  514. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_ofd_test_utils.py +0 -0
  515. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
  516. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
  517. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/_span_test_utils.py +0 -0
  518. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
  519. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
  520. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
  521. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
  522. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
  523. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
  524. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
  525. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
  526. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
  527. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
  528. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
  529. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
  530. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
  531. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
  532. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
  533. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
  534. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
  535. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
  536. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
  537. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
  538. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
  539. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
  540. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
  541. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
  542. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
  543. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
  544. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
  545. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
  546. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
  547. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/pdfs/test.pdf +0 -0
  548. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_backend_architecture.py +0 -0
  549. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_backend_block_object_regressions.py +0 -0
  550. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_docx_assets.py +0 -0
  551. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_docx_complex_fields.py +0 -0
  552. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_docx_math.py +0 -0
  553. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_docx_render.py +0 -0
  554. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_docx_special_char_tables.py +0 -0
  555. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_docx_table.py +0 -0
  556. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_emfplus_integration.py +0 -0
  557. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_epub_backlinks.py +0 -0
  558. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_epub_quoted_note_types.py +0 -0
  559. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_epub_render.py +0 -0
  560. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
  561. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_csv.py +0 -0
  562. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_docx_equationxml.py +0 -0
  563. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_epub.py +0 -0
  564. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_html.py +0 -0
  565. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_image_mtef.py +0 -0
  566. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
  567. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_legacy_doc.py +0 -0
  568. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
  569. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_legacy_ppt.py +0 -0
  570. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_legacy_xls.py +0 -0
  571. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
  572. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_manual_annotations.py +0 -0
  573. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_markup_anchors.py +0 -0
  574. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_model.py +0 -0
  575. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_mtef_v5.py +0 -0
  576. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_odf.py +0 -0
  577. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_ofd.py +0 -0
  578. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_office_image_mtef.py +0 -0
  579. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_office_metafile.py +0 -0
  580. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_office_models.py +0 -0
  581. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
  582. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
  583. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_office_title_types.py +0 -0
  584. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
  585. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
  586. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
  587. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
  588. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
  589. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
  590. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_extractor.py +0 -0
  591. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_formulas.py +0 -0
  592. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_graphics.py +0 -0
  593. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
  594. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
  595. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
  596. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_native_text.py +0 -0
  597. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
  598. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
  599. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_samples.py +0 -0
  600. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_scripts.py +0 -0
  601. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_semantics.py +0 -0
  602. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_tables.py +0 -0
  603. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
  604. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
  605. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_titles.py +0 -0
  606. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
  607. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_round2_annotations.py +0 -0
  608. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_round3_annotations.py +0 -0
  609. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_rtf.py +0 -0
  610. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_rule_generalization.py +0 -0
  611. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_shared_helpers.py +0 -0
  612. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_spatial_evidence.py +0 -0
  613. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
  614. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_guess_suffix_ole2.py +0 -0
  615. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_html_css_build.py +0 -0
  616. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_html_render.py +0 -0
  617. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_html_security.py +0 -0
  618. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
  619. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_latex_render.py +0 -0
  620. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_markdown_render.py +0 -0
  621. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_middle_json_block_models.py +0 -0
  622. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_middle_json_export.py +0 -0
  623. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_middle_json_validator.py +0 -0
  624. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_model_json.py +0 -0
  625. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_native_pdf_table.py +0 -0
  626. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
  627. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
  628. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
  629. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
  630. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
  631. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_ofd_assembly.py +0 -0
  632. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_ofd_vector_tables.py +0 -0
  633. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_office_demo_exports.py +0 -0
  634. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_office_demo_pages.py +0 -0
  635. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_office_parser_regressions.py +0 -0
  636. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_cjk_style.py +0 -0
  637. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
  638. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_classify.py +0 -0
  639. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_demo_links.py +0 -0
  640. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
  641. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_document.py +0 -0
  642. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_formula_layout.py +0 -0
  643. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_object_clipping.py +0 -0
  644. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_original_layout.py +0 -0
  645. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_pagination.py +0 -0
  646. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
  647. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_render.py +0 -0
  648. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
  649. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_structured_tables.py +0 -0
  650. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_table_cache.py +0 -0
  651. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_table_round2.py +0 -0
  652. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_text_dedup.py +0 -0
  653. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_text_styles.py +0 -0
  654. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_title_font_plan.py +0 -0
  655. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_title_space.py +0 -0
  656. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_pdf_visualization.py +0 -0
  657. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_postprocess_page_blocks.py +0 -0
  658. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_postprocess_pages.py +0 -0
  659. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_postprocess_paragraphs.py +0 -0
  660. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_postprocess_visual.py +0 -0
  661. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_render_api.py +0 -0
  662. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_render_html_table.py +0 -0
  663. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_render_image_renderer.py +0 -0
  664. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_render_list_index_utils.py +0 -0
  665. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_structured_content_render.py +0 -0
  666. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_svg_raster.py +0 -0
  667. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_table_merge.py +0 -0
  668. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_table_merge_cell_merge.py +0 -0
  669. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_text_block_anchor.py +0 -0
  670. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_text_boundary_rules.py +0 -0
  671. {docvortex-0.4.14 → docvortex-0.4.16}/tests/unittest/test_text_utils.py +0 -0
  672. {docvortex-0.4.14 → docvortex-0.4.16}/tools/__init__.py +0 -0
  673. {docvortex-0.4.14 → docvortex-0.4.16}/tools/build_html_css.py +0 -0
  674. {docvortex-0.4.14 → docvortex-0.4.16}/tools/calibrate_pdf_geometry.py +0 -0
  675. {docvortex-0.4.14 → docvortex-0.4.16}/tools/capture_baseline.py +0 -0
  676. {docvortex-0.4.14 → docvortex-0.4.16}/tools/capture_platform_layout.py +0 -0
  677. {docvortex-0.4.14 → docvortex-0.4.16}/tools/compare_font_platforms.py +0 -0
  678. {docvortex-0.4.14 → docvortex-0.4.16}/tools/font_geometry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.14
3
+ Version: 0.4.16
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
@@ -1,6 +1,6 @@
1
1
  # DocVortex 0.4 公共 SDK 与宿主迁移
2
2
 
3
- MinerU 使用 `docvortex>=0.4.0,<0.5.0`。本轮调整 Python 模块边界,保持文档协议、解析路由、模型回退与渲染语义。
3
+ 本文记录 0.4 系列的公共模块边界。MinerU 的页面原语复用需要 `docvortex>=0.4.15,<1`,文档协议、解析路由、模型回退与渲染语义保持不变。
4
4
 
5
5
  ## 公开入口
6
6
 
@@ -30,6 +30,11 @@ MinerU 使用 `docvortex>=0.4.0,<0.5.0`。本轮调整 Python 模块边界,保
30
30
 
31
31
  `prepare_table_page` 仅在存在候选表格时调用;同页复用其物化数据。`recover_table_region` 返回最终 HTML、来源、置信度和诊断,`None` 表示没有可接受结果。结构恢复异常以 `PDFTableRecoveryError` 保留原始原因,交给宿主回退;HTML 物化异常继续传播,避免改变旧异常边界。页面几何可以复用,证据不持有 PDFium 裸句柄。
32
32
 
33
+ 从 0.4.15 起,`PDFPage.get_vector_geometry()` 一次遍历返回公开的 `PDFPageVectorGeometry`,其中
34
+ `drawing_lines` 与 `path_infos` 是物化元组。`prepare_table_page` 和 `prepare_text_evidence` 都接受可选的
35
+ `vector_geometry=`,可与 `geometry=` 一起复用。调用方按页、按处理窗口持有并释放这些数据;`PDFPage`
36
+ 本身不缓存。文字证据构造只读访问源字符,旋转和组行累加使用独立的局部对象。
37
+
33
38
  通用 `convert_bbox` 显式声明 `unit`、`pixel` 或 `point`;`page_size` 使用 point,`render_scale` 是每 point 的像素数。模型 bbox 的自动解释与三位小数规则保留在 MinerU。共享 PDFium 锁、进程池和资源关闭职责仍归 DocVortex。
34
39
 
35
40
  ## 升级与回退
@@ -7,6 +7,8 @@ from .layout_evidence import build_layout_evidence
7
7
  import re
8
8
  import statistics
9
9
  import unicodedata
10
+ import heapq
11
+ import math
10
12
 
11
13
  from ....schema import BBox
12
14
  from .geometry import (
@@ -35,6 +37,59 @@ def _caption_crosses_left_text(members: list[_LineItem]) -> bool:
35
37
  )
36
38
 
37
39
 
40
+ def _same_baseline_candidate_pairs(
41
+ lines: list[_LineItem],
42
+ local_bboxes: list[BBox],
43
+ compatible_indices: dict[tuple[int, bool, str | None], list[int]],
44
+ ) -> list[list[int]] | None:
45
+ """仅筛除原规则不可能接受的纵向远距行对;异常或密集页面回退原遍历。"""
46
+ bounds: list[tuple[float, float]] = []
47
+ for line, box in zip(lines, local_bboxes, strict=True):
48
+ try:
49
+ height = _line_effective_height(line, box)
50
+ if not all(math.isfinite(value) for value in (*box, height)) or box[2] <= box[0] or box[3] <= box[1]:
51
+ return None
52
+ # 同行规则既接受框交叠,也接受底边差不超过 0.25 * max(height) 的行。
53
+ # 两行各自扩展底边容差形成超集,最终仍由原判定函数决定是否合并。
54
+ low, high = min(box[1], box[3] - 0.25 * height), box[3] + 0.25 * height
55
+ if line.angle == 0 and line.source_bbox is not None:
56
+ source = line.source_bbox
57
+ if not all(math.isfinite(value) for value in source) or source[2] <= source[0] or source[3] <= source[1]:
58
+ return None
59
+ source_height = source[3] - source[1]
60
+ low = min(low, source[1], source[3] - 0.25 * source_height)
61
+ high = max(high, source[3] + 0.25 * source_height)
62
+ if not math.isfinite(low) or not math.isfinite(high):
63
+ return None
64
+ except (TypeError, ValueError, IndexError):
65
+ return None
66
+ bounds.append((low, high))
67
+
68
+ candidates: list[list[int]] = [[] for _ in lines]
69
+ pair_count = 0
70
+ pair_limit = max(4096, 32 * len(lines))
71
+ for indices in compatible_indices.values():
72
+ active: set[int] = set()
73
+ ends: list[tuple[float, int]] = []
74
+ for index in sorted(indices, key=lambda item: (bounds[item][0], item)):
75
+ low, high = bounds[index]
76
+ # 保留相等端点,避免漏掉原规则恰好落在容差边界上的行对。
77
+ while ends and ends[0][0] < low:
78
+ _, expired = heapq.heappop(ends)
79
+ active.remove(expired)
80
+ pair_count += len(active)
81
+ if pair_count > pair_limit:
82
+ return None
83
+ for previous in active:
84
+ left, right = (previous, index) if previous < index else (index, previous)
85
+ candidates[left].append(right)
86
+ active.add(index)
87
+ heapq.heappush(ends, (high, index))
88
+ for partners in candidates:
89
+ partners.sort()
90
+ return candidates
91
+
92
+
38
93
  def _merge_same_baseline_text_lines(
39
94
  lines: list[_LineItem],
40
95
  page_size: tuple[float, float],
@@ -67,8 +122,14 @@ def _merge_same_baseline_text_lines(
67
122
  compatible_indices: dict[tuple[int, bool, str | None], list[int]] = {}
68
123
  for index, line in enumerate(lines):
69
124
  compatible_indices.setdefault((line.angle, line.formula_candidate_only, line.semantic_type), []).append(index)
125
+ candidates = _same_baseline_candidate_pairs(lines, local_bboxes, compatible_indices)
70
126
  for left_index, left_line in enumerate(lines):
71
- for right_index in compatible_indices[(left_line.angle, left_line.formula_candidate_only, left_line.semantic_type)]:
127
+ right_indices = (
128
+ candidates[left_index]
129
+ if candidates is not None
130
+ else compatible_indices[(left_line.angle, left_line.formula_candidate_only, left_line.semantic_type)]
131
+ )
132
+ for right_index in right_indices:
72
133
  if right_index <= left_index:
73
134
  continue
74
135
  right_line = lines[right_index]
@@ -222,14 +283,14 @@ def _overlapping_inline_cluster_pair_is_connected(
222
283
  return False
223
284
  if first_line.semantic_type != second_line.semantic_type:
224
285
  return False
286
+ if _bbox_axis_overlap_ratio(first_bbox, second_bbox, axis="y") < 0.55:
287
+ return False
225
288
  if _connection_crosses_table(
226
289
  first_line.bbox,
227
290
  second_line.bbox,
228
291
  table_bboxes,
229
292
  ):
230
293
  return False
231
- if _bbox_axis_overlap_ratio(first_bbox, second_bbox, axis="y") < 0.55:
232
- return False
233
294
 
234
295
  first_guard_bbox = first_line.source_bbox or first_bbox
235
296
  second_guard_bbox = second_line.source_bbox or second_bbox
@@ -3,11 +3,10 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from collections.abc import Sequence
6
- from copy import deepcopy
7
6
  from dataclasses import dataclass, replace
8
7
  from typing import Any
9
8
 
10
- from ..document.pdf import PDFPage, PDFPageTextGeometry
9
+ from ..document.pdf import PDFPage, PDFPageTextGeometry, PDFPageVectorGeometry
11
10
  from ..schema import BBox
12
11
  from .native.pdf._script_geometry import ScriptRole, classify_char_script_roles
13
12
  from .native.pdf._table_recovery.contracts import NativeTableRectangle, NativeTableRule, PDFTableRecoveryError
@@ -57,6 +56,7 @@ def prepare_text_evidence(
57
56
  page: PDFPage,
58
57
  *,
59
58
  geometry: PDFPageTextGeometry | None = None,
59
+ vector_geometry: PDFPageVectorGeometry | None = None,
60
60
  supported_angles: Sequence[float] = (0.0,),
61
61
  table_regions: Sequence[BBox] = (),
62
62
  excluded_script_regions: Sequence[BBox] = (),
@@ -70,11 +70,12 @@ def prepare_text_evidence(
70
70
 
71
71
  geometry = geometry if geometry is not None else page.get_chars_with_geometry()
72
72
  page_size = tuple(float(value) for value in page.size)
73
- chars = deepcopy(geometry.chars)
73
+ # 源字符只读;组行使用独立累加框,旋转等变换在消费处创建局部字符副本。
74
+ chars = geometry.chars
74
75
  lines = _build_native_line_items(
75
76
  get_lines_from_chars(chars), page_size, page_rotation=page.rotation, supported_angles=supported_angles
76
77
  )
77
- drawing_lines = page.get_drawing_lines()
78
+ drawing_lines = vector_geometry.drawing_lines if vector_geometry is not None else page.get_drawing_lines()
78
79
  styles = detect_pdf_text_style_lines(lines, drawing_lines)
79
80
  links = detect_pdf_text_link_lines(lines, page.get_link_annotations())
80
81
  script_lines = merge_text_line_clusters(list(lines), page_size, list(table_regions))
@@ -124,16 +125,22 @@ def apply_text_evidence(
124
125
  )
125
126
 
126
127
 
127
- def prepare_table_page(page: PDFPage, *, geometry: PDFPageTextGeometry | None = None) -> PDFTablePage:
128
+ def prepare_table_page(
129
+ page: PDFPage,
130
+ *,
131
+ geometry: PDFPageTextGeometry | None = None,
132
+ vector_geometry: PDFPageVectorGeometry | None = None,
133
+ ) -> PDFTablePage:
128
134
  """在调用方确认存在候选表格后物化页面原语,复用已有字符几何。"""
129
135
  from .native.pdf._table_recovery.engine import coerce_native_table_rectangles, coerce_native_table_rules
130
136
 
131
137
  geometry = geometry if geometry is not None else page.get_chars_with_geometry()
138
+ vector_geometry = vector_geometry if vector_geometry is not None else page.get_vector_geometry()
132
139
  return PDFTablePage(
133
140
  tuple(float(value) for value in page.size),
134
141
  geometry,
135
- coerce_native_table_rules(page.get_drawing_lines()),
136
- coerce_native_table_rectangles(page.get_path_infos()),
142
+ coerce_native_table_rules(vector_geometry.drawing_lines),
143
+ coerce_native_table_rectangles(vector_geometry.path_infos),
137
144
  )
138
145
 
139
146
 
@@ -1,6 +1,6 @@
1
1
  """PDF 文档访问、显式分类及共享文本契约。"""
2
2
 
3
- from ._document import PDFDocument, PDFPage, PDFPageTextGeometry, get_lines_from_chars
3
+ from ._document import PDFDocument, PDFPage, PDFPageTextGeometry, PDFPageVectorGeometry, get_lines_from_chars
4
4
  from .pdfium import PdfiumFontError, PdfiumRuntimeInfo, initialize_pdfium_runtime
5
5
  from .text import Bbox, Char, Line, Span
6
6
 
@@ -8,6 +8,7 @@ __all__ = [
8
8
  "PDFDocument",
9
9
  "PDFPage",
10
10
  "PDFPageTextGeometry",
11
+ "PDFPageVectorGeometry",
11
12
  "get_lines_from_chars",
12
13
  "Bbox",
13
14
  "Char",
@@ -104,6 +104,7 @@ from .native_contracts import (
104
104
  from .native_contracts import (
105
105
  PDFPageTextGeometry as PDFPageTextGeometry,
106
106
  )
107
+ from .native_contracts import PDFPageVectorGeometry as PDFPageVectorGeometry
107
108
  from .native_contracts import (
108
109
  PDFPathInfo as PDFPathInfo,
109
110
  )
@@ -289,6 +290,10 @@ class PDFPage:
289
290
 
290
291
  return self.pdf_doc.get_page_path_infos(self._idx)
291
292
 
293
+ def get_vector_geometry(self) -> PDFPageVectorGeometry:
294
+ """一次读取当前页的绘图线和路径摘要,由调用方显式管理复用范围。"""
295
+ return self.pdf_doc.get_page_vector_geometry(self._idx)
296
+
292
297
  def get_link_annotations(self) -> list[PDFLinkAnnotation]:
293
298
  """读取当前页已规范到视觉页面坐标的外部 URI Link 注解。"""
294
299
 
@@ -599,6 +604,17 @@ class PDFDocument:
599
604
  page_rotation = 0
600
605
  return _extract_page_drawing_lines(page, page_bbox, page_rotation)
601
606
 
607
+ def get_page_vector_geometry(self, page_idx: int) -> PDFPageVectorGeometry:
608
+ """在同一页面和共享锁内遍历一次 Path,返回独立物化的矢量几何。"""
609
+ with self._open_page(page_idx) as page:
610
+ page_bbox = _normalize_pdf_page_bbox(page.get_bbox())
611
+ try:
612
+ page_rotation = int(page.get_rotation()) % 360
613
+ except Exception:
614
+ page_rotation = 0
615
+ drawings, paths = _extract_page_paths_and_lines(page, page_bbox, page_rotation)
616
+ return PDFPageVectorGeometry(tuple(drawings), tuple(paths))
617
+
602
618
  def get_page_path_infos(self, page_idx: int) -> list[PDFPathInfo]:
603
619
  """提取页面及嵌套 Form 中的 Path 几何和绘制特征。"""
604
620
  with self._open_page(page_idx) as page:
@@ -125,6 +125,14 @@ class PDFImageInfo:
125
125
  fingerprint: str | None
126
126
 
127
127
 
128
+ @dataclass(frozen=True, slots=True)
129
+ class PDFPageVectorGeometry:
130
+ """保存一次 Path 遍历物化的线与路径摘要,不持有 PDFium 句柄。"""
131
+
132
+ drawing_lines: tuple[PDFDrawingLine, ...] = ()
133
+ path_infos: tuple[PDFPathInfo, ...] = ()
134
+
135
+
128
136
  @dataclass(frozen=True, slots=True)
129
137
  class _PDFPageSnapshot:
130
138
  """保存单次页面生命周期提取的纯 Python 数据,不持有 PDFium 子对象。"""
@@ -29,7 +29,7 @@ def property_date(value: object, *, warnings: list[str] | None = None) -> str |
29
29
  if not text:
30
30
  return None
31
31
  if text.startswith("D:"):
32
- match = re.fullmatch(r"D:(\d{4})(\d{2})?(\d{2})?(\d{2})?(\d{2})?(\d{2})?(Z|[+-]\d{2}'?\d{2}'?)?", text)
32
+ match = re.fullmatch(r"D:(\d{4})(\d{2})?(\d{2})?(\d{2})?(\d{2})?(\d{2})?(Z|[+-]\d{2}'?(?:\d{2}'?)?)?", text)
33
33
  if match is None:
34
34
  if warnings is not None:
35
35
  warnings.append(f"Invalid declared date: {text[:120]}")
@@ -41,7 +41,7 @@ def property_date(value: object, *, warnings: list[str] | None = None) -> str |
41
41
  text += separator + part
42
42
  if zone:
43
43
  zone = zone.replace("'", "")
44
- text += zone if zone == "Z" else zone[:3] + ":" + zone[3:]
44
+ text += zone if zone == "Z" else zone[:3] + (":" + zone[3:] if zone[3:] else ":00")
45
45
  try:
46
46
  if re.fullmatch(r"\d{4}", text):
47
47
  date(int(text), 1, 1)
@@ -131,6 +131,7 @@ PUBLIC_API: dict[str, tuple[str, ...]] = {
131
131
  "PDFDocument",
132
132
  "PDFPage",
133
133
  "PDFPageTextGeometry",
134
+ "PDFPageVectorGeometry",
134
135
  "PdfiumFontError",
135
136
  "PdfiumRuntimeInfo",
136
137
  "Span",
@@ -1,3 +1,3 @@
1
- __version__ = "0.4.14"
1
+ __version__ = "0.4.16"
2
2
 
3
3
  __all__ = ["__version__"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.14
3
+ Version: 0.4.16
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
@@ -452,6 +452,7 @@ tests/test_history_geometry_tools.py
452
452
  tests/test_html_namespace.py
453
453
  tests/test_mixed_font_script_reference.py
454
454
  tests/test_pdf_analysis_api.py
455
+ tests/test_pdf_cpu_evidence.py
455
456
  tests/test_pdf_font_geometry.py
456
457
  tests/test_pdf_font_runtime.py
457
458
  tests/test_pdf_model_text_normalization.py
@@ -156,7 +156,16 @@ def test_rtf_explicit_time_count_and_application() -> None:
156
156
 
157
157
  @pytest.mark.parametrize(
158
158
  "value,expected",
159
- [("D:2024", "2024"), ("D:202402", "2024-02"), ("2024-03-04", "2024-03-04"), ("D:202413", None), ("yesterday", None)],
159
+ [
160
+ ("D:2024", "2024"),
161
+ ("D:202402", "2024-02"),
162
+ ("2024-03-04", "2024-03-04"),
163
+ ("D:202413", None),
164
+ ("yesterday", None),
165
+ ("D:20131014124204-04'", "2013-10-14T12:42:04-04:00"),
166
+ ("D:20240304050607+08", "2024-03-04T05:06:07+08:00"),
167
+ ("D:20240304050607+0", None),
168
+ ],
160
169
  )
161
170
  def test_dates_never_invent_missing_parts(value: str, expected: str | None) -> None:
162
171
  """非法日期保持未知,年和月精度不能补成任意日期。"""
@@ -23,7 +23,7 @@ from docvortex.analyzers.pdf import (
23
23
  prepare_text_evidence,
24
24
  recover_table_region,
25
25
  )
26
- from docvortex.document.pdf import PDFPageTextGeometry
26
+ from docvortex.document.pdf import PDFPageTextGeometry, PDFPageVectorGeometry
27
27
  from docvortex.public_api import PUBLIC_API
28
28
 
29
29
 
@@ -112,6 +112,7 @@ def test_table_page_is_reused_and_returns_materialized_html(monkeypatch: pytest.
112
112
  page = MagicMock(size=(100.0, 200.0))
113
113
  page.get_drawing_lines.return_value = []
114
114
  page.get_path_infos.return_value = []
115
+ page.get_vector_geometry.return_value = PDFPageVectorGeometry()
115
116
  geometry = PDFPageTextGeometry([], {}, {})
116
117
  prepared = prepare_table_page(page, geometry=geometry)
117
118
  recover = MagicMock(
@@ -125,8 +126,9 @@ def test_table_page_is_reused_and_returns_materialized_html(monkeypatch: pytest.
125
126
  assert all(result.html == "<table><tr><td>x<sup>2</sup></td></tr></table>" for result in results)
126
127
  assert [call.args[0].angle for call in recover.call_args_list] == [0, 90]
127
128
  page.get_chars_with_geometry.assert_not_called()
128
- page.get_drawing_lines.assert_called_once()
129
- page.get_path_infos.assert_called_once()
129
+ page.get_vector_geometry.assert_called_once()
130
+ page.get_drawing_lines.assert_not_called()
131
+ page.get_path_infos.assert_not_called()
130
132
  assert prepared.geometry is geometry
131
133
  monkeypatch.setattr(table_materialization, "recover_table_result", lambda *_args: None)
132
134
  assert recover_table_region(prepared, (10, 20, 90, 80)) is None
@@ -0,0 +1,164 @@
1
+ """验证页面原语复用、源数据只读和行对筛选的保守等价性。"""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import pickle
7
+ import random
8
+ from copy import deepcopy
9
+ from dataclasses import asdict
10
+ from io import BytesIO
11
+ from unittest.mock import MagicMock
12
+
13
+ import pytest
14
+ from reportlab.pdfgen.canvas import Canvas
15
+
16
+ from docvortex.analyzers import pdf as analysis
17
+ from docvortex.analyzers.native.pdf import line_merging as merging
18
+ from docvortex.analyzers.native.pdf.models import _LineItem
19
+ from docvortex.analyzers.native.pdf.native_text import _build_native_line_items
20
+ from docvortex.document.pdf import Bbox, PDFDocument, PDFPageVectorGeometry, get_lines_from_chars
21
+ from docvortex.document.pdf import _document
22
+
23
+
24
+ def _pdf() -> bytes:
25
+ """生成含链接、旋转文本、上下标和矢量线的独立 PDF。"""
26
+ buffer = BytesIO()
27
+ canvas = Canvas(buffer, pagesize=(400, 600))
28
+ for index in range(25):
29
+ canvas.setFont("Helvetica", 12)
30
+ canvas.drawString(30, 570 - index * 20, f"Row {index}: x")
31
+ canvas.setFont("Helvetica", 7)
32
+ canvas.drawString(130, 574 - index * 20, "2")
33
+ canvas.line(20, 566 - index * 20, 180, 566 - index * 20)
34
+ canvas.linkURL("https://example.com", (30, 550, 90, 565), relative=0)
35
+ canvas.saveState()
36
+ canvas.translate(300, 200)
37
+ canvas.rotate(90)
38
+ canvas.drawString(0, 0, "Rotated text")
39
+ canvas.restoreState()
40
+ canvas.rect(20, 50, 170, 540)
41
+ canvas.save()
42
+ return buffer.getvalue()
43
+
44
+
45
+ def test_vector_snapshot_matches_independent_queries_and_outlives_document(monkeypatch: pytest.MonkeyPatch) -> None:
46
+ """一次组合遍历与旧查询逐值一致,文档关闭后仍可安全使用。"""
47
+ with PDFDocument(_pdf()) as document:
48
+ page = document[0]
49
+ drawings, paths = page.get_drawing_lines(), page.get_path_infos()
50
+ extract = MagicMock(wraps=_document._extract_page_paths_and_lines)
51
+ monkeypatch.setattr(_document, "_extract_page_paths_and_lines", extract)
52
+ vectors = page.get_vector_geometry()
53
+ assert vectors == PDFPageVectorGeometry(tuple(drawings), tuple(paths))
54
+ extract.assert_called_once()
55
+ assert pickle.loads(pickle.dumps(vectors)) == vectors
56
+
57
+
58
+ def test_shared_primitives_preserve_characters_and_text_evidence() -> None:
59
+ """共享字符与矢量几何不改动源对象,并保留区域相关的最终证据。"""
60
+ with PDFDocument(_pdf()) as document:
61
+ page = document[0]
62
+ geometry = page.get_chars_with_geometry()
63
+ vectors = page.get_vector_geometry()
64
+ before = pickle.dumps(geometry)
65
+ expected = analysis.prepare_text_evidence(page, geometry=geometry, table_regions=[(20, 30, 190, 300)])
66
+ materialized_page = MagicMock(size=page.size, rotation=page.rotation)
67
+ materialized_page.get_link_annotations.return_value = page.get_link_annotations()
68
+ actual = analysis.prepare_text_evidence(
69
+ materialized_page, geometry=geometry, vector_geometry=vectors, table_regions=[(20, 30, 190, 300)]
70
+ )
71
+ assert (actual.styles, actual.links, actual.scripts) == (expected.styles, expected.links, expected.scripts)
72
+ assert actual.geometry is geometry
73
+ analysis.prepare_table_page(materialized_page, geometry=geometry, vector_geometry=vectors)
74
+ materialized_page.get_chars_with_geometry.assert_not_called()
75
+ materialized_page.get_vector_geometry.assert_not_called()
76
+ materialized_page.get_drawing_lines.assert_not_called()
77
+ materialized_page.get_path_infos.assert_not_called()
78
+ assert pickle.dumps(geometry) == before
79
+
80
+
81
+ def _groups(lines: list[_LineItem]) -> dict[tuple[int, bool, str | None], list[int]]:
82
+ """按原合并规则的必要分类条件建立索引。"""
83
+ groups: dict[tuple[int, bool, str | None], list[int]] = {}
84
+ for index, line in enumerate(lines):
85
+ groups.setdefault((line.angle, line.formula_candidate_only, line.semantic_type), []).append(index)
86
+ return groups
87
+
88
+
89
+ def test_candidate_screening_never_drops_original_acceptance() -> None:
90
+ """覆盖来源框偏移和字体尺度大于可见框的情况,逐对验证原判定的接受超集。"""
91
+ rng = random.Random(918)
92
+ accepted = 0
93
+ for _ in range(30):
94
+ lines = []
95
+ for index in range(80):
96
+ x, y = rng.uniform(0, 200), rng.uniform(0, 200)
97
+ width, height = rng.uniform(0.1, 30), rng.uniform(0.1, 25)
98
+ box = (x, y, x + width, y + height)
99
+ lines.append(
100
+ _LineItem(
101
+ "x",
102
+ box,
103
+ 0,
104
+ index,
105
+ source_bbox=(x - 5, y - 10, x + width + 5, y + height + 10),
106
+ baseline=y + height,
107
+ chars=[{"char_idx": index, "source_indices": (index,), "bbox": Bbox(list(box)), "char": "x"}],
108
+ visual_row_id=index,
109
+ effective_height=rng.uniform(0.1, 80),
110
+ font_signature=("test", 0),
111
+ font_coverage=1,
112
+ )
113
+ )
114
+ candidates = merging._same_baseline_candidate_pairs(lines, [line.bbox for line in lines], _groups(lines))
115
+ assert candidates is not None
116
+ for left, first in enumerate(lines):
117
+ assert candidates[left] == sorted(set(candidates[left]))
118
+ for right in range(left + 1, len(lines)):
119
+ second = lines[right]
120
+ if merging._can_merge_same_baseline_pair(first, first.bbox, second, second.bbox, []):
121
+ accepted += 1
122
+ assert right in candidates[left]
123
+ assert accepted > 100
124
+
125
+
126
+ @pytest.mark.parametrize("invalid", [float("nan"), float("inf"), -float("inf")])
127
+ def test_invalid_geometry_uses_exhaustive_fallback(invalid: float) -> None:
128
+ """异常源框不能悄悄缩小候选,交回已有算法处理。"""
129
+ lines = [_LineItem("a", (0, 0, 20, 10), 0, 0), _LineItem("b", (21, 0, 40, 10), 0, 1)]
130
+ lines[1].source_bbox = (0, invalid, 40, 10)
131
+ assert merging._same_baseline_candidate_pairs(lines, [line.bbox for line in lines], _groups(lines)) is None
132
+
133
+
134
+ def test_dense_page_bounds_candidate_storage() -> None:
135
+ """候选数量超过线性预算时回退,不分配整个平方级行对集合。"""
136
+ lines = [_LineItem("a", (0, 0, 20, 10), 0, index) for index in range(128)]
137
+ assert merging._same_baseline_candidate_pairs(lines, [line.bbox for line in lines], _groups(lines)) is None
138
+
139
+
140
+ def test_bottom_edge_tolerance_is_included() -> None:
141
+ """可见框不交叠但有效字体尺度允许底边对齐时仍保留原规则候选。"""
142
+ lines = [
143
+ _LineItem("a", (0, 0, 10, 1), 0, 0, effective_height=40, font_signature=("font", 0), font_coverage=1),
144
+ _LineItem("b", (11, 10, 21, 11), 0, 1, effective_height=40, font_signature=("font", 0), font_coverage=1),
145
+ ]
146
+ assert merging._can_merge_same_baseline_pair(lines[0], lines[0].bbox, lines[1], lines[1].bbox, [])
147
+ assert merging._same_baseline_candidate_pairs(lines, [line.bbox for line in lines], _groups(lines)) == [[1], []]
148
+
149
+
150
+ @pytest.mark.parametrize("angle", [0, 90, 180, 270])
151
+ @pytest.mark.parametrize("tables", [[], [(0, 100, 400, 180)]])
152
+ def test_merged_output_matches_exhaustive_order(monkeypatch: pytest.MonkeyPatch, angle: int, tables: list) -> None:
153
+ """比较完整行对象,确认筛选不会改变并查集认领、字符或结果排序。"""
154
+ with PDFDocument(_pdf()) as document:
155
+ page = document[0]
156
+ lines = _build_native_line_items(get_lines_from_chars(page.get_chars_with_geometry().chars), page.size)
157
+ for line in lines:
158
+ line.angle = angle
159
+ actual = merging.merge_text_line_clusters(deepcopy(lines), page.size, tables)
160
+ monkeypatch.setattr(merging, "_same_baseline_candidate_pairs", lambda *_args: None)
161
+ expected = merging.merge_text_line_clusters(deepcopy(lines), page.size, tables)
162
+ assert json.dumps([asdict(line) for line in actual], default=repr, sort_keys=True) == json.dumps(
163
+ [asdict(line) for line in expected], default=repr, sort_keys=True
164
+ )
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes