docvortex 0.2.6__tar.gz → 0.3.0__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 (590) hide show
  1. {docvortex-0.2.6/src/docvortex.egg-info → docvortex-0.3.0}/PKG-INFO +8 -2
  2. {docvortex-0.2.6 → docvortex-0.3.0}/README.md +7 -0
  3. {docvortex-0.2.6 → docvortex-0.3.0}/pyproject.toml +1 -1
  4. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_materialization.py +1 -9
  5. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_recovery/text.py +0 -1
  6. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/tables.py +0 -3
  7. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +1 -9
  8. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/inline.py +8 -26
  9. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/foundation/language.py +1 -39
  10. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/foundation/text.py +75 -18
  11. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/version.py +1 -1
  12. {docvortex-0.2.6 → docvortex-0.3.0/src/docvortex.egg-info}/PKG-INFO +8 -2
  13. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex.egg-info/SOURCES.txt +1 -0
  14. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex.egg-info/requires.txt +0 -1
  15. {docvortex-0.2.6 → docvortex-0.3.0}/tests/fixtures/flash_layout_geometry_manifest.json +44 -44
  16. {docvortex-0.2.6 → docvortex-0.3.0}/tests/fixtures/native_pdf_table_cross_page_manifest.json +1 -1
  17. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_refactor_rendering.py +3 -12
  18. docvortex-0.3.0/tests/unittest/test_text_boundary_rules.py +65 -0
  19. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_text_utils.py +5 -21
  20. {docvortex-0.2.6 → docvortex-0.3.0}/LICENSE.md +0 -0
  21. {docvortex-0.2.6 → docvortex-0.3.0}/MANIFEST.in +0 -0
  22. {docvortex-0.2.6 → docvortex-0.3.0}/demo/README.md +0 -0
  23. {docvortex-0.2.6 → docvortex-0.3.0}/demo/demo.py +0 -0
  24. {docvortex-0.2.6 → docvortex-0.3.0}/demo/office_docs/README.md +0 -0
  25. {docvortex-0.2.6 → docvortex-0.3.0}/demo/office_docs/docx_01.doc +0 -0
  26. {docvortex-0.2.6 → docvortex-0.3.0}/demo/office_docs/docx_01.docx +0 -0
  27. {docvortex-0.2.6 → docvortex-0.3.0}/demo/office_docs/pptx_01.ppt +0 -0
  28. {docvortex-0.2.6 → docvortex-0.3.0}/demo/office_docs/pptx_01.pptx +0 -0
  29. {docvortex-0.2.6 → docvortex-0.3.0}/demo/office_docs/rtf_01.rtf +0 -0
  30. {docvortex-0.2.6 → docvortex-0.3.0}/demo/office_docs/xlsx_01.xls +0 -0
  31. {docvortex-0.2.6 → docvortex-0.3.0}/demo/office_docs/xlsx_01.xlsx +0 -0
  32. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
  33. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
  34. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/caibao1.pdf +0 -0
  35. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/demo1.pdf +0 -0
  36. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/demo2.pdf +0 -0
  37. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/demo3.pdf +0 -0
  38. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/demo4.pdf +0 -0
  39. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/demo6.pdf +0 -0
  40. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
  41. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
  42. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
  43. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
  44. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs/small_ocr.pdf +0 -0
  45. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
  46. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
  47. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
  48. {docvortex-0.2.6 → docvortex-0.3.0}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
  49. {docvortex-0.2.6 → docvortex-0.3.0}/docs/HTML_PROTOCOL.md +0 -0
  50. {docvortex-0.2.6 → docvortex-0.3.0}/docs/JSON_PROTOCOL.md +0 -0
  51. {docvortex-0.2.6 → docvortex-0.3.0}/docs/METADATA.md +0 -0
  52. {docvortex-0.2.6 → docvortex-0.3.0}/docs/PDF_FONTS.md +0 -0
  53. {docvortex-0.2.6 → docvortex-0.3.0}/docs/RENDER_OWNERSHIP.md +0 -0
  54. {docvortex-0.2.6 → docvortex-0.3.0}/schemas/middle-2.0.json +0 -0
  55. {docvortex-0.2.6 → docvortex-0.3.0}/schemas/model-2.0.json +0 -0
  56. {docvortex-0.2.6 → docvortex-0.3.0}/setup.cfg +0 -0
  57. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/__init__.py +0 -0
  58. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/__init__.py +0 -0
  59. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/__init__.py +0 -0
  60. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
  61. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
  62. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/_shared/image.py +0 -0
  63. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
  64. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
  65. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
  66. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
  67. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
  68. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
  69. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/_shared/names.py +0 -0
  70. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
  71. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/contracts.py +0 -0
  72. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/csv.py +0 -0
  73. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
  74. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/epub/constants.py +0 -0
  75. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/epub/converter.py +0 -0
  76. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/epub/errors.py +0 -0
  77. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
  78. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/epub/package.py +0 -0
  79. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/epub/properties.py +0 -0
  80. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
  81. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/html/__init__.py +0 -0
  82. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/html/anchors.py +0 -0
  83. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/html/constants.py +0 -0
  84. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/html/contracts.py +0 -0
  85. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/html/converter.py +0 -0
  86. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/html/document.py +0 -0
  87. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/html/errors.py +0 -0
  88. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/html/metadata.py +0 -0
  89. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/html/resources.py +0 -0
  90. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/html/selector.py +0 -0
  91. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/models.py +0 -0
  92. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
  93. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
  94. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
  95. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
  96. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
  97. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
  98. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/images.py +0 -0
  99. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
  100. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/models.py +0 -0
  101. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/package.py +0 -0
  102. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/path.py +0 -0
  103. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
  104. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
  105. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
  106. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/table.py +0 -0
  107. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/text.py +0 -0
  108. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
  109. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/__init__.py +0 -0
  110. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
  111. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
  112. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
  113. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
  114. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
  115. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
  116. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
  117. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
  118. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
  119. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
  120. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
  121. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
  122. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
  123. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
  124. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
  125. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
  126. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
  127. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
  128. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
  129. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
  130. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
  131. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
  132. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
  133. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
  134. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
  135. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
  136. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
  137. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
  138. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
  139. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
  140. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
  141. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
  142. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
  143. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
  144. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/errors.py +0 -0
  145. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/image.py +0 -0
  146. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
  147. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
  148. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
  149. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
  150. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/limits.py +0 -0
  151. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/metadata.py +0 -0
  152. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
  153. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
  154. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
  155. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
  156. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
  157. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
  158. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
  159. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
  160. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/odf/styles.py +0 -0
  161. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/odf/table.py +0 -0
  162. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/odf/text.py +0 -0
  163. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
  164. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/opc.py +0 -0
  165. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
  166. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
  167. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
  168. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
  169. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
  170. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
  171. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
  172. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
  173. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
  174. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
  175. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
  176. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
  177. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
  178. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
  179. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
  180. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
  181. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
  182. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
  183. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
  184. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
  185. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
  186. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
  187. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
  188. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
  189. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
  190. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
  191. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
  192. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
  193. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/streams.py +0 -0
  194. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
  195. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
  196. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
  197. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
  198. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
  199. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
  200. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
  201. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
  202. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
  203. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
  204. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
  205. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
  206. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
  207. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
  208. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
  209. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
  210. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
  211. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
  212. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
  213. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
  214. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
  215. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
  216. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
  217. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
  218. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
  219. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
  220. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
  221. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
  222. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
  223. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
  224. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
  225. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/models.py +0 -0
  226. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
  227. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
  228. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/script_geometry.py +0 -0
  229. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/shared.py +0 -0
  230. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
  231. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
  232. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
  233. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
  234. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
  235. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
  236. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_recovery/__init__.py +0 -0
  237. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_recovery/candidate.py +0 -0
  238. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_recovery/contracts.py +0 -0
  239. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_recovery/engine.py +0 -0
  240. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_recovery/geometry.py +0 -0
  241. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_recovery/sparse_common.py +0 -0
  242. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_recovery/sparse_hybrid.py +0 -0
  243. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_recovery/sparse_multiline.py +0 -0
  244. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_recovery/text_grid.py +0 -0
  245. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_recovery/vector.py +0 -0
  246. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
  247. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
  248. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
  249. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
  250. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
  251. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
  252. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
  253. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
  254. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
  255. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
  256. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/text_styles.py +0 -0
  257. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
  258. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
  259. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
  260. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
  261. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
  262. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
  263. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
  264. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
  265. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
  266. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
  267. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
  268. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/api.py +0 -0
  269. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/assets/__init__.py +0 -0
  270. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/assets/store.py +0 -0
  271. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/cli.py +0 -0
  272. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/codecs/__init__.py +0 -0
  273. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/codecs/html/__init__.py +0 -0
  274. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/codecs/html/contracts.py +0 -0
  275. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/codecs/html/materializer.py +0 -0
  276. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/codecs/html/parser.py +0 -0
  277. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/codecs/html/resources.py +0 -0
  278. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/codecs/json.py +0 -0
  279. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/__init__.py +0 -0
  280. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/markup/__init__.py +0 -0
  281. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/markup/anchors.py +0 -0
  282. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/markup/formula.py +0 -0
  283. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/markup/projector.py +0 -0
  284. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/markup/styles.py +0 -0
  285. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/mathml.py +0 -0
  286. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/normalization.py +0 -0
  287. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/spans.py +0 -0
  288. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/table/__init__.py +0 -0
  289. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/table/blocks.py +0 -0
  290. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/table/content.py +0 -0
  291. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/table/document.py +0 -0
  292. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/table/html.py +0 -0
  293. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/table/models.py +0 -0
  294. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/table/rules.py +0 -0
  295. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/table/structure.py +0 -0
  296. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/content/tree.py +0 -0
  297. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/__init__.py +0 -0
  298. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/contracts.py +0 -0
  299. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/detection.py +0 -0
  300. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/filetypes.py +0 -0
  301. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/page_range.py +0 -0
  302. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/__init__.py +0 -0
  303. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/classify.py +0 -0
  304. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/constants.py +0 -0
  305. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/document.py +0 -0
  306. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/font_runtime.py +0 -0
  307. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/geometry.py +0 -0
  308. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/images.py +0 -0
  309. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/metadata.py +0 -0
  310. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/native_annotations.py +0 -0
  311. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/native_contracts.py +0 -0
  312. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/native_coordinates.py +0 -0
  313. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
  314. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/native_objects.py +0 -0
  315. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
  316. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/pdfium.py +0 -0
  317. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/raster.py +0 -0
  318. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/text/__init__.py +0 -0
  319. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/text/contracts.py +0 -0
  320. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/text/extract.py +0 -0
  321. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/text/geometry.py +0 -0
  322. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/text/groups.py +0 -0
  323. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/visual_geometry.py +0 -0
  324. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/pdf/visuals.py +0 -0
  325. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/properties.py +0 -0
  326. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/document/source.py +0 -0
  327. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/errors.py +0 -0
  328. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/export/__init__.py +0 -0
  329. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/export/bundle.py +0 -0
  330. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/export/files.py +0 -0
  331. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/export/middle.py +0 -0
  332. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/foundation/__init__.py +0 -0
  333. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/foundation/geometry.py +0 -0
  334. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/foundation/hyperlink.py +0 -0
  335. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/foundation/image.py +0 -0
  336. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/foundation/image_encoding.py +0 -0
  337. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/foundation/image_payload.py +0 -0
  338. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/foundation/platform.py +0 -0
  339. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/foundation/type_identity.py +0 -0
  340. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/foundation/xml_names.py +0 -0
  341. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/metadata.py +0 -0
  342. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/options.py +0 -0
  343. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/postprocess/__init__.py +0 -0
  344. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/postprocess/content.py +0 -0
  345. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/postprocess/document.py +0 -0
  346. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/postprocess/lists.py +0 -0
  347. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/postprocess/page_blocks.py +0 -0
  348. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/postprocess/pages.py +0 -0
  349. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/postprocess/paragraphs.py +0 -0
  350. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/postprocess/visual.py +0 -0
  351. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/__init__.py +0 -0
  352. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/__init__.py +0 -0
  353. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/common/__init__.py +0 -0
  354. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/common/context.py +0 -0
  355. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/common/html_table.py +0 -0
  356. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/common/index.py +0 -0
  357. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/common/list_items.py +0 -0
  358. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/common/planner.py +0 -0
  359. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/docx/__init__.py +0 -0
  360. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/docx/assets.py +0 -0
  361. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/docx/inline.py +0 -0
  362. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/docx/math.py +0 -0
  363. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/docx/renderer.py +0 -0
  364. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/docx/styles.py +0 -0
  365. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/docx/table.py +0 -0
  366. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/epub/__init__.py +0 -0
  367. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/epub/assets.py +0 -0
  368. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/epub/package.py +0 -0
  369. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/epub/renderer.py +0 -0
  370. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/html/__init__.py +0 -0
  371. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/html/inline.py +0 -0
  372. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/html/renderer.py +0 -0
  373. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
  374. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/html/table.py +0 -0
  375. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/latex/__init__.py +0 -0
  376. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/latex/assets.py +0 -0
  377. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/latex/inline.py +0 -0
  378. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/latex/renderer.py +0 -0
  379. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/latex/table.py +0 -0
  380. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
  381. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/markdown/assets.py +0 -0
  382. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
  383. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
  384. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/markdown/inline.py +0 -0
  385. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
  386. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/markdown/table.py +0 -0
  387. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
  388. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/pdf/assets.py +0 -0
  389. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/pdf/formula.py +0 -0
  390. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/pdf/inline.py +0 -0
  391. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
  392. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/pdf/styles.py +0 -0
  393. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/pdf/table.py +0 -0
  394. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
  395. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
  396. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/api.py +0 -0
  397. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/contracts.py +0 -0
  398. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/docx.py +0 -0
  399. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/epub.py +0 -0
  400. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/fragments.py +0 -0
  401. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/html.py +0 -0
  402. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/latex.py +0 -0
  403. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/markdown.py +0 -0
  404. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/pdf.py +0 -0
  405. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/render/structured_content.py +0 -0
  406. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/resources/epub/docvortex.css +0 -0
  407. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/resources/fasttext-langdetect/lid.176.ftz +0 -0
  408. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
  409. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/resources/fonts/NOTICE +0 -0
  410. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/resources/fonts/manifest.json +0 -0
  411. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/resources/html/docvortex.css +0 -0
  412. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/resources/html/docvortex.min.css +0 -0
  413. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/result.py +0 -0
  414. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/schema.py +0 -0
  415. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex/visualization.py +0 -0
  416. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex.egg-info/dependency_links.txt +0 -0
  417. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex.egg-info/entry_points.txt +0 -0
  418. {docvortex-0.2.6 → docvortex-0.3.0}/src/docvortex.egg-info/top_level.txt +0 -0
  419. {docvortex-0.2.6 → docvortex-0.3.0}/tests/benchmarks/flash_pdf.py +0 -0
  420. {docvortex-0.2.6 → docvortex-0.3.0}/tests/benchmarks/pipeline.py +0 -0
  421. {docvortex-0.2.6 → docvortex-0.3.0}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
  422. {docvortex-0.2.6 → docvortex-0.3.0}/tests/fixtures/flash_layout_block_expectations.json +0 -0
  423. {docvortex-0.2.6 → docvortex-0.3.0}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
  424. {docvortex-0.2.6 → docvortex-0.3.0}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
  425. {docvortex-0.2.6 → docvortex-0.3.0}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
  426. {docvortex-0.2.6 → docvortex-0.3.0}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
  427. {docvortex-0.2.6 → docvortex-0.3.0}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
  428. {docvortex-0.2.6 → docvortex-0.3.0}/tests/fixtures/rtf/semantic.rtf +0 -0
  429. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_architecture.py +0 -0
  430. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_benchmark_entrypoint.py +0 -0
  431. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_brand_protocol.py +0 -0
  432. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_complete_pipeline.py +0 -0
  433. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_converter_lifecycle.py +0 -0
  434. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_document_envelope.py +0 -0
  435. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_document_metadata.py +0 -0
  436. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_format_matrix.py +0 -0
  437. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_html_namespace.py +0 -0
  438. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_mixed_font_script_reference.py +0 -0
  439. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_pdf_font_geometry.py +0 -0
  440. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_pdf_font_runtime.py +0 -0
  441. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_pdf_model_text_normalization.py +0 -0
  442. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_pdf_output_text.py +0 -0
  443. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_pdf_render_pool.py +0 -0
  444. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_pdf_source_row_merging.py +0 -0
  445. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_pdf_symbol_normalization.py +0 -0
  446. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_public_image_api.py +0 -0
  447. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_public_pipeline.py +0 -0
  448. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_refactor_raster.py +0 -0
  449. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_refactor_resources.py +0 -0
  450. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_render_ownership.py +0 -0
  451. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_renderer_branding.py +0 -0
  452. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_shared_boundaries.py +0 -0
  453. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_system_font_pdf_pipeline.py +0 -0
  454. {docvortex-0.2.6 → docvortex-0.3.0}/tests/test_validated_geometry.py +0 -0
  455. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
  456. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_epub_test_utils.py +0 -0
  457. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_flash_pdf_test_utils.py +0 -0
  458. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_image_mtef_test_utils.py +0 -0
  459. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_legacy_doc_test_utils.py +0 -0
  460. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
  461. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_legacy_xls_test_utils.py +0 -0
  462. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_metafile_test_utils.py +0 -0
  463. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_mtef_test_utils.py +0 -0
  464. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_mtef_v5_test_utils.py +0 -0
  465. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_native_test_utils.py +0 -0
  466. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_odf_test_utils.py +0 -0
  467. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_ofd_test_utils.py +0 -0
  468. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
  469. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
  470. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/_span_test_utils.py +0 -0
  471. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
  472. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
  473. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
  474. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
  475. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
  476. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
  477. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
  478. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
  479. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
  480. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
  481. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
  482. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
  483. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
  484. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
  485. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
  486. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
  487. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/pdfs/test.pdf +0 -0
  488. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_backend_architecture.py +0 -0
  489. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_backend_block_object_regressions.py +0 -0
  490. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_docx_assets.py +0 -0
  491. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_docx_complex_fields.py +0 -0
  492. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_docx_math.py +0 -0
  493. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_docx_render.py +0 -0
  494. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_docx_special_char_tables.py +0 -0
  495. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_docx_table.py +0 -0
  496. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_emfplus_integration.py +0 -0
  497. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_epub_backlinks.py +0 -0
  498. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_epub_quoted_note_types.py +0 -0
  499. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_epub_render.py +0 -0
  500. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_csv.py +0 -0
  501. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_docx_equationxml.py +0 -0
  502. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_epub.py +0 -0
  503. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_html.py +0 -0
  504. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_image_mtef.py +0 -0
  505. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
  506. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_legacy_doc.py +0 -0
  507. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
  508. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_legacy_ppt.py +0 -0
  509. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_legacy_xls.py +0 -0
  510. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
  511. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_markup_anchors.py +0 -0
  512. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_model.py +0 -0
  513. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_mtef_v5.py +0 -0
  514. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_odf.py +0 -0
  515. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_ofd.py +0 -0
  516. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_office_image_mtef.py +0 -0
  517. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_office_metafile.py +0 -0
  518. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_office_models.py +0 -0
  519. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
  520. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
  521. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_office_title_types.py +0 -0
  522. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
  523. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
  524. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
  525. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
  526. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
  527. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_extractor.py +0 -0
  528. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_formulas.py +0 -0
  529. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_graphics.py +0 -0
  530. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
  531. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
  532. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_native_text.py +0 -0
  533. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
  534. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_samples.py +0 -0
  535. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_scripts.py +0 -0
  536. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_semantics.py +0 -0
  537. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_tables.py +0 -0
  538. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
  539. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_titles.py +0 -0
  540. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
  541. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_rtf.py +0 -0
  542. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_shared_helpers.py +0 -0
  543. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
  544. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_guess_suffix_ole2.py +0 -0
  545. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_html_css_build.py +0 -0
  546. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_html_render.py +0 -0
  547. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_html_security.py +0 -0
  548. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
  549. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_latex_render.py +0 -0
  550. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_markdown_render.py +0 -0
  551. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_middle_json_block_models.py +0 -0
  552. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_middle_json_export.py +0 -0
  553. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_middle_json_validator.py +0 -0
  554. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_model_json.py +0 -0
  555. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_native_pdf_table.py +0 -0
  556. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
  557. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
  558. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
  559. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
  560. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_ofd_assembly.py +0 -0
  561. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_ofd_vector_tables.py +0 -0
  562. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_office_demo_exports.py +0 -0
  563. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_office_demo_pages.py +0 -0
  564. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_office_parser_regressions.py +0 -0
  565. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_pdf_classify.py +0 -0
  566. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_pdf_demo_links.py +0 -0
  567. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_pdf_document.py +0 -0
  568. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_pdf_render.py +0 -0
  569. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
  570. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_pdf_text_styles.py +0 -0
  571. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_pdf_visualization.py +0 -0
  572. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_postprocess_page_blocks.py +0 -0
  573. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_postprocess_pages.py +0 -0
  574. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_postprocess_paragraphs.py +0 -0
  575. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_postprocess_visual.py +0 -0
  576. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_render_api.py +0 -0
  577. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_render_html_table.py +0 -0
  578. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_render_image_renderer.py +0 -0
  579. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_render_list_index_utils.py +0 -0
  580. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_structured_content_render.py +0 -0
  581. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_table_merge.py +0 -0
  582. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_table_merge_cell_merge.py +0 -0
  583. {docvortex-0.2.6 → docvortex-0.3.0}/tests/unittest/test_text_block_anchor.py +0 -0
  584. {docvortex-0.2.6 → docvortex-0.3.0}/tools/__init__.py +0 -0
  585. {docvortex-0.2.6 → docvortex-0.3.0}/tools/build_html_css.py +0 -0
  586. {docvortex-0.2.6 → docvortex-0.3.0}/tools/calibrate_pdf_geometry.py +0 -0
  587. {docvortex-0.2.6 → docvortex-0.3.0}/tools/capture_baseline.py +0 -0
  588. {docvortex-0.2.6 → docvortex-0.3.0}/tools/capture_platform_layout.py +0 -0
  589. {docvortex-0.2.6 → docvortex-0.3.0}/tools/compare_font_platforms.py +0 -0
  590. {docvortex-0.2.6 → docvortex-0.3.0}/tools/font_geometry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.2.6
3
+ Version: 0.3.0
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
@@ -38,7 +38,6 @@ Requires-Dist: mathml2omml==0.0.2
38
38
  Requires-Dist: resvg_py<0.6,>=0.5.0
39
39
  Requires-Dist: reportlab
40
40
  Requires-Dist: ziamath<0.14,>=0.13
41
- Requires-Dist: fast-langdetect<0.3.0,>=0.2.3
42
41
  Requires-Dist: magika<1.1.0,>=0.6.2
43
42
  Requires-Dist: opencv-python>=4.11.0.86
44
43
  Provides-Extra: test
@@ -209,3 +208,10 @@ print(inspection.metadata.document.authors)
209
208
  All 15 native document formats support this API. Normal parsing also carries these properties in
210
209
  `metadata.document`, preserving the original PDF properties across page selections. See the
211
210
  [field definitions, format matrix, and compatibility notes](docs/METADATA.md).
211
+
212
+
213
+ ### Python 3.14 and text joining (0.3.0)
214
+
215
+ DocVortex supports ordinary CPython 3.10–3.14. Physical text lines are joined by deterministic Unicode boundary rules, with URL and dehyphenation safeguards. Language detection models and the fast-langdetect / fasttext-predict dependencies are no longer required.
216
+
217
+ The shared `resolve_text_line_boundary` and `merge_text_line_contents` helpers no longer accept `block_language`; `detect_lang` has been removed. Hosts should call the shared boundary helpers directly. OCR language selection and Magika code-language recognition are unchanged.
@@ -155,3 +155,10 @@ print(inspection.metadata.document.authors)
155
155
  All 15 native document formats support this API. Normal parsing also carries these properties in
156
156
  `metadata.document`, preserving the original PDF properties across page selections. See the
157
157
  [field definitions, format matrix, and compatibility notes](docs/METADATA.md).
158
+
159
+
160
+ ### Python 3.14 and text joining (0.3.0)
161
+
162
+ DocVortex supports ordinary CPython 3.10–3.14. Physical text lines are joined by deterministic Unicode boundary rules, with URL and dehyphenation safeguards. Language detection models and the fast-langdetect / fasttext-predict dependencies are no longer required.
163
+
164
+ The shared `resolve_text_line_boundary` and `merge_text_line_contents` helpers no longer accept `block_language`; `detect_lang` has been removed. Hosts should call the shared boundary helpers directly. OCR language selection and Magika code-language recognition are unchanged.
@@ -27,7 +27,7 @@ dependencies = [
27
27
  "mammoth>=1.11.0,<2", "openpyxl>=3.1.5,<4", "olefile>=0.47,<1",
28
28
  "pylatexenc>=2.10,<3", "latex2mathml>=3.81.0,<4", "mathml2omml==0.0.2",
29
29
  "resvg_py>=0.5.0,<0.6",
30
- "reportlab", "ziamath>=0.13,<0.14", "fast-langdetect>=0.2.3,<0.3.0",
30
+ "reportlab", "ziamath>=0.13,<0.14",
31
31
  "magika>=0.6.2,<1.1.0", "opencv-python>=4.11.0.86",
32
32
  ]
33
33
 
@@ -16,7 +16,6 @@ from .table_text_styles import render_native_table_html_with_scripts
16
16
  from ....foundation.text import merge_text_line_contents
17
17
  from .spatial_text import project_pdf_table_text
18
18
  from ....schema import BBox
19
- from ....foundation.language import detect_lang
20
19
  from .models import _LineItem, _PageSource, _TableAnnotation, _TableCandidate
21
20
  from .geometry import (
22
21
  _bbox_axis_overlap_ratio,
@@ -320,14 +319,7 @@ def _merge_table_annotation_content(line_texts: list[str]) -> str:
320
319
  normalized_lines = [normalized for text in line_texts if (normalized := _normalize_native_run_text(str(text or "")))]
321
320
  if not normalized_lines:
322
321
  return ""
323
- try:
324
- block_language = detect_lang("".join(normalized_lines))
325
- except Exception:
326
- block_language = ""
327
- return merge_text_line_contents(
328
- normalized_lines,
329
- block_language=block_language,
330
- )
322
+ return merge_text_line_contents(normalized_lines)
331
323
 
332
324
 
333
325
  def _table_body_materialization_bbox(
@@ -234,7 +234,6 @@ def _cell_row_separator(
234
234
 
235
235
  _processed_previous, separator = resolve_text_line_boundary(
236
236
  accumulated_content,
237
- block_language="en",
238
237
  next_content=next_line,
239
238
  )
240
239
  if separator != " ":
@@ -107,9 +107,6 @@ from ....schema import (
107
107
  from ....document.pdf.document import (
108
108
  PDFPathInfo as PDFPathInfo,
109
109
  )
110
- from ....foundation.language import (
111
- detect_lang as detect_lang,
112
- )
113
110
  from .models import (
114
111
  _Fragment as _Fragment,
115
112
  _LineItem as _LineItem,
@@ -5,7 +5,6 @@ from __future__ import annotations
5
5
  import re
6
6
  from typing import Any, Sequence
7
7
 
8
- from .....foundation.language import detect_lang
9
8
  from .....foundation.text import merge_text_line_contents
10
9
  from ..geometry import _bbox_axis_overlap_ratio, _bbox_center_y, _bbox_union_many
11
10
  from ..native_text import _normalize_native_run_text
@@ -437,14 +436,7 @@ def _merge_text_line_content(line_texts: Sequence[str]) -> str:
437
436
  normalized_lines = [text for text in normalized_lines if text]
438
437
  if not normalized_lines:
439
438
  return ""
440
- try:
441
- block_language = detect_lang("".join(normalized_lines))
442
- except Exception:
443
- block_language = ""
444
- return merge_text_line_contents(
445
- normalized_lines,
446
- block_language=block_language,
447
- )
439
+ return merge_text_line_contents(normalized_lines)
448
440
 
449
441
 
450
442
  __all__ = [
@@ -2,15 +2,12 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import re
6
5
  from copy import deepcopy
7
6
  from typing import Callable, Iterable
8
7
 
9
8
  from ..schema import CodeInlineSpan, EquationInlineSpan, HyperlinkSpan, InlineSpan, TextSpan, parse_inline_spans
10
- from ..foundation.language import detect_lang
11
- from ..foundation.text import CJK_LANGS, resolve_text_line_boundary
12
-
13
- _CJK_RE = re.compile(r"[\u3040-\u30ff\u3400-\u9fff\uac00-\ud7af]")
9
+ from ..foundation.text import resolve_text_line_boundary
10
+ from ..foundation.language import remove_invalid_surrogates
14
11
 
15
12
 
16
13
  def normalize_inline_spans(spans: Iterable[InlineSpan | dict[str, object]]) -> list[InlineSpan]:
@@ -63,7 +60,7 @@ def join_inline_spans(contents: Iterable[Iterable[InlineSpan]]) -> list[InlineSp
63
60
  """按物理段落边界规则合并多组 Span,并保持结构化语义。"""
64
61
  merged: list[InlineSpan] = []
65
62
  for content in contents:
66
- current = normalize_inline_spans(list(content))
63
+ current = map_text_span_content(list(content), remove_invalid_surrogates)
67
64
  if not current:
68
65
  continue
69
66
  # 边界裁剪最多清空最后一个根节点;保留其前驱以重新合并新相邻的 Span。
@@ -138,7 +135,7 @@ def map_text_span_content(spans: Iterable[InlineSpan], transform: Callable[[str]
138
135
 
139
136
 
140
137
  def _join_inline_span_sequences(previous: list[InlineSpan], current: list[InlineSpan]) -> None:
141
- """在两组 Span 之间应用语言相关的换行拼接规则。"""
138
+ """按两组 Span 的可见边界拼接,只修改可写文本叶子,保留公式和代码。"""
142
139
  previous_visible = inline_plain_text(previous).rstrip()
143
140
  current_visible = inline_plain_text(current).lstrip()
144
141
  if not previous_visible or not current_visible:
@@ -151,30 +148,15 @@ def _join_inline_span_sequences(previous: list[InlineSpan], current: list[Inline
151
148
  if first_text is not None:
152
149
  object.__setattr__(first_text, "content", first_text.content.lstrip())
153
150
 
154
- language = _detect_boundary_language(f"{previous_visible}{current_visible}")
151
+ processed, separator = resolve_text_line_boundary(previous_visible, next_content=current_visible)
155
152
  if last_text is not None:
156
- processed, separator = resolve_text_line_boundary(
157
- last_text.content,
158
- block_language=language,
159
- next_content=current_visible,
160
- )
161
- object.__setattr__(last_text, "content", processed)
162
- else:
163
- separator = "" if language in CJK_LANGS else " "
153
+ # 共享规则最多删除一个行末断词符;不能把整个可见投影写回单一叶子。
154
+ if processed == previous_visible[:-1] and last_text.content.endswith(previous_visible[-1]):
155
+ object.__setattr__(last_text, "content", last_text.content[:-1])
164
156
  if separator:
165
157
  previous.append(TextSpan(type="text", content=separator))
166
158
 
167
159
 
168
- def _detect_boundary_language(content: str) -> str:
169
- """检测段落边界语言,短 CJK 文本优先使用字符范围兜底。"""
170
- if _CJK_RE.search(content):
171
- return "zh"
172
- try:
173
- return detect_lang(content)
174
- except Exception:
175
- return ""
176
-
177
-
178
160
  def _first_text_span(spans: list[InlineSpan]) -> TextSpan | None:
179
161
  """返回首个可见叶子为文字时对应的 TextSpan。"""
180
162
  for span in spans:
@@ -1,43 +1,14 @@
1
- import os
2
1
  import re
3
- import unicodedata
4
2
 
5
3
  DEFAULT_CODE_LANGUAGE = "txt"
6
4
  _INVALID_SURROGATES = re.compile("[\ud800-\udfff]")
7
5
 
8
6
 
9
- def _detect_language(text: str) -> object:
10
- """首次检测时配置本地模型缓存并惰性加载语言识别器。"""
11
- from fast_langdetect import detect_language
12
-
13
- return detect_language(text, low_memory=True)
14
-
15
-
16
7
  def remove_invalid_surrogates(text: str) -> str:
17
8
  """等价移除代理码点;常见合法 Unicode 文本无需逐字符 Python 扫描。"""
18
9
  return _INVALID_SURROGATES.sub("", text)
19
10
 
20
11
 
21
- def detect_lang(text: str) -> str:
22
- if len(text) == 0:
23
- return ""
24
-
25
- text = text.replace("\n", "")
26
- text = remove_invalid_surrogates(text)
27
-
28
- try:
29
- lang_upper = _detect_language(text)
30
- except Exception:
31
- html_no_ctrl_chars = "".join([c for c in text if unicodedata.category(c)[0] not in ["C"]])
32
- lang_upper = _detect_language(html_no_ctrl_chars)
33
-
34
- try:
35
- lang = lang_upper.lower()
36
- except Exception:
37
- lang = ""
38
- return lang
39
-
40
-
41
12
  def _normalize_text_for_language_guess(code: str) -> str:
42
13
  """移除孤立代理字符并还原合法代理对,供代码语言识别使用。"""
43
14
  if not code:
@@ -80,13 +51,4 @@ def guess_code_language(code: str) -> str:
80
51
  return lang if lang != "unknown" else DEFAULT_CODE_LANGUAGE
81
52
 
82
53
 
83
- if __name__ == "__main__":
84
- print(os.getenv("FTLANG_CACHE"))
85
- print(detect_lang("This is a test."))
86
- print(detect_lang("<html>This is a test</html>"))
87
- print(detect_lang("这个是中文测试。"))
88
- print(detect_lang("<html>这个是中文测试。</html>"))
89
- print(detect_lang("〖\ud835\udc46\ud835〗这是个包含utf-16的中文测试"))
90
-
91
-
92
- __all__ = ["DEFAULT_CODE_LANGUAGE", "detect_lang", "guess_code_language", "remove_invalid_surrogates"]
54
+ __all__ = ["DEFAULT_CODE_LANGUAGE", "guess_code_language", "remove_invalid_surrogates"]
@@ -1,10 +1,33 @@
1
1
  """跨模型共享的文本字符规范化与换行连接规则。"""
2
2
 
3
3
  import re
4
+ import unicodedata
4
5
  from collections.abc import Sequence
5
6
 
6
- # 中日韩文本的物理换行通常不需要插入额外空格,集中定义以供各后端和渲染器共享。
7
- CJK_LANGS = frozenset({"zh", "ja", "ko"})
7
+ from .language import remove_invalid_surrogates
8
+
9
+ # 使用固定码点区间覆盖扩展汉字、假名和中日标点,避免不同 Python 的 Unicode 版本改变结果。
10
+ _UNSPACED_RANGES = (
11
+ (0x3000, 0x303F),
12
+ (0x3040, 0x30FF),
13
+ (0x31F0, 0x31FF),
14
+ (0x3400, 0x4DBF),
15
+ (0x4E00, 0x9FFF),
16
+ (0xF900, 0xFAFF),
17
+ (0xFF61, 0xFF9F),
18
+ (0x1AFF0, 0x1AFFF),
19
+ (0x1B000, 0x1B16F),
20
+ (0x20000, 0x2EE5F),
21
+ (0x2F800, 0x2FA1F),
22
+ (0x30000, 0x323AF),
23
+ )
24
+ _CJK_PUNCTUATION = frozenset(",。!?;:、()【】《》〈〉「」『』〔〕[]{}")
25
+ _CLOSING_PUNCTUATION = frozenset(",.;:!?%")
26
+ # 明确的复合词前缀与连接词只用于保守保留硬连字符,不承担语言识别或词典分词。
27
+ _COMPOUND_PREFIXES = frozenset({"open", "non", "self", "cross", "anti", "pre", "post", "co", "semi", "multi", "quasi"})
28
+ _COMPOUND_CONNECTORS = frozenset({"of", "the", "to", "and", "in", "for", "on", "by", "with"})
29
+ # 只投影已有的行内样式标记,不把任意 HTML 或公式解析为可改写内容。
30
+ _INLINE_STYLE_TAG_RE = re.compile(r"</?(?:sup|sub|b|strong|i|em|u|s|del|strike)\b[^>]*>", re.IGNORECASE)
8
31
 
9
32
  # PDF 文本抽取时,英文跨行断词可能被编码为多种 hyphen 字符。
10
33
  # 这里只用于判断“行末英文断词符”,不要扩展到 en/em dash 等普通破折号。
@@ -45,48 +68,82 @@ def _url_spans_line_boundary(previous_content: str, next_content: str) -> bool:
45
68
  def resolve_text_line_boundary(
46
69
  previous_content: str,
47
70
  *,
48
- block_language: str,
49
71
  next_content: str,
50
72
  ) -> tuple[str, str]:
51
73
  """返回处理后的上一行内容和本次物理行边界分隔符。
52
74
 
53
75
  严格横跨边界的 URL 候选直接连接,但下一行自身为完整 URL 时保留空格。
54
- 其余 CJK 文本直接连接物理行,普通西文行插入一个空格。西文行末如果是
55
- 合法的 hyphen,则始终直接连接下一行,并仅在下一行以小写字母开头时删除
56
- hyphen。
76
+ 按当前可见边界判断空格,不检测整段语言。汉字和假名直接连接,韩文与
77
+ 西文保留词间空格;既定 URL 和英文断词规则优先,且只改写真实的行末断词符。
57
78
  """
58
- processed_content = previous_content.rstrip()
79
+ processed_content = remove_invalid_surrogates(previous_content).rstrip()
59
80
  if not processed_content:
60
81
  return "", ""
61
- stripped_next = next_content.lstrip()
82
+ stripped_next = remove_invalid_surrogates(next_content).lstrip()
83
+ if not stripped_next:
84
+ return processed_content, ""
62
85
  if _url_spans_line_boundary(processed_content, stripped_next):
63
86
  if _URL_AT_LINE_START_RE.match(stripped_next):
64
87
  return processed_content, " "
65
88
  return processed_content, ""
66
- if block_language in CJK_LANGS:
89
+ if is_hyphen_at_line_end(processed_content):
90
+ previous_word = re.search(r"([A-Za-z]+)[-\u00ad\u2010\u2011\u2043]$", processed_content)
91
+ # GLGE-difficult 等缩写复合词的连接符有语义,不能当作普通断词符删除。
92
+ acronym = previous_word is not None and len(previous_word[1]) > 1 and previous_word[1].isupper()
93
+ hard_compound = (
94
+ previous_word is not None
95
+ and processed_content.endswith("-")
96
+ and (
97
+ previous_word[1].lower() in _COMPOUND_PREFIXES
98
+ or (
99
+ previous_word[1].lower() in _COMPOUND_CONNECTORS
100
+ and previous_word.start() > 0
101
+ and processed_content[previous_word.start() - 1] == "-"
102
+ )
103
+ )
104
+ )
105
+ if stripped_next[0].islower() and not acronym and not hard_compound:
106
+ return processed_content[:-1], ""
107
+ return processed_content, ""
108
+ if re.search(r"\d[-–]$", processed_content) and stripped_next[0].isdigit():
109
+ return processed_content, ""
110
+ previous_char = _boundary_character(processed_content, from_end=True)
111
+ next_char = _boundary_character(stripped_next, from_end=False)
112
+ if not previous_char or not next_char:
113
+ return processed_content, ""
114
+ if _is_unspaced_character(previous_char) or _is_unspaced_character(next_char):
67
115
  return processed_content, ""
68
- if not is_hyphen_at_line_end(processed_content):
69
- return processed_content, " "
70
- if stripped_next and stripped_next[0].islower():
71
- return processed_content[:-1], ""
72
- return processed_content, ""
116
+ if unicodedata.category(previous_char) in {"Ps", "Pi"}:
117
+ return processed_content, ""
118
+ if unicodedata.category(next_char) in {"Pe", "Pf"} or next_char in _CLOSING_PUNCTUATION:
119
+ return processed_content, ""
120
+ return processed_content, " "
121
+
122
+
123
+ def _boundary_character(content: str, *, from_end: bool) -> str:
124
+ """读取可见边界字符,忽略样式标记及附着的组合字符,不改写原始正文。"""
125
+ visible = _INLINE_STYLE_TAG_RE.sub("", content).strip()
126
+ characters = reversed(visible) if from_end else iter(visible)
127
+ return next((char for char in characters if unicodedata.category(char)[0] not in {"M", "C"}), "")
128
+
129
+
130
+ def _is_unspaced_character(char: str) -> bool:
131
+ """判断汉字、假名及中日标点,韩文字母不属于无空格文字。"""
132
+ return char in _CJK_PUNCTUATION or any(start <= ord(char) <= end for start, end in _UNSPACED_RANGES)
73
133
 
74
134
 
75
135
  def merge_text_line_contents(
76
136
  line_contents: Sequence[str],
77
- *,
78
- block_language: str,
79
137
  ) -> str:
80
138
  """按累计文本上下文折叠物理行,支持跨越三行以上的 URL 连续拼接。"""
81
139
 
82
- normalized_lines = [str(content) for content in line_contents if str(content)]
140
+ normalized_lines = [cleaned for content in line_contents if (cleaned := remove_invalid_surrogates(str(content)).strip())]
83
141
  if not normalized_lines:
84
142
  return ""
85
143
  merged_content = normalized_lines[0]
86
144
  for current_line in normalized_lines[1:]:
87
145
  merged_content, separator = resolve_text_line_boundary(
88
146
  merged_content,
89
- block_language=block_language,
90
147
  next_content=current_line,
91
148
  )
92
149
  merged_content = f"{merged_content}{separator}{current_line}"
@@ -1,3 +1,3 @@
1
- __version__ = "0.2.6"
1
+ __version__ = "0.3.0"
2
2
 
3
3
  __all__ = ["__version__"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.2.6
3
+ Version: 0.3.0
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
@@ -38,7 +38,6 @@ Requires-Dist: mathml2omml==0.0.2
38
38
  Requires-Dist: resvg_py<0.6,>=0.5.0
39
39
  Requires-Dist: reportlab
40
40
  Requires-Dist: ziamath<0.14,>=0.13
41
- Requires-Dist: fast-langdetect<0.3.0,>=0.2.3
42
41
  Requires-Dist: magika<1.1.0,>=0.6.2
43
42
  Requires-Dist: opencv-python>=4.11.0.86
44
43
  Provides-Extra: test
@@ -209,3 +208,10 @@ print(inspection.metadata.document.authors)
209
208
  All 15 native document formats support this API. Normal parsing also carries these properties in
210
209
  `metadata.document`, preserving the original PDF properties across page selections. See the
211
210
  [field definitions, format matrix, and compatibility notes](docs/METADATA.md).
211
+
212
+
213
+ ### Python 3.14 and text joining (0.3.0)
214
+
215
+ DocVortex supports ordinary CPython 3.10–3.14. Physical text lines are joined by deterministic Unicode boundary rules, with URL and dehyphenation safeguards. Language detection models and the fast-langdetect / fasttext-predict dependencies are no longer required.
216
+
217
+ The shared `resolve_text_line_boundary` and `merge_text_line_contents` helpers no longer accept `block_language`; `detect_lang` has been removed. Hosts should call the shared boundary helpers directly. OCR language selection and Magika code-language recognition are unchanged.
@@ -560,6 +560,7 @@ tests/unittest/test_structured_content_render.py
560
560
  tests/unittest/test_table_merge.py
561
561
  tests/unittest/test_table_merge_cell_merge.py
562
562
  tests/unittest/test_text_block_anchor.py
563
+ tests/unittest/test_text_boundary_rules.py
563
564
  tests/unittest/test_text_utils.py
564
565
  tests/unittest/pdfs/flash_table_annotations_synthetic.pdf
565
566
  tests/unittest/pdfs/metabolic_pathway_page_3.pdf
@@ -22,7 +22,6 @@ mathml2omml==0.0.2
22
22
  resvg_py<0.6,>=0.5.0
23
23
  reportlab
24
24
  ziamath<0.14,>=0.13
25
- fast-langdetect<0.3.0,>=0.2.3
26
25
  magika<1.1.0,>=0.6.2
27
26
  opencv-python>=4.11.0.86
28
27