docvortex 0.4.16__tar.gz → 0.4.18__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 (679) hide show
  1. {docvortex-0.4.16/src/docvortex.egg-info → docvortex-0.4.18}/PKG-INFO +1 -1
  2. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +5 -4
  3. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/line_layout.py +54 -67
  4. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/html/renderer.py +5 -5
  5. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/version.py +1 -1
  6. {docvortex-0.4.16 → docvortex-0.4.18/src/docvortex.egg-info}/PKG-INFO +1 -1
  7. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex.egg-info/SOURCES.txt +1 -0
  8. docvortex-0.4.18/tests/unittest/test_flash_pdf_short_tails.py +184 -0
  9. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_spreadsheet_projector.py +70 -0
  10. {docvortex-0.4.16 → docvortex-0.4.18}/LICENSE.md +0 -0
  11. {docvortex-0.4.16 → docvortex-0.4.18}/MANIFEST.in +0 -0
  12. {docvortex-0.4.16 → docvortex-0.4.18}/README.md +0 -0
  13. {docvortex-0.4.16 → docvortex-0.4.18}/demo/README.md +0 -0
  14. {docvortex-0.4.16 → docvortex-0.4.18}/demo/demo.py +0 -0
  15. {docvortex-0.4.16 → docvortex-0.4.18}/demo/office_docs/README.md +0 -0
  16. {docvortex-0.4.16 → docvortex-0.4.18}/demo/office_docs/docx_01.doc +0 -0
  17. {docvortex-0.4.16 → docvortex-0.4.18}/demo/office_docs/docx_01.docx +0 -0
  18. {docvortex-0.4.16 → docvortex-0.4.18}/demo/office_docs/pptx_01.ppt +0 -0
  19. {docvortex-0.4.16 → docvortex-0.4.18}/demo/office_docs/pptx_01.pptx +0 -0
  20. {docvortex-0.4.16 → docvortex-0.4.18}/demo/office_docs/rtf_01.rtf +0 -0
  21. {docvortex-0.4.16 → docvortex-0.4.18}/demo/office_docs/xlsx_01.xls +0 -0
  22. {docvortex-0.4.16 → docvortex-0.4.18}/demo/office_docs/xlsx_01.xlsx +0 -0
  23. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
  24. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
  25. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/caibao1.pdf +0 -0
  26. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/demo1.pdf +0 -0
  27. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/demo2.pdf +0 -0
  28. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/demo3.pdf +0 -0
  29. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/demo4.pdf +0 -0
  30. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/demo6.pdf +0 -0
  31. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
  32. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
  33. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
  34. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
  35. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs/small_ocr.pdf +0 -0
  36. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
  37. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
  38. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
  39. {docvortex-0.4.16 → docvortex-0.4.18}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
  40. {docvortex-0.4.16 → docvortex-0.4.18}/docs/HTML_PROTOCOL.md +0 -0
  41. {docvortex-0.4.16 → docvortex-0.4.18}/docs/JSON_PROTOCOL.md +0 -0
  42. {docvortex-0.4.16 → docvortex-0.4.18}/docs/METADATA.md +0 -0
  43. {docvortex-0.4.16 → docvortex-0.4.18}/docs/PDF_FONTS.md +0 -0
  44. {docvortex-0.4.16 → docvortex-0.4.18}/docs/RENDER_OWNERSHIP.md +0 -0
  45. {docvortex-0.4.16 → docvortex-0.4.18}/docs/USAGE.md +0 -0
  46. {docvortex-0.4.16 → docvortex-0.4.18}/docs/flash-manual-annotations-2026-09-15.md +0 -0
  47. {docvortex-0.4.16 → docvortex-0.4.18}/docs/flash-round2-annotations-2026-09-15.md +0 -0
  48. {docvortex-0.4.16 → docvortex-0.4.18}/docs/flash-rule-generalization-2026-09-15.md +0 -0
  49. {docvortex-0.4.16 → docvortex-0.4.18}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
  50. {docvortex-0.4.16 → docvortex-0.4.18}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
  51. {docvortex-0.4.16 → docvortex-0.4.18}/docs/flash-title-coverage-2026-09-16.md +0 -0
  52. {docvortex-0.4.16 → docvortex-0.4.18}/docs/sdk-0.4.md +0 -0
  53. {docvortex-0.4.16 → docvortex-0.4.18}/pyproject.toml +0 -0
  54. {docvortex-0.4.16 → docvortex-0.4.18}/schemas/middle-2.0.json +0 -0
  55. {docvortex-0.4.16 → docvortex-0.4.18}/schemas/model-2.0.json +0 -0
  56. {docvortex-0.4.16 → docvortex-0.4.18}/setup.cfg +0 -0
  57. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/__init__.py +0 -0
  58. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/__init__.py +0 -0
  59. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/__init__.py +0 -0
  60. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
  61. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
  62. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/_shared/image.py +0 -0
  63. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
  64. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
  65. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
  66. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
  67. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
  68. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
  69. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/_shared/names.py +0 -0
  70. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
  71. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/contracts.py +0 -0
  72. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/csv.py +0 -0
  73. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
  74. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/epub/constants.py +0 -0
  75. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/epub/converter.py +0 -0
  76. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/epub/errors.py +0 -0
  77. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
  78. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/epub/package.py +0 -0
  79. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/epub/properties.py +0 -0
  80. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
  81. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/html/__init__.py +0 -0
  82. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/html/anchors.py +0 -0
  83. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/html/constants.py +0 -0
  84. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/html/converter.py +0 -0
  85. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/html/document.py +0 -0
  86. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/html/errors.py +0 -0
  87. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/html/metadata.py +0 -0
  88. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/html/resources.py +0 -0
  89. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/html/selector.py +0 -0
  90. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/models.py +0 -0
  91. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
  92. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
  93. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
  94. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
  95. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
  96. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
  97. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/images.py +0 -0
  98. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
  99. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/models.py +0 -0
  100. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/package.py +0 -0
  101. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/path.py +0 -0
  102. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
  103. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
  104. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
  105. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/table.py +0 -0
  106. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/text.py +0 -0
  107. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
  108. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/__init__.py +0 -0
  109. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
  110. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
  111. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
  112. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
  113. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
  114. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
  115. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
  116. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
  117. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
  118. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
  119. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
  120. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
  121. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
  122. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
  123. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
  124. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
  125. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
  126. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
  127. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
  128. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
  129. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
  130. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
  131. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
  132. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
  133. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
  134. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
  135. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
  136. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
  137. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
  138. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
  139. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
  140. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
  141. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
  142. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
  143. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/errors.py +0 -0
  144. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/image.py +0 -0
  145. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
  146. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
  147. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
  148. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
  149. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/limits.py +0 -0
  150. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/metadata.py +0 -0
  151. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
  152. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
  153. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
  154. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
  155. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
  156. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
  157. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
  158. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
  159. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/odf/styles.py +0 -0
  160. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/odf/table.py +0 -0
  161. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/odf/text.py +0 -0
  162. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
  163. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/opc.py +0 -0
  164. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
  165. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
  166. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
  167. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
  168. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
  169. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
  170. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
  171. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
  172. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
  173. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
  174. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
  175. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
  176. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
  177. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
  178. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
  179. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
  180. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
  181. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
  182. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
  183. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
  184. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
  185. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
  186. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
  187. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
  188. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
  189. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
  190. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
  191. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/spreadsheet/region_discovery.py +0 -0
  192. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/streams.py +0 -0
  193. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
  194. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
  195. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
  196. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
  197. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
  198. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
  199. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
  200. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
  201. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
  202. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
  203. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
  204. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
  205. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
  206. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
  207. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
  208. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
  209. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
  210. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
  211. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
  212. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
  213. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
  214. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
  215. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
  216. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
  217. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
  218. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
  219. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
  220. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
  221. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
  222. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
  223. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
  224. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
  225. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
  226. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
  227. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
  228. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
  229. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
  230. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
  231. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
  232. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
  233. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
  234. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
  235. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
  236. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
  237. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
  238. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/models.py +0 -0
  239. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
  240. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
  241. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
  242. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
  243. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
  244. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
  245. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
  246. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
  247. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
  248. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
  249. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
  250. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
  251. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
  252. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
  253. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
  254. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
  255. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
  256. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
  257. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
  258. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
  259. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
  260. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
  261. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
  262. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
  263. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
  264. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
  265. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
  266. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
  267. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
  268. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
  269. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
  270. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
  271. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
  272. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
  273. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
  274. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/analyzers/pdf.py +0 -0
  275. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/api.py +0 -0
  276. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/assets/__init__.py +0 -0
  277. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/assets/images.py +0 -0
  278. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/assets/store.py +0 -0
  279. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/cli.py +0 -0
  280. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/codecs/__init__.py +0 -0
  281. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/codecs/html/__init__.py +0 -0
  282. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/codecs/html/contracts.py +0 -0
  283. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/codecs/html/materializer.py +0 -0
  284. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/codecs/html/parser.py +0 -0
  285. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/codecs/html/resources.py +0 -0
  286. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/codecs/json.py +0 -0
  287. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/__init__.py +0 -0
  288. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/inline.py +0 -0
  289. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/links.py +0 -0
  290. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/markup/__init__.py +0 -0
  291. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/markup/anchors.py +0 -0
  292. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/markup/formula.py +0 -0
  293. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/markup/projector.py +0 -0
  294. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/markup/styles.py +0 -0
  295. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/mathml.py +0 -0
  296. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/normalization.py +0 -0
  297. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/spans.py +0 -0
  298. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/table/__init__.py +0 -0
  299. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/table/blocks.py +0 -0
  300. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/table/content.py +0 -0
  301. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/table/document.py +0 -0
  302. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/table/html.py +0 -0
  303. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/table/models.py +0 -0
  304. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/table/rules.py +0 -0
  305. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/table/structure.py +0 -0
  306. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/text.py +0 -0
  307. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/content/tree.py +0 -0
  308. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/__init__.py +0 -0
  309. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/contracts.py +0 -0
  310. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/detection.py +0 -0
  311. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/filetypes.py +0 -0
  312. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/page_range.py +0 -0
  313. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/__init__.py +0 -0
  314. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/_document.py +0 -0
  315. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/classify.py +0 -0
  316. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/constants.py +0 -0
  317. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/font_runtime.py +0 -0
  318. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/images.py +0 -0
  319. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/layout.py +0 -0
  320. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/metadata.py +0 -0
  321. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/native_annotations.py +0 -0
  322. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/native_contracts.py +0 -0
  323. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/native_coordinates.py +0 -0
  324. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
  325. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/native_objects.py +0 -0
  326. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
  327. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/pdfium.py +0 -0
  328. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/raster.py +0 -0
  329. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/text/__init__.py +0 -0
  330. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/text/_contracts.py +0 -0
  331. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/text/dedup.py +0 -0
  332. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/text/extract.py +0 -0
  333. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/text/geometry.py +0 -0
  334. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/text/groups.py +0 -0
  335. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/pdf/visuals.py +0 -0
  336. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/properties.py +0 -0
  337. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/document/source.py +0 -0
  338. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/errors.py +0 -0
  339. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/export/__init__.py +0 -0
  340. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/export/bundle.py +0 -0
  341. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/export/files.py +0 -0
  342. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/export/middle.py +0 -0
  343. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/__init__.py +0 -0
  344. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/_coordinates.py +0 -0
  345. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/_geometry.py +0 -0
  346. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/_hyperlink.py +0 -0
  347. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/_image.py +0 -0
  348. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/_image_operations.py +0 -0
  349. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/_image_payload.py +0 -0
  350. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/_svg_raster.py +0 -0
  351. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/_text.py +0 -0
  352. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/image_encoding.py +0 -0
  353. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/language.py +0 -0
  354. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/type_identity.py +0 -0
  355. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/foundation/xml_names.py +0 -0
  356. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/geometry.py +0 -0
  357. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/metadata.py +0 -0
  358. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/options.py +0 -0
  359. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/postprocess/__init__.py +0 -0
  360. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/postprocess/content.py +0 -0
  361. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/postprocess/document.py +0 -0
  362. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/postprocess/lists.py +0 -0
  363. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/postprocess/page_blocks.py +0 -0
  364. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/postprocess/pages.py +0 -0
  365. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/postprocess/paragraphs.py +0 -0
  366. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/postprocess/visual.py +0 -0
  367. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/public_api.py +0 -0
  368. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/__init__.py +0 -0
  369. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/__init__.py +0 -0
  370. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/common/__init__.py +0 -0
  371. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/common/context.py +0 -0
  372. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/common/html_table.py +0 -0
  373. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/common/index.py +0 -0
  374. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/common/list_items.py +0 -0
  375. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/common/planner.py +0 -0
  376. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/docx/__init__.py +0 -0
  377. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/docx/assets.py +0 -0
  378. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/docx/inline.py +0 -0
  379. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/docx/math.py +0 -0
  380. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/docx/renderer.py +0 -0
  381. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/docx/styles.py +0 -0
  382. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/docx/table.py +0 -0
  383. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/epub/__init__.py +0 -0
  384. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/epub/assets.py +0 -0
  385. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/epub/package.py +0 -0
  386. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/epub/renderer.py +0 -0
  387. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/html/__init__.py +0 -0
  388. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/html/inline.py +0 -0
  389. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
  390. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/html/table.py +0 -0
  391. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/latex/__init__.py +0 -0
  392. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/latex/assets.py +0 -0
  393. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/latex/inline.py +0 -0
  394. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/latex/renderer.py +0 -0
  395. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/latex/table.py +0 -0
  396. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
  397. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/markdown/assets.py +0 -0
  398. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
  399. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
  400. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/markdown/inline.py +0 -0
  401. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
  402. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/markdown/table.py +0 -0
  403. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
  404. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/assets.py +0 -0
  405. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
  406. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
  407. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/formula.py +0 -0
  408. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
  409. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/inline.py +0 -0
  410. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/original.py +0 -0
  411. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
  412. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/paragraph.py +0 -0
  413. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
  414. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/styles.py +0 -0
  415. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/table.py +0 -0
  416. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
  417. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
  418. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
  419. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
  420. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
  421. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/api.py +0 -0
  422. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/contracts.py +0 -0
  423. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/docx.py +0 -0
  424. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/epub.py +0 -0
  425. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/fragments.py +0 -0
  426. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/html.py +0 -0
  427. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/latex.py +0 -0
  428. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/markdown.py +0 -0
  429. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/pdf.py +0 -0
  430. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/render/structured_content.py +0 -0
  431. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/resources/epub/docvortex.css +0 -0
  432. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
  433. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/resources/fonts/NOTICE +0 -0
  434. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/resources/fonts/manifest.json +0 -0
  435. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/resources/html/docvortex.css +0 -0
  436. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/resources/html/docvortex.min.css +0 -0
  437. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
  438. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/result.py +0 -0
  439. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/schema.py +0 -0
  440. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex/visualization.py +0 -0
  441. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex.egg-info/dependency_links.txt +0 -0
  442. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex.egg-info/entry_points.txt +0 -0
  443. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex.egg-info/requires.txt +0 -0
  444. {docvortex-0.4.16 → docvortex-0.4.18}/src/docvortex.egg-info/top_level.txt +0 -0
  445. {docvortex-0.4.16 → docvortex-0.4.18}/tests/benchmarks/flash_pdf.py +0 -0
  446. {docvortex-0.4.16 → docvortex-0.4.18}/tests/benchmarks/native_pdf_table.py +0 -0
  447. {docvortex-0.4.16 → docvortex-0.4.18}/tests/benchmarks/pdf_render.py +0 -0
  448. {docvortex-0.4.16 → docvortex-0.4.18}/tests/benchmarks/pipeline.py +0 -0
  449. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
  450. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_layout_block_expectations.json +0 -0
  451. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
  452. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
  453. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_manual_annotations.json +0 -0
  454. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_manual_review_decisions.json +0 -0
  455. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_reviewed_history.json +0 -0
  456. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_round2_annotations.json +0 -0
  457. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_round2_review_decisions.json +0 -0
  458. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_round3_annotations.json +0 -0
  459. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
  460. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_round3_review_decisions.json +0 -0
  461. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
  462. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
  463. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
  464. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
  465. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
  466. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
  467. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/pdf_char_dedup.json +0 -0
  468. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
  469. {docvortex-0.4.16 → docvortex-0.4.18}/tests/fixtures/rtf/semantic.rtf +0 -0
  470. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_architecture.py +0 -0
  471. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_benchmark_entrypoint.py +0 -0
  472. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_brand_protocol.py +0 -0
  473. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_cli_logging.py +0 -0
  474. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_complete_pipeline.py +0 -0
  475. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_converter_lifecycle.py +0 -0
  476. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_document_envelope.py +0 -0
  477. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_document_metadata.py +0 -0
  478. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_format_matrix.py +0 -0
  479. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_geometry_api.py +0 -0
  480. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_history_geometry_tools.py +0 -0
  481. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_html_namespace.py +0 -0
  482. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_mixed_font_script_reference.py +0 -0
  483. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_pdf_analysis_api.py +0 -0
  484. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_pdf_cpu_evidence.py +0 -0
  485. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_pdf_font_geometry.py +0 -0
  486. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_pdf_font_runtime.py +0 -0
  487. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_pdf_model_text_normalization.py +0 -0
  488. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_pdf_output_text.py +0 -0
  489. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_pdf_render_pool.py +0 -0
  490. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_pdf_source_row_merging.py +0 -0
  491. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_pdf_symbol_normalization.py +0 -0
  492. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_public_export_api.py +0 -0
  493. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_public_image_api.py +0 -0
  494. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_public_pipeline.py +0 -0
  495. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_refactor_raster.py +0 -0
  496. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_refactor_rendering.py +0 -0
  497. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_refactor_resources.py +0 -0
  498. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_release_ci_gate.py +0 -0
  499. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_render_ownership.py +0 -0
  500. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_renderer_branding.py +0 -0
  501. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_shared_boundaries.py +0 -0
  502. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_system_font_pdf_pipeline.py +0 -0
  503. {docvortex-0.4.16 → docvortex-0.4.18}/tests/test_validated_geometry.py +0 -0
  504. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
  505. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_epub_test_utils.py +0 -0
  506. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_flash_pdf_test_utils.py +0 -0
  507. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_image_mtef_test_utils.py +0 -0
  508. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_legacy_doc_test_utils.py +0 -0
  509. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
  510. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_legacy_xls_test_utils.py +0 -0
  511. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_metafile_test_utils.py +0 -0
  512. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_mtef_test_utils.py +0 -0
  513. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_mtef_v5_test_utils.py +0 -0
  514. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_native_test_utils.py +0 -0
  515. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_odf_test_utils.py +0 -0
  516. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_ofd_test_utils.py +0 -0
  517. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
  518. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
  519. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/_span_test_utils.py +0 -0
  520. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
  521. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
  522. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
  523. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
  524. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
  525. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
  526. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
  527. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
  528. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
  529. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
  530. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
  531. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
  532. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
  533. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
  534. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
  535. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
  536. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
  537. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
  538. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
  539. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
  540. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
  541. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
  542. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
  543. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
  544. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
  545. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
  546. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
  547. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
  548. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
  549. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/pdfs/test.pdf +0 -0
  550. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_backend_architecture.py +0 -0
  551. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_backend_block_object_regressions.py +0 -0
  552. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_docx_assets.py +0 -0
  553. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_docx_complex_fields.py +0 -0
  554. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_docx_math.py +0 -0
  555. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_docx_render.py +0 -0
  556. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_docx_special_char_tables.py +0 -0
  557. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_docx_table.py +0 -0
  558. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_emfplus_integration.py +0 -0
  559. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_epub_backlinks.py +0 -0
  560. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_epub_quoted_note_types.py +0 -0
  561. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_epub_render.py +0 -0
  562. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
  563. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_csv.py +0 -0
  564. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_docx_equationxml.py +0 -0
  565. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_epub.py +0 -0
  566. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_html.py +0 -0
  567. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_image_mtef.py +0 -0
  568. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
  569. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_legacy_doc.py +0 -0
  570. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
  571. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_legacy_ppt.py +0 -0
  572. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_legacy_xls.py +0 -0
  573. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
  574. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_manual_annotations.py +0 -0
  575. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_markup_anchors.py +0 -0
  576. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_model.py +0 -0
  577. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_mtef_v5.py +0 -0
  578. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_odf.py +0 -0
  579. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_ofd.py +0 -0
  580. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_office_image_mtef.py +0 -0
  581. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_office_metafile.py +0 -0
  582. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_office_models.py +0 -0
  583. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
  584. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
  585. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_office_title_types.py +0 -0
  586. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
  587. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
  588. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
  589. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
  590. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
  591. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
  592. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_extractor.py +0 -0
  593. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_formulas.py +0 -0
  594. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_graphics.py +0 -0
  595. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
  596. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
  597. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
  598. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_native_text.py +0 -0
  599. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
  600. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
  601. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_samples.py +0 -0
  602. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_scripts.py +0 -0
  603. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_semantics.py +0 -0
  604. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_tables.py +0 -0
  605. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
  606. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
  607. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_titles.py +0 -0
  608. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
  609. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_round2_annotations.py +0 -0
  610. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_round3_annotations.py +0 -0
  611. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_rtf.py +0 -0
  612. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_rule_generalization.py +0 -0
  613. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_shared_helpers.py +0 -0
  614. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_flash_spatial_evidence.py +0 -0
  615. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_guess_suffix_ole2.py +0 -0
  616. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_html_css_build.py +0 -0
  617. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_html_render.py +0 -0
  618. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_html_security.py +0 -0
  619. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
  620. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_latex_render.py +0 -0
  621. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_markdown_render.py +0 -0
  622. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_middle_json_block_models.py +0 -0
  623. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_middle_json_export.py +0 -0
  624. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_middle_json_validator.py +0 -0
  625. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_model_json.py +0 -0
  626. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_native_pdf_table.py +0 -0
  627. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
  628. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
  629. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
  630. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
  631. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
  632. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_ofd_assembly.py +0 -0
  633. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_ofd_vector_tables.py +0 -0
  634. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_office_demo_exports.py +0 -0
  635. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_office_demo_pages.py +0 -0
  636. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_office_parser_regressions.py +0 -0
  637. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_cjk_style.py +0 -0
  638. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
  639. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_classify.py +0 -0
  640. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_demo_links.py +0 -0
  641. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
  642. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_document.py +0 -0
  643. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_formula_layout.py +0 -0
  644. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_object_clipping.py +0 -0
  645. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_original_layout.py +0 -0
  646. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_pagination.py +0 -0
  647. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
  648. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_render.py +0 -0
  649. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
  650. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_structured_tables.py +0 -0
  651. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_table_cache.py +0 -0
  652. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_table_round2.py +0 -0
  653. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_text_dedup.py +0 -0
  654. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_text_styles.py +0 -0
  655. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_title_font_plan.py +0 -0
  656. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_title_space.py +0 -0
  657. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_pdf_visualization.py +0 -0
  658. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_postprocess_page_blocks.py +0 -0
  659. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_postprocess_pages.py +0 -0
  660. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_postprocess_paragraphs.py +0 -0
  661. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_postprocess_visual.py +0 -0
  662. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_render_api.py +0 -0
  663. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_render_html_table.py +0 -0
  664. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_render_image_renderer.py +0 -0
  665. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_render_list_index_utils.py +0 -0
  666. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_structured_content_render.py +0 -0
  667. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_svg_raster.py +0 -0
  668. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_table_merge.py +0 -0
  669. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_table_merge_cell_merge.py +0 -0
  670. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_text_block_anchor.py +0 -0
  671. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_text_boundary_rules.py +0 -0
  672. {docvortex-0.4.16 → docvortex-0.4.18}/tests/unittest/test_text_utils.py +0 -0
  673. {docvortex-0.4.16 → docvortex-0.4.18}/tools/__init__.py +0 -0
  674. {docvortex-0.4.16 → docvortex-0.4.18}/tools/build_html_css.py +0 -0
  675. {docvortex-0.4.16 → docvortex-0.4.18}/tools/calibrate_pdf_geometry.py +0 -0
  676. {docvortex-0.4.16 → docvortex-0.4.18}/tools/capture_baseline.py +0 -0
  677. {docvortex-0.4.16 → docvortex-0.4.18}/tools/capture_platform_layout.py +0 -0
  678. {docvortex-0.4.16 → docvortex-0.4.18}/tools/compare_font_platforms.py +0 -0
  679. {docvortex-0.4.16 → docvortex-0.4.18}/tools/font_geometry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.16
3
+ Version: 0.4.18
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
@@ -708,10 +708,11 @@ class SpreadsheetProjector:
708
708
  if cell.alignment.vertical:
709
709
  style["vertical-align"] = cell.alignment.vertical
710
710
 
711
- if cell.fill and cell.fill.patternType == "solid" and cell.fill.fgColor:
712
- # handle bg color
713
- color = cell.fill.fgColor.rgb
714
- if hasattr(cell.fill.fgColor, "type") and cell.fill.fgColor.type == "rgb" and color:
711
+ # 渐变填充没有 patternType;只提取既有纯色背景,其他填充仍保留内容及其余样式。
712
+ fill = cell.fill
713
+ if getattr(fill, "patternType", None) == "solid" and fill.fgColor:
714
+ color = fill.fgColor.rgb
715
+ if hasattr(fill.fgColor, "type") and fill.fgColor.type == "rgb" and color:
715
716
  if isinstance(color, str) and len(color) == 8:
716
717
  style["background-color"] = "#" + color[2:]
717
718
  return style
@@ -679,78 +679,65 @@ def _reattach_span_lane_continuations(
679
679
  span_lane.lines.sort(key=lambda item: (item[1][1], item[1][0], item[0].source_index))
680
680
 
681
681
 
682
+ def _lane_accepts_short_tail(
683
+ candidate: tuple[_LineItem, BBox],
684
+ lane: _TextLane,
685
+ median_height: float,
686
+ ) -> bool:
687
+ """用同一组前序行证据判断当前栏或其他栏是否能够接纳正文短尾。"""
688
+
689
+ candidate_line, candidate_bbox = candidate
690
+ preceding = [
691
+ item for item in lane.lines if item[0].semantic_type == candidate_line.semantic_type and item[1][1] < candidate_bbox[1]
692
+ ]
693
+ if not preceding:
694
+ return False
695
+ # 同位置前序行按栏内稳定排序取 source_index 较小者,避免后续插入触发排序后改变已用证据。
696
+ previous = max(preceding, key=lambda item: (item[1][1], item[1][0], -item[0].source_index))
697
+ previous_line, previous_bbox = previous
698
+ pair_height = max(
699
+ _line_effective_height(*previous),
700
+ _line_effective_height(*candidate),
701
+ median_height,
702
+ )
703
+ lane_width = max(0.1, lane.right - lane.left)
704
+ if (
705
+ previous_bbox[2] - previous_bbox[0] < 0.65 * lane_width
706
+ or candidate_bbox[2] - candidate_bbox[0] > 0.85 * lane_width
707
+ or candidate_bbox[0] < lane.left - 0.75 * pair_height
708
+ or candidate_bbox[2] > lane.right + 0.75 * pair_height
709
+ or abs(candidate_bbox[0] - previous_bbox[0]) > 0.75 * pair_height
710
+ or not _title_fonts_compatible(previous_line, candidate_line)
711
+ ):
712
+ return False
713
+ gap = _effective_body_text_row_gap(previous, candidate)
714
+ if not -0.25 * pair_height <= gap <= 0.9 * pair_height:
715
+ return False
716
+ if (
717
+ previous_line.visual_row_id is not None
718
+ and candidate_line.visual_row_id is not None
719
+ and not 0 < candidate_line.visual_row_id - previous_line.visual_row_id <= 2
720
+ ):
721
+ return False
722
+ return True
723
+
724
+
682
725
  def _reattach_cross_lane_short_tails(
683
726
  lanes: list[_TextLane],
684
727
  median_height: float,
685
728
  ) -> None:
686
- """把误入另一栏带、但完整落在唯一前序栏内的正文短尾迁回原栏。"""
687
-
688
- while True:
689
- moves: list[
690
- tuple[
691
- float,
692
- _TextLane,
693
- _TextLane,
694
- tuple[_LineItem, BBox],
695
- ]
696
- ] = []
697
- for source_lane in lanes:
698
- for candidate in source_lane.lines:
699
- candidate_line, candidate_bbox = candidate
700
- if candidate_line.semantic_type is not None:
701
- continue
702
- matches: list[tuple[float, _TextLane]] = []
703
- for target_lane in lanes:
704
- if target_lane is source_lane or not target_lane.lines:
705
- continue
706
- preceding = [
707
- item
708
- for item in target_lane.lines
709
- if item[0].semantic_type == candidate_line.semantic_type and item[1][1] < candidate_bbox[1]
710
- ]
711
- if not preceding:
712
- continue
713
- previous = max(
714
- preceding,
715
- key=lambda item: (item[1][1], item[1][0]),
716
- )
717
- previous_line, previous_bbox = previous
718
- pair_height = max(
719
- _line_effective_height(*previous),
720
- _line_effective_height(*candidate),
721
- median_height,
722
- )
723
- lane_width = max(0.1, target_lane.right - target_lane.left)
724
- if (
725
- previous_bbox[2] - previous_bbox[0] < 0.65 * lane_width
726
- or candidate_bbox[2] - candidate_bbox[0] > 0.85 * lane_width
727
- or candidate_bbox[0] < target_lane.left - 0.75 * pair_height
728
- or candidate_bbox[2] > target_lane.right + 0.75 * pair_height
729
- or abs(candidate_bbox[0] - previous_bbox[0]) > 0.75 * pair_height
730
- or not _title_fonts_compatible(previous_line, candidate_line)
731
- ):
732
- continue
733
- gap = _effective_body_text_row_gap(previous, candidate)
734
- if not -0.25 * pair_height <= gap <= 0.9 * pair_height:
735
- continue
736
- if (
737
- previous_line.visual_row_id is not None
738
- and candidate_line.visual_row_id is not None
739
- and not 0 < candidate_line.visual_row_id - previous_line.visual_row_id <= 2
740
- ):
741
- continue
742
- matches.append((max(0.0, gap), target_lane))
743
- if len(matches) == 1:
744
- gap, target_lane = matches[0]
745
- moves.append((candidate_bbox[1] + gap, source_lane, target_lane, candidate))
746
- if not moves:
747
- return
748
- _score, source_lane, target_lane, candidate = min(
749
- moves,
750
- key=lambda item: item[0],
751
- )
752
- if candidate not in source_lane.lines:
729
+ """按前序依赖顺序,把具有唯一栏归属的正文短尾迁回对应栏。"""
730
+
731
+ # 栏边界固定,且匹配只依赖 y0 严格更小的行;先确定上方行后,每行至多迁移一次。
732
+ # 保留原始对象及其来源栏,不能用 source_index 合并或跳过不同的文本行。
733
+ pending = [(lane, candidate) for lane in lanes for candidate in lane.lines if candidate[0].semantic_type is None]
734
+ pending.sort(key=lambda item: (item[1][1][1], item[1][1][0], item[1][0].source_index))
735
+ for source_lane, candidate in pending:
736
+ # 当前栏也必须参与唯一性判断;多个栏均能接纳时保留原位,避免双向迁移。
737
+ matches = [lane for lane in lanes if _lane_accepts_short_tail(candidate, lane, median_height)]
738
+ if len(matches) != 1 or matches[0] is source_lane:
753
739
  continue
740
+ target_lane = matches[0]
754
741
  source_lane.lines.remove(candidate)
755
742
  target_lane.lines.append(candidate)
756
743
  target_lane.lines.sort(
@@ -70,14 +70,14 @@ from ....schema import (
70
70
  )
71
71
 
72
72
  _STYLE_RESOURCE_NAME = "docvortex.min.css"
73
- _MATHJAX_URL = "https://cdn.jsdelivr.net/npm/mathjax@4.1.2/tex-chtml.js"
73
+ _MATHJAX_URL = "https://gcore.jsdelivr.net/npm/mathjax@4.1.2/tex-chtml.js"
74
74
  _MATHJAX_INTEGRITY = "sha384-zAhQQhdaMeHsMProNntGGg6nOUVcfuF9F22C3d1qJ9NZAVzCplXk1X85D2O5iufn"
75
- _PRISM_CORE_URL = "https://cdn.jsdelivr.net/npm/prismjs@1.30.0/components/prism-core.min.js"
75
+ _PRISM_CORE_URL = "https://gcore.jsdelivr.net/npm/prismjs@1.30.0/components/prism-core.min.js"
76
76
  _PRISM_CORE_INTEGRITY = "sha384-zLRFO4dwowZvh8kzutOb5AWhH7f39HeJp+N7PtHF1SQtTBnifRx0AtmvTYs3F4YV"
77
- _PRISM_AUTOLOADER_URL = "https://cdn.jsdelivr.net/npm/prismjs@1.30.0/plugins/autoloader/prism-autoloader.min.js"
77
+ _PRISM_AUTOLOADER_URL = "https://gcore.jsdelivr.net/npm/prismjs@1.30.0/plugins/autoloader/prism-autoloader.min.js"
78
78
  _PRISM_AUTOLOADER_INTEGRITY = "sha384-Uq05+JLko69eOiPr39ta9bh7kld5PKZoU+fF7g0EXTAriEollhZ+DrN8Q/Oi8J2Q"
79
- _PRISM_LANGUAGES_PATH = "https://cdn.jsdelivr.net/npm/prismjs@1.30.0/components/"
80
- _MERMAID_URL = "https://cdn.jsdelivr.net/npm/mermaid@11.16.1/dist/mermaid.min.js"
79
+ _PRISM_LANGUAGES_PATH = "https://gcore.jsdelivr.net/npm/prismjs@1.30.0/components/"
80
+ _MERMAID_URL = "https://gcore.jsdelivr.net/npm/mermaid@11.16.1/dist/mermaid.min.js"
81
81
  _MERMAID_INTEGRITY = "sha384-aBQXj4hK6Jm05i7aQAsUV3bLdSUrHX1BGYfMB0166TtWt/RRaw+h0Eelme9OCOvy"
82
82
  _MERMAID_MAX_TEXT_SIZE = 50_000
83
83
  _MERMAID_FLOWCHART_HEADER_RE = re.compile(
@@ -1,3 +1,3 @@
1
- __version__ = "0.4.16"
1
+ __version__ = "0.4.18"
2
2
 
3
3
  __all__ = ["__version__"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.16
3
+ Version: 0.4.18
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
@@ -567,6 +567,7 @@ tests/unittest/test_flash_pdf_reviewed_history.py
567
567
  tests/unittest/test_flash_pdf_samples.py
568
568
  tests/unittest/test_flash_pdf_scripts.py
569
569
  tests/unittest/test_flash_pdf_semantics.py
570
+ tests/unittest/test_flash_pdf_short_tails.py
570
571
  tests/unittest/test_flash_pdf_tables.py
571
572
  tests/unittest/test_flash_pdf_text_blocks.py
572
573
  tests/unittest/test_flash_pdf_text_visibility.py
@@ -0,0 +1,184 @@
1
+ """覆盖短尾迁移的终止性、唯一归属及前序依赖;死循环反例在可回收子进程内运行。"""
2
+
3
+ from __future__ import annotations
4
+
5
+ import subprocess
6
+ import sys
7
+ from collections import Counter
8
+ from pathlib import Path
9
+
10
+ import pytest
11
+
12
+ from docvortex.analyzers.native.pdf.line_layout import _infer_text_lanes, _reattach_cross_lane_short_tails
13
+ from docvortex.analyzers.native.pdf.models import _LineItem, _TextLane
14
+ from docvortex.schema import BBox
15
+
16
+
17
+ def _line(text: str, bbox: BBox, index: int) -> tuple[_LineItem, BBox]:
18
+ """构造具有明确有效行高的文本行及局部几何。"""
19
+ return _LineItem(text=text, bbox=bbox, angle=0, source_index=index, effective_height=10.0), bbox
20
+
21
+
22
+ def _ambiguous_lanes(offset: float = 0.0, tails: int = 1) -> list[_TextLane]:
23
+ """构造两栏均可接纳的短尾组,并用横向偏移隔离不同组。"""
24
+ first = _TextLane(left=offset, right=offset + 200.0)
25
+ second = _TextLane(left=offset, right=offset + 200.0)
26
+ first.lines.append(_line("first predecessor", (offset + 10, 100, offset + 150, 110), 0))
27
+ second.lines.append(_line("second predecessor", (offset + 10, 100, offset + 150, 110), 1))
28
+ for index in range(tails):
29
+ first.lines.append(_line(f"tail {index}", (offset + 15, 118, offset + 140, 128), index + 2))
30
+ return [first, second]
31
+
32
+
33
+ def _membership(lanes: list[_TextLane]) -> tuple[tuple[int, ...], ...]:
34
+ """按对象身份记录栏内顺序,避免重复文本或 source_index 掩盖丢行。"""
35
+ return tuple(tuple(id(line) for line, _bbox in lane.lines) for lane in lanes)
36
+
37
+
38
+ def _run_and_check_stability(lanes: list[_TextLane]) -> None:
39
+ """验证迁移不丢行、不重复、不改边界,且再次执行保持同一结果。"""
40
+ before = Counter(id(line) for lane in lanes for line, _bbox in lane.lines)
41
+ bounds = [(lane.left, lane.right, lane.is_span) for lane in lanes]
42
+ _reattach_cross_lane_short_tails(lanes, 10.0)
43
+ assert Counter(id(line) for lane in lanes for line, _bbox in lane.lines) == before
44
+ assert [(lane.left, lane.right, lane.is_span) for lane in lanes] == bounds
45
+ settled = _membership(lanes)
46
+ _reattach_cross_lane_short_tails(lanes, 10.0)
47
+ assert _membership(lanes) == settled
48
+
49
+
50
+ def _case_ambiguous_current_lane() -> None:
51
+ """验证当前栏与其他栏同时匹配时保留原位,不发生往返振荡。"""
52
+ lanes = _ambiguous_lanes()
53
+ original = _membership(lanes)
54
+ _run_and_check_stability(lanes)
55
+ assert _membership(lanes) == original
56
+
57
+
58
+ def _case_independent_groups_and_valid_tail() -> None:
59
+ """验证多个独立歧义组不会耗尽轮数或阻止稍后的合法短尾迁回。"""
60
+ lanes = _ambiguous_lanes(tails=8) + _ambiguous_lanes(offset=400.0, tails=8)
61
+ original = _membership(lanes)
62
+ destination = _TextLane(left=810.0, right=1000.0)
63
+ previous = _line("late predecessor", (815, 200, 965, 210), 0)
64
+ tail = _line("late valid tail", (815, 218, 965, 228), 1)
65
+ destination.lines.append(previous)
66
+ lanes[0].lines.append(tail)
67
+ lanes.append(destination)
68
+ _run_and_check_stability(lanes)
69
+ assert _membership(lanes[:-1]) == original
70
+ assert destination.lines == [previous, tail]
71
+
72
+
73
+ def _case_inferred_body_and_span_lanes() -> None:
74
+ """验证正常栏推断生成的正文栏和跨栏栏带不会互相争抢短尾。"""
75
+ geometry = [_line("wide predecessor", (0, 100, 300, 110), 0)]
76
+ for y in (103.0, 140.0, 160.0):
77
+ for x in (0.0, 160.0):
78
+ geometry.append(_line(f"column {x} {y}", (x, y, x + 140, y + 10), len(geometry)))
79
+ tail = _line("tail", (0, 118, 100, 128), len(geometry))
80
+ geometry.append(tail)
81
+ lanes = _infer_text_lanes(geometry, 300.0, 10.0)
82
+ assert len(lanes) == 3
83
+ assert any(lane.is_span for lane in lanes)
84
+ assert tail in lanes[0].lines
85
+ _run_and_check_stability(lanes)
86
+
87
+
88
+ def _case_chained_tails() -> None:
89
+ """验证逆序输入的连续短尾依次迁回,重复 source_index 不会漏掉后续行。"""
90
+ previous = _line("predecessor", (10, 100, 150, 110), 0)
91
+ first = _line("first tail", (10, 118, 150, 128), 1)
92
+ second = _line("second tail", (10, 136, 130, 146), 1)
93
+ source = _TextLane(left=210, right=400, lines=[second, first])
94
+ target = _TextLane(left=0, right=200, lines=[previous])
95
+ _run_and_check_stability([source, target])
96
+ assert source.lines == []
97
+ assert target.lines == [previous, first, second]
98
+
99
+
100
+ def _case_predecessor_changes_membership() -> None:
101
+ """验证先迁移上方行后再判断短尾,不能用最初的栏状态一次性计算所有目标。"""
102
+ anchor = _line("anchor", (0, 100, 200, 110), 0)
103
+ first = _line("first tail", (0, 118, 140, 128), 1)
104
+ second = _line("second tail", (0, 136, 100, 146), 2)
105
+ source = _TextLane(left=0, right=300, lines=[second, first])
106
+ target = _TextLane(left=0, right=200, lines=[anchor])
107
+ _run_and_check_stability([source, target])
108
+ assert source.lines == []
109
+ assert target.lines == [anchor, first, second]
110
+
111
+
112
+ def _case_equal_height_peers() -> None:
113
+ """验证同高度的先处理行不会成为另一个同行片段的前序证据。"""
114
+ anchor = _line("anchor", (10, 100, 150, 110), 0)
115
+ first = _line("first peer", (10, 118, 150, 128), 1)
116
+ second = _line("second peer", (10, 118, 130, 128), 2)
117
+ first[0].visual_row_id = 2
118
+ second[0].visual_row_id = 2
119
+ anchor[0].visual_row_id = 1
120
+ source = _TextLane(left=210, right=400, lines=[second, first])
121
+ target = _TextLane(left=0, right=200, lines=[anchor])
122
+ _run_and_check_stability([source, target])
123
+ assert source.lines == []
124
+ assert target.lines == [anchor, first, second]
125
+
126
+
127
+ def _case_non_unique_or_missing_target() -> None:
128
+ """验证两个其他栏匹配、没有匹配和非正文行均保持原位。"""
129
+ targets = _ambiguous_lanes(tails=0)
130
+ ambiguous = _line("two targets", (15, 118, 140, 128), 2)
131
+ missing = _line("no target", (415, 118, 540, 128), 3)
132
+ title = _line("title", (15, 118, 140, 128), 4)
133
+ title[0].semantic_type = "paragraph_title"
134
+ source = _TextLane(left=600, right=800, lines=[ambiguous, missing, title])
135
+ lanes = [source, *targets]
136
+ original = _membership(lanes)
137
+ _run_and_check_stability(lanes)
138
+ assert _membership(lanes) == original
139
+
140
+
141
+ def _case_same_position_predecessors() -> None:
142
+ """验证同坐标前序行的平局选择不随迁入后排序改变,首次调用即得到稳定归属。"""
143
+ first_anchor = _line("A anchor", (10, 100, 150, 110), 1)
144
+ second_anchor = _line("B anchor", (10, 100, 150, 110), 2)
145
+ first_tail = _line("A tail", (10, 118, 150, 128), 3)
146
+ second_tail = _line("B tail", (10, 118.5, 150, 128.5), 4)
147
+ for item, family in ((first_anchor, "A"), (second_anchor, "B"), (first_tail, "A"), (second_tail, "B")):
148
+ item[0].font_signature = (family, 0)
149
+ item[0].font_coverage = 1.0
150
+ target = _TextLane(left=0, right=200, lines=[second_anchor, first_anchor])
151
+ source = _TextLane(left=300, right=500, lines=[first_tail, second_tail])
152
+ _run_and_check_stability([target, source])
153
+ assert target.lines == [first_anchor, second_anchor, first_tail]
154
+ assert source.lines == [second_tail]
155
+
156
+
157
+ @pytest.mark.parametrize(
158
+ "case",
159
+ [
160
+ "ambiguous_current_lane",
161
+ "independent_groups_and_valid_tail",
162
+ "inferred_body_and_span_lanes",
163
+ "chained_tails",
164
+ "predecessor_changes_membership",
165
+ "equal_height_peers",
166
+ "non_unique_or_missing_target",
167
+ "same_position_predecessors",
168
+ ],
169
+ )
170
+ def test_short_tail_assignment_terminates_and_preserves_members(case: str) -> None:
171
+ """在可强制终止并回收的子进程内检查归属,任何异常通过退出码和标准错误上报。"""
172
+ completed = subprocess.run(
173
+ [sys.executable, str(Path(__file__).resolve()), case],
174
+ capture_output=True,
175
+ text=True,
176
+ encoding="utf-8",
177
+ timeout=20,
178
+ check=False,
179
+ )
180
+ assert completed.returncode == 0, completed.stdout + completed.stderr
181
+
182
+
183
+ if __name__ == "__main__":
184
+ globals()[f"_case_{sys.argv[1]}"]()
@@ -1,13 +1,17 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from io import BytesIO
4
+
3
5
  import pytest
4
6
  from _span_test_utils import inline
5
7
  from bs4 import BeautifulSoup
6
8
  from openpyxl import Workbook
7
9
  from openpyxl.cell.rich_text import CellRichText, TextBlock
8
10
  from openpyxl.cell.text import InlineFont
11
+ from openpyxl.styles import Alignment, Font, GradientFill, PatternFill
9
12
  from openpyxl.worksheet.worksheet import Worksheet
10
13
 
14
+ from docvortex.analyzers.native import XlsxModel
11
15
  from docvortex.analyzers.native.office.spreadsheet.html import render_spreadsheet_table
12
16
  from docvortex.analyzers.native.office.spreadsheet.models import AnchoredBlock, ExcelCell, ExcelTable, SheetImage
13
17
  from docvortex.analyzers.native.office.spreadsheet.projector import SpreadsheetProjector
@@ -17,6 +21,72 @@ from docvortex.analyzers.native.office.xlsx.xlsx_converter import XlsxConverter
17
21
  from docvortex.schema import BlockType
18
22
 
19
23
 
24
+ @pytest.mark.parametrize(
25
+ ("fill", "background"),
26
+ [
27
+ (PatternFill(), None),
28
+ (PatternFill(patternType="solid", fgColor="FF99CCFF"), "#99CCFF"),
29
+ (PatternFill(patternType="darkGrid", fgColor="FF99CCFF"), None),
30
+ (GradientFill(stop=("FFFFFF", "99CCFF")), None),
31
+ (GradientFill(type="path", stop=("FFFFFF", "99CCFF")), None),
32
+ ],
33
+ ids=["none", "solid", "pattern", "linear-gradient", "path-gradient"],
34
+ )
35
+ def test_cell_fill_preserves_content_and_supported_styles(fill: PatternFill | GradientFill, background: str | None) -> None:
36
+ """验证不同填充经过 StyleProxy 后均能提取内容,渐变不影响字体、对齐或纯色支持。"""
37
+ workbook = Workbook()
38
+ sheet = workbook.active
39
+ assert sheet is not None
40
+ sheet["A1"] = 240
41
+ sheet["A1"].fill = fill
42
+ sheet["A1"].font = Font(b=True, i=True, color="FF112233")
43
+ sheet["A1"].alignment = Alignment(horizontal="center", vertical="top")
44
+ styles = SpreadsheetProjector()._extract_cell_style(sheet["A1"])
45
+ expected = {
46
+ "font-weight": "bold",
47
+ "font-style": "italic",
48
+ "color": "#112233",
49
+ "text-align": "center",
50
+ "vertical-align": "top",
51
+ }
52
+ if background is not None:
53
+ expected["background-color"] = background
54
+ assert styles == expected
55
+
56
+ # 单格也会经过样式提取;通过公共入口锁定 issue 中的最小失败路径。
57
+ stream = BytesIO()
58
+ workbook.save(stream)
59
+ pages = XlsxModel().predict(BytesIO(stream.getvalue()))
60
+ assert pages == [[{"type": BlockType.TEXT, "content": inline("240")}]]
61
+
62
+
63
+ def test_xlsx_mixed_fills_preserve_all_sheets_and_merged_cells() -> None:
64
+ """验证两类渐变与纯色混用时仍输出全部工作表、单元格内容和合并跨度。"""
65
+ workbook = Workbook()
66
+ sheet = workbook.active
67
+ assert sheet is not None
68
+ sheet.title = "Mixed"
69
+ sheet.append(["linear", "path", "solid"])
70
+ sheet.append(["merged", None, "plain"])
71
+ sheet.merge_cells("A2:B2")
72
+ sheet["A1"].fill = GradientFill(stop=("FFFFFF", "99CCFF"))
73
+ sheet["B1"].fill = GradientFill(type="path", stop=("FFFFFF", "99CCFF"))
74
+ sheet["C1"].fill = PatternFill(patternType="solid", fgColor="FF99CCFF")
75
+ sheet["A2"].fill = GradientFill(stop=("FFFFFF", "99CCFF"))
76
+ workbook.create_sheet("Following")["A1"] = "still parsed"
77
+ stream = BytesIO()
78
+ workbook.save(stream)
79
+
80
+ pages = XlsxModel().predict(BytesIO(stream.getvalue()))
81
+ assert len(pages) == 2
82
+ table = next(block for block in pages[0] if block["type"] == BlockType.TABLE)
83
+ soup = BeautifulSoup(table["content"], "html.parser")
84
+ cells = soup.find_all(["th", "td"])
85
+ assert [cell.get_text() for cell in cells] == ["linear", "path", "solid", "merged", "plain"]
86
+ assert cells[3]["colspan"] == "2"
87
+ assert pages[1][-1] == {"type": BlockType.TEXT, "content": inline("still parsed")}
88
+
89
+
20
90
  def _cell(
21
91
  row: int,
22
92
  col: int,
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
File without changes
File without changes