docvortex 0.4.8__tar.gz → 0.4.10__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 (675) hide show
  1. {docvortex-0.4.8/src/docvortex.egg-info → docvortex-0.4.10}/PKG-INFO +4 -5
  2. {docvortex-0.4.8 → docvortex-0.4.10}/README.md +3 -4
  3. {docvortex-0.4.8 → docvortex-0.4.10}/docs/METADATA.md +1 -1
  4. {docvortex-0.4.8 → docvortex-0.4.10}/schemas/middle-2.0.json +1 -0
  5. {docvortex-0.4.8 → docvortex-0.4.10}/schemas/model-2.0.json +1 -0
  6. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/constants.py +2 -0
  7. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/resources.py +40 -2
  8. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/styles.py +7 -3
  9. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/table.py +3 -9
  10. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/text.py +55 -24
  11. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/api.py +1 -0
  12. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/contracts.py +6 -1
  13. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/detection.py +3 -3
  14. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/filetypes.py +2 -1
  15. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/schema.py +1 -0
  16. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/version.py +1 -1
  17. {docvortex-0.4.8 → docvortex-0.4.10/src/docvortex.egg-info}/PKG-INFO +4 -5
  18. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex.egg-info/SOURCES.txt +0 -1
  19. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_cli_logging.py +1 -1
  20. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_format_matrix.py +4 -2
  21. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_csv.py +44 -0
  22. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_html.py +136 -0
  23. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_odf.py +155 -0
  24. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_office_demo_pages.py +3 -2
  25. docvortex-0.4.8/src/docvortex/resources/fasttext-langdetect/lid.176.ftz +0 -0
  26. {docvortex-0.4.8 → docvortex-0.4.10}/LICENSE.md +0 -0
  27. {docvortex-0.4.8 → docvortex-0.4.10}/MANIFEST.in +0 -0
  28. {docvortex-0.4.8 → docvortex-0.4.10}/demo/README.md +0 -0
  29. {docvortex-0.4.8 → docvortex-0.4.10}/demo/demo.py +0 -0
  30. {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/README.md +0 -0
  31. {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/docx_01.doc +0 -0
  32. {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/docx_01.docx +0 -0
  33. {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/pptx_01.ppt +0 -0
  34. {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/pptx_01.pptx +0 -0
  35. {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/rtf_01.rtf +0 -0
  36. {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/xlsx_01.xls +0 -0
  37. {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/xlsx_01.xlsx +0 -0
  38. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
  39. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
  40. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/caibao1.pdf +0 -0
  41. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/demo1.pdf +0 -0
  42. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/demo2.pdf +0 -0
  43. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/demo3.pdf +0 -0
  44. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/demo4.pdf +0 -0
  45. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/demo6.pdf +0 -0
  46. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
  47. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
  48. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
  49. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
  50. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/small_ocr.pdf +0 -0
  51. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
  52. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
  53. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
  54. {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
  55. {docvortex-0.4.8 → docvortex-0.4.10}/docs/HTML_PROTOCOL.md +0 -0
  56. {docvortex-0.4.8 → docvortex-0.4.10}/docs/JSON_PROTOCOL.md +0 -0
  57. {docvortex-0.4.8 → docvortex-0.4.10}/docs/PDF_FONTS.md +0 -0
  58. {docvortex-0.4.8 → docvortex-0.4.10}/docs/RENDER_OWNERSHIP.md +0 -0
  59. {docvortex-0.4.8 → docvortex-0.4.10}/docs/USAGE.md +0 -0
  60. {docvortex-0.4.8 → docvortex-0.4.10}/docs/flash-manual-annotations-2026-09-15.md +0 -0
  61. {docvortex-0.4.8 → docvortex-0.4.10}/docs/flash-round2-annotations-2026-09-15.md +0 -0
  62. {docvortex-0.4.8 → docvortex-0.4.10}/docs/flash-rule-generalization-2026-09-15.md +0 -0
  63. {docvortex-0.4.8 → docvortex-0.4.10}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
  64. {docvortex-0.4.8 → docvortex-0.4.10}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
  65. {docvortex-0.4.8 → docvortex-0.4.10}/docs/flash-title-coverage-2026-09-16.md +0 -0
  66. {docvortex-0.4.8 → docvortex-0.4.10}/docs/sdk-0.4.md +0 -0
  67. {docvortex-0.4.8 → docvortex-0.4.10}/pyproject.toml +0 -0
  68. {docvortex-0.4.8 → docvortex-0.4.10}/setup.cfg +0 -0
  69. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/__init__.py +0 -0
  70. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/__init__.py +0 -0
  71. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/__init__.py +0 -0
  72. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
  73. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
  74. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/image.py +0 -0
  75. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
  76. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
  77. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
  78. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
  79. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
  80. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
  81. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/names.py +0 -0
  82. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
  83. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/contracts.py +0 -0
  84. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/csv.py +0 -0
  85. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
  86. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/constants.py +0 -0
  87. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/converter.py +0 -0
  88. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/errors.py +0 -0
  89. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
  90. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/package.py +0 -0
  91. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/properties.py +0 -0
  92. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
  93. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/__init__.py +0 -0
  94. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/anchors.py +0 -0
  95. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/converter.py +0 -0
  96. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/document.py +0 -0
  97. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/errors.py +0 -0
  98. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/metadata.py +0 -0
  99. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/selector.py +0 -0
  100. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/models.py +0 -0
  101. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
  102. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
  103. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
  104. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
  105. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
  106. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
  107. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/images.py +0 -0
  108. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
  109. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/models.py +0 -0
  110. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/package.py +0 -0
  111. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/path.py +0 -0
  112. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
  113. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
  114. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
  115. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/table.py +0 -0
  116. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/text.py +0 -0
  117. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
  118. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/__init__.py +0 -0
  119. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
  120. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
  121. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
  122. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
  123. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
  124. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
  125. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
  126. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
  127. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
  128. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
  129. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
  130. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
  131. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
  132. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
  133. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
  134. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
  135. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
  136. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
  137. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
  138. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
  139. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
  140. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
  141. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
  142. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
  143. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
  144. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
  145. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
  146. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
  147. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
  148. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
  149. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
  150. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
  151. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
  152. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
  153. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/errors.py +0 -0
  154. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/image.py +0 -0
  155. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
  156. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
  157. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
  158. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
  159. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/limits.py +0 -0
  160. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/metadata.py +0 -0
  161. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
  162. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
  163. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
  164. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
  165. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
  166. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
  167. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
  168. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
  169. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
  170. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/opc.py +0 -0
  171. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
  172. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
  173. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
  174. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
  175. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
  176. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
  177. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
  178. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
  179. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
  180. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
  181. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
  182. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
  183. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
  184. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
  185. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
  186. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
  187. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
  188. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
  189. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
  190. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
  191. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
  192. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
  193. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
  194. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
  195. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
  196. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
  197. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
  198. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
  199. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/streams.py +0 -0
  200. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
  201. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
  202. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
  203. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
  204. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
  205. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
  206. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
  207. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
  208. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
  209. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
  210. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
  211. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
  212. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
  213. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
  214. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
  215. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
  216. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
  217. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
  218. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
  219. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
  220. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
  221. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
  222. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
  223. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
  224. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
  225. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
  226. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
  227. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
  228. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
  229. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
  230. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
  231. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
  232. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
  233. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
  234. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
  235. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
  236. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
  237. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
  238. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
  239. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
  240. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
  241. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
  242. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
  243. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
  244. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
  245. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
  246. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/models.py +0 -0
  247. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
  248. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
  249. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
  250. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
  251. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
  252. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
  253. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
  254. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
  255. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
  256. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
  257. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
  258. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
  259. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
  260. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
  261. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
  262. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
  263. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
  264. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
  265. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
  266. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
  267. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
  268. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
  269. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
  270. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
  271. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
  272. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
  273. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
  274. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
  275. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
  276. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
  277. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
  278. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
  279. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
  280. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
  281. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
  282. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/pdf.py +0 -0
  283. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/assets/__init__.py +0 -0
  284. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/assets/images.py +0 -0
  285. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/assets/store.py +0 -0
  286. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/cli.py +0 -0
  287. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/__init__.py +0 -0
  288. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/html/__init__.py +0 -0
  289. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/html/contracts.py +0 -0
  290. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/html/materializer.py +0 -0
  291. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/html/parser.py +0 -0
  292. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/html/resources.py +0 -0
  293. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/json.py +0 -0
  294. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/__init__.py +0 -0
  295. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/inline.py +0 -0
  296. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/links.py +0 -0
  297. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/markup/__init__.py +0 -0
  298. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/markup/anchors.py +0 -0
  299. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/markup/formula.py +0 -0
  300. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/markup/projector.py +0 -0
  301. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/markup/styles.py +0 -0
  302. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/mathml.py +0 -0
  303. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/normalization.py +0 -0
  304. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/spans.py +0 -0
  305. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/__init__.py +0 -0
  306. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/blocks.py +0 -0
  307. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/content.py +0 -0
  308. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/document.py +0 -0
  309. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/html.py +0 -0
  310. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/models.py +0 -0
  311. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/rules.py +0 -0
  312. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/structure.py +0 -0
  313. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/text.py +0 -0
  314. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/tree.py +0 -0
  315. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/__init__.py +0 -0
  316. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/page_range.py +0 -0
  317. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/__init__.py +0 -0
  318. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/_document.py +0 -0
  319. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/classify.py +0 -0
  320. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/constants.py +0 -0
  321. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/font_runtime.py +0 -0
  322. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/images.py +0 -0
  323. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/layout.py +0 -0
  324. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/metadata.py +0 -0
  325. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/native_annotations.py +0 -0
  326. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/native_contracts.py +0 -0
  327. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/native_coordinates.py +0 -0
  328. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
  329. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/native_objects.py +0 -0
  330. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
  331. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/pdfium.py +0 -0
  332. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/raster.py +0 -0
  333. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/text/__init__.py +0 -0
  334. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/text/_contracts.py +0 -0
  335. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/text/dedup.py +0 -0
  336. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/text/extract.py +0 -0
  337. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/text/geometry.py +0 -0
  338. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/text/groups.py +0 -0
  339. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/visuals.py +0 -0
  340. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/properties.py +0 -0
  341. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/source.py +0 -0
  342. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/errors.py +0 -0
  343. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/export/__init__.py +0 -0
  344. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/export/bundle.py +0 -0
  345. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/export/files.py +0 -0
  346. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/export/middle.py +0 -0
  347. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/__init__.py +0 -0
  348. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_coordinates.py +0 -0
  349. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_geometry.py +0 -0
  350. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_hyperlink.py +0 -0
  351. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_image.py +0 -0
  352. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_image_operations.py +0 -0
  353. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_image_payload.py +0 -0
  354. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_text.py +0 -0
  355. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/image_encoding.py +0 -0
  356. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/language.py +0 -0
  357. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/type_identity.py +0 -0
  358. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/xml_names.py +0 -0
  359. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/geometry.py +0 -0
  360. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/metadata.py +0 -0
  361. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/options.py +0 -0
  362. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/__init__.py +0 -0
  363. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/content.py +0 -0
  364. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/document.py +0 -0
  365. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/lists.py +0 -0
  366. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/page_blocks.py +0 -0
  367. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/pages.py +0 -0
  368. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/paragraphs.py +0 -0
  369. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/visual.py +0 -0
  370. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/public_api.py +0 -0
  371. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/__init__.py +0 -0
  372. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/__init__.py +0 -0
  373. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/common/__init__.py +0 -0
  374. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/common/context.py +0 -0
  375. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/common/html_table.py +0 -0
  376. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/common/index.py +0 -0
  377. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/common/list_items.py +0 -0
  378. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/common/planner.py +0 -0
  379. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/__init__.py +0 -0
  380. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/assets.py +0 -0
  381. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/inline.py +0 -0
  382. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/math.py +0 -0
  383. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/renderer.py +0 -0
  384. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/styles.py +0 -0
  385. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/table.py +0 -0
  386. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/epub/__init__.py +0 -0
  387. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/epub/assets.py +0 -0
  388. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/epub/package.py +0 -0
  389. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/epub/renderer.py +0 -0
  390. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/html/__init__.py +0 -0
  391. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/html/inline.py +0 -0
  392. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/html/renderer.py +0 -0
  393. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
  394. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/html/table.py +0 -0
  395. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/__init__.py +0 -0
  396. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/assets.py +0 -0
  397. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/inline.py +0 -0
  398. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/renderer.py +0 -0
  399. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/table.py +0 -0
  400. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
  401. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/assets.py +0 -0
  402. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
  403. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
  404. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/inline.py +0 -0
  405. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
  406. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/table.py +0 -0
  407. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
  408. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/assets.py +0 -0
  409. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
  410. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
  411. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/formula.py +0 -0
  412. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
  413. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/inline.py +0 -0
  414. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/original.py +0 -0
  415. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
  416. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/paragraph.py +0 -0
  417. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
  418. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/styles.py +0 -0
  419. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/table.py +0 -0
  420. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
  421. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
  422. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
  423. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
  424. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
  425. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/api.py +0 -0
  426. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/contracts.py +0 -0
  427. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/docx.py +0 -0
  428. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/epub.py +0 -0
  429. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/fragments.py +0 -0
  430. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/html.py +0 -0
  431. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/latex.py +0 -0
  432. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/markdown.py +0 -0
  433. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/pdf.py +0 -0
  434. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/structured_content.py +0 -0
  435. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/epub/docvortex.css +0 -0
  436. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
  437. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/fonts/NOTICE +0 -0
  438. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/fonts/manifest.json +0 -0
  439. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/html/docvortex.css +0 -0
  440. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/html/docvortex.min.css +0 -0
  441. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
  442. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/result.py +0 -0
  443. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/visualization.py +0 -0
  444. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex.egg-info/dependency_links.txt +0 -0
  445. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex.egg-info/entry_points.txt +0 -0
  446. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex.egg-info/requires.txt +0 -0
  447. {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex.egg-info/top_level.txt +0 -0
  448. {docvortex-0.4.8 → docvortex-0.4.10}/tests/benchmarks/flash_pdf.py +0 -0
  449. {docvortex-0.4.8 → docvortex-0.4.10}/tests/benchmarks/native_pdf_table.py +0 -0
  450. {docvortex-0.4.8 → docvortex-0.4.10}/tests/benchmarks/pdf_render.py +0 -0
  451. {docvortex-0.4.8 → docvortex-0.4.10}/tests/benchmarks/pipeline.py +0 -0
  452. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
  453. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_layout_block_expectations.json +0 -0
  454. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
  455. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
  456. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_manual_annotations.json +0 -0
  457. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_manual_review_decisions.json +0 -0
  458. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_reviewed_history.json +0 -0
  459. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_round2_annotations.json +0 -0
  460. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_round2_review_decisions.json +0 -0
  461. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_round3_annotations.json +0 -0
  462. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
  463. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_round3_review_decisions.json +0 -0
  464. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
  465. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
  466. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
  467. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
  468. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
  469. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
  470. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/pdf_char_dedup.json +0 -0
  471. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
  472. {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/rtf/semantic.rtf +0 -0
  473. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_architecture.py +0 -0
  474. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_benchmark_entrypoint.py +0 -0
  475. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_brand_protocol.py +0 -0
  476. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_complete_pipeline.py +0 -0
  477. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_converter_lifecycle.py +0 -0
  478. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_document_envelope.py +0 -0
  479. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_document_metadata.py +0 -0
  480. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_geometry_api.py +0 -0
  481. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_history_geometry_tools.py +0 -0
  482. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_html_namespace.py +0 -0
  483. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_mixed_font_script_reference.py +0 -0
  484. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_analysis_api.py +0 -0
  485. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_font_geometry.py +0 -0
  486. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_font_runtime.py +0 -0
  487. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_model_text_normalization.py +0 -0
  488. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_output_text.py +0 -0
  489. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_render_pool.py +0 -0
  490. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_source_row_merging.py +0 -0
  491. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_symbol_normalization.py +0 -0
  492. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_public_export_api.py +0 -0
  493. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_public_image_api.py +0 -0
  494. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_public_pipeline.py +0 -0
  495. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_refactor_raster.py +0 -0
  496. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_refactor_rendering.py +0 -0
  497. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_refactor_resources.py +0 -0
  498. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_release_ci_gate.py +0 -0
  499. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_render_ownership.py +0 -0
  500. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_renderer_branding.py +0 -0
  501. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_shared_boundaries.py +0 -0
  502. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_system_font_pdf_pipeline.py +0 -0
  503. {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_validated_geometry.py +0 -0
  504. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
  505. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_epub_test_utils.py +0 -0
  506. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_flash_pdf_test_utils.py +0 -0
  507. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_image_mtef_test_utils.py +0 -0
  508. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_legacy_doc_test_utils.py +0 -0
  509. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
  510. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_legacy_xls_test_utils.py +0 -0
  511. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_metafile_test_utils.py +0 -0
  512. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_mtef_test_utils.py +0 -0
  513. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_mtef_v5_test_utils.py +0 -0
  514. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_native_test_utils.py +0 -0
  515. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_odf_test_utils.py +0 -0
  516. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_ofd_test_utils.py +0 -0
  517. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
  518. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
  519. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_span_test_utils.py +0 -0
  520. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
  521. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
  522. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
  523. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
  524. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
  525. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
  526. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
  527. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
  528. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
  529. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
  530. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
  531. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
  532. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
  533. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
  534. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
  535. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
  536. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
  537. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
  538. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
  539. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
  540. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
  541. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
  542. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
  543. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
  544. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
  545. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
  546. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
  547. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
  548. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
  549. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/test.pdf +0 -0
  550. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_backend_architecture.py +0 -0
  551. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_backend_block_object_regressions.py +0 -0
  552. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_docx_assets.py +0 -0
  553. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_docx_complex_fields.py +0 -0
  554. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_docx_math.py +0 -0
  555. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_docx_render.py +0 -0
  556. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_docx_special_char_tables.py +0 -0
  557. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_docx_table.py +0 -0
  558. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_emfplus_integration.py +0 -0
  559. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_epub_backlinks.py +0 -0
  560. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_epub_quoted_note_types.py +0 -0
  561. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_epub_render.py +0 -0
  562. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
  563. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_docx_equationxml.py +0 -0
  564. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_epub.py +0 -0
  565. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_image_mtef.py +0 -0
  566. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
  567. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_doc.py +0 -0
  568. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
  569. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_ppt.py +0 -0
  570. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_xls.py +0 -0
  571. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
  572. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_manual_annotations.py +0 -0
  573. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_markup_anchors.py +0 -0
  574. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_model.py +0 -0
  575. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_mtef_v5.py +0 -0
  576. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_ofd.py +0 -0
  577. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_office_image_mtef.py +0 -0
  578. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_office_metafile.py +0 -0
  579. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_office_models.py +0 -0
  580. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
  581. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
  582. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_office_title_types.py +0 -0
  583. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
  584. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
  585. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
  586. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
  587. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
  588. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
  589. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_extractor.py +0 -0
  590. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_formulas.py +0 -0
  591. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_graphics.py +0 -0
  592. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
  593. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
  594. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
  595. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_native_text.py +0 -0
  596. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
  597. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
  598. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_samples.py +0 -0
  599. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_scripts.py +0 -0
  600. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_semantics.py +0 -0
  601. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_tables.py +0 -0
  602. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
  603. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
  604. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_titles.py +0 -0
  605. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
  606. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_round2_annotations.py +0 -0
  607. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_round3_annotations.py +0 -0
  608. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_rtf.py +0 -0
  609. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_rule_generalization.py +0 -0
  610. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_shared_helpers.py +0 -0
  611. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_spatial_evidence.py +0 -0
  612. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
  613. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_guess_suffix_ole2.py +0 -0
  614. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_html_css_build.py +0 -0
  615. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_html_render.py +0 -0
  616. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_html_security.py +0 -0
  617. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
  618. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_latex_render.py +0 -0
  619. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_markdown_render.py +0 -0
  620. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_middle_json_block_models.py +0 -0
  621. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_middle_json_export.py +0 -0
  622. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_middle_json_validator.py +0 -0
  623. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_model_json.py +0 -0
  624. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table.py +0 -0
  625. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
  626. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
  627. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
  628. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
  629. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
  630. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_ofd_assembly.py +0 -0
  631. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_ofd_vector_tables.py +0 -0
  632. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_office_demo_exports.py +0 -0
  633. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_office_parser_regressions.py +0 -0
  634. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_cjk_style.py +0 -0
  635. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
  636. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_classify.py +0 -0
  637. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_demo_links.py +0 -0
  638. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
  639. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_document.py +0 -0
  640. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_formula_layout.py +0 -0
  641. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_object_clipping.py +0 -0
  642. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_original_layout.py +0 -0
  643. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_pagination.py +0 -0
  644. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
  645. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_render.py +0 -0
  646. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
  647. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_structured_tables.py +0 -0
  648. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_table_cache.py +0 -0
  649. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_table_round2.py +0 -0
  650. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_text_dedup.py +0 -0
  651. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_text_styles.py +0 -0
  652. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_title_font_plan.py +0 -0
  653. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_title_space.py +0 -0
  654. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_visualization.py +0 -0
  655. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_postprocess_page_blocks.py +0 -0
  656. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_postprocess_pages.py +0 -0
  657. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_postprocess_paragraphs.py +0 -0
  658. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_postprocess_visual.py +0 -0
  659. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_render_api.py +0 -0
  660. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_render_html_table.py +0 -0
  661. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_render_image_renderer.py +0 -0
  662. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_render_list_index_utils.py +0 -0
  663. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_structured_content_render.py +0 -0
  664. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_table_merge.py +0 -0
  665. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_table_merge_cell_merge.py +0 -0
  666. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_text_block_anchor.py +0 -0
  667. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_text_boundary_rules.py +0 -0
  668. {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_text_utils.py +0 -0
  669. {docvortex-0.4.8 → docvortex-0.4.10}/tools/__init__.py +0 -0
  670. {docvortex-0.4.8 → docvortex-0.4.10}/tools/build_html_css.py +0 -0
  671. {docvortex-0.4.8 → docvortex-0.4.10}/tools/calibrate_pdf_geometry.py +0 -0
  672. {docvortex-0.4.8 → docvortex-0.4.10}/tools/capture_baseline.py +0 -0
  673. {docvortex-0.4.8 → docvortex-0.4.10}/tools/capture_platform_layout.py +0 -0
  674. {docvortex-0.4.8 → docvortex-0.4.10}/tools/compare_font_platforms.py +0 -0
  675. {docvortex-0.4.8 → docvortex-0.4.10}/tools/font_geometry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.8
3
+ Version: 0.4.10
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
@@ -77,13 +77,12 @@ DocVortex is a standalone Python engine for parsing and converting documents.
77
77
  It reads native text and document structure into a unified representation,
78
78
  then exports the result in the formats your workflow needs.
79
79
 
80
- - **Multi-format input** — read text PDFs, Office files, OpenDocument files, EPUB, HTML, OFD and CSV.
80
+ - **Multi-format input** — read text PDFs, Office files, OpenDocument files, EPUB, HTML, OFD, CSV and TSV.
81
81
  - **Parse once, export many times** — reuse the same result for Markdown, HTML, LaTeX, DOCX, EPUB, PDF and structured JSON.
82
82
  - **Portable results** — save document structure and image assets in a Bundle, then export again without the source file.
83
83
  - **Composable APIs** — use the complete pipeline or integrate analysis, postprocessing and rendering separately.
84
84
 
85
- Native parsing works without an OCR or VLM inference service. Use DocVortex
86
- directly through its CLI or Python SDK, independently of MinerU.
85
+ Native parsing works without an OCR or VLM inference service. Use DocVortex directly through its CLI or Python SDK.
87
86
 
88
87
  ![DocVortex pipeline: native documents become a unified representation, then Markdown, HTML, LaTeX, DOCX, EPUB, PDF or structured JSON.](https://gcore.jsdelivr.net/gh/myhloli/DocVortex@main/docs/images/docvortex-overview.jpg)
89
88
 
@@ -135,7 +134,7 @@ use `overwrite=True` in Python or `--overwrite` in the CLI to replace them.
135
134
  | PDF with native text | PDF |
136
135
  | Word & rich text | DOC, DOCX, RTF |
137
136
  | Presentations | PPT, PPTX |
138
- | Spreadsheets | XLS, XLSX, CSV |
137
+ | Spreadsheets | XLS, XLSX, CSV, TSV |
139
138
  | OpenDocument | ODT, ODS, ODP |
140
139
  | E-books & web documents | EPUB, HTML |
141
140
  | Open Fixed-layout Document | OFD |
@@ -23,13 +23,12 @@ DocVortex is a standalone Python engine for parsing and converting documents.
23
23
  It reads native text and document structure into a unified representation,
24
24
  then exports the result in the formats your workflow needs.
25
25
 
26
- - **Multi-format input** — read text PDFs, Office files, OpenDocument files, EPUB, HTML, OFD and CSV.
26
+ - **Multi-format input** — read text PDFs, Office files, OpenDocument files, EPUB, HTML, OFD, CSV and TSV.
27
27
  - **Parse once, export many times** — reuse the same result for Markdown, HTML, LaTeX, DOCX, EPUB, PDF and structured JSON.
28
28
  - **Portable results** — save document structure and image assets in a Bundle, then export again without the source file.
29
29
  - **Composable APIs** — use the complete pipeline or integrate analysis, postprocessing and rendering separately.
30
30
 
31
- Native parsing works without an OCR or VLM inference service. Use DocVortex
32
- directly through its CLI or Python SDK, independently of MinerU.
31
+ Native parsing works without an OCR or VLM inference service. Use DocVortex directly through its CLI or Python SDK.
33
32
 
34
33
  ![DocVortex pipeline: native documents become a unified representation, then Markdown, HTML, LaTeX, DOCX, EPUB, PDF or structured JSON.](https://gcore.jsdelivr.net/gh/myhloli/DocVortex@main/docs/images/docvortex-overview.jpg)
35
34
 
@@ -81,7 +80,7 @@ use `overwrite=True` in Python or `--overwrite` in the CLI to replace them.
81
80
  | PDF with native text | PDF |
82
81
  | Word & rich text | DOC, DOCX, RTF |
83
82
  | Presentations | PPT, PPTX |
84
- | Spreadsheets | XLS, XLSX, CSV |
83
+ | Spreadsheets | XLS, XLSX, CSV, TSV |
85
84
  | OpenDocument | ODT, ODS, ODP |
86
85
  | E-books & web documents | EPUB, HTML |
87
86
  | Open Fixed-layout Document | OFD |
@@ -43,7 +43,7 @@ FILETIME values are UTC. Missing or invalid dates are not replaced with filesyst
43
43
  | EPUB | OPF Dublin Core and recognized meta properties | `spine` |
44
44
  | OFD | DocInfo; first nonempty scalar across DocBody entries | `physical`, summed across documents |
45
45
  | HTML | title, standard meta, Dublin Core, Open Graph, document language | `logical`, 1 |
46
- | CSV | no embedded descriptive property convention | `logical`, 1 |
46
+ | CSV / TSV | no embedded descriptive property convention | `logical`, 1 |
47
47
 
48
48
  A declared count may be stale and is not a measured layout. Counts are never inferred from the
49
49
  number of pages selected for parsing. Source author strings are not authors inferred from body text.
@@ -762,6 +762,7 @@
762
762
  "xlsx",
763
763
  "rtf",
764
764
  "csv",
765
+ "tsv",
765
766
  "epub",
766
767
  "html",
767
768
  "ofd",
@@ -15,6 +15,7 @@
15
15
  "xlsx",
16
16
  "rtf",
17
17
  "csv",
18
+ "tsv",
18
19
  "epub",
19
20
  "html",
20
21
  "ofd",
@@ -8,6 +8,7 @@ MAX_HTML_NODES: Final = 2_000_000
8
8
  MAX_HTML_DEPTH: Final = 256
9
9
  MAX_HTML_IMAGE_BYTES: Final = 20 * 1024 * 1024
10
10
  MAX_HTML_IMAGE_TOTAL_BYTES: Final = 128 * 1024 * 1024
11
+ MAX_REMOTE_IMAGE_FETCH_SECONDS: Final = 10
11
12
  MAX_HTML_STYLESHEET_BYTES: Final = 5 * 1024 * 1024
12
13
  MAX_HTML_STYLESHEET_TOTAL_BYTES: Final = 20 * 1024 * 1024
13
14
  MAX_HTML_RENDERED_BYTES: Final = 256 * 1024 * 1024
@@ -22,4 +23,5 @@ __all__ = [
22
23
  "MAX_HTML_RENDERED_BYTES",
23
24
  "MAX_HTML_STYLESHEET_BYTES",
24
25
  "MAX_HTML_STYLESHEET_TOTAL_BYTES",
26
+ "MAX_REMOTE_IMAGE_FETCH_SECONDS",
25
27
  ]
@@ -6,6 +6,7 @@ import base64
6
6
  from pathlib import Path
7
7
  from typing import Protocol
8
8
  from urllib.parse import SplitResult, unquote, urljoin, urlsplit, urlunsplit
9
+ from urllib.request import urlopen
9
10
 
10
11
  from lxml import etree # type: ignore[reportMissingImports]
11
12
 
@@ -19,6 +20,7 @@ from .constants import (
19
20
  MAX_HTML_IMAGE_TOTAL_BYTES,
20
21
  MAX_HTML_STYLESHEET_BYTES,
21
22
  MAX_HTML_STYLESHEET_TOTAL_BYTES,
23
+ MAX_REMOTE_IMAGE_FETCH_SECONDS,
22
24
  )
23
25
  from .errors import HtmlResourceLimitError
24
26
 
@@ -65,6 +67,7 @@ class HtmlResourceContext:
65
67
  self._image_bytes = 0
66
68
  self._stylesheet_bytes = 0
67
69
  self._image_cache: dict[Path, str] = {}
70
+ self._remote_image_cache: dict[str, str] = {}
68
71
  self._data_image_cache: dict[str, ResolvedMarkupImage] = {}
69
72
  self._stylesheet_cache: dict[Path, str] = {}
70
73
  self._local_root = source_context.local_resource_root.resolve() if source_context.local_resource_root else None
@@ -157,14 +160,14 @@ class HtmlResourceContext:
157
160
  return sanitize_hyperlink_target(normalized, allow_relative=True, allow_fragment=True)
158
161
 
159
162
  def resolve_image(self, source: str, *, alt: str = "") -> ResolvedMarkupImage | None:
160
- """按 data URI、本地安全文件、远程 URL 的顺序解析图片。"""
163
+ """按 data URI、远程 URL、本地安全文件的顺序解析图片,远程图片仅在来源显式开启下载时内嵌。"""
161
164
  normalized = (source or "").strip()
162
165
  if not normalized:
163
166
  return ResolvedMarkupImage(alt=alt) if alt else None
164
167
  if normalized.casefold().startswith("data:"):
165
168
  return self._resolve_data_image(normalized, alt=alt)
166
169
  if remote_url := self._resolve_remote_image_url(normalized):
167
- return ResolvedMarkupImage(image_url=remote_url, alt=alt)
170
+ return self._resolve_remote_image(remote_url, alt=alt)
168
171
  local_path = self._resolve_local_path(normalized)
169
172
  if local_path is None or not local_path.is_file():
170
173
  return ResolvedMarkupImage(alt=alt) if alt else None
@@ -243,6 +246,41 @@ class HtmlResourceContext:
243
246
  self._data_image_cache[data_uri] = resolved
244
247
  return resolved
245
248
 
249
+ def _resolve_remote_image(self, remote_url: str, *, alt: str) -> ResolvedMarkupImage:
250
+ """远程图片默认保持外链,来源显式开启下载时按缓存下载内嵌。"""
251
+ if not self.source_context.fetch_remote_images:
252
+ return ResolvedMarkupImage(image_url=remote_url, alt=alt)
253
+ if cached := self._remote_image_cache.get(remote_url):
254
+ return ResolvedMarkupImage(image_base64=cached, alt=alt)
255
+ data_uri = self._fetch_remote_image(remote_url)
256
+ if data_uri is None:
257
+ return ResolvedMarkupImage(image_url=remote_url, alt=alt)
258
+ self._remote_image_cache[remote_url] = data_uri
259
+ return ResolvedMarkupImage(image_base64=data_uri, alt=alt)
260
+
261
+ def _fetch_remote_image(self, remote_url: str) -> str | None:
262
+ """在单图上限与超时约束内下载远程图片并复核签名,网络失败返回 None 退回外链。"""
263
+ try:
264
+ with urlopen(remote_url, timeout=MAX_REMOTE_IMAGE_FETCH_SECONDS) as response:
265
+ chunks: list[bytes] = []
266
+ remaining = MAX_HTML_IMAGE_BYTES + 1
267
+ while remaining > 0:
268
+ chunk = response.read(remaining)
269
+ if not chunk:
270
+ break
271
+ chunks.append(chunk)
272
+ remaining -= len(chunk)
273
+ except (OSError, ValueError):
274
+ return None
275
+ payload = b"".join(chunks)
276
+ if len(payload) > MAX_HTML_IMAGE_BYTES:
277
+ raise HtmlResourceLimitError(f"HTML image exceeds max_html_image_bytes={MAX_HTML_IMAGE_BYTES}")
278
+ data_uri = _image_data_uri(payload)
279
+ if data_uri is None:
280
+ return None
281
+ self._charge_image_bytes(len(payload))
282
+ return data_uri
283
+
246
284
  def _charge_image_bytes(self, byte_count: int) -> None:
247
285
  """累计实际保留的图片字节,并在超限时终止整份文档。"""
248
286
  self._image_bytes += byte_count
@@ -260,11 +260,15 @@ class OdfStyles:
260
260
  current = definition.parent or ""
261
261
  return False
262
262
 
263
- def list_level(self, style_name: str | None, depth: int) -> ListLevel:
264
- """返回指定列表深度的定义,不存在时使用无序默认值。"""
263
+ def list_level(self, style_name: str | None, depth: int) -> ListLevel | None:
264
+ """返回指定列表深度的定义;样式已定义但无任何层级时返回 None(无可见标记)。"""
265
265
  if not style_name:
266
266
  return ListLevel()
267
- levels = self._list_styles.get(style_name, {})
267
+ levels = self._list_styles.get(style_name)
268
+ if levels is None:
269
+ return ListLevel()
270
+ if not levels:
271
+ return None
268
272
  return levels.get(depth, ListLevel())
269
273
 
270
274
  def table_is_visible(self, style_name: str | None) -> bool:
@@ -169,7 +169,6 @@ def parse_table_grid(
169
169
  duplicated_text_bytes = 0
170
170
  row_index = 0
171
171
  pending_empty_rows = 0
172
- pending_empty_width = 0
173
172
 
174
173
  def ensure_row(target_row: int, width: int = 0) -> list[GridCell | None]:
175
174
  """在兼容独立表格调用的同时应用可选文档级预留。"""
@@ -179,7 +178,6 @@ def parse_table_grid(
179
178
 
180
179
  for row_element, header in _iter_rows(table):
181
180
  row_repeat = _positive_int(row_element.get(qname("table", "number-rows-repeated")))
182
- _validate_grid_extent(row_index + row_repeat, grid.width)
183
181
  cell_templates: list[tuple[bool, int, GridCell | None]] = []
184
182
  for cell in row_element:
185
183
  if not isinstance(cell.tag, str):
@@ -219,18 +217,14 @@ def parse_table_grid(
219
217
  )
220
218
  if not row_has_content:
221
219
  pending_empty_rows += row_repeat
222
- pending_empty_width = max(
223
- pending_empty_width,
224
- sum(repeat * (template.col_span if template is not None else 1) for _, repeat, template in cell_templates),
225
- )
226
220
  continue
227
221
  if pending_empty_rows:
228
- _validate_grid_extent(row_index + pending_empty_rows, max(grid.width, pending_empty_width))
222
+ _validate_grid_extent(row_index + pending_empty_rows, grid.width)
229
223
  for _ in range(pending_empty_rows):
230
- ensure_row(row_index, pending_empty_width)
224
+ ensure_row(row_index, grid.width)
231
225
  row_index += 1
232
226
  pending_empty_rows = 0
233
- pending_empty_width = 0
227
+ _validate_grid_extent(row_index + row_repeat, grid.width)
234
228
  for _ in range(row_repeat):
235
229
  row = ensure_row(row_index)
236
230
  col_index = 0
@@ -453,7 +453,7 @@ class OdfBlockParser:
453
453
  style_name = element.get(qname("text", "style-name")) or inherited_style
454
454
  level = self.styles.list_level(style_name, depth)
455
455
  key = (style_name or "", depth)
456
- start = level.start
456
+ start = level.start if level is not None else 1
457
457
  continue_list = element.get(qname("text", "continue-list"))
458
458
  if continue_list and continue_list in self._list_ids:
459
459
  start = self._list_ids[continue_list]
@@ -466,17 +466,20 @@ class OdfBlockParser:
466
466
  active_master: str | None = None
467
467
 
468
468
  def flush_content(fragment_start: int) -> None:
469
- """把当前合法子块冻结为一个 LIST 分片。"""
469
+ """把当前合法子块冻结为一个 LIST 分片;无标记列表按普通段落序列输出。"""
470
470
  if content:
471
- block: dict[str, Any] = {
472
- "type": BlockType.LIST,
473
- "attribute": "ordered" if level.ordered else "unordered",
474
- "ilevel": depth,
475
- "content": list(content),
476
- }
477
- if level.ordered:
478
- block["start"] = fragment_start
479
- results.append(block)
471
+ if level is None:
472
+ results.extend(content)
473
+ else:
474
+ block: dict[str, Any] = {
475
+ "type": BlockType.LIST,
476
+ "attribute": "ordered" if level.ordered else "unordered",
477
+ "ilevel": depth,
478
+ "content": list(content),
479
+ }
480
+ if level.ordered:
481
+ block["start"] = fragment_start
482
+ results.append(block)
480
483
  content.clear()
481
484
  if fragment_notes:
482
485
  results.extend(fragment_notes)
@@ -875,6 +878,20 @@ class OdfBlockParser:
875
878
  """把单元格行内流中的 note marker 排入当前逻辑页队列。"""
876
879
  self.notes.extend(atom.content for atom in atoms if isinstance(atom, InlineNote))
877
880
 
881
+ def _render_cell_paragraph(self, child: etree._Element, parts: list[str]) -> None:
882
+ """把单元格里的一个裸段落渲染为 <p>,并回收行内块组的单元格子块。"""
883
+ atoms = self.parse_inline_atoms(child)
884
+ self._queue_inline_notes(atoms)
885
+ rendered_atoms = [atom for atom in atoms if not isinstance(atom, InlineImage)] if self._collect_cell_visuals else atoms
886
+ parts.append(f"<p>{render_atoms_to_html(rendered_atoms)}</p>")
887
+ for atom in atoms:
888
+ if isinstance(atom, InlineBlockGroup):
889
+ self._append_cell_blocks(
890
+ parts,
891
+ atom.blocks,
892
+ inline_image_rendered=atom.inline_image_rendered and not self._collect_cell_visuals,
893
+ )
894
+
878
895
  def render_cell_html(self, cell: etree._Element) -> str:
879
896
  """把表格单元格中的段落、列表、嵌套表和 frame 转为 HTML。"""
880
897
  parts: list[str] = []
@@ -882,19 +899,7 @@ class OdfBlockParser:
882
899
  if not isinstance(child.tag, str):
883
900
  continue
884
901
  if child.tag in {qname("text", "p"), qname("text", "h")}:
885
- atoms = self.parse_inline_atoms(child)
886
- self._queue_inline_notes(atoms)
887
- rendered_atoms = (
888
- [atom for atom in atoms if not isinstance(atom, InlineImage)] if self._collect_cell_visuals else atoms
889
- )
890
- parts.append(f"<p>{render_atoms_to_html(rendered_atoms)}</p>")
891
- for atom in atoms:
892
- if isinstance(atom, InlineBlockGroup):
893
- self._append_cell_blocks(
894
- parts,
895
- atom.blocks,
896
- inline_image_rendered=atom.inline_image_rendered and not self._collect_cell_visuals,
897
- )
902
+ self._render_cell_paragraph(child, parts)
898
903
  elif child.tag == qname("text", "list"):
899
904
  parts.append(self._render_list_html(child))
900
905
  elif child.tag == qname("table", "table"):
@@ -915,6 +920,8 @@ class OdfBlockParser:
915
920
  """把单元格内 ODF 列表递归渲染为 ol/ul HTML。"""
916
921
  style_name = element.get(qname("text", "style-name")) or inherited_style
917
922
  level = self.styles.list_level(style_name, depth)
923
+ if level is None:
924
+ return self._render_unmarked_list_html(element, depth=depth, inherited_style=style_name)
918
925
  tag = "ol" if level.ordered else "ul"
919
926
  start = f' start="{level.start}"' if level.ordered and level.start != 1 else ""
920
927
  parts = [f"<{tag}{start}>"]
@@ -940,6 +947,30 @@ class OdfBlockParser:
940
947
  parts.append(f"</{tag}>")
941
948
  return "".join(parts)
942
949
 
950
+ def _render_unmarked_list_html(
951
+ self,
952
+ element: etree._Element,
953
+ *,
954
+ depth: int,
955
+ inherited_style: str | None,
956
+ ) -> str:
957
+ """把引用空列表样式(无可见标记)的单元格列表按裸段落序列渲染。"""
958
+ parts: list[str] = []
959
+ for item in element:
960
+ if not isinstance(item.tag, str) or item.tag not in {
961
+ qname("text", "list-item"),
962
+ qname("text", "list-header"),
963
+ }:
964
+ continue
965
+ for child in item:
966
+ if not isinstance(child.tag, str):
967
+ continue
968
+ if child.tag in {qname("text", "p"), qname("text", "h")}:
969
+ self._render_cell_paragraph(child, parts)
970
+ elif child.tag == qname("text", "list"):
971
+ parts.append(self._render_list_html(child, depth=depth + 1, inherited_style=inherited_style))
972
+ return "".join(part for part in parts if part)
973
+
943
974
  def drain_notes(self) -> list[str]:
944
975
  """取出当前累计脚注并清空共享队列。"""
945
976
  values = list(self.notes)
@@ -84,6 +84,7 @@ def analyze(
84
84
  else:
85
85
  model_types: dict[FileSuffix, type[NativeBinaryAnalyzer]] = {
86
86
  "csv": models.CsvModel,
87
+ "tsv": models.CsvModel,
87
88
  "epub": models.EpubModel,
88
89
  "doc": models.DocModel,
89
90
  "docx": models.DocxModel,
@@ -8,11 +8,16 @@ from pathlib import Path
8
8
 
9
9
  @dataclass(frozen=True, slots=True)
10
10
  class HtmlSourceContext:
11
- """保存相对链接解析及 HTML 解码所需的来源上下文。"""
11
+ """保存相对链接解析及 HTML 解码所需的来源上下文。
12
+
13
+ fetch_remote_images 默认关闭,远程图片仅记录 URL;开启后解析阶段会对受限
14
+ HTTP(S) 图片发起网络请求并内嵌,不可信输入的 SSRF 风险由调用者承担。
15
+ """
12
16
 
13
17
  source_uri: str | None = None
14
18
  local_resource_root: Path | None = None
15
19
  transport_encoding: str | None = None
20
+ fetch_remote_images: bool = False
16
21
 
17
22
 
18
23
  __all__ = ["HtmlSourceContext"]
@@ -279,13 +279,13 @@ def _has_rtf_signature_by_path(file_path: Path) -> bool:
279
279
 
280
280
 
281
281
  def _resolve_signatureless_csv_suffix(detected_suffix: str, file_path: str | Path | None) -> str:
282
- """以 .csv/.tsv 扩展名兜底无签名分隔文本,并保留强内容类型的优先级。"""
282
+ """以 .csv/.tsv 扩展名兜底无签名分隔文本:按扩展名返回独立后缀,并保留强内容类型的优先级。"""
283
283
  extension = Path(file_path).suffix.lower().lstrip(".") if file_path else ""
284
284
  if extension in CSV_EXTENSIONS:
285
285
  if detected_suffix in _STRONG_CONTENT_SUFFIXES:
286
286
  return detected_suffix
287
- return "csv"
288
- if detected_suffix == "csv":
287
+ return extension
288
+ if detected_suffix in ("csv", "tsv"):
289
289
  if extension in ODF_MIMETYPE_SUFFIXES.values():
290
290
  return "txt"
291
291
  return extension or "txt"
@@ -65,7 +65,8 @@ FILE_TYPE_BY_EXTENSION: dict[str, str] = {
65
65
  **dict.fromkeys(IMAGE_EXTENSIONS, "image"),
66
66
  **{ext: ext for ext in OFFICE_EXTENSIONS},
67
67
  **dict.fromkeys(HTML_EXTENSIONS, "html"),
68
- **dict.fromkeys(CSV_EXTENSIONS, "csv"),
68
+ "csv": "csv",
69
+ "tsv": "tsv",
69
70
  **dict.fromkeys(EPUB_EXTENSIONS, "epub"),
70
71
  **dict.fromkeys(OFD_EXTENSIONS, "ofd"),
71
72
  "txt": "text",
@@ -56,6 +56,7 @@ FileSuffix: TypeAlias = Literal[
56
56
  "xlsx",
57
57
  "rtf",
58
58
  "csv",
59
+ "tsv",
59
60
  "epub",
60
61
  "html",
61
62
  "ofd",
@@ -1,3 +1,3 @@
1
- __version__ = "0.4.8"
1
+ __version__ = "0.4.10"
2
2
 
3
3
  __all__ = ["__version__"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.8
3
+ Version: 0.4.10
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
@@ -77,13 +77,12 @@ DocVortex is a standalone Python engine for parsing and converting documents.
77
77
  It reads native text and document structure into a unified representation,
78
78
  then exports the result in the formats your workflow needs.
79
79
 
80
- - **Multi-format input** — read text PDFs, Office files, OpenDocument files, EPUB, HTML, OFD and CSV.
80
+ - **Multi-format input** — read text PDFs, Office files, OpenDocument files, EPUB, HTML, OFD, CSV and TSV.
81
81
  - **Parse once, export many times** — reuse the same result for Markdown, HTML, LaTeX, DOCX, EPUB, PDF and structured JSON.
82
82
  - **Portable results** — save document structure and image assets in a Bundle, then export again without the source file.
83
83
  - **Composable APIs** — use the complete pipeline or integrate analysis, postprocessing and rendering separately.
84
84
 
85
- Native parsing works without an OCR or VLM inference service. Use DocVortex
86
- directly through its CLI or Python SDK, independently of MinerU.
85
+ Native parsing works without an OCR or VLM inference service. Use DocVortex directly through its CLI or Python SDK.
87
86
 
88
87
  ![DocVortex pipeline: native documents become a unified representation, then Markdown, HTML, LaTeX, DOCX, EPUB, PDF or structured JSON.](https://gcore.jsdelivr.net/gh/myhloli/DocVortex@main/docs/images/docvortex-overview.jpg)
89
88
 
@@ -135,7 +134,7 @@ use `overwrite=True` in Python or `--overwrite` in the CLI to replace them.
135
134
  | PDF with native text | PDF |
136
135
  | Word & rich text | DOC, DOCX, RTF |
137
136
  | Presentations | PPT, PPTX |
138
- | Spreadsheets | XLS, XLSX, CSV |
137
+ | Spreadsheets | XLS, XLSX, CSV, TSV |
139
138
  | OpenDocument | ODT, ODS, ODP |
140
139
  | E-books & web documents | EPUB, HTML |
141
140
  | Open Fixed-layout Document | OFD |
@@ -430,7 +430,6 @@ src/docvortex/render/_internal/pdf/title_layout.py
430
430
  src/docvortex/render/_internal/structured_content/__init__.py
431
431
  src/docvortex/render/_internal/structured_content/renderer.py
432
432
  src/docvortex/resources/epub/docvortex.css
433
- src/docvortex/resources/fasttext-langdetect/lid.176.ftz
434
433
  src/docvortex/resources/fonts/DroidSansFallbackFull.ttf
435
434
  src/docvortex/resources/fonts/NOTICE
436
435
  src/docvortex/resources/fonts/manifest.json
@@ -20,7 +20,7 @@ def isolated_logger() -> Iterator[None]:
20
20
  logger.remove()
21
21
  yield
22
22
  logger.remove()
23
- logger.add(sys.stderr)
23
+ logger.add(sys.stderr, level="INFO")
24
24
 
25
25
 
26
26
  class _DummyPDFDocument:
@@ -1,4 +1,4 @@
1
- """覆盖全部十五种原生文档输入与七种输出的独立端到端矩阵。"""
1
+ """覆盖全部十六种原生文档输入与七种输出的独立端到端矩阵。"""
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -27,6 +27,8 @@ def source_payload(suffix: str) -> bytes:
27
27
  return builders[suffix]()
28
28
  if suffix == "csv":
29
29
  return b"name,value\nalpha,1\nbeta,2\n"
30
+ if suffix == "tsv":
31
+ return b"name\tvalue\nalpha\t1\nbeta\t2\n"
30
32
  if suffix == "html":
31
33
  return b"<html><h1>Title</h1><p>Native conversion</p></html>"
32
34
  if suffix == "pdf":
@@ -35,7 +37,7 @@ def source_payload(suffix: str) -> bytes:
35
37
 
36
38
 
37
39
  @pytest.mark.parametrize(
38
- "suffix", ["pdf", "doc", "docx", "ppt", "pptx", "xls", "xlsx", "rtf", "csv", "html", "epub", "ofd", "odt", "ods", "odp"]
40
+ "suffix", ["pdf", "doc", "docx", "ppt", "pptx", "xls", "xlsx", "rtf", "csv", "tsv", "html", "epub", "ofd", "odt", "ods", "odp"]
39
41
  )
40
42
  def test_all_native_formats_render_all_targets(suffix: str, monkeypatch: pytest.MonkeyPatch) -> None:
41
43
  """每种原生格式完成分析、后处理和七种目标编码,不导入宿主。"""
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import codecs
4
4
  from io import BytesIO
5
+ from pathlib import Path
5
6
 
6
7
  import pytest
7
8
  from _native_test_utils import analyze_native_test_document
@@ -9,6 +10,7 @@ from bs4 import BeautifulSoup
9
10
 
10
11
  from docvortex.analyzers.native import CsvModel
11
12
  from docvortex.analyzers.native import csv as csv_module
13
+ from docvortex.document.detection import guess_suffix_by_bytes, guess_suffix_by_path
12
14
  from docvortex.render.html import render_html
13
15
  from docvortex.render.markdown import render_markdown
14
16
  from docvortex.schema import BlockType
@@ -169,3 +171,45 @@ def test_csv_default_grid_budget_rejects_wide_dom_before_rendering() -> None:
169
171
 
170
172
  with pytest.raises(ValueError, match="max_grid_slots"):
171
173
  CsvModel().predict(BytesIO(payload))
174
+
175
+
176
+ def test_delimited_extension_resolves_to_independent_suffix() -> None:
177
+ """以 .csv/.tsv 路径兜底时按扩展名返回独立后缀,不再把 tsv 折叠为 csv。"""
178
+ payload = b"name,city\nAlice,London\n"
179
+
180
+ assert guess_suffix_by_bytes(payload, "demo.csv") == "csv"
181
+ assert guess_suffix_by_bytes(payload, "demo.tsv") == "tsv"
182
+
183
+
184
+ def test_tsv_signatureless_bytes_without_path_require_explicit_suffix() -> None:
185
+ """无路径字节流不自动进入 tsv 解析,必须显式 file_suffix(与 csv 对称)。"""
186
+ payload = b"name\tcity\nAlice\tLondon\nBob\tParis\n" * 5
187
+
188
+ assert guess_suffix_by_bytes(payload) == "txt"
189
+
190
+
191
+ def test_strong_content_signature_overrides_tsv_extension_fallback() -> None:
192
+ """RTF 强内容签名必须覆盖 .tsv 的无签名扩展名兜底。"""
193
+ payload = b"\xef\xbb\xbf \r\n{\\RTF1\\ANSI body}"
194
+
195
+ assert guess_suffix_by_bytes(payload, "disguised.tsv") == "rtf"
196
+
197
+
198
+ def test_tsv_path_detection_returns_independent_suffix(tmp_path: Path) -> None:
199
+ """真实 .tsv 路径按独立后缀识别。"""
200
+ tsv_path = tmp_path / "demo.tsv"
201
+ tsv_path.write_bytes("姓名\t年龄\n张三\t30\n李四\t40\n".encode())
202
+
203
+ assert guess_suffix_by_path(tsv_path) == "tsv"
204
+
205
+
206
+ def test_tsv_uses_shared_csv_engine_and_records_independent_file_suffix() -> None:
207
+ """tsv 复用 CSV 引擎与自动分隔符嗅探,并如实记录独立 file_suffix。"""
208
+ payload = "姓名\t年龄\n张三\t30\n李四\t40\n".encode()
209
+ middle, _ = analyze_native_test_document(payload, file_suffix="tsv")
210
+
211
+ assert middle.metadata.file_suffix == "tsv"
212
+ assert len(middle.pages) == 1
213
+ markdown = render_markdown(middle)
214
+ assert "张三" in markdown
215
+ assert "30" in markdown