BabelDOC 0.5.10__tar.gz → 0.5.12__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.
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.gitignore +2 -1
- {babeldoc-0.5.10 → babeldoc-0.5.12}/PKG-INFO +2 -1
- {babeldoc-0.5.10 → babeldoc-0.5.12}/README.md +1 -0
- babeldoc-0.5.12/babeldoc/__init__.py +1 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/babeldoc_exception/BabelDOCException.py +5 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/const.py +44 -1
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/docvision/rpc_doclayout6.py +20 -15
- babeldoc-0.5.12/babeldoc/format/pdf/babelpdf/cidfont.py +60 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/babelpdf/win_core.py +872 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/frontend/il_creater.py +3 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/midend/automatic_term_extractor.py +20 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/midend/detect_scanned_file.py +3 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/midend/layout_parser.py +51 -35
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/midend/styles_and_formulas.py +8 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/utils/extract_char.py +10 -0
- babeldoc-0.5.12/babeldoc/format/pdf/document_il/utils/mupdf_helper.py +42 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/high_level.py +119 -10
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/translation_config.py +29 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/main.py +85 -3
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/translator/translator.py +8 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/pyproject.toml +2 -2
- babeldoc-0.5.10/babeldoc/__init__.py +0 -1
- babeldoc-0.5.10/babeldoc/format/pdf/document_il/utils/mupdf_helper.py +0 -10
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.cursorignore +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/PULL_REQUEST_TEMPLATE/pr_form.yml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/dependabot.yml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/labels.yml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/release-drafter.yml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/workflows/codeql.yml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/workflows/docs.yml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/workflows/labeler.yml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/workflows/lint.yml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/workflows/pr-lint.yml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/workflows/publish-to-pypi.yml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.github/workflows/test.yml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/.pre-commit-config.yaml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/LICENSE +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/assets/assets.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/assets/embedding_assets_metadata.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/asynchronize/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/babeldoc_exception/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/docvision/README.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/docvision/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/docvision/base_doclayout.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/docvision/doclayout.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/docvision/rpc_doclayout.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/docvision/rpc_doclayout2.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/docvision/rpc_doclayout3.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/docvision/rpc_doclayout4.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/docvision/rpc_doclayout5.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/docvision/rpc_doclayout7.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/babelpdf/base14.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/babelpdf/encoding.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/babelpdf/utils.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/converter.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/backend/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/backend/pdf_creater.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/frontend/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/il_version_1.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/il_version_1.rnc +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/il_version_1.rng +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/il_version_1.xsd +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/midend/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/midend/add_debug_information.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/midend/il_translator.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/midend/il_translator_llm_only.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/midend/paragraph_finder.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/midend/remove_descent.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/midend/table_parser.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/midend/typesetting.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/utils/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/utils/fontmap.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/utils/formular_helper.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/utils/layout_helper.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/utils/matrix_helper.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/utils/paragraph_helper.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/utils/spatial_analyzer.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/utils/style_helper.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/utils/zstd_helper.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/document_il/xml_converter.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/pdfinterp.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/result_merger.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/format/pdf/split_manager.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/glossary.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/LICENSE +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/_saslprep.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/arcfour.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/ascii85.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/casting.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/ccitt.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/78-EUC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/78-EUC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/78-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/78-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/78-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/78-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/78ms-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/78ms-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/83pv-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/83pv-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/90ms-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/90ms-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/90msp-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/90msp-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/90pv-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/90pv-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Add-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Add-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Add-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Add-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/B5-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/B5-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/B5pc-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/B5pc-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/CNS-EUC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/CNS-EUC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/CNS1-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/CNS1-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/CNS2-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/CNS2-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/ETHK-B5-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/ETHK-B5-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/ETen-B5-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/ETen-B5-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/ETenms-B5-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/ETenms-B5-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/EUC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/EUC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Ext-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Ext-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Ext-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Ext-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GB-EUC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GB-EUC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GB-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GB-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBK-EUC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBK-EUC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBK2K-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBK2K-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBKp-EUC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBKp-EUC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBT-EUC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBT-EUC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBT-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBT-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBTpc-EUC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBTpc-EUC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBpc-EUC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/GBpc-EUC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/HKdla-B5-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/HKdla-B5-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/HKdlb-B5-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/HKdlb-B5-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/HKgccs-B5-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/HKgccs-B5-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/HKm314-B5-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/HKm314-B5-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/HKm471-B5-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/HKm471-B5-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/HKscs-B5-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/HKscs-B5-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Hankaku-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Hankaku-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Hiragana-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Hiragana-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/KSC-EUC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/KSC-EUC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/KSC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/KSC-Johab-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/KSC-Johab-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/KSC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/KSCms-UHC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/KSCms-UHC-HW-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/KSCms-UHC-HW-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/KSCms-UHC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/KSCpc-EUC-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/KSCpc-EUC-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Katakana-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Katakana-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/NWP-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/NWP-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/README.txt +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Roman-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/Roman-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniCNS-UCS2-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniCNS-UCS2-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniCNS-UTF16-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniCNS-UTF16-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniCNS-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniCNS-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniCNS-UTF8-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniCNS-UTF8-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniGB-UCS2-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniGB-UCS2-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniGB-UTF16-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniGB-UTF16-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniGB-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniGB-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniGB-UTF8-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniGB-UTF8-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS-UCS2-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS-UCS2-HW-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS-UCS2-HW-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS-UCS2-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS-UTF16-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS-UTF16-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS-UTF8-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS-UTF8-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS2004-UTF16-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS2004-UTF16-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS2004-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS2004-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS2004-UTF8-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJIS2004-UTF8-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJISX0213-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJISX0213-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJISX02132004-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniJISX02132004-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniKS-UCS2-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniKS-UCS2-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniKS-UTF16-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniKS-UTF16-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniKS-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniKS-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniKS-UTF8-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/UniKS-UTF8-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/WP-Symbol-H.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/WP-Symbol-V.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/to-unicode-Adobe-CNS1.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/to-unicode-Adobe-GB1.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/to-unicode-Adobe-Japan1.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmap/to-unicode-Adobe-Korea1.pickle.gz +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/cmapdb.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/converter.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/data_structures.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/encodingdb.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/fontmetrics.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/glyphlist.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/high_level.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/image.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/jbig2.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/latin_enc.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/layout.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/lzw.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/pdfcolor.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/pdfdevice.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/pdfdocument.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/pdfexceptions.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/pdffont.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/pdfinterp.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/pdfpage.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/pdfparser.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/pdftypes.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/psexceptions.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/psparser.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/py.typed +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/runlength.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/settings.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/pdfminer/utils.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/progress_monitor.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/tools/generate_font_metadata.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/tools/italic_assistance.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/tools/italic_recognize_tool.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/translator/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/translator/cache.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/utils/__init__.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/utils/atomic_integer.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/babeldoc/utils/priority_thread_pool_executor.py +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/CODE_OF_CONDUCT.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/CONTRIBUTING.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/CONTRIBUTOR_REWARD.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/ImplementationDetails/README.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/README.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/deploy.sh +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/example/demo_glossary.csv +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/images/babeldoc-banner.png +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/images/babeldoc-big-logo.png +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/images/babeldoc-contributor_reward_example.png +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/images/babeldoc-preview.gif +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/images/babeldoc-small-logo.png +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/index.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/intro-to-pdf-object.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/requirements.txt +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/docs/supported_languages.md +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/mkdocs.yml +0 -0
- {babeldoc-0.5.10 → babeldoc-0.5.12}/tests/test_translation_cache_cleanup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: BabelDOC
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.12
|
|
4
4
|
Summary: Yet Another Document Translator
|
|
5
5
|
Project-URL: Homepage, https://github.com/funstory-ai/BabelDOC
|
|
6
6
|
Project-URL: Issues, https://github.com/funstory-ai/BabelDOC/issues
|
|
@@ -81,6 +81,7 @@ Description-Content-Type: text/markdown
|
|
|
81
81
|
<img src="https://img.shields.io/github/license/funstory-ai/BabelDOC"></a>
|
|
82
82
|
<a href="https://t.me/+Z9_SgnxmsmA5NzBl">
|
|
83
83
|
<img src="https://img.shields.io/badge/Telegram-2CA5E0?style=flat-squeare&logo=telegram&logoColor=white"></a>
|
|
84
|
+
<a href="https://deepwiki.com/funstory-ai/BabelDOC"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
|
|
84
85
|
</p>
|
|
85
86
|
|
|
86
87
|
<a href="https://trendshift.io/repositories/13358" target="_blank"><img src="https://trendshift.io/api/badge/repositories/13358" alt="funstory-ai%2FBabelDOC | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
<img src="https://img.shields.io/github/license/funstory-ai/BabelDOC"></a>
|
|
26
26
|
<a href="https://t.me/+Z9_SgnxmsmA5NzBl">
|
|
27
27
|
<img src="https://img.shields.io/badge/Telegram-2CA5E0?style=flat-squeare&logo=telegram&logoColor=white"></a>
|
|
28
|
+
<a href="https://deepwiki.com/funstory-ai/BabelDOC"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
|
|
28
29
|
</p>
|
|
29
30
|
|
|
30
31
|
<a href="https://trendshift.io/repositories/13358" target="_blank"><img src="https://trendshift.io/api/badge/repositories/13358" alt="funstory-ai%2FBabelDOC | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.5.12"
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import itertools
|
|
2
|
+
import multiprocessing as mp
|
|
1
3
|
import os
|
|
2
4
|
import shutil
|
|
3
5
|
import subprocess
|
|
6
|
+
import threading
|
|
4
7
|
from pathlib import Path
|
|
5
8
|
|
|
6
|
-
__version__ = "0.5.
|
|
9
|
+
__version__ = "0.5.12"
|
|
7
10
|
|
|
8
11
|
CACHE_FOLDER = Path.home() / ".cache" / "babeldoc"
|
|
9
12
|
|
|
@@ -39,3 +42,43 @@ except (OSError, FileNotFoundError, subprocess.CalledProcessError):
|
|
|
39
42
|
TIKTOKEN_CACHE_FOLDER = CACHE_FOLDER / "tiktoken"
|
|
40
43
|
TIKTOKEN_CACHE_FOLDER.mkdir(parents=True, exist_ok=True)
|
|
41
44
|
os.environ["TIKTOKEN_CACHE_DIR"] = str(TIKTOKEN_CACHE_FOLDER)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
_process_pool = None
|
|
48
|
+
_process_pool_lock = threading.Lock()
|
|
49
|
+
_ENABLE_PROCESS_POOL = False
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def enable_process_pool():
|
|
53
|
+
# Development and Testing ONLY API
|
|
54
|
+
global _ENABLE_PROCESS_POOL
|
|
55
|
+
_ENABLE_PROCESS_POOL = True
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# macos & windows use spawn mode
|
|
59
|
+
# linux use forkserver mode
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def get_process_pool():
|
|
63
|
+
if not _ENABLE_PROCESS_POOL:
|
|
64
|
+
return None
|
|
65
|
+
global _process_pool
|
|
66
|
+
with _process_pool_lock:
|
|
67
|
+
if _process_pool is None:
|
|
68
|
+
# Create pool only in main process
|
|
69
|
+
if mp.current_process().name != "MainProcess":
|
|
70
|
+
return None
|
|
71
|
+
|
|
72
|
+
_process_pool = mp.Pool()
|
|
73
|
+
return _process_pool
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def batched(iterable, n, *, strict=False):
|
|
77
|
+
# batched('ABCDEFG', 3) → ABC DEF G
|
|
78
|
+
if n < 1:
|
|
79
|
+
raise ValueError("n must be at least one")
|
|
80
|
+
iterator = iter(iterable)
|
|
81
|
+
while batch := tuple(itertools.islice(iterator, n)):
|
|
82
|
+
if strict and len(batch) != n:
|
|
83
|
+
raise ValueError("batched(): incomplete batch")
|
|
84
|
+
yield batch
|
|
@@ -28,7 +28,9 @@ from babeldoc.format.pdf.document_il.utils.extract_char import (
|
|
|
28
28
|
)
|
|
29
29
|
from babeldoc.format.pdf.document_il.utils.fontmap import FontMapper
|
|
30
30
|
from babeldoc.format.pdf.document_il.utils.layout_helper import SPACE_REGEX
|
|
31
|
-
from babeldoc.format.pdf.document_il.utils.mupdf_helper import
|
|
31
|
+
from babeldoc.format.pdf.document_il.utils.mupdf_helper import (
|
|
32
|
+
get_no_rotation_img_multiprocess,
|
|
33
|
+
)
|
|
32
34
|
|
|
33
35
|
logger = logging.getLogger(__name__)
|
|
34
36
|
DPI = 150
|
|
@@ -141,7 +143,7 @@ def predict_layout(
|
|
|
141
143
|
f"{host}/inference",
|
|
142
144
|
json=request_data,
|
|
143
145
|
headers={"Accept": "application/json", "Content-Type": "application/json"},
|
|
144
|
-
timeout=
|
|
146
|
+
timeout=30,
|
|
145
147
|
follow_redirects=True,
|
|
146
148
|
)
|
|
147
149
|
|
|
@@ -233,7 +235,7 @@ def predict_layout2(
|
|
|
233
235
|
"Content-Type": "application/msgpack",
|
|
234
236
|
"Accept": "application/msgpack",
|
|
235
237
|
},
|
|
236
|
-
timeout=
|
|
238
|
+
timeout=30,
|
|
237
239
|
follow_redirects=True,
|
|
238
240
|
)
|
|
239
241
|
|
|
@@ -569,18 +571,19 @@ class RpcDocLayoutModel(DocLayoutModel):
|
|
|
569
571
|
|
|
570
572
|
return results
|
|
571
573
|
|
|
572
|
-
def predict_page(
|
|
573
|
-
self, page, mupdf_doc: pymupdf.Document, translate_config, save_debug_image
|
|
574
|
-
):
|
|
574
|
+
def predict_page(self, page, pdf_bytes: Path, translate_config, save_debug_image):
|
|
575
575
|
translate_config.raise_if_cancelled()
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
image =
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
576
|
+
# doc = pymupdf.open(io.BytesIO(pdf_bytes))
|
|
577
|
+
# with self.lock:
|
|
578
|
+
# pix = mupdf_doc[page.page_number].get_pixmap(dpi=72)
|
|
579
|
+
image = get_no_rotation_img_multiprocess(
|
|
580
|
+
pdf_bytes.as_posix(), page.page_number, dpi=DPI
|
|
581
|
+
)
|
|
582
|
+
# image = np.frombuffer(pix.samples, np.uint8).reshape(
|
|
583
|
+
# pix.height,
|
|
584
|
+
# pix.width,
|
|
585
|
+
# 3,
|
|
586
|
+
# )[:, :, ::-1]
|
|
584
587
|
char_boxes = convert_page_to_char_boxes(page)
|
|
585
588
|
lines = process_page_chars_to_lines(char_boxes)
|
|
586
589
|
predict_result = self.predict_image(image, 800, lines)
|
|
@@ -594,11 +597,13 @@ class RpcDocLayoutModel(DocLayoutModel):
|
|
|
594
597
|
translate_config,
|
|
595
598
|
save_debug_image,
|
|
596
599
|
):
|
|
600
|
+
layout_temp_path = translate_config.get_working_file_path("layout.temp.pdf")
|
|
601
|
+
mupdf_doc.save(layout_temp_path.as_posix())
|
|
597
602
|
with ThreadPoolExecutor(max_workers=32) as executor:
|
|
598
603
|
yield from executor.map(
|
|
599
604
|
self.predict_page,
|
|
600
605
|
pages,
|
|
601
|
-
(
|
|
606
|
+
(layout_temp_path for _ in range(len(pages))),
|
|
602
607
|
(translate_config for _ in range(len(pages))),
|
|
603
608
|
(save_debug_image for _ in range(len(pages))),
|
|
604
609
|
)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import re
|
|
2
|
+
from io import BytesIO
|
|
3
|
+
|
|
4
|
+
import freetype
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def indirect(obj):
|
|
8
|
+
if isinstance(obj, tuple) and obj[0] == "xref":
|
|
9
|
+
return int(obj[1].split(" ")[0])
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def get_xref(doc, xref, key):
|
|
13
|
+
obj = doc.xref_get_key(xref, key)
|
|
14
|
+
if obj[0] == "xref":
|
|
15
|
+
return indirect(obj)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_font_file(doc, xref):
|
|
19
|
+
if idx := get_xref(doc, xref, "FontFile"):
|
|
20
|
+
return doc.xref_stream(idx)
|
|
21
|
+
if idx := get_xref(doc, xref, "FontFile2"):
|
|
22
|
+
return doc.xref_stream(idx)
|
|
23
|
+
if idx := get_xref(doc, xref, "FontFile3"):
|
|
24
|
+
return doc.xref_stream(idx)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def get_font_descriptor(doc, xref):
|
|
28
|
+
if idx := get_xref(doc, xref, "FontDescriptor"):
|
|
29
|
+
return get_font_file(doc, idx)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def get_descendant_fonts(doc, xref):
|
|
33
|
+
obj = doc.xref_get_key(xref, "DescendantFonts")
|
|
34
|
+
array_text = ""
|
|
35
|
+
if obj[0] == "xref":
|
|
36
|
+
array_text = doc.xref_object(indirect(obj))
|
|
37
|
+
elif obj[0] == "array":
|
|
38
|
+
array_text = obj[1]
|
|
39
|
+
if m := re.search(r"\d+", array_text):
|
|
40
|
+
return get_font_descriptor(doc, int(m.group(0)))
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def get_glyph_bbox(face, g):
|
|
44
|
+
face.load_glyph(g, freetype.FT_LOAD_NO_SCALE)
|
|
45
|
+
cbox = face.glyph.outline.get_bbox()
|
|
46
|
+
return cbox.xMin, cbox.yMin, cbox.xMax, cbox.yMax
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def get_face_bbox(blob):
|
|
50
|
+
face = freetype.Face(BytesIO(blob))
|
|
51
|
+
scale = 1000 / face.units_per_EM
|
|
52
|
+
bbox_list = [get_glyph_bbox(face, code) for code in range(face.num_glyphs)]
|
|
53
|
+
bbox_list = [[v * scale for v in bbox] for bbox in bbox_list]
|
|
54
|
+
return bbox_list
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def get_cidfont_bbox(doc, xref):
|
|
58
|
+
if doc.xref_get_key(xref, "Subtype")[1] == "/Type0":
|
|
59
|
+
if blob := get_descendant_fonts(doc, xref):
|
|
60
|
+
return get_face_bbox(blob)
|