docvortex 0.4.19__tar.gz → 0.4.20__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 (684) hide show
  1. {docvortex-0.4.19/src/docvortex.egg-info → docvortex-0.4.20}/PKG-INFO +1 -1
  2. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_script_geometry.py +88 -0
  3. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/inline/scripts.py +15 -1
  4. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/version.py +1 -1
  5. {docvortex-0.4.19 → docvortex-0.4.20/src/docvortex.egg-info}/PKG-INFO +1 -1
  6. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex.egg-info/SOURCES.txt +3 -0
  7. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_reviewed_history.json +1 -1
  8. docvortex-0.4.20/tests/fixtures/pdf_numeric_citations_review.json +33 -0
  9. docvortex-0.4.20/tests/test_pdf_numeric_citations.py +187 -0
  10. docvortex-0.4.20/tests/unittest/pdfs/numeric_citations_introduction.pdf +0 -0
  11. {docvortex-0.4.19 → docvortex-0.4.20}/LICENSE.md +0 -0
  12. {docvortex-0.4.19 → docvortex-0.4.20}/MANIFEST.in +0 -0
  13. {docvortex-0.4.19 → docvortex-0.4.20}/README.md +0 -0
  14. {docvortex-0.4.19 → docvortex-0.4.20}/demo/README.md +0 -0
  15. {docvortex-0.4.19 → docvortex-0.4.20}/demo/demo.py +0 -0
  16. {docvortex-0.4.19 → docvortex-0.4.20}/demo/office_docs/README.md +0 -0
  17. {docvortex-0.4.19 → docvortex-0.4.20}/demo/office_docs/docx_01.doc +0 -0
  18. {docvortex-0.4.19 → docvortex-0.4.20}/demo/office_docs/docx_01.docx +0 -0
  19. {docvortex-0.4.19 → docvortex-0.4.20}/demo/office_docs/pptx_01.ppt +0 -0
  20. {docvortex-0.4.19 → docvortex-0.4.20}/demo/office_docs/pptx_01.pptx +0 -0
  21. {docvortex-0.4.19 → docvortex-0.4.20}/demo/office_docs/rtf_01.rtf +0 -0
  22. {docvortex-0.4.19 → docvortex-0.4.20}/demo/office_docs/xlsx_01.xls +0 -0
  23. {docvortex-0.4.19 → docvortex-0.4.20}/demo/office_docs/xlsx_01.xlsx +0 -0
  24. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
  25. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
  26. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/caibao1.pdf +0 -0
  27. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/demo1.pdf +0 -0
  28. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/demo2.pdf +0 -0
  29. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/demo3.pdf +0 -0
  30. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/demo4.pdf +0 -0
  31. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/demo6.pdf +0 -0
  32. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
  33. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
  34. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
  35. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
  36. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs/small_ocr.pdf +0 -0
  37. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
  38. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
  39. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
  40. {docvortex-0.4.19 → docvortex-0.4.20}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
  41. {docvortex-0.4.19 → docvortex-0.4.20}/docs/HTML_PROTOCOL.md +0 -0
  42. {docvortex-0.4.19 → docvortex-0.4.20}/docs/JSON_PROTOCOL.md +0 -0
  43. {docvortex-0.4.19 → docvortex-0.4.20}/docs/METADATA.md +0 -0
  44. {docvortex-0.4.19 → docvortex-0.4.20}/docs/PDF_FONTS.md +0 -0
  45. {docvortex-0.4.19 → docvortex-0.4.20}/docs/RENDER_OWNERSHIP.md +0 -0
  46. {docvortex-0.4.19 → docvortex-0.4.20}/docs/USAGE.md +0 -0
  47. {docvortex-0.4.19 → docvortex-0.4.20}/docs/flash-manual-annotations-2026-09-15.md +0 -0
  48. {docvortex-0.4.19 → docvortex-0.4.20}/docs/flash-round2-annotations-2026-09-15.md +0 -0
  49. {docvortex-0.4.19 → docvortex-0.4.20}/docs/flash-rule-generalization-2026-09-15.md +0 -0
  50. {docvortex-0.4.19 → docvortex-0.4.20}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
  51. {docvortex-0.4.19 → docvortex-0.4.20}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
  52. {docvortex-0.4.19 → docvortex-0.4.20}/docs/flash-title-coverage-2026-09-16.md +0 -0
  53. {docvortex-0.4.19 → docvortex-0.4.20}/docs/sdk-0.4.md +0 -0
  54. {docvortex-0.4.19 → docvortex-0.4.20}/pyproject.toml +0 -0
  55. {docvortex-0.4.19 → docvortex-0.4.20}/schemas/middle-2.0.json +0 -0
  56. {docvortex-0.4.19 → docvortex-0.4.20}/schemas/model-2.0.json +0 -0
  57. {docvortex-0.4.19 → docvortex-0.4.20}/setup.cfg +0 -0
  58. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/__init__.py +0 -0
  59. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/__init__.py +0 -0
  60. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/__init__.py +0 -0
  61. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
  62. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
  63. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/_shared/image.py +0 -0
  64. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
  65. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
  66. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
  67. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
  68. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
  69. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
  70. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/_shared/names.py +0 -0
  71. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
  72. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/contracts.py +0 -0
  73. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/csv.py +0 -0
  74. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
  75. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/epub/constants.py +0 -0
  76. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/epub/converter.py +0 -0
  77. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/epub/errors.py +0 -0
  78. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
  79. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/epub/package.py +0 -0
  80. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/epub/properties.py +0 -0
  81. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
  82. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/html/__init__.py +0 -0
  83. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/html/anchors.py +0 -0
  84. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/html/constants.py +0 -0
  85. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/html/converter.py +0 -0
  86. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/html/document.py +0 -0
  87. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/html/errors.py +0 -0
  88. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/html/metadata.py +0 -0
  89. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/html/resources.py +0 -0
  90. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/html/selector.py +0 -0
  91. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/models.py +0 -0
  92. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
  93. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
  94. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
  95. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
  96. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
  97. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
  98. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/images.py +0 -0
  99. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
  100. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/models.py +0 -0
  101. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/package.py +0 -0
  102. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/path.py +0 -0
  103. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
  104. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
  105. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
  106. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/table.py +0 -0
  107. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/text.py +0 -0
  108. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
  109. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/__init__.py +0 -0
  110. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
  111. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
  112. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
  113. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
  114. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
  115. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
  116. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
  117. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
  118. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
  119. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
  120. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
  121. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
  122. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
  123. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
  124. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
  125. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
  126. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
  127. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
  128. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
  129. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
  130. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
  131. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
  132. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
  133. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
  134. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
  135. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
  136. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
  137. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
  138. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
  139. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
  140. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
  141. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
  142. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
  143. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
  144. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/errors.py +0 -0
  145. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/image.py +0 -0
  146. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
  147. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
  148. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
  149. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
  150. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/limits.py +0 -0
  151. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/metadata.py +0 -0
  152. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
  153. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
  154. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
  155. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
  156. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
  157. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
  158. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
  159. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
  160. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/odf/styles.py +0 -0
  161. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/odf/table.py +0 -0
  162. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/odf/text.py +0 -0
  163. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
  164. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/opc.py +0 -0
  165. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
  166. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
  167. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
  168. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
  169. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
  170. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
  171. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
  172. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
  173. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
  174. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
  175. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
  176. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
  177. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
  178. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
  179. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
  180. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
  181. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
  182. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
  183. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
  184. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
  185. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
  186. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
  187. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
  188. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
  189. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
  190. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
  191. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
  192. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
  193. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/spreadsheet/region_discovery.py +0 -0
  194. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/streams.py +0 -0
  195. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
  196. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
  197. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
  198. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
  199. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
  200. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
  201. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
  202. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
  203. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
  204. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
  205. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
  206. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
  207. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
  208. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
  209. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
  210. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
  211. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
  212. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
  213. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
  214. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
  215. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
  216. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
  217. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
  218. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
  219. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
  220. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
  221. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
  222. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
  223. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
  224. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
  225. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
  226. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
  227. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
  228. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
  229. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
  230. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
  231. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
  232. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
  233. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
  234. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
  235. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
  236. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
  237. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
  238. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
  239. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/models.py +0 -0
  240. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
  241. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
  242. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
  243. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
  244. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
  245. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
  246. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
  247. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
  248. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
  249. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
  250. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
  251. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
  252. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
  253. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
  254. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
  255. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
  256. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
  257. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
  258. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
  259. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
  260. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
  261. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
  262. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
  263. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
  264. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
  265. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
  266. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
  267. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
  268. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
  269. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
  270. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
  271. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
  272. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
  273. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
  274. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
  275. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/analyzers/pdf.py +0 -0
  276. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/api.py +0 -0
  277. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/assets/__init__.py +0 -0
  278. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/assets/images.py +0 -0
  279. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/assets/store.py +0 -0
  280. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/cli.py +0 -0
  281. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/codecs/__init__.py +0 -0
  282. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/codecs/html/__init__.py +0 -0
  283. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/codecs/html/contracts.py +0 -0
  284. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/codecs/html/materializer.py +0 -0
  285. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/codecs/html/parser.py +0 -0
  286. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/codecs/html/resources.py +0 -0
  287. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/codecs/json.py +0 -0
  288. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/__init__.py +0 -0
  289. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/inline.py +0 -0
  290. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/links.py +0 -0
  291. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/markup/__init__.py +0 -0
  292. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/markup/anchors.py +0 -0
  293. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/markup/formula.py +0 -0
  294. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/markup/projector.py +0 -0
  295. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/markup/styles.py +0 -0
  296. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/mathml.py +0 -0
  297. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/normalization.py +0 -0
  298. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/spans.py +0 -0
  299. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/table/__init__.py +0 -0
  300. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/table/blocks.py +0 -0
  301. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/table/content.py +0 -0
  302. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/table/document.py +0 -0
  303. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/table/html.py +0 -0
  304. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/table/models.py +0 -0
  305. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/table/rules.py +0 -0
  306. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/table/structure.py +0 -0
  307. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/text.py +0 -0
  308. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/content/tree.py +0 -0
  309. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/__init__.py +0 -0
  310. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/contracts.py +0 -0
  311. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/detection.py +0 -0
  312. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/filetypes.py +0 -0
  313. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/page_range.py +0 -0
  314. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/__init__.py +0 -0
  315. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/_document.py +0 -0
  316. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/classify.py +0 -0
  317. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/constants.py +0 -0
  318. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/font_runtime.py +0 -0
  319. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/images.py +0 -0
  320. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/layout.py +0 -0
  321. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/metadata.py +0 -0
  322. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/native_annotations.py +0 -0
  323. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/native_contracts.py +0 -0
  324. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/native_coordinates.py +0 -0
  325. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
  326. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/native_objects.py +0 -0
  327. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
  328. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/pdfium.py +0 -0
  329. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/raster.py +0 -0
  330. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/text/__init__.py +0 -0
  331. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/text/_contracts.py +0 -0
  332. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/text/dedup.py +0 -0
  333. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/text/extract.py +0 -0
  334. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/text/geometry.py +0 -0
  335. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/text/groups.py +0 -0
  336. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/pdf/visuals.py +0 -0
  337. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/properties.py +0 -0
  338. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/document/source.py +0 -0
  339. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/errors.py +0 -0
  340. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/export/__init__.py +0 -0
  341. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/export/_images.py +0 -0
  342. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/export/bundle.py +0 -0
  343. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/export/files.py +0 -0
  344. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/export/middle.py +0 -0
  345. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/__init__.py +0 -0
  346. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/_coordinates.py +0 -0
  347. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/_geometry.py +0 -0
  348. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/_hyperlink.py +0 -0
  349. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/_image.py +0 -0
  350. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/_image_operations.py +0 -0
  351. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/_image_payload.py +0 -0
  352. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/_svg_raster.py +0 -0
  353. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/_text.py +0 -0
  354. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/image_encoding.py +0 -0
  355. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/language.py +0 -0
  356. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/type_identity.py +0 -0
  357. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/foundation/xml_names.py +0 -0
  358. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/geometry.py +0 -0
  359. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/metadata.py +0 -0
  360. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/options.py +0 -0
  361. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/postprocess/__init__.py +0 -0
  362. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/postprocess/content.py +0 -0
  363. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/postprocess/document.py +0 -0
  364. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/postprocess/lists.py +0 -0
  365. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/postprocess/page_blocks.py +0 -0
  366. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/postprocess/pages.py +0 -0
  367. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/postprocess/paragraphs.py +0 -0
  368. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/postprocess/visual.py +0 -0
  369. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/public_api.py +0 -0
  370. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/__init__.py +0 -0
  371. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/__init__.py +0 -0
  372. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/common/__init__.py +0 -0
  373. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/common/context.py +0 -0
  374. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/common/html_table.py +0 -0
  375. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/common/index.py +0 -0
  376. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/common/list_items.py +0 -0
  377. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/common/planner.py +0 -0
  378. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/docx/__init__.py +0 -0
  379. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/docx/assets.py +0 -0
  380. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/docx/inline.py +0 -0
  381. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/docx/math.py +0 -0
  382. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/docx/renderer.py +0 -0
  383. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/docx/styles.py +0 -0
  384. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/docx/table.py +0 -0
  385. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/epub/__init__.py +0 -0
  386. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/epub/assets.py +0 -0
  387. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/epub/package.py +0 -0
  388. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/epub/renderer.py +0 -0
  389. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/html/__init__.py +0 -0
  390. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/html/inline.py +0 -0
  391. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/html/renderer.py +0 -0
  392. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
  393. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/html/table.py +0 -0
  394. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/latex/__init__.py +0 -0
  395. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/latex/assets.py +0 -0
  396. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/latex/inline.py +0 -0
  397. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/latex/renderer.py +0 -0
  398. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/latex/table.py +0 -0
  399. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
  400. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/markdown/assets.py +0 -0
  401. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
  402. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
  403. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/markdown/inline.py +0 -0
  404. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
  405. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/markdown/table.py +0 -0
  406. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
  407. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/assets.py +0 -0
  408. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
  409. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
  410. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/formula.py +0 -0
  411. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
  412. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/inline.py +0 -0
  413. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/original.py +0 -0
  414. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
  415. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/paragraph.py +0 -0
  416. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
  417. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/styles.py +0 -0
  418. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/table.py +0 -0
  419. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
  420. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
  421. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
  422. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
  423. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
  424. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/api.py +0 -0
  425. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/contracts.py +0 -0
  426. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/docx.py +0 -0
  427. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/epub.py +0 -0
  428. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/fragments.py +0 -0
  429. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/html.py +0 -0
  430. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/latex.py +0 -0
  431. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/markdown.py +0 -0
  432. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/pdf.py +0 -0
  433. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/render/structured_content.py +0 -0
  434. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/resources/epub/docvortex.css +0 -0
  435. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
  436. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/resources/fonts/NOTICE +0 -0
  437. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/resources/fonts/manifest.json +0 -0
  438. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/resources/html/docvortex.css +0 -0
  439. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/resources/html/docvortex.min.css +0 -0
  440. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
  441. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/result.py +0 -0
  442. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/schema.py +0 -0
  443. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex/visualization.py +0 -0
  444. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex.egg-info/dependency_links.txt +0 -0
  445. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex.egg-info/entry_points.txt +0 -0
  446. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex.egg-info/requires.txt +0 -0
  447. {docvortex-0.4.19 → docvortex-0.4.20}/src/docvortex.egg-info/top_level.txt +0 -0
  448. {docvortex-0.4.19 → docvortex-0.4.20}/tests/benchmarks/flash_pdf.py +0 -0
  449. {docvortex-0.4.19 → docvortex-0.4.20}/tests/benchmarks/native_pdf_table.py +0 -0
  450. {docvortex-0.4.19 → docvortex-0.4.20}/tests/benchmarks/pdf_render.py +0 -0
  451. {docvortex-0.4.19 → docvortex-0.4.20}/tests/benchmarks/pipeline.py +0 -0
  452. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
  453. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_layout_block_expectations.json +0 -0
  454. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
  455. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
  456. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_manual_annotations.json +0 -0
  457. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_manual_review_decisions.json +0 -0
  458. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_round2_annotations.json +0 -0
  459. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_round2_review_decisions.json +0 -0
  460. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_round3_annotations.json +0 -0
  461. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
  462. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_round3_review_decisions.json +0 -0
  463. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
  464. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
  465. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
  466. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
  467. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
  468. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
  469. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/pdf_char_dedup.json +0 -0
  470. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
  471. {docvortex-0.4.19 → docvortex-0.4.20}/tests/fixtures/rtf/semantic.rtf +0 -0
  472. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_architecture.py +0 -0
  473. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_benchmark_entrypoint.py +0 -0
  474. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_brand_protocol.py +0 -0
  475. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_cli_logging.py +0 -0
  476. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_complete_pipeline.py +0 -0
  477. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_converter_lifecycle.py +0 -0
  478. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_document_envelope.py +0 -0
  479. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_document_metadata.py +0 -0
  480. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_export_image_names.py +0 -0
  481. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_format_matrix.py +0 -0
  482. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_geometry_api.py +0 -0
  483. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_history_geometry_tools.py +0 -0
  484. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_html_namespace.py +0 -0
  485. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_mixed_font_script_reference.py +0 -0
  486. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_pdf_analysis_api.py +0 -0
  487. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_pdf_cpu_evidence.py +0 -0
  488. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_pdf_font_geometry.py +0 -0
  489. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_pdf_font_runtime.py +0 -0
  490. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_pdf_model_text_normalization.py +0 -0
  491. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_pdf_output_text.py +0 -0
  492. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_pdf_render_pool.py +0 -0
  493. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_pdf_source_row_merging.py +0 -0
  494. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_pdf_symbol_normalization.py +0 -0
  495. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_public_export_api.py +0 -0
  496. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_public_image_api.py +0 -0
  497. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_public_pipeline.py +0 -0
  498. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_refactor_raster.py +0 -0
  499. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_refactor_rendering.py +0 -0
  500. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_refactor_resources.py +0 -0
  501. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_release_ci_gate.py +0 -0
  502. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_render_ownership.py +0 -0
  503. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_renderer_branding.py +0 -0
  504. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_shared_boundaries.py +0 -0
  505. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_system_font_pdf_pipeline.py +0 -0
  506. {docvortex-0.4.19 → docvortex-0.4.20}/tests/test_validated_geometry.py +0 -0
  507. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
  508. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_epub_test_utils.py +0 -0
  509. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_flash_pdf_test_utils.py +0 -0
  510. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_image_mtef_test_utils.py +0 -0
  511. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_legacy_doc_test_utils.py +0 -0
  512. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
  513. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_legacy_xls_test_utils.py +0 -0
  514. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_metafile_test_utils.py +0 -0
  515. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_mtef_test_utils.py +0 -0
  516. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_mtef_v5_test_utils.py +0 -0
  517. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_native_test_utils.py +0 -0
  518. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_odf_test_utils.py +0 -0
  519. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_ofd_test_utils.py +0 -0
  520. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
  521. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
  522. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/_span_test_utils.py +0 -0
  523. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
  524. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
  525. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
  526. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
  527. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
  528. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
  529. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
  530. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
  531. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
  532. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
  533. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
  534. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
  535. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
  536. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
  537. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
  538. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
  539. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
  540. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
  541. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
  542. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
  543. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
  544. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
  545. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
  546. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
  547. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
  548. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
  549. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
  550. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
  551. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
  552. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/pdfs/test.pdf +0 -0
  553. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_backend_architecture.py +0 -0
  554. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_backend_block_object_regressions.py +0 -0
  555. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_docx_assets.py +0 -0
  556. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_docx_complex_fields.py +0 -0
  557. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_docx_math.py +0 -0
  558. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_docx_render.py +0 -0
  559. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_docx_special_char_tables.py +0 -0
  560. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_docx_table.py +0 -0
  561. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_emfplus_integration.py +0 -0
  562. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_epub_backlinks.py +0 -0
  563. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_epub_quoted_note_types.py +0 -0
  564. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_epub_render.py +0 -0
  565. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
  566. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_csv.py +0 -0
  567. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_docx_equationxml.py +0 -0
  568. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_epub.py +0 -0
  569. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_html.py +0 -0
  570. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_image_mtef.py +0 -0
  571. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
  572. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_legacy_doc.py +0 -0
  573. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
  574. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_legacy_ppt.py +0 -0
  575. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_legacy_xls.py +0 -0
  576. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
  577. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_manual_annotations.py +0 -0
  578. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_markup_anchors.py +0 -0
  579. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_model.py +0 -0
  580. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_mtef_v5.py +0 -0
  581. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_odf.py +0 -0
  582. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_ofd.py +0 -0
  583. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_office_image_mtef.py +0 -0
  584. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_office_metafile.py +0 -0
  585. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_office_models.py +0 -0
  586. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
  587. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
  588. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_office_title_types.py +0 -0
  589. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
  590. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
  591. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
  592. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
  593. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
  594. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
  595. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_extractor.py +0 -0
  596. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_formulas.py +0 -0
  597. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_graphics.py +0 -0
  598. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
  599. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
  600. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
  601. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_native_text.py +0 -0
  602. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
  603. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
  604. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_samples.py +0 -0
  605. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_scripts.py +0 -0
  606. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_semantics.py +0 -0
  607. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_short_tails.py +0 -0
  608. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_tables.py +0 -0
  609. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
  610. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
  611. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_titles.py +0 -0
  612. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
  613. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_round2_annotations.py +0 -0
  614. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_round3_annotations.py +0 -0
  615. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_rtf.py +0 -0
  616. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_rule_generalization.py +0 -0
  617. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_shared_helpers.py +0 -0
  618. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_spatial_evidence.py +0 -0
  619. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
  620. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_guess_suffix_ole2.py +0 -0
  621. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_html_css_build.py +0 -0
  622. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_html_render.py +0 -0
  623. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_html_security.py +0 -0
  624. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
  625. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_latex_render.py +0 -0
  626. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_markdown_render.py +0 -0
  627. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_middle_json_block_models.py +0 -0
  628. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_middle_json_export.py +0 -0
  629. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_middle_json_validator.py +0 -0
  630. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_model_json.py +0 -0
  631. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_native_pdf_table.py +0 -0
  632. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
  633. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
  634. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
  635. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
  636. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
  637. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_ofd_assembly.py +0 -0
  638. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_ofd_vector_tables.py +0 -0
  639. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_office_demo_exports.py +0 -0
  640. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_office_demo_pages.py +0 -0
  641. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_office_parser_regressions.py +0 -0
  642. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_cjk_style.py +0 -0
  643. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
  644. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_classify.py +0 -0
  645. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_demo_links.py +0 -0
  646. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
  647. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_document.py +0 -0
  648. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_formula_layout.py +0 -0
  649. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_object_clipping.py +0 -0
  650. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_original_layout.py +0 -0
  651. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_pagination.py +0 -0
  652. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
  653. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_render.py +0 -0
  654. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
  655. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_structured_tables.py +0 -0
  656. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_table_cache.py +0 -0
  657. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_table_round2.py +0 -0
  658. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_text_dedup.py +0 -0
  659. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_text_styles.py +0 -0
  660. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_title_font_plan.py +0 -0
  661. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_title_space.py +0 -0
  662. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_pdf_visualization.py +0 -0
  663. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_postprocess_page_blocks.py +0 -0
  664. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_postprocess_pages.py +0 -0
  665. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_postprocess_paragraphs.py +0 -0
  666. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_postprocess_visual.py +0 -0
  667. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_render_api.py +0 -0
  668. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_render_html_table.py +0 -0
  669. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_render_image_renderer.py +0 -0
  670. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_render_list_index_utils.py +0 -0
  671. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_structured_content_render.py +0 -0
  672. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_svg_raster.py +0 -0
  673. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_table_merge.py +0 -0
  674. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_table_merge_cell_merge.py +0 -0
  675. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_text_block_anchor.py +0 -0
  676. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_text_boundary_rules.py +0 -0
  677. {docvortex-0.4.19 → docvortex-0.4.20}/tests/unittest/test_text_utils.py +0 -0
  678. {docvortex-0.4.19 → docvortex-0.4.20}/tools/__init__.py +0 -0
  679. {docvortex-0.4.19 → docvortex-0.4.20}/tools/build_html_css.py +0 -0
  680. {docvortex-0.4.19 → docvortex-0.4.20}/tools/calibrate_pdf_geometry.py +0 -0
  681. {docvortex-0.4.19 → docvortex-0.4.20}/tools/capture_baseline.py +0 -0
  682. {docvortex-0.4.19 → docvortex-0.4.20}/tools/capture_platform_layout.py +0 -0
  683. {docvortex-0.4.19 → docvortex-0.4.20}/tools/compare_font_platforms.py +0 -0
  684. {docvortex-0.4.19 → docvortex-0.4.20}/tools/font_geometry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.19
3
+ Version: 0.4.20
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
@@ -30,6 +30,7 @@ SCRIPT_COMPONENT_SEED_MAX_POSITION_DISTANCE = 4
30
30
  SCRIPT_COMPONENT_MIN_OFFSET_RATIO = 0.08
31
31
  SCRIPT_COMPONENT_MAX_HEIGHT_RATIO = 1.1
32
32
  CONTROL_LINE_BREAK_CHARS = {"\r", "\n"}
33
+ _NUMERIC_SCRIPT_SEPARATORS = frozenset({",", ",", "-", "–", "—"})
33
34
 
34
35
  ScriptRole = Literal["body", "sup", "sub"]
35
36
  ScriptMarkRole = Literal["sup", "sub"]
@@ -675,6 +676,91 @@ def paired_script_roles(
675
676
  return paired
676
677
 
677
678
 
679
+ def _numeric_superscript_indices(
680
+ features: list[ScriptCharFeature],
681
+ roles: list[ScriptRole],
682
+ protected_body_indices: set[int],
683
+ ) -> set[int]:
684
+ """用左侧同一视觉行的稳定正文确认完整数字上标,允许中间有排版空白。"""
685
+ accepted: set[int] = set()
686
+ start = 0
687
+ while start < len(features):
688
+ if not features[start].text.isdecimal():
689
+ start += 1
690
+ continue
691
+ end = start + 1
692
+ while end < len(features) and (features[end].text.isdecimal() or features[end].text in _NUMERIC_SCRIPT_SEPARATORS):
693
+ end += 1
694
+ # 尾随标点属于正文,只有数字之间且共享上标基线的分隔符才随引用提升。
695
+ while end > start and not features[end - 1].text.isdecimal():
696
+ end -= 1
697
+ candidate = features[start:end]
698
+ if any(0 <= neighbor < len(features) and features[neighbor].text in {"/", "⁄"} for neighbor in (start - 1, end)):
699
+ # 不能把分式的分子或分母独立当成引用,否则会制造仅半个指数带上标的结果。
700
+ start = end
701
+ continue
702
+ previous = start - 1
703
+ while previous >= 0 and features[previous].text.isspace():
704
+ if features[previous].text in CONTROL_LINE_BREAK_CHARS:
705
+ break
706
+ previous -= 1
707
+ reference_end = previous + 1
708
+ while previous >= 0 and features[previous].is_valid and roles[previous] == "body":
709
+ if previous in protected_body_indices:
710
+ break
711
+ previous -= 1
712
+ reference = list(range(previous + 1, reference_end))
713
+ start = end
714
+ if not reference or any(
715
+ not item.is_valid or item.index in protected_body_indices or roles[item.index] == "sub" for item in candidate
716
+ ):
717
+ continue
718
+ clusters, _ = _cluster_baselines(features, reference)
719
+ body_result = _choose_body_band(features, clusters)
720
+ if body_result is None:
721
+ continue
722
+ band, body_cluster = body_result
723
+ if len(band.member_indices) < 2 or band.tight_height <= 0 or band.loose_height <= 0:
724
+ continue
725
+ edge = features[reference[-1]]
726
+ first = candidate[0]
727
+ assert first.tight_bbox is not None and edge.tight_bbox is not None
728
+ gap = first.tight_bbox[0] - edge.tight_bbox[2]
729
+ if not -0.15 * band.tight_height <= gap <= max(2.5, 1.2 * band.tight_height):
730
+ continue
731
+ digits = [item for item in candidate if item.text.isdecimal()]
732
+ baseline = statistics.median(item.origin[1] for item in digits if item.origin is not None)
733
+ shift = band.baseline - baseline
734
+ if (
735
+ not max(SCRIPT_ORIGIN_MIN_SHIFT_ABSOLUTE, SCRIPT_CONSENSUS_ORIGIN_SHIFT_RATIO * band.tight_height)
736
+ <= shift
737
+ <= (0.8 * band.tight_height)
738
+ ):
739
+ continue
740
+ tolerance = max(SCRIPT_BASELINE_ABSOLUTE_TOLERANCE, SCRIPT_BASELINE_LOOSE_HEIGHT_RATIO * band.loose_height)
741
+ if any(item.origin is None or abs(item.origin[1] - baseline) > tolerance for item in candidate):
742
+ continue
743
+ tight_ratio = max(item.tight_height for item in digits) / band.tight_height
744
+ if tight_ratio > SCRIPT_CONSENSUS_TIGHT_HEIGHT_RATIO:
745
+ # 纯小写词的 x-height 可接近缩小数字;强基线位移还须有 loose 缩小证据,不能仅放宽 tight 阈值。
746
+ loose_ratio = max(item.loose_height for item in digits) / band.loose_height
747
+ if not (
748
+ shift >= SCRIPT_STRONG_SHIFT_RATIO * band.tight_height
749
+ and tight_ratio <= SCRIPT_STRONG_MAX_HEIGHT_RATIO
750
+ and loose_ratio <= SCRIPT_CONSENSUS_TIGHT_HEIGHT_RATIO
751
+ ):
752
+ continue
753
+ digit_cluster = ScriptBaselineCluster(baseline, tuple(item.index for item in digits))
754
+ if (
755
+ _cluster_tight_center(features, digit_cluster) >= _cluster_tight_center(features, body_cluster) - 0.05
756
+ or _cluster_loose_center(features, digit_cluster) >= _cluster_loose_center(features, body_cluster) - 0.05
757
+ ):
758
+ continue
759
+ # 只补样式,不合并组件或移动字符;下一候选也不能把本次提升结果当作正文。
760
+ accepted.update(item.index for item in candidate)
761
+ return accepted
762
+
763
+
678
764
  def classify_char_script_roles(
679
765
  chars: list[Char],
680
766
  *,
@@ -689,6 +775,8 @@ def classify_char_script_roles(
689
775
  roles: list[ScriptRole] = ["body"] * len(features)
690
776
  for component_indices in split_script_visual_components(features):
691
777
  _assign_component(features, component_indices, protected, roles, font_keys)
778
+ for index in _numeric_superscript_indices(features, roles, protected):
779
+ roles[index] = "sup"
692
780
  return roles
693
781
 
694
782
 
@@ -7,7 +7,13 @@ import unicodedata
7
7
  from typing import Any, Literal, Sequence
8
8
 
9
9
  from .....schema import BBox
10
- from .._script_geometry import ScriptRole, classify_char_script_roles, paired_script_roles
10
+ from .._script_geometry import (
11
+ ScriptRole,
12
+ _numeric_superscript_indices,
13
+ build_script_features,
14
+ classify_char_script_roles,
15
+ paired_script_roles,
16
+ )
11
17
  from ..geometry import _rotate_bbox_to_upright
12
18
  from .common import _coerce_bbox, _normalize_match_fragment, _ordered_line_chars
13
19
  from .types import (
@@ -411,6 +417,11 @@ def _refine_math_script_tokens(
411
417
  """以最左稳定簇保护 base,并对弱单字符和复杂未分段 token 保守拒识。"""
412
418
  refined = list(roles)
413
419
  citation_indices = _citation_script_indices(chars, refined)
420
+ numeric_indices: set[int] = set()
421
+ if any(role == "sup" and _script_char_text(char).isdecimal() for char, role in zip(chars, roles)):
422
+ # 数字引用的基字符在 token 外;保护双 bbox/origin 已确认的整串,不能重置首位数字。
423
+ candidates = _numeric_superscript_indices(build_script_features(chars, tight_bboxes, origins, set()), roles, set())
424
+ numeric_indices = {index for index in candidates if roles[index] == "sup"}
414
425
  complex_unsegmented_token = False
415
426
  tokens = _iter_math_script_tokens(chars)
416
427
  token_alnum_positions = {
@@ -443,6 +454,9 @@ def _refine_math_script_tokens(
443
454
  for token in tokens:
444
455
  if any(index in citation_indices for index in token):
445
456
  continue
457
+ if all(index in numeric_indices for index in token):
458
+ # 只跳过纯数字引用的 base 重选,后续分式及复杂数学过滤仍按原规则执行。
459
+ continue
446
460
  token_key = tuple(token)
447
461
  alnum_positions = token_alnum_positions[token_key]
448
462
  if not alnum_positions or not any(refined[index] != "body" for index in token):
@@ -1,3 +1,3 @@
1
- __version__ = "0.4.19"
1
+ __version__ = "0.4.20"
2
2
 
3
3
  __all__ = ["__version__"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docvortex
3
- Version: 0.4.19
3
+ Version: 0.4.20
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
@@ -458,6 +458,7 @@ tests/test_pdf_cpu_evidence.py
458
458
  tests/test_pdf_font_geometry.py
459
459
  tests/test_pdf_font_runtime.py
460
460
  tests/test_pdf_model_text_normalization.py
461
+ tests/test_pdf_numeric_citations.py
461
462
  tests/test_pdf_output_text.py
462
463
  tests/test_pdf_render_pool.py
463
464
  tests/test_pdf_source_row_merging.py
@@ -498,6 +499,7 @@ tests/fixtures/native_pdf_table_demo_manifest.json
498
499
  tests/fixtures/native_pdf_table_script_truth.json
499
500
  tests/fixtures/pdf_char_dedup.json
500
501
  tests/fixtures/pdf_mixed_font_script_line.json
502
+ tests/fixtures/pdf_numeric_citations_review.json
501
503
  tests/fixtures/rtf/semantic.rtf
502
504
  tests/unittest/_docx_equationxml_test_utils.py
503
505
  tests/unittest/_epub_test_utils.py
@@ -643,6 +645,7 @@ tests/unittest/test_text_utils.py
643
645
  tests/unittest/pdfs/flash_table_annotations_synthetic.pdf
644
646
  tests/unittest/pdfs/metabolic_pathway_page_3.pdf
645
647
  tests/unittest/pdfs/native_cjk_layout_synthetic.pdf
648
+ tests/unittest/pdfs/numeric_citations_introduction.pdf
646
649
  tests/unittest/pdfs/test.pdf
647
650
  tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf
648
651
  tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf
@@ -610,7 +610,7 @@
610
610
  },
611
611
  {
612
612
  "page_index": 2,
613
- "fingerprint": "223f8dc3618805a8688095824d638d00348540403923ffddb74ba95a3a1961df",
613
+ "fingerprint": "0dfc82cf2795f0ed939b1c77e7c53c59f0788c28c5f1bef1ae4bd4e8fff8b8c7",
614
614
  "bbox_fingerprint": "c83743f89e12f6984bd9eb20f37303a668c8df982be11f86c9ae4851e035aafe"
615
615
  },
616
616
  {
@@ -0,0 +1,33 @@
1
+ {
2
+ "accepted": [
3
+ {
4
+ "case": "klee-numeric-footnote",
5
+ "source": "demo/pdfs/mixed_elements_pages_07_10.pdf",
6
+ "source_sha256": "89076ee9cce2168ab894ee7e280872f8a3c09053b9dcdeda9c1da76d111adc1e",
7
+ "page": 3,
8
+ "anchor": "symbolic execution tool KLEE 1",
9
+ "before_code_sha256": "be87727e75b972fd5c409c6d6792fb8094443daa5e8a69f8044080d435f261f5",
10
+ "after_code_sha256": "22c18d95daf883ed457012463d5616d209e4c4c6e632815225cc116189f395f5",
11
+ "old_fingerprint": "223f8dc3618805a8688095824d638d00348540403923ffddb74ba95a3a1961df",
12
+ "new_fingerprint": "0dfc82cf2795f0ed939b1c77e7c53c59f0788c28c5f1bef1ae4bd4e8fff8b8c7",
13
+ "decision": "accept_improvement",
14
+ "reason": "原页右栏 KLEE 后的 1 明显抬高且缩小;补为上标,字符、顺序、块型和 bbox 均不变。",
15
+ "baseline_update": "flash_reviewed_history.json: mixed_elements_pages_07_10 page_index=2 fingerprint",
16
+ "evidence": [
17
+ "output/pdf/intro-superscripts-20260920/klee-source.png",
18
+ "output/pdf/intro-superscripts-20260920/klee-public.html",
19
+ "output/pdf/intro-superscripts-20260920/history-final/comparison.html"
20
+ ]
21
+ }
22
+ ],
23
+ "rejected": [
24
+ {
25
+ "source": "mixed_elements_pages_03_06.pdf",
26
+ "pages": [
27
+ 2,
28
+ 3
29
+ ],
30
+ "reason": "拒绝只提升分式指数分子的候选;保留原数学过滤及原基线。"
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,187 @@
1
+ """锁定宽行距论文中空白分隔及多位数字引用的完整上标。"""
2
+
3
+ from copy import deepcopy
4
+ import hashlib
5
+ from pathlib import Path
6
+ from types import SimpleNamespace
7
+
8
+ import pytest
9
+
10
+ from docvortex.analyzers.native.pdf._script_geometry import classify_char_script_roles
11
+ from docvortex.analyzers.native.pdf.geometry import _rotate_bbox_from_upright
12
+ from docvortex.analyzers.native.pdf.inline.scripts import _script_line_char_roles
13
+ from docvortex.analyzers.pdf import prepare_text_evidence
14
+ from docvortex.api import parse
15
+ from docvortex.document.pdf import PDFDocument
16
+ from docvortex.render import render_html, render_markdown
17
+
18
+ SOURCE = Path(__file__).parent / "unittest/pdfs/numeric_citations_introduction.pdf"
19
+ SOURCE_SHA256 = "424512a5c2c3a58c542e05f6692cb0efe3b4009b308b787db7f56806e77a7e18"
20
+ CASES = [
21
+ (0, "worldwide.", ["1,2"]),
22
+ (1, "healthcaresystems.3", ["3"]),
23
+ (1, "2040.", ["4"]),
24
+ (1, "follow-up,", ["5,6"]),
25
+ (1, "productivity,", ["7,8"]),
26
+ (1, "fractures.", ["9,10"]),
27
+ (1, "conditions.", ["11"]),
28
+ (1, "billion.", ["12"]),
29
+ (2, "forAMD,", ["13,14", "15"]),
30
+ (2, "model,", ["16,17", "18,19"]),
31
+ ]
32
+ EXPECTED = [value for _, _, values in CASES for value in values]
33
+
34
+
35
+ @pytest.fixture(scope="module")
36
+ def source_evidence():
37
+ """从冻结的三页原件提取证据,检查样本身份且复用只读结果。"""
38
+ assert hashlib.sha256(SOURCE.read_bytes()).hexdigest() == SOURCE_SHA256
39
+ with PDFDocument(str(SOURCE)) as document:
40
+ assert len(document) == 3
41
+ return [prepare_text_evidence(document[index]) for index in range(3)]
42
+
43
+
44
+ @pytest.mark.parametrize("page,anchor,expected", CASES)
45
+ def test_real_citation_evidence_is_complete(source_evidence, page, anchor, expected):
46
+ """逐个原文锚点验证所有引用及逗号,不以局部字符或总数代替正确性。"""
47
+ matches = [line for line in source_evidence[page].scripts if anchor in line.text]
48
+ assert len(matches) == 1
49
+ line = matches[0]
50
+ assert [(line.text[item.start : item.end], item.style) for item in line.script_ranges] == [
51
+ (value, "superscript") for value in expected
52
+ ]
53
+
54
+
55
+ def test_real_citations_survive_public_export():
56
+ """公开 Model/Middle/HTML/Markdown 都保留十二组完整引用且不提升其他正文。"""
57
+ result = parse(SOURCE, keep_model_json=True)
58
+ for markup in (render_html(result.middle_json), render_markdown(result.middle_json)):
59
+ for value in EXPECTED:
60
+ assert markup.count(f"<sup>{value}</sup>") == 1
61
+ assert markup.count("<sup>") == len(EXPECTED)
62
+ assert "<sub>" not in markup
63
+ for document in (result.model_json.to_dict(), result.middle_json.to_dict()):
64
+ scripts = []
65
+
66
+ def visit(value):
67
+ """递归收集公共协议内的上下标,覆盖嵌套段落且不依赖块编号。"""
68
+ if isinstance(value, dict):
69
+ if set(value.get("styles", [])) & {"superscript", "subscript"}:
70
+ scripts.append((value["content"], value["styles"]))
71
+ for child in value.values():
72
+ visit(child)
73
+ elif isinstance(value, list):
74
+ for child in value:
75
+ visit(child)
76
+
77
+ visit(document)
78
+ assert scripts == [(value, ["superscript"]) for value in EXPECTED]
79
+
80
+
81
+ def _citation_fixture(reference="word.", citation="13,14", separator=" ", shift=-4.0):
82
+ """建立有明确正文参照的双 bbox 字符,引用中的标点保持同一基线。"""
83
+ text = reference + separator + citation + " next"
84
+ start, end = len(reference + separator), len(reference + separator + citation)
85
+ chars, tight, origins = [], {}, {}
86
+ for index, char in enumerate(text):
87
+ scripted = start <= index < end
88
+ x = 20.0 + index * 5.0
89
+ baseline = 60.0 + (shift if scripted else 0)
90
+ height = 6.0 if scripted else 9.0
91
+ box = (x, baseline - height - 3.0, x + 4.0, baseline + 2.0)
92
+ chars.append({"char": char, "char_idx": index, "bbox": box, "font": {"name": "arbitrary"}})
93
+ tight[index] = (x, baseline - height, x + 4.0, baseline)
94
+ origins[index] = (x, baseline)
95
+ return chars, tight, origins, start, end
96
+
97
+
98
+ @pytest.mark.parametrize("citation", ["3", "11", "13,14", "18–20"])
99
+ @pytest.mark.parametrize("separator", ["", " ", "\u00a0"])
100
+ @pytest.mark.parametrize("angle", [0, 90, 180, 270])
101
+ @pytest.mark.parametrize("scale,translation", [(0.75, 0), (1.0, 75), (1.6, 0)])
102
+ def test_numeric_citations_generalize(citation, separator, angle, scale, translation):
103
+ """有无空白、引用长度、字号、平移和旋转均不改变正文及引用角色。"""
104
+ chars, tight, origins, start, end = _citation_fixture(citation=citation, separator=separator)
105
+ size = (800.0, 1000.0)
106
+
107
+ def transform(box):
108
+ """同步变换两类 bbox,保持样式判断不依赖绝对位置。"""
109
+ return _rotate_bbox_from_upright(tuple(v * scale + translation for v in box), size, angle)
110
+
111
+ for char in chars:
112
+ char["bbox"] = transform(char["bbox"])
113
+ char["font"]["name"] = "different-subset" if char["char_idx"] % 2 else "another-font"
114
+ tight = {index: transform(box) for index, box in tight.items()}
115
+ for index, (x, y) in origins.items():
116
+ x, y = x * scale + translation, y * scale + translation
117
+ origins[index] = {0: (x, y), 90: (size[0] - y, x), 180: (size[0] - x, size[1] - y), 270: (y, size[1] - x)}[angle]
118
+ before = deepcopy((chars, tight, origins))
119
+ _, roles, _, _ = _script_line_char_roles(
120
+ SimpleNamespace(chars=chars, angle=angle, inline_math_regions=[]), size, tight, origins, set()
121
+ )
122
+ assert roles == ["sup" if start <= index < end else "body" for index in range(len(chars))]
123
+ assert (chars, tight, origins) == before
124
+
125
+
126
+ @pytest.mark.parametrize("mode", ["same-baseline", "weak", "newline", "column", "row", "missing", "no-anchor"])
127
+ def test_numeric_citation_requires_local_geometry(mode):
128
+ """普通数字、弱偏移、跨行跨栏、缺失证据和孤立数字不可借用正文锚点。"""
129
+ chars, tight, origins, start, end = _citation_fixture(
130
+ reference="1." if mode == "no-anchor" else "word.",
131
+ citation="2021",
132
+ separator="\n" if mode == "newline" else " ",
133
+ shift=0 if mode == "same-baseline" else -0.5 if mode == "weak" else -25 if mode == "row" else -4,
134
+ )
135
+ for index in range(start, end):
136
+ if mode == "missing":
137
+ origins.pop(index)
138
+ elif mode == "column":
139
+ box = chars[index]["bbox"]
140
+ chars[index]["bbox"] = (box[0] + 100, box[1], box[2] + 100, box[3])
141
+ box = tight[index]
142
+ tight[index] = (box[0] + 100, box[1], box[2] + 100, box[3])
143
+ origins[index] = (origins[index][0] + 100, origins[index][1])
144
+ roles = classify_char_script_roles(chars, tight_bboxes=tight, origins=origins)
145
+ assert roles[start:end] == ["body"] * (end - start)
146
+
147
+
148
+ def test_inline_math_retains_its_body_base():
149
+ """数字幂的基数留在正文,不将整个数学 token 强制保护为引用。"""
150
+ chars, tight, origins, start, end = _citation_fixture(reference="10", citation="12", separator="")
151
+ _, roles, _, _ = _script_line_char_roles(
152
+ SimpleNamespace(chars=chars, angle=0, inline_math_regions=[]), (800, 1000), tight, origins, set()
153
+ )
154
+ assert roles[:end] == ["body"] * start + ["sup"] * (end - start)
155
+
156
+
157
+ @pytest.mark.parametrize("scaled_loose", [True, False])
158
+ def test_lowercase_body_requires_complementary_loose_evidence(scaled_loose):
159
+ """正文 x-height 接近数字时,须同时具备强位移及较小 loose 框才能补判。"""
160
+ chars, tight, origins, start, end = _citation_fixture(reference="losses,", citation="18,19")
161
+ for index in range(start):
162
+ box = tight[index]
163
+ tight[index] = (box[0], box[3] - 6, box[2], box[3])
164
+ if not scaled_loose:
165
+ for index in range(start, end):
166
+ x0, _, x1, y1 = chars[index]["bbox"]
167
+ chars[index]["bbox"] = (x0, y1 - 14, x1, y1)
168
+ roles = classify_char_script_roles(chars, tight_bboxes=tight, origins=origins)
169
+ assert roles[start:end] == ["sup" if scaled_loose else "body"] * (end - start)
170
+
171
+
172
+ @pytest.mark.parametrize("reference", ["SK", "σT", "word. "])
173
+ def test_numeric_protection_does_not_bypass_fraction_filter(reference):
174
+ """分式指数仍由原数学过滤处理,不因保护数字而只留下分子上标。"""
175
+ chars, tight, origins, start, end = _citation_fixture(reference=reference, citation="1/2", separator="")
176
+ _, roles, _, _ = _script_line_char_roles(
177
+ SimpleNamespace(chars=chars, angle=0, inline_math_regions=[]), (800, 1000), tight, origins, set()
178
+ )
179
+ assert roles[start:end] == ["body"] * (end - start)
180
+
181
+
182
+ def test_reviewed_klee_footnote_survives_public_export():
183
+ """锁定原页已确认的 KLEE 数字脚注改善,保持后续句号为正文。"""
184
+ source = Path(__file__).parents[1] / "demo/pdfs/mixed_elements_pages_07_10.pdf"
185
+ assert hashlib.sha256(source.read_bytes()).hexdigest() == "89076ee9cce2168ab894ee7e280872f8a3c09053b9dcdeda9c1da76d111adc1e"
186
+ result = parse(source)
187
+ assert "KLEE <sup>1</sup> . KLEE" in render_html(result.middle_json)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes