docvortex 0.4.22__tar.gz → 0.4.23__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 (691) hide show
  1. {docvortex-0.4.22/src/docvortex.egg-info → docvortex-0.4.23}/PKG-INFO +12 -10
  2. {docvortex-0.4.22 → docvortex-0.4.23}/README.md +11 -9
  3. {docvortex-0.4.22 → docvortex-0.4.23}/schemas/middle-2.0.json +1 -0
  4. {docvortex-0.4.22 → docvortex-0.4.23}/schemas/model-2.0.json +1 -0
  5. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/html/converter.py +4 -0
  6. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/html/selector.py +31 -0
  7. docvortex-0.4.23/src/docvortex/analyzers/native/mhtml/__init__.py +3 -0
  8. docvortex-0.4.23/src/docvortex/analyzers/native/mhtml/converter.py +73 -0
  9. docvortex-0.4.23/src/docvortex/analyzers/native/mhtml/resources.py +80 -0
  10. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/api.py +9 -1
  11. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/detection.py +10 -1
  12. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/filetypes.py +19 -1
  13. docvortex-0.4.23/src/docvortex/document/mhtml.py +258 -0
  14. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/metadata.py +5 -0
  15. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/schema.py +1 -0
  16. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/version.py +1 -1
  17. {docvortex-0.4.22 → docvortex-0.4.23/src/docvortex.egg-info}/PKG-INFO +12 -10
  18. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex.egg-info/SOURCES.txt +6 -0
  19. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_format_matrix.py +23 -2
  20. docvortex-0.4.23/tests/unittest/_mhtml_test_utils.py +67 -0
  21. docvortex-0.4.23/tests/unittest/test_flash_mhtml.py +299 -0
  22. {docvortex-0.4.22 → docvortex-0.4.23}/LICENSE.md +0 -0
  23. {docvortex-0.4.22 → docvortex-0.4.23}/MANIFEST.in +0 -0
  24. {docvortex-0.4.22 → docvortex-0.4.23}/demo/README.md +0 -0
  25. {docvortex-0.4.22 → docvortex-0.4.23}/demo/demo.py +0 -0
  26. {docvortex-0.4.22 → docvortex-0.4.23}/demo/office_docs/README.md +0 -0
  27. {docvortex-0.4.22 → docvortex-0.4.23}/demo/office_docs/docx_01.doc +0 -0
  28. {docvortex-0.4.22 → docvortex-0.4.23}/demo/office_docs/docx_01.docx +0 -0
  29. {docvortex-0.4.22 → docvortex-0.4.23}/demo/office_docs/pptx_01.ppt +0 -0
  30. {docvortex-0.4.22 → docvortex-0.4.23}/demo/office_docs/pptx_01.pptx +0 -0
  31. {docvortex-0.4.22 → docvortex-0.4.23}/demo/office_docs/rtf_01.rtf +0 -0
  32. {docvortex-0.4.22 → docvortex-0.4.23}/demo/office_docs/xlsx_01.xls +0 -0
  33. {docvortex-0.4.22 → docvortex-0.4.23}/demo/office_docs/xlsx_01.xlsx +0 -0
  34. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
  35. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
  36. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/caibao1.pdf +0 -0
  37. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/demo1.pdf +0 -0
  38. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/demo2.pdf +0 -0
  39. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/demo3.pdf +0 -0
  40. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/demo4.pdf +0 -0
  41. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/demo6.pdf +0 -0
  42. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
  43. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
  44. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
  45. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
  46. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs/small_ocr.pdf +0 -0
  47. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
  48. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
  49. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
  50. {docvortex-0.4.22 → docvortex-0.4.23}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
  51. {docvortex-0.4.22 → docvortex-0.4.23}/docs/HTML_PROTOCOL.md +0 -0
  52. {docvortex-0.4.22 → docvortex-0.4.23}/docs/JSON_PROTOCOL.md +0 -0
  53. {docvortex-0.4.22 → docvortex-0.4.23}/docs/METADATA.md +0 -0
  54. {docvortex-0.4.22 → docvortex-0.4.23}/docs/PDF_FONTS.md +0 -0
  55. {docvortex-0.4.22 → docvortex-0.4.23}/docs/RENDER_OWNERSHIP.md +0 -0
  56. {docvortex-0.4.22 → docvortex-0.4.23}/docs/USAGE.md +0 -0
  57. {docvortex-0.4.22 → docvortex-0.4.23}/docs/flash-manual-annotations-2026-09-15.md +0 -0
  58. {docvortex-0.4.22 → docvortex-0.4.23}/docs/flash-round2-annotations-2026-09-15.md +0 -0
  59. {docvortex-0.4.22 → docvortex-0.4.23}/docs/flash-rule-generalization-2026-09-15.md +0 -0
  60. {docvortex-0.4.22 → docvortex-0.4.23}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
  61. {docvortex-0.4.22 → docvortex-0.4.23}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
  62. {docvortex-0.4.22 → docvortex-0.4.23}/docs/flash-title-coverage-2026-09-16.md +0 -0
  63. {docvortex-0.4.22 → docvortex-0.4.23}/docs/sdk-0.4.md +0 -0
  64. {docvortex-0.4.22 → docvortex-0.4.23}/pyproject.toml +0 -0
  65. {docvortex-0.4.22 → docvortex-0.4.23}/setup.cfg +0 -0
  66. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/__init__.py +0 -0
  67. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/__init__.py +0 -0
  68. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/__init__.py +0 -0
  69. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
  70. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
  71. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/_shared/image.py +0 -0
  72. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
  73. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
  74. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
  75. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
  76. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
  77. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
  78. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/_shared/names.py +0 -0
  79. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
  80. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/contracts.py +0 -0
  81. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/csv.py +0 -0
  82. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
  83. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/epub/constants.py +0 -0
  84. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/epub/converter.py +0 -0
  85. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/epub/errors.py +0 -0
  86. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
  87. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/epub/package.py +0 -0
  88. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/epub/properties.py +0 -0
  89. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
  90. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/html/__init__.py +0 -0
  91. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/html/anchors.py +0 -0
  92. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/html/constants.py +0 -0
  93. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/html/document.py +0 -0
  94. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/html/errors.py +0 -0
  95. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/html/metadata.py +0 -0
  96. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/html/resources.py +0 -0
  97. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/models.py +0 -0
  98. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
  99. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
  100. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
  101. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
  102. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
  103. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
  104. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/images.py +0 -0
  105. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
  106. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/models.py +0 -0
  107. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/package.py +0 -0
  108. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/path.py +0 -0
  109. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
  110. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
  111. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
  112. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/table.py +0 -0
  113. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/text.py +0 -0
  114. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
  115. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/__init__.py +0 -0
  116. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
  117. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
  118. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
  119. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
  120. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
  121. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
  122. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
  123. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
  124. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
  125. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
  126. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
  127. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
  128. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
  129. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
  130. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
  131. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
  132. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
  133. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
  134. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
  135. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
  136. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
  137. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
  138. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
  139. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
  140. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
  141. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
  142. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
  143. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
  144. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
  145. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
  146. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
  147. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
  148. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
  149. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
  150. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/errors.py +0 -0
  151. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/image.py +0 -0
  152. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
  153. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
  154. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
  155. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
  156. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/limits.py +0 -0
  157. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/metadata.py +0 -0
  158. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
  159. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
  160. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
  161. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
  162. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
  163. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
  164. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
  165. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
  166. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/odf/styles.py +0 -0
  167. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/odf/table.py +0 -0
  168. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/odf/text.py +0 -0
  169. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
  170. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/opc.py +0 -0
  171. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
  172. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
  173. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
  174. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
  175. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
  176. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
  177. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
  178. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
  179. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
  180. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
  181. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
  182. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
  183. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
  184. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
  185. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
  186. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
  187. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
  188. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
  189. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
  190. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
  191. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
  192. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
  193. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
  194. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
  195. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
  196. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
  197. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
  198. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
  199. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/spreadsheet/region_discovery.py +0 -0
  200. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/streams.py +0 -0
  201. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
  202. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
  203. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
  204. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
  205. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
  206. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
  207. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
  208. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
  209. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
  210. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
  211. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
  212. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
  213. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
  214. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
  215. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
  216. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
  217. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
  218. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
  219. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
  220. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
  221. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
  222. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
  223. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
  224. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
  225. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
  226. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
  227. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
  228. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
  229. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
  230. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
  231. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
  232. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
  233. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
  234. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
  235. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
  236. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
  237. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
  238. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
  239. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
  240. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
  241. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
  242. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
  243. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
  244. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
  245. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
  246. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
  247. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/models.py +0 -0
  248. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
  249. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
  250. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
  251. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
  252. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
  253. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
  254. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
  255. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
  256. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
  257. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
  258. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
  259. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
  260. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
  261. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
  262. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
  263. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
  264. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
  265. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
  266. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
  267. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
  268. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
  269. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
  270. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
  271. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
  272. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
  273. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
  274. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
  275. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
  276. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
  277. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
  278. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
  279. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
  280. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
  281. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
  282. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
  283. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/analyzers/pdf.py +0 -0
  284. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/assets/__init__.py +0 -0
  285. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/assets/images.py +0 -0
  286. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/assets/store.py +0 -0
  287. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/cli.py +0 -0
  288. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/codecs/__init__.py +0 -0
  289. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/codecs/html/__init__.py +0 -0
  290. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/codecs/html/contracts.py +0 -0
  291. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/codecs/html/materializer.py +0 -0
  292. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/codecs/html/parser.py +0 -0
  293. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/codecs/html/resources.py +0 -0
  294. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/codecs/json.py +0 -0
  295. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/__init__.py +0 -0
  296. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/inline.py +0 -0
  297. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/links.py +0 -0
  298. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/markup/__init__.py +0 -0
  299. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/markup/anchors.py +0 -0
  300. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/markup/formula.py +0 -0
  301. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/markup/projector.py +0 -0
  302. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/markup/styles.py +0 -0
  303. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/mathml.py +0 -0
  304. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/normalization.py +0 -0
  305. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/spans.py +0 -0
  306. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/table/__init__.py +0 -0
  307. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/table/blocks.py +0 -0
  308. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/table/content.py +0 -0
  309. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/table/document.py +0 -0
  310. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/table/html.py +0 -0
  311. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/table/models.py +0 -0
  312. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/table/rules.py +0 -0
  313. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/table/structure.py +0 -0
  314. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/text.py +0 -0
  315. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/content/tree.py +0 -0
  316. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/__init__.py +0 -0
  317. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/contracts.py +0 -0
  318. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/page_range.py +0 -0
  319. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/__init__.py +0 -0
  320. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/_document.py +0 -0
  321. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/classify.py +0 -0
  322. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/constants.py +0 -0
  323. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/font_runtime.py +0 -0
  324. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/images.py +0 -0
  325. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/layout.py +0 -0
  326. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/metadata.py +0 -0
  327. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/native_annotations.py +0 -0
  328. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/native_contracts.py +0 -0
  329. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/native_coordinates.py +0 -0
  330. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
  331. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/native_objects.py +0 -0
  332. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
  333. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/pdfium.py +0 -0
  334. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/raster.py +0 -0
  335. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/text/__init__.py +0 -0
  336. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/text/_contracts.py +0 -0
  337. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/text/dedup.py +0 -0
  338. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/text/extract.py +0 -0
  339. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/text/geometry.py +0 -0
  340. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/text/groups.py +0 -0
  341. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/pdf/visuals.py +0 -0
  342. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/properties.py +0 -0
  343. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/document/source.py +0 -0
  344. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/errors.py +0 -0
  345. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/export/__init__.py +0 -0
  346. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/export/_images.py +0 -0
  347. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/export/bundle.py +0 -0
  348. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/export/files.py +0 -0
  349. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/export/middle.py +0 -0
  350. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/__init__.py +0 -0
  351. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/_coordinates.py +0 -0
  352. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/_geometry.py +0 -0
  353. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/_hyperlink.py +0 -0
  354. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/_image.py +0 -0
  355. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/_image_operations.py +0 -0
  356. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/_image_payload.py +0 -0
  357. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/_svg_raster.py +0 -0
  358. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/_text.py +0 -0
  359. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/image_encoding.py +0 -0
  360. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/language.py +0 -0
  361. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/type_identity.py +0 -0
  362. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/foundation/xml_names.py +0 -0
  363. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/geometry.py +0 -0
  364. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/options.py +0 -0
  365. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/postprocess/__init__.py +0 -0
  366. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/postprocess/content.py +0 -0
  367. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/postprocess/document.py +0 -0
  368. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/postprocess/lists.py +0 -0
  369. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/postprocess/page_blocks.py +0 -0
  370. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/postprocess/pages.py +0 -0
  371. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/postprocess/paragraphs.py +0 -0
  372. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/postprocess/visual.py +0 -0
  373. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/public_api.py +0 -0
  374. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/__init__.py +0 -0
  375. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/__init__.py +0 -0
  376. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/common/__init__.py +0 -0
  377. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/common/context.py +0 -0
  378. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/common/html_table.py +0 -0
  379. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/common/index.py +0 -0
  380. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/common/list_items.py +0 -0
  381. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/common/planner.py +0 -0
  382. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/docx/__init__.py +0 -0
  383. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/docx/assets.py +0 -0
  384. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/docx/inline.py +0 -0
  385. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/docx/math.py +0 -0
  386. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/docx/renderer.py +0 -0
  387. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/docx/styles.py +0 -0
  388. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/docx/table.py +0 -0
  389. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/epub/__init__.py +0 -0
  390. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/epub/assets.py +0 -0
  391. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/epub/package.py +0 -0
  392. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/epub/renderer.py +0 -0
  393. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/html/__init__.py +0 -0
  394. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/html/inline.py +0 -0
  395. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/html/renderer.py +0 -0
  396. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
  397. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/html/table.py +0 -0
  398. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/latex/__init__.py +0 -0
  399. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/latex/assets.py +0 -0
  400. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/latex/inline.py +0 -0
  401. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/latex/renderer.py +0 -0
  402. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/latex/table.py +0 -0
  403. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
  404. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/markdown/assets.py +0 -0
  405. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
  406. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
  407. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/markdown/inline.py +0 -0
  408. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
  409. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/markdown/table.py +0 -0
  410. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
  411. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/assets.py +0 -0
  412. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
  413. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
  414. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/formula.py +0 -0
  415. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
  416. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/inline.py +0 -0
  417. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/original.py +0 -0
  418. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
  419. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/paragraph.py +0 -0
  420. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
  421. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/styles.py +0 -0
  422. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/table.py +0 -0
  423. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
  424. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
  425. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
  426. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
  427. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
  428. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/api.py +0 -0
  429. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/contracts.py +0 -0
  430. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/docx.py +0 -0
  431. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/epub.py +0 -0
  432. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/fragments.py +0 -0
  433. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/html.py +0 -0
  434. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/latex.py +0 -0
  435. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/markdown.py +0 -0
  436. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/pdf.py +0 -0
  437. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/render/structured_content.py +0 -0
  438. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/resources/epub/docvortex.css +0 -0
  439. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
  440. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/resources/fonts/NOTICE +0 -0
  441. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/resources/fonts/manifest.json +0 -0
  442. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/resources/html/docvortex.css +0 -0
  443. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/resources/html/docvortex.min.css +0 -0
  444. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
  445. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/result.py +0 -0
  446. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex/visualization.py +0 -0
  447. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex.egg-info/dependency_links.txt +0 -0
  448. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex.egg-info/entry_points.txt +0 -0
  449. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex.egg-info/requires.txt +0 -0
  450. {docvortex-0.4.22 → docvortex-0.4.23}/src/docvortex.egg-info/top_level.txt +0 -0
  451. {docvortex-0.4.22 → docvortex-0.4.23}/tests/benchmarks/flash_pdf.py +0 -0
  452. {docvortex-0.4.22 → docvortex-0.4.23}/tests/benchmarks/native_pdf_table.py +0 -0
  453. {docvortex-0.4.22 → docvortex-0.4.23}/tests/benchmarks/pdf_render.py +0 -0
  454. {docvortex-0.4.22 → docvortex-0.4.23}/tests/benchmarks/pipeline.py +0 -0
  455. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
  456. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_layout_block_expectations.json +0 -0
  457. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
  458. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
  459. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_manual_annotations.json +0 -0
  460. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_manual_review_decisions.json +0 -0
  461. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_reviewed_history.json +0 -0
  462. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_round2_annotations.json +0 -0
  463. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_round2_review_decisions.json +0 -0
  464. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_round3_annotations.json +0 -0
  465. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
  466. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_round3_review_decisions.json +0 -0
  467. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
  468. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
  469. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
  470. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
  471. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
  472. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
  473. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/pdf_char_dedup.json +0 -0
  474. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
  475. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/pdf_numeric_citations_review.json +0 -0
  476. {docvortex-0.4.22 → docvortex-0.4.23}/tests/fixtures/rtf/semantic.rtf +0 -0
  477. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_architecture.py +0 -0
  478. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_benchmark_entrypoint.py +0 -0
  479. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_brand_protocol.py +0 -0
  480. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_cli_logging.py +0 -0
  481. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_complete_pipeline.py +0 -0
  482. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_converter_lifecycle.py +0 -0
  483. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_document_envelope.py +0 -0
  484. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_document_metadata.py +0 -0
  485. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_export_image_names.py +0 -0
  486. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_geometry_api.py +0 -0
  487. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_history_geometry_tools.py +0 -0
  488. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_html_namespace.py +0 -0
  489. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_mixed_font_script_reference.py +0 -0
  490. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_pdf_analysis_api.py +0 -0
  491. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_pdf_cpu_evidence.py +0 -0
  492. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_pdf_font_geometry.py +0 -0
  493. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_pdf_font_runtime.py +0 -0
  494. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_pdf_model_text_normalization.py +0 -0
  495. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_pdf_numeric_citations.py +0 -0
  496. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_pdf_output_text.py +0 -0
  497. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_pdf_render_pool.py +0 -0
  498. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_pdf_source_row_merging.py +0 -0
  499. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_pdf_symbol_normalization.py +0 -0
  500. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_public_export_api.py +0 -0
  501. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_public_image_api.py +0 -0
  502. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_public_pipeline.py +0 -0
  503. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_refactor_raster.py +0 -0
  504. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_refactor_rendering.py +0 -0
  505. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_refactor_resources.py +0 -0
  506. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_release_ci_gate.py +0 -0
  507. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_render_ownership.py +0 -0
  508. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_renderer_branding.py +0 -0
  509. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_shared_boundaries.py +0 -0
  510. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_system_font_pdf_pipeline.py +0 -0
  511. {docvortex-0.4.22 → docvortex-0.4.23}/tests/test_validated_geometry.py +0 -0
  512. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
  513. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_epub_test_utils.py +0 -0
  514. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_flash_pdf_test_utils.py +0 -0
  515. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_image_mtef_test_utils.py +0 -0
  516. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_legacy_doc_test_utils.py +0 -0
  517. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
  518. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_legacy_xls_test_utils.py +0 -0
  519. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_metafile_test_utils.py +0 -0
  520. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_mtef_test_utils.py +0 -0
  521. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_mtef_v5_test_utils.py +0 -0
  522. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_native_test_utils.py +0 -0
  523. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_odf_test_utils.py +0 -0
  524. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_ofd_test_utils.py +0 -0
  525. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
  526. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
  527. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/_span_test_utils.py +0 -0
  528. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
  529. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
  530. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
  531. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
  532. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
  533. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
  534. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
  535. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
  536. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
  537. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
  538. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
  539. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
  540. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
  541. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
  542. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
  543. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
  544. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
  545. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
  546. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
  547. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
  548. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
  549. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
  550. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
  551. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
  552. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
  553. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
  554. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
  555. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
  556. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
  557. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/numeric_citations_introduction.pdf +0 -0
  558. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/pdfs/test.pdf +0 -0
  559. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_backend_architecture.py +0 -0
  560. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_backend_block_object_regressions.py +0 -0
  561. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_docx_assets.py +0 -0
  562. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_docx_complex_fields.py +0 -0
  563. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_docx_math.py +0 -0
  564. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_docx_render.py +0 -0
  565. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_docx_special_char_tables.py +0 -0
  566. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_docx_table.py +0 -0
  567. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_emfplus_integration.py +0 -0
  568. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_epub_backlinks.py +0 -0
  569. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_epub_quoted_note_types.py +0 -0
  570. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_epub_render.py +0 -0
  571. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
  572. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_csv.py +0 -0
  573. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_docx_equationxml.py +0 -0
  574. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_epub.py +0 -0
  575. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_html.py +0 -0
  576. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_image_mtef.py +0 -0
  577. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
  578. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_legacy_doc.py +0 -0
  579. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
  580. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_legacy_ppt.py +0 -0
  581. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_legacy_xls.py +0 -0
  582. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
  583. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_manual_annotations.py +0 -0
  584. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_markup_anchors.py +0 -0
  585. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_model.py +0 -0
  586. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_mtef_v5.py +0 -0
  587. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_odf.py +0 -0
  588. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_ofd.py +0 -0
  589. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_office_image_mtef.py +0 -0
  590. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_office_metafile.py +0 -0
  591. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_office_models.py +0 -0
  592. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
  593. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
  594. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_office_title_types.py +0 -0
  595. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
  596. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
  597. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
  598. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
  599. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
  600. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
  601. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_extractor.py +0 -0
  602. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_formulas.py +0 -0
  603. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_graphics.py +0 -0
  604. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
  605. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
  606. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
  607. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_native_text.py +0 -0
  608. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
  609. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
  610. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_samples.py +0 -0
  611. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_scripts.py +0 -0
  612. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_semantics.py +0 -0
  613. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_short_tails.py +0 -0
  614. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_tables.py +0 -0
  615. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
  616. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
  617. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_titles.py +0 -0
  618. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
  619. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_round2_annotations.py +0 -0
  620. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_round3_annotations.py +0 -0
  621. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_rtf.py +0 -0
  622. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_rule_generalization.py +0 -0
  623. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_shared_helpers.py +0 -0
  624. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_spatial_evidence.py +0 -0
  625. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
  626. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_guess_suffix_ole2.py +0 -0
  627. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_html_css_build.py +0 -0
  628. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_html_render.py +0 -0
  629. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_html_security.py +0 -0
  630. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
  631. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_latex_render.py +0 -0
  632. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_markdown_render.py +0 -0
  633. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_middle_json_block_models.py +0 -0
  634. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_middle_json_export.py +0 -0
  635. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_middle_json_validator.py +0 -0
  636. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_model_json.py +0 -0
  637. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_native_pdf_table.py +0 -0
  638. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
  639. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
  640. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
  641. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
  642. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
  643. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_ofd_assembly.py +0 -0
  644. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_ofd_vector_tables.py +0 -0
  645. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_office_demo_exports.py +0 -0
  646. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_office_demo_pages.py +0 -0
  647. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_office_parser_regressions.py +0 -0
  648. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_cjk_objects.py +0 -0
  649. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_cjk_style.py +0 -0
  650. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
  651. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_classify.py +0 -0
  652. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_demo_links.py +0 -0
  653. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
  654. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_document.py +0 -0
  655. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_formula_layout.py +0 -0
  656. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_object_clipping.py +0 -0
  657. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_original_layout.py +0 -0
  658. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_pagination.py +0 -0
  659. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
  660. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_render.py +0 -0
  661. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
  662. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_structured_tables.py +0 -0
  663. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_table_cache.py +0 -0
  664. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_table_round2.py +0 -0
  665. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_text_dedup.py +0 -0
  666. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_text_styles.py +0 -0
  667. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_title_font_plan.py +0 -0
  668. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_title_space.py +0 -0
  669. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_pdf_visualization.py +0 -0
  670. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_postprocess_page_blocks.py +0 -0
  671. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_postprocess_pages.py +0 -0
  672. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_postprocess_paragraphs.py +0 -0
  673. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_postprocess_visual.py +0 -0
  674. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_render_api.py +0 -0
  675. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_render_html_table.py +0 -0
  676. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_render_image_renderer.py +0 -0
  677. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_render_list_index_utils.py +0 -0
  678. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_structured_content_render.py +0 -0
  679. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_svg_raster.py +0 -0
  680. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_table_merge.py +0 -0
  681. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_table_merge_cell_merge.py +0 -0
  682. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_text_block_anchor.py +0 -0
  683. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_text_boundary_rules.py +0 -0
  684. {docvortex-0.4.22 → docvortex-0.4.23}/tests/unittest/test_text_utils.py +0 -0
  685. {docvortex-0.4.22 → docvortex-0.4.23}/tools/__init__.py +0 -0
  686. {docvortex-0.4.22 → docvortex-0.4.23}/tools/build_html_css.py +0 -0
  687. {docvortex-0.4.22 → docvortex-0.4.23}/tools/calibrate_pdf_geometry.py +0 -0
  688. {docvortex-0.4.22 → docvortex-0.4.23}/tools/capture_baseline.py +0 -0
  689. {docvortex-0.4.22 → docvortex-0.4.23}/tools/capture_platform_layout.py +0 -0
  690. {docvortex-0.4.22 → docvortex-0.4.23}/tools/compare_font_platforms.py +0 -0
  691. {docvortex-0.4.22 → docvortex-0.4.23}/tools/font_geometry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.22
3
+ Version: 0.4.23
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
@@ -127,17 +127,19 @@ use `overwrite=True` in Python or `--overwrite` in the CLI to replace them.
127
127
 
128
128
  ## Supported formats
129
129
 
130
- ### Native inputs · 15 formats
130
+ ### Native inputs · 17 formats
131
131
 
132
- | Document family | Formats |
132
+ | Document family | File extensions |
133
133
  | --- | --- |
134
- | PDF with native text | PDF |
135
- | Word & rich text | DOC, DOCX, RTF |
136
- | Presentations | PPT, PPTX |
137
- | Spreadsheets | XLS, XLSX, CSV, TSV |
138
- | OpenDocument | ODT, ODS, ODP |
139
- | E-books & web documents | EPUB, HTML |
140
- | Open Fixed-layout Document | OFD |
134
+ | PDF with native text | `.pdf` |
135
+ | Word & rich text | `.doc`, `.docx`, `.rtf` |
136
+ | Presentations | `.ppt`, `.pptx` |
137
+ | Spreadsheets | `.xls`, `.xlsx`, `.csv`, `.tsv` |
138
+ | OpenDocument | `.odt`, `.ods`, `.odp` |
139
+ | E-books | `.epub` |
140
+ | Web documents | `.html`, `.htm`, `.shtml` |
141
+ | Web archives | `.mhtml`, `.mht` |
142
+ | Open Fixed-layout Document | `.ofd` |
141
143
 
142
144
  ### Outputs · 7 formats
143
145
 
@@ -73,17 +73,19 @@ use `overwrite=True` in Python or `--overwrite` in the CLI to replace them.
73
73
 
74
74
  ## Supported formats
75
75
 
76
- ### Native inputs · 15 formats
76
+ ### Native inputs · 17 formats
77
77
 
78
- | Document family | Formats |
78
+ | Document family | File extensions |
79
79
  | --- | --- |
80
- | PDF with native text | PDF |
81
- | Word & rich text | DOC, DOCX, RTF |
82
- | Presentations | PPT, PPTX |
83
- | Spreadsheets | XLS, XLSX, CSV, TSV |
84
- | OpenDocument | ODT, ODS, ODP |
85
- | E-books & web documents | EPUB, HTML |
86
- | Open Fixed-layout Document | OFD |
80
+ | PDF with native text | `.pdf` |
81
+ | Word & rich text | `.doc`, `.docx`, `.rtf` |
82
+ | Presentations | `.ppt`, `.pptx` |
83
+ | Spreadsheets | `.xls`, `.xlsx`, `.csv`, `.tsv` |
84
+ | OpenDocument | `.odt`, `.ods`, `.odp` |
85
+ | E-books | `.epub` |
86
+ | Web documents | `.html`, `.htm`, `.shtml` |
87
+ | Web archives | `.mhtml`, `.mht` |
88
+ | Open Fixed-layout Document | `.ofd` |
87
89
 
88
90
  ### Outputs · 7 formats
89
91
 
@@ -765,6 +765,7 @@
765
765
  "tsv",
766
766
  "epub",
767
767
  "html",
768
+ "mhtml",
768
769
  "ofd",
769
770
  "odt",
770
771
  "ods",
@@ -18,6 +18,7 @@
18
18
  "tsv",
19
19
  "epub",
20
20
  "html",
21
+ "mhtml",
21
22
  "ofd",
22
23
  "odt",
23
24
  "ods",
@@ -41,6 +41,10 @@ class HtmlConverter:
41
41
  raise HtmlResourceLimitError(f"HTML resource limit exceeded: max_html_bytes={MAX_HTML_BYTES}")
42
42
  document = parse_html_document(file_bytes, source_context)
43
43
  resources = HtmlResourceContext(document.source_context, base_href=document.base_href)
44
+ self._convert_document(document, resources)
45
+
46
+ def _convert_document(self, document: HtmlDocument, resources: HtmlResourceContext) -> None:
47
+ """复用已解析 DOM 和资源适配器,供 HTML 与网页归档共享正文投影。"""
44
48
  wire_result = decode_docvortex_html_wire(document.body, resources)
45
49
  if wire_result.blocks is not None:
46
50
  blocks = wire_result.blocks
@@ -331,6 +331,7 @@ def _is_containment_equivalent(first: _ScoredCandidate, second: _ScoredCandidate
331
331
 
332
332
  def _soft_prune(root: etree._Element) -> None:
333
333
  """在候选副本中删除确定的导航/表单和高噪声 token 子树。"""
334
+ _prune_article_comments(root)
334
335
  metrics_by_element = _collect_soft_prune_metrics(root)
335
336
  for element in list(root.iterdescendants()):
336
337
  if not isinstance(element.tag, str):
@@ -349,6 +350,36 @@ def _soft_prune(root: etree._Element) -> None:
349
350
  _drop_tree_preserve_tail(element)
350
351
 
351
352
 
353
+ def _is_comment_region(element: etree._Element) -> bool:
354
+ """按完整词与驼峰边界识别评论容器,不匹配正文文本或任意子串。"""
355
+ value = f"{element.get('id') or ''} {element.get('class') or ''}"
356
+ value = re.sub(r"([a-z0-9])([A-Z])", r"\1 \2", value).casefold()
357
+ return bool(frozenset(_TOKEN_RE.split(value)) & {"comment", "comments"})
358
+
359
+
360
+ def _prune_article_comments(root: etree._Element) -> None:
361
+ """仅在单篇独立文章明确存在时移除附属评论,保留论坛及讨论型正文。"""
362
+ articles = [
363
+ element
364
+ for element in root.iter()
365
+ if isinstance(element.tag, str)
366
+ and (local_name(element) == "article" or "articlebody" in (element.get("itemprop") or "").casefold().split())
367
+ and not any(_is_comment_region(parent) for parent in (element, *element.iterancestors()))
368
+ and len(_normalized_text(" ".join(element.itertext()))) >= _MIN_TEXT_CHARS
369
+ ]
370
+ # 嵌套 articleBody 与 article 属于同一正文;多个独立 article 按论坛处理。
371
+ outer_articles = [element for element in articles if not any(parent in articles for parent in element.iterancestors())]
372
+ if len(outer_articles) != 1:
373
+ return
374
+ article = outer_articles[0]
375
+ for element in list(root.iterdescendants()):
376
+ if not isinstance(element.tag, str) or not _is_comment_region(element):
377
+ continue
378
+ if element is article or element in article.iterancestors():
379
+ continue
380
+ _drop_tree_preserve_tail(element)
381
+
382
+
352
383
  def _collect_soft_prune_metrics(root: etree._Element) -> dict[etree._Element, _SoftPruneMetrics]:
353
384
  """单次后序遍历预计算每个元素的完整子树文本、链接和语义对象统计。"""
354
385
  elements = [element for element in root.iter() if isinstance(element.tag, str)]
@@ -0,0 +1,3 @@
1
+ """MHTML 网页归档的 MIME 解包与静态正文解析。"""
2
+
3
+ __all__: list[str] = []
@@ -0,0 +1,73 @@
1
+ """把 MHTML 主文档及归档资源投影为现有 HTML 语义块。"""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import BinaryIO
6
+
7
+ from docvortex.document.contracts import HtmlSourceContext
8
+ from docvortex.document.mhtml import MAX_ARCHIVE_BYTES, MhtmlArchive
9
+ from docvortex.result import Diagnostic
10
+ from docvortex.schema import DocumentProperties
11
+
12
+ from ..html.converter import HtmlConverter
13
+ from ..html.document import HtmlDocument, parse_html_document
14
+ from ..html.metadata import read_html_properties
15
+ from .resources import MhtmlResourceContext
16
+
17
+
18
+ def read_archive_properties(archive: MhtmlArchive) -> tuple[DocumentProperties, list[str]]:
19
+ """复用 HTML 声明元数据,仅用 MIME Subject 补充缺失标题。"""
20
+ properties, warnings = read_html_properties(archive.html, archive.source_context)
21
+ properties.title = properties.title or archive.subject
22
+ return properties, warnings
23
+
24
+
25
+ class MhtmlConverter(HtmlConverter):
26
+ """通过一次解包生成正文、元数据和可选资源诊断。"""
27
+
28
+ def __init__(self) -> None:
29
+ """初始化与单次转换绑定的元数据及诊断。"""
30
+ super().__init__()
31
+ self.properties = DocumentProperties()
32
+ self.diagnostics: tuple[Diagnostic, ...] = ()
33
+
34
+ def convert(self, file_binary: BinaryIO, *, source_context: HtmlSourceContext | None = None) -> None:
35
+ """加载主 HTML 后调用共享投影,不合并 iframe 或其他 HTML 附件。"""
36
+ archive = MhtmlArchive(file_binary.read(MAX_ARCHIVE_BYTES + 1), source_context)
37
+ self.properties, warnings = read_archive_properties(archive)
38
+ document = parse_html_document(archive.html, archive.source_context)
39
+ if document.title is None and archive.subject:
40
+ from dataclasses import replace
41
+
42
+ document = replace(document, title=archive.subject)
43
+ resources = MhtmlResourceContext(archive, base_href=document.base_href)
44
+ _restore_picture_sources(document, archive)
45
+ self._convert_document(document, resources)
46
+ self.diagnostics = tuple(Diagnostic("read_metadata_failed", warning) for warning in warnings) + tuple(
47
+ archive.diagnostics
48
+ )
49
+
50
+
51
+ def _restore_picture_sources(document: HtmlDocument, archive: MhtmlArchive) -> None:
52
+ """当回退图片未归档时采用已保存的 picture/srcset 候选,不发起外部请求。"""
53
+ for image in document.body.iter("img"):
54
+ if (image.get("src") or "").strip().casefold().startswith("data:"):
55
+ continue
56
+ if archive.find(image.get("src") or "", base_href=document.base_href) is not None:
57
+ continue
58
+ picture = next((parent for parent in image.iterancestors() if parent.tag == "picture"), None)
59
+ sources = list(picture.iter("source")) if picture is not None else []
60
+ for source in [*sources, image]:
61
+ # 浏览器归档中的网络候选按逗号分隔;data URI 无需做归档匹配。
62
+ candidates = (source.get("srcset") or "").split(",")
63
+ selected = next(
64
+ (
65
+ fields[0]
66
+ for candidate in candidates
67
+ if (fields := candidate.split()) and archive.find(fields[0], base_href=document.base_href) is not None
68
+ ),
69
+ None,
70
+ )
71
+ if selected:
72
+ image.set("src", selected)
73
+ break
@@ -0,0 +1,80 @@
1
+ """使用 MIME 内嵌图片和样式的 HTML 资源适配器。"""
2
+
3
+ from __future__ import annotations
4
+
5
+ from docvortex.content.markup import ResolvedMarkupImage
6
+ from docvortex.document.mhtml import ArchivePart, MhtmlArchive, MhtmlParseError
7
+ from docvortex.foundation._svg_raster import looks_like_svg_payload, serialize_svg_image
8
+
9
+ from ..html.constants import MAX_HTML_IMAGE_BYTES
10
+ from ..html.errors import HtmlResourceLimitError
11
+ from ..html.resources import HtmlResourceContext, _image_data_uri
12
+
13
+
14
+ class MhtmlResourceContext(HtmlResourceContext):
15
+ """仅从归档读取资源,复用 HTML 的链接、图片校验和字节预算。"""
16
+
17
+ def __init__(self, archive: MhtmlArchive, *, base_href: str | None = None) -> None:
18
+ """绑定归档并初始化以 MIME 部件为键的去重缓存。"""
19
+ super().__init__(archive.source_context, base_href=base_href)
20
+ self.archive = archive
21
+ self._archive_images: dict[ArchivePart, str | None] = {}
22
+ self._archive_stylesheets: dict[ArchivePart, str | None] = {}
23
+
24
+ def _payload(self, part: ArchivePart, reference: str) -> bytes | None:
25
+ """可选部件损坏时记录诊断;资源限额错误仍向调用方传播。"""
26
+ try:
27
+ return self.archive.decode(part)
28
+ except MhtmlParseError:
29
+ self.archive.report("mhtml_resource_invalid", reference)
30
+ return None
31
+
32
+ def resolve_image(self, source: str, *, alt: str = "") -> ResolvedMarkupImage | None:
33
+ """优先恢复归档图片,缺失时沿用安全外链或替代文本降级。"""
34
+ if not source.strip() or source.strip().casefold().startswith("data:"):
35
+ return super().resolve_image(source, alt=alt)
36
+ part = self.archive.find(source, base_href=self.base_href)
37
+ if part is None:
38
+ self.archive.report("mhtml_resource_missing", source)
39
+ return super().resolve_image(source, alt=alt)
40
+ if part not in self._archive_images:
41
+ payload = self._payload(part, source)
42
+ data_uri = None
43
+ if payload is not None:
44
+ if len(payload) > MAX_HTML_IMAGE_BYTES:
45
+ raise HtmlResourceLimitError(f"MHTML image exceeds max_html_image_bytes={MAX_HTML_IMAGE_BYTES}")
46
+ if looks_like_svg_payload(payload):
47
+ data_uri = serialize_svg_image(payload)
48
+ else:
49
+ data_uri = _image_data_uri(payload)
50
+ if data_uri is not None:
51
+ self._charge_image_bytes(len(payload))
52
+ else:
53
+ self.archive.report("mhtml_resource_invalid", source)
54
+ self._archive_images[part] = data_uri
55
+ if data_uri := self._archive_images[part]:
56
+ return ResolvedMarkupImage(image_base64=data_uri, alt=alt)
57
+ return super().resolve_image(source, alt=alt)
58
+
59
+ def load_stylesheet(self, href: str) -> str | None:
60
+ """按 HTML 源顺序读取归档 CSS,仅解释现有静态样式子集。"""
61
+ part = self.archive.find(href, base_href=self.base_href)
62
+ if part is None:
63
+ self.archive.report("mhtml_resource_missing", href)
64
+ return None
65
+ if part in self._archive_stylesheets:
66
+ return self._archive_stylesheets[part]
67
+ payload = self._payload(part, href)
68
+ text = None
69
+ if payload is not None:
70
+ if part.message.get_content_type() != "text/css":
71
+ self.archive.report("mhtml_resource_invalid", href)
72
+ else:
73
+ self._charge_stylesheet_bytes(len(payload))
74
+ try:
75
+ text = payload.decode(part.message.get_content_charset() or "utf-8-sig", errors="replace")
76
+ except LookupError:
77
+ self.archive.report("mhtml_resource_invalid", href)
78
+ text = payload.decode("utf-8-sig", errors="replace")
79
+ self._archive_stylesheets[part] = text
80
+ return text
@@ -50,7 +50,7 @@ def analyze(
50
50
  try:
51
51
  properties = prepared.source_properties
52
52
  metadata_diagnostics = tuple(Diagnostic("read_metadata_failed", message) for message in prepared.metadata_warnings)
53
- if prepared.file_suffix != "pdf":
53
+ if prepared.file_suffix not in {"pdf", "mhtml"}:
54
54
  from .errors import DocumentError
55
55
 
56
56
  try:
@@ -81,6 +81,14 @@ def analyze(
81
81
  )
82
82
  elif prepared.file_suffix == "html":
83
83
  pages = models.HtmlModel().predict(BytesIO(prepared.data), source_context=prepared.source_context)
84
+ elif prepared.file_suffix == "mhtml":
85
+ from .analyzers.native.mhtml.converter import MhtmlConverter
86
+
87
+ converter = MhtmlConverter()
88
+ converter.convert(BytesIO(prepared.data), source_context=prepared.source_context)
89
+ pages = converter.pages
90
+ properties = converter.properties
91
+ native_diagnostics = converter.diagnostics
84
92
  else:
85
93
  model_types: dict[FileSuffix, type[NativeBinaryAnalyzer]] = {
86
94
  "csv": models.CsvModel,
@@ -14,7 +14,7 @@ from typing import TYPE_CHECKING
14
14
  if TYPE_CHECKING:
15
15
  from magika import Magika
16
16
 
17
- from .filetypes import CSV_EXTENSIONS, HTML_EXTENSIONS, IMAGE_EXTENSIONS, rtf_header_offset
17
+ from .filetypes import CSV_EXTENSIONS, HTML_EXTENSIONS, IMAGE_EXTENSIONS, has_mhtml_header, rtf_header_offset
18
18
 
19
19
  PDF_SIG_BYTES = b"%PDF"
20
20
  OLE2_SIG_BYTES = b"\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1"
@@ -54,6 +54,7 @@ _STRONG_CONTENT_SUFFIXES = frozenset(
54
54
  "xlsx",
55
55
  "rtf",
56
56
  "epub",
57
+ "mhtml",
57
58
  "ofd",
58
59
  "odt",
59
60
  "ods",
@@ -307,10 +308,13 @@ def _reject_unverified_package_suffix(detected_suffix: str) -> str:
307
308
 
308
309
 
309
310
  def guess_suffix_by_bytes(file_bytes: bytes, file_path: str | None = None) -> str:
311
+ """优先依据强签名与容器头识别格式,再使用通用识别器。"""
310
312
  if file_bytes[: len(PDF_SIG_BYTES)] == PDF_SIG_BYTES:
311
313
  return "pdf"
312
314
  if rtf_header_offset(file_bytes[:128]) is not None:
313
315
  return "rtf"
316
+ if has_mhtml_header(file_bytes):
317
+ return "mhtml"
314
318
 
315
319
  ofd_suffix = _guess_ofd_suffix_by_bytes(file_bytes)
316
320
  if ofd_suffix:
@@ -345,6 +349,7 @@ def guess_suffix_by_bytes(file_bytes: bytes, file_path: str | None = None) -> st
345
349
 
346
350
 
347
351
  def guess_suffix_by_path(file_path: str | Path) -> str:
352
+ """读取文件签名和有界 MIME 头,保持路径与字节入口一致。"""
348
353
  if not isinstance(file_path, Path):
349
354
  file_path = Path(file_path)
350
355
 
@@ -374,6 +379,10 @@ def guess_suffix_by_path(file_path: str | Path) -> str:
374
379
  if _has_pdf_signature_by_path(file_path):
375
380
  return "pdf"
376
381
 
382
+ with file_path.open("rb") as source:
383
+ if has_mhtml_header(source.read(65536)):
384
+ return "mhtml"
385
+
377
386
  suffix = _magika().identify_path(file_path).prediction.output.label
378
387
  if suffix in ["ai", "html"] and file_path.suffix.lower() in [".pdf"]:
379
388
  try:
@@ -1,6 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import re
4
+ from email import policy
5
+ from email.parser import BytesHeaderParser
4
6
  from pathlib import Path
5
7
  from typing import Final
6
8
 
@@ -37,6 +39,7 @@ OFD_EXTENSIONS: frozenset[str] = frozenset({"ofd"})
37
39
  OFFICE_EXTENSIONS: frozenset[str] = frozenset({"doc", "docx", "ppt", "pptx", "xls", "xlsx", "rtf"}) | ODF_EXTENSIONS
38
40
 
39
41
  HTML_EXTENSIONS: frozenset[str] = frozenset({"html", "htm", "shtml"})
42
+ MHTML_EXTENSIONS: frozenset[str] = frozenset({"mhtml", "mht"})
40
43
 
41
44
  CSV_EXTENSIONS: frozenset[str] = frozenset({"csv", "tsv"})
42
45
 
@@ -49,7 +52,7 @@ TIERED_PARSE_EXTENSIONS: frozenset[str] = PDF_EXTENSIONS | IMAGE_EXTENSIONS
49
52
  PAGE_RANGE_PARSE_EXTENSIONS: frozenset[str] = PDF_EXTENSIONS
50
53
 
51
54
  FLASH_ONLY_PARSE_EXTENSIONS: frozenset[str] = (
52
- OFFICE_EXTENSIONS | HTML_EXTENSIONS | CSV_EXTENSIONS | EPUB_EXTENSIONS | OFD_EXTENSIONS
55
+ OFFICE_EXTENSIONS | HTML_EXTENSIONS | MHTML_EXTENSIONS | CSV_EXTENSIONS | EPUB_EXTENSIONS | OFD_EXTENSIONS
53
56
  )
54
57
 
55
58
  PARSEABLE_EXTENSIONS: frozenset[str] = TIERED_PARSE_EXTENSIONS | FLASH_ONLY_PARSE_EXTENSIONS
@@ -65,6 +68,7 @@ FILE_TYPE_BY_EXTENSION: dict[str, str] = {
65
68
  **dict.fromkeys(IMAGE_EXTENSIONS, "image"),
66
69
  **{ext: ext for ext in OFFICE_EXTENSIONS},
67
70
  **dict.fromkeys(HTML_EXTENSIONS, "html"),
71
+ **dict.fromkeys(MHTML_EXTENSIONS, "mhtml"),
68
72
  "csv": "csv",
69
73
  "tsv": "tsv",
70
74
  **dict.fromkeys(EPUB_EXTENSIONS, "epub"),
@@ -104,6 +108,8 @@ MIME_TYPE_BY_EXTENSION: dict[str, str] = {
104
108
  "html": "text/html",
105
109
  "htm": "text/html",
106
110
  "shtml": "text/html",
111
+ "mhtml": "multipart/related",
112
+ "mht": "multipart/related",
107
113
  "png": "image/png",
108
114
  "jpg": "image/jpeg",
109
115
  "jpeg": "image/jpeg",
@@ -131,6 +137,18 @@ _RTF_HEADER_RE: Final = re.compile(
131
137
  )
132
138
 
133
139
 
140
+ def has_mhtml_header(file_bytes: bytes) -> bool:
141
+ """识别有界 MIME 头中的 related 容器,避免仅靠后缀误判普通邮件或 HTML。"""
142
+ prefix = file_bytes[:65536]
143
+ if b"multipart/related" not in prefix.lower():
144
+ return False
145
+ try:
146
+ message = BytesHeaderParser(policy=policy.default).parsebytes(prefix)
147
+ return message.get_content_type() == "multipart/related" and bool(message.get_boundary())
148
+ except ValueError:
149
+ return False
150
+
151
+
134
152
  def rtf_header_offset(file_bytes: bytes) -> int | None:
135
153
  """返回 RTF 根组左花括号偏移;不接受带任意前缀的伪装文本。"""
136
154
  match = _RTF_HEADER_RE.match(file_bytes)