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.
Files changed (400) hide show
  1. {babeldoc-0.6.0 → babeldoc-0.6.1}/PKG-INFO +19 -12
  2. {babeldoc-0.6.0 → babeldoc-0.6.1}/README.md +18 -11
  3. babeldoc-0.6.1/babeldoc/__init__.py +1 -0
  4. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/const.py +1 -1
  5. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/il_translator.py +14 -10
  6. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/il_translator_llm_only.py +12 -8
  7. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/typesetting.py +29 -7
  8. babeldoc-0.6.1/babeldoc/format/pdf/new_parser/active_object_projection.py +191 -0
  9. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/object_parser.py +27 -9
  10. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/pdf_token_serializer.py +97 -9
  11. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/tokenizer.py +22 -11
  12. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/xobject_content_execution.py +30 -2
  13. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/translation_config.py +19 -2
  14. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/main.py +1 -1
  15. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/CONTRIBUTING.md +15 -7
  16. babeldoc-0.6.1/docs/README.md +8 -0
  17. babeldoc-0.6.1/docs/release-notes/v0.6.1.md +39 -0
  18. {babeldoc-0.6.0 → babeldoc-0.6.1}/mkdocs.yml +2 -2
  19. {babeldoc-0.6.0 → babeldoc-0.6.1}/pyproject.toml +2 -5
  20. babeldoc-0.6.0/babeldoc/__init__.py +0 -1
  21. babeldoc-0.6.0/babeldoc/format/pdf/new_parser/active_object_projection.py +0 -78
  22. babeldoc-0.6.0/docs/README.md +0 -8
  23. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  24. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  25. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/PULL_REQUEST_TEMPLATE/pr_form.yml +0 -0
  26. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  27. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/dependabot.yml +0 -0
  28. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/labels.yml +0 -0
  29. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/release-drafter.yml +0 -0
  30. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/codeql.yml +0 -0
  31. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/docs.yml +0 -0
  32. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/labeler.yml +0 -0
  33. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/lint.yml +0 -0
  34. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/pr-lint.yml +0 -0
  35. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/publish-to-pypi.yml +0 -0
  36. {babeldoc-0.6.0 → babeldoc-0.6.1}/.github/workflows/test.yml +0 -0
  37. {babeldoc-0.6.0 → babeldoc-0.6.1}/.gitignore +0 -0
  38. {babeldoc-0.6.0 → babeldoc-0.6.1}/.pre-commit-config.yaml +0 -0
  39. {babeldoc-0.6.0 → babeldoc-0.6.1}/LICENSE +0 -0
  40. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/assets/assets.py +0 -0
  41. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/assets/embedding_assets_metadata.py +0 -0
  42. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/asynchronize/__init__.py +0 -0
  43. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/babeldoc_exception/BabelDOCException.py +0 -0
  44. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/babeldoc_exception/__init__.py +0 -0
  45. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/README.md +0 -0
  46. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/__init__.py +0 -0
  47. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/base_doclayout.py +0 -0
  48. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/doclayout.py +0 -0
  49. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout.py +0 -0
  50. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout2.py +0 -0
  51. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout3.py +0 -0
  52. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout4.py +0 -0
  53. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout5.py +0 -0
  54. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout6.py +0 -0
  55. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout7.py +0 -0
  56. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/rpc_doclayout8.py +0 -0
  57. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
  58. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/__init__.py +0 -0
  59. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/__init__.py +0 -0
  60. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/awlt_char.py +0 -0
  61. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/base14.py +0 -0
  62. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/cidfont.py +0 -0
  63. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/cmap.py +0 -0
  64. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/encoding.py +0 -0
  65. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/type3.py +0 -0
  66. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/utils.py +0 -0
  67. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/babelpdf/win_core.py +0 -0
  68. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/converter.py +0 -0
  69. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/__init__.py +0 -0
  70. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/backend/__init__.py +0 -0
  71. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/backend/pdf_creater.py +0 -0
  72. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/frontend/__init__.py +0 -0
  73. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/frontend/il_creater.py +0 -0
  74. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/frontend/il_creater_active.py +0 -0
  75. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/frontend/il_creater_active_support.py +0 -0
  76. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/frontend/inline_image_params.py +0 -0
  77. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/il_version_1.py +0 -0
  78. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/il_version_1.rnc +0 -0
  79. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/il_version_1.rng +0 -0
  80. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/il_version_1.xsd +0 -0
  81. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/__init__.py +0 -0
  82. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/add_debug_information.py +0 -0
  83. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/automatic_term_extractor.py +0 -0
  84. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/detect_scanned_file.py +0 -0
  85. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/layout_parser.py +0 -0
  86. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/paragraph_finder.py +0 -0
  87. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/remove_descent.py +0 -0
  88. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/styles_and_formulas.py +0 -0
  89. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/midend/table_parser.py +0 -0
  90. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/__init__.py +0 -0
  91. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/extract_char.py +0 -0
  92. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/fontmap.py +0 -0
  93. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/formular_helper.py +0 -0
  94. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/layout_helper.py +0 -0
  95. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/matrix_helper.py +0 -0
  96. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/mupdf_helper.py +0 -0
  97. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/paragraph_helper.py +0 -0
  98. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/spatial_analyzer.py +0 -0
  99. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/style_helper.py +0 -0
  100. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/utils/zstd_helper.py +0 -0
  101. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/document_il/xml_converter.py +0 -0
  102. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/high_level.py +0 -0
  103. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/legacy_parse.py +0 -0
  104. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/__init__.py +0 -0
  105. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_direct_font_backend.py +0 -0
  106. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_font_backend.py +0 -0
  107. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_font_resource_runtime.py +0 -0
  108. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_font_runtime.py +0 -0
  109. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_object_backend.py +0 -0
  110. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_parse_runtime.py +0 -0
  111. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/active_value_access.py +0 -0
  112. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/base_operations.py +0 -0
  113. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/bridge_types.py +0 -0
  114. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/compat/__init__.py +0 -0
  115. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/font_spec_primitives.py +0 -0
  116. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/font_types.py +0 -0
  117. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/glyphs.py +0 -0
  118. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/interpreter.py +0 -0
  119. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/native_page_execution_session.py +0 -0
  120. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/native_page_interpreter.py +0 -0
  121. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/native_parse.py +0 -0
  122. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/object_model.py +0 -0
  123. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/page_api.py +0 -0
  124. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/page_content_access.py +0 -0
  125. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/page_content_execution.py +0 -0
  126. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/page_execution_session.py +0 -0
  127. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/page_interpreter.py +0 -0
  128. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/prepared_page.py +0 -0
  129. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/prepared_page_access.py +0 -0
  130. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/prepared_page_debug_access.py +0 -0
  131. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/prepared_page_execution.py +0 -0
  132. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/prepared_resource_builder.py +0 -0
  133. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/pymupdf_candidate_parse.py +0 -0
  134. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/pymupdf_object_access.py +0 -0
  135. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/pymupdf_page_execution_session.py +0 -0
  136. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/pymupdf_page_view_access.py +0 -0
  137. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/pymupdf_prepared_page_access.py +0 -0
  138. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/raw_page_view.py +0 -0
  139. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/resolved_object_access.py +0 -0
  140. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/resource_runtime_types.py +0 -0
  141. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/resources.py +0 -0
  142. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/__init__.py +0 -0
  143. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/cid_cmap_runtime.py +0 -0
  144. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/cmap_types_runtime.py +0 -0
  145. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/data/fontmetrics.py +0 -0
  146. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/data/glyphlist.py +0 -0
  147. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/data/latin_enc.py +0 -0
  148. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/exceptions_runtime.py +0 -0
  149. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/font_data_runtime.py +0 -0
  150. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/font_encoding_runtime.py +0 -0
  151. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/font_unicode_maps.py +0 -0
  152. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/font_widths.py +0 -0
  153. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/object_primitives_runtime.py +0 -0
  154. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/object_stream_runtime.py +0 -0
  155. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/ps_primitives_runtime.py +0 -0
  156. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/runtime_settings.py +0 -0
  157. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/runtime/to_unicode_parser_runtime.py +0 -0
  158. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/sinks/legacy_ir.py +0 -0
  159. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/sinks/native_text.py +0 -0
  160. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/state.py +0 -0
  161. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/new_parser/text_positioning.py +0 -0
  162. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/parse_only.py +0 -0
  163. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/parse_shared.py +0 -0
  164. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/pdfinterp.py +0 -0
  165. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/result_merger.py +0 -0
  166. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/format/pdf/split_manager.py +0 -0
  167. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/glossary.py +0 -0
  168. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/LICENSE +0 -0
  169. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/__init__.py +0 -0
  170. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/_saslprep.py +0 -0
  171. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/arcfour.py +0 -0
  172. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/ascii85.py +0 -0
  173. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/casting.py +0 -0
  174. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/ccitt.py +0 -0
  175. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78-EUC-H.pickle.gz +0 -0
  176. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78-EUC-V.pickle.gz +0 -0
  177. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78-H.pickle.gz +0 -0
  178. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78-RKSJ-H.pickle.gz +0 -0
  179. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78-RKSJ-V.pickle.gz +0 -0
  180. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78-V.pickle.gz +0 -0
  181. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78ms-RKSJ-H.pickle.gz +0 -0
  182. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/78ms-RKSJ-V.pickle.gz +0 -0
  183. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/83pv-RKSJ-H.pickle.gz +0 -0
  184. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/83pv-RKSJ-V.pickle.gz +0 -0
  185. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/90ms-RKSJ-H.pickle.gz +0 -0
  186. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/90ms-RKSJ-V.pickle.gz +0 -0
  187. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/90msp-RKSJ-H.pickle.gz +0 -0
  188. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/90msp-RKSJ-V.pickle.gz +0 -0
  189. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/90pv-RKSJ-H.pickle.gz +0 -0
  190. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/90pv-RKSJ-V.pickle.gz +0 -0
  191. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Add-H.pickle.gz +0 -0
  192. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Add-RKSJ-H.pickle.gz +0 -0
  193. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Add-RKSJ-V.pickle.gz +0 -0
  194. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Add-V.pickle.gz +0 -0
  195. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/B5-H.pickle.gz +0 -0
  196. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/B5-V.pickle.gz +0 -0
  197. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/B5pc-H.pickle.gz +0 -0
  198. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/B5pc-V.pickle.gz +0 -0
  199. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/CNS-EUC-H.pickle.gz +0 -0
  200. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/CNS-EUC-V.pickle.gz +0 -0
  201. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/CNS1-H.pickle.gz +0 -0
  202. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/CNS1-V.pickle.gz +0 -0
  203. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/CNS2-H.pickle.gz +0 -0
  204. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/CNS2-V.pickle.gz +0 -0
  205. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/ETHK-B5-H.pickle.gz +0 -0
  206. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/ETHK-B5-V.pickle.gz +0 -0
  207. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/ETen-B5-H.pickle.gz +0 -0
  208. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/ETen-B5-V.pickle.gz +0 -0
  209. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/ETenms-B5-H.pickle.gz +0 -0
  210. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/ETenms-B5-V.pickle.gz +0 -0
  211. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/EUC-H.pickle.gz +0 -0
  212. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/EUC-V.pickle.gz +0 -0
  213. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Ext-H.pickle.gz +0 -0
  214. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Ext-RKSJ-H.pickle.gz +0 -0
  215. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Ext-RKSJ-V.pickle.gz +0 -0
  216. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Ext-V.pickle.gz +0 -0
  217. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GB-EUC-H.pickle.gz +0 -0
  218. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GB-EUC-V.pickle.gz +0 -0
  219. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GB-H.pickle.gz +0 -0
  220. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GB-V.pickle.gz +0 -0
  221. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBK-EUC-H.pickle.gz +0 -0
  222. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBK-EUC-V.pickle.gz +0 -0
  223. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBK2K-H.pickle.gz +0 -0
  224. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBK2K-V.pickle.gz +0 -0
  225. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBKp-EUC-H.pickle.gz +0 -0
  226. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBKp-EUC-V.pickle.gz +0 -0
  227. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBT-EUC-H.pickle.gz +0 -0
  228. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBT-EUC-V.pickle.gz +0 -0
  229. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBT-H.pickle.gz +0 -0
  230. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBT-V.pickle.gz +0 -0
  231. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBTpc-EUC-H.pickle.gz +0 -0
  232. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBTpc-EUC-V.pickle.gz +0 -0
  233. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBpc-EUC-H.pickle.gz +0 -0
  234. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/GBpc-EUC-V.pickle.gz +0 -0
  235. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/H.pickle.gz +0 -0
  236. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKdla-B5-H.pickle.gz +0 -0
  237. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKdla-B5-V.pickle.gz +0 -0
  238. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKdlb-B5-H.pickle.gz +0 -0
  239. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKdlb-B5-V.pickle.gz +0 -0
  240. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKgccs-B5-H.pickle.gz +0 -0
  241. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKgccs-B5-V.pickle.gz +0 -0
  242. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKm314-B5-H.pickle.gz +0 -0
  243. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKm314-B5-V.pickle.gz +0 -0
  244. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKm471-B5-H.pickle.gz +0 -0
  245. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKm471-B5-V.pickle.gz +0 -0
  246. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKscs-B5-H.pickle.gz +0 -0
  247. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/HKscs-B5-V.pickle.gz +0 -0
  248. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Hankaku-H.pickle.gz +0 -0
  249. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Hankaku-V.pickle.gz +0 -0
  250. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Hiragana-H.pickle.gz +0 -0
  251. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Hiragana-V.pickle.gz +0 -0
  252. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSC-EUC-H.pickle.gz +0 -0
  253. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSC-EUC-V.pickle.gz +0 -0
  254. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSC-H.pickle.gz +0 -0
  255. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSC-Johab-H.pickle.gz +0 -0
  256. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSC-Johab-V.pickle.gz +0 -0
  257. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSC-V.pickle.gz +0 -0
  258. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSCms-UHC-H.pickle.gz +0 -0
  259. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSCms-UHC-HW-H.pickle.gz +0 -0
  260. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSCms-UHC-HW-V.pickle.gz +0 -0
  261. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSCms-UHC-V.pickle.gz +0 -0
  262. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSCpc-EUC-H.pickle.gz +0 -0
  263. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/KSCpc-EUC-V.pickle.gz +0 -0
  264. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Katakana-H.pickle.gz +0 -0
  265. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Katakana-V.pickle.gz +0 -0
  266. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/NWP-H.pickle.gz +0 -0
  267. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/NWP-V.pickle.gz +0 -0
  268. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/README.txt +0 -0
  269. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/RKSJ-H.pickle.gz +0 -0
  270. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/RKSJ-V.pickle.gz +0 -0
  271. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Roman-H.pickle.gz +0 -0
  272. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/Roman-V.pickle.gz +0 -0
  273. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UCS2-H.pickle.gz +0 -0
  274. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UCS2-V.pickle.gz +0 -0
  275. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UTF16-H.pickle.gz +0 -0
  276. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UTF16-V.pickle.gz +0 -0
  277. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UTF32-H.pickle.gz +0 -0
  278. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UTF32-V.pickle.gz +0 -0
  279. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UTF8-H.pickle.gz +0 -0
  280. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniCNS-UTF8-V.pickle.gz +0 -0
  281. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UCS2-H.pickle.gz +0 -0
  282. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UCS2-V.pickle.gz +0 -0
  283. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UTF16-H.pickle.gz +0 -0
  284. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UTF16-V.pickle.gz +0 -0
  285. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UTF32-H.pickle.gz +0 -0
  286. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UTF32-V.pickle.gz +0 -0
  287. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UTF8-H.pickle.gz +0 -0
  288. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniGB-UTF8-V.pickle.gz +0 -0
  289. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UCS2-H.pickle.gz +0 -0
  290. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UCS2-HW-H.pickle.gz +0 -0
  291. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UCS2-HW-V.pickle.gz +0 -0
  292. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UCS2-V.pickle.gz +0 -0
  293. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UTF16-H.pickle.gz +0 -0
  294. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UTF16-V.pickle.gz +0 -0
  295. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UTF32-H.pickle.gz +0 -0
  296. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UTF32-V.pickle.gz +0 -0
  297. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UTF8-H.pickle.gz +0 -0
  298. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS-UTF8-V.pickle.gz +0 -0
  299. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS2004-UTF16-H.pickle.gz +0 -0
  300. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS2004-UTF16-V.pickle.gz +0 -0
  301. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS2004-UTF32-H.pickle.gz +0 -0
  302. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS2004-UTF32-V.pickle.gz +0 -0
  303. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS2004-UTF8-H.pickle.gz +0 -0
  304. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJIS2004-UTF8-V.pickle.gz +0 -0
  305. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJISX0213-UTF32-H.pickle.gz +0 -0
  306. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJISX0213-UTF32-V.pickle.gz +0 -0
  307. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJISX02132004-UTF32-H.pickle.gz +0 -0
  308. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniJISX02132004-UTF32-V.pickle.gz +0 -0
  309. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UCS2-H.pickle.gz +0 -0
  310. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UCS2-V.pickle.gz +0 -0
  311. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UTF16-H.pickle.gz +0 -0
  312. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UTF16-V.pickle.gz +0 -0
  313. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UTF32-H.pickle.gz +0 -0
  314. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UTF32-V.pickle.gz +0 -0
  315. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UTF8-H.pickle.gz +0 -0
  316. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/UniKS-UTF8-V.pickle.gz +0 -0
  317. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/V.pickle.gz +0 -0
  318. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/WP-Symbol-H.pickle.gz +0 -0
  319. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/WP-Symbol-V.pickle.gz +0 -0
  320. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/to-unicode-Adobe-CNS1.pickle.gz +0 -0
  321. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/to-unicode-Adobe-GB1.pickle.gz +0 -0
  322. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/to-unicode-Adobe-Japan1.pickle.gz +0 -0
  323. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmap/to-unicode-Adobe-Korea1.pickle.gz +0 -0
  324. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/cmapdb.py +0 -0
  325. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/converter.py +0 -0
  326. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/data_structures.py +0 -0
  327. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/encodingdb.py +0 -0
  328. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/fontmetrics.py +0 -0
  329. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/glyphlist.py +0 -0
  330. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/high_level.py +0 -0
  331. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/image.py +0 -0
  332. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/jbig2.py +0 -0
  333. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/latin_enc.py +0 -0
  334. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/layout.py +0 -0
  335. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/lzw.py +0 -0
  336. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfcolor.py +0 -0
  337. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfdevice.py +0 -0
  338. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfdocument.py +0 -0
  339. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfexceptions.py +0 -0
  340. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdffont.py +0 -0
  341. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfinterp.py +0 -0
  342. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfpage.py +0 -0
  343. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdfparser.py +0 -0
  344. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/pdftypes.py +0 -0
  345. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/psexceptions.py +0 -0
  346. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/psparser.py +0 -0
  347. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/py.typed +0 -0
  348. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/runlength.py +0 -0
  349. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/settings.py +0 -0
  350. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/pdfminer/utils.py +0 -0
  351. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/progress_monitor.py +0 -0
  352. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/__init__.py +0 -0
  353. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/__main__.py +0 -0
  354. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/babeldoc_adapter.py +0 -0
  355. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/protocol.py +0 -0
  356. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/runner.py +0 -0
  357. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/server.py +0 -0
  358. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/state.py +0 -0
  359. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/translator.py +0 -0
  360. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/watermark_transform.py +0 -0
  361. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/executor/workroot.py +0 -0
  362. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/generate_cmap_metadata.py +0 -0
  363. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/generate_font_metadata.py +0 -0
  364. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/italic_assistance.py +0 -0
  365. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/tools/italic_recognize_tool.py +0 -0
  366. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/translator/__init__.py +0 -0
  367. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/translator/cache.py +0 -0
  368. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/translator/translator.py +0 -0
  369. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/utils/__init__.py +0 -0
  370. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/utils/atomic_integer.py +0 -0
  371. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/utils/memory.py +0 -0
  372. {babeldoc-0.6.0 → babeldoc-0.6.1}/babeldoc/utils/priority_thread_pool_executor.py +0 -0
  373. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/CODE_OF_CONDUCT.md +0 -0
  374. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/CONTRIBUTOR_REWARD.md +0 -0
  375. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
  376. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
  377. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
  378. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
  379. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
  380. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/README.md +0 -0
  381. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
  382. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
  383. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/deploy.sh +0 -0
  384. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/example/demo_glossary.csv +0 -0
  385. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-banner.png +0 -0
  386. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
  387. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
  388. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
  389. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
  390. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-big-logo.png +0 -0
  391. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-contributor_reward_example.png +0 -0
  392. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-preview.gif +0 -0
  393. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
  394. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
  395. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/images/babeldoc-small-logo.png +0 -0
  396. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/index.md +0 -0
  397. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/intro-to-pdf-object.md +0 -0
  398. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/release-notes/v0.6.0.md +0 -0
  399. {babeldoc-0.6.0 → babeldoc-0.6.1}/docs/requirements.txt +0 -0
  400. {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.0
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 yadt.
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 yadt:
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 yadt:
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/yadt/working`.
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/funstory-ai/yadt)
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
- We encourage you to contribute to YADT! Please check out the [CONTRIBUTING](https://github.com/funstory-ai/yadt/blob/main/docs/CONTRIBUTING.md) guide.
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 YADT and its sub-projects' codebases, issue trackers, chat rooms, and mailing lists is expected to follow the YADT [Code of Conduct](https://github.com/funstory-ai/yadt/blob/main/docs/CODE_OF_CONDUCT.md).
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
- - [PDFMathTranslate](https://github.com/Byaidu/PDFMathTranslate)
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 yadt.
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 yadt:
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 yadt:
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/yadt/working`.
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/funstory-ai/yadt)
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
- We encourage you to contribute to YADT! Please check out the [CONTRIBUTING](https://github.com/funstory-ai/yadt/blob/main/docs/CONTRIBUTING.md) guide.
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 YADT and its sub-projects' codebases, issue trackers, chat rooms, and mailing lists is expected to follow the YADT [Code of Conduct](https://github.com/funstory-ai/yadt/blob/main/docs/CODE_OF_CONDUCT.md).
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
- - [PDFMathTranslate](https://github.com/Byaidu/PDFMathTranslate)
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"
@@ -6,7 +6,7 @@ import subprocess
6
6
  import threading
7
7
  from pathlib import Path
8
8
 
9
- __version__ = "0.6.0"
9
+ __version__ = "0.6.1"
10
10
 
11
11
  CACHE_FOLDER = Path.home() / ".cache" / "babeldoc"
12
12
 
@@ -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
- copy.deepcopy(title_paragraph)
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 = copy.deepcopy(
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
- copy.deepcopy(paragraph)
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: PdfParagraph | None = None,
1041
- local_title_paragraph: PdfParagraph | None = None,
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: PdfParagraph | None = None,
1134
- local_title_paragraph: PdfParagraph | None = None,
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: PdfParagraph | None = None,
1220
- local_title_paragraph: PdfParagraph | None = None,
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()
@@ -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
- copy.deepcopy(title_paragraph)
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 = copy.deepcopy(
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
- copy.deepcopy(paragraph)
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: PdfParagraph | None = None,
629
- local_title_paragraph: PdfParagraph | None = None,
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: PdfParagraph | None,
886
- local_title_paragraph: PdfParagraph | None,
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
- import copy
668
-
669
- new_curve = copy.deepcopy(curve)
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
- import copy
727
-
728
- new_form = copy.deepcopy(form)
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} (http://yadt.io) 翻译,本仓库正在积极的建设当中,欢迎 star 和关注。"
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 _parse_value(self) -> object:
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(data: bytes) -> object:
110
- parser = _Parser(ContentStreamTokenizer(data))
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: