docvortex 0.4.8__tar.gz → 0.4.10__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.
- {docvortex-0.4.8/src/docvortex.egg-info → docvortex-0.4.10}/PKG-INFO +4 -5
- {docvortex-0.4.8 → docvortex-0.4.10}/README.md +3 -4
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/METADATA.md +1 -1
- {docvortex-0.4.8 → docvortex-0.4.10}/schemas/middle-2.0.json +1 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/schemas/model-2.0.json +1 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/constants.py +2 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/resources.py +40 -2
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/styles.py +7 -3
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/table.py +3 -9
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/text.py +55 -24
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/api.py +1 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/contracts.py +6 -1
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/detection.py +3 -3
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/filetypes.py +2 -1
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/schema.py +1 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/version.py +1 -1
- {docvortex-0.4.8 → docvortex-0.4.10/src/docvortex.egg-info}/PKG-INFO +4 -5
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex.egg-info/SOURCES.txt +0 -1
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_cli_logging.py +1 -1
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_format_matrix.py +4 -2
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_csv.py +44 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_html.py +136 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_odf.py +155 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_office_demo_pages.py +3 -2
- docvortex-0.4.8/src/docvortex/resources/fasttext-langdetect/lid.176.ftz +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/LICENSE.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/MANIFEST.in +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/README.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/demo.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/README.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/docx_01.doc +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/docx_01.docx +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/pptx_01.ppt +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/pptx_01.pptx +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/rtf_01.rtf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/xlsx_01.xls +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/office_docs/xlsx_01.xlsx +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/caibao1.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/demo1.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/demo2.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/demo3.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/demo4.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/demo6.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs/small_ocr.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/HTML_PROTOCOL.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/JSON_PROTOCOL.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/PDF_FONTS.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/RENDER_OWNERSHIP.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/USAGE.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/flash-manual-annotations-2026-09-15.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/flash-round2-annotations-2026-09-15.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/flash-rule-generalization-2026-09-15.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/flash-spatial-layout-followup-2026-09-16.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/flash-spatial-layout-round3-2026-09-16.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/flash-title-coverage-2026-09-16.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/docs/sdk-0.4.md +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/pyproject.toml +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/setup.cfg +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/image.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/names.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/contracts.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/csv.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/constants.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/converter.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/errors.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/package.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/properties.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/anchors.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/converter.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/document.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/errors.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/metadata.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/html/selector.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/models.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/images.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/models.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/package.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/path.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/table.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/text.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/errors.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/image.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/limits.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/metadata.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/opc.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/streams.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/rule_band.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/annotation_bands.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/layout_evidence.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/models.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/continuity.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/text_roles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/compact_titles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/analyzers/pdf.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/assets/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/assets/images.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/assets/store.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/cli.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/html/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/html/contracts.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/html/materializer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/html/parser.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/html/resources.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/codecs/json.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/inline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/links.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/markup/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/markup/anchors.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/markup/formula.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/markup/projector.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/markup/styles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/mathml.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/normalization.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/spans.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/blocks.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/content.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/document.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/html.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/models.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/rules.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/table/structure.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/text.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/content/tree.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/page_range.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/_document.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/classify.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/constants.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/font_runtime.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/images.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/layout.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/metadata.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/native_annotations.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/native_contracts.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/native_coordinates.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/native_objects.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/pdfium.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/raster.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/text/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/text/_contracts.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/text/dedup.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/text/extract.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/text/geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/text/groups.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/pdf/visuals.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/properties.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/document/source.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/errors.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/export/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/export/bundle.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/export/files.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/export/middle.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_coordinates.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_hyperlink.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_image.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_image_operations.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_image_payload.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/_text.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/image_encoding.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/language.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/type_identity.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/foundation/xml_names.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/metadata.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/options.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/content.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/document.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/lists.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/page_blocks.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/pages.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/paragraphs.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/postprocess/visual.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/public_api.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/common/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/common/context.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/common/html_table.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/common/index.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/common/list_items.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/common/planner.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/assets.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/inline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/math.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/renderer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/styles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/docx/table.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/epub/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/epub/assets.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/epub/package.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/epub/renderer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/html/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/html/inline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/html/renderer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/html/table.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/assets.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/inline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/renderer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/latex/table.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/assets.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/inline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/markdown/table.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/assets.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/diagnostics.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/formula.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/formula_layout.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/inline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/original.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/paragraph.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/renderer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/styles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/table.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/table_content.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/table_layout.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/api.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/contracts.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/docx.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/epub.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/fragments.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/html.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/latex.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/markdown.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/pdf.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/render/structured_content.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/epub/docvortex.css +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/fonts/NOTICE +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/fonts/manifest.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/html/docvortex.css +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/html/docvortex.min.css +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/resources/unicode/EquivalentUnifiedIdeograph-17.0.0.txt +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/result.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex/visualization.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex.egg-info/dependency_links.txt +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex.egg-info/entry_points.txt +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex.egg-info/requires.txt +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/src/docvortex.egg-info/top_level.txt +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/benchmarks/flash_pdf.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/benchmarks/native_pdf_table.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/benchmarks/pdf_render.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/benchmarks/pipeline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_layout_block_expectations.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_manual_annotations.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_manual_review_decisions.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_reviewed_history.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_round2_annotations.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_round2_review_decisions.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_round3_annotations.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_round3_followup_review_decisions.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_round3_review_decisions.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_rule_generalization_review_decisions.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/flash_title_coverage_review_decisions.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/pdf_char_dedup.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/fixtures/rtf/semantic.rtf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_architecture.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_benchmark_entrypoint.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_brand_protocol.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_complete_pipeline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_converter_lifecycle.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_document_envelope.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_document_metadata.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_geometry_api.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_history_geometry_tools.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_html_namespace.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_mixed_font_script_reference.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_analysis_api.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_font_geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_font_runtime.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_model_text_normalization.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_output_text.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_render_pool.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_source_row_merging.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_pdf_symbol_normalization.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_public_export_api.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_public_image_api.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_public_pipeline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_refactor_raster.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_refactor_rendering.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_refactor_resources.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_release_ci_gate.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_render_ownership.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_renderer_branding.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_shared_boundaries.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_system_font_pdf_pipeline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/test_validated_geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_epub_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_flash_pdf_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_image_mtef_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_legacy_doc_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_legacy_xls_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_metafile_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_mtef_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_mtef_v5_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_native_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_odf_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_ofd_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/_span_test_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/connexin.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/fornax.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/frames_v1.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/frames_v2.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/k2_treap.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/mmlu_redux.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/nash_review.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/annotated/nougat.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/bloom_form_labels.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/journal_dual_caption.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/journal_layout_tables.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/math_display_formulas.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_layout/quantum_appendix_layout.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/pdfs/test.pdf +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_backend_architecture.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_backend_block_object_regressions.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_docx_assets.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_docx_complex_fields.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_docx_math.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_docx_render.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_docx_special_char_tables.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_docx_table.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_emfplus_integration.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_epub_backlinks.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_epub_quoted_note_types.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_epub_render.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_bbox_grid_comparison.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_docx_equationxml.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_epub.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_image_mtef.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_doc.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_ppt.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_xls.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_manual_annotations.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_markup_anchors.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_model.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_mtef_v5.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_ofd.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_office_image_mtef.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_office_metafile.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_office_models.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_office_title_types.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_extractor.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_formulas.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_graphics.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_layout_repairs.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_native_text.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_reviewed_history.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_samples.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_scripts.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_semantics.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_tables.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_text_visibility.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_titles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_round2_annotations.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_round3_annotations.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_rtf.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_rule_generalization.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_shared_helpers.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_spatial_evidence.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_guess_suffix_ole2.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_html_css_build.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_html_render.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_html_security.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_latex_render.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_markdown_render.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_middle_json_block_models.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_middle_json_export.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_middle_json_validator.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_model_json.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_native_table_performance_equivalence.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_ofd_assembly.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_ofd_vector_tables.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_office_demo_exports.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_office_parser_regressions.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_cjk_style.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_classify.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_demo_links.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_diagnostic_levels.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_document.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_formula_layout.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_object_clipping.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_original_layout.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_pagination.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_paragraph_cache.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_render.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_structured_tables.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_table_cache.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_table_round2.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_text_dedup.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_text_styles.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_title_font_plan.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_title_space.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_pdf_visualization.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_postprocess_page_blocks.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_postprocess_pages.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_postprocess_paragraphs.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_postprocess_visual.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_render_api.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_render_html_table.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_render_image_renderer.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_render_list_index_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_structured_content_render.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_table_merge.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_table_merge_cell_merge.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_text_block_anchor.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_text_boundary_rules.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tests/unittest/test_text_utils.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tools/__init__.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tools/build_html_css.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tools/calibrate_pdf_geometry.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tools/capture_baseline.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tools/capture_platform_layout.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tools/compare_font_platforms.py +0 -0
- {docvortex-0.4.8 → docvortex-0.4.10}/tools/font_geometry.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docvortex
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.10
|
|
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
|
|
@@ -77,13 +77,12 @@ DocVortex is a standalone Python engine for parsing and converting documents.
|
|
|
77
77
|
It reads native text and document structure into a unified representation,
|
|
78
78
|
then exports the result in the formats your workflow needs.
|
|
79
79
|
|
|
80
|
-
- **Multi-format input** — read text PDFs, Office files, OpenDocument files, EPUB, HTML, OFD and
|
|
80
|
+
- **Multi-format input** — read text PDFs, Office files, OpenDocument files, EPUB, HTML, OFD, CSV and TSV.
|
|
81
81
|
- **Parse once, export many times** — reuse the same result for Markdown, HTML, LaTeX, DOCX, EPUB, PDF and structured JSON.
|
|
82
82
|
- **Portable results** — save document structure and image assets in a Bundle, then export again without the source file.
|
|
83
83
|
- **Composable APIs** — use the complete pipeline or integrate analysis, postprocessing and rendering separately.
|
|
84
84
|
|
|
85
|
-
Native parsing works without an OCR or VLM inference service. Use DocVortex
|
|
86
|
-
directly through its CLI or Python SDK, independently of MinerU.
|
|
85
|
+
Native parsing works without an OCR or VLM inference service. Use DocVortex directly through its CLI or Python SDK.
|
|
87
86
|
|
|
88
87
|

|
|
89
88
|
|
|
@@ -135,7 +134,7 @@ use `overwrite=True` in Python or `--overwrite` in the CLI to replace them.
|
|
|
135
134
|
| PDF with native text | PDF |
|
|
136
135
|
| Word & rich text | DOC, DOCX, RTF |
|
|
137
136
|
| Presentations | PPT, PPTX |
|
|
138
|
-
| Spreadsheets | XLS, XLSX, CSV |
|
|
137
|
+
| Spreadsheets | XLS, XLSX, CSV, TSV |
|
|
139
138
|
| OpenDocument | ODT, ODS, ODP |
|
|
140
139
|
| E-books & web documents | EPUB, HTML |
|
|
141
140
|
| Open Fixed-layout Document | OFD |
|
|
@@ -23,13 +23,12 @@ DocVortex is a standalone Python engine for parsing and converting documents.
|
|
|
23
23
|
It reads native text and document structure into a unified representation,
|
|
24
24
|
then exports the result in the formats your workflow needs.
|
|
25
25
|
|
|
26
|
-
- **Multi-format input** — read text PDFs, Office files, OpenDocument files, EPUB, HTML, OFD and
|
|
26
|
+
- **Multi-format input** — read text PDFs, Office files, OpenDocument files, EPUB, HTML, OFD, CSV and TSV.
|
|
27
27
|
- **Parse once, export many times** — reuse the same result for Markdown, HTML, LaTeX, DOCX, EPUB, PDF and structured JSON.
|
|
28
28
|
- **Portable results** — save document structure and image assets in a Bundle, then export again without the source file.
|
|
29
29
|
- **Composable APIs** — use the complete pipeline or integrate analysis, postprocessing and rendering separately.
|
|
30
30
|
|
|
31
|
-
Native parsing works without an OCR or VLM inference service. Use DocVortex
|
|
32
|
-
directly through its CLI or Python SDK, independently of MinerU.
|
|
31
|
+
Native parsing works without an OCR or VLM inference service. Use DocVortex directly through its CLI or Python SDK.
|
|
33
32
|
|
|
34
33
|

|
|
35
34
|
|
|
@@ -81,7 +80,7 @@ use `overwrite=True` in Python or `--overwrite` in the CLI to replace them.
|
|
|
81
80
|
| PDF with native text | PDF |
|
|
82
81
|
| Word & rich text | DOC, DOCX, RTF |
|
|
83
82
|
| Presentations | PPT, PPTX |
|
|
84
|
-
| Spreadsheets | XLS, XLSX, CSV |
|
|
83
|
+
| Spreadsheets | XLS, XLSX, CSV, TSV |
|
|
85
84
|
| OpenDocument | ODT, ODS, ODP |
|
|
86
85
|
| E-books & web documents | EPUB, HTML |
|
|
87
86
|
| Open Fixed-layout Document | OFD |
|
|
@@ -43,7 +43,7 @@ FILETIME values are UTC. Missing or invalid dates are not replaced with filesyst
|
|
|
43
43
|
| EPUB | OPF Dublin Core and recognized meta properties | `spine` |
|
|
44
44
|
| OFD | DocInfo; first nonempty scalar across DocBody entries | `physical`, summed across documents |
|
|
45
45
|
| HTML | title, standard meta, Dublin Core, Open Graph, document language | `logical`, 1 |
|
|
46
|
-
| CSV | no embedded descriptive property convention | `logical`, 1 |
|
|
46
|
+
| CSV / TSV | no embedded descriptive property convention | `logical`, 1 |
|
|
47
47
|
|
|
48
48
|
A declared count may be stale and is not a measured layout. Counts are never inferred from the
|
|
49
49
|
number of pages selected for parsing. Source author strings are not authors inferred from body text.
|
|
@@ -8,6 +8,7 @@ MAX_HTML_NODES: Final = 2_000_000
|
|
|
8
8
|
MAX_HTML_DEPTH: Final = 256
|
|
9
9
|
MAX_HTML_IMAGE_BYTES: Final = 20 * 1024 * 1024
|
|
10
10
|
MAX_HTML_IMAGE_TOTAL_BYTES: Final = 128 * 1024 * 1024
|
|
11
|
+
MAX_REMOTE_IMAGE_FETCH_SECONDS: Final = 10
|
|
11
12
|
MAX_HTML_STYLESHEET_BYTES: Final = 5 * 1024 * 1024
|
|
12
13
|
MAX_HTML_STYLESHEET_TOTAL_BYTES: Final = 20 * 1024 * 1024
|
|
13
14
|
MAX_HTML_RENDERED_BYTES: Final = 256 * 1024 * 1024
|
|
@@ -22,4 +23,5 @@ __all__ = [
|
|
|
22
23
|
"MAX_HTML_RENDERED_BYTES",
|
|
23
24
|
"MAX_HTML_STYLESHEET_BYTES",
|
|
24
25
|
"MAX_HTML_STYLESHEET_TOTAL_BYTES",
|
|
26
|
+
"MAX_REMOTE_IMAGE_FETCH_SECONDS",
|
|
25
27
|
]
|
|
@@ -6,6 +6,7 @@ import base64
|
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from typing import Protocol
|
|
8
8
|
from urllib.parse import SplitResult, unquote, urljoin, urlsplit, urlunsplit
|
|
9
|
+
from urllib.request import urlopen
|
|
9
10
|
|
|
10
11
|
from lxml import etree # type: ignore[reportMissingImports]
|
|
11
12
|
|
|
@@ -19,6 +20,7 @@ from .constants import (
|
|
|
19
20
|
MAX_HTML_IMAGE_TOTAL_BYTES,
|
|
20
21
|
MAX_HTML_STYLESHEET_BYTES,
|
|
21
22
|
MAX_HTML_STYLESHEET_TOTAL_BYTES,
|
|
23
|
+
MAX_REMOTE_IMAGE_FETCH_SECONDS,
|
|
22
24
|
)
|
|
23
25
|
from .errors import HtmlResourceLimitError
|
|
24
26
|
|
|
@@ -65,6 +67,7 @@ class HtmlResourceContext:
|
|
|
65
67
|
self._image_bytes = 0
|
|
66
68
|
self._stylesheet_bytes = 0
|
|
67
69
|
self._image_cache: dict[Path, str] = {}
|
|
70
|
+
self._remote_image_cache: dict[str, str] = {}
|
|
68
71
|
self._data_image_cache: dict[str, ResolvedMarkupImage] = {}
|
|
69
72
|
self._stylesheet_cache: dict[Path, str] = {}
|
|
70
73
|
self._local_root = source_context.local_resource_root.resolve() if source_context.local_resource_root else None
|
|
@@ -157,14 +160,14 @@ class HtmlResourceContext:
|
|
|
157
160
|
return sanitize_hyperlink_target(normalized, allow_relative=True, allow_fragment=True)
|
|
158
161
|
|
|
159
162
|
def resolve_image(self, source: str, *, alt: str = "") -> ResolvedMarkupImage | None:
|
|
160
|
-
"""按 data URI
|
|
163
|
+
"""按 data URI、远程 URL、本地安全文件的顺序解析图片,远程图片仅在来源显式开启下载时内嵌。"""
|
|
161
164
|
normalized = (source or "").strip()
|
|
162
165
|
if not normalized:
|
|
163
166
|
return ResolvedMarkupImage(alt=alt) if alt else None
|
|
164
167
|
if normalized.casefold().startswith("data:"):
|
|
165
168
|
return self._resolve_data_image(normalized, alt=alt)
|
|
166
169
|
if remote_url := self._resolve_remote_image_url(normalized):
|
|
167
|
-
return
|
|
170
|
+
return self._resolve_remote_image(remote_url, alt=alt)
|
|
168
171
|
local_path = self._resolve_local_path(normalized)
|
|
169
172
|
if local_path is None or not local_path.is_file():
|
|
170
173
|
return ResolvedMarkupImage(alt=alt) if alt else None
|
|
@@ -243,6 +246,41 @@ class HtmlResourceContext:
|
|
|
243
246
|
self._data_image_cache[data_uri] = resolved
|
|
244
247
|
return resolved
|
|
245
248
|
|
|
249
|
+
def _resolve_remote_image(self, remote_url: str, *, alt: str) -> ResolvedMarkupImage:
|
|
250
|
+
"""远程图片默认保持外链,来源显式开启下载时按缓存下载内嵌。"""
|
|
251
|
+
if not self.source_context.fetch_remote_images:
|
|
252
|
+
return ResolvedMarkupImage(image_url=remote_url, alt=alt)
|
|
253
|
+
if cached := self._remote_image_cache.get(remote_url):
|
|
254
|
+
return ResolvedMarkupImage(image_base64=cached, alt=alt)
|
|
255
|
+
data_uri = self._fetch_remote_image(remote_url)
|
|
256
|
+
if data_uri is None:
|
|
257
|
+
return ResolvedMarkupImage(image_url=remote_url, alt=alt)
|
|
258
|
+
self._remote_image_cache[remote_url] = data_uri
|
|
259
|
+
return ResolvedMarkupImage(image_base64=data_uri, alt=alt)
|
|
260
|
+
|
|
261
|
+
def _fetch_remote_image(self, remote_url: str) -> str | None:
|
|
262
|
+
"""在单图上限与超时约束内下载远程图片并复核签名,网络失败返回 None 退回外链。"""
|
|
263
|
+
try:
|
|
264
|
+
with urlopen(remote_url, timeout=MAX_REMOTE_IMAGE_FETCH_SECONDS) as response:
|
|
265
|
+
chunks: list[bytes] = []
|
|
266
|
+
remaining = MAX_HTML_IMAGE_BYTES + 1
|
|
267
|
+
while remaining > 0:
|
|
268
|
+
chunk = response.read(remaining)
|
|
269
|
+
if not chunk:
|
|
270
|
+
break
|
|
271
|
+
chunks.append(chunk)
|
|
272
|
+
remaining -= len(chunk)
|
|
273
|
+
except (OSError, ValueError):
|
|
274
|
+
return None
|
|
275
|
+
payload = b"".join(chunks)
|
|
276
|
+
if len(payload) > MAX_HTML_IMAGE_BYTES:
|
|
277
|
+
raise HtmlResourceLimitError(f"HTML image exceeds max_html_image_bytes={MAX_HTML_IMAGE_BYTES}")
|
|
278
|
+
data_uri = _image_data_uri(payload)
|
|
279
|
+
if data_uri is None:
|
|
280
|
+
return None
|
|
281
|
+
self._charge_image_bytes(len(payload))
|
|
282
|
+
return data_uri
|
|
283
|
+
|
|
246
284
|
def _charge_image_bytes(self, byte_count: int) -> None:
|
|
247
285
|
"""累计实际保留的图片字节,并在超限时终止整份文档。"""
|
|
248
286
|
self._image_bytes += byte_count
|
|
@@ -260,11 +260,15 @@ class OdfStyles:
|
|
|
260
260
|
current = definition.parent or ""
|
|
261
261
|
return False
|
|
262
262
|
|
|
263
|
-
def list_level(self, style_name: str | None, depth: int) -> ListLevel:
|
|
264
|
-
"""
|
|
263
|
+
def list_level(self, style_name: str | None, depth: int) -> ListLevel | None:
|
|
264
|
+
"""返回指定列表深度的定义;样式已定义但无任何层级时返回 None(无可见标记)。"""
|
|
265
265
|
if not style_name:
|
|
266
266
|
return ListLevel()
|
|
267
|
-
levels = self._list_styles.get(style_name
|
|
267
|
+
levels = self._list_styles.get(style_name)
|
|
268
|
+
if levels is None:
|
|
269
|
+
return ListLevel()
|
|
270
|
+
if not levels:
|
|
271
|
+
return None
|
|
268
272
|
return levels.get(depth, ListLevel())
|
|
269
273
|
|
|
270
274
|
def table_is_visible(self, style_name: str | None) -> bool:
|
|
@@ -169,7 +169,6 @@ def parse_table_grid(
|
|
|
169
169
|
duplicated_text_bytes = 0
|
|
170
170
|
row_index = 0
|
|
171
171
|
pending_empty_rows = 0
|
|
172
|
-
pending_empty_width = 0
|
|
173
172
|
|
|
174
173
|
def ensure_row(target_row: int, width: int = 0) -> list[GridCell | None]:
|
|
175
174
|
"""在兼容独立表格调用的同时应用可选文档级预留。"""
|
|
@@ -179,7 +178,6 @@ def parse_table_grid(
|
|
|
179
178
|
|
|
180
179
|
for row_element, header in _iter_rows(table):
|
|
181
180
|
row_repeat = _positive_int(row_element.get(qname("table", "number-rows-repeated")))
|
|
182
|
-
_validate_grid_extent(row_index + row_repeat, grid.width)
|
|
183
181
|
cell_templates: list[tuple[bool, int, GridCell | None]] = []
|
|
184
182
|
for cell in row_element:
|
|
185
183
|
if not isinstance(cell.tag, str):
|
|
@@ -219,18 +217,14 @@ def parse_table_grid(
|
|
|
219
217
|
)
|
|
220
218
|
if not row_has_content:
|
|
221
219
|
pending_empty_rows += row_repeat
|
|
222
|
-
pending_empty_width = max(
|
|
223
|
-
pending_empty_width,
|
|
224
|
-
sum(repeat * (template.col_span if template is not None else 1) for _, repeat, template in cell_templates),
|
|
225
|
-
)
|
|
226
220
|
continue
|
|
227
221
|
if pending_empty_rows:
|
|
228
|
-
_validate_grid_extent(row_index + pending_empty_rows,
|
|
222
|
+
_validate_grid_extent(row_index + pending_empty_rows, grid.width)
|
|
229
223
|
for _ in range(pending_empty_rows):
|
|
230
|
-
ensure_row(row_index,
|
|
224
|
+
ensure_row(row_index, grid.width)
|
|
231
225
|
row_index += 1
|
|
232
226
|
pending_empty_rows = 0
|
|
233
|
-
|
|
227
|
+
_validate_grid_extent(row_index + row_repeat, grid.width)
|
|
234
228
|
for _ in range(row_repeat):
|
|
235
229
|
row = ensure_row(row_index)
|
|
236
230
|
col_index = 0
|
|
@@ -453,7 +453,7 @@ class OdfBlockParser:
|
|
|
453
453
|
style_name = element.get(qname("text", "style-name")) or inherited_style
|
|
454
454
|
level = self.styles.list_level(style_name, depth)
|
|
455
455
|
key = (style_name or "", depth)
|
|
456
|
-
start = level.start
|
|
456
|
+
start = level.start if level is not None else 1
|
|
457
457
|
continue_list = element.get(qname("text", "continue-list"))
|
|
458
458
|
if continue_list and continue_list in self._list_ids:
|
|
459
459
|
start = self._list_ids[continue_list]
|
|
@@ -466,17 +466,20 @@ class OdfBlockParser:
|
|
|
466
466
|
active_master: str | None = None
|
|
467
467
|
|
|
468
468
|
def flush_content(fragment_start: int) -> None:
|
|
469
|
-
"""把当前合法子块冻结为一个 LIST
|
|
469
|
+
"""把当前合法子块冻结为一个 LIST 分片;无标记列表按普通段落序列输出。"""
|
|
470
470
|
if content:
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
471
|
+
if level is None:
|
|
472
|
+
results.extend(content)
|
|
473
|
+
else:
|
|
474
|
+
block: dict[str, Any] = {
|
|
475
|
+
"type": BlockType.LIST,
|
|
476
|
+
"attribute": "ordered" if level.ordered else "unordered",
|
|
477
|
+
"ilevel": depth,
|
|
478
|
+
"content": list(content),
|
|
479
|
+
}
|
|
480
|
+
if level.ordered:
|
|
481
|
+
block["start"] = fragment_start
|
|
482
|
+
results.append(block)
|
|
480
483
|
content.clear()
|
|
481
484
|
if fragment_notes:
|
|
482
485
|
results.extend(fragment_notes)
|
|
@@ -875,6 +878,20 @@ class OdfBlockParser:
|
|
|
875
878
|
"""把单元格行内流中的 note marker 排入当前逻辑页队列。"""
|
|
876
879
|
self.notes.extend(atom.content for atom in atoms if isinstance(atom, InlineNote))
|
|
877
880
|
|
|
881
|
+
def _render_cell_paragraph(self, child: etree._Element, parts: list[str]) -> None:
|
|
882
|
+
"""把单元格里的一个裸段落渲染为 <p>,并回收行内块组的单元格子块。"""
|
|
883
|
+
atoms = self.parse_inline_atoms(child)
|
|
884
|
+
self._queue_inline_notes(atoms)
|
|
885
|
+
rendered_atoms = [atom for atom in atoms if not isinstance(atom, InlineImage)] if self._collect_cell_visuals else atoms
|
|
886
|
+
parts.append(f"<p>{render_atoms_to_html(rendered_atoms)}</p>")
|
|
887
|
+
for atom in atoms:
|
|
888
|
+
if isinstance(atom, InlineBlockGroup):
|
|
889
|
+
self._append_cell_blocks(
|
|
890
|
+
parts,
|
|
891
|
+
atom.blocks,
|
|
892
|
+
inline_image_rendered=atom.inline_image_rendered and not self._collect_cell_visuals,
|
|
893
|
+
)
|
|
894
|
+
|
|
878
895
|
def render_cell_html(self, cell: etree._Element) -> str:
|
|
879
896
|
"""把表格单元格中的段落、列表、嵌套表和 frame 转为 HTML。"""
|
|
880
897
|
parts: list[str] = []
|
|
@@ -882,19 +899,7 @@ class OdfBlockParser:
|
|
|
882
899
|
if not isinstance(child.tag, str):
|
|
883
900
|
continue
|
|
884
901
|
if child.tag in {qname("text", "p"), qname("text", "h")}:
|
|
885
|
-
|
|
886
|
-
self._queue_inline_notes(atoms)
|
|
887
|
-
rendered_atoms = (
|
|
888
|
-
[atom for atom in atoms if not isinstance(atom, InlineImage)] if self._collect_cell_visuals else atoms
|
|
889
|
-
)
|
|
890
|
-
parts.append(f"<p>{render_atoms_to_html(rendered_atoms)}</p>")
|
|
891
|
-
for atom in atoms:
|
|
892
|
-
if isinstance(atom, InlineBlockGroup):
|
|
893
|
-
self._append_cell_blocks(
|
|
894
|
-
parts,
|
|
895
|
-
atom.blocks,
|
|
896
|
-
inline_image_rendered=atom.inline_image_rendered and not self._collect_cell_visuals,
|
|
897
|
-
)
|
|
902
|
+
self._render_cell_paragraph(child, parts)
|
|
898
903
|
elif child.tag == qname("text", "list"):
|
|
899
904
|
parts.append(self._render_list_html(child))
|
|
900
905
|
elif child.tag == qname("table", "table"):
|
|
@@ -915,6 +920,8 @@ class OdfBlockParser:
|
|
|
915
920
|
"""把单元格内 ODF 列表递归渲染为 ol/ul HTML。"""
|
|
916
921
|
style_name = element.get(qname("text", "style-name")) or inherited_style
|
|
917
922
|
level = self.styles.list_level(style_name, depth)
|
|
923
|
+
if level is None:
|
|
924
|
+
return self._render_unmarked_list_html(element, depth=depth, inherited_style=style_name)
|
|
918
925
|
tag = "ol" if level.ordered else "ul"
|
|
919
926
|
start = f' start="{level.start}"' if level.ordered and level.start != 1 else ""
|
|
920
927
|
parts = [f"<{tag}{start}>"]
|
|
@@ -940,6 +947,30 @@ class OdfBlockParser:
|
|
|
940
947
|
parts.append(f"</{tag}>")
|
|
941
948
|
return "".join(parts)
|
|
942
949
|
|
|
950
|
+
def _render_unmarked_list_html(
|
|
951
|
+
self,
|
|
952
|
+
element: etree._Element,
|
|
953
|
+
*,
|
|
954
|
+
depth: int,
|
|
955
|
+
inherited_style: str | None,
|
|
956
|
+
) -> str:
|
|
957
|
+
"""把引用空列表样式(无可见标记)的单元格列表按裸段落序列渲染。"""
|
|
958
|
+
parts: list[str] = []
|
|
959
|
+
for item in element:
|
|
960
|
+
if not isinstance(item.tag, str) or item.tag not in {
|
|
961
|
+
qname("text", "list-item"),
|
|
962
|
+
qname("text", "list-header"),
|
|
963
|
+
}:
|
|
964
|
+
continue
|
|
965
|
+
for child in item:
|
|
966
|
+
if not isinstance(child.tag, str):
|
|
967
|
+
continue
|
|
968
|
+
if child.tag in {qname("text", "p"), qname("text", "h")}:
|
|
969
|
+
self._render_cell_paragraph(child, parts)
|
|
970
|
+
elif child.tag == qname("text", "list"):
|
|
971
|
+
parts.append(self._render_list_html(child, depth=depth + 1, inherited_style=inherited_style))
|
|
972
|
+
return "".join(part for part in parts if part)
|
|
973
|
+
|
|
943
974
|
def drain_notes(self) -> list[str]:
|
|
944
975
|
"""取出当前累计脚注并清空共享队列。"""
|
|
945
976
|
values = list(self.notes)
|
|
@@ -8,11 +8,16 @@ from pathlib import Path
|
|
|
8
8
|
|
|
9
9
|
@dataclass(frozen=True, slots=True)
|
|
10
10
|
class HtmlSourceContext:
|
|
11
|
-
"""保存相对链接解析及 HTML 解码所需的来源上下文。
|
|
11
|
+
"""保存相对链接解析及 HTML 解码所需的来源上下文。
|
|
12
|
+
|
|
13
|
+
fetch_remote_images 默认关闭,远程图片仅记录 URL;开启后解析阶段会对受限
|
|
14
|
+
HTTP(S) 图片发起网络请求并内嵌,不可信输入的 SSRF 风险由调用者承担。
|
|
15
|
+
"""
|
|
12
16
|
|
|
13
17
|
source_uri: str | None = None
|
|
14
18
|
local_resource_root: Path | None = None
|
|
15
19
|
transport_encoding: str | None = None
|
|
20
|
+
fetch_remote_images: bool = False
|
|
16
21
|
|
|
17
22
|
|
|
18
23
|
__all__ = ["HtmlSourceContext"]
|
|
@@ -279,13 +279,13 @@ def _has_rtf_signature_by_path(file_path: Path) -> bool:
|
|
|
279
279
|
|
|
280
280
|
|
|
281
281
|
def _resolve_signatureless_csv_suffix(detected_suffix: str, file_path: str | Path | None) -> str:
|
|
282
|
-
"""以 .csv/.tsv
|
|
282
|
+
"""以 .csv/.tsv 扩展名兜底无签名分隔文本:按扩展名返回独立后缀,并保留强内容类型的优先级。"""
|
|
283
283
|
extension = Path(file_path).suffix.lower().lstrip(".") if file_path else ""
|
|
284
284
|
if extension in CSV_EXTENSIONS:
|
|
285
285
|
if detected_suffix in _STRONG_CONTENT_SUFFIXES:
|
|
286
286
|
return detected_suffix
|
|
287
|
-
return
|
|
288
|
-
if detected_suffix
|
|
287
|
+
return extension
|
|
288
|
+
if detected_suffix in ("csv", "tsv"):
|
|
289
289
|
if extension in ODF_MIMETYPE_SUFFIXES.values():
|
|
290
290
|
return "txt"
|
|
291
291
|
return extension or "txt"
|
|
@@ -65,7 +65,8 @@ FILE_TYPE_BY_EXTENSION: dict[str, str] = {
|
|
|
65
65
|
**dict.fromkeys(IMAGE_EXTENSIONS, "image"),
|
|
66
66
|
**{ext: ext for ext in OFFICE_EXTENSIONS},
|
|
67
67
|
**dict.fromkeys(HTML_EXTENSIONS, "html"),
|
|
68
|
-
|
|
68
|
+
"csv": "csv",
|
|
69
|
+
"tsv": "tsv",
|
|
69
70
|
**dict.fromkeys(EPUB_EXTENSIONS, "epub"),
|
|
70
71
|
**dict.fromkeys(OFD_EXTENSIONS, "ofd"),
|
|
71
72
|
"txt": "text",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docvortex
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.10
|
|
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
|
|
@@ -77,13 +77,12 @@ DocVortex is a standalone Python engine for parsing and converting documents.
|
|
|
77
77
|
It reads native text and document structure into a unified representation,
|
|
78
78
|
then exports the result in the formats your workflow needs.
|
|
79
79
|
|
|
80
|
-
- **Multi-format input** — read text PDFs, Office files, OpenDocument files, EPUB, HTML, OFD and
|
|
80
|
+
- **Multi-format input** — read text PDFs, Office files, OpenDocument files, EPUB, HTML, OFD, CSV and TSV.
|
|
81
81
|
- **Parse once, export many times** — reuse the same result for Markdown, HTML, LaTeX, DOCX, EPUB, PDF and structured JSON.
|
|
82
82
|
- **Portable results** — save document structure and image assets in a Bundle, then export again without the source file.
|
|
83
83
|
- **Composable APIs** — use the complete pipeline or integrate analysis, postprocessing and rendering separately.
|
|
84
84
|
|
|
85
|
-
Native parsing works without an OCR or VLM inference service. Use DocVortex
|
|
86
|
-
directly through its CLI or Python SDK, independently of MinerU.
|
|
85
|
+
Native parsing works without an OCR or VLM inference service. Use DocVortex directly through its CLI or Python SDK.
|
|
87
86
|
|
|
88
87
|

|
|
89
88
|
|
|
@@ -135,7 +134,7 @@ use `overwrite=True` in Python or `--overwrite` in the CLI to replace them.
|
|
|
135
134
|
| PDF with native text | PDF |
|
|
136
135
|
| Word & rich text | DOC, DOCX, RTF |
|
|
137
136
|
| Presentations | PPT, PPTX |
|
|
138
|
-
| Spreadsheets | XLS, XLSX, CSV |
|
|
137
|
+
| Spreadsheets | XLS, XLSX, CSV, TSV |
|
|
139
138
|
| OpenDocument | ODT, ODS, ODP |
|
|
140
139
|
| E-books & web documents | EPUB, HTML |
|
|
141
140
|
| Open Fixed-layout Document | OFD |
|
|
@@ -430,7 +430,6 @@ src/docvortex/render/_internal/pdf/title_layout.py
|
|
|
430
430
|
src/docvortex/render/_internal/structured_content/__init__.py
|
|
431
431
|
src/docvortex/render/_internal/structured_content/renderer.py
|
|
432
432
|
src/docvortex/resources/epub/docvortex.css
|
|
433
|
-
src/docvortex/resources/fasttext-langdetect/lid.176.ftz
|
|
434
433
|
src/docvortex/resources/fonts/DroidSansFallbackFull.ttf
|
|
435
434
|
src/docvortex/resources/fonts/NOTICE
|
|
436
435
|
src/docvortex/resources/fonts/manifest.json
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""覆盖全部十六种原生文档输入与七种输出的独立端到端矩阵。"""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
@@ -27,6 +27,8 @@ def source_payload(suffix: str) -> bytes:
|
|
|
27
27
|
return builders[suffix]()
|
|
28
28
|
if suffix == "csv":
|
|
29
29
|
return b"name,value\nalpha,1\nbeta,2\n"
|
|
30
|
+
if suffix == "tsv":
|
|
31
|
+
return b"name\tvalue\nalpha\t1\nbeta\t2\n"
|
|
30
32
|
if suffix == "html":
|
|
31
33
|
return b"<html><h1>Title</h1><p>Native conversion</p></html>"
|
|
32
34
|
if suffix == "pdf":
|
|
@@ -35,7 +37,7 @@ def source_payload(suffix: str) -> bytes:
|
|
|
35
37
|
|
|
36
38
|
|
|
37
39
|
@pytest.mark.parametrize(
|
|
38
|
-
"suffix", ["pdf", "doc", "docx", "ppt", "pptx", "xls", "xlsx", "rtf", "csv", "html", "epub", "ofd", "odt", "ods", "odp"]
|
|
40
|
+
"suffix", ["pdf", "doc", "docx", "ppt", "pptx", "xls", "xlsx", "rtf", "csv", "tsv", "html", "epub", "ofd", "odt", "ods", "odp"]
|
|
39
41
|
)
|
|
40
42
|
def test_all_native_formats_render_all_targets(suffix: str, monkeypatch: pytest.MonkeyPatch) -> None:
|
|
41
43
|
"""每种原生格式完成分析、后处理和七种目标编码,不导入宿主。"""
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import codecs
|
|
4
4
|
from io import BytesIO
|
|
5
|
+
from pathlib import Path
|
|
5
6
|
|
|
6
7
|
import pytest
|
|
7
8
|
from _native_test_utils import analyze_native_test_document
|
|
@@ -9,6 +10,7 @@ from bs4 import BeautifulSoup
|
|
|
9
10
|
|
|
10
11
|
from docvortex.analyzers.native import CsvModel
|
|
11
12
|
from docvortex.analyzers.native import csv as csv_module
|
|
13
|
+
from docvortex.document.detection import guess_suffix_by_bytes, guess_suffix_by_path
|
|
12
14
|
from docvortex.render.html import render_html
|
|
13
15
|
from docvortex.render.markdown import render_markdown
|
|
14
16
|
from docvortex.schema import BlockType
|
|
@@ -169,3 +171,45 @@ def test_csv_default_grid_budget_rejects_wide_dom_before_rendering() -> None:
|
|
|
169
171
|
|
|
170
172
|
with pytest.raises(ValueError, match="max_grid_slots"):
|
|
171
173
|
CsvModel().predict(BytesIO(payload))
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def test_delimited_extension_resolves_to_independent_suffix() -> None:
|
|
177
|
+
"""以 .csv/.tsv 路径兜底时按扩展名返回独立后缀,不再把 tsv 折叠为 csv。"""
|
|
178
|
+
payload = b"name,city\nAlice,London\n"
|
|
179
|
+
|
|
180
|
+
assert guess_suffix_by_bytes(payload, "demo.csv") == "csv"
|
|
181
|
+
assert guess_suffix_by_bytes(payload, "demo.tsv") == "tsv"
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def test_tsv_signatureless_bytes_without_path_require_explicit_suffix() -> None:
|
|
185
|
+
"""无路径字节流不自动进入 tsv 解析,必须显式 file_suffix(与 csv 对称)。"""
|
|
186
|
+
payload = b"name\tcity\nAlice\tLondon\nBob\tParis\n" * 5
|
|
187
|
+
|
|
188
|
+
assert guess_suffix_by_bytes(payload) == "txt"
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def test_strong_content_signature_overrides_tsv_extension_fallback() -> None:
|
|
192
|
+
"""RTF 强内容签名必须覆盖 .tsv 的无签名扩展名兜底。"""
|
|
193
|
+
payload = b"\xef\xbb\xbf \r\n{\\RTF1\\ANSI body}"
|
|
194
|
+
|
|
195
|
+
assert guess_suffix_by_bytes(payload, "disguised.tsv") == "rtf"
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def test_tsv_path_detection_returns_independent_suffix(tmp_path: Path) -> None:
|
|
199
|
+
"""真实 .tsv 路径按独立后缀识别。"""
|
|
200
|
+
tsv_path = tmp_path / "demo.tsv"
|
|
201
|
+
tsv_path.write_bytes("姓名\t年龄\n张三\t30\n李四\t40\n".encode())
|
|
202
|
+
|
|
203
|
+
assert guess_suffix_by_path(tsv_path) == "tsv"
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def test_tsv_uses_shared_csv_engine_and_records_independent_file_suffix() -> None:
|
|
207
|
+
"""tsv 复用 CSV 引擎与自动分隔符嗅探,并如实记录独立 file_suffix。"""
|
|
208
|
+
payload = "姓名\t年龄\n张三\t30\n李四\t40\n".encode()
|
|
209
|
+
middle, _ = analyze_native_test_document(payload, file_suffix="tsv")
|
|
210
|
+
|
|
211
|
+
assert middle.metadata.file_suffix == "tsv"
|
|
212
|
+
assert len(middle.pages) == 1
|
|
213
|
+
markdown = render_markdown(middle)
|
|
214
|
+
assert "张三" in markdown
|
|
215
|
+
assert "30" in markdown
|