docvortex 0.4.20__tar.gz → 0.4.22__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 (686) hide show
  1. {docvortex-0.4.20/src/docvortex.egg-info → docvortex-0.4.22}/PKG-INFO +1 -1
  2. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/tables.py +18 -2
  3. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/equation/image.py +52 -18
  4. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/limits.py +2 -0
  5. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/metadata.py +7 -5
  6. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/models.py +98 -1
  7. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/native_text.py +48 -1
  8. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/table_annotations.py +221 -66
  9. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/table_detection.py +9 -0
  10. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/table_rules.py +526 -180
  11. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/metadata.py +28 -12
  12. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/inline.py +12 -2
  13. docvortex-0.4.22/src/docvortex/render/_internal/pdf/paragraph.py +250 -0
  14. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/version.py +1 -1
  15. {docvortex-0.4.20 → docvortex-0.4.22/src/docvortex.egg-info}/PKG-INFO +1 -1
  16. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex.egg-info/SOURCES.txt +1 -0
  17. {docvortex-0.4.20 → docvortex-0.4.22}/tests/benchmarks/flash_pdf.py +53 -3
  18. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_document_metadata.py +29 -0
  19. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_image_mtef_test_utils.py +14 -0
  20. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_docx_special_char_tables.py +39 -0
  21. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_image_mtef.py +54 -4
  22. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_tables.py +249 -1
  23. docvortex-0.4.22/tests/unittest/test_pdf_cjk_objects.py +229 -0
  24. docvortex-0.4.20/src/docvortex/render/_internal/pdf/paragraph.py +0 -123
  25. {docvortex-0.4.20 → docvortex-0.4.22}/LICENSE.md +0 -0
  26. {docvortex-0.4.20 → docvortex-0.4.22}/MANIFEST.in +0 -0
  27. {docvortex-0.4.20 → docvortex-0.4.22}/README.md +0 -0
  28. {docvortex-0.4.20 → docvortex-0.4.22}/demo/README.md +0 -0
  29. {docvortex-0.4.20 → docvortex-0.4.22}/demo/demo.py +0 -0
  30. {docvortex-0.4.20 → docvortex-0.4.22}/demo/office_docs/README.md +0 -0
  31. {docvortex-0.4.20 → docvortex-0.4.22}/demo/office_docs/docx_01.doc +0 -0
  32. {docvortex-0.4.20 → docvortex-0.4.22}/demo/office_docs/docx_01.docx +0 -0
  33. {docvortex-0.4.20 → docvortex-0.4.22}/demo/office_docs/pptx_01.ppt +0 -0
  34. {docvortex-0.4.20 → docvortex-0.4.22}/demo/office_docs/pptx_01.pptx +0 -0
  35. {docvortex-0.4.20 → docvortex-0.4.22}/demo/office_docs/rtf_01.rtf +0 -0
  36. {docvortex-0.4.20 → docvortex-0.4.22}/demo/office_docs/xlsx_01.xls +0 -0
  37. {docvortex-0.4.20 → docvortex-0.4.22}/demo/office_docs/xlsx_01.xlsx +0 -0
  38. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
  39. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
  40. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/caibao1.pdf +0 -0
  41. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/demo1.pdf +0 -0
  42. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/demo2.pdf +0 -0
  43. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/demo3.pdf +0 -0
  44. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/demo4.pdf +0 -0
  45. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/demo6.pdf +0 -0
  46. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
  47. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
  48. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
  49. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
  50. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs/small_ocr.pdf +0 -0
  51. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
  52. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
  53. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
  54. {docvortex-0.4.20 → docvortex-0.4.22}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
  55. {docvortex-0.4.20 → docvortex-0.4.22}/docs/HTML_PROTOCOL.md +0 -0
  56. {docvortex-0.4.20 → docvortex-0.4.22}/docs/JSON_PROTOCOL.md +0 -0
  57. {docvortex-0.4.20 → docvortex-0.4.22}/docs/METADATA.md +0 -0
  58. {docvortex-0.4.20 → docvortex-0.4.22}/docs/PDF_FONTS.md +0 -0
  59. {docvortex-0.4.20 → docvortex-0.4.22}/docs/RENDER_OWNERSHIP.md +0 -0
  60. {docvortex-0.4.20 → docvortex-0.4.22}/docs/USAGE.md +0 -0
  61. {docvortex-0.4.20 → docvortex-0.4.22}/docs/flash-manual-annotations-2026-09-15.md +0 -0
  62. {docvortex-0.4.20 → docvortex-0.4.22}/docs/flash-round2-annotations-2026-09-15.md +0 -0
  63. {docvortex-0.4.20 → docvortex-0.4.22}/docs/flash-rule-generalization-2026-09-15.md +0 -0
  64. {docvortex-0.4.20 → docvortex-0.4.22}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
  65. {docvortex-0.4.20 → docvortex-0.4.22}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
  66. {docvortex-0.4.20 → docvortex-0.4.22}/docs/flash-title-coverage-2026-09-16.md +0 -0
  67. {docvortex-0.4.20 → docvortex-0.4.22}/docs/sdk-0.4.md +0 -0
  68. {docvortex-0.4.20 → docvortex-0.4.22}/pyproject.toml +0 -0
  69. {docvortex-0.4.20 → docvortex-0.4.22}/schemas/middle-2.0.json +0 -0
  70. {docvortex-0.4.20 → docvortex-0.4.22}/schemas/model-2.0.json +0 -0
  71. {docvortex-0.4.20 → docvortex-0.4.22}/setup.cfg +0 -0
  72. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/__init__.py +0 -0
  73. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/__init__.py +0 -0
  74. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/__init__.py +0 -0
  75. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
  76. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
  77. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/_shared/image.py +0 -0
  78. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
  79. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
  80. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
  81. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
  82. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
  83. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
  84. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/_shared/names.py +0 -0
  85. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
  86. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/contracts.py +0 -0
  87. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/csv.py +0 -0
  88. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
  89. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/epub/constants.py +0 -0
  90. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/epub/converter.py +0 -0
  91. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/epub/errors.py +0 -0
  92. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
  93. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/epub/package.py +0 -0
  94. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/epub/properties.py +0 -0
  95. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
  96. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/html/__init__.py +0 -0
  97. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/html/anchors.py +0 -0
  98. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/html/constants.py +0 -0
  99. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/html/converter.py +0 -0
  100. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/html/document.py +0 -0
  101. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/html/errors.py +0 -0
  102. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/html/metadata.py +0 -0
  103. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/html/resources.py +0 -0
  104. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/html/selector.py +0 -0
  105. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/models.py +0 -0
  106. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
  107. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
  108. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
  109. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
  110. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
  111. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
  112. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/images.py +0 -0
  113. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
  114. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/models.py +0 -0
  115. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/package.py +0 -0
  116. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/path.py +0 -0
  117. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
  118. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
  119. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
  120. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/table.py +0 -0
  121. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/text.py +0 -0
  122. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
  123. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/__init__.py +0 -0
  124. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
  125. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
  126. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
  127. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
  128. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
  129. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
  130. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
  131. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
  132. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
  133. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
  134. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
  135. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
  136. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
  137. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
  138. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
  139. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
  140. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
  141. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
  142. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
  143. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
  144. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
  145. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
  146. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
  147. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
  148. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
  149. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
  150. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
  151. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
  152. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
  153. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
  154. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
  155. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
  156. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/errors.py +0 -0
  157. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/image.py +0 -0
  158. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
  159. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
  160. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
  161. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
  162. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
  163. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
  164. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
  165. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
  166. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
  167. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
  168. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
  169. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
  170. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/odf/styles.py +0 -0
  171. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/odf/table.py +0 -0
  172. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/odf/text.py +0 -0
  173. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
  174. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/opc.py +0 -0
  175. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
  176. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
  177. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
  178. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
  179. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
  180. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
  181. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
  182. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
  183. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
  184. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
  185. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
  186. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
  187. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
  188. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
  189. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
  190. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
  191. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
  192. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
  193. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
  194. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
  195. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
  196. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
  197. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
  198. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
  199. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
  200. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
  201. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
  202. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
  203. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/spreadsheet/region_discovery.py +0 -0
  204. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/streams.py +0 -0
  205. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
  206. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
  207. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
  208. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
  209. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
  210. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
  211. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
  212. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
  213. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
  214. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
  215. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
  216. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
  217. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
  218. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
  219. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
  220. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
  221. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
  222. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
  223. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
  224. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
  225. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
  226. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
  227. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
  228. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
  229. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
  230. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
  231. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
  232. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
  233. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
  234. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
  235. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
  236. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
  237. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
  238. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
  239. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
  240. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
  241. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
  242. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
  243. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
  244. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
  245. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
  246. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
  247. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
  248. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
  249. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
  250. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
  251. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
  252. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
  253. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
  254. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
  255. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
  256. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
  257. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
  258. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
  259. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
  260. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
  261. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
  262. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
  263. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
  264. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
  265. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
  266. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
  267. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
  268. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
  269. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
  270. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
  271. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
  272. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
  273. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
  274. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
  275. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
  276. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
  277. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
  278. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
  279. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
  280. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
  281. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
  282. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/analyzers/pdf.py +0 -0
  283. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/api.py +0 -0
  284. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/assets/__init__.py +0 -0
  285. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/assets/images.py +0 -0
  286. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/assets/store.py +0 -0
  287. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/cli.py +0 -0
  288. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/codecs/__init__.py +0 -0
  289. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/codecs/html/__init__.py +0 -0
  290. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/codecs/html/contracts.py +0 -0
  291. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/codecs/html/materializer.py +0 -0
  292. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/codecs/html/parser.py +0 -0
  293. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/codecs/html/resources.py +0 -0
  294. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/codecs/json.py +0 -0
  295. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/__init__.py +0 -0
  296. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/inline.py +0 -0
  297. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/links.py +0 -0
  298. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/markup/__init__.py +0 -0
  299. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/markup/anchors.py +0 -0
  300. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/markup/formula.py +0 -0
  301. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/markup/projector.py +0 -0
  302. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/markup/styles.py +0 -0
  303. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/mathml.py +0 -0
  304. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/normalization.py +0 -0
  305. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/spans.py +0 -0
  306. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/table/__init__.py +0 -0
  307. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/table/blocks.py +0 -0
  308. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/table/content.py +0 -0
  309. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/table/document.py +0 -0
  310. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/table/html.py +0 -0
  311. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/table/models.py +0 -0
  312. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/table/rules.py +0 -0
  313. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/table/structure.py +0 -0
  314. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/text.py +0 -0
  315. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/content/tree.py +0 -0
  316. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/__init__.py +0 -0
  317. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/contracts.py +0 -0
  318. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/detection.py +0 -0
  319. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/filetypes.py +0 -0
  320. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/page_range.py +0 -0
  321. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/__init__.py +0 -0
  322. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/_document.py +0 -0
  323. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/classify.py +0 -0
  324. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/constants.py +0 -0
  325. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/font_runtime.py +0 -0
  326. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/images.py +0 -0
  327. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/layout.py +0 -0
  328. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/metadata.py +0 -0
  329. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/native_annotations.py +0 -0
  330. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/native_contracts.py +0 -0
  331. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/native_coordinates.py +0 -0
  332. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
  333. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/native_objects.py +0 -0
  334. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
  335. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/pdfium.py +0 -0
  336. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/raster.py +0 -0
  337. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/text/__init__.py +0 -0
  338. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/text/_contracts.py +0 -0
  339. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/text/dedup.py +0 -0
  340. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/text/extract.py +0 -0
  341. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/text/geometry.py +0 -0
  342. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/text/groups.py +0 -0
  343. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/pdf/visuals.py +0 -0
  344. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/properties.py +0 -0
  345. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/document/source.py +0 -0
  346. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/errors.py +0 -0
  347. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/export/__init__.py +0 -0
  348. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/export/_images.py +0 -0
  349. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/export/bundle.py +0 -0
  350. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/export/files.py +0 -0
  351. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/export/middle.py +0 -0
  352. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/__init__.py +0 -0
  353. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/_coordinates.py +0 -0
  354. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/_geometry.py +0 -0
  355. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/_hyperlink.py +0 -0
  356. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/_image.py +0 -0
  357. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/_image_operations.py +0 -0
  358. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/_image_payload.py +0 -0
  359. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/_svg_raster.py +0 -0
  360. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/_text.py +0 -0
  361. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/image_encoding.py +0 -0
  362. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/language.py +0 -0
  363. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/type_identity.py +0 -0
  364. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/foundation/xml_names.py +0 -0
  365. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/geometry.py +0 -0
  366. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/options.py +0 -0
  367. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/postprocess/__init__.py +0 -0
  368. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/postprocess/content.py +0 -0
  369. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/postprocess/document.py +0 -0
  370. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/postprocess/lists.py +0 -0
  371. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/postprocess/page_blocks.py +0 -0
  372. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/postprocess/pages.py +0 -0
  373. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/postprocess/paragraphs.py +0 -0
  374. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/postprocess/visual.py +0 -0
  375. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/public_api.py +0 -0
  376. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/__init__.py +0 -0
  377. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/__init__.py +0 -0
  378. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/common/__init__.py +0 -0
  379. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/common/context.py +0 -0
  380. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/common/html_table.py +0 -0
  381. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/common/index.py +0 -0
  382. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/common/list_items.py +0 -0
  383. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/common/planner.py +0 -0
  384. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/docx/__init__.py +0 -0
  385. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/docx/assets.py +0 -0
  386. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/docx/inline.py +0 -0
  387. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/docx/math.py +0 -0
  388. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/docx/renderer.py +0 -0
  389. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/docx/styles.py +0 -0
  390. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/docx/table.py +0 -0
  391. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/epub/__init__.py +0 -0
  392. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/epub/assets.py +0 -0
  393. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/epub/package.py +0 -0
  394. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/epub/renderer.py +0 -0
  395. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/html/__init__.py +0 -0
  396. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/html/inline.py +0 -0
  397. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/html/renderer.py +0 -0
  398. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
  399. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/html/table.py +0 -0
  400. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/latex/__init__.py +0 -0
  401. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/latex/assets.py +0 -0
  402. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/latex/inline.py +0 -0
  403. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/latex/renderer.py +0 -0
  404. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/latex/table.py +0 -0
  405. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
  406. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/markdown/assets.py +0 -0
  407. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
  408. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
  409. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/markdown/inline.py +0 -0
  410. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
  411. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/markdown/table.py +0 -0
  412. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
  413. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/assets.py +0 -0
  414. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
  415. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
  416. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/formula.py +0 -0
  417. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
  418. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/original.py +0 -0
  419. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
  420. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
  421. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/styles.py +0 -0
  422. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/table.py +0 -0
  423. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
  424. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
  425. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
  426. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
  427. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
  428. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/api.py +0 -0
  429. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/contracts.py +0 -0
  430. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/docx.py +0 -0
  431. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/epub.py +0 -0
  432. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/fragments.py +0 -0
  433. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/html.py +0 -0
  434. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/latex.py +0 -0
  435. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/markdown.py +0 -0
  436. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/pdf.py +0 -0
  437. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/render/structured_content.py +0 -0
  438. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/resources/epub/docvortex.css +0 -0
  439. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
  440. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/resources/fonts/NOTICE +0 -0
  441. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/resources/fonts/manifest.json +0 -0
  442. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/resources/html/docvortex.css +0 -0
  443. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/resources/html/docvortex.min.css +0 -0
  444. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
  445. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/result.py +0 -0
  446. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/schema.py +0 -0
  447. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex/visualization.py +0 -0
  448. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex.egg-info/dependency_links.txt +0 -0
  449. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex.egg-info/entry_points.txt +0 -0
  450. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex.egg-info/requires.txt +0 -0
  451. {docvortex-0.4.20 → docvortex-0.4.22}/src/docvortex.egg-info/top_level.txt +0 -0
  452. {docvortex-0.4.20 → docvortex-0.4.22}/tests/benchmarks/native_pdf_table.py +0 -0
  453. {docvortex-0.4.20 → docvortex-0.4.22}/tests/benchmarks/pdf_render.py +0 -0
  454. {docvortex-0.4.20 → docvortex-0.4.22}/tests/benchmarks/pipeline.py +0 -0
  455. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
  456. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_layout_block_expectations.json +0 -0
  457. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
  458. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
  459. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_manual_annotations.json +0 -0
  460. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_manual_review_decisions.json +0 -0
  461. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_reviewed_history.json +0 -0
  462. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_round2_annotations.json +0 -0
  463. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_round2_review_decisions.json +0 -0
  464. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_round3_annotations.json +0 -0
  465. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
  466. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_round3_review_decisions.json +0 -0
  467. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
  468. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
  469. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
  470. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
  471. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
  472. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
  473. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/pdf_char_dedup.json +0 -0
  474. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
  475. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/pdf_numeric_citations_review.json +0 -0
  476. {docvortex-0.4.20 → docvortex-0.4.22}/tests/fixtures/rtf/semantic.rtf +0 -0
  477. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_architecture.py +0 -0
  478. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_benchmark_entrypoint.py +0 -0
  479. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_brand_protocol.py +0 -0
  480. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_cli_logging.py +0 -0
  481. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_complete_pipeline.py +0 -0
  482. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_converter_lifecycle.py +0 -0
  483. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_document_envelope.py +0 -0
  484. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_export_image_names.py +0 -0
  485. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_format_matrix.py +0 -0
  486. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_geometry_api.py +0 -0
  487. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_history_geometry_tools.py +0 -0
  488. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_html_namespace.py +0 -0
  489. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_mixed_font_script_reference.py +0 -0
  490. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_pdf_analysis_api.py +0 -0
  491. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_pdf_cpu_evidence.py +0 -0
  492. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_pdf_font_geometry.py +0 -0
  493. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_pdf_font_runtime.py +0 -0
  494. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_pdf_model_text_normalization.py +0 -0
  495. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_pdf_numeric_citations.py +0 -0
  496. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_pdf_output_text.py +0 -0
  497. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_pdf_render_pool.py +0 -0
  498. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_pdf_source_row_merging.py +0 -0
  499. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_pdf_symbol_normalization.py +0 -0
  500. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_public_export_api.py +0 -0
  501. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_public_image_api.py +0 -0
  502. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_public_pipeline.py +0 -0
  503. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_refactor_raster.py +0 -0
  504. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_refactor_rendering.py +0 -0
  505. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_refactor_resources.py +0 -0
  506. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_release_ci_gate.py +0 -0
  507. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_render_ownership.py +0 -0
  508. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_renderer_branding.py +0 -0
  509. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_shared_boundaries.py +0 -0
  510. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_system_font_pdf_pipeline.py +0 -0
  511. {docvortex-0.4.20 → docvortex-0.4.22}/tests/test_validated_geometry.py +0 -0
  512. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
  513. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_epub_test_utils.py +0 -0
  514. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_flash_pdf_test_utils.py +0 -0
  515. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_legacy_doc_test_utils.py +0 -0
  516. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
  517. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_legacy_xls_test_utils.py +0 -0
  518. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_metafile_test_utils.py +0 -0
  519. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_mtef_test_utils.py +0 -0
  520. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_mtef_v5_test_utils.py +0 -0
  521. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_native_test_utils.py +0 -0
  522. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_odf_test_utils.py +0 -0
  523. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_ofd_test_utils.py +0 -0
  524. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
  525. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
  526. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/_span_test_utils.py +0 -0
  527. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
  528. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
  529. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
  530. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
  531. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
  532. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
  533. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
  534. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
  535. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
  536. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
  537. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
  538. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
  539. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
  540. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
  541. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
  542. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
  543. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
  544. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
  545. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
  546. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
  547. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
  548. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
  549. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
  550. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
  551. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
  552. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
  553. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
  554. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
  555. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
  556. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/numeric_citations_introduction.pdf +0 -0
  557. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/pdfs/test.pdf +0 -0
  558. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_backend_architecture.py +0 -0
  559. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_backend_block_object_regressions.py +0 -0
  560. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_docx_assets.py +0 -0
  561. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_docx_complex_fields.py +0 -0
  562. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_docx_math.py +0 -0
  563. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_docx_render.py +0 -0
  564. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_docx_table.py +0 -0
  565. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_emfplus_integration.py +0 -0
  566. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_epub_backlinks.py +0 -0
  567. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_epub_quoted_note_types.py +0 -0
  568. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_epub_render.py +0 -0
  569. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
  570. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_csv.py +0 -0
  571. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_docx_equationxml.py +0 -0
  572. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_epub.py +0 -0
  573. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_html.py +0 -0
  574. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
  575. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_legacy_doc.py +0 -0
  576. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
  577. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_legacy_ppt.py +0 -0
  578. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_legacy_xls.py +0 -0
  579. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
  580. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_manual_annotations.py +0 -0
  581. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_markup_anchors.py +0 -0
  582. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_model.py +0 -0
  583. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_mtef_v5.py +0 -0
  584. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_odf.py +0 -0
  585. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_ofd.py +0 -0
  586. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_office_image_mtef.py +0 -0
  587. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_office_metafile.py +0 -0
  588. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_office_models.py +0 -0
  589. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
  590. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
  591. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_office_title_types.py +0 -0
  592. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
  593. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
  594. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
  595. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
  596. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
  597. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
  598. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_extractor.py +0 -0
  599. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_formulas.py +0 -0
  600. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_graphics.py +0 -0
  601. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
  602. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
  603. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
  604. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_native_text.py +0 -0
  605. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
  606. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
  607. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_samples.py +0 -0
  608. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_scripts.py +0 -0
  609. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_semantics.py +0 -0
  610. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_short_tails.py +0 -0
  611. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
  612. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
  613. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_titles.py +0 -0
  614. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
  615. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_round2_annotations.py +0 -0
  616. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_round3_annotations.py +0 -0
  617. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_rtf.py +0 -0
  618. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_rule_generalization.py +0 -0
  619. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_shared_helpers.py +0 -0
  620. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_spatial_evidence.py +0 -0
  621. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
  622. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_guess_suffix_ole2.py +0 -0
  623. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_html_css_build.py +0 -0
  624. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_html_render.py +0 -0
  625. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_html_security.py +0 -0
  626. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
  627. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_latex_render.py +0 -0
  628. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_markdown_render.py +0 -0
  629. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_middle_json_block_models.py +0 -0
  630. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_middle_json_export.py +0 -0
  631. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_middle_json_validator.py +0 -0
  632. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_model_json.py +0 -0
  633. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_native_pdf_table.py +0 -0
  634. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
  635. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
  636. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
  637. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
  638. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
  639. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_ofd_assembly.py +0 -0
  640. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_ofd_vector_tables.py +0 -0
  641. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_office_demo_exports.py +0 -0
  642. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_office_demo_pages.py +0 -0
  643. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_office_parser_regressions.py +0 -0
  644. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_cjk_style.py +0 -0
  645. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
  646. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_classify.py +0 -0
  647. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_demo_links.py +0 -0
  648. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
  649. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_document.py +0 -0
  650. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_formula_layout.py +0 -0
  651. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_object_clipping.py +0 -0
  652. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_original_layout.py +0 -0
  653. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_pagination.py +0 -0
  654. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
  655. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_render.py +0 -0
  656. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
  657. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_structured_tables.py +0 -0
  658. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_table_cache.py +0 -0
  659. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_table_round2.py +0 -0
  660. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_text_dedup.py +0 -0
  661. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_text_styles.py +0 -0
  662. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_title_font_plan.py +0 -0
  663. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_title_space.py +0 -0
  664. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_pdf_visualization.py +0 -0
  665. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_postprocess_page_blocks.py +0 -0
  666. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_postprocess_pages.py +0 -0
  667. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_postprocess_paragraphs.py +0 -0
  668. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_postprocess_visual.py +0 -0
  669. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_render_api.py +0 -0
  670. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_render_html_table.py +0 -0
  671. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_render_image_renderer.py +0 -0
  672. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_render_list_index_utils.py +0 -0
  673. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_structured_content_render.py +0 -0
  674. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_svg_raster.py +0 -0
  675. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_table_merge.py +0 -0
  676. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_table_merge_cell_merge.py +0 -0
  677. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_text_block_anchor.py +0 -0
  678. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_text_boundary_rules.py +0 -0
  679. {docvortex-0.4.20 → docvortex-0.4.22}/tests/unittest/test_text_utils.py +0 -0
  680. {docvortex-0.4.20 → docvortex-0.4.22}/tools/__init__.py +0 -0
  681. {docvortex-0.4.20 → docvortex-0.4.22}/tools/build_html_css.py +0 -0
  682. {docvortex-0.4.20 → docvortex-0.4.22}/tools/calibrate_pdf_geometry.py +0 -0
  683. {docvortex-0.4.20 → docvortex-0.4.22}/tools/capture_baseline.py +0 -0
  684. {docvortex-0.4.20 → docvortex-0.4.22}/tools/capture_platform_layout.py +0 -0
  685. {docvortex-0.4.20 → docvortex-0.4.22}/tools/compare_font_platforms.py +0 -0
  686. {docvortex-0.4.20 → docvortex-0.4.22}/tools/font_geometry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.20
3
+ Version: 0.4.22
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
@@ -185,7 +185,8 @@ class _DocxTables:
185
185
  """提取与 Mammoth 渲染规则一致的 XML 表格轻量签名。
186
186
 
187
187
  按文档顺序收集 w:t 及特殊字符元素,并且只处理 WordprocessingML
188
- 命名空间,以排除 Mammoth 不渲染的 OMML m:t 公式文本。
188
+ 命名空间,以排除 Mammoth 不渲染的 OMML m:t 公式文本。纵向合并的
189
+ continuation 单元格会被 Mammoth 折叠掉,因此其整个子树也不参与文本签名。
189
190
  """
190
191
  w_ns = _DocxConstants._BLIP_NAMESPACES["w"]
191
192
  char_tags = (
@@ -194,7 +195,22 @@ class _DocxTables:
194
195
  f"{{{w_ns}}}softHyphen",
195
196
  f"{{{w_ns}}}sym",
196
197
  )
197
- text = "".join(_DocxTables._xml_table_char_fragment(node) for node in xml_table.iter() if node.tag in char_tags)
198
+ continuation_nodes = set()
199
+ for cell in xml_table.iter(f"{{{w_ns}}}tc"):
200
+ properties = cell.find(f"{{{w_ns}}}tcPr")
201
+ vmerge = properties.find(f"{{{w_ns}}}vMerge") if properties is not None else None
202
+ if vmerge is None:
203
+ continue
204
+ # Mammoth 将缺少 val 或 val=continue 的单元格视为 continuation,
205
+ # 并在计算 rowspan 时丢弃该单元格的全部内容。
206
+ if vmerge.get(f"{{{w_ns}}}val") in (None, "continue"):
207
+ continuation_nodes.update(cell.iter())
208
+
209
+ text = "".join(
210
+ _DocxTables._xml_table_char_fragment(node)
211
+ for node in xml_table.iter()
212
+ if node not in continuation_nodes and node.tag in char_tags
213
+ )
198
214
  return {
199
215
  "row_count": len(xml_table.xpath('.//*[local-name()="tr"]')),
200
216
  "cell_count": len(xml_table.xpath('.//*[local-name()="tc"]')),
@@ -10,7 +10,7 @@ import struct
10
10
  from loguru import logger
11
11
 
12
12
  from ..errors import LegacyOfficeResourceLimitError
13
- from ..limits import MAX_ASSET_TOTAL_BYTES, MAX_ENTRY_BYTES, MAX_PICTURE_RECORDS
13
+ from ..limits import MAX_ENTRY_BYTES, MAX_EQUATION_CANDIDATE_TOTAL_BYTES, MAX_PICTURE_RECORDS, MAX_RECORDS
14
14
  from .mtef import decode_mtef
15
15
 
16
16
  _PLACEABLE_WMF_MAGIC = b"\xd7\xcd\xc6\x9a"
@@ -271,14 +271,18 @@ def _wmf_mtef_candidates(image_data: bytes) -> tuple[list[bytes], bool]:
271
271
  def _gif_subblocks(
272
272
  image_data: bytes,
273
273
  cursor: int,
274
- counter: list[int],
275
- ) -> tuple[bytes, int]:
276
- """读取以零长度块终止的 GIF sub-block 序列。"""
274
+ *,
275
+ collect_payload: bool,
276
+ subblock_counter: list[int],
277
+ ) -> tuple[bytes | None, int]:
278
+ """读取 GIF sub-block 序列;仅对已识别的公式扩展保留 payload。"""
277
279
 
278
280
  chunks: list[bytes] = []
279
281
  total = 0
280
282
  while True:
281
- _charge_picture_record(counter)
283
+ subblock_counter[0] += 1
284
+ if subblock_counter[0] > MAX_RECORDS:
285
+ raise LegacyOfficeResourceLimitError(f"GIF sub-block count exceeds max_records={MAX_RECORDS}")
282
286
  if cursor >= len(image_data):
283
287
  raise _ImageEquationError("GIF sub-block length is truncated")
284
288
  size = image_data[cursor]
@@ -290,8 +294,9 @@ def _gif_subblocks(
290
294
  raise _ImageEquationError("GIF sub-block data is truncated")
291
295
  total += size
292
296
  if total > MAX_ENTRY_BYTES:
293
- raise LegacyOfficeResourceLimitError(f"GIF extension exceeds max_entry_bytes={MAX_ENTRY_BYTES}")
294
- chunks.append(image_data[cursor:end])
297
+ raise LegacyOfficeResourceLimitError(f"GIF sub-block payload exceeds max_entry_bytes={MAX_ENTRY_BYTES}")
298
+ if collect_payload:
299
+ chunks.append(image_data[cursor:end])
295
300
  cursor = end
296
301
 
297
302
 
@@ -310,6 +315,7 @@ def _gif_mtef_candidates(image_data: bytes) -> tuple[list[bytes], bool]:
310
315
  candidates: list[bytes] = []
311
316
  recognized = False
312
317
  counter = [0]
318
+ subblock_counter = [0]
313
319
  saw_trailer = False
314
320
  while cursor < len(image_data):
315
321
  _charge_picture_record(counter)
@@ -328,7 +334,12 @@ def _gif_mtef_candidates(image_data: bytes) -> tuple[list[bytes], bool]:
328
334
  if cursor >= len(image_data):
329
335
  raise _ImageEquationError("GIF image data is truncated")
330
336
  cursor += 1 # LZW minimum code size
331
- _image_payload, cursor = _gif_subblocks(image_data, cursor, counter)
337
+ _image_payload, cursor = _gif_subblocks(
338
+ image_data,
339
+ cursor,
340
+ collect_payload=False,
341
+ subblock_counter=subblock_counter,
342
+ )
332
343
  continue
333
344
  if marker != 0x21:
334
345
  raise _ImageEquationError("GIF block marker is invalid")
@@ -337,7 +348,12 @@ def _gif_mtef_candidates(image_data: bytes) -> tuple[list[bytes], bool]:
337
348
  extension_label = image_data[cursor]
338
349
  cursor += 1
339
350
  if extension_label != 0xFF:
340
- _payload, cursor = _gif_subblocks(image_data, cursor, counter)
351
+ _payload, cursor = _gif_subblocks(
352
+ image_data,
353
+ cursor,
354
+ collect_payload=False,
355
+ subblock_counter=subblock_counter,
356
+ )
341
357
  continue
342
358
  if cursor >= len(image_data):
343
359
  raise _ImageEquationError("GIF application block size is truncated")
@@ -348,12 +364,24 @@ def _gif_mtef_candidates(image_data: bytes) -> tuple[list[bytes], bool]:
348
364
  raise _ImageEquationError("GIF application identifier is truncated")
349
365
  application = image_data[cursor:application_end]
350
366
  cursor = application_end
351
- payload, cursor = _gif_subblocks(image_data, cursor, counter)
352
367
  if application_size != 11:
368
+ _payload, cursor = _gif_subblocks(
369
+ image_data,
370
+ cursor,
371
+ collect_payload=False,
372
+ subblock_counter=subblock_counter,
373
+ )
353
374
  continue
354
375
  application_id = application[:8]
355
376
  authentication = application[8:11]
356
- if application_id == b"MathType" and authentication == b"001":
377
+ is_mathtype = application_id == b"MathType" and authentication == b"001"
378
+ payload, cursor = _gif_subblocks(
379
+ image_data,
380
+ cursor,
381
+ collect_payload=is_mathtype,
382
+ subblock_counter=subblock_counter,
383
+ )
384
+ if is_mathtype and payload is not None:
357
385
  recognized = True
358
386
  candidates.append(payload)
359
387
  # MathType/002 是 baseline,必须明确忽略。
@@ -406,6 +434,12 @@ class OfficeImageEquationDecoder:
406
434
  _cache: dict[tuple[str, bytes], str | None] = field(default_factory=dict)
407
435
  _warned: set[tuple[str, bytes]] = field(default_factory=set)
408
436
 
437
+ @property
438
+ def candidate_total_bytes(self) -> int:
439
+ """返回已计入预算的公式 candidate 总字节数。"""
440
+
441
+ return self.total_bytes
442
+
409
443
  def decode(
410
444
  self,
411
445
  image_data: object | None,
@@ -421,23 +455,23 @@ class OfficeImageEquationDecoder:
421
455
  if image_format is None:
422
456
  return None
423
457
  if len(image_data) > MAX_ENTRY_BYTES:
424
- raise LegacyOfficeResourceLimitError(f"image equation payload exceeds max_entry_bytes={MAX_ENTRY_BYTES}")
458
+ raise LegacyOfficeResourceLimitError(f"office image exceeds max_entry_bytes={MAX_ENTRY_BYTES}")
425
459
  digest = hashlib.sha256(image_data).digest()
426
460
  cache_key = (image_format, digest)
427
461
  if cache_key in self._cache:
428
462
  return self._cache[cache_key]
429
- if self.total_bytes + len(image_data) > MAX_ASSET_TOTAL_BYTES:
430
- raise LegacyOfficeResourceLimitError(
431
- f"image equation payloads exceed max_asset_total_bytes={MAX_ASSET_TOTAL_BYTES}"
432
- )
433
- self.total_bytes += len(image_data)
434
-
435
463
  recognized = False
436
464
  try:
437
465
  if image_format == "wmf":
438
466
  candidates, recognized = _wmf_mtef_candidates(image_data)
439
467
  else:
440
468
  candidates, recognized = _gif_mtef_candidates(image_data)
469
+ candidate_bytes = sum(len(candidate) for candidate in candidates)
470
+ if self.total_bytes + candidate_bytes > MAX_EQUATION_CANDIDATE_TOTAL_BYTES:
471
+ raise LegacyOfficeResourceLimitError(
472
+ f"image equation candidates exceed max_equation_candidate_total_bytes={MAX_EQUATION_CANDIDATE_TOTAL_BYTES}"
473
+ )
474
+ self.total_bytes += candidate_bytes
441
475
  latex = _select_candidate_latex(candidates)
442
476
  except LegacyOfficeResourceLimitError:
443
477
  raise
@@ -5,6 +5,8 @@ from typing import Final
5
5
  MAX_ENTRY_BYTES: Final = 128 * 1024 * 1024
6
6
  MAX_TOTAL_BYTES: Final = 512 * 1024 * 1024
7
7
  MAX_ASSET_TOTAL_BYTES: Final = 128 * 1024 * 1024
8
+ # 公式探测单独计费,避免普通图片耗尽嵌入素材预算;初始值与素材预算保持一致。
9
+ MAX_EQUATION_CANDIDATE_TOTAL_BYTES: Final = 128 * 1024 * 1024
8
10
  MAX_GRID_SLOTS: Final = 4_000_000
9
11
  MAX_RECORD_DEPTH: Final = 64
10
12
  MAX_RECORDS: Final = 16_000_000
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  from io import BytesIO
6
6
  from datetime import datetime, timezone
7
7
  import posixpath
8
+ from pathlib import Path
8
9
  from zipfile import ZipFile
9
10
 
10
11
  import lxml.etree as etree
@@ -12,7 +13,7 @@ import lxml.etree as etree
12
13
  from ....document.properties import property_count, property_date, property_text, property_values
13
14
  from ....errors import DocumentError
14
15
  from ....schema import DocumentProperties
15
- from .limits import MAX_ENTRY_BYTES, MAX_TOTAL_BYTES
16
+ from .limits import MAX_ENTRY_BYTES
16
17
 
17
18
  _DC = "{http://purl.org/dc/elements/1.1/}"
18
19
  _DCT = "{http://purl.org/dc/terms/}"
@@ -43,14 +44,15 @@ def _element_value(root: etree._Element | None, tag: str) -> str | None:
43
44
  return None
44
45
 
45
46
 
46
- def read_ooxml_properties(data: bytes, suffix: str) -> tuple[DocumentProperties, list[str]]:
47
+ def read_ooxml_properties(data: bytes | str | Path, suffix: str) -> tuple[DocumentProperties, list[str]]:
47
48
  """读取 OOXML 核心属性和结构计数,坏的可选属性不阻止其他读取。"""
48
49
  properties = DocumentProperties()
49
50
  warnings: list[str] = []
50
- with ZipFile(BytesIO(data)) as package:
51
+ package_source = BytesIO(data) if isinstance(data, bytes) else data
52
+ with ZipFile(package_source) as package:
51
53
  infos = package.infolist()
52
- if len(infos) > 100_000 or sum(info.file_size for info in infos) > MAX_TOTAL_BYTES:
53
- raise DocumentError("resource_limit", "OOXML metadata package exceeds resource limits")
54
+ if len(infos) > 100_000:
55
+ raise DocumentError("resource_limit", "OOXML metadata package has too many members")
54
56
  if len({info.filename for info in infos}) != len(infos):
55
57
  raise DocumentError("open_failed", "Duplicate OOXML package members")
56
58
  if _xml_part(package, "[Content_Types].xml") is None:
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from collections.abc import Iterable, Iterator, MutableSet
5
6
  from dataclasses import dataclass, field
6
7
  from typing import TYPE_CHECKING, Any, Literal
7
8
 
@@ -13,6 +14,102 @@ if TYPE_CHECKING:
13
14
  from .inline.types import PDFTextScriptLine
14
15
 
15
16
 
17
+ class _SharedLineIndexSet(MutableSet[int]):
18
+ """共享只读基底,仅为单个候选记录增删差集,避免复制大型行号集合。"""
19
+
20
+ __slots__ = ("base", "added", "removed")
21
+
22
+ def __init__(
23
+ self,
24
+ base: frozenset[int],
25
+ values: Iterable[int] = (),
26
+ ) -> None:
27
+ """以共享基底和候选已有成员初始化集合。"""
28
+
29
+ self.base = base
30
+ self.removed: set[int] = set()
31
+ if isinstance(values, _SharedLineIndexSet) and values.base is base:
32
+ # 与共享基底求并集时,基底成员天然全部可见,只需保留额外成员。
33
+ self.added = set(values.added)
34
+ elif isinstance(values, (set, frozenset)):
35
+ self.added = values.difference(base)
36
+ else:
37
+ self.added = {value for value in values if value not in base}
38
+
39
+ @classmethod
40
+ def from_exact_values(
41
+ cls,
42
+ base: frozenset[int],
43
+ values: Iterable[int],
44
+ ) -> _SharedLineIndexSet:
45
+ """以共享基底精确表示给定集合,而不是默认并入全部基底成员。"""
46
+
47
+ visible = set(values)
48
+ instance = cls.__new__(cls)
49
+ instance.base = base
50
+ instance.added = visible.difference(base)
51
+ instance.removed = set(base.difference(visible))
52
+ return instance
53
+
54
+ def __contains__(self, value: object) -> bool:
55
+ """按基底、删除集和新增集判断成员是否可见。"""
56
+
57
+ if value in self.added:
58
+ return True
59
+ return value in self.base and value not in self.removed
60
+
61
+ def __iter__(self) -> Iterator[int]:
62
+ """迭代当前可见成员,不展开持久化副本。"""
63
+
64
+ for value in self.base:
65
+ if value not in self.removed:
66
+ yield value
67
+ yield from self.added
68
+
69
+ def __len__(self) -> int:
70
+ """返回当前可见成员数量。"""
71
+
72
+ return len(self.base) - len(self.removed) + len(self.added)
73
+
74
+ def add(self, value: int) -> None:
75
+ """加入成员;基底已有成员只需撤销删除标记。"""
76
+
77
+ if value in self.base:
78
+ self.removed.discard(value)
79
+ return
80
+ self.added.add(value)
81
+
82
+ def discard(self, value: int) -> None:
83
+ """删除成员;基底成员以差集标记表示。"""
84
+
85
+ if value in self.added:
86
+ self.added.discard(value)
87
+ return
88
+ if value in self.base:
89
+ self.removed.add(value)
90
+
91
+ def update(self, values: Iterable[int]) -> None:
92
+ """并入成员;同共享基底的候选直接合并差集。"""
93
+
94
+ if isinstance(values, _SharedLineIndexSet) and values.base is self.base:
95
+ self.removed.intersection_update(values.removed)
96
+ for value in values.added:
97
+ self.add(value)
98
+ return
99
+ for value in values:
100
+ self.add(value)
101
+
102
+ def difference_update(self, values: Iterable[int]) -> None:
103
+ """移除给定成员,并保持共享基底不变。"""
104
+
105
+ if isinstance(values, (set, frozenset)):
106
+ self.added.difference_update(values)
107
+ self.removed.update(self.base.intersection(values))
108
+ return
109
+ for value in values:
110
+ self.discard(value)
111
+
112
+
16
113
  @dataclass(slots=True)
17
114
  class _LineItem:
18
115
  """保存单个可视文本行及其 source/ink/canonical 几何。"""
@@ -122,7 +219,7 @@ class _TableCandidate:
122
219
  angle: int
123
220
  score: float
124
221
  core_bbox: BBox | None = None
125
- line_indices: set[int] = field(default_factory=set)
222
+ line_indices: MutableSet[int] = field(default_factory=set)
126
223
  annotations: list[_TableAnnotation] = field(default_factory=list)
127
224
 
128
225
 
@@ -6,6 +6,7 @@ import math
6
6
  import re
7
7
  import statistics
8
8
  import unicodedata
9
+ from bisect import bisect_left, bisect_right
9
10
  from collections import Counter
10
11
  from dataclasses import dataclass
11
12
  from typing import Any, Literal, Mapping, Sequence
@@ -818,12 +819,58 @@ def _merge_native_inline_scripts(
818
819
  reference_markers = [_INLINE_REFERENCE_MARKER_RE.fullmatch(text) is not None for text in compact_texts]
819
820
  local_bboxes = [_rotate_bbox_to_upright(line.bbox, page_size, line.angle) for line in lines]
820
821
  canonical_scales = [_native_typographic_scale(line) for line in lines]
822
+
823
+ # 上下标只能贴近主体行的左右边缘。按文本方向分别建立左右边缘索引,
824
+ # 先取可能相邻的安全超集,再复用下面完整判定,避免密集表格页做 O(n²) 全配对。
825
+ left_edge_index: dict[int, list[tuple[float, int]]] = {}
826
+ right_edge_index: dict[int, list[tuple[float, int]]] = {}
827
+ maximum_scale_by_angle: dict[int, float] = {}
828
+ for line_index, line in enumerate(lines):
829
+ left_edge_index.setdefault(line.angle, []).append((local_bboxes[line_index][0], line_index))
830
+ right_edge_index.setdefault(line.angle, []).append((local_bboxes[line_index][2], line_index))
831
+ maximum_scale_by_angle[line.angle] = max(
832
+ maximum_scale_by_angle.get(line.angle, 0.1),
833
+ canonical_scales[line_index],
834
+ max(0.1, line.effective_height),
835
+ )
836
+ for index in (left_edge_index, right_edge_index):
837
+ for values in index.values():
838
+ values.sort(key=lambda item: (item[0], item[1]))
839
+ left_edge_positions = {angle: [value for value, _index in values] for angle, values in left_edge_index.items()}
840
+ right_edge_positions = {angle: [value for value, _index in values] for angle, values in right_edge_index.items()}
841
+
821
842
  for small_index, small in enumerate(lines):
822
843
  compact_text = compact_texts[small_index]
823
844
  if not compact_text:
824
845
  continue
825
846
  small_local_bbox = local_bboxes[small_index]
826
- for base_index, base in enumerate(lines):
847
+ maximum_base_scale = maximum_scale_by_angle.get(small.angle, 0.1)
848
+ overlap_padding = 0.35 * maximum_base_scale
849
+ gap_padding = max(1.5, 0.35 * maximum_base_scale)
850
+
851
+ left_values = left_edge_index.get(small.angle, [])
852
+ left_positions = left_edge_positions.get(small.angle, [])
853
+ right_values = right_edge_index.get(small.angle, [])
854
+ right_positions = right_edge_positions.get(small.angle, [])
855
+ candidate_base_indices = {
856
+ index
857
+ for _value, index in left_values[
858
+ bisect_left(left_positions, small_local_bbox[2] - overlap_padding) : bisect_right(
859
+ left_positions, small_local_bbox[2] + gap_padding
860
+ )
861
+ ]
862
+ }
863
+ candidate_base_indices.update(
864
+ index
865
+ for _value, index in right_values[
866
+ bisect_left(right_positions, small_local_bbox[0] - gap_padding) : bisect_right(
867
+ right_positions, small_local_bbox[0] + overlap_padding
868
+ )
869
+ ]
870
+ )
871
+
872
+ for base_index in sorted(candidate_base_indices):
873
+ base = lines[base_index]
827
874
  if small_index == base_index or small.angle != base.angle or small.visual_row_id == base.visual_row_id:
828
875
  continue
829
876
  if small.effective_height <= 0 or base.effective_height <= 0: