docvortex 0.4.9__tar.gz → 0.4.11__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 (677) hide show
  1. {docvortex-0.4.9/src/docvortex.egg-info → docvortex-0.4.11}/PKG-INFO +2 -3
  2. {docvortex-0.4.9 → docvortex-0.4.11}/README.md +1 -2
  3. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/epub/xhtml.py +11 -2
  4. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/html/constants.py +2 -0
  5. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/html/resources.py +55 -5
  6. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/image.py +4 -0
  7. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/odf/styles.py +7 -3
  8. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/odf/table.py +3 -9
  9. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/odf/text.py +86 -26
  10. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/pptx/resources.py +22 -20
  11. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/mathml.py +23 -2
  12. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/contracts.py +6 -1
  13. docvortex-0.4.11/src/docvortex/foundation/_svg_raster.py +158 -0
  14. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/version.py +1 -1
  15. {docvortex-0.4.9 → docvortex-0.4.11/src/docvortex.egg-info}/PKG-INFO +2 -3
  16. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex.egg-info/SOURCES.txt +2 -1
  17. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_cli_logging.py +1 -1
  18. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_odf_test_utils.py +6 -1
  19. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_epub.py +49 -1
  20. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_html.py +173 -0
  21. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_odf.py +217 -0
  22. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_office_title_types.py +42 -10
  23. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_shared_helpers.py +47 -0
  24. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_office_demo_pages.py +3 -2
  25. docvortex-0.4.11/tests/unittest/test_svg_raster.py +79 -0
  26. docvortex-0.4.9/src/docvortex/resources/fasttext-langdetect/lid.176.ftz +0 -0
  27. {docvortex-0.4.9 → docvortex-0.4.11}/LICENSE.md +0 -0
  28. {docvortex-0.4.9 → docvortex-0.4.11}/MANIFEST.in +0 -0
  29. {docvortex-0.4.9 → docvortex-0.4.11}/demo/README.md +0 -0
  30. {docvortex-0.4.9 → docvortex-0.4.11}/demo/demo.py +0 -0
  31. {docvortex-0.4.9 → docvortex-0.4.11}/demo/office_docs/README.md +0 -0
  32. {docvortex-0.4.9 → docvortex-0.4.11}/demo/office_docs/docx_01.doc +0 -0
  33. {docvortex-0.4.9 → docvortex-0.4.11}/demo/office_docs/docx_01.docx +0 -0
  34. {docvortex-0.4.9 → docvortex-0.4.11}/demo/office_docs/pptx_01.ppt +0 -0
  35. {docvortex-0.4.9 → docvortex-0.4.11}/demo/office_docs/pptx_01.pptx +0 -0
  36. {docvortex-0.4.9 → docvortex-0.4.11}/demo/office_docs/rtf_01.rtf +0 -0
  37. {docvortex-0.4.9 → docvortex-0.4.11}/demo/office_docs/xlsx_01.xls +0 -0
  38. {docvortex-0.4.9 → docvortex-0.4.11}/demo/office_docs/xlsx_01.xlsx +0 -0
  39. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
  40. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
  41. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/caibao1.pdf +0 -0
  42. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/demo1.pdf +0 -0
  43. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/demo2.pdf +0 -0
  44. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/demo3.pdf +0 -0
  45. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/demo4.pdf +0 -0
  46. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/demo6.pdf +0 -0
  47. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
  48. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
  49. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
  50. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
  51. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs/small_ocr.pdf +0 -0
  52. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
  53. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
  54. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
  55. {docvortex-0.4.9 → docvortex-0.4.11}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
  56. {docvortex-0.4.9 → docvortex-0.4.11}/docs/HTML_PROTOCOL.md +0 -0
  57. {docvortex-0.4.9 → docvortex-0.4.11}/docs/JSON_PROTOCOL.md +0 -0
  58. {docvortex-0.4.9 → docvortex-0.4.11}/docs/METADATA.md +0 -0
  59. {docvortex-0.4.9 → docvortex-0.4.11}/docs/PDF_FONTS.md +0 -0
  60. {docvortex-0.4.9 → docvortex-0.4.11}/docs/RENDER_OWNERSHIP.md +0 -0
  61. {docvortex-0.4.9 → docvortex-0.4.11}/docs/USAGE.md +0 -0
  62. {docvortex-0.4.9 → docvortex-0.4.11}/docs/flash-manual-annotations-2026-09-15.md +0 -0
  63. {docvortex-0.4.9 → docvortex-0.4.11}/docs/flash-round2-annotations-2026-09-15.md +0 -0
  64. {docvortex-0.4.9 → docvortex-0.4.11}/docs/flash-rule-generalization-2026-09-15.md +0 -0
  65. {docvortex-0.4.9 → docvortex-0.4.11}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
  66. {docvortex-0.4.9 → docvortex-0.4.11}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
  67. {docvortex-0.4.9 → docvortex-0.4.11}/docs/flash-title-coverage-2026-09-16.md +0 -0
  68. {docvortex-0.4.9 → docvortex-0.4.11}/docs/sdk-0.4.md +0 -0
  69. {docvortex-0.4.9 → docvortex-0.4.11}/pyproject.toml +0 -0
  70. {docvortex-0.4.9 → docvortex-0.4.11}/schemas/middle-2.0.json +0 -0
  71. {docvortex-0.4.9 → docvortex-0.4.11}/schemas/model-2.0.json +0 -0
  72. {docvortex-0.4.9 → docvortex-0.4.11}/setup.cfg +0 -0
  73. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/__init__.py +0 -0
  74. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/__init__.py +0 -0
  75. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/__init__.py +0 -0
  76. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
  77. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
  78. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/_shared/image.py +0 -0
  79. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
  80. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
  81. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
  82. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
  83. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
  84. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
  85. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/_shared/names.py +0 -0
  86. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
  87. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/contracts.py +0 -0
  88. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/csv.py +0 -0
  89. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
  90. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/epub/constants.py +0 -0
  91. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/epub/converter.py +0 -0
  92. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/epub/errors.py +0 -0
  93. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
  94. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/epub/package.py +0 -0
  95. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/epub/properties.py +0 -0
  96. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/html/__init__.py +0 -0
  97. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/html/anchors.py +0 -0
  98. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/html/converter.py +0 -0
  99. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/html/document.py +0 -0
  100. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/html/errors.py +0 -0
  101. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/html/metadata.py +0 -0
  102. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/html/selector.py +0 -0
  103. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/models.py +0 -0
  104. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
  105. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
  106. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
  107. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
  108. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
  109. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
  110. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/images.py +0 -0
  111. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
  112. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/models.py +0 -0
  113. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/package.py +0 -0
  114. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/path.py +0 -0
  115. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
  116. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
  117. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
  118. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/table.py +0 -0
  119. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/text.py +0 -0
  120. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
  121. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/__init__.py +0 -0
  122. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
  123. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
  124. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
  125. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
  126. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
  127. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
  128. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
  129. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
  130. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
  131. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
  132. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
  133. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
  134. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
  135. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
  136. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
  137. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
  138. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
  139. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
  140. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
  141. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
  142. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
  143. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
  144. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
  145. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
  146. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
  147. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
  148. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
  149. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
  150. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
  151. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
  152. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
  153. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
  154. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
  155. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
  156. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/errors.py +0 -0
  157. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
  158. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
  159. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
  160. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
  161. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/limits.py +0 -0
  162. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/metadata.py +0 -0
  163. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
  164. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
  165. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
  166. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
  167. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
  168. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
  169. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
  170. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
  171. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
  172. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/opc.py +0 -0
  173. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
  174. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
  175. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
  176. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
  177. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
  178. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
  179. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
  180. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
  181. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
  182. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
  183. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
  184. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
  185. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
  186. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
  187. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
  188. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
  189. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
  190. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
  191. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
  192. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
  193. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
  194. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
  195. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
  196. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
  197. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
  198. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
  199. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
  200. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/streams.py +0 -0
  201. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
  202. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
  203. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
  204. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
  205. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
  206. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
  207. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
  208. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
  209. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
  210. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
  211. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
  212. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
  213. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
  214. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
  215. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
  216. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
  217. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
  218. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
  219. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
  220. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
  221. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
  222. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
  223. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
  224. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
  225. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
  226. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
  227. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
  228. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
  229. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
  230. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
  231. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
  232. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
  233. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
  234. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
  235. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
  236. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
  237. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
  238. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
  239. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
  240. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
  241. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
  242. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
  243. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
  244. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
  245. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
  246. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
  247. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/models.py +0 -0
  248. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
  249. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
  250. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
  251. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
  252. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
  253. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
  254. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
  255. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
  256. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
  257. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
  258. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
  259. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
  260. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
  261. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
  262. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
  263. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
  264. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
  265. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
  266. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
  267. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
  268. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
  269. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
  270. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
  271. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
  272. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
  273. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
  274. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
  275. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
  276. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
  277. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
  278. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
  279. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
  280. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
  281. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
  282. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
  283. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/analyzers/pdf.py +0 -0
  284. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/api.py +0 -0
  285. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/assets/__init__.py +0 -0
  286. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/assets/images.py +0 -0
  287. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/assets/store.py +0 -0
  288. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/cli.py +0 -0
  289. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/codecs/__init__.py +0 -0
  290. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/codecs/html/__init__.py +0 -0
  291. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/codecs/html/contracts.py +0 -0
  292. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/codecs/html/materializer.py +0 -0
  293. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/codecs/html/parser.py +0 -0
  294. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/codecs/html/resources.py +0 -0
  295. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/codecs/json.py +0 -0
  296. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/__init__.py +0 -0
  297. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/inline.py +0 -0
  298. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/links.py +0 -0
  299. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/markup/__init__.py +0 -0
  300. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/markup/anchors.py +0 -0
  301. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/markup/formula.py +0 -0
  302. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/markup/projector.py +0 -0
  303. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/markup/styles.py +0 -0
  304. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/normalization.py +0 -0
  305. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/spans.py +0 -0
  306. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/table/__init__.py +0 -0
  307. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/table/blocks.py +0 -0
  308. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/table/content.py +0 -0
  309. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/table/document.py +0 -0
  310. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/table/html.py +0 -0
  311. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/table/models.py +0 -0
  312. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/table/rules.py +0 -0
  313. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/table/structure.py +0 -0
  314. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/text.py +0 -0
  315. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/content/tree.py +0 -0
  316. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/__init__.py +0 -0
  317. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/detection.py +0 -0
  318. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/filetypes.py +0 -0
  319. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/page_range.py +0 -0
  320. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/__init__.py +0 -0
  321. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/_document.py +0 -0
  322. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/classify.py +0 -0
  323. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/constants.py +0 -0
  324. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/font_runtime.py +0 -0
  325. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/images.py +0 -0
  326. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/layout.py +0 -0
  327. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/metadata.py +0 -0
  328. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/native_annotations.py +0 -0
  329. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/native_contracts.py +0 -0
  330. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/native_coordinates.py +0 -0
  331. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
  332. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/native_objects.py +0 -0
  333. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
  334. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/pdfium.py +0 -0
  335. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/raster.py +0 -0
  336. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/text/__init__.py +0 -0
  337. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/text/_contracts.py +0 -0
  338. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/text/dedup.py +0 -0
  339. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/text/extract.py +0 -0
  340. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/text/geometry.py +0 -0
  341. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/text/groups.py +0 -0
  342. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/pdf/visuals.py +0 -0
  343. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/properties.py +0 -0
  344. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/document/source.py +0 -0
  345. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/errors.py +0 -0
  346. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/export/__init__.py +0 -0
  347. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/export/bundle.py +0 -0
  348. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/export/files.py +0 -0
  349. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/export/middle.py +0 -0
  350. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/foundation/__init__.py +0 -0
  351. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/foundation/_coordinates.py +0 -0
  352. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/foundation/_geometry.py +0 -0
  353. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/foundation/_hyperlink.py +0 -0
  354. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/foundation/_image.py +0 -0
  355. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/foundation/_image_operations.py +0 -0
  356. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/foundation/_image_payload.py +0 -0
  357. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/foundation/_text.py +0 -0
  358. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/foundation/image_encoding.py +0 -0
  359. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/foundation/language.py +0 -0
  360. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/foundation/type_identity.py +0 -0
  361. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/foundation/xml_names.py +0 -0
  362. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/geometry.py +0 -0
  363. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/metadata.py +0 -0
  364. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/options.py +0 -0
  365. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/postprocess/__init__.py +0 -0
  366. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/postprocess/content.py +0 -0
  367. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/postprocess/document.py +0 -0
  368. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/postprocess/lists.py +0 -0
  369. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/postprocess/page_blocks.py +0 -0
  370. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/postprocess/pages.py +0 -0
  371. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/postprocess/paragraphs.py +0 -0
  372. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/postprocess/visual.py +0 -0
  373. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/public_api.py +0 -0
  374. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/__init__.py +0 -0
  375. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/__init__.py +0 -0
  376. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/common/__init__.py +0 -0
  377. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/common/context.py +0 -0
  378. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/common/html_table.py +0 -0
  379. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/common/index.py +0 -0
  380. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/common/list_items.py +0 -0
  381. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/common/planner.py +0 -0
  382. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/docx/__init__.py +0 -0
  383. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/docx/assets.py +0 -0
  384. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/docx/inline.py +0 -0
  385. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/docx/math.py +0 -0
  386. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/docx/renderer.py +0 -0
  387. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/docx/styles.py +0 -0
  388. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/docx/table.py +0 -0
  389. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/epub/__init__.py +0 -0
  390. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/epub/assets.py +0 -0
  391. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/epub/package.py +0 -0
  392. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/epub/renderer.py +0 -0
  393. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/html/__init__.py +0 -0
  394. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/html/inline.py +0 -0
  395. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/html/renderer.py +0 -0
  396. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
  397. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/html/table.py +0 -0
  398. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/latex/__init__.py +0 -0
  399. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/latex/assets.py +0 -0
  400. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/latex/inline.py +0 -0
  401. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/latex/renderer.py +0 -0
  402. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/latex/table.py +0 -0
  403. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
  404. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/markdown/assets.py +0 -0
  405. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
  406. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
  407. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/markdown/inline.py +0 -0
  408. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
  409. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/markdown/table.py +0 -0
  410. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
  411. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/assets.py +0 -0
  412. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
  413. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
  414. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/formula.py +0 -0
  415. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
  416. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/inline.py +0 -0
  417. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/original.py +0 -0
  418. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
  419. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/paragraph.py +0 -0
  420. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
  421. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/styles.py +0 -0
  422. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/table.py +0 -0
  423. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
  424. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
  425. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
  426. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
  427. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
  428. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/api.py +0 -0
  429. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/contracts.py +0 -0
  430. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/docx.py +0 -0
  431. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/epub.py +0 -0
  432. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/fragments.py +0 -0
  433. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/html.py +0 -0
  434. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/latex.py +0 -0
  435. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/markdown.py +0 -0
  436. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/pdf.py +0 -0
  437. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/render/structured_content.py +0 -0
  438. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/resources/epub/docvortex.css +0 -0
  439. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
  440. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/resources/fonts/NOTICE +0 -0
  441. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/resources/fonts/manifest.json +0 -0
  442. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/resources/html/docvortex.css +0 -0
  443. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/resources/html/docvortex.min.css +0 -0
  444. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
  445. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/result.py +0 -0
  446. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/schema.py +0 -0
  447. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex/visualization.py +0 -0
  448. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex.egg-info/dependency_links.txt +0 -0
  449. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex.egg-info/entry_points.txt +0 -0
  450. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex.egg-info/requires.txt +0 -0
  451. {docvortex-0.4.9 → docvortex-0.4.11}/src/docvortex.egg-info/top_level.txt +0 -0
  452. {docvortex-0.4.9 → docvortex-0.4.11}/tests/benchmarks/flash_pdf.py +0 -0
  453. {docvortex-0.4.9 → docvortex-0.4.11}/tests/benchmarks/native_pdf_table.py +0 -0
  454. {docvortex-0.4.9 → docvortex-0.4.11}/tests/benchmarks/pdf_render.py +0 -0
  455. {docvortex-0.4.9 → docvortex-0.4.11}/tests/benchmarks/pipeline.py +0 -0
  456. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
  457. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_layout_block_expectations.json +0 -0
  458. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
  459. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
  460. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_manual_annotations.json +0 -0
  461. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_manual_review_decisions.json +0 -0
  462. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_reviewed_history.json +0 -0
  463. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_round2_annotations.json +0 -0
  464. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_round2_review_decisions.json +0 -0
  465. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_round3_annotations.json +0 -0
  466. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
  467. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_round3_review_decisions.json +0 -0
  468. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
  469. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
  470. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
  471. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
  472. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
  473. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
  474. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/pdf_char_dedup.json +0 -0
  475. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
  476. {docvortex-0.4.9 → docvortex-0.4.11}/tests/fixtures/rtf/semantic.rtf +0 -0
  477. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_architecture.py +0 -0
  478. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_benchmark_entrypoint.py +0 -0
  479. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_brand_protocol.py +0 -0
  480. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_complete_pipeline.py +0 -0
  481. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_converter_lifecycle.py +0 -0
  482. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_document_envelope.py +0 -0
  483. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_document_metadata.py +0 -0
  484. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_format_matrix.py +0 -0
  485. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_geometry_api.py +0 -0
  486. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_history_geometry_tools.py +0 -0
  487. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_html_namespace.py +0 -0
  488. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_mixed_font_script_reference.py +0 -0
  489. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_pdf_analysis_api.py +0 -0
  490. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_pdf_font_geometry.py +0 -0
  491. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_pdf_font_runtime.py +0 -0
  492. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_pdf_model_text_normalization.py +0 -0
  493. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_pdf_output_text.py +0 -0
  494. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_pdf_render_pool.py +0 -0
  495. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_pdf_source_row_merging.py +0 -0
  496. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_pdf_symbol_normalization.py +0 -0
  497. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_public_export_api.py +0 -0
  498. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_public_image_api.py +0 -0
  499. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_public_pipeline.py +0 -0
  500. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_refactor_raster.py +0 -0
  501. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_refactor_rendering.py +0 -0
  502. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_refactor_resources.py +0 -0
  503. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_release_ci_gate.py +0 -0
  504. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_render_ownership.py +0 -0
  505. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_renderer_branding.py +0 -0
  506. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_shared_boundaries.py +0 -0
  507. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_system_font_pdf_pipeline.py +0 -0
  508. {docvortex-0.4.9 → docvortex-0.4.11}/tests/test_validated_geometry.py +0 -0
  509. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
  510. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_epub_test_utils.py +0 -0
  511. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_flash_pdf_test_utils.py +0 -0
  512. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_image_mtef_test_utils.py +0 -0
  513. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_legacy_doc_test_utils.py +0 -0
  514. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
  515. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_legacy_xls_test_utils.py +0 -0
  516. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_metafile_test_utils.py +0 -0
  517. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_mtef_test_utils.py +0 -0
  518. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_mtef_v5_test_utils.py +0 -0
  519. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_native_test_utils.py +0 -0
  520. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_ofd_test_utils.py +0 -0
  521. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
  522. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
  523. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/_span_test_utils.py +0 -0
  524. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
  525. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
  526. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
  527. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
  528. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
  529. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
  530. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
  531. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
  532. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
  533. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
  534. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
  535. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
  536. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
  537. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
  538. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
  539. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
  540. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
  541. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
  542. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
  543. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
  544. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
  545. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
  546. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
  547. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
  548. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
  549. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
  550. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
  551. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
  552. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
  553. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/pdfs/test.pdf +0 -0
  554. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_backend_architecture.py +0 -0
  555. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_backend_block_object_regressions.py +0 -0
  556. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_docx_assets.py +0 -0
  557. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_docx_complex_fields.py +0 -0
  558. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_docx_math.py +0 -0
  559. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_docx_render.py +0 -0
  560. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_docx_special_char_tables.py +0 -0
  561. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_docx_table.py +0 -0
  562. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_emfplus_integration.py +0 -0
  563. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_epub_backlinks.py +0 -0
  564. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_epub_quoted_note_types.py +0 -0
  565. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_epub_render.py +0 -0
  566. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
  567. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_csv.py +0 -0
  568. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_docx_equationxml.py +0 -0
  569. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_image_mtef.py +0 -0
  570. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
  571. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_legacy_doc.py +0 -0
  572. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
  573. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_legacy_ppt.py +0 -0
  574. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_legacy_xls.py +0 -0
  575. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
  576. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_manual_annotations.py +0 -0
  577. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_markup_anchors.py +0 -0
  578. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_model.py +0 -0
  579. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_mtef_v5.py +0 -0
  580. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_ofd.py +0 -0
  581. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_office_image_mtef.py +0 -0
  582. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_office_metafile.py +0 -0
  583. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_office_models.py +0 -0
  584. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
  585. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
  586. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
  587. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
  588. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
  589. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
  590. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
  591. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
  592. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_extractor.py +0 -0
  593. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_formulas.py +0 -0
  594. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_graphics.py +0 -0
  595. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
  596. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
  597. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
  598. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_native_text.py +0 -0
  599. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
  600. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
  601. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_samples.py +0 -0
  602. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_scripts.py +0 -0
  603. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_semantics.py +0 -0
  604. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_tables.py +0 -0
  605. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
  606. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
  607. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_titles.py +0 -0
  608. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
  609. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_round2_annotations.py +0 -0
  610. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_round3_annotations.py +0 -0
  611. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_rtf.py +0 -0
  612. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_rule_generalization.py +0 -0
  613. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_spatial_evidence.py +0 -0
  614. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
  615. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_guess_suffix_ole2.py +0 -0
  616. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_html_css_build.py +0 -0
  617. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_html_render.py +0 -0
  618. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_html_security.py +0 -0
  619. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
  620. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_latex_render.py +0 -0
  621. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_markdown_render.py +0 -0
  622. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_middle_json_block_models.py +0 -0
  623. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_middle_json_export.py +0 -0
  624. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_middle_json_validator.py +0 -0
  625. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_model_json.py +0 -0
  626. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_native_pdf_table.py +0 -0
  627. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
  628. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
  629. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
  630. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
  631. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
  632. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_ofd_assembly.py +0 -0
  633. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_ofd_vector_tables.py +0 -0
  634. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_office_demo_exports.py +0 -0
  635. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_office_parser_regressions.py +0 -0
  636. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_cjk_style.py +0 -0
  637. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
  638. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_classify.py +0 -0
  639. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_demo_links.py +0 -0
  640. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
  641. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_document.py +0 -0
  642. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_formula_layout.py +0 -0
  643. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_object_clipping.py +0 -0
  644. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_original_layout.py +0 -0
  645. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_pagination.py +0 -0
  646. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
  647. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_render.py +0 -0
  648. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
  649. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_structured_tables.py +0 -0
  650. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_table_cache.py +0 -0
  651. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_table_round2.py +0 -0
  652. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_text_dedup.py +0 -0
  653. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_text_styles.py +0 -0
  654. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_title_font_plan.py +0 -0
  655. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_title_space.py +0 -0
  656. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_pdf_visualization.py +0 -0
  657. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_postprocess_page_blocks.py +0 -0
  658. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_postprocess_pages.py +0 -0
  659. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_postprocess_paragraphs.py +0 -0
  660. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_postprocess_visual.py +0 -0
  661. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_render_api.py +0 -0
  662. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_render_html_table.py +0 -0
  663. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_render_image_renderer.py +0 -0
  664. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_render_list_index_utils.py +0 -0
  665. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_structured_content_render.py +0 -0
  666. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_table_merge.py +0 -0
  667. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_table_merge_cell_merge.py +0 -0
  668. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_text_block_anchor.py +0 -0
  669. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_text_boundary_rules.py +0 -0
  670. {docvortex-0.4.9 → docvortex-0.4.11}/tests/unittest/test_text_utils.py +0 -0
  671. {docvortex-0.4.9 → docvortex-0.4.11}/tools/__init__.py +0 -0
  672. {docvortex-0.4.9 → docvortex-0.4.11}/tools/build_html_css.py +0 -0
  673. {docvortex-0.4.9 → docvortex-0.4.11}/tools/calibrate_pdf_geometry.py +0 -0
  674. {docvortex-0.4.9 → docvortex-0.4.11}/tools/capture_baseline.py +0 -0
  675. {docvortex-0.4.9 → docvortex-0.4.11}/tools/capture_platform_layout.py +0 -0
  676. {docvortex-0.4.9 → docvortex-0.4.11}/tools/compare_font_platforms.py +0 -0
  677. {docvortex-0.4.9 → docvortex-0.4.11}/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.11
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
 
@@ -35,6 +35,7 @@ from docvortex.content.markup.projector import (
35
35
 
36
36
  from ....content.spans import normalize_span_dicts
37
37
  from ....foundation._image_payload import parse_image_data_uri_strict
38
+ from ....foundation._svg_raster import serialize_svg_image
38
39
  from .._shared.hyperlink import sanitize_hyperlink_target
39
40
  from .constants import IMAGE_MEDIA_BY_EXTENSION, SVG_MEDIA_TYPE
40
41
  from .package import EpubPackage
@@ -275,14 +276,22 @@ class _EpubMarkupContext:
275
276
  )
276
277
 
277
278
  def resolve_image(self, source: str, *, alt: str = "") -> ResolvedMarkupImage | None:
278
- """读取并严格校验一个 EPUB 包内栅格图片引用。"""
279
+ """读取并严格校验一个 EPUB 包内图片引用,SVG 光栅化为 PNG。"""
279
280
  target = self.package.resolve_reference(source, base_part=self.chapter_path)
280
281
  if target is None:
281
282
  return ResolvedMarkupImage(alt=alt) if alt else None
282
283
  media_type = (self.package.content_type_for(target.path) or "").casefold()
283
284
  extension = target.path.rsplit(".", 1)[-1].casefold() if "." in target.path else ""
284
285
  media_type = media_type or IMAGE_MEDIA_BY_EXTENSION.get(extension, "")
285
- if not media_type.startswith("image/") or media_type == SVG_MEDIA_TYPE:
286
+ if media_type == SVG_MEDIA_TYPE:
287
+ payload = self.package.read_part(target.path, asset=True)
288
+ if payload is None:
289
+ return ResolvedMarkupImage(alt=alt) if alt else None
290
+ data_uri = serialize_svg_image(payload)
291
+ if data_uri is None:
292
+ return ResolvedMarkupImage(alt=alt) if alt else None
293
+ return ResolvedMarkupImage(image_base64=data_uri, alt=alt)
294
+ if not media_type.startswith("image/"):
286
295
  return ResolvedMarkupImage(alt=alt) if alt else None
287
296
  payload = self.package.read_part(target.path, asset=True)
288
297
  if payload is None:
@@ -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
 
@@ -13,12 +14,14 @@ from docvortex.content.markup import ResolvedMarkupImage
13
14
  from docvortex.document.contracts import HtmlSourceContext
14
15
 
15
16
  from ....foundation._image_payload import parse_image_data_uri_strict, validate_remote_image_url
17
+ from ....foundation._svg_raster import looks_like_svg_payload, serialize_svg_image
16
18
  from .._shared.hyperlink import sanitize_hyperlink_target
17
19
  from .constants import (
18
20
  MAX_HTML_IMAGE_BYTES,
19
21
  MAX_HTML_IMAGE_TOTAL_BYTES,
20
22
  MAX_HTML_STYLESHEET_BYTES,
21
23
  MAX_HTML_STYLESHEET_TOTAL_BYTES,
24
+ MAX_REMOTE_IMAGE_FETCH_SECONDS,
22
25
  )
23
26
  from .errors import HtmlResourceLimitError
24
27
 
@@ -65,6 +68,7 @@ class HtmlResourceContext:
65
68
  self._image_bytes = 0
66
69
  self._stylesheet_bytes = 0
67
70
  self._image_cache: dict[Path, str] = {}
71
+ self._remote_image_cache: dict[str, str] = {}
68
72
  self._data_image_cache: dict[str, ResolvedMarkupImage] = {}
69
73
  self._stylesheet_cache: dict[Path, str] = {}
70
74
  self._local_root = source_context.local_resource_root.resolve() if source_context.local_resource_root else None
@@ -157,14 +161,14 @@ class HtmlResourceContext:
157
161
  return sanitize_hyperlink_target(normalized, allow_relative=True, allow_fragment=True)
158
162
 
159
163
  def resolve_image(self, source: str, *, alt: str = "") -> ResolvedMarkupImage | None:
160
- """按 data URI、本地安全文件、远程 URL 的顺序解析图片。"""
164
+ """按 data URI、远程 URL、本地安全文件的顺序解析图片,远程图片仅在来源显式开启下载时内嵌。"""
161
165
  normalized = (source or "").strip()
162
166
  if not normalized:
163
167
  return ResolvedMarkupImage(alt=alt) if alt else None
164
168
  if normalized.casefold().startswith("data:"):
165
169
  return self._resolve_data_image(normalized, alt=alt)
166
170
  if remote_url := self._resolve_remote_image_url(normalized):
167
- return ResolvedMarkupImage(image_url=remote_url, alt=alt)
171
+ return self._resolve_remote_image(remote_url, alt=alt)
168
172
  local_path = self._resolve_local_path(normalized)
169
173
  if local_path is None or not local_path.is_file():
170
174
  return ResolvedMarkupImage(alt=alt) if alt else None
@@ -175,7 +179,10 @@ class HtmlResourceContext:
175
179
  payload = source_file.read(MAX_HTML_IMAGE_BYTES + 1)
176
180
  if len(payload) > MAX_HTML_IMAGE_BYTES:
177
181
  raise HtmlResourceLimitError(f"HTML image exceeds max_html_image_bytes={MAX_HTML_IMAGE_BYTES}")
178
- data_uri = _image_data_uri(payload)
182
+ if local_path.suffix.casefold() == ".svg" or looks_like_svg_payload(payload):
183
+ data_uri = serialize_svg_image(payload)
184
+ else:
185
+ data_uri = _image_data_uri(payload)
179
186
  if data_uri is None:
180
187
  return ResolvedMarkupImage(alt=alt) if alt else None
181
188
  self._charge_image_bytes(len(payload))
@@ -225,7 +232,7 @@ class HtmlResourceContext:
225
232
  return self.anchors.note_anchor(note) if self.anchors else None
226
233
 
227
234
  def _resolve_data_image(self, data_uri: str, *, alt: str) -> ResolvedMarkupImage | None:
228
- """严格解析 data URI,并执行单图与累计图片预算。"""
235
+ """严格解析 data URI 并执行图片预算,SVG 光栅化为 PNG 后内嵌。"""
229
236
  if cached := self._data_image_cache.get(data_uri):
230
237
  return ResolvedMarkupImage(image_base64=cached.image_base64, alt=alt)
231
238
  if len(data_uri) > MAX_HTML_IMAGE_BYTES * 2:
@@ -235,7 +242,15 @@ class HtmlResourceContext:
235
242
  except ValueError:
236
243
  return ResolvedMarkupImage(alt=alt) if alt else None
237
244
  if extension == "svg":
238
- return ResolvedMarkupImage(alt=alt) if alt else None
245
+ if len(payload) > MAX_HTML_IMAGE_BYTES:
246
+ raise HtmlResourceLimitError(f"HTML image exceeds max_html_image_bytes={MAX_HTML_IMAGE_BYTES}")
247
+ raster_uri = serialize_svg_image(payload)
248
+ if raster_uri is None:
249
+ return ResolvedMarkupImage(alt=alt) if alt else None
250
+ self._charge_image_bytes(len(payload))
251
+ resolved = ResolvedMarkupImage(image_base64=raster_uri, alt=alt)
252
+ self._data_image_cache[data_uri] = resolved
253
+ return resolved
239
254
  if len(payload) > MAX_HTML_IMAGE_BYTES:
240
255
  raise HtmlResourceLimitError(f"HTML image exceeds max_html_image_bytes={MAX_HTML_IMAGE_BYTES}")
241
256
  self._charge_image_bytes(len(payload))
@@ -243,6 +258,41 @@ class HtmlResourceContext:
243
258
  self._data_image_cache[data_uri] = resolved
244
259
  return resolved
245
260
 
261
+ def _resolve_remote_image(self, remote_url: str, *, alt: str) -> ResolvedMarkupImage:
262
+ """远程图片默认保持外链,来源显式开启下载时按缓存下载内嵌。"""
263
+ if not self.source_context.fetch_remote_images:
264
+ return ResolvedMarkupImage(image_url=remote_url, alt=alt)
265
+ if cached := self._remote_image_cache.get(remote_url):
266
+ return ResolvedMarkupImage(image_base64=cached, alt=alt)
267
+ data_uri = self._fetch_remote_image(remote_url)
268
+ if data_uri is None:
269
+ return ResolvedMarkupImage(image_url=remote_url, alt=alt)
270
+ self._remote_image_cache[remote_url] = data_uri
271
+ return ResolvedMarkupImage(image_base64=data_uri, alt=alt)
272
+
273
+ def _fetch_remote_image(self, remote_url: str) -> str | None:
274
+ """在单图上限与超时约束内下载远程图片并复核签名,网络失败返回 None 退回外链。"""
275
+ try:
276
+ with urlopen(remote_url, timeout=MAX_REMOTE_IMAGE_FETCH_SECONDS) as response:
277
+ chunks: list[bytes] = []
278
+ remaining = MAX_HTML_IMAGE_BYTES + 1
279
+ while remaining > 0:
280
+ chunk = response.read(remaining)
281
+ if not chunk:
282
+ break
283
+ chunks.append(chunk)
284
+ remaining -= len(chunk)
285
+ except (OSError, ValueError):
286
+ return None
287
+ payload = b"".join(chunks)
288
+ if len(payload) > MAX_HTML_IMAGE_BYTES:
289
+ raise HtmlResourceLimitError(f"HTML image exceeds max_html_image_bytes={MAX_HTML_IMAGE_BYTES}")
290
+ data_uri = _image_data_uri(payload)
291
+ if data_uri is None:
292
+ return None
293
+ self._charge_image_bytes(len(payload))
294
+ return data_uri
295
+
246
296
  def _charge_image_bytes(self, byte_count: int) -> None:
247
297
  """累计实际保留的图片字节,并在超限时终止整份文档。"""
248
298
  self._image_bytes += byte_count
@@ -11,6 +11,7 @@ from loguru import logger
11
11
  from metafile_render import MetafileError, MetafileResourceLimitError, render_metafile
12
12
  from PIL import Image, ImageDraw, ImageFont, UnidentifiedImageError
13
13
 
14
+ from ....foundation._svg_raster import is_svg_image_part, looks_like_svg_payload, serialize_svg_image
14
15
  from ....foundation.image_encoding import image_to_b64str
15
16
 
16
17
  VECTOR_IMAGE_FORMATS = frozenset({"WMF", "EMF"})
@@ -267,6 +268,9 @@ def serialize_office_image(
267
268
  return rendered
268
269
  return serialize_vector_part_with_placeholder(part_name, content_type)
269
270
 
271
+ if is_svg_image_part(part_name, content_type) or looks_like_svg_payload(image_data):
272
+ return serialize_svg_image(image_data)
273
+
270
274
  try:
271
275
  pil_image = Image.open(BytesIO(image_data))
272
276
  if is_vector_image(pil_image):
@@ -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
@@ -20,6 +20,7 @@ from .....content.spans import (
20
20
  inline_span_plain_text,
21
21
  strip_span_dicts,
22
22
  )
23
+ from .....foundation._svg_raster import serialize_svg_image
23
24
  from .....foundation.image_encoding import image_to_b64str
24
25
  from .....schema import BlockType
25
26
  from ..._shared.hyperlink import sanitize_hyperlink_target
@@ -108,16 +109,36 @@ def _style_html(text: str, style: TextStyle) -> str:
108
109
  return rendered
109
110
 
110
111
 
112
+ _SVG_RENDER_DPI = 200
113
+
114
+
115
+ def _frame_render_size(frame: etree._Element | None) -> tuple[int, int] | None:
116
+ """按 draw:frame 显示尺寸换算渲染像素,作为 SVG 光栅化的目标尺寸。"""
117
+ from .converters import _length_to_points
118
+
119
+ if frame is None:
120
+ return None
121
+ width = _length_to_points(frame.get(qname("svg", "width")))
122
+ height = _length_to_points(frame.get(qname("svg", "height")))
123
+ if width <= 0 or height <= 0:
124
+ return None
125
+ return (max(1, round(width / 72 * _SVG_RENDER_DPI)), max(1, round(height / 72 * _SVG_RENDER_DPI)))
126
+
127
+
111
128
  def _serialize_odf_image(
112
129
  image_bytes: bytes,
113
130
  *,
114
131
  part_name: str | None,
115
132
  content_type: str | None,
133
+ size_hint: tuple[int, int] | None = None,
116
134
  ) -> str | None:
117
- """序列化 ODF 图片;SVG、SVM 和 GDIMeta 使用安全占位图保留对象位置。"""
135
+ """序列化 ODF 图片;SVG 光栅化为 PNG,SVM 和 GDIMeta 使用安全占位图保留对象位置。"""
118
136
  normalized_type = (content_type or "").split(";", 1)[0].strip().casefold()
119
137
  suffix = (part_name or "").rsplit(".", 1)[-1].casefold() if "." in (part_name or "") else ""
120
138
  if normalized_type == "image/svg+xml" or suffix == "svg":
139
+ rendered = serialize_svg_image(image_bytes, size_hint=size_hint)
140
+ if rendered is not None:
141
+ return rendered
121
142
  placeholder = create_text_placeholder((320, 180), ["SVG image", "Preview unavailable"])
122
143
  return image_to_b64str(placeholder, image_format="JPEG")
123
144
  if suffix == "svm" or "gdimetafile" in normalized_type or image_bytes.startswith(b"VCLMTF"):
@@ -453,7 +474,7 @@ class OdfBlockParser:
453
474
  style_name = element.get(qname("text", "style-name")) or inherited_style
454
475
  level = self.styles.list_level(style_name, depth)
455
476
  key = (style_name or "", depth)
456
- start = level.start
477
+ start = level.start if level is not None else 1
457
478
  continue_list = element.get(qname("text", "continue-list"))
458
479
  if continue_list and continue_list in self._list_ids:
459
480
  start = self._list_ids[continue_list]
@@ -466,17 +487,20 @@ class OdfBlockParser:
466
487
  active_master: str | None = None
467
488
 
468
489
  def flush_content(fragment_start: int) -> None:
469
- """把当前合法子块冻结为一个 LIST 分片。"""
490
+ """把当前合法子块冻结为一个 LIST 分片;无标记列表按普通段落序列输出。"""
470
491
  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)
492
+ if level is None:
493
+ results.extend(content)
494
+ else:
495
+ block: dict[str, Any] = {
496
+ "type": BlockType.LIST,
497
+ "attribute": "ordered" if level.ordered else "unordered",
498
+ "ilevel": depth,
499
+ "content": list(content),
500
+ }
501
+ if level.ordered:
502
+ block["start"] = fragment_start
503
+ results.append(block)
480
504
  content.clear()
481
505
  if fragment_notes:
482
506
  results.extend(fragment_notes)
@@ -709,7 +733,15 @@ class OdfBlockParser:
709
733
  )
710
734
  if not image_bytes:
711
735
  return None, alt
712
- return _serialize_odf_image(image_bytes, part_name=part_name, content_type=content_type), alt
736
+ return (
737
+ _serialize_odf_image(
738
+ image_bytes,
739
+ part_name=part_name,
740
+ content_type=content_type,
741
+ size_hint=_frame_render_size(parent),
742
+ ),
743
+ alt,
744
+ )
713
745
 
714
746
  def _object_root(self, object_element: etree._Element) -> tuple[etree._Element | None, str | None]:
715
747
  """读取 draw:object 指向的子文档内容树和成员路径。"""
@@ -875,6 +907,20 @@ class OdfBlockParser:
875
907
  """把单元格行内流中的 note marker 排入当前逻辑页队列。"""
876
908
  self.notes.extend(atom.content for atom in atoms if isinstance(atom, InlineNote))
877
909
 
910
+ def _render_cell_paragraph(self, child: etree._Element, parts: list[str]) -> None:
911
+ """把单元格里的一个裸段落渲染为 <p>,并回收行内块组的单元格子块。"""
912
+ atoms = self.parse_inline_atoms(child)
913
+ self._queue_inline_notes(atoms)
914
+ rendered_atoms = [atom for atom in atoms if not isinstance(atom, InlineImage)] if self._collect_cell_visuals else atoms
915
+ parts.append(f"<p>{render_atoms_to_html(rendered_atoms)}</p>")
916
+ for atom in atoms:
917
+ if isinstance(atom, InlineBlockGroup):
918
+ self._append_cell_blocks(
919
+ parts,
920
+ atom.blocks,
921
+ inline_image_rendered=atom.inline_image_rendered and not self._collect_cell_visuals,
922
+ )
923
+
878
924
  def render_cell_html(self, cell: etree._Element) -> str:
879
925
  """把表格单元格中的段落、列表、嵌套表和 frame 转为 HTML。"""
880
926
  parts: list[str] = []
@@ -882,19 +928,7 @@ class OdfBlockParser:
882
928
  if not isinstance(child.tag, str):
883
929
  continue
884
930
  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
- )
931
+ self._render_cell_paragraph(child, parts)
898
932
  elif child.tag == qname("text", "list"):
899
933
  parts.append(self._render_list_html(child))
900
934
  elif child.tag == qname("table", "table"):
@@ -915,6 +949,8 @@ class OdfBlockParser:
915
949
  """把单元格内 ODF 列表递归渲染为 ol/ul HTML。"""
916
950
  style_name = element.get(qname("text", "style-name")) or inherited_style
917
951
  level = self.styles.list_level(style_name, depth)
952
+ if level is None:
953
+ return self._render_unmarked_list_html(element, depth=depth, inherited_style=style_name)
918
954
  tag = "ol" if level.ordered else "ul"
919
955
  start = f' start="{level.start}"' if level.ordered and level.start != 1 else ""
920
956
  parts = [f"<{tag}{start}>"]
@@ -940,6 +976,30 @@ class OdfBlockParser:
940
976
  parts.append(f"</{tag}>")
941
977
  return "".join(parts)
942
978
 
979
+ def _render_unmarked_list_html(
980
+ self,
981
+ element: etree._Element,
982
+ *,
983
+ depth: int,
984
+ inherited_style: str | None,
985
+ ) -> str:
986
+ """把引用空列表样式(无可见标记)的单元格列表按裸段落序列渲染。"""
987
+ parts: list[str] = []
988
+ for item in element:
989
+ if not isinstance(item.tag, str) or item.tag not in {
990
+ qname("text", "list-item"),
991
+ qname("text", "list-header"),
992
+ }:
993
+ continue
994
+ for child in item:
995
+ if not isinstance(child.tag, str):
996
+ continue
997
+ if child.tag in {qname("text", "p"), qname("text", "h")}:
998
+ self._render_cell_paragraph(child, parts)
999
+ elif child.tag == qname("text", "list"):
1000
+ parts.append(self._render_list_html(child, depth=depth + 1, inherited_style=inherited_style))
1001
+ return "".join(part for part in parts if part)
1002
+
943
1003
  def drain_notes(self) -> list[str]:
944
1004
  """取出当前累计脚注并清空共享队列。"""
945
1005
  values = list(self.notes)
@@ -1,6 +1,5 @@
1
1
  """PPTX 图片、图表与公式资源,复用当前转换器的单文档状态。"""
2
2
 
3
- import base64
4
3
  from typing import Any, Optional
5
4
  from loguru import logger
6
5
  from pptx.enum.shapes import MSO_SHAPE_TYPE
@@ -222,11 +221,19 @@ class _PptxResources:
222
221
  return
223
222
 
224
223
  if content_type == "image/svg+xml":
225
- image_block = {
226
- "type": BlockType.IMAGE,
227
- "image_base64": self._bytes_to_data_uri(image_bytes, content_type),
228
- }
229
- self.cur_page.append(image_block)
224
+ img_base64 = serialize_office_image(image_bytes, content_type=content_type)
225
+ if img_base64 is None:
226
+ # SVG 光栅化失败时回退到 PowerPoint 为 SVG 原生伴随存储的栅量 blip。
227
+ fallback_data = self._get_shape_image_data(shape, include_svg=False)
228
+ if fallback_data is not None and fallback_data[1] != "image/svg+xml":
229
+ img_base64 = serialize_office_image(fallback_data[0], content_type=fallback_data[1])
230
+ if img_base64 is not None:
231
+ self.cur_page.append(
232
+ {
233
+ "type": BlockType.IMAGE,
234
+ "image_base64": img_base64,
235
+ }
236
+ )
230
237
  return
231
238
 
232
239
  img_base64 = serialize_office_image(
@@ -256,19 +263,14 @@ class _PptxResources:
256
263
  )
257
264
 
258
265
  @staticmethod
259
- def _bytes_to_data_uri(image_bytes: bytes, content_type: str) -> str:
260
- """按原有图片、图表与公式资源规则执行 _bytes_to_data_uri,保持输入顺序与降级行为。"""
261
- encoded = base64.b64encode(image_bytes).decode("utf-8")
262
- return f"data:{content_type};base64,{encoded}"
263
-
264
- @staticmethod
265
- def _find_first_embedded_image_rid(shape) -> Optional[str]:
266
+ def _find_first_embedded_image_rid(shape, *, include_svg: bool = True) -> Optional[str]:
266
267
  """按原有图片、图表与公式资源规则执行 _find_first_embedded_image_rid,保持输入顺序与降级行为。"""
267
- svg_blips = shape._element.findall(f".//{{{SVG_BLIP_NS}}}svgBlip")
268
- for svg_blip in svg_blips:
269
- relationship_id = svg_blip.get(f"{{{RELATIONSHIP_NS}}}embed")
270
- if relationship_id:
271
- return relationship_id
268
+ if include_svg:
269
+ svg_blips = shape._element.findall(f".//{{{SVG_BLIP_NS}}}svgBlip")
270
+ for svg_blip in svg_blips:
271
+ relationship_id = svg_blip.get(f"{{{RELATIONSHIP_NS}}}embed")
272
+ if relationship_id:
273
+ return relationship_id
272
274
 
273
275
  blips = shape._element.findall(f".//{{{DRAWINGML_NS}}}blip")
274
276
  for blip in blips:
@@ -296,11 +298,11 @@ class _PptxResources:
296
298
  return False
297
299
  return True
298
300
 
299
- def _get_shape_image_data(self, shape) -> Optional[tuple[bytes, Optional[str]]]:
301
+ def _get_shape_image_data(self, shape, *, include_svg: bool = True) -> Optional[tuple[bytes, Optional[str]]]:
300
302
  """按原有图片、图表与公式资源规则执行 _get_shape_image_data,保持输入顺序与降级行为。"""
301
303
  relationship_id = None
302
304
  if hasattr(shape, "_element"):
303
- relationship_id = self._find_first_embedded_image_rid(shape)
305
+ relationship_id = self._find_first_embedded_image_rid(shape, include_svg=include_svg)
304
306
 
305
307
  if relationship_id:
306
308
  try:
@@ -6,6 +6,7 @@ import re
6
6
 
7
7
  from lxml import etree # type: ignore[reportMissingImports]
8
8
 
9
+ from ..foundation._text import normalize_formula_tag_content
9
10
  from ..foundation.xml_names import local_name
10
11
 
11
12
  _OPERATOR_MAP = {
@@ -71,6 +72,8 @@ _LATEX_MATH_TOKEN_ESCAPES = {
71
72
  "}": r"\}",
72
73
  "~": r"\~{}",
73
74
  }
75
+ # Word 线性格式把公式编号分隔符写作 ``#(n)``;经 mo 转义后行尾呈现为 ``\#(n)``。
76
+ _EQUATION_TAG_RE = re.compile(r"\\#\s*\(([^()]*)\)\s*$")
74
77
 
75
78
 
76
79
  def _escape_text(value: str) -> str:
@@ -83,6 +86,22 @@ def _escape_math_token(value: str) -> str:
83
86
  return "".join(_LATEX_MATH_TOKEN_ESCAPES.get(char, char) for char in value)
84
87
 
85
88
 
89
+ def _tag_equation_number(latex: str) -> str | None:
90
+ """把 Word 公式编号分隔符残留的行尾 ``\\#(n)`` 转换为 LaTeX ``\\tag``。
91
+
92
+ 参考 OMML 转换器 ``do_eqarr`` 的既有语义:单行公式数组末尾的编号
93
+ ``#(n)`` 输出为 ``公式\\tag{n}``,同时避免 ``\\tag`` 进入 matrix 环境。
94
+ """
95
+ match = _EQUATION_TAG_RE.search(latex)
96
+ if match is None:
97
+ return None
98
+ formula = latex[: match.start()].rstrip()
99
+ tag_content = normalize_formula_tag_content(match.group(1))
100
+ if not formula or not tag_content:
101
+ return None
102
+ return rf"{formula}\tag{{{tag_content}}}"
103
+
104
+
86
105
  def _children(element: etree._Element) -> list[etree._Element]:
87
106
  """返回当前元素的全部普通 XML 子元素。"""
88
107
  return [child for child in element if isinstance(child.tag, str)]
@@ -107,7 +126,7 @@ def _convert(element: etree._Element) -> str:
107
126
  if name in {"mi", "mn"}:
108
127
  return _GREEK_MAP.get(text, _escape_math_token(text))
109
128
  if name == "mo":
110
- return _OPERATOR_MAP.get(text, text)
129
+ return _OPERATOR_MAP.get(text, _escape_math_token(text))
111
130
  if name == "mtext":
112
131
  return rf"\text{{{_escape_text(text)}}}"
113
132
  if name == "mspace":
@@ -139,6 +158,8 @@ def _convert(element: etree._Element) -> str:
139
158
  return rf"\left{opening}{separators[0].join(values)}\right{closing}"
140
159
  if name == "mtable":
141
160
  rows = [_convert(child) for child in children if local_name(child) in {"mtr", "mlabeledtr"}]
161
+ if len(rows) == 1 and (tagged := _tag_equation_number(rows[0])) is not None:
162
+ return tagged
142
163
  return r"\begin{matrix}" + r" \\ ".join(rows) + r"\end{matrix}"
143
164
  if name in {"mtr", "mlabeledtr"}:
144
165
  return " & ".join(_convert(child) for child in children)
@@ -160,7 +181,7 @@ def mathml_to_latex(math_element: etree._Element) -> str | None:
160
181
  if "tex" in encoding and (annotation.text or "").strip():
161
182
  return (annotation.text or "").strip()
162
183
  latex = _convert(math_element).strip()
163
- return latex or None
184
+ return _tag_equation_number(latex) or latex or None
164
185
 
165
186
 
166
187
  __all__ = ["mathml_to_latex"]
@@ -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"]