docvortex 0.4.2__tar.gz → 0.4.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {docvortex-0.4.2/src/docvortex.egg-info → docvortex-0.4.4}/PKG-INFO +4 -1
- {docvortex-0.4.2 → docvortex-0.4.4}/README.md +2 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/docs/USAGE.md +14 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/docs/sdk-0.4.md +6 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/pyproject.toml +1 -1
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/cli.py +22 -2
- docvortex-0.4.4/src/docvortex/export/__init__.py +5 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/export/middle.py +5 -1
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/public_api.py +1 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/diagnostics.py +3 -2
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/formula.py +1 -1
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/inline.py +2 -2
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/original.py +14 -10
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/renderer.py +10 -10
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/version.py +1 -1
- {docvortex-0.4.2 → docvortex-0.4.4/src/docvortex.egg-info}/PKG-INFO +4 -1
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex.egg-info/SOURCES.txt +3 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex.egg-info/requires.txt +1 -0
- docvortex-0.4.4/tests/test_cli_logging.py +127 -0
- docvortex-0.4.4/tests/test_public_export_api.py +71 -0
- docvortex-0.4.4/tests/unittest/test_pdf_diagnostic_levels.py +48 -0
- docvortex-0.4.2/src/docvortex/foundation/__init__.py +0 -3
- {docvortex-0.4.2 → docvortex-0.4.4}/LICENSE.md +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/MANIFEST.in +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/README.md +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/demo.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/README.md +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/docx_01.doc +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/docx_01.docx +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/pptx_01.ppt +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/pptx_01.pptx +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/rtf_01.rtf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/xlsx_01.xls +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/office_docs/xlsx_01.xlsx +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/2407.00079v4_origi-10.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/IEBM_A_2667169_O-5.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/caibao1.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/demo1.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/demo2.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/demo3.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/demo4.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/demo6.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/mixed_elements_pages_03_06.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/mixed_elements_pages_07_10.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/mixed_elements_pages_11_15.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/mixed_elements_pages_39_40.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs/small_ocr.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/207.pdf" +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2072.pdf" +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2073.pdf" +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/demo/pdfs//344/270/255/346/226/207/350/256/272/346/226/2074.pdf" +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/docs/HTML_PROTOCOL.md +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/docs/JSON_PROTOCOL.md +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/docs/METADATA.md +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/docs/PDF_FONTS.md +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/docs/RENDER_OWNERSHIP.md +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/schemas/middle-2.0.json +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/schemas/model-2.0.json +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/setup.cfg +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/hyperlink.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/image.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/markup/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/markup/anchors.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/markup/formula.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/markup/projector.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/markup/styles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/mathml.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/names.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/_shared/xycut.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/contracts.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/csv.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/constants.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/converter.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/errors.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/metadata.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/package.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/properties.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/epub/xhtml.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/anchors.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/constants.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/converter.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/document.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/errors.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/metadata.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/resources.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/html/selector.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/models.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/assembly.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/constants.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/converter.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/errors.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/images.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/metadata.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/models.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/package.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/path.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/reading_order.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/resources.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/scene.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/table.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/ofd/vector.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/bookmarks.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/doc_converter.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/fib.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/fields.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/formatting.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/images.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/lists.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/models.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/parser.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/pieces.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/records.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/sprm.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/doc/styles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/context.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/docx_converter.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/equationxml.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/fields.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/formatting_types.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/main.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/numbering.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/office_xml.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/package_normalizer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/resources.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/styles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/docx/tables.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/image.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/latex_dict.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/mtef.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/mtef_v5.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/omml.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/equation/ooxml.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/errors.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/image.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/legacy/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/legacy/binary.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/legacy/officeart.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/legacy/ole.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/limits.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/metadata.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/chart.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/constants.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/converters.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/errors.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/metadata.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/models.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/package.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/styles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/table.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/odf/text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ooxml_chart.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/opc.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ppt/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ppt/models.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ppt/parser.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ppt/ppt_converter.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ppt/records.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/ppt/style_text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/context.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/lists.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/main.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/package_normalizer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/pptx_converter.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/resources.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/shapes.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/text_styles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/pptx/titles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rich_text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/converter.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/lexer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/math.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/metadata.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/models.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/rtf/parser.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/spreadsheet/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/spreadsheet/html.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/spreadsheet/models.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/spreadsheet/projector.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/streams.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/chart.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/embedded_chart.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/models.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/number_format.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/parser.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/records.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/strings.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xls/xls_converter.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xlsx/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xlsx/main.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xlsx/ooxml_ole.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xlsx/package_normalizer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/office/xlsx/xlsx_converter.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_script_geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/candidate.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/contracts.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/engine.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_common.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_hybrid.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/sparse_multiline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/text_grid.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/_table_recovery/vector.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/auxiliary_text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/char_geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/code_blocks.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/formulas.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/graphics.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/index_blocks.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/common.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/detection.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/matching.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/materialize.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/scripts.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/inline/types.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/line_layout.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/line_merging.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/models.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/native_text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/pipeline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/spatial_text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_annotations.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_constants.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_detection.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_filled_grid.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_materialization.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_rows.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_rules.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/table_text_styles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/tables.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/annotations.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/assembly.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/common.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/footnotes.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/merging.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_assembly/rows.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/text_blocks.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/body_profile.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/common.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/document_profile.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/lane_titles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/page_titles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/prototype.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/title_analysis/structural.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/titles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/typography.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/native/pdf/visual_annotations.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/analyzers/pdf.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/api.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/assets/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/assets/images.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/assets/store.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/html/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/html/contracts.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/html/materializer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/html/parser.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/html/resources.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/codecs/json.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/inline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/links.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/markup/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/markup/anchors.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/markup/formula.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/markup/projector.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/markup/styles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/mathml.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/normalization.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/spans.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/blocks.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/content.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/document.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/html.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/models.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/rules.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/table/structure.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/content/tree.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/contracts.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/detection.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/filetypes.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/page_range.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/_document.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/classify.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/constants.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/font_runtime.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/images.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/layout.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/metadata.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/native_annotations.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/native_contracts.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/native_coordinates.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/native_lifecycle.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/native_objects.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/native_text_geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/pdfium.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/raster.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/text/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/text/_contracts.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/text/extract.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/text/geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/text/groups.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/pdf/visuals.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/properties.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/document/source.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/errors.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/export/bundle.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/export/files.py +0 -0
- {docvortex-0.4.2/src/docvortex/export → docvortex-0.4.4/src/docvortex/foundation}/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_coordinates.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_hyperlink.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_image.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_image_operations.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_image_payload.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/_text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/image_encoding.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/language.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/type_identity.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/foundation/xml_names.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/metadata.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/options.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/content.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/document.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/lists.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/page_blocks.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/pages.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/paragraphs.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/postprocess/visual.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/common/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/common/context.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/common/html_table.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/common/index.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/common/list_items.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/common/planner.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/assets.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/inline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/math.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/renderer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/styles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/docx/table.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/epub/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/epub/assets.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/epub/package.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/epub/renderer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/html/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/html/inline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/html/renderer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/html/sanitizer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/html/table.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/latex/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/latex/assets.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/latex/inline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/latex/renderer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/latex/table.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/assets.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/blocks.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/escaping.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/inline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/renderer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/markdown/table.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/assets.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/font_plan.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/pagination.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/styles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/table.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/pdf/title_layout.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/structured_content/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/_internal/structured_content/renderer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/api.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/contracts.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/docx.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/epub.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/fragments.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/html.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/latex.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/markdown.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/pdf.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/render/structured_content.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/epub/docvortex.css +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/fasttext-langdetect/lid.176.ftz +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/fonts/DroidSansFallbackFull.ttf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/fonts/NOTICE +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/fonts/manifest.json +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/html/docvortex.css +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/resources/html/docvortex.min.css +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/result.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/schema.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex/visualization.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex.egg-info/dependency_links.txt +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex.egg-info/entry_points.txt +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/src/docvortex.egg-info/top_level.txt +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/benchmarks/flash_pdf.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/benchmarks/pipeline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/evaluate_native_pdf_table_manifest.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/flash_layout_block_expectations.json +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/flash_layout_geometry_manifest.json +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/flash_layout_semantic_expectations.json +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/generate_synthetic_pdf_fixtures.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/native_pdf_table_cross_page_manifest.json +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/native_pdf_table_demo_manifest.json +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/native_pdf_table_script_truth.json +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/pdf_mixed_font_script_line.json +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/fixtures/rtf/semantic.rtf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_architecture.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_benchmark_entrypoint.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_brand_protocol.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_complete_pipeline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_converter_lifecycle.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_document_envelope.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_document_metadata.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_format_matrix.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_geometry_api.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_html_namespace.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_mixed_font_script_reference.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_analysis_api.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_font_geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_font_runtime.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_model_text_normalization.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_output_text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_render_pool.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_source_row_merging.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_pdf_symbol_normalization.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_public_image_api.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_public_pipeline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_refactor_raster.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_refactor_rendering.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_refactor_resources.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_render_ownership.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_renderer_branding.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_shared_boundaries.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_system_font_pdf_pipeline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/test_validated_geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_docx_equationxml_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_epub_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_flash_pdf_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_image_mtef_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_legacy_doc_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_legacy_ppt_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_legacy_xls_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_metafile_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_mtef_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_mtef_v5_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_native_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_odf_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_ofd_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_office_image_mtef_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_ooxml_mtef_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/_span_test_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/flash_layout/mixed_text_layout_sample.pdf.xor +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/flash_table_annotations_synthetic.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/metabolic_pathway_page_3.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_cjk_layout_synthetic.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/annual_report_fundraising_projects_table.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/annual_report_management_roles_table.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/annual_report_research_projects_table.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/conference_schedule_tables.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/engineering_process_restrictions_table.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/fund_asset_and_transaction_tables.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/fund_manager_profile_table.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/manufacturing_facilities_cross_page_table.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/pollutant_discharge_tables.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/procurement_contract_tables.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/procurement_document_blank_page_tables.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/native_pdf_tables/quarterly_report_financial_tables.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/pdfs/test.pdf +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_backend_architecture.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_backend_block_object_regressions.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_docx_assets.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_docx_complex_fields.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_docx_math.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_docx_render.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_docx_special_char_tables.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_docx_table.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_emfplus_integration.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_epub_backlinks.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_epub_quoted_note_types.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_epub_render.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_csv.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_docx_equationxml.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_epub.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_html.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_image_mtef.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_legacy_chart_data.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_legacy_doc.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_legacy_doc_mtef.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_legacy_ppt.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_legacy_xls.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_legacy_xls_ppt_mtef.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_markup_anchors.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_model.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_mtef_v5.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_odf.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_ofd.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_office_image_mtef.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_office_metafile.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_office_models.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_office_mtef_v5.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_office_package_normalizers.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_office_title_types.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_ooxml_mtef.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_auxiliary_text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_char_geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_code_blocks.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_document_profile.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_equation_images.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_extractor.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_formulas.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_graphics.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_index_blocks.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_line_metadata.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_native_text.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_pipeline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_samples.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_scripts.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_semantics.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_tables.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_text_blocks.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_titles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_pdf_visual_annotations.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_rtf.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_shared_helpers.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_flash_spreadsheet_projector.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_guess_suffix_ole2.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_html_css_build.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_html_render.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_html_security.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_hybrid_script_source_pdfs.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_latex_render.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_markdown_render.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_middle_json_block_models.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_middle_json_export.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_middle_json_validator.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_model_json.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_native_pdf_table.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_native_pdf_table_demo_manifest.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_native_pdf_table_manifest.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_native_pdf_table_pipeline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_native_pdf_table_scripts.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_ofd_assembly.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_ofd_vector_tables.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_office_demo_exports.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_office_demo_pages.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_office_parser_regressions.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_cjk_wrapping.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_classify.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_demo_links.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_document.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_original_layout.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_pagination.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_render.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_render_diagnostics.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_text_styles.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_title_font_plan.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_title_space.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_pdf_visualization.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_postprocess_page_blocks.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_postprocess_pages.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_postprocess_paragraphs.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_postprocess_visual.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_render_api.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_render_html_table.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_render_image_renderer.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_render_list_index_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_structured_content_render.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_table_merge.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_table_merge_cell_merge.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_text_block_anchor.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_text_boundary_rules.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tests/unittest/test_text_utils.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tools/__init__.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tools/build_html_css.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tools/calibrate_pdf_geometry.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tools/capture_baseline.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tools/capture_platform_layout.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tools/compare_font_platforms.py +0 -0
- {docvortex-0.4.2 → docvortex-0.4.4}/tools/font_geometry.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docvortex
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Summary: A fast, multi-format document parsing and conversion engine
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Repository, https://github.com/myhloli/DocVortex
|
|
@@ -43,6 +43,7 @@ Requires-Dist: opencv-python>=4.11.0.86
|
|
|
43
43
|
Provides-Extra: test
|
|
44
44
|
Requires-Dist: pytest; extra == "test"
|
|
45
45
|
Requires-Dist: pytest-cov; extra == "test"
|
|
46
|
+
Requires-Dist: pytest-xdist<4,>=3.8; extra == "test"
|
|
46
47
|
Requires-Dist: markdown; extra == "test"
|
|
47
48
|
Requires-Dist: jsonschema<5,>=4; extra == "test"
|
|
48
49
|
Provides-Extra: dev
|
|
@@ -106,6 +107,8 @@ docvortex convert report.pdf --format markdown --output output/report.md
|
|
|
106
107
|
|
|
107
108
|
Replace `report.pdf` with a local file in any supported input format.
|
|
108
109
|
Use `--format` to choose the output; run `docvortex convert --help` for options.
|
|
110
|
+
The root-level `--log-level` option controls loguru output and defaults to `info`.
|
|
111
|
+
It must precede the command; `DOCVORTEX_LOG_LEVEL=warning` can also configure it.
|
|
109
112
|
|
|
110
113
|
### Python
|
|
111
114
|
|
|
@@ -53,6 +53,8 @@ docvortex convert report.pdf --format markdown --output output/report.md
|
|
|
53
53
|
|
|
54
54
|
Replace `report.pdf` with a local file in any supported input format.
|
|
55
55
|
Use `--format` to choose the output; run `docvortex convert --help` for options.
|
|
56
|
+
The root-level `--log-level` option controls loguru output and defaults to `info`.
|
|
57
|
+
It must precede the command; `DOCVORTEX_LOG_LEVEL=warning` can also configure it.
|
|
56
58
|
|
|
57
59
|
### Python
|
|
58
60
|
|
|
@@ -7,6 +7,20 @@ you need access to intermediate results. All examples use the public Python SDK.
|
|
|
7
7
|
Install with `pip install docvortex` and replace `report.pdf` with a local text PDF.
|
|
8
8
|
Each example can be run independently in a fresh output directory.
|
|
9
9
|
|
|
10
|
+
## Global CLI log level
|
|
11
|
+
|
|
12
|
+
The root-level `--log-level` option controls loguru output for CLI commands.
|
|
13
|
+
It defaults to `info`, supports `trace`, `debug`, `info`, `warning`, `error` and
|
|
14
|
+
`critical`, and must be placed before the subcommand:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
docvortex --log-level debug convert report.pdf --format markdown --output output/report.md
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
`DOCVORTEX_LOG_LEVEL` provides the same setting through an environment variable.
|
|
21
|
+
An explicit `--log-level` value takes precedence. SDK imports do not change the
|
|
22
|
+
host application's existing loguru sinks.
|
|
23
|
+
|
|
10
24
|
## Stage APIs
|
|
11
25
|
|
|
12
26
|
The pipeline has three stages:
|
|
@@ -18,6 +18,12 @@ MinerU 使用 `docvortex>=0.4.0,<0.5.0`。本轮调整 Python 模块边界,保
|
|
|
18
18
|
|
|
19
19
|
`docvortex.public_api.PUBLIC_API` 是静态模块及符号清单。新增跨库依赖必须同时更新清单、文档和契约测试;不能通过基础实现、私有模块或动态别名绕过边界。
|
|
20
20
|
|
|
21
|
+
## 结果包素材导出(0.4.3)
|
|
22
|
+
|
|
23
|
+
跨库调用方可通过 `docvortex.export.materialize_middle(middle_json, assets=None)` 获取图片外置后的文档副本与 `AssetStore`,再通过 `validate_materialized_assets(document, assets)` 验证所有图片引用。直接图片和视觉 HTML 内嵌图片使用安全相对路径,原始图片字节及布局方向扩展保持不变;代码字面量不作为 HTML 素材处理。
|
|
24
|
+
|
|
25
|
+
调用方负责将该副本及素材写入自己的结果包,不应先省略图片再从源 PDF 重裁。缺失引用、未物化网络图片或同名素材冲突会显式失败。物化不修改输入对象、不读取源 PDF、不下载网络资源;已有外部素材须通过 `AssetStore` 显式提供。
|
|
26
|
+
|
|
21
27
|
## 行为与资源所有权
|
|
22
28
|
|
|
23
29
|
`prepare_text_evidence` 返回具名的 `PDFTextEvidence`,`apply_text_evidence` 统一完成链接、样式、脚本与 InlineSpan 物化。MinerU 仍决定调用时机、公式排除区域、超大字符页和 OCR 回退。
|
|
@@ -32,7 +32,7 @@ dependencies = [
|
|
|
32
32
|
]
|
|
33
33
|
|
|
34
34
|
[project.optional-dependencies]
|
|
35
|
-
test = ["pytest", "pytest-cov", "markdown", "jsonschema>=4,<5"]
|
|
35
|
+
test = ["pytest", "pytest-cov", "pytest-xdist>=3.8,<4", "markdown", "jsonschema>=4,<5"]
|
|
36
36
|
dev = ["ruff==0.14.2", "build", "twine"]
|
|
37
37
|
|
|
38
38
|
[project.urls]
|
|
@@ -3,16 +3,36 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from pathlib import Path
|
|
6
|
+
import sys
|
|
6
7
|
|
|
7
8
|
import click
|
|
9
|
+
from loguru import logger
|
|
8
10
|
|
|
9
11
|
from .version import __version__
|
|
10
12
|
|
|
11
13
|
|
|
14
|
+
_LOG_LEVELS = ("trace", "debug", "info", "warning", "error", "critical")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _configure_log_level(level: str) -> None:
|
|
18
|
+
"""按全局参数重建 loguru 标准错误输出,并过滤低于该等级的日志。"""
|
|
19
|
+
logger.remove()
|
|
20
|
+
logger.add(sys.stderr, level=level.upper())
|
|
21
|
+
|
|
22
|
+
|
|
12
23
|
@click.group(help="DocVortex: native multi-format document parsing and conversion.")
|
|
13
24
|
@click.version_option(__version__)
|
|
14
|
-
|
|
15
|
-
""
|
|
25
|
+
@click.option(
|
|
26
|
+
"--log-level",
|
|
27
|
+
type=click.Choice(_LOG_LEVELS, case_sensitive=False),
|
|
28
|
+
default="info",
|
|
29
|
+
show_default=True,
|
|
30
|
+
envvar="DOCVORTEX_LOG_LEVEL",
|
|
31
|
+
help="Global loguru log level; place this root option before the command.",
|
|
32
|
+
)
|
|
33
|
+
def main(log_level: str) -> None:
|
|
34
|
+
"""提供独立文档引擎的命令行入口,并应用全局日志等级。"""
|
|
35
|
+
_configure_log_level(log_level)
|
|
16
36
|
|
|
17
37
|
|
|
18
38
|
@main.command("convert")
|
|
@@ -58,7 +58,11 @@ def _prepare_export_copy(middle_json: MiddleJson) -> tuple[MiddleJson, dict[str,
|
|
|
58
58
|
block.image_base64 = None # type: ignore[attr-defined]
|
|
59
59
|
|
|
60
60
|
content = getattr(block, "content", None)
|
|
61
|
-
if
|
|
61
|
+
if (
|
|
62
|
+
str(block.type) not in {"table_body", "chart_body", "image_body"}
|
|
63
|
+
or not isinstance(content, str)
|
|
64
|
+
or "data:image/" not in content
|
|
65
|
+
):
|
|
62
66
|
continue
|
|
63
67
|
if block.index is None:
|
|
64
68
|
raise ValueError(f"HTML image carrier requires index: page_idx={page.page_idx}, type={block.type}")
|
|
@@ -165,6 +165,7 @@ PUBLIC_API: dict[str, tuple[str, ...]] = {
|
|
|
165
165
|
"attach_visual_block_images",
|
|
166
166
|
"attach_visual_block_images_from_pdf",
|
|
167
167
|
),
|
|
168
|
+
"docvortex.export": ("materialize_middle", "validate_materialized_assets"),
|
|
168
169
|
"docvortex.errors": (
|
|
169
170
|
"DocumentError",
|
|
170
171
|
"InvalidRequestError",
|
|
@@ -12,6 +12,7 @@ from ....result import Diagnostic
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
_diagnostics: ContextVar[list[Diagnostic] | None] = ContextVar("pdf_diagnostics", default=None)
|
|
15
|
+
_DEBUG_DIAGNOSTIC_CODES = frozenset({"pdf_title_layout_expanded", "pdf_layout_scaled"})
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
@contextmanager
|
|
@@ -26,8 +27,8 @@ def collect_pdf_diagnostics() -> Iterator[list[Diagnostic]]:
|
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
def report_pdf_diagnostic(code: str, message: str, page_index: int | None = None) -> None:
|
|
29
|
-
"""
|
|
30
|
-
logger.
|
|
30
|
+
"""PDF 渲染诊断统一使用 DEBUG 日志,结构化诊断保持完整。"""
|
|
31
|
+
logger.debug("{}: {}", code, message)
|
|
31
32
|
items = _diagnostics.get()
|
|
32
33
|
if items is not None:
|
|
33
34
|
diagnostic = Diagnostic(code, message, page_index)
|
|
@@ -43,7 +43,7 @@ class PdfAnchorRegistry:
|
|
|
43
43
|
return self._names.get(normalized) if normalized else None
|
|
44
44
|
|
|
45
45
|
def attach_markup(self, anchor: str | None) -> str:
|
|
46
|
-
"""返回首个目标的 Paragraph anchor
|
|
46
|
+
"""返回首个目标的 Paragraph anchor 标签,重复目标仅记录诊断。"""
|
|
47
47
|
normalized = (anchor or "").strip()
|
|
48
48
|
name = self.resolve(normalized)
|
|
49
49
|
if name is None:
|
|
@@ -85,7 +85,7 @@ class PdfInlineContext:
|
|
|
85
85
|
next_formula_id: int = 0
|
|
86
86
|
|
|
87
87
|
def location(self, page_idx: int, block_index: int | None, block_type: str) -> str:
|
|
88
|
-
"""返回稳定的 page/block
|
|
88
|
+
"""返回稳定的 page/block 诊断定位文本。"""
|
|
89
89
|
return f"page_idx={page_idx}, block_index={block_index}, block_type={block_type}"
|
|
90
90
|
|
|
91
91
|
def register_formula(self, image: InlineFormulaImage) -> str:
|
|
@@ -131,17 +131,19 @@ class OriginalPdfRenderer(_PdfRenderer):
|
|
|
131
131
|
)
|
|
132
132
|
if reasons:
|
|
133
133
|
plan.exception_count += 1
|
|
134
|
-
self.
|
|
134
|
+
self._diagnostic(
|
|
135
|
+
"pdf_layout_font_exception", f"reason={','.join(reasons)}, {detail}", item.page_idx, item.block
|
|
136
|
+
)
|
|
135
137
|
if item.geometry_conflict:
|
|
136
|
-
self.
|
|
138
|
+
self._diagnostic("pdf_title_geometry_conflict", detail, item.page_idx, item.block)
|
|
137
139
|
elif item.clearance_unavailable:
|
|
138
|
-
self.
|
|
140
|
+
self._diagnostic("pdf_title_clearance_unavailable", detail, item.page_idx, item.block)
|
|
139
141
|
ox0, oy0, ox1, oy1 = item.original_rect
|
|
140
142
|
dx0, dy0, dx1, dy1 = item.draw_rect
|
|
141
143
|
expanded = dx0 < ox0 - 0.001 or dy0 < oy0 - 0.001 or dx1 > ox1 + 0.001 or dy1 > oy1 + 0.001
|
|
142
144
|
if expanded:
|
|
143
145
|
plan.expanded_count += 1
|
|
144
|
-
self.
|
|
146
|
+
self._diagnostic("pdf_title_layout_expanded", detail, item.page_idx, item.block)
|
|
145
147
|
plan.titles.append(
|
|
146
148
|
{
|
|
147
149
|
"page_idx": item.page_idx,
|
|
@@ -190,7 +192,9 @@ class OriginalPdfRenderer(_PdfRenderer):
|
|
|
190
192
|
)
|
|
191
193
|
)
|
|
192
194
|
return prepared
|
|
193
|
-
self.
|
|
195
|
+
self._diagnostic(
|
|
196
|
+
"pdf_layout_approximate", "Missing child bbox; fitting the group inside its parent", page_idx, block
|
|
197
|
+
)
|
|
194
198
|
assert block.bbox is not None
|
|
195
199
|
x0, y0, x1, y1 = block.bbox
|
|
196
200
|
width, height = (x1 - x0) * page_width, (y1 - y0) * page_height
|
|
@@ -226,14 +230,14 @@ class OriginalPdfRenderer(_PdfRenderer):
|
|
|
226
230
|
if prepared is not None:
|
|
227
231
|
return [self._prepared_image_flowable(prepared, block)]
|
|
228
232
|
if isinstance(block, (TableBodyBlock, ChartBodyBlock)):
|
|
229
|
-
self.
|
|
233
|
+
self._diagnostic(
|
|
230
234
|
"pdf_layout_visual_fallback", "Region image unavailable; rendering structured content", page_idx, block
|
|
231
235
|
)
|
|
232
236
|
if "<table" in block.content.lower():
|
|
233
237
|
try:
|
|
234
238
|
return list(self._html_tables(block.content, page_idx=page_idx, block=block))
|
|
235
239
|
except PdfTableError as exc:
|
|
236
|
-
self.
|
|
240
|
+
self._diagnostic("pdf_table_fallback", str(exc), page_idx, block)
|
|
237
241
|
if block.content.strip():
|
|
238
242
|
return [self._preformatted(_plain_html_text(block.content), page_idx, block, self.styles.spatial_table)]
|
|
239
243
|
return [self._placeholder("image unavailable", page_idx=page_idx, block=block, width=self.available_width)]
|
|
@@ -281,7 +285,7 @@ class OriginalPdfRenderer(_PdfRenderer):
|
|
|
281
285
|
url: str | None = None,
|
|
282
286
|
) -> Paragraph:
|
|
283
287
|
"""用可测量段落展示缺失内容,避免固定高度的占位表格产生文字外溢。"""
|
|
284
|
-
self.
|
|
288
|
+
self._diagnostic("pdf_content_placeholder", label, page_idx, block)
|
|
285
289
|
spans = [TextSpan(type="text", content=label[:320] or "content unavailable")]
|
|
286
290
|
if url:
|
|
287
291
|
spans = [HyperlinkSpan(type="hyperlink", url=url, content=spans)]
|
|
@@ -322,11 +326,11 @@ class OriginalPdfRenderer(_PdfRenderer):
|
|
|
322
326
|
"""只绘制已经确认的测量结果,正文不重新排版,标题使用独立的安全绘制框。"""
|
|
323
327
|
fit = item.fit
|
|
324
328
|
if fit.small_text:
|
|
325
|
-
self.
|
|
329
|
+
self._diagnostic(
|
|
326
330
|
"pdf_layout_small_text", f"Block fitted below 6 pt (scale={fit.scale:.4f})", item.page_idx, item.block
|
|
327
331
|
)
|
|
328
332
|
if fit.scale < 0.999:
|
|
329
|
-
self.
|
|
333
|
+
self._diagnostic("pdf_layout_scaled", f"Block fitted at scale={fit.scale:.4f}", item.page_idx, item.block)
|
|
330
334
|
rect = item.draw_rect or item.original_rect
|
|
331
335
|
canvas.saveState()
|
|
332
336
|
try:
|
|
@@ -332,7 +332,7 @@ class _PdfRenderer:
|
|
|
332
332
|
flowable.spaceAfter = 7
|
|
333
333
|
return [flowable]
|
|
334
334
|
except PdfFormulaError as exc:
|
|
335
|
-
self.
|
|
335
|
+
self._diagnostic("pdf_formula_fallback", str(exc), page_idx, block)
|
|
336
336
|
if _has_image_payload(block):
|
|
337
337
|
image = self._try_prepared_block_image(block, page_idx)
|
|
338
338
|
if image is not None:
|
|
@@ -433,7 +433,7 @@ class _PdfRenderer:
|
|
|
433
433
|
rendered.extend(self._html_tables(content, page_idx=page_idx, block=child))
|
|
434
434
|
continue
|
|
435
435
|
except PdfTableError as exc:
|
|
436
|
-
self.
|
|
436
|
+
self._diagnostic("pdf_table_fallback", str(exc), page_idx, child)
|
|
437
437
|
if _has_image_payload(child):
|
|
438
438
|
image = self._try_prepared_block_image(child, page_idx)
|
|
439
439
|
if image is not None:
|
|
@@ -473,7 +473,7 @@ class _PdfRenderer:
|
|
|
473
473
|
try:
|
|
474
474
|
rendered.extend(self._html_tables(content, page_idx=page_idx, block=child))
|
|
475
475
|
except PdfTableError as exc:
|
|
476
|
-
self.
|
|
476
|
+
self._diagnostic("pdf_table_fallback", str(exc), page_idx, child)
|
|
477
477
|
if not image_succeeded:
|
|
478
478
|
rendered.append(self._preformatted(_plain_html_text(content), page_idx, child, self.styles.body))
|
|
479
479
|
elif content and not image_succeeded:
|
|
@@ -573,7 +573,7 @@ class _PdfRenderer:
|
|
|
573
573
|
try:
|
|
574
574
|
prepared = prepare_html_image(source, self.asset_resolver)
|
|
575
575
|
except PdfAssetError as exc:
|
|
576
|
-
self.
|
|
576
|
+
self._diagnostic("pdf_image_unavailable", str(exc), page_idx, block)
|
|
577
577
|
return self._placeholder(
|
|
578
578
|
f"image unavailable: {alt_text}",
|
|
579
579
|
block=block,
|
|
@@ -616,11 +616,11 @@ class _PdfRenderer:
|
|
|
616
616
|
)
|
|
617
617
|
|
|
618
618
|
def _try_prepared_block_image(self, block: ImagePayloadBlock, page_idx: int) -> PreparedImage | None:
|
|
619
|
-
"""
|
|
619
|
+
"""尝试离线准备图片,并把素材错误统一记录为 DEBUG 诊断。"""
|
|
620
620
|
try:
|
|
621
621
|
return prepare_block_image(block, self.asset_resolver)
|
|
622
622
|
except PdfAssetError as exc:
|
|
623
|
-
self.
|
|
623
|
+
self._diagnostic("pdf_image_unavailable", str(exc), page_idx, block)
|
|
624
624
|
return None
|
|
625
625
|
|
|
626
626
|
def _prepared_image_flowable(
|
|
@@ -659,7 +659,7 @@ class _PdfRenderer:
|
|
|
659
659
|
url: str | None = None,
|
|
660
660
|
) -> Table:
|
|
661
661
|
"""创建带浅色边框、可选远程链接和定位文本的稳定占位框。"""
|
|
662
|
-
self.
|
|
662
|
+
self._diagnostic("pdf_content_placeholder", label, page_idx, block)
|
|
663
663
|
normalized = re.sub(r"\s+", " ", label).strip()[:_MAX_PLACEHOLDER_TEXT] or "content unavailable"
|
|
664
664
|
markup = render_plain_text_markup(normalized)
|
|
665
665
|
if url:
|
|
@@ -688,11 +688,11 @@ class _PdfRenderer:
|
|
|
688
688
|
|
|
689
689
|
@staticmethod
|
|
690
690
|
def _location(page_idx: int, block: BlockBase) -> str:
|
|
691
|
-
"""返回 PDF
|
|
691
|
+
"""返回 PDF 诊断与占位使用的稳定 page/block 定位。"""
|
|
692
692
|
return f"page_idx={page_idx}, block_index={block.index}, block_type={block.type}"
|
|
693
693
|
|
|
694
|
-
def
|
|
695
|
-
"""
|
|
694
|
+
def _diagnostic(self, code: str, message: str, page_idx: int, block: BlockBase) -> None:
|
|
695
|
+
"""用统一位置格式同时报告 DEBUG 日志与结构化 PDF 诊断。"""
|
|
696
696
|
report_pdf_diagnostic(code, f"{message} ({self._location(page_idx, block)})", page_idx)
|
|
697
697
|
|
|
698
698
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: docvortex
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Summary: A fast, multi-format document parsing and conversion engine
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Repository, https://github.com/myhloli/DocVortex
|
|
@@ -43,6 +43,7 @@ Requires-Dist: opencv-python>=4.11.0.86
|
|
|
43
43
|
Provides-Extra: test
|
|
44
44
|
Requires-Dist: pytest; extra == "test"
|
|
45
45
|
Requires-Dist: pytest-cov; extra == "test"
|
|
46
|
+
Requires-Dist: pytest-xdist<4,>=3.8; extra == "test"
|
|
46
47
|
Requires-Dist: markdown; extra == "test"
|
|
47
48
|
Requires-Dist: jsonschema<5,>=4; extra == "test"
|
|
48
49
|
Provides-Extra: dev
|
|
@@ -106,6 +107,8 @@ docvortex convert report.pdf --format markdown --output output/report.md
|
|
|
106
107
|
|
|
107
108
|
Replace `report.pdf` with a local file in any supported input format.
|
|
108
109
|
Use `--format` to choose the output; run `docvortex convert --help` for options.
|
|
110
|
+
The root-level `--log-level` option controls loguru output and defaults to `info`.
|
|
111
|
+
It must precede the command; `DOCVORTEX_LOG_LEVEL=warning` can also configure it.
|
|
109
112
|
|
|
110
113
|
### Python
|
|
111
114
|
|
|
@@ -422,6 +422,7 @@ src/docvortex/resources/html/docvortex.min.css
|
|
|
422
422
|
tests/test_architecture.py
|
|
423
423
|
tests/test_benchmark_entrypoint.py
|
|
424
424
|
tests/test_brand_protocol.py
|
|
425
|
+
tests/test_cli_logging.py
|
|
425
426
|
tests/test_complete_pipeline.py
|
|
426
427
|
tests/test_converter_lifecycle.py
|
|
427
428
|
tests/test_document_envelope.py
|
|
@@ -438,6 +439,7 @@ tests/test_pdf_output_text.py
|
|
|
438
439
|
tests/test_pdf_render_pool.py
|
|
439
440
|
tests/test_pdf_source_row_merging.py
|
|
440
441
|
tests/test_pdf_symbol_normalization.py
|
|
442
|
+
tests/test_public_export_api.py
|
|
441
443
|
tests/test_public_image_api.py
|
|
442
444
|
tests/test_public_pipeline.py
|
|
443
445
|
tests/test_refactor_raster.py
|
|
@@ -557,6 +559,7 @@ tests/unittest/test_office_parser_regressions.py
|
|
|
557
559
|
tests/unittest/test_pdf_cjk_wrapping.py
|
|
558
560
|
tests/unittest/test_pdf_classify.py
|
|
559
561
|
tests/unittest/test_pdf_demo_links.py
|
|
562
|
+
tests/unittest/test_pdf_diagnostic_levels.py
|
|
560
563
|
tests/unittest/test_pdf_document.py
|
|
561
564
|
tests/unittest/test_pdf_original_layout.py
|
|
562
565
|
tests/unittest/test_pdf_pagination.py
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"""验证 CLI 全局 loguru 日志等级参数的解析与过滤行为。"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import importlib
|
|
6
|
+
import sys
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Iterator
|
|
9
|
+
|
|
10
|
+
from click.testing import CliRunner
|
|
11
|
+
from loguru import logger
|
|
12
|
+
import pytest
|
|
13
|
+
|
|
14
|
+
from docvortex import cli
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@pytest.fixture
|
|
18
|
+
def isolated_logger() -> Iterator[None]:
|
|
19
|
+
"""隔离 loguru 全局 sink,避免 CLI 日志测试影响其他用例。"""
|
|
20
|
+
logger.remove()
|
|
21
|
+
yield
|
|
22
|
+
logger.remove()
|
|
23
|
+
logger.add(sys.stderr)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class _DummyPDFDocument:
|
|
27
|
+
"""替身 PDF 文档,避免日志参数测试依赖真实 PDF 解析。"""
|
|
28
|
+
|
|
29
|
+
def __enter__(self) -> "_DummyPDFDocument":
|
|
30
|
+
return self
|
|
31
|
+
|
|
32
|
+
def __exit__(self, exc_type: object, exc: object, traceback: object) -> bool:
|
|
33
|
+
return False
|
|
34
|
+
|
|
35
|
+
def classify(self) -> str:
|
|
36
|
+
return "txt"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _invoke_classify(runner: CliRunner, source: Path, *arguments: str):
|
|
40
|
+
"""调用 classify 子命令并返回执行结果,供日志参数断言复用。"""
|
|
41
|
+
return runner.invoke(cli.main, [*arguments, "classify", str(source)])
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def test_cli_log_level_defaults_to_info(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
|
45
|
+
"""未显式配置时,根命令默认传入 info 日志等级。"""
|
|
46
|
+
source = tmp_path / "source.pdf"
|
|
47
|
+
source.write_bytes(b"dummy")
|
|
48
|
+
levels = []
|
|
49
|
+
monkeypatch.setattr(cli, "_configure_log_level", levels.append)
|
|
50
|
+
monkeypatch.setattr("docvortex.document.pdf.PDFDocument", lambda _: _DummyPDFDocument())
|
|
51
|
+
|
|
52
|
+
result = _invoke_classify(CliRunner(), source)
|
|
53
|
+
|
|
54
|
+
assert result.exit_code == 0, result.output
|
|
55
|
+
assert levels == ["info"]
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def test_cli_log_level_accepts_root_option_and_environment(
|
|
59
|
+
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
60
|
+
) -> None:
|
|
61
|
+
"""根命令参数生效,且显式参数优先于环境变量。"""
|
|
62
|
+
source = tmp_path / "source.pdf"
|
|
63
|
+
source.write_bytes(b"dummy")
|
|
64
|
+
levels = []
|
|
65
|
+
monkeypatch.setattr(cli, "_configure_log_level", levels.append)
|
|
66
|
+
monkeypatch.setattr("docvortex.document.pdf.PDFDocument", lambda _: _DummyPDFDocument())
|
|
67
|
+
monkeypatch.setenv("DOCVORTEX_LOG_LEVEL", "warning")
|
|
68
|
+
runner = CliRunner()
|
|
69
|
+
|
|
70
|
+
environment_result = _invoke_classify(runner, source)
|
|
71
|
+
explicit_result = _invoke_classify(runner, source, "--log-level", "debug")
|
|
72
|
+
|
|
73
|
+
assert environment_result.exit_code == 0, environment_result.output
|
|
74
|
+
assert explicit_result.exit_code == 0, explicit_result.output
|
|
75
|
+
assert levels == ["warning", "debug"]
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def test_cli_rejects_invalid_log_level(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
|
79
|
+
"""非法日志等级在进入业务命令前被 Click 拒绝。"""
|
|
80
|
+
source = tmp_path / "source.pdf"
|
|
81
|
+
source.write_bytes(b"dummy")
|
|
82
|
+
levels = []
|
|
83
|
+
monkeypatch.setattr(cli, "_configure_log_level", levels.append)
|
|
84
|
+
monkeypatch.setenv("DOCVORTEX_LOG_LEVEL", "verbose")
|
|
85
|
+
|
|
86
|
+
result = _invoke_classify(CliRunner(), source)
|
|
87
|
+
|
|
88
|
+
assert result.exit_code != 0
|
|
89
|
+
assert "Invalid value" in result.output
|
|
90
|
+
assert levels == []
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
@pytest.mark.parametrize(
|
|
94
|
+
("level", "expected"),
|
|
95
|
+
[
|
|
96
|
+
("info", ("debug hidden", False, "warning shown", True)),
|
|
97
|
+
("debug", ("debug shown", True, "warning shown", True)),
|
|
98
|
+
("error", ("warning hidden", False, "error shown", True)),
|
|
99
|
+
],
|
|
100
|
+
)
|
|
101
|
+
def test_configure_log_level_filters_loguru_output(
|
|
102
|
+
isolated_logger, capsys: pytest.CaptureFixture[str], level: str, expected: tuple[str, bool, str, bool]
|
|
103
|
+
) -> None:
|
|
104
|
+
"""全局日志等级按 loguru 阈值过滤标准错误输出。"""
|
|
105
|
+
cli._configure_log_level(level)
|
|
106
|
+
logger.debug("debug hidden" if level == "info" else "debug shown")
|
|
107
|
+
logger.warning("warning hidden" if level == "error" else "warning shown")
|
|
108
|
+
logger.error("error shown")
|
|
109
|
+
|
|
110
|
+
stderr = capsys.readouterr().err
|
|
111
|
+
debug_message, debug_expected, warning_message, warning_expected = expected
|
|
112
|
+
assert (debug_message in stderr) is debug_expected
|
|
113
|
+
assert (warning_message in stderr) is warning_expected
|
|
114
|
+
assert "error shown" in stderr
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def test_importing_cli_preserves_host_loguru_sink() -> None:
|
|
118
|
+
"""导入 CLI 模块不重建宿主应用已配置的 loguru sink。"""
|
|
119
|
+
messages: list[str] = []
|
|
120
|
+
handler_id = logger.add(messages.append, level="DEBUG", format="{message}")
|
|
121
|
+
try:
|
|
122
|
+
importlib.reload(cli)
|
|
123
|
+
logger.debug("host sink remains")
|
|
124
|
+
finally:
|
|
125
|
+
logger.remove(handler_id)
|
|
126
|
+
|
|
127
|
+
assert "host sink remains\n" in messages
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"""验证跨库素材导出接口的字节所有权及字面量边界。"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import base64
|
|
6
|
+
from typing import get_type_hints
|
|
7
|
+
|
|
8
|
+
import pytest
|
|
9
|
+
|
|
10
|
+
from docvortex.assets import AssetStore
|
|
11
|
+
from docvortex.export import materialize_middle, validate_materialized_assets
|
|
12
|
+
from docvortex.public_api import PUBLIC_API
|
|
13
|
+
from docvortex.schema import MiddleJson
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def test_public_export_preserves_payloads_geometry_and_code() -> None:
|
|
17
|
+
"""直接图与表内图外置后字节不变,代码中的同名字面量不被当作素材。"""
|
|
18
|
+
image = b"\xff\xd8\xffexample\xff\xd9"
|
|
19
|
+
uri = "data:image/jpeg;base64," + base64.b64encode(image).decode()
|
|
20
|
+
markup = f'<img src="{uri}" width="10">'
|
|
21
|
+
middle = MiddleJson.from_dict(
|
|
22
|
+
{
|
|
23
|
+
"schema": "docvortex.middle",
|
|
24
|
+
"schema_version": "2.0",
|
|
25
|
+
"is_full_document": False,
|
|
26
|
+
"metadata": {"file_suffix": "pdf", "producer": {"name": "test", "version": "1"}},
|
|
27
|
+
"extensions": {
|
|
28
|
+
"docvortex_layout": {
|
|
29
|
+
"version": 1,
|
|
30
|
+
"pages": [{"page_idx": 4, "width_pt": 400, "height_pt": 600, "image_rotations": {"2": 270}}],
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"pages": [
|
|
34
|
+
{
|
|
35
|
+
"page_idx": 4,
|
|
36
|
+
"blocks": [
|
|
37
|
+
{
|
|
38
|
+
"type": "table",
|
|
39
|
+
"index": 2,
|
|
40
|
+
"bbox": [0.1, 0.1, 0.4, 0.5],
|
|
41
|
+
"content": [{"type": "table_body", "index": 2, "content": markup, "image_base64": uri}],
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"type": "code",
|
|
45
|
+
"sub_type": "code",
|
|
46
|
+
"guess_lang": "html",
|
|
47
|
+
"index": 3,
|
|
48
|
+
"bbox": [0.1, 0.6, 0.9, 0.8],
|
|
49
|
+
"content": [{"type": "code_body", "index": 3, "content": markup}],
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
before = middle.to_json()
|
|
57
|
+
exported, assets = materialize_middle(middle)
|
|
58
|
+
validate_materialized_assets(exported, assets)
|
|
59
|
+
assert set(assets) == {"images/page_4_table_body_2.jpg", "images/page_4_table_body_2_1.jpg"}
|
|
60
|
+
assert all(payload == image for payload in assets.values())
|
|
61
|
+
assert exported.extensions == middle.extensions
|
|
62
|
+
assert exported.pages[0].blocks[1].content[0].content == markup
|
|
63
|
+
assert middle.to_json() == before
|
|
64
|
+
repeated, copied_assets = materialize_middle(exported, assets)
|
|
65
|
+
assert repeated == exported and dict(copied_assets) == dict(assets)
|
|
66
|
+
assert copied_assets is not assets
|
|
67
|
+
with pytest.raises(ValueError, match="Missing materialized asset"):
|
|
68
|
+
validate_materialized_assets(exported, AssetStore())
|
|
69
|
+
assert set(PUBLIC_API["docvortex.export"]) == {"materialize_middle", "validate_materialized_assets"}
|
|
70
|
+
assert get_type_hints(materialize_middle)["return"] == tuple[MiddleJson, AssetStore]
|
|
71
|
+
assert get_type_hints(validate_materialized_assets)["return"] is type(None)
|