BabelDOC 0.5.16__tar.gz → 0.5.17__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 (314) hide show
  1. {babeldoc-0.5.16 → babeldoc-0.5.17}/PKG-INFO +3 -3
  2. {babeldoc-0.5.16 → babeldoc-0.5.17}/README.md +2 -2
  3. babeldoc-0.5.17/babeldoc/__init__.py +1 -0
  4. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/const.py +1 -1
  5. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/babelpdf/cidfont.py +6 -3
  6. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/frontend/il_creater.py +73 -0
  7. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/high_level.py +17 -0
  8. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/translation_config.py +39 -1
  9. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/main.py +1 -1
  10. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/CONTRIBUTOR_REWARD.md +2 -1
  11. {babeldoc-0.5.16 → babeldoc-0.5.17}/pyproject.toml +2 -2
  12. babeldoc-0.5.16/babeldoc/__init__.py +0 -1
  13. {babeldoc-0.5.16 → babeldoc-0.5.17}/.cursorignore +0 -0
  14. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  15. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  16. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/PULL_REQUEST_TEMPLATE/pr_form.yml +0 -0
  17. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  18. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/dependabot.yml +0 -0
  19. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/labels.yml +0 -0
  20. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/release-drafter.yml +0 -0
  21. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/workflows/codeql.yml +0 -0
  22. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/workflows/docs.yml +0 -0
  23. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/workflows/labeler.yml +0 -0
  24. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/workflows/lint.yml +0 -0
  25. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/workflows/pr-lint.yml +0 -0
  26. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/workflows/publish-to-pypi.yml +0 -0
  27. {babeldoc-0.5.16 → babeldoc-0.5.17}/.github/workflows/test.yml +0 -0
  28. {babeldoc-0.5.16 → babeldoc-0.5.17}/.gitignore +0 -0
  29. {babeldoc-0.5.16 → babeldoc-0.5.17}/.pre-commit-config.yaml +0 -0
  30. {babeldoc-0.5.16 → babeldoc-0.5.17}/LICENSE +0 -0
  31. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/assets/assets.py +0 -0
  32. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/assets/embedding_assets_metadata.py +0 -0
  33. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/asynchronize/__init__.py +0 -0
  34. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/babeldoc_exception/BabelDOCException.py +0 -0
  35. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/babeldoc_exception/__init__.py +0 -0
  36. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/docvision/README.md +0 -0
  37. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/docvision/__init__.py +0 -0
  38. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/docvision/base_doclayout.py +0 -0
  39. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/docvision/doclayout.py +0 -0
  40. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/docvision/rpc_doclayout.py +0 -0
  41. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/docvision/rpc_doclayout2.py +0 -0
  42. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/docvision/rpc_doclayout3.py +0 -0
  43. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/docvision/rpc_doclayout4.py +0 -0
  44. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/docvision/rpc_doclayout5.py +0 -0
  45. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/docvision/rpc_doclayout6.py +0 -0
  46. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/docvision/rpc_doclayout7.py +0 -0
  47. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
  48. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/__init__.py +0 -0
  49. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/__init__.py +0 -0
  50. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/babelpdf/base14.py +0 -0
  51. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/babelpdf/encoding.py +0 -0
  52. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/babelpdf/utils.py +0 -0
  53. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/babelpdf/win_core.py +0 -0
  54. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/converter.py +0 -0
  55. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/__init__.py +0 -0
  56. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/backend/__init__.py +0 -0
  57. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/backend/pdf_creater.py +0 -0
  58. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/frontend/__init__.py +0 -0
  59. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/il_version_1.py +0 -0
  60. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/il_version_1.rnc +0 -0
  61. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/il_version_1.rng +0 -0
  62. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/il_version_1.xsd +0 -0
  63. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/midend/__init__.py +0 -0
  64. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/midend/add_debug_information.py +0 -0
  65. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/midend/automatic_term_extractor.py +0 -0
  66. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/midend/detect_scanned_file.py +0 -0
  67. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/midend/il_translator.py +0 -0
  68. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/midend/il_translator_llm_only.py +0 -0
  69. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/midend/layout_parser.py +0 -0
  70. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/midend/paragraph_finder.py +0 -0
  71. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/midend/remove_descent.py +0 -0
  72. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/midend/styles_and_formulas.py +0 -0
  73. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/midend/table_parser.py +0 -0
  74. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/midend/typesetting.py +0 -0
  75. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/utils/__init__.py +0 -0
  76. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/utils/extract_char.py +0 -0
  77. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/utils/fontmap.py +0 -0
  78. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/utils/formular_helper.py +0 -0
  79. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/utils/layout_helper.py +0 -0
  80. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/utils/matrix_helper.py +0 -0
  81. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/utils/mupdf_helper.py +0 -0
  82. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/utils/paragraph_helper.py +0 -0
  83. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/utils/spatial_analyzer.py +0 -0
  84. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/utils/style_helper.py +0 -0
  85. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/utils/zstd_helper.py +0 -0
  86. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/document_il/xml_converter.py +0 -0
  87. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/pdfinterp.py +0 -0
  88. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/result_merger.py +0 -0
  89. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/format/pdf/split_manager.py +0 -0
  90. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/glossary.py +0 -0
  91. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/LICENSE +0 -0
  92. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/__init__.py +0 -0
  93. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/_saslprep.py +0 -0
  94. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/arcfour.py +0 -0
  95. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/ascii85.py +0 -0
  96. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/casting.py +0 -0
  97. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/ccitt.py +0 -0
  98. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/78-EUC-H.pickle.gz +0 -0
  99. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/78-EUC-V.pickle.gz +0 -0
  100. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/78-H.pickle.gz +0 -0
  101. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/78-RKSJ-H.pickle.gz +0 -0
  102. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/78-RKSJ-V.pickle.gz +0 -0
  103. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/78-V.pickle.gz +0 -0
  104. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/78ms-RKSJ-H.pickle.gz +0 -0
  105. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/78ms-RKSJ-V.pickle.gz +0 -0
  106. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/83pv-RKSJ-H.pickle.gz +0 -0
  107. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/83pv-RKSJ-V.pickle.gz +0 -0
  108. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/90ms-RKSJ-H.pickle.gz +0 -0
  109. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/90ms-RKSJ-V.pickle.gz +0 -0
  110. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/90msp-RKSJ-H.pickle.gz +0 -0
  111. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/90msp-RKSJ-V.pickle.gz +0 -0
  112. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/90pv-RKSJ-H.pickle.gz +0 -0
  113. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/90pv-RKSJ-V.pickle.gz +0 -0
  114. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Add-H.pickle.gz +0 -0
  115. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Add-RKSJ-H.pickle.gz +0 -0
  116. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Add-RKSJ-V.pickle.gz +0 -0
  117. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Add-V.pickle.gz +0 -0
  118. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/B5-H.pickle.gz +0 -0
  119. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/B5-V.pickle.gz +0 -0
  120. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/B5pc-H.pickle.gz +0 -0
  121. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/B5pc-V.pickle.gz +0 -0
  122. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/CNS-EUC-H.pickle.gz +0 -0
  123. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/CNS-EUC-V.pickle.gz +0 -0
  124. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/CNS1-H.pickle.gz +0 -0
  125. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/CNS1-V.pickle.gz +0 -0
  126. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/CNS2-H.pickle.gz +0 -0
  127. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/CNS2-V.pickle.gz +0 -0
  128. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/ETHK-B5-H.pickle.gz +0 -0
  129. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/ETHK-B5-V.pickle.gz +0 -0
  130. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/ETen-B5-H.pickle.gz +0 -0
  131. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/ETen-B5-V.pickle.gz +0 -0
  132. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/ETenms-B5-H.pickle.gz +0 -0
  133. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/ETenms-B5-V.pickle.gz +0 -0
  134. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/EUC-H.pickle.gz +0 -0
  135. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/EUC-V.pickle.gz +0 -0
  136. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Ext-H.pickle.gz +0 -0
  137. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Ext-RKSJ-H.pickle.gz +0 -0
  138. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Ext-RKSJ-V.pickle.gz +0 -0
  139. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Ext-V.pickle.gz +0 -0
  140. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GB-EUC-H.pickle.gz +0 -0
  141. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GB-EUC-V.pickle.gz +0 -0
  142. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GB-H.pickle.gz +0 -0
  143. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GB-V.pickle.gz +0 -0
  144. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBK-EUC-H.pickle.gz +0 -0
  145. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBK-EUC-V.pickle.gz +0 -0
  146. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBK2K-H.pickle.gz +0 -0
  147. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBK2K-V.pickle.gz +0 -0
  148. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBKp-EUC-H.pickle.gz +0 -0
  149. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBKp-EUC-V.pickle.gz +0 -0
  150. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBT-EUC-H.pickle.gz +0 -0
  151. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBT-EUC-V.pickle.gz +0 -0
  152. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBT-H.pickle.gz +0 -0
  153. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBT-V.pickle.gz +0 -0
  154. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBTpc-EUC-H.pickle.gz +0 -0
  155. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBTpc-EUC-V.pickle.gz +0 -0
  156. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBpc-EUC-H.pickle.gz +0 -0
  157. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/GBpc-EUC-V.pickle.gz +0 -0
  158. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/H.pickle.gz +0 -0
  159. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/HKdla-B5-H.pickle.gz +0 -0
  160. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/HKdla-B5-V.pickle.gz +0 -0
  161. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/HKdlb-B5-H.pickle.gz +0 -0
  162. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/HKdlb-B5-V.pickle.gz +0 -0
  163. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/HKgccs-B5-H.pickle.gz +0 -0
  164. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/HKgccs-B5-V.pickle.gz +0 -0
  165. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/HKm314-B5-H.pickle.gz +0 -0
  166. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/HKm314-B5-V.pickle.gz +0 -0
  167. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/HKm471-B5-H.pickle.gz +0 -0
  168. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/HKm471-B5-V.pickle.gz +0 -0
  169. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/HKscs-B5-H.pickle.gz +0 -0
  170. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/HKscs-B5-V.pickle.gz +0 -0
  171. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Hankaku-H.pickle.gz +0 -0
  172. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Hankaku-V.pickle.gz +0 -0
  173. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Hiragana-H.pickle.gz +0 -0
  174. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Hiragana-V.pickle.gz +0 -0
  175. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/KSC-EUC-H.pickle.gz +0 -0
  176. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/KSC-EUC-V.pickle.gz +0 -0
  177. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/KSC-H.pickle.gz +0 -0
  178. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/KSC-Johab-H.pickle.gz +0 -0
  179. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/KSC-Johab-V.pickle.gz +0 -0
  180. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/KSC-V.pickle.gz +0 -0
  181. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/KSCms-UHC-H.pickle.gz +0 -0
  182. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/KSCms-UHC-HW-H.pickle.gz +0 -0
  183. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/KSCms-UHC-HW-V.pickle.gz +0 -0
  184. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/KSCms-UHC-V.pickle.gz +0 -0
  185. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/KSCpc-EUC-H.pickle.gz +0 -0
  186. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/KSCpc-EUC-V.pickle.gz +0 -0
  187. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Katakana-H.pickle.gz +0 -0
  188. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Katakana-V.pickle.gz +0 -0
  189. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/NWP-H.pickle.gz +0 -0
  190. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/NWP-V.pickle.gz +0 -0
  191. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/README.txt +0 -0
  192. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/RKSJ-H.pickle.gz +0 -0
  193. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/RKSJ-V.pickle.gz +0 -0
  194. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Roman-H.pickle.gz +0 -0
  195. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/Roman-V.pickle.gz +0 -0
  196. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniCNS-UCS2-H.pickle.gz +0 -0
  197. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniCNS-UCS2-V.pickle.gz +0 -0
  198. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniCNS-UTF16-H.pickle.gz +0 -0
  199. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniCNS-UTF16-V.pickle.gz +0 -0
  200. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniCNS-UTF32-H.pickle.gz +0 -0
  201. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniCNS-UTF32-V.pickle.gz +0 -0
  202. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniCNS-UTF8-H.pickle.gz +0 -0
  203. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniCNS-UTF8-V.pickle.gz +0 -0
  204. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniGB-UCS2-H.pickle.gz +0 -0
  205. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniGB-UCS2-V.pickle.gz +0 -0
  206. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniGB-UTF16-H.pickle.gz +0 -0
  207. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniGB-UTF16-V.pickle.gz +0 -0
  208. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniGB-UTF32-H.pickle.gz +0 -0
  209. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniGB-UTF32-V.pickle.gz +0 -0
  210. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniGB-UTF8-H.pickle.gz +0 -0
  211. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniGB-UTF8-V.pickle.gz +0 -0
  212. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS-UCS2-H.pickle.gz +0 -0
  213. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS-UCS2-HW-H.pickle.gz +0 -0
  214. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS-UCS2-HW-V.pickle.gz +0 -0
  215. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS-UCS2-V.pickle.gz +0 -0
  216. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS-UTF16-H.pickle.gz +0 -0
  217. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS-UTF16-V.pickle.gz +0 -0
  218. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS-UTF32-H.pickle.gz +0 -0
  219. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS-UTF32-V.pickle.gz +0 -0
  220. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS-UTF8-H.pickle.gz +0 -0
  221. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS-UTF8-V.pickle.gz +0 -0
  222. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS2004-UTF16-H.pickle.gz +0 -0
  223. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS2004-UTF16-V.pickle.gz +0 -0
  224. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS2004-UTF32-H.pickle.gz +0 -0
  225. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS2004-UTF32-V.pickle.gz +0 -0
  226. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS2004-UTF8-H.pickle.gz +0 -0
  227. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJIS2004-UTF8-V.pickle.gz +0 -0
  228. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJISX0213-UTF32-H.pickle.gz +0 -0
  229. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJISX0213-UTF32-V.pickle.gz +0 -0
  230. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJISX02132004-UTF32-H.pickle.gz +0 -0
  231. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniJISX02132004-UTF32-V.pickle.gz +0 -0
  232. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniKS-UCS2-H.pickle.gz +0 -0
  233. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniKS-UCS2-V.pickle.gz +0 -0
  234. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniKS-UTF16-H.pickle.gz +0 -0
  235. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniKS-UTF16-V.pickle.gz +0 -0
  236. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniKS-UTF32-H.pickle.gz +0 -0
  237. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniKS-UTF32-V.pickle.gz +0 -0
  238. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniKS-UTF8-H.pickle.gz +0 -0
  239. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/UniKS-UTF8-V.pickle.gz +0 -0
  240. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/V.pickle.gz +0 -0
  241. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/WP-Symbol-H.pickle.gz +0 -0
  242. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/WP-Symbol-V.pickle.gz +0 -0
  243. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/to-unicode-Adobe-CNS1.pickle.gz +0 -0
  244. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/to-unicode-Adobe-GB1.pickle.gz +0 -0
  245. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/to-unicode-Adobe-Japan1.pickle.gz +0 -0
  246. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmap/to-unicode-Adobe-Korea1.pickle.gz +0 -0
  247. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/cmapdb.py +0 -0
  248. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/converter.py +0 -0
  249. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/data_structures.py +0 -0
  250. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/encodingdb.py +0 -0
  251. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/fontmetrics.py +0 -0
  252. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/glyphlist.py +0 -0
  253. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/high_level.py +0 -0
  254. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/image.py +0 -0
  255. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/jbig2.py +0 -0
  256. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/latin_enc.py +0 -0
  257. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/layout.py +0 -0
  258. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/lzw.py +0 -0
  259. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/pdfcolor.py +0 -0
  260. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/pdfdevice.py +0 -0
  261. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/pdfdocument.py +0 -0
  262. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/pdfexceptions.py +0 -0
  263. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/pdffont.py +0 -0
  264. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/pdfinterp.py +0 -0
  265. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/pdfpage.py +0 -0
  266. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/pdfparser.py +0 -0
  267. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/pdftypes.py +0 -0
  268. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/psexceptions.py +0 -0
  269. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/psparser.py +0 -0
  270. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/py.typed +0 -0
  271. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/runlength.py +0 -0
  272. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/settings.py +0 -0
  273. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/pdfminer/utils.py +0 -0
  274. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/progress_monitor.py +0 -0
  275. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/tools/generate_font_metadata.py +0 -0
  276. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/tools/italic_assistance.py +0 -0
  277. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/tools/italic_recognize_tool.py +0 -0
  278. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/translator/__init__.py +0 -0
  279. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/translator/cache.py +0 -0
  280. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/translator/translator.py +0 -0
  281. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/utils/__init__.py +0 -0
  282. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/utils/atomic_integer.py +0 -0
  283. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/utils/memory.py +0 -0
  284. {babeldoc-0.5.16 → babeldoc-0.5.17}/babeldoc/utils/priority_thread_pool_executor.py +0 -0
  285. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/CODE_OF_CONDUCT.md +0 -0
  286. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/CONTRIBUTING.md +0 -0
  287. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
  288. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
  289. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
  290. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
  291. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
  292. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/ImplementationDetails/README.md +0 -0
  293. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
  294. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
  295. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/README.md +0 -0
  296. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/deploy.sh +0 -0
  297. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/example/demo_glossary.csv +0 -0
  298. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/images/babeldoc-banner.png +0 -0
  299. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
  300. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
  301. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
  302. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
  303. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/images/babeldoc-big-logo.png +0 -0
  304. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/images/babeldoc-contributor_reward_example.png +0 -0
  305. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/images/babeldoc-preview.gif +0 -0
  306. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
  307. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
  308. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/images/babeldoc-small-logo.png +0 -0
  309. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/index.md +0 -0
  310. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/intro-to-pdf-object.md +0 -0
  311. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/requirements.txt +0 -0
  312. {babeldoc-0.5.16 → babeldoc-0.5.17}/docs/supported_languages.md +0 -0
  313. {babeldoc-0.5.16 → babeldoc-0.5.17}/mkdocs.yml +0 -0
  314. {babeldoc-0.5.16 → babeldoc-0.5.17}/tests/test_translation_cache_cleanup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: BabelDOC
3
- Version: 0.5.16
3
+ Version: 0.5.17
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
@@ -90,7 +90,7 @@ Description-Content-Type: text/markdown
90
90
 
91
91
  PDF scientific paper translation and bilingual comparison library.
92
92
 
93
- - **Online Service**: Beta version launched [Immersive Translate - BabelDOC](https://app.immersivetranslate.com/babel-doc/) 1000 free pages per month.
93
+ - **Online Service**: Beta version launched [Immersive Translate - BabelDOC](https://app.immersivetranslate.com/babel-doc/) Free usage quota is available; please refer to the FAQ section on the page for details.
94
94
  - **Self-deployment**: [PDFMathTranslate 2.0](https://github.com/PDFMathTranslate/PDFMathTranslate-next) support for BabelDOC, available for self-deployment + WebUI with more translation services.
95
95
  - Provides a simple [command line interface](#getting-started).
96
96
  - Provides a [Python API](#python-api).
@@ -489,4 +489,4 @@ Everyone interacting in YADT and its sub-projects' codebases, issue trackers, ch
489
489
  > 2. Then, during the scanned document detection phase (`DetectScannedFile` stage):
490
490
  > * If the document is identified as heavily scanned (e.g., >80% scanned pages) AND `auto_enable_ocr_workaround` is `true` (i.e., `translation_config.auto_enable_ocr_workaround` is true), the system will then attempt to set both `ocr_workaround` to `true` and `skip_scanned_detection` to `true`.
491
491
  >
492
- > This means that `--auto-enable-ocr-workaround` effectively gives the system control to enable OCR processing for scanned documents, potentially overriding manual settings for `--ocr-workaround` and `--skip_scanned_detection` based on its detection results. If the document is *not* detected as heavily scanned, then the initial `false` values for `ocr_workaround` and `skip_scanned_detection` (forced by `--auto-enable-ocr-workaround` at the `TranslationConfig` initialization stage) will remain in effect unless changed by other logic.
492
+ > This means that `--auto-enable-ocr-workaround` effectively gives the system control to enable OCR processing for scanned documents, potentially overriding manual settings for `--ocr-workaround` and `--skip_scanned_detection` based on its detection results. If the document is *not* detected as heavily scanned, then the initial `false` values for `ocr_workaround` and `skip_scanned_detection` (forced by `--auto-enable-ocr-workaround` at the `TranslationConfig` initialization stage) will remain in effect unless changed by other logic.
@@ -34,7 +34,7 @@
34
34
 
35
35
  PDF scientific paper translation and bilingual comparison library.
36
36
 
37
- - **Online Service**: Beta version launched [Immersive Translate - BabelDOC](https://app.immersivetranslate.com/babel-doc/) 1000 free pages per month.
37
+ - **Online Service**: Beta version launched [Immersive Translate - BabelDOC](https://app.immersivetranslate.com/babel-doc/) Free usage quota is available; please refer to the FAQ section on the page for details.
38
38
  - **Self-deployment**: [PDFMathTranslate 2.0](https://github.com/PDFMathTranslate/PDFMathTranslate-next) support for BabelDOC, available for self-deployment + WebUI with more translation services.
39
39
  - Provides a simple [command line interface](#getting-started).
40
40
  - Provides a [Python API](#python-api).
@@ -433,4 +433,4 @@ Everyone interacting in YADT and its sub-projects' codebases, issue trackers, ch
433
433
  > 2. Then, during the scanned document detection phase (`DetectScannedFile` stage):
434
434
  > * If the document is identified as heavily scanned (e.g., >80% scanned pages) AND `auto_enable_ocr_workaround` is `true` (i.e., `translation_config.auto_enable_ocr_workaround` is true), the system will then attempt to set both `ocr_workaround` to `true` and `skip_scanned_detection` to `true`.
435
435
  >
436
- > This means that `--auto-enable-ocr-workaround` effectively gives the system control to enable OCR processing for scanned documents, potentially overriding manual settings for `--ocr-workaround` and `--skip_scanned_detection` based on its detection results. If the document is *not* detected as heavily scanned, then the initial `false` values for `ocr_workaround` and `skip_scanned_detection` (forced by `--auto-enable-ocr-workaround` at the `TranslationConfig` initialization stage) will remain in effect unless changed by other logic.
436
+ > This means that `--auto-enable-ocr-workaround` effectively gives the system control to enable OCR processing for scanned documents, potentially overriding manual settings for `--ocr-workaround` and `--skip_scanned_detection` based on its detection results. If the document is *not* detected as heavily scanned, then the initial `false` values for `ocr_workaround` and `skip_scanned_detection` (forced by `--auto-enable-ocr-workaround` at the `TranslationConfig` initialization stage) will remain in effect unless changed by other logic.
@@ -0,0 +1 @@
1
+ __version__ = "0.5.17"
@@ -6,7 +6,7 @@ import subprocess
6
6
  import threading
7
7
  from pathlib import Path
8
8
 
9
- __version__ = "0.5.16"
9
+ __version__ = "0.5.17"
10
10
 
11
11
  CACHE_FOLDER = Path.home() / ".cache" / "babeldoc"
12
12
 
@@ -41,9 +41,12 @@ def get_descendant_fonts(doc, xref):
41
41
 
42
42
 
43
43
  def get_glyph_bbox(face, g):
44
- face.load_glyph(g, freetype.FT_LOAD_NO_SCALE)
45
- cbox = face.glyph.outline.get_bbox()
46
- return cbox.xMin, cbox.yMin, cbox.xMax, cbox.yMax
44
+ try:
45
+ face.load_glyph(g, freetype.FT_LOAD_NO_SCALE)
46
+ cbox = face.glyph.outline.get_bbox()
47
+ return cbox.xMin, cbox.yMin, cbox.xMax, cbox.yMax
48
+ except Exception:
49
+ return 0, 0, 0, 0
47
50
 
48
51
 
49
52
  def get_face_bbox(blob):
@@ -3,12 +3,14 @@ import functools
3
3
  import logging
4
4
  import math
5
5
  import re
6
+ import unicodedata
6
7
  from io import BytesIO
7
8
  from itertools import islice
8
9
  from typing import Literal
9
10
 
10
11
  import freetype
11
12
  import pymupdf
13
+ import tiktoken
12
14
 
13
15
  import babeldoc.pdfminer.pdfinterp
14
16
  from babeldoc.format.pdf.babelpdf.base14 import get_base14_bbox
@@ -18,6 +20,7 @@ from babeldoc.format.pdf.babelpdf.encoding import get_type1_encoding
18
20
  from babeldoc.format.pdf.babelpdf.utils import guarded_bbox
19
21
  from babeldoc.format.pdf.document_il import il_version_1
20
22
  from babeldoc.format.pdf.document_il.utils import zstd_helper
23
+ from babeldoc.format.pdf.document_il.utils.fontmap import FontMapper
21
24
  from babeldoc.format.pdf.document_il.utils.matrix_helper import decompose_ctm
22
25
  from babeldoc.format.pdf.document_il.utils.style_helper import BLACK
23
26
  from babeldoc.format.pdf.document_il.utils.style_helper import YELLOW
@@ -358,6 +361,10 @@ class ILCreater:
358
361
  self.render_order = 0
359
362
  self.current_clip_paths: list[tuple] = []
360
363
  self.clip_paths_stack: list[list[tuple]] = []
364
+ # For valid character collection
365
+ self.font_mapper = FontMapper(translation_config)
366
+ self.tokenizer = tiktoken.encoding_for_model("gpt-4o")
367
+ self._page_valid_chars_buffer: list[str] | None = None
361
368
 
362
369
  def transform_clip_path(
363
370
  self,
@@ -566,8 +573,32 @@ class ILCreater:
566
573
  self.current_clip_paths = []
567
574
  self.clip_paths_stack = []
568
575
  self.docs.page.append(self.current_page)
576
+ # Prepare per-page buffer for valid characters on translated pages
577
+ self._page_valid_chars_buffer = []
569
578
 
570
579
  def on_page_end(self):
580
+ # Accumulate this page's valid characters and tokens into shared context
581
+ try:
582
+ if (
583
+ self._page_valid_chars_buffer is not None
584
+ and len(self._page_valid_chars_buffer) > 0
585
+ ):
586
+ page_text = "".join(self._page_valid_chars_buffer)
587
+ char_count = len(page_text)
588
+ try:
589
+ token_count = len(
590
+ self.tokenizer.encode(page_text, disallowed_special=())
591
+ )
592
+ except Exception as e:
593
+ logger.warning("Failed to compute token count for page: %s", e)
594
+ token_count = 0
595
+ self.translation_config.shared_context_cross_split_part.add_valid_counts(
596
+ char_count, token_count
597
+ )
598
+ except Exception as e:
599
+ logger.warning("Failed to accumulate page valid stats: %s", e)
600
+ finally:
601
+ self._page_valid_chars_buffer = []
571
602
  self.progress.advance(1)
572
603
 
573
604
  def on_page_crop_box(
@@ -848,6 +879,11 @@ class ILCreater:
848
879
  "Failed to get rotation angle for char %s",
849
880
  char.get_text(),
850
881
  )
882
+ # Collect valid characters for statistics
883
+ try:
884
+ self._collect_valid_char(char.get_text())
885
+ except Exception as e:
886
+ logger.warning("Error collecting valid char: %s", e)
851
887
  gs = self.create_graphic_state(char.graphicstate)
852
888
  # Get font from current page or xobject
853
889
  font = None
@@ -983,6 +1019,43 @@ class ILCreater:
983
1019
  )
984
1020
  )
985
1021
 
1022
+ def _collect_valid_char(self, ch: str):
1023
+ """Append a valid character into the current page buffer according to rules.
1024
+ Rules:
1025
+ - Include whitespace matched by space_regex directly.
1026
+ - Ignore categories that are never normal text: {Cc, Cs, Co, Cn}.
1027
+ - Apply inverted criteria from formular_helper.py (21-28):
1028
+ empty -> invalid, contains '(cid:' -> invalid,
1029
+ not has_char(ch) -> invalid unless len(ch) > 1 and all(has_char(x)).
1030
+ """
1031
+ if self._page_valid_chars_buffer is None:
1032
+ return
1033
+ if space_regex.match(ch):
1034
+ self._page_valid_chars_buffer.append(ch)
1035
+ return
1036
+ try:
1037
+ cat = unicodedata.category(ch[0]) if ch else None
1038
+ except Exception:
1039
+ cat = None
1040
+ if cat in {"Cc", "Cs", "Co", "Cn"}:
1041
+ return
1042
+ is_invalid = False
1043
+ if not ch:
1044
+ is_invalid = True
1045
+ elif "(cid:" in ch:
1046
+ is_invalid = True
1047
+ else:
1048
+ try:
1049
+ if not self.font_mapper.has_char(ch):
1050
+ if len(ch) > 1 and all(self.font_mapper.has_char(x) for x in ch):
1051
+ is_invalid = False
1052
+ else:
1053
+ is_invalid = True
1054
+ except Exception:
1055
+ is_invalid = True
1056
+ if not is_invalid:
1057
+ self._page_valid_chars_buffer.append(ch)
1058
+
986
1059
  def on_lt_curve(self, curve: babeldoc.pdfminer.layout.LTCurve):
987
1060
  if not self.enable_graphic_element_process:
988
1061
  return
@@ -755,6 +755,23 @@ def do_translate(
755
755
  logger.info(
756
756
  f"finish translate: {original_pdf_path}, cost: {finish_time - start_time} s",
757
757
  )
758
+ # Populate aggregate valid text statistics into result
759
+ try:
760
+ sc = translation_config.shared_context_cross_split_part
761
+ result.total_valid_character_count = getattr(
762
+ sc, "valid_char_count_total", 0
763
+ )
764
+ token_total = getattr(sc, "total_valid_text_token_count", None)
765
+ result.total_valid_text_token_count = (
766
+ token_total if isinstance(token_total, int) else 0
767
+ )
768
+ except Exception as e:
769
+ logger.warning("Failed to populate valid text statistics: %s", e)
770
+ try:
771
+ result.total_valid_character_count = 0
772
+ result.total_valid_text_token_count = 0
773
+ except Exception:
774
+ pass
758
775
  result.original_pdf_path = translation_config.input_file
759
776
  result.peak_memory_usage = peak_memory_usage
760
777
 
@@ -32,6 +32,9 @@ class SharedContextCrossSplitPart:
32
32
  self.auto_extracted_glossary: Glossary | None = None
33
33
  self.raw_extracted_terms: list[tuple[str, str]] = []
34
34
  self.auto_enabled_ocr_workaround = False
35
+ # Statistics for valid characters/text across the whole file
36
+ self.valid_char_count_total: int = 0
37
+ self.total_valid_text_token_count: int = 0
35
38
 
36
39
  def initialize_glossaries(self, initial_glossaries: list[Glossary] | None):
37
40
  with self._lock:
@@ -45,6 +48,9 @@ class SharedContextCrossSplitPart:
45
48
  for g in self.user_glossaries:
46
49
  for entity in g.normalized_lookup:
47
50
  self.norm_terms.add(entity)
51
+ # reset statistics buffer when initializing
52
+ self.valid_char_count_total = 0
53
+ self.total_valid_text_token_count = 0
48
54
 
49
55
  def add_raw_extracted_term_pair(self, src: str, tgt: str):
50
56
  with self._lock:
@@ -67,7 +73,11 @@ class SharedContextCrossSplitPart:
67
73
  return current_name
68
74
 
69
75
  def contains_term(self, term: str) -> bool:
70
- pass
76
+ with self._lock:
77
+ try:
78
+ return term in self.norm_terms
79
+ except Exception:
80
+ return False
71
81
 
72
82
  def finalize_auto_extracted_glossary(self):
73
83
  with self._lock:
@@ -112,6 +122,16 @@ class SharedContextCrossSplitPart:
112
122
  all_glossaries.append(self.auto_extracted_glossary)
113
123
  return all_glossaries
114
124
 
125
+ def add_valid_counts(self, char_count: int, token_count: int):
126
+ """Accumulate valid character and token counts in a threadsafe way."""
127
+ if char_count <= 0 and token_count <= 0:
128
+ return
129
+ with self._lock:
130
+ if char_count > 0:
131
+ self.valid_char_count_total += char_count
132
+ if token_count > 0:
133
+ self.total_valid_text_token_count += token_count
134
+
115
135
 
116
136
  class TranslationConfig:
117
137
  @staticmethod
@@ -463,6 +483,8 @@ class TranslateResult:
463
483
  no_watermark_dual_pdf_path: Path | None
464
484
  peak_memory_usage: int | None
465
485
  auto_extracted_glossary_path: Path | None
486
+ total_valid_character_count: int | None
487
+ total_valid_text_token_count: int | None
466
488
 
467
489
  def __init__(
468
490
  self,
@@ -479,6 +501,8 @@ class TranslateResult:
479
501
  self.no_watermark_dual_pdf_path = dual_pdf_path
480
502
 
481
503
  self.auto_extracted_glossary_path = auto_extracted_glossary_path
504
+ self.total_valid_character_count = None
505
+ self.total_valid_text_token_count = None
482
506
 
483
507
  def __str__(self):
484
508
  """Return a human-readable string representation of the translation result."""
@@ -524,6 +548,20 @@ class TranslateResult:
524
548
  if hasattr(self, "peak_memory_usage") and self.peak_memory_usage:
525
549
  result.append(f"\tPeak memory usage: {self.peak_memory_usage} MB")
526
550
 
551
+ if hasattr(self, "total_valid_character_count") and isinstance(
552
+ self.total_valid_character_count, int
553
+ ):
554
+ result.append(
555
+ f"\tTotal valid character count: {self.total_valid_character_count}"
556
+ )
557
+
558
+ if hasattr(self, "total_valid_text_token_count") and isinstance(
559
+ self.total_valid_text_token_count, int
560
+ ):
561
+ result.append(
562
+ f"\tTotal valid text token count (gpt-4o): {self.total_valid_text_token_count}"
563
+ )
564
+
527
565
  if result:
528
566
  result.insert(0, "Translation results:")
529
567
 
@@ -26,7 +26,7 @@ from babeldoc.translator.translator import OpenAITranslator
26
26
  from babeldoc.translator.translator import set_translate_rate_limiter
27
27
 
28
28
  logger = logging.getLogger(__name__)
29
- __version__ = "0.5.16"
29
+ __version__ = "0.5.17"
30
30
 
31
31
 
32
32
  def create_parser():
@@ -1,4 +1,4 @@
1
- # BabelDOC/PDFMathTranslate 贡献者奖励规则
1
+ # BabelDOC/PDFMathTranslate/OneAIFW 贡献者奖励规则
2
2
 
3
3
  ## 月度活跃贡献者奖励规则
4
4
 
@@ -21,6 +21,7 @@
21
21
  2. [Byaidu/PDFMathTranslate](https://github.com/Byaidu/PDFMathTranslate/pulls) 的主分支
22
22
  3. [PDFMathTranslate/PDFMathTranslate-next](https://github.com/PDFMathTranslate/PDFMathTranslate-next/pulls) 的主分支。
23
23
  4. [guaguastandup/zotero-pdf2zh](https://github.com/guaguastandup/zotero-pdf2zh) 的主分支
24
+ 5. [funstory-ai/aifw](https://github.com/funstory-ai/aifw) 的主分支
24
25
  - 若目标为 [funstory-ai/BabelDOC](https://github.com/funstory-ai/BabelDOC/pulls) 的 PR 未被合并,但被维护者认定为有价值的概念验证,同样符合条件。
25
26
  - 审核 PR、撰写 wiki 等贡献也必须是以上两个仓库。
26
27
  - 同一贡献者每月仅可申请一次(无论提交 PR 数量)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "BabelDOC"
3
- version = "0.5.16"
3
+ version = "0.5.17"
4
4
  description = "Yet Another Document Translator"
5
5
  license = "AGPL-3.0"
6
6
  readme = "README.md"
@@ -162,7 +162,7 @@ pythonpath = [".", "src"]
162
162
  testpaths = ["tests"]
163
163
 
164
164
  [bumpver]
165
- current_version = "0.5.16"
165
+ current_version = "0.5.17"
166
166
  version_pattern = "MAJOR.MINOR.PATCH[.PYTAGNUM]"
167
167
 
168
168
  [bumpver.file_patterns]
@@ -1 +0,0 @@
1
- __version__ = "0.5.16"
File without changes
File without changes
File without changes
File without changes