docvortex 0.4.10__tar.gz → 0.4.12__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 (676) hide show
  1. {docvortex-0.4.10/src/docvortex.egg-info → docvortex-0.4.12}/PKG-INFO +1 -1
  2. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/epub/xhtml.py +11 -2
  3. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/html/constants.py +0 -2
  4. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/html/resources.py +17 -43
  5. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/image.py +4 -0
  6. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/odf/text.py +31 -2
  7. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/pptx/resources.py +22 -20
  8. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/mathml.py +23 -2
  9. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/contracts.py +1 -3
  10. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/export/files.py +12 -3
  11. docvortex-0.4.12/src/docvortex/foundation/_svg_raster.py +158 -0
  12. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/version.py +1 -1
  13. {docvortex-0.4.10 → docvortex-0.4.12/src/docvortex.egg-info}/PKG-INFO +1 -1
  14. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex.egg-info/SOURCES.txt +2 -0
  15. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_odf_test_utils.py +6 -1
  16. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_epub.py +49 -1
  17. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_html.py +45 -61
  18. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_odf.py +62 -0
  19. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_office_title_types.py +42 -10
  20. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_shared_helpers.py +47 -0
  21. docvortex-0.4.12/tests/unittest/test_svg_raster.py +79 -0
  22. {docvortex-0.4.10 → docvortex-0.4.12}/LICENSE.md +0 -0
  23. {docvortex-0.4.10 → docvortex-0.4.12}/MANIFEST.in +0 -0
  24. {docvortex-0.4.10 → docvortex-0.4.12}/README.md +0 -0
  25. {docvortex-0.4.10 → docvortex-0.4.12}/demo/README.md +0 -0
  26. {docvortex-0.4.10 → docvortex-0.4.12}/demo/demo.py +0 -0
  27. {docvortex-0.4.10 → docvortex-0.4.12}/demo/office_docs/README.md +0 -0
  28. {docvortex-0.4.10 → docvortex-0.4.12}/demo/office_docs/docx_01.doc +0 -0
  29. {docvortex-0.4.10 → docvortex-0.4.12}/demo/office_docs/docx_01.docx +0 -0
  30. {docvortex-0.4.10 → docvortex-0.4.12}/demo/office_docs/pptx_01.ppt +0 -0
  31. {docvortex-0.4.10 → docvortex-0.4.12}/demo/office_docs/pptx_01.pptx +0 -0
  32. {docvortex-0.4.10 → docvortex-0.4.12}/demo/office_docs/rtf_01.rtf +0 -0
  33. {docvortex-0.4.10 → docvortex-0.4.12}/demo/office_docs/xlsx_01.xls +0 -0
  34. {docvortex-0.4.10 → docvortex-0.4.12}/demo/office_docs/xlsx_01.xlsx +0 -0
  35. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
  36. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
  37. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/caibao1.pdf +0 -0
  38. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/demo1.pdf +0 -0
  39. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/demo2.pdf +0 -0
  40. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/demo3.pdf +0 -0
  41. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/demo4.pdf +0 -0
  42. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/demo6.pdf +0 -0
  43. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
  44. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
  45. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
  46. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
  47. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs/small_ocr.pdf +0 -0
  48. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
  49. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
  50. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
  51. {docvortex-0.4.10 → docvortex-0.4.12}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
  52. {docvortex-0.4.10 → docvortex-0.4.12}/docs/HTML_PROTOCOL.md +0 -0
  53. {docvortex-0.4.10 → docvortex-0.4.12}/docs/JSON_PROTOCOL.md +0 -0
  54. {docvortex-0.4.10 → docvortex-0.4.12}/docs/METADATA.md +0 -0
  55. {docvortex-0.4.10 → docvortex-0.4.12}/docs/PDF_FONTS.md +0 -0
  56. {docvortex-0.4.10 → docvortex-0.4.12}/docs/RENDER_OWNERSHIP.md +0 -0
  57. {docvortex-0.4.10 → docvortex-0.4.12}/docs/USAGE.md +0 -0
  58. {docvortex-0.4.10 → docvortex-0.4.12}/docs/flash-manual-annotations-2026-09-15.md +0 -0
  59. {docvortex-0.4.10 → docvortex-0.4.12}/docs/flash-round2-annotations-2026-09-15.md +0 -0
  60. {docvortex-0.4.10 → docvortex-0.4.12}/docs/flash-rule-generalization-2026-09-15.md +0 -0
  61. {docvortex-0.4.10 → docvortex-0.4.12}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
  62. {docvortex-0.4.10 → docvortex-0.4.12}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
  63. {docvortex-0.4.10 → docvortex-0.4.12}/docs/flash-title-coverage-2026-09-16.md +0 -0
  64. {docvortex-0.4.10 → docvortex-0.4.12}/docs/sdk-0.4.md +0 -0
  65. {docvortex-0.4.10 → docvortex-0.4.12}/pyproject.toml +0 -0
  66. {docvortex-0.4.10 → docvortex-0.4.12}/schemas/middle-2.0.json +0 -0
  67. {docvortex-0.4.10 → docvortex-0.4.12}/schemas/model-2.0.json +0 -0
  68. {docvortex-0.4.10 → docvortex-0.4.12}/setup.cfg +0 -0
  69. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/__init__.py +0 -0
  70. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/__init__.py +0 -0
  71. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/__init__.py +0 -0
  72. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
  73. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
  74. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/_shared/image.py +0 -0
  75. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
  76. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
  77. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
  78. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
  79. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
  80. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
  81. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/_shared/names.py +0 -0
  82. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
  83. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/contracts.py +0 -0
  84. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/csv.py +0 -0
  85. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
  86. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/epub/constants.py +0 -0
  87. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/epub/converter.py +0 -0
  88. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/epub/errors.py +0 -0
  89. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
  90. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/epub/package.py +0 -0
  91. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/epub/properties.py +0 -0
  92. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/html/__init__.py +0 -0
  93. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/html/anchors.py +0 -0
  94. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/html/converter.py +0 -0
  95. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/html/document.py +0 -0
  96. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/html/errors.py +0 -0
  97. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/html/metadata.py +0 -0
  98. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/html/selector.py +0 -0
  99. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/models.py +0 -0
  100. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
  101. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
  102. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
  103. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
  104. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
  105. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
  106. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/images.py +0 -0
  107. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
  108. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/models.py +0 -0
  109. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/package.py +0 -0
  110. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/path.py +0 -0
  111. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
  112. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
  113. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
  114. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/table.py +0 -0
  115. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/text.py +0 -0
  116. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
  117. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/__init__.py +0 -0
  118. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
  119. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
  120. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
  121. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
  122. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
  123. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
  124. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
  125. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
  126. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
  127. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
  128. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
  129. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
  130. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
  131. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
  132. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
  133. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
  134. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
  135. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
  136. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
  137. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
  138. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
  139. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
  140. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
  141. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
  142. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
  143. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
  144. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
  145. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
  146. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
  147. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
  148. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
  149. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
  150. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
  151. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
  152. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/errors.py +0 -0
  153. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
  154. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
  155. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
  156. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
  157. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/limits.py +0 -0
  158. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/metadata.py +0 -0
  159. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
  160. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
  161. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
  162. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
  163. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
  164. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
  165. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
  166. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
  167. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/odf/styles.py +0 -0
  168. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/odf/table.py +0 -0
  169. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
  170. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/opc.py +0 -0
  171. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
  172. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
  173. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
  174. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
  175. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
  176. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
  177. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
  178. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
  179. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
  180. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
  181. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
  182. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
  183. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
  184. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
  185. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
  186. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
  187. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
  188. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
  189. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
  190. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
  191. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
  192. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
  193. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
  194. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
  195. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
  196. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
  197. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
  198. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/streams.py +0 -0
  199. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
  200. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
  201. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
  202. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
  203. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
  204. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
  205. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
  206. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
  207. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
  208. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
  209. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
  210. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
  211. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
  212. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
  213. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
  214. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
  215. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
  216. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
  217. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
  218. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
  219. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
  220. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
  221. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
  222. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
  223. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
  224. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
  225. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
  226. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
  227. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
  228. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
  229. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
  230. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
  231. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
  232. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
  233. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
  234. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
  235. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
  236. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
  237. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
  238. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
  239. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
  240. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
  241. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
  242. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
  243. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
  244. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
  245. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/models.py +0 -0
  246. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
  247. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
  248. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
  249. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
  250. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
  251. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
  252. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
  253. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
  254. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
  255. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
  256. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
  257. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
  258. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
  259. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
  260. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
  261. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
  262. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
  263. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
  264. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
  265. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
  266. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
  267. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
  268. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
  269. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
  270. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
  271. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
  272. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
  273. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
  274. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
  275. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
  276. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
  277. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
  278. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
  279. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
  280. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
  281. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/analyzers/pdf.py +0 -0
  282. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/api.py +0 -0
  283. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/assets/__init__.py +0 -0
  284. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/assets/images.py +0 -0
  285. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/assets/store.py +0 -0
  286. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/cli.py +0 -0
  287. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/codecs/__init__.py +0 -0
  288. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/codecs/html/__init__.py +0 -0
  289. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/codecs/html/contracts.py +0 -0
  290. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/codecs/html/materializer.py +0 -0
  291. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/codecs/html/parser.py +0 -0
  292. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/codecs/html/resources.py +0 -0
  293. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/codecs/json.py +0 -0
  294. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/__init__.py +0 -0
  295. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/inline.py +0 -0
  296. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/links.py +0 -0
  297. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/markup/__init__.py +0 -0
  298. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/markup/anchors.py +0 -0
  299. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/markup/formula.py +0 -0
  300. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/markup/projector.py +0 -0
  301. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/markup/styles.py +0 -0
  302. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/normalization.py +0 -0
  303. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/spans.py +0 -0
  304. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/table/__init__.py +0 -0
  305. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/table/blocks.py +0 -0
  306. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/table/content.py +0 -0
  307. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/table/document.py +0 -0
  308. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/table/html.py +0 -0
  309. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/table/models.py +0 -0
  310. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/table/rules.py +0 -0
  311. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/table/structure.py +0 -0
  312. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/text.py +0 -0
  313. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/content/tree.py +0 -0
  314. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/__init__.py +0 -0
  315. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/detection.py +0 -0
  316. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/filetypes.py +0 -0
  317. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/page_range.py +0 -0
  318. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/__init__.py +0 -0
  319. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/_document.py +0 -0
  320. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/classify.py +0 -0
  321. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/constants.py +0 -0
  322. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/font_runtime.py +0 -0
  323. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/images.py +0 -0
  324. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/layout.py +0 -0
  325. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/metadata.py +0 -0
  326. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/native_annotations.py +0 -0
  327. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/native_contracts.py +0 -0
  328. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/native_coordinates.py +0 -0
  329. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
  330. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/native_objects.py +0 -0
  331. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
  332. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/pdfium.py +0 -0
  333. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/raster.py +0 -0
  334. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/text/__init__.py +0 -0
  335. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/text/_contracts.py +0 -0
  336. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/text/dedup.py +0 -0
  337. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/text/extract.py +0 -0
  338. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/text/geometry.py +0 -0
  339. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/text/groups.py +0 -0
  340. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/pdf/visuals.py +0 -0
  341. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/properties.py +0 -0
  342. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/document/source.py +0 -0
  343. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/errors.py +0 -0
  344. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/export/__init__.py +0 -0
  345. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/export/bundle.py +0 -0
  346. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/export/middle.py +0 -0
  347. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/foundation/__init__.py +0 -0
  348. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/foundation/_coordinates.py +0 -0
  349. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/foundation/_geometry.py +0 -0
  350. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/foundation/_hyperlink.py +0 -0
  351. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/foundation/_image.py +0 -0
  352. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/foundation/_image_operations.py +0 -0
  353. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/foundation/_image_payload.py +0 -0
  354. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/foundation/_text.py +0 -0
  355. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/foundation/image_encoding.py +0 -0
  356. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/foundation/language.py +0 -0
  357. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/foundation/type_identity.py +0 -0
  358. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/foundation/xml_names.py +0 -0
  359. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/geometry.py +0 -0
  360. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/metadata.py +0 -0
  361. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/options.py +0 -0
  362. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/postprocess/__init__.py +0 -0
  363. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/postprocess/content.py +0 -0
  364. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/postprocess/document.py +0 -0
  365. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/postprocess/lists.py +0 -0
  366. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/postprocess/page_blocks.py +0 -0
  367. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/postprocess/pages.py +0 -0
  368. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/postprocess/paragraphs.py +0 -0
  369. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/postprocess/visual.py +0 -0
  370. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/public_api.py +0 -0
  371. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/__init__.py +0 -0
  372. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/__init__.py +0 -0
  373. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/common/__init__.py +0 -0
  374. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/common/context.py +0 -0
  375. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/common/html_table.py +0 -0
  376. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/common/index.py +0 -0
  377. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/common/list_items.py +0 -0
  378. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/common/planner.py +0 -0
  379. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/docx/__init__.py +0 -0
  380. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/docx/assets.py +0 -0
  381. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/docx/inline.py +0 -0
  382. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/docx/math.py +0 -0
  383. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/docx/renderer.py +0 -0
  384. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/docx/styles.py +0 -0
  385. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/docx/table.py +0 -0
  386. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/epub/__init__.py +0 -0
  387. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/epub/assets.py +0 -0
  388. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/epub/package.py +0 -0
  389. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/epub/renderer.py +0 -0
  390. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/html/__init__.py +0 -0
  391. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/html/inline.py +0 -0
  392. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/html/renderer.py +0 -0
  393. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
  394. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/html/table.py +0 -0
  395. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/latex/__init__.py +0 -0
  396. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/latex/assets.py +0 -0
  397. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/latex/inline.py +0 -0
  398. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/latex/renderer.py +0 -0
  399. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/latex/table.py +0 -0
  400. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
  401. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/markdown/assets.py +0 -0
  402. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
  403. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
  404. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/markdown/inline.py +0 -0
  405. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
  406. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/markdown/table.py +0 -0
  407. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
  408. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/assets.py +0 -0
  409. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
  410. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
  411. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/formula.py +0 -0
  412. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
  413. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/inline.py +0 -0
  414. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/original.py +0 -0
  415. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
  416. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/paragraph.py +0 -0
  417. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
  418. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/styles.py +0 -0
  419. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/table.py +0 -0
  420. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
  421. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
  422. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
  423. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
  424. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
  425. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/api.py +0 -0
  426. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/contracts.py +0 -0
  427. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/docx.py +0 -0
  428. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/epub.py +0 -0
  429. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/fragments.py +0 -0
  430. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/html.py +0 -0
  431. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/latex.py +0 -0
  432. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/markdown.py +0 -0
  433. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/pdf.py +0 -0
  434. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/render/structured_content.py +0 -0
  435. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/resources/epub/docvortex.css +0 -0
  436. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
  437. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/resources/fonts/NOTICE +0 -0
  438. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/resources/fonts/manifest.json +0 -0
  439. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/resources/html/docvortex.css +0 -0
  440. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/resources/html/docvortex.min.css +0 -0
  441. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
  442. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/result.py +0 -0
  443. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/schema.py +0 -0
  444. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex/visualization.py +0 -0
  445. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex.egg-info/dependency_links.txt +0 -0
  446. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex.egg-info/entry_points.txt +0 -0
  447. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex.egg-info/requires.txt +0 -0
  448. {docvortex-0.4.10 → docvortex-0.4.12}/src/docvortex.egg-info/top_level.txt +0 -0
  449. {docvortex-0.4.10 → docvortex-0.4.12}/tests/benchmarks/flash_pdf.py +0 -0
  450. {docvortex-0.4.10 → docvortex-0.4.12}/tests/benchmarks/native_pdf_table.py +0 -0
  451. {docvortex-0.4.10 → docvortex-0.4.12}/tests/benchmarks/pdf_render.py +0 -0
  452. {docvortex-0.4.10 → docvortex-0.4.12}/tests/benchmarks/pipeline.py +0 -0
  453. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
  454. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_layout_block_expectations.json +0 -0
  455. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
  456. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
  457. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_manual_annotations.json +0 -0
  458. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_manual_review_decisions.json +0 -0
  459. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_reviewed_history.json +0 -0
  460. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_round2_annotations.json +0 -0
  461. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_round2_review_decisions.json +0 -0
  462. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_round3_annotations.json +0 -0
  463. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
  464. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_round3_review_decisions.json +0 -0
  465. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
  466. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
  467. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
  468. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
  469. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
  470. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
  471. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/pdf_char_dedup.json +0 -0
  472. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
  473. {docvortex-0.4.10 → docvortex-0.4.12}/tests/fixtures/rtf/semantic.rtf +0 -0
  474. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_architecture.py +0 -0
  475. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_benchmark_entrypoint.py +0 -0
  476. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_brand_protocol.py +0 -0
  477. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_cli_logging.py +0 -0
  478. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_complete_pipeline.py +0 -0
  479. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_converter_lifecycle.py +0 -0
  480. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_document_envelope.py +0 -0
  481. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_document_metadata.py +0 -0
  482. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_format_matrix.py +0 -0
  483. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_geometry_api.py +0 -0
  484. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_history_geometry_tools.py +0 -0
  485. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_html_namespace.py +0 -0
  486. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_mixed_font_script_reference.py +0 -0
  487. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_pdf_analysis_api.py +0 -0
  488. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_pdf_font_geometry.py +0 -0
  489. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_pdf_font_runtime.py +0 -0
  490. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_pdf_model_text_normalization.py +0 -0
  491. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_pdf_output_text.py +0 -0
  492. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_pdf_render_pool.py +0 -0
  493. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_pdf_source_row_merging.py +0 -0
  494. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_pdf_symbol_normalization.py +0 -0
  495. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_public_export_api.py +0 -0
  496. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_public_image_api.py +0 -0
  497. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_public_pipeline.py +0 -0
  498. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_refactor_raster.py +0 -0
  499. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_refactor_rendering.py +0 -0
  500. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_refactor_resources.py +0 -0
  501. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_release_ci_gate.py +0 -0
  502. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_render_ownership.py +0 -0
  503. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_renderer_branding.py +0 -0
  504. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_shared_boundaries.py +0 -0
  505. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_system_font_pdf_pipeline.py +0 -0
  506. {docvortex-0.4.10 → docvortex-0.4.12}/tests/test_validated_geometry.py +0 -0
  507. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
  508. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_epub_test_utils.py +0 -0
  509. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_flash_pdf_test_utils.py +0 -0
  510. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_image_mtef_test_utils.py +0 -0
  511. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_legacy_doc_test_utils.py +0 -0
  512. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
  513. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_legacy_xls_test_utils.py +0 -0
  514. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_metafile_test_utils.py +0 -0
  515. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_mtef_test_utils.py +0 -0
  516. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_mtef_v5_test_utils.py +0 -0
  517. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_native_test_utils.py +0 -0
  518. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_ofd_test_utils.py +0 -0
  519. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
  520. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
  521. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/_span_test_utils.py +0 -0
  522. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
  523. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
  524. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
  525. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
  526. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
  527. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
  528. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
  529. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
  530. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
  531. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
  532. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
  533. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
  534. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
  535. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
  536. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
  537. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
  538. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
  539. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
  540. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
  541. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
  542. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
  543. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
  544. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
  545. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
  546. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
  547. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
  548. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
  549. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
  550. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
  551. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/pdfs/test.pdf +0 -0
  552. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_backend_architecture.py +0 -0
  553. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_backend_block_object_regressions.py +0 -0
  554. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_docx_assets.py +0 -0
  555. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_docx_complex_fields.py +0 -0
  556. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_docx_math.py +0 -0
  557. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_docx_render.py +0 -0
  558. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_docx_special_char_tables.py +0 -0
  559. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_docx_table.py +0 -0
  560. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_emfplus_integration.py +0 -0
  561. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_epub_backlinks.py +0 -0
  562. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_epub_quoted_note_types.py +0 -0
  563. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_epub_render.py +0 -0
  564. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
  565. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_csv.py +0 -0
  566. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_docx_equationxml.py +0 -0
  567. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_image_mtef.py +0 -0
  568. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
  569. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_legacy_doc.py +0 -0
  570. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
  571. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_legacy_ppt.py +0 -0
  572. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_legacy_xls.py +0 -0
  573. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
  574. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_manual_annotations.py +0 -0
  575. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_markup_anchors.py +0 -0
  576. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_model.py +0 -0
  577. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_mtef_v5.py +0 -0
  578. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_ofd.py +0 -0
  579. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_office_image_mtef.py +0 -0
  580. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_office_metafile.py +0 -0
  581. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_office_models.py +0 -0
  582. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
  583. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
  584. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
  585. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
  586. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
  587. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
  588. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
  589. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
  590. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_extractor.py +0 -0
  591. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_formulas.py +0 -0
  592. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_graphics.py +0 -0
  593. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
  594. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
  595. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
  596. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_native_text.py +0 -0
  597. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
  598. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
  599. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_samples.py +0 -0
  600. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_scripts.py +0 -0
  601. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_semantics.py +0 -0
  602. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_tables.py +0 -0
  603. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
  604. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
  605. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_titles.py +0 -0
  606. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
  607. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_round2_annotations.py +0 -0
  608. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_round3_annotations.py +0 -0
  609. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_rtf.py +0 -0
  610. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_rule_generalization.py +0 -0
  611. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_spatial_evidence.py +0 -0
  612. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
  613. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_guess_suffix_ole2.py +0 -0
  614. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_html_css_build.py +0 -0
  615. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_html_render.py +0 -0
  616. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_html_security.py +0 -0
  617. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
  618. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_latex_render.py +0 -0
  619. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_markdown_render.py +0 -0
  620. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_middle_json_block_models.py +0 -0
  621. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_middle_json_export.py +0 -0
  622. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_middle_json_validator.py +0 -0
  623. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_model_json.py +0 -0
  624. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_native_pdf_table.py +0 -0
  625. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
  626. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
  627. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
  628. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
  629. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
  630. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_ofd_assembly.py +0 -0
  631. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_ofd_vector_tables.py +0 -0
  632. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_office_demo_exports.py +0 -0
  633. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_office_demo_pages.py +0 -0
  634. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_office_parser_regressions.py +0 -0
  635. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_cjk_style.py +0 -0
  636. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
  637. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_classify.py +0 -0
  638. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_demo_links.py +0 -0
  639. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
  640. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_document.py +0 -0
  641. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_formula_layout.py +0 -0
  642. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_object_clipping.py +0 -0
  643. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_original_layout.py +0 -0
  644. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_pagination.py +0 -0
  645. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
  646. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_render.py +0 -0
  647. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
  648. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_structured_tables.py +0 -0
  649. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_table_cache.py +0 -0
  650. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_table_round2.py +0 -0
  651. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_text_dedup.py +0 -0
  652. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_text_styles.py +0 -0
  653. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_title_font_plan.py +0 -0
  654. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_title_space.py +0 -0
  655. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_pdf_visualization.py +0 -0
  656. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_postprocess_page_blocks.py +0 -0
  657. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_postprocess_pages.py +0 -0
  658. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_postprocess_paragraphs.py +0 -0
  659. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_postprocess_visual.py +0 -0
  660. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_render_api.py +0 -0
  661. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_render_html_table.py +0 -0
  662. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_render_image_renderer.py +0 -0
  663. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_render_list_index_utils.py +0 -0
  664. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_structured_content_render.py +0 -0
  665. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_table_merge.py +0 -0
  666. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_table_merge_cell_merge.py +0 -0
  667. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_text_block_anchor.py +0 -0
  668. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_text_boundary_rules.py +0 -0
  669. {docvortex-0.4.10 → docvortex-0.4.12}/tests/unittest/test_text_utils.py +0 -0
  670. {docvortex-0.4.10 → docvortex-0.4.12}/tools/__init__.py +0 -0
  671. {docvortex-0.4.10 → docvortex-0.4.12}/tools/build_html_css.py +0 -0
  672. {docvortex-0.4.10 → docvortex-0.4.12}/tools/calibrate_pdf_geometry.py +0 -0
  673. {docvortex-0.4.10 → docvortex-0.4.12}/tools/capture_baseline.py +0 -0
  674. {docvortex-0.4.10 → docvortex-0.4.12}/tools/capture_platform_layout.py +0 -0
  675. {docvortex-0.4.10 → docvortex-0.4.12}/tools/compare_font_platforms.py +0 -0
  676. {docvortex-0.4.10 → docvortex-0.4.12}/tools/font_geometry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.10
3
+ Version: 0.4.12
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
@@ -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,7 +8,6 @@ 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
12
11
  MAX_HTML_STYLESHEET_BYTES: Final = 5 * 1024 * 1024
13
12
  MAX_HTML_STYLESHEET_TOTAL_BYTES: Final = 20 * 1024 * 1024
14
13
  MAX_HTML_RENDERED_BYTES: Final = 256 * 1024 * 1024
@@ -23,5 +22,4 @@ __all__ = [
23
22
  "MAX_HTML_RENDERED_BYTES",
24
23
  "MAX_HTML_STYLESHEET_BYTES",
25
24
  "MAX_HTML_STYLESHEET_TOTAL_BYTES",
26
- "MAX_REMOTE_IMAGE_FETCH_SECONDS",
27
25
  ]
@@ -6,7 +6,6 @@ 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
10
9
 
11
10
  from lxml import etree # type: ignore[reportMissingImports]
12
11
 
@@ -14,13 +13,13 @@ from docvortex.content.markup import ResolvedMarkupImage
14
13
  from docvortex.document.contracts import HtmlSourceContext
15
14
 
16
15
  from ....foundation._image_payload import parse_image_data_uri_strict, validate_remote_image_url
16
+ from ....foundation._svg_raster import looks_like_svg_payload, serialize_svg_image
17
17
  from .._shared.hyperlink import sanitize_hyperlink_target
18
18
  from .constants import (
19
19
  MAX_HTML_IMAGE_BYTES,
20
20
  MAX_HTML_IMAGE_TOTAL_BYTES,
21
21
  MAX_HTML_STYLESHEET_BYTES,
22
22
  MAX_HTML_STYLESHEET_TOTAL_BYTES,
23
- MAX_REMOTE_IMAGE_FETCH_SECONDS,
24
23
  )
25
24
  from .errors import HtmlResourceLimitError
26
25
 
@@ -67,7 +66,6 @@ class HtmlResourceContext:
67
66
  self._image_bytes = 0
68
67
  self._stylesheet_bytes = 0
69
68
  self._image_cache: dict[Path, str] = {}
70
- self._remote_image_cache: dict[str, str] = {}
71
69
  self._data_image_cache: dict[str, ResolvedMarkupImage] = {}
72
70
  self._stylesheet_cache: dict[Path, str] = {}
73
71
  self._local_root = source_context.local_resource_root.resolve() if source_context.local_resource_root else None
@@ -160,14 +158,14 @@ class HtmlResourceContext:
160
158
  return sanitize_hyperlink_target(normalized, allow_relative=True, allow_fragment=True)
161
159
 
162
160
  def resolve_image(self, source: str, *, alt: str = "") -> ResolvedMarkupImage | None:
163
- """按 data URI、远程 URL、本地安全文件的顺序解析图片,远程图片仅在来源显式开启下载时内嵌。"""
161
+ """按 data URI、远程 URL、本地安全文件的顺序解析图片,远程图片仅保留受限外链。"""
164
162
  normalized = (source or "").strip()
165
163
  if not normalized:
166
164
  return ResolvedMarkupImage(alt=alt) if alt else None
167
165
  if normalized.casefold().startswith("data:"):
168
166
  return self._resolve_data_image(normalized, alt=alt)
169
167
  if remote_url := self._resolve_remote_image_url(normalized):
170
- return self._resolve_remote_image(remote_url, alt=alt)
168
+ return ResolvedMarkupImage(image_url=remote_url, alt=alt)
171
169
  local_path = self._resolve_local_path(normalized)
172
170
  if local_path is None or not local_path.is_file():
173
171
  return ResolvedMarkupImage(alt=alt) if alt else None
@@ -178,7 +176,10 @@ class HtmlResourceContext:
178
176
  payload = source_file.read(MAX_HTML_IMAGE_BYTES + 1)
179
177
  if len(payload) > MAX_HTML_IMAGE_BYTES:
180
178
  raise HtmlResourceLimitError(f"HTML image exceeds max_html_image_bytes={MAX_HTML_IMAGE_BYTES}")
181
- data_uri = _image_data_uri(payload)
179
+ if local_path.suffix.casefold() == ".svg" or looks_like_svg_payload(payload):
180
+ data_uri = serialize_svg_image(payload)
181
+ else:
182
+ data_uri = _image_data_uri(payload)
182
183
  if data_uri is None:
183
184
  return ResolvedMarkupImage(alt=alt) if alt else None
184
185
  self._charge_image_bytes(len(payload))
@@ -228,7 +229,7 @@ class HtmlResourceContext:
228
229
  return self.anchors.note_anchor(note) if self.anchors else None
229
230
 
230
231
  def _resolve_data_image(self, data_uri: str, *, alt: str) -> ResolvedMarkupImage | None:
231
- """严格解析 data URI,并执行单图与累计图片预算。"""
232
+ """严格解析 data URI 并执行图片预算,SVG 光栅化为 PNG 后内嵌。"""
232
233
  if cached := self._data_image_cache.get(data_uri):
233
234
  return ResolvedMarkupImage(image_base64=cached.image_base64, alt=alt)
234
235
  if len(data_uri) > MAX_HTML_IMAGE_BYTES * 2:
@@ -238,7 +239,15 @@ class HtmlResourceContext:
238
239
  except ValueError:
239
240
  return ResolvedMarkupImage(alt=alt) if alt else None
240
241
  if extension == "svg":
241
- return ResolvedMarkupImage(alt=alt) if alt else None
242
+ if len(payload) > MAX_HTML_IMAGE_BYTES:
243
+ raise HtmlResourceLimitError(f"HTML image exceeds max_html_image_bytes={MAX_HTML_IMAGE_BYTES}")
244
+ raster_uri = serialize_svg_image(payload)
245
+ if raster_uri is None:
246
+ return ResolvedMarkupImage(alt=alt) if alt else None
247
+ self._charge_image_bytes(len(payload))
248
+ resolved = ResolvedMarkupImage(image_base64=raster_uri, alt=alt)
249
+ self._data_image_cache[data_uri] = resolved
250
+ return resolved
242
251
  if len(payload) > MAX_HTML_IMAGE_BYTES:
243
252
  raise HtmlResourceLimitError(f"HTML image exceeds max_html_image_bytes={MAX_HTML_IMAGE_BYTES}")
244
253
  self._charge_image_bytes(len(payload))
@@ -246,41 +255,6 @@ class HtmlResourceContext:
246
255
  self._data_image_cache[data_uri] = resolved
247
256
  return resolved
248
257
 
249
- def _resolve_remote_image(self, remote_url: str, *, alt: str) -> ResolvedMarkupImage:
250
- """远程图片默认保持外链,来源显式开启下载时按缓存下载内嵌。"""
251
- if not self.source_context.fetch_remote_images:
252
- return ResolvedMarkupImage(image_url=remote_url, alt=alt)
253
- if cached := self._remote_image_cache.get(remote_url):
254
- return ResolvedMarkupImage(image_base64=cached, alt=alt)
255
- data_uri = self._fetch_remote_image(remote_url)
256
- if data_uri is None:
257
- return ResolvedMarkupImage(image_url=remote_url, alt=alt)
258
- self._remote_image_cache[remote_url] = data_uri
259
- return ResolvedMarkupImage(image_base64=data_uri, alt=alt)
260
-
261
- def _fetch_remote_image(self, remote_url: str) -> str | None:
262
- """在单图上限与超时约束内下载远程图片并复核签名,网络失败返回 None 退回外链。"""
263
- try:
264
- with urlopen(remote_url, timeout=MAX_REMOTE_IMAGE_FETCH_SECONDS) as response:
265
- chunks: list[bytes] = []
266
- remaining = MAX_HTML_IMAGE_BYTES + 1
267
- while remaining > 0:
268
- chunk = response.read(remaining)
269
- if not chunk:
270
- break
271
- chunks.append(chunk)
272
- remaining -= len(chunk)
273
- except (OSError, ValueError):
274
- return None
275
- payload = b"".join(chunks)
276
- if len(payload) > MAX_HTML_IMAGE_BYTES:
277
- raise HtmlResourceLimitError(f"HTML image exceeds max_html_image_bytes={MAX_HTML_IMAGE_BYTES}")
278
- data_uri = _image_data_uri(payload)
279
- if data_uri is None:
280
- return None
281
- self._charge_image_bytes(len(payload))
282
- return data_uri
283
-
284
258
  def _charge_image_bytes(self, byte_count: int) -> None:
285
259
  """累计实际保留的图片字节,并在超限时终止整份文档。"""
286
260
  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):
@@ -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"):
@@ -712,7 +733,15 @@ class OdfBlockParser:
712
733
  )
713
734
  if not image_bytes:
714
735
  return None, alt
715
- 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
+ )
716
745
 
717
746
  def _object_root(self, object_element: etree._Element) -> tuple[etree._Element | None, str | None]:
718
747
  """读取 draw:object 指向的子文档内容树和成员路径。"""
@@ -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"]
@@ -10,14 +10,12 @@ from pathlib import Path
10
10
  class HtmlSourceContext:
11
11
  """保存相对链接解析及 HTML 解码所需的来源上下文。
12
12
 
13
- fetch_remote_images 默认关闭,远程图片仅记录 URL;开启后解析阶段会对受限
14
- HTTP(S) 图片发起网络请求并内嵌,不可信输入的 SSRF 风险由调用者承担。
13
+ 远程图片永不下载,仅在结果中保留受限 HTTP(S) 外链,解析过程保持零网络请求。
15
14
  """
16
15
 
17
16
  source_uri: str | None = None
18
17
  local_resource_root: Path | None = None
19
18
  transport_encoding: str | None = None
20
- fetch_remote_images: bool = False
21
19
 
22
20
 
23
21
  __all__ = ["HtmlSourceContext"]
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from pathlib import Path
6
+ from urllib.parse import urlsplit
6
7
 
7
8
  from ..assets import AssetStore
8
9
  from ..content.tree import iter_child_blocks
@@ -28,7 +29,7 @@ def materialize_middle(middle_json: MiddleJson, assets: AssetStore | None = None
28
29
 
29
30
 
30
31
  def validate_materialized_assets(middle_json: MiddleJson, assets: AssetStore) -> None:
31
- """拒绝依赖外部文件或网络的未物化图片,保证结果包能离线重渲染。"""
32
+ """拒绝缺失的已物化素材,保证结果包内部引用完整;源文档外链原样保留。"""
32
33
  from bs4 import BeautifulSoup
33
34
 
34
35
  pending = [block for page in middle_json.pages for block in page.blocks]
@@ -38,8 +39,6 @@ def validate_materialized_assets(middle_json: MiddleJson, assets: AssetStore) ->
38
39
  image_path = getattr(block, "image_path", None)
39
40
  if image_path and image_path not in assets:
40
41
  raise ValueError(f"Missing materialized asset: {image_path}")
41
- if getattr(block, "image_url", None) and not image_path:
42
- raise ValueError("An external image must be materialized before saving a bundle")
43
42
  content = getattr(block, "content", None)
44
43
  if str(block.type) not in {"table_body", "chart_body", "image_body"} or not isinstance(content, str):
45
44
  continue
@@ -47,6 +46,8 @@ def validate_materialized_assets(middle_json: MiddleJson, assets: AssetStore) ->
47
46
  continue
48
47
  for image in BeautifulSoup(content, "html.parser").find_all("img"):
49
48
  reference = image.get("src")
49
+ if reference and _is_external_reference(reference):
50
+ continue
50
51
  if reference and reference not in assets:
51
52
  raise ValueError(f"Missing materialized HTML image: {reference}")
52
53
 
@@ -63,4 +64,12 @@ def write_artifact(artifact: RenderArtifact, path: Path, *, overwrite: bool) ->
63
64
  return ExportResult(path=path, asset_paths=tuple(path.parent / name for name in artifact.assets))
64
65
 
65
66
 
67
+ def _is_external_reference(reference: str) -> bool:
68
+ """判断富文本图片引用是否为保留的受限 HTTP(S) 外链。"""
69
+ try:
70
+ return urlsplit(reference).scheme.casefold() in {"http", "https"}
71
+ except ValueError:
72
+ return False
73
+
74
+
66
75
  __all__ = ["materialize_middle", "validate_materialized_assets", "write_artifact"]
@@ -0,0 +1,158 @@
1
+ """把外部 SVG 图片资源受控光栅化为 PNG data URI 的共享能力。"""
2
+
3
+ from __future__ import annotations
4
+
5
+ import base64
6
+ import math
7
+ import re
8
+ import xml.etree.ElementTree as ElementTree
9
+ from io import BytesIO
10
+ from pathlib import PurePosixPath
11
+ from typing import Final
12
+
13
+ from loguru import logger
14
+
15
+ from ._image_payload import (
16
+ MAX_DECODED_RASTER_DIMENSION,
17
+ MAX_DECODED_RASTER_PIXELS,
18
+ _parse_svg_root_strict,
19
+ )
20
+
21
+ SVG_MEDIA_TYPE: Final = "image/svg+xml"
22
+ SVG_IMAGE_EXTENSION: Final = ".svg"
23
+ # 小尺寸 logo 按固有像素直出会明显发虚,统一放大到最小可视长边。
24
+ _MIN_RENDER_LONG_EDGE: Final = 512
25
+ _SVG_LENGTH_RE = re.compile(r"^([0-9]*\.?[0-9]+)\s*(px|pt|pc|mm|cm|in|q|%)?$", re.IGNORECASE)
26
+ _LENGTH_TO_PX: Final = {
27
+ "": 1.0,
28
+ "px": 1.0,
29
+ "pt": 96.0 / 72.0,
30
+ "pc": 16.0,
31
+ "mm": 96.0 / 25.4,
32
+ "cm": 96.0 / 2.54,
33
+ "in": 96.0,
34
+ "q": 96.0 / 101.6,
35
+ }
36
+ _SVG_PAYLOAD_SNIFF_WINDOW: Final = 4096
37
+
38
+
39
+ def is_svg_image_part(part_name: object | None = None, content_type: str | None = None) -> bool:
40
+ """根据部件扩展名和声明媒体类型判断是否为 SVG 图片部件。"""
41
+ normalized_type = (content_type or "").split(";", 1)[0].strip().casefold()
42
+ if normalized_type == SVG_MEDIA_TYPE:
43
+ return True
44
+ suffix = PurePosixPath(str(part_name or "")).suffix.casefold()
45
+ return suffix == SVG_IMAGE_EXTENSION
46
+
47
+
48
+ def looks_like_svg_payload(image_data: bytes) -> bool:
49
+ """按载荷前缀嗅探 SVG 根节点,兜底识别被错误标注的图片部件。"""
50
+ head = image_data[:_SVG_PAYLOAD_SNIFF_WINDOW].lstrip()
51
+ if head.startswith(b"<svg") or head.startswith(b"<svg:"):
52
+ return True
53
+ return head.startswith(b"<?xml") and b"<svg" in head
54
+
55
+
56
+ def _length_to_px(value: str | None) -> float | None:
57
+ """把 SVG width/height 长度解析为像素值,百分比等上下文相关单位返回 None。"""
58
+ match = _SVG_LENGTH_RE.match((value or "").strip())
59
+ if match is None:
60
+ return None
61
+ unit = match.group(2) or ""
62
+ if unit == "%":
63
+ return None
64
+ return float(match.group(1)) * _LENGTH_TO_PX[unit.casefold()]
65
+
66
+
67
+ def _intrinsic_size(root: ElementTree.Element) -> tuple[int, int] | None:
68
+ """从 svg 根元素解析固有像素尺寸,width/height 不可用时回退 viewBox。"""
69
+ width = _length_to_px(root.get("width"))
70
+ height = _length_to_px(root.get("height"))
71
+ if width is not None and height is not None and width > 0 and height > 0:
72
+ return max(1, round(width)), max(1, round(height))
73
+ view_box = (root.get("viewBox") or "").replace(",", " ").split()
74
+ if len(view_box) == 4:
75
+ try:
76
+ box_width, box_height = float(view_box[2]), float(view_box[3])
77
+ except ValueError:
78
+ return None
79
+ if box_width > 0 and box_height > 0:
80
+ return max(1, round(box_width)), max(1, round(box_height))
81
+ return None
82
+
83
+
84
+ def _clamped_size(width: int, height: int) -> tuple[int, int]:
85
+ """按光栅单边与总像素预算等比收缩目标尺寸。"""
86
+ scale = min(
87
+ 1.0,
88
+ MAX_DECODED_RASTER_DIMENSION / width,
89
+ MAX_DECODED_RASTER_DIMENSION / height,
90
+ math.sqrt(MAX_DECODED_RASTER_PIXELS / (width * height)),
91
+ )
92
+ if scale >= 1.0:
93
+ return width, height
94
+ return max(1, round(width * scale)), max(1, round(height * scale))
95
+
96
+
97
+ def _render_size(
98
+ intrinsic: tuple[int, int] | None,
99
+ size_hint: tuple[int, int] | None,
100
+ ) -> tuple[int, int] | None:
101
+ """解析渲染目标尺寸:显式提示优先,其次固有尺寸并放大到最小长边。"""
102
+ if size_hint is not None and size_hint[0] > 0 and size_hint[1] > 0:
103
+ return _clamped_size(max(1, round(size_hint[0])), max(1, round(size_hint[1])))
104
+ if intrinsic is None:
105
+ return None
106
+ width, height = intrinsic
107
+ long_edge = max(width, height)
108
+ if long_edge < _MIN_RENDER_LONG_EDGE:
109
+ width = max(1, round(width * _MIN_RENDER_LONG_EDGE / long_edge))
110
+ height = max(1, round(height * _MIN_RENDER_LONG_EDGE / long_edge))
111
+ return _clamped_size(width, height)
112
+
113
+
114
+ def _is_fully_transparent(png: bytes) -> bool:
115
+ """检测光栅化结果是否全透明,用于让无视觉内容的 SVG 走调用方降级。"""
116
+ from PIL import Image
117
+
118
+ with Image.open(BytesIO(png)) as image:
119
+ if image.mode not in {"RGBA", "LA"}:
120
+ return False
121
+ return image.getextrema()[-1][1] == 0
122
+
123
+
124
+ def serialize_svg_image(image_data: bytes, *, size_hint: tuple[int, int] | None = None) -> str | None:
125
+ """把外部 SVG 字节光栅化为透明 PNG data URI,无法安全渲染时返回 None。
126
+
127
+ resvg 不执行脚本也不加载外部资源,是外部 SVG 进入输出的安全净化边界;
128
+ ``skip_system_fonts=True`` 保证跨平台输出确定,代价是未转路径的 ``<text>``
129
+ 不渲染文字。DTD、实体声明和超预算载荷在解析阶段即被拒绝。
130
+ """
131
+ try:
132
+ root = _parse_svg_root_strict(image_data)
133
+ except ValueError as exc:
134
+ logger.warning(f"SVG image payload cannot be parsed safely: {exc}")
135
+ return None
136
+
137
+ import resvg_py
138
+
139
+ target_size = _render_size(_intrinsic_size(root), size_hint)
140
+ # 严格解析后的树重序列化为 UTF-8,避免原始声明的非 UTF-8 编码干扰渲染输入。
141
+ markup = ElementTree.tostring(root, encoding="unicode")
142
+ render_options: dict[str, int] = {}
143
+ if target_size is not None:
144
+ render_options["width"] = target_size[0]
145
+ render_options["height"] = target_size[1]
146
+ try:
147
+ png = resvg_py.svg_to_bytes(svg_string=markup, skip_system_fonts=True, **render_options)
148
+ if not png:
149
+ return None
150
+ if _is_fully_transparent(png):
151
+ logger.debug("Rasterized SVG image is fully transparent; degrading to caller fallback")
152
+ return None
153
+ except Exception as exc: # noqa: BLE001 - resvg 异常面未定型,统一降级由调用方兜底
154
+ logger.warning(f"SVG image cannot be rasterized: {exc}")
155
+ return None
156
+
157
+ encoded = base64.b64encode(png).decode("ascii")
158
+ return f"data:image/png;base64,{encoded}"
@@ -1,3 +1,3 @@
1
- __version__ = "0.4.10"
1
+ __version__ = "0.4.12"
2
2
 
3
3
  __all__ = ["__version__"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.10
3
+ Version: 0.4.12
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
@@ -352,6 +352,7 @@ src/docvortex/foundation/_hyperlink.py
352
352
  src/docvortex/foundation/_image.py
353
353
  src/docvortex/foundation/_image_operations.py
354
354
  src/docvortex/foundation/_image_payload.py
355
+ src/docvortex/foundation/_svg_raster.py
355
356
  src/docvortex/foundation/_text.py
356
357
  src/docvortex/foundation/image_encoding.py
357
358
  src/docvortex/foundation/language.py
@@ -628,6 +629,7 @@ tests/unittest/test_render_html_table.py
628
629
  tests/unittest/test_render_image_renderer.py
629
630
  tests/unittest/test_render_list_index_utils.py
630
631
  tests/unittest/test_structured_content_render.py
632
+ tests/unittest/test_svg_raster.py
631
633
  tests/unittest/test_table_merge.py
632
634
  tests/unittest/test_table_merge_cell_merge.py
633
635
  tests/unittest/test_text_block_anchor.py