docvortex 0.4.9__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.9/src/docvortex.egg-info → docvortex-0.4.10}/PKG-INFO +2 -3
  2. {docvortex-0.4.9 → docvortex-0.4.10}/README.md +1 -2
  3. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/constants.py +2 -0
  4. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/resources.py +40 -2
  5. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/styles.py +7 -3
  6. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/table.py +3 -9
  7. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/text.py +55 -24
  8. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/contracts.py +6 -1
  9. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/version.py +1 -1
  10. {docvortex-0.4.9 → docvortex-0.4.10/src/docvortex.egg-info}/PKG-INFO +2 -3
  11. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex.egg-info/SOURCES.txt +0 -1
  12. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_cli_logging.py +1 -1
  13. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_html.py +136 -0
  14. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_odf.py +155 -0
  15. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_office_demo_pages.py +3 -2
  16. docvortex-0.4.9/src/docvortex/resources/fasttext-langdetect/lid.176.ftz +0 -0
  17. {docvortex-0.4.9 → docvortex-0.4.10}/LICENSE.md +0 -0
  18. {docvortex-0.4.9 → docvortex-0.4.10}/MANIFEST.in +0 -0
  19. {docvortex-0.4.9 → docvortex-0.4.10}/demo/README.md +0 -0
  20. {docvortex-0.4.9 → docvortex-0.4.10}/demo/demo.py +0 -0
  21. {docvortex-0.4.9 → docvortex-0.4.10}/demo/office_docs/README.md +0 -0
  22. {docvortex-0.4.9 → docvortex-0.4.10}/demo/office_docs/docx_01.doc +0 -0
  23. {docvortex-0.4.9 → docvortex-0.4.10}/demo/office_docs/docx_01.docx +0 -0
  24. {docvortex-0.4.9 → docvortex-0.4.10}/demo/office_docs/pptx_01.ppt +0 -0
  25. {docvortex-0.4.9 → docvortex-0.4.10}/demo/office_docs/pptx_01.pptx +0 -0
  26. {docvortex-0.4.9 → docvortex-0.4.10}/demo/office_docs/rtf_01.rtf +0 -0
  27. {docvortex-0.4.9 → docvortex-0.4.10}/demo/office_docs/xlsx_01.xls +0 -0
  28. {docvortex-0.4.9 → docvortex-0.4.10}/demo/office_docs/xlsx_01.xlsx +0 -0
  29. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
  30. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
  31. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/caibao1.pdf +0 -0
  32. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/demo1.pdf +0 -0
  33. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/demo2.pdf +0 -0
  34. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/demo3.pdf +0 -0
  35. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/demo4.pdf +0 -0
  36. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/demo6.pdf +0 -0
  37. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
  38. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
  39. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
  40. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
  41. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs/small_ocr.pdf +0 -0
  42. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
  43. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
  44. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
  45. {docvortex-0.4.9 → docvortex-0.4.10}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
  46. {docvortex-0.4.9 → docvortex-0.4.10}/docs/HTML_PROTOCOL.md +0 -0
  47. {docvortex-0.4.9 → docvortex-0.4.10}/docs/JSON_PROTOCOL.md +0 -0
  48. {docvortex-0.4.9 → docvortex-0.4.10}/docs/METADATA.md +0 -0
  49. {docvortex-0.4.9 → docvortex-0.4.10}/docs/PDF_FONTS.md +0 -0
  50. {docvortex-0.4.9 → docvortex-0.4.10}/docs/RENDER_OWNERSHIP.md +0 -0
  51. {docvortex-0.4.9 → docvortex-0.4.10}/docs/USAGE.md +0 -0
  52. {docvortex-0.4.9 → docvortex-0.4.10}/docs/flash-manual-annotations-2026-09-15.md +0 -0
  53. {docvortex-0.4.9 → docvortex-0.4.10}/docs/flash-round2-annotations-2026-09-15.md +0 -0
  54. {docvortex-0.4.9 → docvortex-0.4.10}/docs/flash-rule-generalization-2026-09-15.md +0 -0
  55. {docvortex-0.4.9 → docvortex-0.4.10}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
  56. {docvortex-0.4.9 → docvortex-0.4.10}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
  57. {docvortex-0.4.9 → docvortex-0.4.10}/docs/flash-title-coverage-2026-09-16.md +0 -0
  58. {docvortex-0.4.9 → docvortex-0.4.10}/docs/sdk-0.4.md +0 -0
  59. {docvortex-0.4.9 → docvortex-0.4.10}/pyproject.toml +0 -0
  60. {docvortex-0.4.9 → docvortex-0.4.10}/schemas/middle-2.0.json +0 -0
  61. {docvortex-0.4.9 → docvortex-0.4.10}/schemas/model-2.0.json +0 -0
  62. {docvortex-0.4.9 → docvortex-0.4.10}/setup.cfg +0 -0
  63. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/__init__.py +0 -0
  64. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/__init__.py +0 -0
  65. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/__init__.py +0 -0
  66. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
  67. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
  68. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/image.py +0 -0
  69. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
  70. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
  71. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
  72. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
  73. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
  74. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
  75. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/names.py +0 -0
  76. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
  77. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/contracts.py +0 -0
  78. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/csv.py +0 -0
  79. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
  80. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/constants.py +0 -0
  81. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/converter.py +0 -0
  82. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/errors.py +0 -0
  83. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
  84. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/package.py +0 -0
  85. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/properties.py +0 -0
  86. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
  87. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/__init__.py +0 -0
  88. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/anchors.py +0 -0
  89. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/converter.py +0 -0
  90. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/document.py +0 -0
  91. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/errors.py +0 -0
  92. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/metadata.py +0 -0
  93. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/selector.py +0 -0
  94. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/models.py +0 -0
  95. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
  96. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
  97. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
  98. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
  99. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
  100. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
  101. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/images.py +0 -0
  102. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
  103. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/models.py +0 -0
  104. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/package.py +0 -0
  105. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/path.py +0 -0
  106. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
  107. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
  108. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
  109. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/table.py +0 -0
  110. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/text.py +0 -0
  111. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
  112. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/__init__.py +0 -0
  113. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
  114. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
  115. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
  116. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
  117. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
  118. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
  119. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
  120. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
  121. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
  122. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
  123. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
  124. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
  125. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
  126. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
  127. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
  128. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
  129. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
  130. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
  131. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
  132. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
  133. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
  134. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
  135. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
  136. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
  137. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
  138. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
  139. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
  140. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
  141. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
  142. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
  143. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
  144. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
  145. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
  146. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
  147. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/errors.py +0 -0
  148. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/image.py +0 -0
  149. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
  150. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
  151. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
  152. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
  153. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/limits.py +0 -0
  154. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/metadata.py +0 -0
  155. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
  156. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
  157. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
  158. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
  159. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
  160. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
  161. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
  162. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
  163. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
  164. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/opc.py +0 -0
  165. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
  166. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
  167. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
  168. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
  169. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
  170. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
  171. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
  172. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
  173. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
  174. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
  175. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
  176. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
  177. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
  178. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
  179. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
  180. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
  181. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
  182. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
  183. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
  184. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
  185. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
  186. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
  187. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
  188. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
  189. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
  190. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
  191. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
  192. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
  193. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/streams.py +0 -0
  194. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
  195. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
  196. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
  197. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
  198. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
  199. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
  200. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
  201. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
  202. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
  203. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
  204. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
  205. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
  206. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
  207. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
  208. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
  209. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
  210. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
  211. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
  212. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
  213. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
  214. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
  215. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
  216. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
  217. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
  218. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
  219. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
  220. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
  221. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
  222. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
  223. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
  224. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
  225. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
  226. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
  227. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
  228. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
  229. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
  230. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
  231. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
  232. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
  233. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
  234. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
  235. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
  236. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
  237. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
  238. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
  239. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
  240. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/models.py +0 -0
  241. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
  242. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
  243. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
  244. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
  245. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
  246. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
  247. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
  248. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
  249. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
  250. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
  251. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
  252. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
  253. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
  254. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
  255. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
  256. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
  257. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
  258. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
  259. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
  260. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
  261. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
  262. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
  263. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
  264. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
  265. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
  266. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
  267. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
  268. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
  269. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
  270. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
  271. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
  272. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
  273. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
  274. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
  275. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
  276. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/analyzers/pdf.py +0 -0
  277. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/api.py +0 -0
  278. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/assets/__init__.py +0 -0
  279. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/assets/images.py +0 -0
  280. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/assets/store.py +0 -0
  281. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/cli.py +0 -0
  282. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/codecs/__init__.py +0 -0
  283. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/codecs/html/__init__.py +0 -0
  284. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/codecs/html/contracts.py +0 -0
  285. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/codecs/html/materializer.py +0 -0
  286. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/codecs/html/parser.py +0 -0
  287. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/codecs/html/resources.py +0 -0
  288. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/codecs/json.py +0 -0
  289. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/__init__.py +0 -0
  290. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/inline.py +0 -0
  291. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/links.py +0 -0
  292. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/markup/__init__.py +0 -0
  293. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/markup/anchors.py +0 -0
  294. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/markup/formula.py +0 -0
  295. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/markup/projector.py +0 -0
  296. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/markup/styles.py +0 -0
  297. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/mathml.py +0 -0
  298. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/normalization.py +0 -0
  299. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/spans.py +0 -0
  300. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/table/__init__.py +0 -0
  301. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/table/blocks.py +0 -0
  302. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/table/content.py +0 -0
  303. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/table/document.py +0 -0
  304. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/table/html.py +0 -0
  305. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/table/models.py +0 -0
  306. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/table/rules.py +0 -0
  307. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/table/structure.py +0 -0
  308. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/text.py +0 -0
  309. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/content/tree.py +0 -0
  310. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/__init__.py +0 -0
  311. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/detection.py +0 -0
  312. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/filetypes.py +0 -0
  313. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/page_range.py +0 -0
  314. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/__init__.py +0 -0
  315. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/_document.py +0 -0
  316. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/classify.py +0 -0
  317. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/constants.py +0 -0
  318. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/font_runtime.py +0 -0
  319. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/images.py +0 -0
  320. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/layout.py +0 -0
  321. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/metadata.py +0 -0
  322. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/native_annotations.py +0 -0
  323. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/native_contracts.py +0 -0
  324. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/native_coordinates.py +0 -0
  325. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
  326. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/native_objects.py +0 -0
  327. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
  328. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/pdfium.py +0 -0
  329. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/raster.py +0 -0
  330. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/text/__init__.py +0 -0
  331. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/text/_contracts.py +0 -0
  332. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/text/dedup.py +0 -0
  333. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/text/extract.py +0 -0
  334. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/text/geometry.py +0 -0
  335. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/text/groups.py +0 -0
  336. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/pdf/visuals.py +0 -0
  337. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/properties.py +0 -0
  338. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/document/source.py +0 -0
  339. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/errors.py +0 -0
  340. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/export/__init__.py +0 -0
  341. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/export/bundle.py +0 -0
  342. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/export/files.py +0 -0
  343. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/export/middle.py +0 -0
  344. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/foundation/__init__.py +0 -0
  345. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/foundation/_coordinates.py +0 -0
  346. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/foundation/_geometry.py +0 -0
  347. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/foundation/_hyperlink.py +0 -0
  348. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/foundation/_image.py +0 -0
  349. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/foundation/_image_operations.py +0 -0
  350. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/foundation/_image_payload.py +0 -0
  351. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/foundation/_text.py +0 -0
  352. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/foundation/image_encoding.py +0 -0
  353. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/foundation/language.py +0 -0
  354. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/foundation/type_identity.py +0 -0
  355. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/foundation/xml_names.py +0 -0
  356. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/geometry.py +0 -0
  357. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/metadata.py +0 -0
  358. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/options.py +0 -0
  359. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/postprocess/__init__.py +0 -0
  360. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/postprocess/content.py +0 -0
  361. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/postprocess/document.py +0 -0
  362. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/postprocess/lists.py +0 -0
  363. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/postprocess/page_blocks.py +0 -0
  364. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/postprocess/pages.py +0 -0
  365. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/postprocess/paragraphs.py +0 -0
  366. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/postprocess/visual.py +0 -0
  367. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/public_api.py +0 -0
  368. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/__init__.py +0 -0
  369. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/__init__.py +0 -0
  370. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/common/__init__.py +0 -0
  371. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/common/context.py +0 -0
  372. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/common/html_table.py +0 -0
  373. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/common/index.py +0 -0
  374. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/common/list_items.py +0 -0
  375. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/common/planner.py +0 -0
  376. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/__init__.py +0 -0
  377. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/assets.py +0 -0
  378. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/inline.py +0 -0
  379. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/math.py +0 -0
  380. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/renderer.py +0 -0
  381. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/styles.py +0 -0
  382. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/table.py +0 -0
  383. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/epub/__init__.py +0 -0
  384. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/epub/assets.py +0 -0
  385. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/epub/package.py +0 -0
  386. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/epub/renderer.py +0 -0
  387. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/html/__init__.py +0 -0
  388. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/html/inline.py +0 -0
  389. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/html/renderer.py +0 -0
  390. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
  391. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/html/table.py +0 -0
  392. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/__init__.py +0 -0
  393. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/assets.py +0 -0
  394. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/inline.py +0 -0
  395. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/renderer.py +0 -0
  396. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/table.py +0 -0
  397. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
  398. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/assets.py +0 -0
  399. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
  400. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
  401. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/inline.py +0 -0
  402. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
  403. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/table.py +0 -0
  404. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
  405. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/assets.py +0 -0
  406. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
  407. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
  408. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/formula.py +0 -0
  409. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
  410. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/inline.py +0 -0
  411. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/original.py +0 -0
  412. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
  413. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/paragraph.py +0 -0
  414. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
  415. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/styles.py +0 -0
  416. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/table.py +0 -0
  417. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
  418. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
  419. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
  420. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
  421. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
  422. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/api.py +0 -0
  423. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/contracts.py +0 -0
  424. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/docx.py +0 -0
  425. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/epub.py +0 -0
  426. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/fragments.py +0 -0
  427. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/html.py +0 -0
  428. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/latex.py +0 -0
  429. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/markdown.py +0 -0
  430. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/pdf.py +0 -0
  431. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/render/structured_content.py +0 -0
  432. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/resources/epub/docvortex.css +0 -0
  433. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
  434. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/resources/fonts/NOTICE +0 -0
  435. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/resources/fonts/manifest.json +0 -0
  436. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/resources/html/docvortex.css +0 -0
  437. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/resources/html/docvortex.min.css +0 -0
  438. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
  439. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/result.py +0 -0
  440. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/schema.py +0 -0
  441. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex/visualization.py +0 -0
  442. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex.egg-info/dependency_links.txt +0 -0
  443. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex.egg-info/entry_points.txt +0 -0
  444. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex.egg-info/requires.txt +0 -0
  445. {docvortex-0.4.9 → docvortex-0.4.10}/src/docvortex.egg-info/top_level.txt +0 -0
  446. {docvortex-0.4.9 → docvortex-0.4.10}/tests/benchmarks/flash_pdf.py +0 -0
  447. {docvortex-0.4.9 → docvortex-0.4.10}/tests/benchmarks/native_pdf_table.py +0 -0
  448. {docvortex-0.4.9 → docvortex-0.4.10}/tests/benchmarks/pdf_render.py +0 -0
  449. {docvortex-0.4.9 → docvortex-0.4.10}/tests/benchmarks/pipeline.py +0 -0
  450. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
  451. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_layout_block_expectations.json +0 -0
  452. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
  453. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
  454. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_manual_annotations.json +0 -0
  455. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_manual_review_decisions.json +0 -0
  456. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_reviewed_history.json +0 -0
  457. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_round2_annotations.json +0 -0
  458. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_round2_review_decisions.json +0 -0
  459. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_round3_annotations.json +0 -0
  460. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
  461. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_round3_review_decisions.json +0 -0
  462. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
  463. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
  464. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
  465. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
  466. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
  467. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
  468. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/pdf_char_dedup.json +0 -0
  469. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
  470. {docvortex-0.4.9 → docvortex-0.4.10}/tests/fixtures/rtf/semantic.rtf +0 -0
  471. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_architecture.py +0 -0
  472. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_benchmark_entrypoint.py +0 -0
  473. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_brand_protocol.py +0 -0
  474. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_complete_pipeline.py +0 -0
  475. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_converter_lifecycle.py +0 -0
  476. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_document_envelope.py +0 -0
  477. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_document_metadata.py +0 -0
  478. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_format_matrix.py +0 -0
  479. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_geometry_api.py +0 -0
  480. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_history_geometry_tools.py +0 -0
  481. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_html_namespace.py +0 -0
  482. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_mixed_font_script_reference.py +0 -0
  483. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_pdf_analysis_api.py +0 -0
  484. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_pdf_font_geometry.py +0 -0
  485. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_pdf_font_runtime.py +0 -0
  486. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_pdf_model_text_normalization.py +0 -0
  487. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_pdf_output_text.py +0 -0
  488. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_pdf_render_pool.py +0 -0
  489. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_pdf_source_row_merging.py +0 -0
  490. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_pdf_symbol_normalization.py +0 -0
  491. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_public_export_api.py +0 -0
  492. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_public_image_api.py +0 -0
  493. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_public_pipeline.py +0 -0
  494. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_refactor_raster.py +0 -0
  495. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_refactor_rendering.py +0 -0
  496. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_refactor_resources.py +0 -0
  497. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_release_ci_gate.py +0 -0
  498. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_render_ownership.py +0 -0
  499. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_renderer_branding.py +0 -0
  500. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_shared_boundaries.py +0 -0
  501. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_system_font_pdf_pipeline.py +0 -0
  502. {docvortex-0.4.9 → docvortex-0.4.10}/tests/test_validated_geometry.py +0 -0
  503. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
  504. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_epub_test_utils.py +0 -0
  505. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_flash_pdf_test_utils.py +0 -0
  506. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_image_mtef_test_utils.py +0 -0
  507. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_legacy_doc_test_utils.py +0 -0
  508. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
  509. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_legacy_xls_test_utils.py +0 -0
  510. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_metafile_test_utils.py +0 -0
  511. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_mtef_test_utils.py +0 -0
  512. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_mtef_v5_test_utils.py +0 -0
  513. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_native_test_utils.py +0 -0
  514. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_odf_test_utils.py +0 -0
  515. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_ofd_test_utils.py +0 -0
  516. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
  517. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
  518. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/_span_test_utils.py +0 -0
  519. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
  520. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
  521. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
  522. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
  523. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
  524. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
  525. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
  526. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
  527. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
  528. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
  529. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
  530. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
  531. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
  532. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
  533. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
  534. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
  535. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
  536. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
  537. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
  538. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
  539. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
  540. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
  541. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
  542. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
  543. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
  544. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
  545. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
  546. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
  547. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
  548. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/pdfs/test.pdf +0 -0
  549. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_backend_architecture.py +0 -0
  550. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_backend_block_object_regressions.py +0 -0
  551. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_docx_assets.py +0 -0
  552. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_docx_complex_fields.py +0 -0
  553. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_docx_math.py +0 -0
  554. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_docx_render.py +0 -0
  555. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_docx_special_char_tables.py +0 -0
  556. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_docx_table.py +0 -0
  557. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_emfplus_integration.py +0 -0
  558. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_epub_backlinks.py +0 -0
  559. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_epub_quoted_note_types.py +0 -0
  560. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_epub_render.py +0 -0
  561. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
  562. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_csv.py +0 -0
  563. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_docx_equationxml.py +0 -0
  564. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_epub.py +0 -0
  565. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_image_mtef.py +0 -0
  566. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
  567. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_doc.py +0 -0
  568. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
  569. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_ppt.py +0 -0
  570. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_xls.py +0 -0
  571. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
  572. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_manual_annotations.py +0 -0
  573. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_markup_anchors.py +0 -0
  574. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_model.py +0 -0
  575. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_mtef_v5.py +0 -0
  576. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_ofd.py +0 -0
  577. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_office_image_mtef.py +0 -0
  578. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_office_metafile.py +0 -0
  579. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_office_models.py +0 -0
  580. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
  581. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
  582. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_office_title_types.py +0 -0
  583. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
  584. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
  585. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
  586. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
  587. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
  588. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
  589. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_extractor.py +0 -0
  590. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_formulas.py +0 -0
  591. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_graphics.py +0 -0
  592. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
  593. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
  594. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
  595. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_native_text.py +0 -0
  596. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
  597. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
  598. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_samples.py +0 -0
  599. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_scripts.py +0 -0
  600. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_semantics.py +0 -0
  601. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_tables.py +0 -0
  602. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
  603. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
  604. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_titles.py +0 -0
  605. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
  606. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_round2_annotations.py +0 -0
  607. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_round3_annotations.py +0 -0
  608. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_rtf.py +0 -0
  609. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_rule_generalization.py +0 -0
  610. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_shared_helpers.py +0 -0
  611. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_spatial_evidence.py +0 -0
  612. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
  613. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_guess_suffix_ole2.py +0 -0
  614. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_html_css_build.py +0 -0
  615. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_html_render.py +0 -0
  616. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_html_security.py +0 -0
  617. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
  618. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_latex_render.py +0 -0
  619. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_markdown_render.py +0 -0
  620. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_middle_json_block_models.py +0 -0
  621. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_middle_json_export.py +0 -0
  622. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_middle_json_validator.py +0 -0
  623. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_model_json.py +0 -0
  624. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table.py +0 -0
  625. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
  626. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
  627. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
  628. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
  629. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
  630. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_ofd_assembly.py +0 -0
  631. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_ofd_vector_tables.py +0 -0
  632. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_office_demo_exports.py +0 -0
  633. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_office_parser_regressions.py +0 -0
  634. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_cjk_style.py +0 -0
  635. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
  636. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_classify.py +0 -0
  637. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_demo_links.py +0 -0
  638. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
  639. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_document.py +0 -0
  640. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_formula_layout.py +0 -0
  641. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_object_clipping.py +0 -0
  642. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_original_layout.py +0 -0
  643. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_pagination.py +0 -0
  644. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
  645. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_render.py +0 -0
  646. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
  647. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_structured_tables.py +0 -0
  648. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_table_cache.py +0 -0
  649. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_table_round2.py +0 -0
  650. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_text_dedup.py +0 -0
  651. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_text_styles.py +0 -0
  652. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_title_font_plan.py +0 -0
  653. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_title_space.py +0 -0
  654. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_pdf_visualization.py +0 -0
  655. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_postprocess_page_blocks.py +0 -0
  656. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_postprocess_pages.py +0 -0
  657. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_postprocess_paragraphs.py +0 -0
  658. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_postprocess_visual.py +0 -0
  659. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_render_api.py +0 -0
  660. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_render_html_table.py +0 -0
  661. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_render_image_renderer.py +0 -0
  662. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_render_list_index_utils.py +0 -0
  663. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_structured_content_render.py +0 -0
  664. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_table_merge.py +0 -0
  665. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_table_merge_cell_merge.py +0 -0
  666. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_text_block_anchor.py +0 -0
  667. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_text_boundary_rules.py +0 -0
  668. {docvortex-0.4.9 → docvortex-0.4.10}/tests/unittest/test_text_utils.py +0 -0
  669. {docvortex-0.4.9 → docvortex-0.4.10}/tools/__init__.py +0 -0
  670. {docvortex-0.4.9 → docvortex-0.4.10}/tools/build_html_css.py +0 -0
  671. {docvortex-0.4.9 → docvortex-0.4.10}/tools/calibrate_pdf_geometry.py +0 -0
  672. {docvortex-0.4.9 → docvortex-0.4.10}/tools/capture_baseline.py +0 -0
  673. {docvortex-0.4.9 → docvortex-0.4.10}/tools/capture_platform_layout.py +0 -0
  674. {docvortex-0.4.9 → docvortex-0.4.10}/tools/compare_font_platforms.py +0 -0
  675. {docvortex-0.4.9 → 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.9
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
@@ -82,8 +82,7 @@ then exports the result in the formats your workflow needs.
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
 
@@ -28,8 +28,7 @@ then exports the result in the formats your workflow needs.
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
 
@@ -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)
@@ -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"]
@@ -1,3 +1,3 @@
1
- __version__ = "0.4.9"
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.9
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
@@ -82,8 +82,7 @@ then exports the result in the formats your workflow needs.
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
 
@@ -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,7 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import base64
4
+ import threading
5
+ from collections.abc import Iterator
6
+ from contextlib import contextmanager
4
7
  from copy import copy
8
+ from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
5
9
  from io import BytesIO
6
10
  from pathlib import Path
7
11
 
@@ -19,6 +23,7 @@ from docvortex.analyzers.native.html import HtmlResourceLimitError
19
23
  from docvortex.analyzers.native.html import document as html_document_module
20
24
  from docvortex.analyzers.native.html import resources as html_resources_module
21
25
  from docvortex.analyzers.native.html import selector as html_selector_module
26
+ from docvortex.analyzers.native.html.constants import MAX_HTML_IMAGE_BYTES
22
27
  from docvortex.analyzers.native.html.resources import HtmlResourceContext
23
28
  from docvortex.api import parse
24
29
  from docvortex.codecs.html import decode_docvortex_html_wire
@@ -1982,3 +1987,134 @@ def test_html_invalid_mathml_and_asciimath_remain_visible_text() -> None:
1982
1987
 
1983
1988
  assert "not-latex" in markdown and "sqrt(2)" in markdown
1984
1989
  assert not any(block.type == BlockType.EQUATION for block in middle.pages[0].blocks)
1990
+
1991
+
1992
+ def _tiny_png_bytes() -> bytes:
1993
+ """构造 1x1 红色像素的最小合法 PNG。"""
1994
+ buffer = BytesIO()
1995
+ Image.new("RGB", (1, 1), (255, 0, 0)).save(buffer, format="PNG")
1996
+ return buffer.getvalue()
1997
+
1998
+
1999
+ @contextmanager
2000
+ def _local_image_server(routes: dict[str, bytes]) -> Iterator[tuple[str, list[str]]]:
2001
+ """在回环地址启动按路径返回固定字节的计数服务,退出时关闭。"""
2002
+ hits: list[str] = []
2003
+
2004
+ class Handler(BaseHTTPRequestHandler):
2005
+ def do_GET(self) -> None:
2006
+ hits.append(self.path)
2007
+ body = routes[self.path]
2008
+ self.send_response(200)
2009
+ self.send_header("Content-Length", str(len(body)))
2010
+ self.end_headers()
2011
+ self.wfile.write(body)
2012
+
2013
+ def log_message(self, *args: object) -> None:
2014
+ return
2015
+
2016
+ server = ThreadingHTTPServer(("127.0.0.1", 0), Handler)
2017
+ threading.Thread(target=server.serve_forever, daemon=True).start()
2018
+ try:
2019
+ yield f"http://127.0.0.1:{server.server_address[1]}", hits
2020
+ finally:
2021
+ server.shutdown()
2022
+ server.server_close()
2023
+
2024
+
2025
+ def _remote_chart_middle(url: str) -> MiddleJson:
2026
+ """构造主图片指向远程 URL 的 chart wire 文档,复现导出 HTML 回灌场景。"""
2027
+ return MiddleJson.model_validate(
2028
+ {
2029
+ "pages": [
2030
+ {
2031
+ "page_idx": 0,
2032
+ "blocks": [
2033
+ {
2034
+ "type": "chart",
2035
+ "index": 0,
2036
+ "content": [{"type": "chart_body", "index": 0, "content": "", "image_url": url}],
2037
+ }
2038
+ ],
2039
+ }
2040
+ ],
2041
+ "is_full_document": True,
2042
+ "metadata": {"file_suffix": "html", "producer": {"name": "docvortex", "version": "0.2.0"}},
2043
+ "schema": "docvortex.middle",
2044
+ "schema_version": "2.0",
2045
+ }
2046
+ )
2047
+
2048
+
2049
+ def test_html_remote_images_stay_external_and_offline_by_default(tmp_path: Path) -> None:
2050
+ """默认不下载远程图片:保持外链、零网络请求,save_bundle 仍拒绝未物化图片。"""
2051
+ with _local_image_server({"/chart.png": _tiny_png_bytes()}) as (base, hits):
2052
+ url = f"{base}/chart.png"
2053
+ default = HtmlResourceContext(HtmlSourceContext())
2054
+ resolved = default.resolve_image(url, alt="chart")
2055
+ assert resolved is not None and resolved.image_url == url and not resolved.image_base64
2056
+
2057
+ rendered = render_html(_remote_chart_middle(url), standalone=False)
2058
+ result = parse(rendered.encode(), file_suffix="html")
2059
+ body = result.middle_json.pages[0].blocks[0].content[0]
2060
+ assert body.image_url == url and not body.image_path
2061
+
2062
+ with pytest.raises(ValueError, match="must be materialized"):
2063
+ result.save_bundle(tmp_path / "bundle")
2064
+ assert hits == []
2065
+
2066
+
2067
+ def test_html_remote_image_fetch_embeds_and_caches_by_url() -> None:
2068
+ """开启下载后有效图片内嵌为 data URI,同一 URL 复用缓存不重复请求。"""
2069
+ png = _tiny_png_bytes()
2070
+ with _local_image_server({"/chart.png": png}) as (base, hits):
2071
+ context = HtmlResourceContext(HtmlSourceContext(fetch_remote_images=True))
2072
+ first = context.resolve_image(f"{base}/chart.png", alt="chart")
2073
+ assert first is not None and first.image_url is None
2074
+ assert first.image_base64 is not None and first.image_base64.startswith("data:image/png;base64,")
2075
+ assert base64.b64decode(first.image_base64.split(",", 1)[1]) == png
2076
+ assert hits == ["/chart.png"]
2077
+
2078
+ second = context.resolve_image(f"{base}/chart.png", alt="chart")
2079
+ assert second is not None and second.image_base64 == first.image_base64
2080
+ assert hits == ["/chart.png"]
2081
+
2082
+
2083
+ def test_html_remote_image_fetch_falls_back_to_url_when_unavailable() -> None:
2084
+ """非图片字节或网络不可达时下载退回外链,不阻断解析。"""
2085
+ with _local_image_server({"/text.png": b"not-an-image"}) as (base, hits):
2086
+ context = HtmlResourceContext(HtmlSourceContext(fetch_remote_images=True))
2087
+ resolved = context.resolve_image(f"{base}/text.png", alt="chart")
2088
+ assert resolved is not None and resolved.image_url == f"{base}/text.png" and not resolved.image_base64
2089
+
2090
+ dead = "http://127.0.0.1:9/chart.png"
2091
+ resolved = context.resolve_image(dead)
2092
+ assert resolved is not None and resolved.image_url == dead and not resolved.image_base64
2093
+
2094
+
2095
+ def test_html_remote_image_fetch_rejects_oversized_download() -> None:
2096
+ """下载超过单图上限的远程图片时与本地文件一致地终止整份文档。"""
2097
+ oversized = b"\x89PNG\r\n\x1a\n" + b"\x00" * (MAX_HTML_IMAGE_BYTES + 1)
2098
+ with _local_image_server({"/big.png": oversized}) as (base, hits):
2099
+ context = HtmlResourceContext(HtmlSourceContext(fetch_remote_images=True))
2100
+ with pytest.raises(HtmlResourceLimitError, match="max_html_image_bytes"):
2101
+ context.resolve_image(f"{base}/big.png")
2102
+
2103
+
2104
+ def test_html_remote_image_fetch_roundtrips_into_saved_bundle(tmp_path: Path) -> None:
2105
+ """开启下载后:远程图片在解析阶段内嵌,save_bundle 不再依赖网络且图片入包。"""
2106
+ png = _tiny_png_bytes()
2107
+ with _local_image_server({"/chart.png": png}) as (base, hits):
2108
+ url = f"{base}/chart.png"
2109
+ rendered = render_html(_remote_chart_middle(url), standalone=False)
2110
+ result = parse(
2111
+ rendered.encode(),
2112
+ file_suffix="html",
2113
+ source_context=HtmlSourceContext(fetch_remote_images=True),
2114
+ )
2115
+ assert hits == ["/chart.png"]
2116
+ body = result.middle_json.pages[0].blocks[0].content[0]
2117
+ assert body.image_path and not body.image_url and not body.image_base64
2118
+
2119
+ result.save_bundle(tmp_path / "bundle")
2120
+ assert [path.read_bytes() for path in sorted((tmp_path / "bundle" / "images").glob("*"))] == [png]