docvortex 0.4.2__tar.gz → 0.4.4__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 (612) hide show
  1. {docvortex-0.4.2/src/docvortex.egg-info → docvortex-0.4.4}/PKG-INFO +4 -1
  2. {docvortex-0.4.2 → docvortex-0.4.4}/README.md +2 -0
  3. {docvortex-0.4.2 → docvortex-0.4.4}/docs/USAGE.md +14 -0
  4. {docvortex-0.4.2 → docvortex-0.4.4}/docs/sdk-0.4.md +6 -0
  5. {docvortex-0.4.2 → docvortex-0.4.4}/pyproject.toml +1 -1
  6. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/cli.py +22 -2
  7. docvortex-0.4.4/src/docvortex/export/__init__.py +5 -0
  8. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/export/middle.py +5 -1
  9. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/public_api.py +1 -0
  10. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/diagnostics.py +3 -2
  11. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/formula.py +1 -1
  12. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/inline.py +2 -2
  13. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/original.py +14 -10
  14. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/renderer.py +10 -10
  15. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/version.py +1 -1
  16. {docvortex-0.4.2 → docvortex-0.4.4/src/docvortex.egg-info}/PKG-INFO +4 -1
  17. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex.egg-info/SOURCES.txt +3 -0
  18. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex.egg-info/requires.txt +1 -0
  19. docvortex-0.4.4/tests/test_cli_logging.py +127 -0
  20. docvortex-0.4.4/tests/test_public_export_api.py +71 -0
  21. docvortex-0.4.4/tests/unittest/test_pdf_diagnostic_levels.py +48 -0
  22. docvortex-0.4.2/src/docvortex/foundation/__init__.py +0 -3
  23. {docvortex-0.4.2 → docvortex-0.4.4}/LICENSE.md +0 -0
  24. {docvortex-0.4.2 → docvortex-0.4.4}/MANIFEST.in +0 -0
  25. {docvortex-0.4.2 → docvortex-0.4.4}/demo/README.md +0 -0
  26. {docvortex-0.4.2 → docvortex-0.4.4}/demo/demo.py +0 -0
  27. {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/README.md +0 -0
  28. {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/docx_01.doc +0 -0
  29. {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/docx_01.docx +0 -0
  30. {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/pptx_01.ppt +0 -0
  31. {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/pptx_01.pptx +0 -0
  32. {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/rtf_01.rtf +0 -0
  33. {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/xlsx_01.xls +0 -0
  34. {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/xlsx_01.xlsx +0 -0
  35. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
  36. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
  37. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/caibao1.pdf +0 -0
  38. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/demo1.pdf +0 -0
  39. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/demo2.pdf +0 -0
  40. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/demo3.pdf +0 -0
  41. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/demo4.pdf +0 -0
  42. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/demo6.pdf +0 -0
  43. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
  44. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
  45. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
  46. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
  47. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/small_ocr.pdf +0 -0
  48. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
  49. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
  50. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
  51. {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
  52. {docvortex-0.4.2 → docvortex-0.4.4}/docs/HTML_PROTOCOL.md +0 -0
  53. {docvortex-0.4.2 → docvortex-0.4.4}/docs/JSON_PROTOCOL.md +0 -0
  54. {docvortex-0.4.2 → docvortex-0.4.4}/docs/METADATA.md +0 -0
  55. {docvortex-0.4.2 → docvortex-0.4.4}/docs/PDF_FONTS.md +0 -0
  56. {docvortex-0.4.2 → docvortex-0.4.4}/docs/RENDER_OWNERSHIP.md +0 -0
  57. {docvortex-0.4.2 → docvortex-0.4.4}/schemas/middle-2.0.json +0 -0
  58. {docvortex-0.4.2 → docvortex-0.4.4}/schemas/model-2.0.json +0 -0
  59. {docvortex-0.4.2 → docvortex-0.4.4}/setup.cfg +0 -0
  60. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/__init__.py +0 -0
  61. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/__init__.py +0 -0
  62. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/__init__.py +0 -0
  63. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
  64. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
  65. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/image.py +0 -0
  66. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
  67. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
  68. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
  69. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
  70. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
  71. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
  72. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/names.py +0 -0
  73. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
  74. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/contracts.py +0 -0
  75. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/csv.py +0 -0
  76. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
  77. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/constants.py +0 -0
  78. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/converter.py +0 -0
  79. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/errors.py +0 -0
  80. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
  81. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/package.py +0 -0
  82. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/properties.py +0 -0
  83. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
  84. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/__init__.py +0 -0
  85. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/anchors.py +0 -0
  86. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/constants.py +0 -0
  87. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/converter.py +0 -0
  88. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/document.py +0 -0
  89. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/errors.py +0 -0
  90. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/metadata.py +0 -0
  91. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/resources.py +0 -0
  92. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/selector.py +0 -0
  93. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/models.py +0 -0
  94. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
  95. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
  96. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
  97. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
  98. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
  99. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
  100. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/images.py +0 -0
  101. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
  102. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/models.py +0 -0
  103. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/package.py +0 -0
  104. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/path.py +0 -0
  105. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
  106. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
  107. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
  108. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/table.py +0 -0
  109. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/text.py +0 -0
  110. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
  111. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/__init__.py +0 -0
  112. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
  113. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
  114. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
  115. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
  116. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
  117. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
  118. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
  119. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
  120. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
  121. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
  122. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
  123. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
  124. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
  125. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
  126. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
  127. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
  128. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
  129. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
  130. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
  131. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
  132. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
  133. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
  134. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
  135. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
  136. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
  137. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
  138. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
  139. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
  140. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
  141. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
  142. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
  143. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
  144. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
  145. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
  146. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/errors.py +0 -0
  147. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/image.py +0 -0
  148. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
  149. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
  150. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
  151. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
  152. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/limits.py +0 -0
  153. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/metadata.py +0 -0
  154. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
  155. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
  156. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
  157. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
  158. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
  159. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
  160. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
  161. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
  162. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/styles.py +0 -0
  163. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/table.py +0 -0
  164. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/text.py +0 -0
  165. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
  166. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/opc.py +0 -0
  167. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
  168. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
  169. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
  170. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
  171. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
  172. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
  173. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
  174. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
  175. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
  176. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
  177. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
  178. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
  179. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
  180. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
  181. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
  182. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
  183. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
  184. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
  185. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
  186. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
  187. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
  188. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
  189. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
  190. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
  191. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
  192. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
  193. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
  194. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
  195. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/streams.py +0 -0
  196. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
  197. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
  198. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
  199. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
  200. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
  201. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
  202. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
  203. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
  204. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
  205. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
  206. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
  207. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
  208. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
  209. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
  210. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
  211. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
  212. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
  213. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
  214. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
  215. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
  216. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
  217. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
  218. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
  219. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
  220. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
  221. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
  222. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
  223. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
  224. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
  225. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
  226. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
  227. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
  228. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
  229. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
  230. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
  231. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
  232. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
  233. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
  234. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
  235. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
  236. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
  237. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
  238. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
  239. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/models.py +0 -0
  240. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
  241. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
  242. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
  243. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
  244. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
  245. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
  246. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
  247. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
  248. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
  249. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
  250. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
  251. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
  252. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
  253. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
  254. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
  255. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
  256. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
  257. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
  258. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
  259. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
  260. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
  261. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
  262. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
  263. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
  264. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
  265. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
  266. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
  267. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
  268. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
  269. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
  270. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
  271. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
  272. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/pdf.py +0 -0
  273. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/api.py +0 -0
  274. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/assets/__init__.py +0 -0
  275. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/assets/images.py +0 -0
  276. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/assets/store.py +0 -0
  277. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/__init__.py +0 -0
  278. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/html/__init__.py +0 -0
  279. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/html/contracts.py +0 -0
  280. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/html/materializer.py +0 -0
  281. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/html/parser.py +0 -0
  282. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/html/resources.py +0 -0
  283. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/json.py +0 -0
  284. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/__init__.py +0 -0
  285. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/inline.py +0 -0
  286. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/links.py +0 -0
  287. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/markup/__init__.py +0 -0
  288. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/markup/anchors.py +0 -0
  289. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/markup/formula.py +0 -0
  290. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/markup/projector.py +0 -0
  291. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/markup/styles.py +0 -0
  292. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/mathml.py +0 -0
  293. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/normalization.py +0 -0
  294. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/spans.py +0 -0
  295. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/__init__.py +0 -0
  296. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/blocks.py +0 -0
  297. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/content.py +0 -0
  298. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/document.py +0 -0
  299. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/html.py +0 -0
  300. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/models.py +0 -0
  301. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/rules.py +0 -0
  302. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/structure.py +0 -0
  303. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/text.py +0 -0
  304. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/tree.py +0 -0
  305. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/__init__.py +0 -0
  306. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/contracts.py +0 -0
  307. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/detection.py +0 -0
  308. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/filetypes.py +0 -0
  309. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/page_range.py +0 -0
  310. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/__init__.py +0 -0
  311. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/_document.py +0 -0
  312. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/classify.py +0 -0
  313. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/constants.py +0 -0
  314. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/font_runtime.py +0 -0
  315. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/images.py +0 -0
  316. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/layout.py +0 -0
  317. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/metadata.py +0 -0
  318. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/native_annotations.py +0 -0
  319. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/native_contracts.py +0 -0
  320. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/native_coordinates.py +0 -0
  321. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
  322. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/native_objects.py +0 -0
  323. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
  324. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/pdfium.py +0 -0
  325. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/raster.py +0 -0
  326. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/text/__init__.py +0 -0
  327. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/text/_contracts.py +0 -0
  328. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/text/extract.py +0 -0
  329. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/text/geometry.py +0 -0
  330. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/text/groups.py +0 -0
  331. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/visuals.py +0 -0
  332. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/properties.py +0 -0
  333. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/source.py +0 -0
  334. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/errors.py +0 -0
  335. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/export/bundle.py +0 -0
  336. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/export/files.py +0 -0
  337. {docvortex-0.4.2/src/docvortex/export → docvortex-0.4.4/src/docvortex/foundation}/__init__.py +0 -0
  338. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_coordinates.py +0 -0
  339. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_geometry.py +0 -0
  340. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_hyperlink.py +0 -0
  341. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_image.py +0 -0
  342. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_image_operations.py +0 -0
  343. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_image_payload.py +0 -0
  344. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_text.py +0 -0
  345. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/image_encoding.py +0 -0
  346. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/language.py +0 -0
  347. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/type_identity.py +0 -0
  348. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/xml_names.py +0 -0
  349. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/geometry.py +0 -0
  350. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/metadata.py +0 -0
  351. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/options.py +0 -0
  352. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/__init__.py +0 -0
  353. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/content.py +0 -0
  354. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/document.py +0 -0
  355. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/lists.py +0 -0
  356. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/page_blocks.py +0 -0
  357. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/pages.py +0 -0
  358. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/paragraphs.py +0 -0
  359. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/visual.py +0 -0
  360. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/__init__.py +0 -0
  361. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/__init__.py +0 -0
  362. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/common/__init__.py +0 -0
  363. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/common/context.py +0 -0
  364. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/common/html_table.py +0 -0
  365. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/common/index.py +0 -0
  366. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/common/list_items.py +0 -0
  367. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/common/planner.py +0 -0
  368. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/__init__.py +0 -0
  369. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/assets.py +0 -0
  370. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/inline.py +0 -0
  371. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/math.py +0 -0
  372. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/renderer.py +0 -0
  373. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/styles.py +0 -0
  374. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/table.py +0 -0
  375. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/epub/__init__.py +0 -0
  376. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/epub/assets.py +0 -0
  377. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/epub/package.py +0 -0
  378. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/epub/renderer.py +0 -0
  379. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/html/__init__.py +0 -0
  380. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/html/inline.py +0 -0
  381. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/html/renderer.py +0 -0
  382. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
  383. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/html/table.py +0 -0
  384. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/latex/__init__.py +0 -0
  385. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/latex/assets.py +0 -0
  386. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/latex/inline.py +0 -0
  387. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/latex/renderer.py +0 -0
  388. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/latex/table.py +0 -0
  389. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
  390. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/assets.py +0 -0
  391. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
  392. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
  393. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/inline.py +0 -0
  394. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
  395. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/table.py +0 -0
  396. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
  397. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/assets.py +0 -0
  398. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
  399. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
  400. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/styles.py +0 -0
  401. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/table.py +0 -0
  402. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
  403. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
  404. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
  405. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/api.py +0 -0
  406. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/contracts.py +0 -0
  407. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/docx.py +0 -0
  408. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/epub.py +0 -0
  409. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/fragments.py +0 -0
  410. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/html.py +0 -0
  411. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/latex.py +0 -0
  412. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/markdown.py +0 -0
  413. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/pdf.py +0 -0
  414. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/structured_content.py +0 -0
  415. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/epub/docvortex.css +0 -0
  416. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/fasttext-langdetect/lid.176.ftz +0 -0
  417. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
  418. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/fonts/NOTICE +0 -0
  419. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/fonts/manifest.json +0 -0
  420. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/html/docvortex.css +0 -0
  421. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/html/docvortex.min.css +0 -0
  422. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/result.py +0 -0
  423. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/schema.py +0 -0
  424. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/visualization.py +0 -0
  425. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex.egg-info/dependency_links.txt +0 -0
  426. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex.egg-info/entry_points.txt +0 -0
  427. {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex.egg-info/top_level.txt +0 -0
  428. {docvortex-0.4.2 → docvortex-0.4.4}/tests/benchmarks/flash_pdf.py +0 -0
  429. {docvortex-0.4.2 → docvortex-0.4.4}/tests/benchmarks/pipeline.py +0 -0
  430. {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
  431. {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/flash_layout_block_expectations.json +0 -0
  432. {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
  433. {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
  434. {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
  435. {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
  436. {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
  437. {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
  438. {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
  439. {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/rtf/semantic.rtf +0 -0
  440. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_architecture.py +0 -0
  441. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_benchmark_entrypoint.py +0 -0
  442. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_brand_protocol.py +0 -0
  443. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_complete_pipeline.py +0 -0
  444. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_converter_lifecycle.py +0 -0
  445. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_document_envelope.py +0 -0
  446. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_document_metadata.py +0 -0
  447. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_format_matrix.py +0 -0
  448. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_geometry_api.py +0 -0
  449. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_html_namespace.py +0 -0
  450. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_mixed_font_script_reference.py +0 -0
  451. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_analysis_api.py +0 -0
  452. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_font_geometry.py +0 -0
  453. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_font_runtime.py +0 -0
  454. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_model_text_normalization.py +0 -0
  455. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_output_text.py +0 -0
  456. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_render_pool.py +0 -0
  457. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_source_row_merging.py +0 -0
  458. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_symbol_normalization.py +0 -0
  459. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_public_image_api.py +0 -0
  460. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_public_pipeline.py +0 -0
  461. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_refactor_raster.py +0 -0
  462. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_refactor_rendering.py +0 -0
  463. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_refactor_resources.py +0 -0
  464. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_render_ownership.py +0 -0
  465. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_renderer_branding.py +0 -0
  466. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_shared_boundaries.py +0 -0
  467. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_system_font_pdf_pipeline.py +0 -0
  468. {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_validated_geometry.py +0 -0
  469. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
  470. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_epub_test_utils.py +0 -0
  471. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_flash_pdf_test_utils.py +0 -0
  472. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_image_mtef_test_utils.py +0 -0
  473. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_legacy_doc_test_utils.py +0 -0
  474. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
  475. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_legacy_xls_test_utils.py +0 -0
  476. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_metafile_test_utils.py +0 -0
  477. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_mtef_test_utils.py +0 -0
  478. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_mtef_v5_test_utils.py +0 -0
  479. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_native_test_utils.py +0 -0
  480. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_odf_test_utils.py +0 -0
  481. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_ofd_test_utils.py +0 -0
  482. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
  483. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
  484. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_span_test_utils.py +0 -0
  485. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
  486. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
  487. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
  488. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
  489. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
  490. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
  491. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
  492. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
  493. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
  494. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
  495. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
  496. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
  497. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
  498. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
  499. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
  500. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
  501. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/test.pdf +0 -0
  502. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_backend_architecture.py +0 -0
  503. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_backend_block_object_regressions.py +0 -0
  504. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_docx_assets.py +0 -0
  505. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_docx_complex_fields.py +0 -0
  506. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_docx_math.py +0 -0
  507. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_docx_render.py +0 -0
  508. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_docx_special_char_tables.py +0 -0
  509. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_docx_table.py +0 -0
  510. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_emfplus_integration.py +0 -0
  511. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_epub_backlinks.py +0 -0
  512. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_epub_quoted_note_types.py +0 -0
  513. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_epub_render.py +0 -0
  514. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_csv.py +0 -0
  515. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_docx_equationxml.py +0 -0
  516. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_epub.py +0 -0
  517. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_html.py +0 -0
  518. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_image_mtef.py +0 -0
  519. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
  520. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_legacy_doc.py +0 -0
  521. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
  522. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_legacy_ppt.py +0 -0
  523. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_legacy_xls.py +0 -0
  524. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
  525. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_markup_anchors.py +0 -0
  526. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_model.py +0 -0
  527. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_mtef_v5.py +0 -0
  528. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_odf.py +0 -0
  529. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_ofd.py +0 -0
  530. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_office_image_mtef.py +0 -0
  531. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_office_metafile.py +0 -0
  532. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_office_models.py +0 -0
  533. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
  534. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
  535. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_office_title_types.py +0 -0
  536. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
  537. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
  538. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
  539. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
  540. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
  541. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
  542. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_extractor.py +0 -0
  543. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_formulas.py +0 -0
  544. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_graphics.py +0 -0
  545. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
  546. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
  547. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_native_text.py +0 -0
  548. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
  549. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_samples.py +0 -0
  550. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_scripts.py +0 -0
  551. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_semantics.py +0 -0
  552. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_tables.py +0 -0
  553. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
  554. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_titles.py +0 -0
  555. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
  556. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_rtf.py +0 -0
  557. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_shared_helpers.py +0 -0
  558. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
  559. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_guess_suffix_ole2.py +0 -0
  560. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_html_css_build.py +0 -0
  561. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_html_render.py +0 -0
  562. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_html_security.py +0 -0
  563. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
  564. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_latex_render.py +0 -0
  565. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_markdown_render.py +0 -0
  566. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_middle_json_block_models.py +0 -0
  567. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_middle_json_export.py +0 -0
  568. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_middle_json_validator.py +0 -0
  569. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_model_json.py +0 -0
  570. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_native_pdf_table.py +0 -0
  571. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
  572. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
  573. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
  574. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
  575. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_ofd_assembly.py +0 -0
  576. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_ofd_vector_tables.py +0 -0
  577. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_office_demo_exports.py +0 -0
  578. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_office_demo_pages.py +0 -0
  579. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_office_parser_regressions.py +0 -0
  580. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
  581. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_classify.py +0 -0
  582. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_demo_links.py +0 -0
  583. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_document.py +0 -0
  584. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_original_layout.py +0 -0
  585. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_pagination.py +0 -0
  586. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_render.py +0 -0
  587. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
  588. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_text_styles.py +0 -0
  589. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_title_font_plan.py +0 -0
  590. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_title_space.py +0 -0
  591. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_visualization.py +0 -0
  592. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_postprocess_page_blocks.py +0 -0
  593. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_postprocess_pages.py +0 -0
  594. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_postprocess_paragraphs.py +0 -0
  595. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_postprocess_visual.py +0 -0
  596. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_render_api.py +0 -0
  597. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_render_html_table.py +0 -0
  598. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_render_image_renderer.py +0 -0
  599. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_render_list_index_utils.py +0 -0
  600. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_structured_content_render.py +0 -0
  601. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_table_merge.py +0 -0
  602. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_table_merge_cell_merge.py +0 -0
  603. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_text_block_anchor.py +0 -0
  604. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_text_boundary_rules.py +0 -0
  605. {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_text_utils.py +0 -0
  606. {docvortex-0.4.2 → docvortex-0.4.4}/tools/__init__.py +0 -0
  607. {docvortex-0.4.2 → docvortex-0.4.4}/tools/build_html_css.py +0 -0
  608. {docvortex-0.4.2 → docvortex-0.4.4}/tools/calibrate_pdf_geometry.py +0 -0
  609. {docvortex-0.4.2 → docvortex-0.4.4}/tools/capture_baseline.py +0 -0
  610. {docvortex-0.4.2 → docvortex-0.4.4}/tools/capture_platform_layout.py +0 -0
  611. {docvortex-0.4.2 → docvortex-0.4.4}/tools/compare_font_platforms.py +0 -0
  612. {docvortex-0.4.2 → docvortex-0.4.4}/tools/font_geometry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.2
3
+ Version: 0.4.4
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
@@ -43,6 +43,7 @@ Requires-Dist: opencv-python>=4.11.0.86
43
43
  Provides-Extra: test
44
44
  Requires-Dist: pytest; extra == "test"
45
45
  Requires-Dist: pytest-cov; extra == "test"
46
+ Requires-Dist: pytest-xdist<4,>=3.8; extra == "test"
46
47
  Requires-Dist: markdown; extra == "test"
47
48
  Requires-Dist: jsonschema<5,>=4; extra == "test"
48
49
  Provides-Extra: dev
@@ -106,6 +107,8 @@ docvortex convert report.pdf --format markdown --output output/report.md
106
107
 
107
108
  Replace `report.pdf` with a local file in any supported input format.
108
109
  Use `--format` to choose the output; run `docvortex convert --help` for options.
110
+ The root-level `--log-level` option controls loguru output and defaults to `info`.
111
+ It must precede the command; `DOCVORTEX_LOG_LEVEL=warning` can also configure it.
109
112
 
110
113
  ### Python
111
114
 
@@ -53,6 +53,8 @@ docvortex convert report.pdf --format markdown --output output/report.md
53
53
 
54
54
  Replace `report.pdf` with a local file in any supported input format.
55
55
  Use `--format` to choose the output; run `docvortex convert --help` for options.
56
+ The root-level `--log-level` option controls loguru output and defaults to `info`.
57
+ It must precede the command; `DOCVORTEX_LOG_LEVEL=warning` can also configure it.
56
58
 
57
59
  ### Python
58
60
 
@@ -7,6 +7,20 @@ you need access to intermediate results. All examples use the public Python SDK.
7
7
  Install with `pip install docvortex` and replace `report.pdf` with a local text PDF.
8
8
  Each example can be run independently in a fresh output directory.
9
9
 
10
+ ## Global CLI log level
11
+
12
+ The root-level `--log-level` option controls loguru output for CLI commands.
13
+ It defaults to `info`, supports `trace`, `debug`, `info`, `warning`, `error` and
14
+ `critical`, and must be placed before the subcommand:
15
+
16
+ ```bash
17
+ docvortex --log-level debug convert report.pdf --format markdown --output output/report.md
18
+ ```
19
+
20
+ `DOCVORTEX_LOG_LEVEL` provides the same setting through an environment variable.
21
+ An explicit `--log-level` value takes precedence. SDK imports do not change the
22
+ host application's existing loguru sinks.
23
+
10
24
  ## Stage APIs
11
25
 
12
26
  The pipeline has three stages:
@@ -18,6 +18,12 @@ MinerU 使用 `docvortex>=0.4.0,<0.5.0`。本轮调整 Python 模块边界,保
18
18
 
19
19
  `docvortex.public_api.PUBLIC_API` 是静态模块及符号清单。新增跨库依赖必须同时更新清单、文档和契约测试;不能通过基础实现、私有模块或动态别名绕过边界。
20
20
 
21
+ ## 结果包素材导出(0.4.3)
22
+
23
+ 跨库调用方可通过 `docvortex.export.materialize_middle(middle_json, assets=None)` 获取图片外置后的文档副本与 `AssetStore`,再通过 `validate_materialized_assets(document, assets)` 验证所有图片引用。直接图片和视觉 HTML 内嵌图片使用安全相对路径,原始图片字节及布局方向扩展保持不变;代码字面量不作为 HTML 素材处理。
24
+
25
+ 调用方负责将该副本及素材写入自己的结果包,不应先省略图片再从源 PDF 重裁。缺失引用、未物化网络图片或同名素材冲突会显式失败。物化不修改输入对象、不读取源 PDF、不下载网络资源;已有外部素材须通过 `AssetStore` 显式提供。
26
+
21
27
  ## 行为与资源所有权
22
28
 
23
29
  `prepare_text_evidence` 返回具名的 `PDFTextEvidence`,`apply_text_evidence` 统一完成链接、样式、脚本与 InlineSpan 物化。MinerU 仍决定调用时机、公式排除区域、超大字符页和 OCR 回退。
@@ -32,7 +32,7 @@ dependencies = [
32
32
  ]
33
33
 
34
34
  [project.optional-dependencies]
35
- test = ["pytest", "pytest-cov", "markdown", "jsonschema>=4,<5"]
35
+ test = ["pytest", "pytest-cov", "pytest-xdist>=3.8,<4", "markdown", "jsonschema>=4,<5"]
36
36
  dev = ["ruff==0.14.2", "build", "twine"]
37
37
 
38
38
  [project.urls]
@@ -3,16 +3,36 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from pathlib import Path
6
+ import sys
6
7
 
7
8
  import click
9
+ from loguru import logger
8
10
 
9
11
  from .version import __version__
10
12
 
11
13
 
14
+ _LOG_LEVELS = ("trace", "debug", "info", "warning", "error", "critical")
15
+
16
+
17
+ def _configure_log_level(level: str) -> None:
18
+ """按全局参数重建 loguru 标准错误输出,并过滤低于该等级的日志。"""
19
+ logger.remove()
20
+ logger.add(sys.stderr, level=level.upper())
21
+
22
+
12
23
  @click.group(help="DocVortex: native multi-format document parsing and conversion.")
13
24
  @click.version_option(__version__)
14
- def main() -> None:
15
- """提供独立文档引擎的命令行入口。"""
25
+ @click.option(
26
+ "--log-level",
27
+ type=click.Choice(_LOG_LEVELS, case_sensitive=False),
28
+ default="info",
29
+ show_default=True,
30
+ envvar="DOCVORTEX_LOG_LEVEL",
31
+ help="Global loguru log level; place this root option before the command.",
32
+ )
33
+ def main(log_level: str) -> None:
34
+ """提供独立文档引擎的命令行入口,并应用全局日志等级。"""
35
+ _configure_log_level(log_level)
16
36
 
17
37
 
18
38
  @main.command("convert")
@@ -0,0 +1,5 @@
1
+ """文档副本与素材字节的公开导出边界。"""
2
+
3
+ from .files import materialize_middle, validate_materialized_assets
4
+
5
+ __all__ = ["materialize_middle", "validate_materialized_assets"]
@@ -58,7 +58,11 @@ def _prepare_export_copy(middle_json: MiddleJson) -> tuple[MiddleJson, dict[str,
58
58
  block.image_base64 = None # type: ignore[attr-defined]
59
59
 
60
60
  content = getattr(block, "content", None)
61
- if not isinstance(content, str) or "data:image/" not in content:
61
+ if (
62
+ str(block.type) not in {"table_body", "chart_body", "image_body"}
63
+ or not isinstance(content, str)
64
+ or "data:image/" not in content
65
+ ):
62
66
  continue
63
67
  if block.index is None:
64
68
  raise ValueError(f"HTML image carrier requires index: page_idx={page.page_idx}, type={block.type}")
@@ -165,6 +165,7 @@ PUBLIC_API: dict[str, tuple[str, ...]] = {
165
165
  "attach_visual_block_images",
166
166
  "attach_visual_block_images_from_pdf",
167
167
  ),
168
+ "docvortex.export": ("materialize_middle", "validate_materialized_assets"),
168
169
  "docvortex.errors": (
169
170
  "DocumentError",
170
171
  "InvalidRequestError",
@@ -12,6 +12,7 @@ from ....result import Diagnostic
12
12
 
13
13
 
14
14
  _diagnostics: ContextVar[list[Diagnostic] | None] = ContextVar("pdf_diagnostics", default=None)
15
+ _DEBUG_DIAGNOSTIC_CODES = frozenset({"pdf_title_layout_expanded", "pdf_layout_scaled"})
15
16
 
16
17
 
17
18
  @contextmanager
@@ -26,8 +27,8 @@ def collect_pdf_diagnostics() -> Iterator[list[Diagnostic]]:
26
27
 
27
28
 
28
29
  def report_pdf_diagnostic(code: str, message: str, page_index: int | None = None) -> None:
29
- """将同一条定位信息写入日志与当前高层产物的诊断列表。"""
30
- logger.warning("{}: {}", code, message)
30
+ """PDF 渲染诊断统一使用 DEBUG 日志,结构化诊断保持完整。"""
31
+ logger.debug("{}: {}", code, message)
31
32
  items = _diagnostics.get()
32
33
  if items is not None:
33
34
  diagnostic = Diagnostic(code, message, page_index)
@@ -356,7 +356,7 @@ def _local_name(tag: str) -> str:
356
356
 
357
357
 
358
358
  def _formula_preview(latex: str) -> str:
359
- """为告警生成有界 LaTeX 摘要,避免超长公式污染日志。"""
359
+ """为诊断生成有界 LaTeX 摘要,避免超长公式污染日志。"""
360
360
  return latex if len(latex) <= 200 else f"{latex[:197]}..."
361
361
 
362
362
 
@@ -43,7 +43,7 @@ class PdfAnchorRegistry:
43
43
  return self._names.get(normalized) if normalized else None
44
44
 
45
45
  def attach_markup(self, anchor: str | None) -> str:
46
- """返回首个目标的 Paragraph anchor 标签,重复目标仅记录告警。"""
46
+ """返回首个目标的 Paragraph anchor 标签,重复目标仅记录诊断。"""
47
47
  normalized = (anchor or "").strip()
48
48
  name = self.resolve(normalized)
49
49
  if name is None:
@@ -85,7 +85,7 @@ class PdfInlineContext:
85
85
  next_formula_id: int = 0
86
86
 
87
87
  def location(self, page_idx: int, block_index: int | None, block_type: str) -> str:
88
- """返回稳定的 page/block 告警定位文本。"""
88
+ """返回稳定的 page/block 诊断定位文本。"""
89
89
  return f"page_idx={page_idx}, block_index={block_index}, block_type={block_type}"
90
90
 
91
91
  def register_formula(self, image: InlineFormulaImage) -> str:
@@ -131,17 +131,19 @@ class OriginalPdfRenderer(_PdfRenderer):
131
131
  )
132
132
  if reasons:
133
133
  plan.exception_count += 1
134
- self._warning("pdf_layout_font_exception", f"reason={','.join(reasons)}, {detail}", item.page_idx, item.block)
134
+ self._diagnostic(
135
+ "pdf_layout_font_exception", f"reason={','.join(reasons)}, {detail}", item.page_idx, item.block
136
+ )
135
137
  if item.geometry_conflict:
136
- self._warning("pdf_title_geometry_conflict", detail, item.page_idx, item.block)
138
+ self._diagnostic("pdf_title_geometry_conflict", detail, item.page_idx, item.block)
137
139
  elif item.clearance_unavailable:
138
- self._warning("pdf_title_clearance_unavailable", detail, item.page_idx, item.block)
140
+ self._diagnostic("pdf_title_clearance_unavailable", detail, item.page_idx, item.block)
139
141
  ox0, oy0, ox1, oy1 = item.original_rect
140
142
  dx0, dy0, dx1, dy1 = item.draw_rect
141
143
  expanded = dx0 < ox0 - 0.001 or dy0 < oy0 - 0.001 or dx1 > ox1 + 0.001 or dy1 > oy1 + 0.001
142
144
  if expanded:
143
145
  plan.expanded_count += 1
144
- self._warning("pdf_title_layout_expanded", detail, item.page_idx, item.block)
146
+ self._diagnostic("pdf_title_layout_expanded", detail, item.page_idx, item.block)
145
147
  plan.titles.append(
146
148
  {
147
149
  "page_idx": item.page_idx,
@@ -190,7 +192,9 @@ class OriginalPdfRenderer(_PdfRenderer):
190
192
  )
191
193
  )
192
194
  return prepared
193
- self._warning("pdf_layout_approximate", "Missing child bbox; fitting the group inside its parent", page_idx, block)
195
+ self._diagnostic(
196
+ "pdf_layout_approximate", "Missing child bbox; fitting the group inside its parent", page_idx, block
197
+ )
194
198
  assert block.bbox is not None
195
199
  x0, y0, x1, y1 = block.bbox
196
200
  width, height = (x1 - x0) * page_width, (y1 - y0) * page_height
@@ -226,14 +230,14 @@ class OriginalPdfRenderer(_PdfRenderer):
226
230
  if prepared is not None:
227
231
  return [self._prepared_image_flowable(prepared, block)]
228
232
  if isinstance(block, (TableBodyBlock, ChartBodyBlock)):
229
- self._warning(
233
+ self._diagnostic(
230
234
  "pdf_layout_visual_fallback", "Region image unavailable; rendering structured content", page_idx, block
231
235
  )
232
236
  if "<table" in block.content.lower():
233
237
  try:
234
238
  return list(self._html_tables(block.content, page_idx=page_idx, block=block))
235
239
  except PdfTableError as exc:
236
- self._warning("pdf_table_fallback", str(exc), page_idx, block)
240
+ self._diagnostic("pdf_table_fallback", str(exc), page_idx, block)
237
241
  if block.content.strip():
238
242
  return [self._preformatted(_plain_html_text(block.content), page_idx, block, self.styles.spatial_table)]
239
243
  return [self._placeholder("image unavailable", page_idx=page_idx, block=block, width=self.available_width)]
@@ -281,7 +285,7 @@ class OriginalPdfRenderer(_PdfRenderer):
281
285
  url: str | None = None,
282
286
  ) -> Paragraph:
283
287
  """用可测量段落展示缺失内容,避免固定高度的占位表格产生文字外溢。"""
284
- self._warning("pdf_content_placeholder", label, page_idx, block)
288
+ self._diagnostic("pdf_content_placeholder", label, page_idx, block)
285
289
  spans = [TextSpan(type="text", content=label[:320] or "content unavailable")]
286
290
  if url:
287
291
  spans = [HyperlinkSpan(type="hyperlink", url=url, content=spans)]
@@ -322,11 +326,11 @@ class OriginalPdfRenderer(_PdfRenderer):
322
326
  """只绘制已经确认的测量结果,正文不重新排版,标题使用独立的安全绘制框。"""
323
327
  fit = item.fit
324
328
  if fit.small_text:
325
- self._warning(
329
+ self._diagnostic(
326
330
  "pdf_layout_small_text", f"Block fitted below 6 pt (scale={fit.scale:.4f})", item.page_idx, item.block
327
331
  )
328
332
  if fit.scale < 0.999:
329
- self._warning("pdf_layout_scaled", f"Block fitted at scale={fit.scale:.4f}", item.page_idx, item.block)
333
+ self._diagnostic("pdf_layout_scaled", f"Block fitted at scale={fit.scale:.4f}", item.page_idx, item.block)
330
334
  rect = item.draw_rect or item.original_rect
331
335
  canvas.saveState()
332
336
  try:
@@ -332,7 +332,7 @@ class _PdfRenderer:
332
332
  flowable.spaceAfter = 7
333
333
  return [flowable]
334
334
  except PdfFormulaError as exc:
335
- self._warning("pdf_formula_fallback", str(exc), page_idx, block)
335
+ self._diagnostic("pdf_formula_fallback", str(exc), page_idx, block)
336
336
  if _has_image_payload(block):
337
337
  image = self._try_prepared_block_image(block, page_idx)
338
338
  if image is not None:
@@ -433,7 +433,7 @@ class _PdfRenderer:
433
433
  rendered.extend(self._html_tables(content, page_idx=page_idx, block=child))
434
434
  continue
435
435
  except PdfTableError as exc:
436
- self._warning("pdf_table_fallback", str(exc), page_idx, child)
436
+ self._diagnostic("pdf_table_fallback", str(exc), page_idx, child)
437
437
  if _has_image_payload(child):
438
438
  image = self._try_prepared_block_image(child, page_idx)
439
439
  if image is not None:
@@ -473,7 +473,7 @@ class _PdfRenderer:
473
473
  try:
474
474
  rendered.extend(self._html_tables(content, page_idx=page_idx, block=child))
475
475
  except PdfTableError as exc:
476
- self._warning("pdf_table_fallback", str(exc), page_idx, child)
476
+ self._diagnostic("pdf_table_fallback", str(exc), page_idx, child)
477
477
  if not image_succeeded:
478
478
  rendered.append(self._preformatted(_plain_html_text(content), page_idx, child, self.styles.body))
479
479
  elif content and not image_succeeded:
@@ -573,7 +573,7 @@ class _PdfRenderer:
573
573
  try:
574
574
  prepared = prepare_html_image(source, self.asset_resolver)
575
575
  except PdfAssetError as exc:
576
- self._warning("pdf_image_unavailable", str(exc), page_idx, block)
576
+ self._diagnostic("pdf_image_unavailable", str(exc), page_idx, block)
577
577
  return self._placeholder(
578
578
  f"image unavailable: {alt_text}",
579
579
  block=block,
@@ -616,11 +616,11 @@ class _PdfRenderer:
616
616
  )
617
617
 
618
618
  def _try_prepared_block_image(self, block: ImagePayloadBlock, page_idx: int) -> PreparedImage | None:
619
- """尝试离线准备图片并把所有素材错误降级为 warning。"""
619
+ """尝试离线准备图片,并把素材错误统一记录为 DEBUG 诊断。"""
620
620
  try:
621
621
  return prepare_block_image(block, self.asset_resolver)
622
622
  except PdfAssetError as exc:
623
- self._warning("pdf_image_unavailable", str(exc), page_idx, block)
623
+ self._diagnostic("pdf_image_unavailable", str(exc), page_idx, block)
624
624
  return None
625
625
 
626
626
  def _prepared_image_flowable(
@@ -659,7 +659,7 @@ class _PdfRenderer:
659
659
  url: str | None = None,
660
660
  ) -> Table:
661
661
  """创建带浅色边框、可选远程链接和定位文本的稳定占位框。"""
662
- self._warning("pdf_content_placeholder", label, page_idx, block)
662
+ self._diagnostic("pdf_content_placeholder", label, page_idx, block)
663
663
  normalized = re.sub(r"\s+", " ", label).strip()[:_MAX_PLACEHOLDER_TEXT] or "content unavailable"
664
664
  markup = render_plain_text_markup(normalized)
665
665
  if url:
@@ -688,11 +688,11 @@ class _PdfRenderer:
688
688
 
689
689
  @staticmethod
690
690
  def _location(page_idx: int, block: BlockBase) -> str:
691
- """返回 PDF 告警与占位使用的稳定 page/block 定位。"""
691
+ """返回 PDF 诊断与占位使用的稳定 page/block 定位。"""
692
692
  return f"page_idx={page_idx}, block_index={block.index}, block_type={block.type}"
693
693
 
694
- def _warning(self, code: str, message: str, page_idx: int, block: BlockBase) -> None:
695
- """用统一位置格式同时报告日志与结构化 PDF 诊断。"""
694
+ def _diagnostic(self, code: str, message: str, page_idx: int, block: BlockBase) -> None:
695
+ """用统一位置格式同时报告 DEBUG 日志与结构化 PDF 诊断。"""
696
696
  report_pdf_diagnostic(code, f"{message} ({self._location(page_idx, block)})", page_idx)
697
697
 
698
698
 
@@ -1,3 +1,3 @@
1
- __version__ = "0.4.2"
1
+ __version__ = "0.4.4"
2
2
 
3
3
  __all__ = ["__version__"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.2
3
+ Version: 0.4.4
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
@@ -43,6 +43,7 @@ Requires-Dist: opencv-python>=4.11.0.86
43
43
  Provides-Extra: test
44
44
  Requires-Dist: pytest; extra == "test"
45
45
  Requires-Dist: pytest-cov; extra == "test"
46
+ Requires-Dist: pytest-xdist<4,>=3.8; extra == "test"
46
47
  Requires-Dist: markdown; extra == "test"
47
48
  Requires-Dist: jsonschema<5,>=4; extra == "test"
48
49
  Provides-Extra: dev
@@ -106,6 +107,8 @@ docvortex convert report.pdf --format markdown --output output/report.md
106
107
 
107
108
  Replace `report.pdf` with a local file in any supported input format.
108
109
  Use `--format` to choose the output; run `docvortex convert --help` for options.
110
+ The root-level `--log-level` option controls loguru output and defaults to `info`.
111
+ It must precede the command; `DOCVORTEX_LOG_LEVEL=warning` can also configure it.
109
112
 
110
113
  ### Python
111
114
 
@@ -422,6 +422,7 @@ src/docvortex/resources/html/docvortex.min.css
422
422
  tests/test_architecture.py
423
423
  tests/test_benchmark_entrypoint.py
424
424
  tests/test_brand_protocol.py
425
+ tests/test_cli_logging.py
425
426
  tests/test_complete_pipeline.py
426
427
  tests/test_converter_lifecycle.py
427
428
  tests/test_document_envelope.py
@@ -438,6 +439,7 @@ tests/test_pdf_output_text.py
438
439
  tests/test_pdf_render_pool.py
439
440
  tests/test_pdf_source_row_merging.py
440
441
  tests/test_pdf_symbol_normalization.py
442
+ tests/test_public_export_api.py
441
443
  tests/test_public_image_api.py
442
444
  tests/test_public_pipeline.py
443
445
  tests/test_refactor_raster.py
@@ -557,6 +559,7 @@ tests/unittest/test_office_parser_regressions.py
557
559
  tests/unittest/test_pdf_cjk_wrapping.py
558
560
  tests/unittest/test_pdf_classify.py
559
561
  tests/unittest/test_pdf_demo_links.py
562
+ tests/unittest/test_pdf_diagnostic_levels.py
560
563
  tests/unittest/test_pdf_document.py
561
564
  tests/unittest/test_pdf_original_layout.py
562
565
  tests/unittest/test_pdf_pagination.py
@@ -33,5 +33,6 @@ twine
33
33
  [test]
34
34
  pytest
35
35
  pytest-cov
36
+ pytest-xdist<4,>=3.8
36
37
  markdown
37
38
  jsonschema<5,>=4
@@ -0,0 +1,127 @@
1
+ """验证 CLI 全局 loguru 日志等级参数的解析与过滤行为。"""
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib
6
+ import sys
7
+ from pathlib import Path
8
+ from typing import Iterator
9
+
10
+ from click.testing import CliRunner
11
+ from loguru import logger
12
+ import pytest
13
+
14
+ from docvortex import cli
15
+
16
+
17
+ @pytest.fixture
18
+ def isolated_logger() -> Iterator[None]:
19
+ """隔离 loguru 全局 sink,避免 CLI 日志测试影响其他用例。"""
20
+ logger.remove()
21
+ yield
22
+ logger.remove()
23
+ logger.add(sys.stderr)
24
+
25
+
26
+ class _DummyPDFDocument:
27
+ """替身 PDF 文档,避免日志参数测试依赖真实 PDF 解析。"""
28
+
29
+ def __enter__(self) -> "_DummyPDFDocument":
30
+ return self
31
+
32
+ def __exit__(self, exc_type: object, exc: object, traceback: object) -> bool:
33
+ return False
34
+
35
+ def classify(self) -> str:
36
+ return "txt"
37
+
38
+
39
+ def _invoke_classify(runner: CliRunner, source: Path, *arguments: str):
40
+ """调用 classify 子命令并返回执行结果,供日志参数断言复用。"""
41
+ return runner.invoke(cli.main, [*arguments, "classify", str(source)])
42
+
43
+
44
+ def test_cli_log_level_defaults_to_info(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
45
+ """未显式配置时,根命令默认传入 info 日志等级。"""
46
+ source = tmp_path / "source.pdf"
47
+ source.write_bytes(b"dummy")
48
+ levels = []
49
+ monkeypatch.setattr(cli, "_configure_log_level", levels.append)
50
+ monkeypatch.setattr("docvortex.document.pdf.PDFDocument", lambda _: _DummyPDFDocument())
51
+
52
+ result = _invoke_classify(CliRunner(), source)
53
+
54
+ assert result.exit_code == 0, result.output
55
+ assert levels == ["info"]
56
+
57
+
58
+ def test_cli_log_level_accepts_root_option_and_environment(
59
+ tmp_path: Path, monkeypatch: pytest.MonkeyPatch
60
+ ) -> None:
61
+ """根命令参数生效,且显式参数优先于环境变量。"""
62
+ source = tmp_path / "source.pdf"
63
+ source.write_bytes(b"dummy")
64
+ levels = []
65
+ monkeypatch.setattr(cli, "_configure_log_level", levels.append)
66
+ monkeypatch.setattr("docvortex.document.pdf.PDFDocument", lambda _: _DummyPDFDocument())
67
+ monkeypatch.setenv("DOCVORTEX_LOG_LEVEL", "warning")
68
+ runner = CliRunner()
69
+
70
+ environment_result = _invoke_classify(runner, source)
71
+ explicit_result = _invoke_classify(runner, source, "--log-level", "debug")
72
+
73
+ assert environment_result.exit_code == 0, environment_result.output
74
+ assert explicit_result.exit_code == 0, explicit_result.output
75
+ assert levels == ["warning", "debug"]
76
+
77
+
78
+ def test_cli_rejects_invalid_log_level(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
79
+ """非法日志等级在进入业务命令前被 Click 拒绝。"""
80
+ source = tmp_path / "source.pdf"
81
+ source.write_bytes(b"dummy")
82
+ levels = []
83
+ monkeypatch.setattr(cli, "_configure_log_level", levels.append)
84
+ monkeypatch.setenv("DOCVORTEX_LOG_LEVEL", "verbose")
85
+
86
+ result = _invoke_classify(CliRunner(), source)
87
+
88
+ assert result.exit_code != 0
89
+ assert "Invalid value" in result.output
90
+ assert levels == []
91
+
92
+
93
+ @pytest.mark.parametrize(
94
+ ("level", "expected"),
95
+ [
96
+ ("info", ("debug hidden", False, "warning shown", True)),
97
+ ("debug", ("debug shown", True, "warning shown", True)),
98
+ ("error", ("warning hidden", False, "error shown", True)),
99
+ ],
100
+ )
101
+ def test_configure_log_level_filters_loguru_output(
102
+ isolated_logger, capsys: pytest.CaptureFixture[str], level: str, expected: tuple[str, bool, str, bool]
103
+ ) -> None:
104
+ """全局日志等级按 loguru 阈值过滤标准错误输出。"""
105
+ cli._configure_log_level(level)
106
+ logger.debug("debug hidden" if level == "info" else "debug shown")
107
+ logger.warning("warning hidden" if level == "error" else "warning shown")
108
+ logger.error("error shown")
109
+
110
+ stderr = capsys.readouterr().err
111
+ debug_message, debug_expected, warning_message, warning_expected = expected
112
+ assert (debug_message in stderr) is debug_expected
113
+ assert (warning_message in stderr) is warning_expected
114
+ assert "error shown" in stderr
115
+
116
+
117
+ def test_importing_cli_preserves_host_loguru_sink() -> None:
118
+ """导入 CLI 模块不重建宿主应用已配置的 loguru sink。"""
119
+ messages: list[str] = []
120
+ handler_id = logger.add(messages.append, level="DEBUG", format="{message}")
121
+ try:
122
+ importlib.reload(cli)
123
+ logger.debug("host sink remains")
124
+ finally:
125
+ logger.remove(handler_id)
126
+
127
+ assert "host sink remains\n" in messages
@@ -0,0 +1,71 @@
1
+ """验证跨库素材导出接口的字节所有权及字面量边界。"""
2
+
3
+ from __future__ import annotations
4
+
5
+ import base64
6
+ from typing import get_type_hints
7
+
8
+ import pytest
9
+
10
+ from docvortex.assets import AssetStore
11
+ from docvortex.export import materialize_middle, validate_materialized_assets
12
+ from docvortex.public_api import PUBLIC_API
13
+ from docvortex.schema import MiddleJson
14
+
15
+
16
+ def test_public_export_preserves_payloads_geometry_and_code() -> None:
17
+ """直接图与表内图外置后字节不变,代码中的同名字面量不被当作素材。"""
18
+ image = b"\xff\xd8\xffexample\xff\xd9"
19
+ uri = "data:image/jpeg;base64," + base64.b64encode(image).decode()
20
+ markup = f'<img src="{uri}" width="10">'
21
+ middle = MiddleJson.from_dict(
22
+ {
23
+ "schema": "docvortex.middle",
24
+ "schema_version": "2.0",
25
+ "is_full_document": False,
26
+ "metadata": {"file_suffix": "pdf", "producer": {"name": "test", "version": "1"}},
27
+ "extensions": {
28
+ "docvortex_layout": {
29
+ "version": 1,
30
+ "pages": [{"page_idx": 4, "width_pt": 400, "height_pt": 600, "image_rotations": {"2": 270}}],
31
+ }
32
+ },
33
+ "pages": [
34
+ {
35
+ "page_idx": 4,
36
+ "blocks": [
37
+ {
38
+ "type": "table",
39
+ "index": 2,
40
+ "bbox": [0.1, 0.1, 0.4, 0.5],
41
+ "content": [{"type": "table_body", "index": 2, "content": markup, "image_base64": uri}],
42
+ },
43
+ {
44
+ "type": "code",
45
+ "sub_type": "code",
46
+ "guess_lang": "html",
47
+ "index": 3,
48
+ "bbox": [0.1, 0.6, 0.9, 0.8],
49
+ "content": [{"type": "code_body", "index": 3, "content": markup}],
50
+ },
51
+ ],
52
+ }
53
+ ],
54
+ }
55
+ )
56
+ before = middle.to_json()
57
+ exported, assets = materialize_middle(middle)
58
+ validate_materialized_assets(exported, assets)
59
+ assert set(assets) == {"images/page_4_table_body_2.jpg", "images/page_4_table_body_2_1.jpg"}
60
+ assert all(payload == image for payload in assets.values())
61
+ assert exported.extensions == middle.extensions
62
+ assert exported.pages[0].blocks[1].content[0].content == markup
63
+ assert middle.to_json() == before
64
+ repeated, copied_assets = materialize_middle(exported, assets)
65
+ assert repeated == exported and dict(copied_assets) == dict(assets)
66
+ assert copied_assets is not assets
67
+ with pytest.raises(ValueError, match="Missing materialized asset"):
68
+ validate_materialized_assets(exported, AssetStore())
69
+ assert set(PUBLIC_API["docvortex.export"]) == {"materialize_middle", "validate_materialized_assets"}
70
+ assert get_type_hints(materialize_middle)["return"] == tuple[MiddleJson, AssetStore]
71
+ assert get_type_hints(validate_materialized_assets)["return"] is type(None)