BabelDOC 0.6.0__tar.gz → 0.6.1__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.6.0 → babeldoc-0.6.1}/PKG-INFO +19 -12
- {babeldoc-0.6.0 → babeldoc-0.6.1}/README.md +18 -11
- babeldoc-0.6.1/babeldoc/__init__.py +1 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/const.py +1 -1
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/il_translator.py +14 -10
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/il_translator_llm_only.py +12 -8
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/typesetting.py +29 -7
- babeldoc-0.6.1/babeldoc/format/pdf/new_parser/active_object_projection.py +191 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/object_parser.py +27 -9
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/pdf_token_serializer.py +97 -9
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/tokenizer.py +22 -11
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/xobject_content_execution.py +30 -2
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/translation_config.py +19 -2
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/main.py +1 -1
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/CONTRIBUTING.md +15 -7
- babeldoc-0.6.1/docs/README.md +8 -0
- babeldoc-0.6.1/docs/release-notes/v0.6.1.md +39 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/mkdocs.yml +2 -2
- {babeldoc-0.6.0 → babeldoc-0.6.1}/pyproject.toml +2 -5
- babeldoc-0.6.0/babeldoc/__init__.py +0 -1
- babeldoc-0.6.0/babeldoc/format/pdf/new_parser/active_object_projection.py +0 -78
- babeldoc-0.6.0/docs/README.md +0 -8
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/PULL_REQUEST_TEMPLATE/pr_form.yml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/dependabot.yml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/labels.yml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/release-drafter.yml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/codeql.yml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/docs.yml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/labeler.yml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/lint.yml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/pr-lint.yml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/publish-to-pypi.yml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/test.yml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.gitignore +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/.pre-commit-config.yaml +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/LICENSE +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/assets/assets.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/assets/embedding_assets_metadata.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/asynchronize/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/babeldoc_exception/BabelDOCException.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/babeldoc_exception/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/README.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/base_doclayout.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/doclayout.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout2.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout3.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout4.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout5.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout6.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout7.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout8.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/awlt_char.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/base14.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/cidfont.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/cmap.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/encoding.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/type3.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/utils.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/win_core.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/converter.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/backend/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/backend/pdf_creater.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/frontend/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/frontend/il_creater.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/frontend/il_creater_active.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/frontend/il_creater_active_support.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/frontend/inline_image_params.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/il_version_1.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/il_version_1.rnc +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/il_version_1.rng +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/il_version_1.xsd +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/add_debug_information.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/automatic_term_extractor.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/detect_scanned_file.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/layout_parser.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/paragraph_finder.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/remove_descent.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/styles_and_formulas.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/table_parser.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/extract_char.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/fontmap.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/formular_helper.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/layout_helper.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/matrix_helper.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/mupdf_helper.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/paragraph_helper.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/spatial_analyzer.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/style_helper.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/zstd_helper.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/xml_converter.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/high_level.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/legacy_parse.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_direct_font_backend.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_font_backend.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_font_resource_runtime.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_font_runtime.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_object_backend.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_parse_runtime.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_value_access.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/base_operations.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/bridge_types.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/compat/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/font_spec_primitives.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/font_types.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/glyphs.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/interpreter.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/native_page_execution_session.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/native_page_interpreter.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/native_parse.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/object_model.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/page_api.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/page_content_access.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/page_content_execution.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/page_execution_session.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/page_interpreter.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/prepared_page.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/prepared_page_access.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/prepared_page_debug_access.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/prepared_page_execution.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/prepared_resource_builder.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/pymupdf_candidate_parse.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/pymupdf_object_access.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/pymupdf_page_execution_session.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/pymupdf_page_view_access.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/pymupdf_prepared_page_access.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/raw_page_view.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/resolved_object_access.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/resource_runtime_types.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/resources.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/cid_cmap_runtime.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/cmap_types_runtime.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/data/fontmetrics.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/data/glyphlist.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/data/latin_enc.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/exceptions_runtime.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/font_data_runtime.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/font_encoding_runtime.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/font_unicode_maps.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/font_widths.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/object_primitives_runtime.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/object_stream_runtime.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/ps_primitives_runtime.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/runtime_settings.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/to_unicode_parser_runtime.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/sinks/legacy_ir.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/sinks/native_text.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/state.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/text_positioning.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/parse_only.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/parse_shared.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/pdfinterp.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/result_merger.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/split_manager.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/glossary.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/LICENSE +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/_saslprep.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/arcfour.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/ascii85.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/casting.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/ccitt.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78-EUC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78-EUC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78ms-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78ms-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/83pv-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/83pv-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/90ms-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/90ms-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/90msp-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/90msp-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/90pv-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/90pv-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Add-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Add-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Add-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Add-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/B5-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/B5-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/B5pc-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/B5pc-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/CNS-EUC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/CNS-EUC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/CNS1-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/CNS1-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/CNS2-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/CNS2-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/ETHK-B5-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/ETHK-B5-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/ETen-B5-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/ETen-B5-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/ETenms-B5-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/ETenms-B5-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/EUC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/EUC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Ext-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Ext-RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Ext-RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Ext-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GB-EUC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GB-EUC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GB-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GB-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBK-EUC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBK-EUC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBK2K-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBK2K-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBKp-EUC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBKp-EUC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBT-EUC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBT-EUC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBT-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBT-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBTpc-EUC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBTpc-EUC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBpc-EUC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBpc-EUC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKdla-B5-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKdla-B5-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKdlb-B5-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKdlb-B5-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKgccs-B5-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKgccs-B5-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKm314-B5-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKm314-B5-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKm471-B5-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKm471-B5-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKscs-B5-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKscs-B5-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Hankaku-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Hankaku-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Hiragana-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Hiragana-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSC-EUC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSC-EUC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSC-Johab-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSC-Johab-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSCms-UHC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSCms-UHC-HW-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSCms-UHC-HW-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSCms-UHC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSCpc-EUC-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSCpc-EUC-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Katakana-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Katakana-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/NWP-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/NWP-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/README.txt +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/RKSJ-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/RKSJ-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Roman-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Roman-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UCS2-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UCS2-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UTF16-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UTF16-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UTF8-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UTF8-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UCS2-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UCS2-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UTF16-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UTF16-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UTF8-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UTF8-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UCS2-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UCS2-HW-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UCS2-HW-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UCS2-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UTF16-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UTF16-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UTF8-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UTF8-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS2004-UTF16-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS2004-UTF16-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS2004-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS2004-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS2004-UTF8-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS2004-UTF8-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJISX0213-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJISX0213-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJISX02132004-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJISX02132004-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UCS2-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UCS2-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UTF16-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UTF16-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UTF32-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UTF32-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UTF8-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UTF8-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/WP-Symbol-H.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/WP-Symbol-V.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/to-unicode-Adobe-CNS1.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/to-unicode-Adobe-GB1.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/to-unicode-Adobe-Japan1.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/to-unicode-Adobe-Korea1.pickle.gz +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmapdb.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/converter.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/data_structures.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/encodingdb.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/fontmetrics.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/glyphlist.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/high_level.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/image.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/jbig2.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/latin_enc.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/layout.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/lzw.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfcolor.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfdevice.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfdocument.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfexceptions.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdffont.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfinterp.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfpage.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfparser.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdftypes.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/psexceptions.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/psparser.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/py.typed +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/runlength.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/settings.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/utils.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/progress_monitor.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/__main__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/babeldoc_adapter.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/protocol.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/runner.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/server.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/state.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/translator.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/watermark_transform.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/workroot.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/generate_cmap_metadata.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/generate_font_metadata.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/italic_assistance.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/italic_recognize_tool.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/translator/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/translator/cache.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/translator/translator.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/utils/__init__.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/utils/atomic_integer.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/utils/memory.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/utils/priority_thread_pool_executor.py +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/CODE_OF_CONDUCT.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/CONTRIBUTOR_REWARD.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/README.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/deploy.sh +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/example/demo_glossary.csv +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-banner.png +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-big-logo.png +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-contributor_reward_example.png +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-preview.gif +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-small-logo.png +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/index.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/intro-to-pdf-object.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/release-notes/v0.6.0.md +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/requirements.txt +0 -0
- {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/supported_languages.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: BabelDOC
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.1
|
|
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
|
|
@@ -53,10 +53,7 @@ Provides-Extra: memray
|
|
|
53
53
|
Requires-Dist: memray>=1.17.1; extra == 'memray'
|
|
54
54
|
Description-Content-Type: text/markdown
|
|
55
55
|
|
|
56
|
-
<!-- # Yet Another Document Translator -->
|
|
57
|
-
|
|
58
56
|
<div align="center">
|
|
59
|
-
<!-- <img src="https://s.immersivetranslate.com/assets/r2-uploads/images/babeldoc-banner.png" width="320px" alt="YADT"/> -->
|
|
60
57
|
|
|
61
58
|
<br/>
|
|
62
59
|
|
|
@@ -119,11 +116,11 @@ See details: [EN](https://github.com/funstory-ai/jobs) | [ZH](https://github.com
|
|
|
119
116
|
|
|
120
117
|
### Install from PyPI
|
|
121
118
|
|
|
122
|
-
We recommend using the Tool feature of [uv](https://github.com/astral-sh/uv) to install
|
|
119
|
+
We recommend using the Tool feature of [uv](https://github.com/astral-sh/uv) to install BabelDOC.
|
|
123
120
|
|
|
124
121
|
1. First, you need to refer to [uv installation](https://github.com/astral-sh/uv#installation) to install uv and set up the `PATH` environment variable as prompted.
|
|
125
122
|
|
|
126
|
-
2. Use the following command to install
|
|
123
|
+
2. Use the following command to install BabelDOC:
|
|
127
124
|
|
|
128
125
|
```bash
|
|
129
126
|
uv tool install --python 3.12 BabelDOC
|
|
@@ -146,7 +143,7 @@ We still recommend using [uv](https://github.com/astral-sh/uv) to manage virtual
|
|
|
146
143
|
|
|
147
144
|
1. First, you need to refer to [uv installation](https://github.com/astral-sh/uv#installation) to install uv and set up the `PATH` environment variable as prompted.
|
|
148
145
|
|
|
149
|
-
2. Use the following command to install
|
|
146
|
+
2. Use the following command to install BabelDOC:
|
|
150
147
|
|
|
151
148
|
```bash
|
|
152
149
|
# clone the project
|
|
@@ -290,7 +287,7 @@ uv run babeldoc --files example.pdf --files example2.pdf --openai --openai-model
|
|
|
290
287
|
### Output Control
|
|
291
288
|
|
|
292
289
|
- `--output`, `-o`: Output directory for translated files. If not set, use current working directory.
|
|
293
|
-
- `--debug`: Enable debug logging level and export detailed intermediate results in `~/.cache/
|
|
290
|
+
- `--debug`: Enable debug logging level and export detailed intermediate results in `~/.cache/babeldoc/working`.
|
|
294
291
|
- `--report-interval`: Progress report interval in seconds (default: 0.1).
|
|
295
292
|
|
|
296
293
|
### General Options
|
|
@@ -393,7 +390,7 @@ There are a lot projects and teams working on to make document editing and trans
|
|
|
393
390
|
- [mathpix](https://mathpix.com/)
|
|
394
391
|
- [Doc2X](https://doc2x.noedgeai.com/)
|
|
395
392
|
- [minerU](https://github.com/opendatalab/MinerU)
|
|
396
|
-
- [PDFMathTranslate](https://github.com/
|
|
393
|
+
- [PDFMathTranslate](https://github.com/PDFMathTranslate/PDFMathTranslate)
|
|
397
394
|
|
|
398
395
|
There are also some solutions to solve specific parts of the problem like:
|
|
399
396
|
|
|
@@ -457,15 +454,25 @@ This project uses a combination of [Semantic Versioning](https://semver.org/) an
|
|
|
457
454
|
|
|
458
455
|
## How to Contribute
|
|
459
456
|
|
|
460
|
-
|
|
457
|
+
BabelDOC is currently developed in a maintainer-led mode. Bug reports,
|
|
458
|
+
reproducible PDFs, documentation fixes, and small compatibility fixes are
|
|
459
|
+
welcome. For changes to parsing, rendering, translation, or service integration
|
|
460
|
+
behavior, please open an issue for discussion before submitting a pull request.
|
|
461
461
|
|
|
462
|
-
Everyone interacting in
|
|
462
|
+
Everyone interacting in BabelDOC and its sub-projects' codebases, issue trackers, chat rooms, and mailing lists is expected to follow the BabelDOC [Code of Conduct](https://github.com/funstory-ai/BabelDOC/blob/main/docs/CODE_OF_CONDUCT.md).
|
|
463
463
|
|
|
464
464
|
[Immersive Translation](https://immersivetranslate.com) sponsors monthly Pro membership redemption codes for active contributors to this project, see details at: [CONTRIBUTOR_REWARD.md](https://github.com/funstory-ai/BabelDOC/blob/main/docs/CONTRIBUTOR_REWARD.md)
|
|
465
465
|
|
|
466
466
|
## Acknowledgements
|
|
467
467
|
|
|
468
|
-
|
|
468
|
+
BabelDOC is still at an early stage of development, and many parts are not as
|
|
469
|
+
polished as we would like yet. We sincerely appreciate every bug report,
|
|
470
|
+
criticism, suggestion, reproducible PDF, downstream integration experience, and
|
|
471
|
+
contribution from people working on BabelDOC and related upstream/downstream
|
|
472
|
+
projects. We will keep iterating on BabelDOC, fixing bugs, and making it better
|
|
473
|
+
step by step.
|
|
474
|
+
|
|
475
|
+
- [PDFMathTranslate](https://github.com/PDFMathTranslate/PDFMathTranslate)
|
|
469
476
|
- [DocLayout-YOLO](https://github.com/opendatalab/DocLayout-YOLO)
|
|
470
477
|
- [pdfminer](https://github.com/pdfminer/pdfminer.six)
|
|
471
478
|
- [PyMuPDF](https://github.com/pymupdf/PyMuPDF)
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
<!-- # Yet Another Document Translator -->
|
|
2
|
-
|
|
3
1
|
<div align="center">
|
|
4
|
-
<!-- <img src="https://s.immersivetranslate.com/assets/r2-uploads/images/babeldoc-banner.png" width="320px" alt="YADT"/> -->
|
|
5
2
|
|
|
6
3
|
<br/>
|
|
7
4
|
|
|
@@ -64,11 +61,11 @@ See details: [EN](https://github.com/funstory-ai/jobs) | [ZH](https://github.com
|
|
|
64
61
|
|
|
65
62
|
### Install from PyPI
|
|
66
63
|
|
|
67
|
-
We recommend using the Tool feature of [uv](https://github.com/astral-sh/uv) to install
|
|
64
|
+
We recommend using the Tool feature of [uv](https://github.com/astral-sh/uv) to install BabelDOC.
|
|
68
65
|
|
|
69
66
|
1. First, you need to refer to [uv installation](https://github.com/astral-sh/uv#installation) to install uv and set up the `PATH` environment variable as prompted.
|
|
70
67
|
|
|
71
|
-
2. Use the following command to install
|
|
68
|
+
2. Use the following command to install BabelDOC:
|
|
72
69
|
|
|
73
70
|
```bash
|
|
74
71
|
uv tool install --python 3.12 BabelDOC
|
|
@@ -91,7 +88,7 @@ We still recommend using [uv](https://github.com/astral-sh/uv) to manage virtual
|
|
|
91
88
|
|
|
92
89
|
1. First, you need to refer to [uv installation](https://github.com/astral-sh/uv#installation) to install uv and set up the `PATH` environment variable as prompted.
|
|
93
90
|
|
|
94
|
-
2. Use the following command to install
|
|
91
|
+
2. Use the following command to install BabelDOC:
|
|
95
92
|
|
|
96
93
|
```bash
|
|
97
94
|
# clone the project
|
|
@@ -235,7 +232,7 @@ uv run babeldoc --files example.pdf --files example2.pdf --openai --openai-model
|
|
|
235
232
|
### Output Control
|
|
236
233
|
|
|
237
234
|
- `--output`, `-o`: Output directory for translated files. If not set, use current working directory.
|
|
238
|
-
- `--debug`: Enable debug logging level and export detailed intermediate results in `~/.cache/
|
|
235
|
+
- `--debug`: Enable debug logging level and export detailed intermediate results in `~/.cache/babeldoc/working`.
|
|
239
236
|
- `--report-interval`: Progress report interval in seconds (default: 0.1).
|
|
240
237
|
|
|
241
238
|
### General Options
|
|
@@ -338,7 +335,7 @@ There are a lot projects and teams working on to make document editing and trans
|
|
|
338
335
|
- [mathpix](https://mathpix.com/)
|
|
339
336
|
- [Doc2X](https://doc2x.noedgeai.com/)
|
|
340
337
|
- [minerU](https://github.com/opendatalab/MinerU)
|
|
341
|
-
- [PDFMathTranslate](https://github.com/
|
|
338
|
+
- [PDFMathTranslate](https://github.com/PDFMathTranslate/PDFMathTranslate)
|
|
342
339
|
|
|
343
340
|
There are also some solutions to solve specific parts of the problem like:
|
|
344
341
|
|
|
@@ -402,15 +399,25 @@ This project uses a combination of [Semantic Versioning](https://semver.org/) an
|
|
|
402
399
|
|
|
403
400
|
## How to Contribute
|
|
404
401
|
|
|
405
|
-
|
|
402
|
+
BabelDOC is currently developed in a maintainer-led mode. Bug reports,
|
|
403
|
+
reproducible PDFs, documentation fixes, and small compatibility fixes are
|
|
404
|
+
welcome. For changes to parsing, rendering, translation, or service integration
|
|
405
|
+
behavior, please open an issue for discussion before submitting a pull request.
|
|
406
406
|
|
|
407
|
-
Everyone interacting in
|
|
407
|
+
Everyone interacting in BabelDOC and its sub-projects' codebases, issue trackers, chat rooms, and mailing lists is expected to follow the BabelDOC [Code of Conduct](https://github.com/funstory-ai/BabelDOC/blob/main/docs/CODE_OF_CONDUCT.md).
|
|
408
408
|
|
|
409
409
|
[Immersive Translation](https://immersivetranslate.com) sponsors monthly Pro membership redemption codes for active contributors to this project, see details at: [CONTRIBUTOR_REWARD.md](https://github.com/funstory-ai/BabelDOC/blob/main/docs/CONTRIBUTOR_REWARD.md)
|
|
410
410
|
|
|
411
411
|
## Acknowledgements
|
|
412
412
|
|
|
413
|
-
|
|
413
|
+
BabelDOC is still at an early stage of development, and many parts are not as
|
|
414
|
+
polished as we would like yet. We sincerely appreciate every bug report,
|
|
415
|
+
criticism, suggestion, reproducible PDF, downstream integration experience, and
|
|
416
|
+
contribution from people working on BabelDOC and related upstream/downstream
|
|
417
|
+
projects. We will keep iterating on BabelDOC, fixing bugs, and making it better
|
|
418
|
+
step by step.
|
|
419
|
+
|
|
420
|
+
- [PDFMathTranslate](https://github.com/PDFMathTranslate/PDFMathTranslate)
|
|
414
421
|
- [DocLayout-YOLO](https://github.com/opendatalab/DocLayout-YOLO)
|
|
415
422
|
- [pdfminer](https://github.com/pdfminer/pdfminer.six)
|
|
416
423
|
- [PyMuPDF](https://github.com/pymupdf/PyMuPDF)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.6.1"
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import copy
|
|
4
3
|
import json
|
|
5
4
|
import logging
|
|
6
5
|
import re
|
|
@@ -40,6 +39,7 @@ from babeldoc.format.pdf.document_il.utils.paragraph_helper import (
|
|
|
40
39
|
is_pure_numeric_paragraph,
|
|
41
40
|
)
|
|
42
41
|
from babeldoc.format.pdf.document_il.utils.style_helper import GRAY80
|
|
42
|
+
from babeldoc.format.pdf.translation_config import TitleContextSnapshot
|
|
43
43
|
from babeldoc.format.pdf.translation_config import TranslationConfig
|
|
44
44
|
from babeldoc.translator.translator import BaseTranslator
|
|
45
45
|
from babeldoc.utils.priority_thread_pool_executor import PriorityThreadPoolExecutor
|
|
@@ -393,9 +393,11 @@ class ILTranslator:
|
|
|
393
393
|
# Try to find the first title paragraph
|
|
394
394
|
title_paragraph = self.find_title_paragraph(docs)
|
|
395
395
|
self.translation_config.shared_context_cross_split_part.first_paragraph = (
|
|
396
|
-
|
|
396
|
+
self.shared_context_cross_split_part.snapshot_title_paragraph(
|
|
397
|
+
title_paragraph
|
|
398
|
+
)
|
|
397
399
|
)
|
|
398
|
-
self.translation_config.shared_context_cross_split_part.recent_title_paragraph =
|
|
400
|
+
self.translation_config.shared_context_cross_split_part.recent_title_paragraph = self.shared_context_cross_split_part.snapshot_title_paragraph(
|
|
399
401
|
title_paragraph
|
|
400
402
|
)
|
|
401
403
|
if title_paragraph:
|
|
@@ -460,7 +462,9 @@ class ILTranslator:
|
|
|
460
462
|
paragraph_token_count = self.calc_token_count(paragraph.unicode)
|
|
461
463
|
if paragraph.layout_label == "title":
|
|
462
464
|
self.shared_context_cross_split_part.recent_title_paragraph = (
|
|
463
|
-
|
|
465
|
+
self.shared_context_cross_split_part.snapshot_title_paragraph(
|
|
466
|
+
paragraph
|
|
467
|
+
)
|
|
464
468
|
)
|
|
465
469
|
executor.submit(
|
|
466
470
|
self.translate_paragraph,
|
|
@@ -1037,8 +1041,8 @@ class ILTranslator:
|
|
|
1037
1041
|
|
|
1038
1042
|
def _build_context_block(
|
|
1039
1043
|
self,
|
|
1040
|
-
title_paragraph:
|
|
1041
|
-
local_title_paragraph:
|
|
1044
|
+
title_paragraph: TitleContextSnapshot | None = None,
|
|
1045
|
+
local_title_paragraph: TitleContextSnapshot | None = None,
|
|
1042
1046
|
translate_input: TranslateInput | None = None,
|
|
1043
1047
|
) -> str:
|
|
1044
1048
|
"""Build the context/hints block for LLM prompt.
|
|
@@ -1130,8 +1134,8 @@ class ILTranslator:
|
|
|
1130
1134
|
def generate_prompt_for_llm(
|
|
1131
1135
|
self,
|
|
1132
1136
|
text: str,
|
|
1133
|
-
title_paragraph:
|
|
1134
|
-
local_title_paragraph:
|
|
1137
|
+
title_paragraph: TitleContextSnapshot | None = None,
|
|
1138
|
+
local_title_paragraph: TitleContextSnapshot | None = None,
|
|
1135
1139
|
translate_input: TranslateInput | None = None,
|
|
1136
1140
|
):
|
|
1137
1141
|
"""Generate LLM prompt using template-based approach.
|
|
@@ -1216,8 +1220,8 @@ class ILTranslator:
|
|
|
1216
1220
|
page_font_map: dict[str, PdfFont] = None,
|
|
1217
1221
|
xobj_font_map: dict[int, dict[str, PdfFont]] = None,
|
|
1218
1222
|
paragraph_token_count: int = 0,
|
|
1219
|
-
title_paragraph:
|
|
1220
|
-
local_title_paragraph:
|
|
1223
|
+
title_paragraph: TitleContextSnapshot | None = None,
|
|
1224
|
+
local_title_paragraph: TitleContextSnapshot | None = None,
|
|
1221
1225
|
):
|
|
1222
1226
|
"""Translate a paragraph using pre and post processing functions."""
|
|
1223
1227
|
self.translation_config.raise_if_cancelled()
|
{babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/il_translator_llm_only.py
RENAMED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import copy
|
|
2
1
|
import json
|
|
3
2
|
import logging
|
|
4
3
|
import re
|
|
@@ -30,6 +29,7 @@ from babeldoc.format.pdf.document_il.utils.paragraph_helper import (
|
|
|
30
29
|
from babeldoc.format.pdf.document_il.utils.paragraph_helper import (
|
|
31
30
|
is_pure_numeric_paragraph,
|
|
32
31
|
)
|
|
32
|
+
from babeldoc.format.pdf.translation_config import TitleContextSnapshot
|
|
33
33
|
from babeldoc.format.pdf.translation_config import TranslationConfig
|
|
34
34
|
from babeldoc.translator.translator import BaseTranslator
|
|
35
35
|
from babeldoc.utils.priority_thread_pool_executor import PriorityThreadPoolExecutor
|
|
@@ -181,9 +181,11 @@ class ILTranslatorLLMOnly:
|
|
|
181
181
|
# Try to find the first title paragraph
|
|
182
182
|
title_paragraph = self.find_title_paragraph(docs)
|
|
183
183
|
self.translation_config.shared_context_cross_split_part.first_paragraph = (
|
|
184
|
-
|
|
184
|
+
self.shared_context_cross_split_part.snapshot_title_paragraph(
|
|
185
|
+
title_paragraph
|
|
186
|
+
)
|
|
185
187
|
)
|
|
186
|
-
self.translation_config.shared_context_cross_split_part.recent_title_paragraph =
|
|
188
|
+
self.translation_config.shared_context_cross_split_part.recent_title_paragraph = self.shared_context_cross_split_part.snapshot_title_paragraph(
|
|
187
189
|
title_paragraph
|
|
188
190
|
)
|
|
189
191
|
if title_paragraph:
|
|
@@ -582,7 +584,9 @@ class ILTranslatorLLMOnly:
|
|
|
582
584
|
translated_ids.add(id(paragraph))
|
|
583
585
|
if paragraph.layout_label == "title":
|
|
584
586
|
self.shared_context_cross_split_part.recent_title_paragraph = (
|
|
585
|
-
|
|
587
|
+
self.shared_context_cross_split_part.snapshot_title_paragraph(
|
|
588
|
+
paragraph
|
|
589
|
+
)
|
|
586
590
|
)
|
|
587
591
|
|
|
588
592
|
if total_token_count > 200 or len(paragraphs) > 5:
|
|
@@ -625,8 +629,8 @@ class ILTranslatorLLMOnly:
|
|
|
625
629
|
pbar: tqdm | None = None,
|
|
626
630
|
page_font_map: dict[str, PdfFont] = None,
|
|
627
631
|
xobj_font_map: dict[int, dict[str, PdfFont]] = None,
|
|
628
|
-
title_paragraph:
|
|
629
|
-
local_title_paragraph:
|
|
632
|
+
title_paragraph: TitleContextSnapshot | None = None,
|
|
633
|
+
local_title_paragraph: TitleContextSnapshot | None = None,
|
|
630
634
|
executor: PriorityThreadPoolExecutor | None = None,
|
|
631
635
|
paragraph_token_count: int = 0,
|
|
632
636
|
mp_id: int = 0,
|
|
@@ -882,8 +886,8 @@ class ILTranslatorLLMOnly:
|
|
|
882
886
|
def _build_llm_prompt(
|
|
883
887
|
self,
|
|
884
888
|
json_input_str: str,
|
|
885
|
-
title_paragraph:
|
|
886
|
-
local_title_paragraph:
|
|
889
|
+
title_paragraph: TitleContextSnapshot | None,
|
|
890
|
+
local_title_paragraph: TitleContextSnapshot | None,
|
|
887
891
|
batch_text_for_glossary_matching: str,
|
|
888
892
|
) -> str:
|
|
889
893
|
"""Build LLM prompt using a single template for easier maintenance."""
|
|
@@ -664,9 +664,22 @@ class TypesettingUnit:
|
|
|
664
664
|
scale: float,
|
|
665
665
|
):
|
|
666
666
|
"""Transform a curve for formula relocation."""
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
667
|
+
new_curve = PdfCurve(
|
|
668
|
+
box=curve.box,
|
|
669
|
+
graphic_state=curve.graphic_state,
|
|
670
|
+
pdf_path=list(curve.pdf_path),
|
|
671
|
+
pdf_original_path=list(curve.pdf_original_path),
|
|
672
|
+
pdf_original_path_primitive=curve.pdf_original_path_primitive,
|
|
673
|
+
debug_info=curve.debug_info,
|
|
674
|
+
fill_background=curve.fill_background,
|
|
675
|
+
stroke_path=curve.stroke_path,
|
|
676
|
+
evenodd=curve.evenodd,
|
|
677
|
+
passthrough_paint=curve.passthrough_paint,
|
|
678
|
+
xobj_id=curve.xobj_id,
|
|
679
|
+
render_order=curve.render_order,
|
|
680
|
+
ctm=list(curve.ctm),
|
|
681
|
+
relocation_transform=list(curve.relocation_transform),
|
|
682
|
+
)
|
|
670
683
|
|
|
671
684
|
if new_curve.box:
|
|
672
685
|
# Calculate relative position to formula's original position (same as chars)
|
|
@@ -723,9 +736,18 @@ class TypesettingUnit:
|
|
|
723
736
|
scale: float,
|
|
724
737
|
):
|
|
725
738
|
"""Transform a form for formula relocation."""
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
739
|
+
new_form = PdfForm(
|
|
740
|
+
box=form.box,
|
|
741
|
+
graphic_state=form.graphic_state,
|
|
742
|
+
pdf_matrix=form.pdf_matrix,
|
|
743
|
+
pdf_affine_transform=form.pdf_affine_transform,
|
|
744
|
+
pdf_form_subtype=form.pdf_form_subtype,
|
|
745
|
+
xobj_id=form.xobj_id,
|
|
746
|
+
ctm=list(form.ctm),
|
|
747
|
+
relocation_transform=list(form.relocation_transform),
|
|
748
|
+
render_order=form.render_order,
|
|
749
|
+
form_type=form.form_type,
|
|
750
|
+
)
|
|
729
751
|
|
|
730
752
|
if new_form.box:
|
|
731
753
|
# Calculate relative position to formula's original position (same as chars)
|
|
@@ -1203,7 +1225,7 @@ class Typesetting:
|
|
|
1203
1225
|
font_size=6,
|
|
1204
1226
|
graphic_state=il_version_1.GraphicState(),
|
|
1205
1227
|
)
|
|
1206
|
-
text = f"本文档由 funstory.ai 的开源 PDF 翻译库 BabelDOC {WATERMARK_VERSION} (
|
|
1228
|
+
text = f"本文档由 funstory.ai 的开源 PDF 翻译库 BabelDOC {WATERMARK_VERSION} (https://github.com/funstory-ai/BabelDOC) 翻译,本仓库正在积极的建设当中,欢迎 star 和关注。"
|
|
1207
1229
|
if self.translation_config.debug:
|
|
1208
1230
|
text += "\n 当前为 DEBUG 模式,将显示更多辅助信息。请注意,部分框的位置对应原文,但在译文中可能不正确。"
|
|
1209
1231
|
page.pdf_paragraph.append(
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Callable
|
|
4
|
+
|
|
5
|
+
from babeldoc.format.pdf.new_parser.active_object_backend import create_active_literal
|
|
6
|
+
from babeldoc.format.pdf.new_parser.active_object_backend import create_active_stream
|
|
7
|
+
from babeldoc.format.pdf.new_parser.active_value_access import obj_ref_id
|
|
8
|
+
from babeldoc.format.pdf.new_parser.object_model import PdfObjectStream
|
|
9
|
+
|
|
10
|
+
MAX_FONT_SPEC_PROJECTION_DEPTH = 128
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class FontSpecProjectionError(ValueError):
|
|
14
|
+
pass
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def project_font_spec(
|
|
18
|
+
spec: dict[object, object],
|
|
19
|
+
*,
|
|
20
|
+
resolve_indirect: Callable[[object], object] | None = None,
|
|
21
|
+
max_depth: int = MAX_FONT_SPEC_PROJECTION_DEPTH,
|
|
22
|
+
) -> dict[object, object]:
|
|
23
|
+
resolved = _resolve_all(
|
|
24
|
+
spec,
|
|
25
|
+
resolve_indirect or (lambda value: value),
|
|
26
|
+
max_depth=max_depth,
|
|
27
|
+
)
|
|
28
|
+
projected = _project_value(resolved, max_depth=max_depth)
|
|
29
|
+
if not isinstance(projected, dict):
|
|
30
|
+
raise TypeError(f"Projected font spec must be dict, got {type(projected)}")
|
|
31
|
+
return projected
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _check_depth(depth: int, max_depth: int) -> None:
|
|
35
|
+
if depth > max_depth:
|
|
36
|
+
msg = f"Font spec projection exceeded max depth {max_depth}"
|
|
37
|
+
raise FontSpecProjectionError(msg)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _resolve_all(
|
|
41
|
+
value: object,
|
|
42
|
+
resolve_indirect: Callable[[object], object],
|
|
43
|
+
*,
|
|
44
|
+
max_depth: int,
|
|
45
|
+
depth: int = 0,
|
|
46
|
+
active_refs: frozenset[int] = frozenset(),
|
|
47
|
+
active_containers: frozenset[int] = frozenset(),
|
|
48
|
+
) -> object:
|
|
49
|
+
_check_depth(depth, max_depth)
|
|
50
|
+
ref_id = obj_ref_id(value)
|
|
51
|
+
if ref_id is not None:
|
|
52
|
+
if ref_id in active_refs:
|
|
53
|
+
msg = f"Recursive font spec indirect reference {ref_id}"
|
|
54
|
+
raise FontSpecProjectionError(msg)
|
|
55
|
+
resolved = resolve_indirect(value)
|
|
56
|
+
if resolved is value:
|
|
57
|
+
return value
|
|
58
|
+
return _resolve_all(
|
|
59
|
+
resolved,
|
|
60
|
+
resolve_indirect,
|
|
61
|
+
max_depth=max_depth,
|
|
62
|
+
depth=depth + 1,
|
|
63
|
+
active_refs=active_refs | {ref_id},
|
|
64
|
+
active_containers=active_containers,
|
|
65
|
+
)
|
|
66
|
+
if isinstance(value, list):
|
|
67
|
+
container_id = id(value)
|
|
68
|
+
if container_id in active_containers:
|
|
69
|
+
msg = "Recursive font spec list container"
|
|
70
|
+
raise FontSpecProjectionError(msg)
|
|
71
|
+
return [
|
|
72
|
+
_resolve_all(
|
|
73
|
+
item,
|
|
74
|
+
resolve_indirect,
|
|
75
|
+
max_depth=max_depth,
|
|
76
|
+
depth=depth + 1,
|
|
77
|
+
active_refs=active_refs,
|
|
78
|
+
active_containers=active_containers | {container_id},
|
|
79
|
+
)
|
|
80
|
+
for item in value
|
|
81
|
+
]
|
|
82
|
+
if isinstance(value, dict):
|
|
83
|
+
container_id = id(value)
|
|
84
|
+
if container_id in active_containers:
|
|
85
|
+
msg = "Recursive font spec dict container"
|
|
86
|
+
raise FontSpecProjectionError(msg)
|
|
87
|
+
return {
|
|
88
|
+
key: _resolve_all(
|
|
89
|
+
item,
|
|
90
|
+
resolve_indirect,
|
|
91
|
+
max_depth=max_depth,
|
|
92
|
+
depth=depth + 1,
|
|
93
|
+
active_refs=active_refs,
|
|
94
|
+
active_containers=active_containers | {container_id},
|
|
95
|
+
)
|
|
96
|
+
for key, item in value.items()
|
|
97
|
+
}
|
|
98
|
+
if isinstance(value, PdfObjectStream):
|
|
99
|
+
container_id = id(value)
|
|
100
|
+
if container_id in active_containers:
|
|
101
|
+
msg = "Recursive font spec stream container"
|
|
102
|
+
raise FontSpecProjectionError(msg)
|
|
103
|
+
return PdfObjectStream(
|
|
104
|
+
attrs={
|
|
105
|
+
key: _resolve_all(
|
|
106
|
+
item,
|
|
107
|
+
resolve_indirect,
|
|
108
|
+
max_depth=max_depth,
|
|
109
|
+
depth=depth + 1,
|
|
110
|
+
active_refs=active_refs,
|
|
111
|
+
active_containers=active_containers | {container_id},
|
|
112
|
+
)
|
|
113
|
+
for key, item in value.attrs.items()
|
|
114
|
+
},
|
|
115
|
+
rawdata=value.rawdata,
|
|
116
|
+
objid=value.objid,
|
|
117
|
+
decoded=value.decoded,
|
|
118
|
+
)
|
|
119
|
+
return value
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def _project_value(
|
|
123
|
+
value: object,
|
|
124
|
+
*,
|
|
125
|
+
max_depth: int,
|
|
126
|
+
depth: int = 0,
|
|
127
|
+
active_containers: frozenset[int] = frozenset(),
|
|
128
|
+
) -> object:
|
|
129
|
+
_check_depth(depth, max_depth)
|
|
130
|
+
if isinstance(value, str):
|
|
131
|
+
if value.isascii():
|
|
132
|
+
return create_active_literal(value)
|
|
133
|
+
return create_active_literal(value.encode("latin-1"))
|
|
134
|
+
if isinstance(value, list):
|
|
135
|
+
container_id = id(value)
|
|
136
|
+
if container_id in active_containers:
|
|
137
|
+
msg = "Recursive projected font spec list container"
|
|
138
|
+
raise FontSpecProjectionError(msg)
|
|
139
|
+
return [
|
|
140
|
+
_project_value(
|
|
141
|
+
item,
|
|
142
|
+
max_depth=max_depth,
|
|
143
|
+
depth=depth + 1,
|
|
144
|
+
active_containers=active_containers | {container_id},
|
|
145
|
+
)
|
|
146
|
+
for item in value
|
|
147
|
+
]
|
|
148
|
+
if isinstance(value, dict):
|
|
149
|
+
container_id = id(value)
|
|
150
|
+
if container_id in active_containers:
|
|
151
|
+
msg = "Recursive projected font spec dict container"
|
|
152
|
+
raise FontSpecProjectionError(msg)
|
|
153
|
+
return {
|
|
154
|
+
key: _project_value(
|
|
155
|
+
item,
|
|
156
|
+
max_depth=max_depth,
|
|
157
|
+
depth=depth + 1,
|
|
158
|
+
active_containers=active_containers | {container_id},
|
|
159
|
+
)
|
|
160
|
+
for key, item in value.items()
|
|
161
|
+
}
|
|
162
|
+
if isinstance(value, PdfObjectStream):
|
|
163
|
+
container_id = id(value)
|
|
164
|
+
if container_id in active_containers:
|
|
165
|
+
msg = "Recursive projected font spec stream container"
|
|
166
|
+
raise FontSpecProjectionError(msg)
|
|
167
|
+
attrs = {
|
|
168
|
+
key: _project_value(
|
|
169
|
+
item,
|
|
170
|
+
max_depth=max_depth,
|
|
171
|
+
depth=depth + 1,
|
|
172
|
+
active_containers=active_containers | {container_id},
|
|
173
|
+
)
|
|
174
|
+
for key, item in _project_stream_attrs(value).items()
|
|
175
|
+
}
|
|
176
|
+
stream = create_active_stream(attrs, value.rawdata)
|
|
177
|
+
if value.objid is not None:
|
|
178
|
+
stream.set_objid(value.objid, 0)
|
|
179
|
+
return stream
|
|
180
|
+
return value
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def _project_stream_attrs(value: PdfObjectStream) -> dict[object, object]:
|
|
184
|
+
if not value.decoded:
|
|
185
|
+
return value.attrs
|
|
186
|
+
|
|
187
|
+
return {
|
|
188
|
+
key: item
|
|
189
|
+
for key, item in value.attrs.items()
|
|
190
|
+
if key not in {"Filter", "DecodeParms", "F", "FDecodeParms", "DL", "Length"}
|
|
191
|
+
}
|
|
@@ -10,6 +10,8 @@ from babeldoc.format.pdf.new_parser.tokenizer import PdfString
|
|
|
10
10
|
from babeldoc.format.pdf.new_parser.tokenizer import TokenizerError
|
|
11
11
|
from babeldoc.format.pdf.new_parser.tokenizer import decode_pdf_name
|
|
12
12
|
|
|
13
|
+
MAX_OBJECT_NESTING_DEPTH = 128
|
|
14
|
+
|
|
13
15
|
|
|
14
16
|
class ObjectParserError(ValueError):
|
|
15
17
|
pass
|
|
@@ -18,6 +20,7 @@ class ObjectParserError(ValueError):
|
|
|
18
20
|
@dataclass(slots=True)
|
|
19
21
|
class _Parser:
|
|
20
22
|
lexer: ContentStreamTokenizer
|
|
23
|
+
max_nesting_depth: int = MAX_OBJECT_NESTING_DEPTH
|
|
21
24
|
|
|
22
25
|
def parse(self) -> object:
|
|
23
26
|
value = self._parse_value()
|
|
@@ -27,16 +30,22 @@ class _Parser:
|
|
|
27
30
|
raise ObjectParserError(f"Trailing data after object: {tail!r}")
|
|
28
31
|
return value
|
|
29
32
|
|
|
30
|
-
def
|
|
33
|
+
def _check_nesting_depth(self, depth: int) -> None:
|
|
34
|
+
if depth > self.max_nesting_depth:
|
|
35
|
+
msg = f"PDF object nesting exceeded max depth {self.max_nesting_depth}"
|
|
36
|
+
raise ObjectParserError(msg)
|
|
37
|
+
|
|
38
|
+
def _parse_value(self, *, depth: int = 0) -> object:
|
|
39
|
+
self._check_nesting_depth(depth)
|
|
31
40
|
self.lexer._skip_space_and_comments() # noqa: SLF001
|
|
32
41
|
if self.lexer.pos >= len(self.lexer.data):
|
|
33
42
|
raise ObjectParserError("Unexpected EOF while parsing object.")
|
|
34
43
|
|
|
35
44
|
token = self.lexer.data[self.lexer.pos : self.lexer.pos + 1]
|
|
36
45
|
if token == b"<" and self.lexer._peek(2) == b"<<": # noqa: SLF001
|
|
37
|
-
return self._parse_dict()
|
|
46
|
+
return self._parse_dict(depth=depth + 1)
|
|
38
47
|
if token == b"[":
|
|
39
|
-
return self._parse_array()
|
|
48
|
+
return self._parse_array(depth=depth + 1)
|
|
40
49
|
if token == b"/":
|
|
41
50
|
return decode_pdf_name(self.lexer._read_name().value) # noqa: SLF001
|
|
42
51
|
if token == b"(":
|
|
@@ -47,7 +56,8 @@ class _Parser:
|
|
|
47
56
|
raw = self.lexer._read_number_or_keyword() # noqa: SLF001
|
|
48
57
|
return self._maybe_indirect_ref(raw)
|
|
49
58
|
|
|
50
|
-
def _parse_array(self) -> list[object]:
|
|
59
|
+
def _parse_array(self, *, depth: int = 0) -> list[object]:
|
|
60
|
+
self._check_nesting_depth(depth)
|
|
51
61
|
if self.lexer.data[self.lexer.pos : self.lexer.pos + 1] != b"[":
|
|
52
62
|
raise ObjectParserError("Array must start with '['.")
|
|
53
63
|
self.lexer.pos += 1
|
|
@@ -59,9 +69,10 @@ class _Parser:
|
|
|
59
69
|
if self.lexer.data[self.lexer.pos : self.lexer.pos + 1] == b"]":
|
|
60
70
|
self.lexer.pos += 1
|
|
61
71
|
return items
|
|
62
|
-
items.append(self._parse_value())
|
|
72
|
+
items.append(self._parse_value(depth=depth))
|
|
63
73
|
|
|
64
|
-
def _parse_dict(self) -> dict[str, object]:
|
|
74
|
+
def _parse_dict(self, *, depth: int = 0) -> dict[str, object]:
|
|
75
|
+
self._check_nesting_depth(depth)
|
|
65
76
|
if self.lexer._peek(2) != b"<<": # noqa: SLF001
|
|
66
77
|
raise ObjectParserError("Dictionary must start with '<<'.")
|
|
67
78
|
self.lexer.pos += 2
|
|
@@ -77,7 +88,7 @@ class _Parser:
|
|
|
77
88
|
key = self.lexer._read_name() # noqa: SLF001
|
|
78
89
|
if not isinstance(key, PdfName):
|
|
79
90
|
raise ObjectParserError(f"Dictionary key must be PdfName, got {key!r}")
|
|
80
|
-
items[key.value] = self._parse_value()
|
|
91
|
+
items[key.value] = self._parse_value(depth=depth)
|
|
81
92
|
|
|
82
93
|
def _maybe_indirect_ref(self, first: object) -> object:
|
|
83
94
|
if not isinstance(first, int):
|
|
@@ -106,8 +117,15 @@ class _Parser:
|
|
|
106
117
|
return value
|
|
107
118
|
|
|
108
119
|
|
|
109
|
-
def parse_object_bytes(
|
|
110
|
-
|
|
120
|
+
def parse_object_bytes(
|
|
121
|
+
data: bytes,
|
|
122
|
+
*,
|
|
123
|
+
max_nesting_depth: int = MAX_OBJECT_NESTING_DEPTH,
|
|
124
|
+
) -> object:
|
|
125
|
+
parser = _Parser(
|
|
126
|
+
ContentStreamTokenizer(data, max_nesting_depth=max_nesting_depth),
|
|
127
|
+
max_nesting_depth=max_nesting_depth,
|
|
128
|
+
)
|
|
111
129
|
try:
|
|
112
130
|
return parser.parse()
|
|
113
131
|
except TokenizerError as exc:
|