BabelDOC 0.5.16__tar.gz → 0.5.18__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.18}/PKG-INFO +4 -3
  2. {babeldoc-0.5.16 → babeldoc-0.5.18}/README.md +3 -2
  3. babeldoc-0.5.18/babeldoc/__init__.py +1 -0
  4. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/const.py +1 -1
  5. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/babelpdf/cidfont.py +6 -3
  6. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/frontend/il_creater.py +73 -0
  7. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/midend/automatic_term_extractor.py +5 -1
  8. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/high_level.py +17 -0
  9. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/translation_config.py +49 -1
  10. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/main.py +7 -1
  11. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/CONTRIBUTOR_REWARD.md +2 -1
  12. {babeldoc-0.5.16 → babeldoc-0.5.18}/pyproject.toml +2 -2
  13. babeldoc-0.5.16/babeldoc/__init__.py +0 -1
  14. {babeldoc-0.5.16 → babeldoc-0.5.18}/.cursorignore +0 -0
  15. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  16. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  17. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/PULL_REQUEST_TEMPLATE/pr_form.yml +0 -0
  18. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  19. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/dependabot.yml +0 -0
  20. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/labels.yml +0 -0
  21. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/release-drafter.yml +0 -0
  22. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/workflows/codeql.yml +0 -0
  23. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/workflows/docs.yml +0 -0
  24. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/workflows/labeler.yml +0 -0
  25. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/workflows/lint.yml +0 -0
  26. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/workflows/pr-lint.yml +0 -0
  27. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/workflows/publish-to-pypi.yml +0 -0
  28. {babeldoc-0.5.16 → babeldoc-0.5.18}/.github/workflows/test.yml +0 -0
  29. {babeldoc-0.5.16 → babeldoc-0.5.18}/.gitignore +0 -0
  30. {babeldoc-0.5.16 → babeldoc-0.5.18}/.pre-commit-config.yaml +0 -0
  31. {babeldoc-0.5.16 → babeldoc-0.5.18}/LICENSE +0 -0
  32. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/assets/assets.py +0 -0
  33. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/assets/embedding_assets_metadata.py +0 -0
  34. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/asynchronize/__init__.py +0 -0
  35. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/babeldoc_exception/BabelDOCException.py +0 -0
  36. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/babeldoc_exception/__init__.py +0 -0
  37. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/docvision/README.md +0 -0
  38. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/docvision/__init__.py +0 -0
  39. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/docvision/base_doclayout.py +0 -0
  40. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/docvision/doclayout.py +0 -0
  41. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/docvision/rpc_doclayout.py +0 -0
  42. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/docvision/rpc_doclayout2.py +0 -0
  43. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/docvision/rpc_doclayout3.py +0 -0
  44. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/docvision/rpc_doclayout4.py +0 -0
  45. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/docvision/rpc_doclayout5.py +0 -0
  46. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/docvision/rpc_doclayout6.py +0 -0
  47. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/docvision/rpc_doclayout7.py +0 -0
  48. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
  49. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/__init__.py +0 -0
  50. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/__init__.py +0 -0
  51. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/babelpdf/base14.py +0 -0
  52. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/babelpdf/encoding.py +0 -0
  53. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/babelpdf/utils.py +0 -0
  54. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/babelpdf/win_core.py +0 -0
  55. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/converter.py +0 -0
  56. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/__init__.py +0 -0
  57. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/backend/__init__.py +0 -0
  58. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/backend/pdf_creater.py +0 -0
  59. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/frontend/__init__.py +0 -0
  60. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/il_version_1.py +0 -0
  61. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/il_version_1.rnc +0 -0
  62. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/il_version_1.rng +0 -0
  63. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/il_version_1.xsd +0 -0
  64. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/midend/__init__.py +0 -0
  65. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/midend/add_debug_information.py +0 -0
  66. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/midend/detect_scanned_file.py +0 -0
  67. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/midend/il_translator.py +0 -0
  68. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/midend/il_translator_llm_only.py +0 -0
  69. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/midend/layout_parser.py +0 -0
  70. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/midend/paragraph_finder.py +0 -0
  71. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/midend/remove_descent.py +0 -0
  72. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/midend/styles_and_formulas.py +0 -0
  73. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/midend/table_parser.py +0 -0
  74. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/midend/typesetting.py +0 -0
  75. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/utils/__init__.py +0 -0
  76. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/utils/extract_char.py +0 -0
  77. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/utils/fontmap.py +0 -0
  78. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/utils/formular_helper.py +0 -0
  79. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/utils/layout_helper.py +0 -0
  80. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/utils/matrix_helper.py +0 -0
  81. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/utils/mupdf_helper.py +0 -0
  82. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/utils/paragraph_helper.py +0 -0
  83. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/utils/spatial_analyzer.py +0 -0
  84. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/utils/style_helper.py +0 -0
  85. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/utils/zstd_helper.py +0 -0
  86. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/document_il/xml_converter.py +0 -0
  87. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/pdfinterp.py +0 -0
  88. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/result_merger.py +0 -0
  89. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/format/pdf/split_manager.py +0 -0
  90. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/glossary.py +0 -0
  91. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/LICENSE +0 -0
  92. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/__init__.py +0 -0
  93. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/_saslprep.py +0 -0
  94. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/arcfour.py +0 -0
  95. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/ascii85.py +0 -0
  96. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/casting.py +0 -0
  97. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/ccitt.py +0 -0
  98. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/78-EUC-H.pickle.gz +0 -0
  99. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/78-EUC-V.pickle.gz +0 -0
  100. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/78-H.pickle.gz +0 -0
  101. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/78-RKSJ-H.pickle.gz +0 -0
  102. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/78-RKSJ-V.pickle.gz +0 -0
  103. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/78-V.pickle.gz +0 -0
  104. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/78ms-RKSJ-H.pickle.gz +0 -0
  105. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/78ms-RKSJ-V.pickle.gz +0 -0
  106. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/83pv-RKSJ-H.pickle.gz +0 -0
  107. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/83pv-RKSJ-V.pickle.gz +0 -0
  108. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/90ms-RKSJ-H.pickle.gz +0 -0
  109. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/90ms-RKSJ-V.pickle.gz +0 -0
  110. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/90msp-RKSJ-H.pickle.gz +0 -0
  111. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/90msp-RKSJ-V.pickle.gz +0 -0
  112. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/90pv-RKSJ-H.pickle.gz +0 -0
  113. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/90pv-RKSJ-V.pickle.gz +0 -0
  114. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Add-H.pickle.gz +0 -0
  115. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Add-RKSJ-H.pickle.gz +0 -0
  116. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Add-RKSJ-V.pickle.gz +0 -0
  117. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Add-V.pickle.gz +0 -0
  118. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/B5-H.pickle.gz +0 -0
  119. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/B5-V.pickle.gz +0 -0
  120. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/B5pc-H.pickle.gz +0 -0
  121. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/B5pc-V.pickle.gz +0 -0
  122. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/CNS-EUC-H.pickle.gz +0 -0
  123. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/CNS-EUC-V.pickle.gz +0 -0
  124. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/CNS1-H.pickle.gz +0 -0
  125. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/CNS1-V.pickle.gz +0 -0
  126. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/CNS2-H.pickle.gz +0 -0
  127. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/CNS2-V.pickle.gz +0 -0
  128. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/ETHK-B5-H.pickle.gz +0 -0
  129. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/ETHK-B5-V.pickle.gz +0 -0
  130. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/ETen-B5-H.pickle.gz +0 -0
  131. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/ETen-B5-V.pickle.gz +0 -0
  132. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/ETenms-B5-H.pickle.gz +0 -0
  133. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/ETenms-B5-V.pickle.gz +0 -0
  134. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/EUC-H.pickle.gz +0 -0
  135. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/EUC-V.pickle.gz +0 -0
  136. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Ext-H.pickle.gz +0 -0
  137. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Ext-RKSJ-H.pickle.gz +0 -0
  138. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Ext-RKSJ-V.pickle.gz +0 -0
  139. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Ext-V.pickle.gz +0 -0
  140. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GB-EUC-H.pickle.gz +0 -0
  141. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GB-EUC-V.pickle.gz +0 -0
  142. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GB-H.pickle.gz +0 -0
  143. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GB-V.pickle.gz +0 -0
  144. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBK-EUC-H.pickle.gz +0 -0
  145. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBK-EUC-V.pickle.gz +0 -0
  146. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBK2K-H.pickle.gz +0 -0
  147. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBK2K-V.pickle.gz +0 -0
  148. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBKp-EUC-H.pickle.gz +0 -0
  149. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBKp-EUC-V.pickle.gz +0 -0
  150. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBT-EUC-H.pickle.gz +0 -0
  151. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBT-EUC-V.pickle.gz +0 -0
  152. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBT-H.pickle.gz +0 -0
  153. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBT-V.pickle.gz +0 -0
  154. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBTpc-EUC-H.pickle.gz +0 -0
  155. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBTpc-EUC-V.pickle.gz +0 -0
  156. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBpc-EUC-H.pickle.gz +0 -0
  157. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/GBpc-EUC-V.pickle.gz +0 -0
  158. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/H.pickle.gz +0 -0
  159. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/HKdla-B5-H.pickle.gz +0 -0
  160. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/HKdla-B5-V.pickle.gz +0 -0
  161. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/HKdlb-B5-H.pickle.gz +0 -0
  162. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/HKdlb-B5-V.pickle.gz +0 -0
  163. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/HKgccs-B5-H.pickle.gz +0 -0
  164. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/HKgccs-B5-V.pickle.gz +0 -0
  165. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/HKm314-B5-H.pickle.gz +0 -0
  166. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/HKm314-B5-V.pickle.gz +0 -0
  167. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/HKm471-B5-H.pickle.gz +0 -0
  168. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/HKm471-B5-V.pickle.gz +0 -0
  169. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/HKscs-B5-H.pickle.gz +0 -0
  170. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/HKscs-B5-V.pickle.gz +0 -0
  171. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Hankaku-H.pickle.gz +0 -0
  172. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Hankaku-V.pickle.gz +0 -0
  173. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Hiragana-H.pickle.gz +0 -0
  174. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Hiragana-V.pickle.gz +0 -0
  175. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/KSC-EUC-H.pickle.gz +0 -0
  176. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/KSC-EUC-V.pickle.gz +0 -0
  177. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/KSC-H.pickle.gz +0 -0
  178. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/KSC-Johab-H.pickle.gz +0 -0
  179. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/KSC-Johab-V.pickle.gz +0 -0
  180. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/KSC-V.pickle.gz +0 -0
  181. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/KSCms-UHC-H.pickle.gz +0 -0
  182. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/KSCms-UHC-HW-H.pickle.gz +0 -0
  183. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/KSCms-UHC-HW-V.pickle.gz +0 -0
  184. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/KSCms-UHC-V.pickle.gz +0 -0
  185. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/KSCpc-EUC-H.pickle.gz +0 -0
  186. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/KSCpc-EUC-V.pickle.gz +0 -0
  187. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Katakana-H.pickle.gz +0 -0
  188. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Katakana-V.pickle.gz +0 -0
  189. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/NWP-H.pickle.gz +0 -0
  190. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/NWP-V.pickle.gz +0 -0
  191. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/README.txt +0 -0
  192. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/RKSJ-H.pickle.gz +0 -0
  193. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/RKSJ-V.pickle.gz +0 -0
  194. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Roman-H.pickle.gz +0 -0
  195. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/Roman-V.pickle.gz +0 -0
  196. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniCNS-UCS2-H.pickle.gz +0 -0
  197. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniCNS-UCS2-V.pickle.gz +0 -0
  198. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniCNS-UTF16-H.pickle.gz +0 -0
  199. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniCNS-UTF16-V.pickle.gz +0 -0
  200. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniCNS-UTF32-H.pickle.gz +0 -0
  201. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniCNS-UTF32-V.pickle.gz +0 -0
  202. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniCNS-UTF8-H.pickle.gz +0 -0
  203. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniCNS-UTF8-V.pickle.gz +0 -0
  204. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniGB-UCS2-H.pickle.gz +0 -0
  205. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniGB-UCS2-V.pickle.gz +0 -0
  206. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniGB-UTF16-H.pickle.gz +0 -0
  207. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniGB-UTF16-V.pickle.gz +0 -0
  208. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniGB-UTF32-H.pickle.gz +0 -0
  209. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniGB-UTF32-V.pickle.gz +0 -0
  210. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniGB-UTF8-H.pickle.gz +0 -0
  211. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniGB-UTF8-V.pickle.gz +0 -0
  212. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS-UCS2-H.pickle.gz +0 -0
  213. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS-UCS2-HW-H.pickle.gz +0 -0
  214. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS-UCS2-HW-V.pickle.gz +0 -0
  215. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS-UCS2-V.pickle.gz +0 -0
  216. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS-UTF16-H.pickle.gz +0 -0
  217. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS-UTF16-V.pickle.gz +0 -0
  218. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS-UTF32-H.pickle.gz +0 -0
  219. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS-UTF32-V.pickle.gz +0 -0
  220. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS-UTF8-H.pickle.gz +0 -0
  221. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS-UTF8-V.pickle.gz +0 -0
  222. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS2004-UTF16-H.pickle.gz +0 -0
  223. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS2004-UTF16-V.pickle.gz +0 -0
  224. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS2004-UTF32-H.pickle.gz +0 -0
  225. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS2004-UTF32-V.pickle.gz +0 -0
  226. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS2004-UTF8-H.pickle.gz +0 -0
  227. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJIS2004-UTF8-V.pickle.gz +0 -0
  228. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJISX0213-UTF32-H.pickle.gz +0 -0
  229. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJISX0213-UTF32-V.pickle.gz +0 -0
  230. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJISX02132004-UTF32-H.pickle.gz +0 -0
  231. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniJISX02132004-UTF32-V.pickle.gz +0 -0
  232. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniKS-UCS2-H.pickle.gz +0 -0
  233. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniKS-UCS2-V.pickle.gz +0 -0
  234. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniKS-UTF16-H.pickle.gz +0 -0
  235. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniKS-UTF16-V.pickle.gz +0 -0
  236. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniKS-UTF32-H.pickle.gz +0 -0
  237. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniKS-UTF32-V.pickle.gz +0 -0
  238. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniKS-UTF8-H.pickle.gz +0 -0
  239. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/UniKS-UTF8-V.pickle.gz +0 -0
  240. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/V.pickle.gz +0 -0
  241. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/WP-Symbol-H.pickle.gz +0 -0
  242. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/WP-Symbol-V.pickle.gz +0 -0
  243. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/to-unicode-Adobe-CNS1.pickle.gz +0 -0
  244. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/to-unicode-Adobe-GB1.pickle.gz +0 -0
  245. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/to-unicode-Adobe-Japan1.pickle.gz +0 -0
  246. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmap/to-unicode-Adobe-Korea1.pickle.gz +0 -0
  247. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/cmapdb.py +0 -0
  248. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/converter.py +0 -0
  249. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/data_structures.py +0 -0
  250. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/encodingdb.py +0 -0
  251. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/fontmetrics.py +0 -0
  252. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/glyphlist.py +0 -0
  253. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/high_level.py +0 -0
  254. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/image.py +0 -0
  255. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/jbig2.py +0 -0
  256. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/latin_enc.py +0 -0
  257. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/layout.py +0 -0
  258. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/lzw.py +0 -0
  259. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/pdfcolor.py +0 -0
  260. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/pdfdevice.py +0 -0
  261. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/pdfdocument.py +0 -0
  262. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/pdfexceptions.py +0 -0
  263. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/pdffont.py +0 -0
  264. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/pdfinterp.py +0 -0
  265. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/pdfpage.py +0 -0
  266. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/pdfparser.py +0 -0
  267. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/pdftypes.py +0 -0
  268. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/psexceptions.py +0 -0
  269. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/psparser.py +0 -0
  270. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/py.typed +0 -0
  271. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/runlength.py +0 -0
  272. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/settings.py +0 -0
  273. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/pdfminer/utils.py +0 -0
  274. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/progress_monitor.py +0 -0
  275. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/tools/generate_font_metadata.py +0 -0
  276. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/tools/italic_assistance.py +0 -0
  277. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/tools/italic_recognize_tool.py +0 -0
  278. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/translator/__init__.py +0 -0
  279. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/translator/cache.py +0 -0
  280. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/translator/translator.py +0 -0
  281. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/utils/__init__.py +0 -0
  282. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/utils/atomic_integer.py +0 -0
  283. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/utils/memory.py +0 -0
  284. {babeldoc-0.5.16 → babeldoc-0.5.18}/babeldoc/utils/priority_thread_pool_executor.py +0 -0
  285. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/CODE_OF_CONDUCT.md +0 -0
  286. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/CONTRIBUTING.md +0 -0
  287. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
  288. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
  289. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
  290. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
  291. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
  292. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/ImplementationDetails/README.md +0 -0
  293. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
  294. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
  295. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/README.md +0 -0
  296. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/deploy.sh +0 -0
  297. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/example/demo_glossary.csv +0 -0
  298. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/images/babeldoc-banner.png +0 -0
  299. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
  300. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
  301. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
  302. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
  303. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/images/babeldoc-big-logo.png +0 -0
  304. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/images/babeldoc-contributor_reward_example.png +0 -0
  305. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/images/babeldoc-preview.gif +0 -0
  306. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
  307. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
  308. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/images/babeldoc-small-logo.png +0 -0
  309. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/index.md +0 -0
  310. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/intro-to-pdf-object.md +0 -0
  311. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/requirements.txt +0 -0
  312. {babeldoc-0.5.16 → babeldoc-0.5.18}/docs/supported_languages.md +0 -0
  313. {babeldoc-0.5.16 → babeldoc-0.5.18}/mkdocs.yml +0 -0
  314. {babeldoc-0.5.16 → babeldoc-0.5.18}/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.18
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).
@@ -268,6 +268,7 @@ uv run babeldoc --files example.pdf --files example2.pdf --openai --openai-model
268
268
  - `--openai-base-url`: Base URL for OpenAI API
269
269
  - `--openai-api-key`: API key for OpenAI service
270
270
  - `--enable-json-mode-if-requested`: Enable JSON mode for OpenAI requests (default: False)
271
+ - `--term-pool-max-workers`: Maximum number of worker threads dedicated to automatic term extraction. If not specified, this defaults to the value of `--pool-max-workers`, which itself defaults to the QPS value when unset.
271
272
 
272
273
  > [!TIP]
273
274
  >
@@ -489,4 +490,4 @@ Everyone interacting in YADT and its sub-projects' codebases, issue trackers, ch
489
490
  > 2. Then, during the scanned document detection phase (`DetectScannedFile` stage):
490
491
  > * 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
492
  >
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.
493
+ > 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).
@@ -212,6 +212,7 @@ uv run babeldoc --files example.pdf --files example2.pdf --openai --openai-model
212
212
  - `--openai-base-url`: Base URL for OpenAI API
213
213
  - `--openai-api-key`: API key for OpenAI service
214
214
  - `--enable-json-mode-if-requested`: Enable JSON mode for OpenAI requests (default: False)
215
+ - `--term-pool-max-workers`: Maximum number of worker threads dedicated to automatic term extraction. If not specified, this defaults to the value of `--pool-max-workers`, which itself defaults to the QPS value when unset.
215
216
 
216
217
  > [!TIP]
217
218
  >
@@ -433,4 +434,4 @@ Everyone interacting in YADT and its sub-projects' codebases, issue trackers, ch
433
434
  > 2. Then, during the scanned document detection phase (`DetectScannedFile` stage):
434
435
  > * 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
436
  >
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.
437
+ > 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.18"
@@ -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.18"
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
@@ -342,8 +342,12 @@ class AutomaticTermExtractor:
342
342
  self.stage_name,
343
343
  total,
344
344
  ) as pbar:
345
+ max_workers = self.translation_config.term_pool_max_workers
346
+ logger.info(
347
+ f"Using {max_workers} worker threads for automatic term extraction."
348
+ )
345
349
  with PriorityThreadPoolExecutor(
346
- max_workers=self.translation_config.pool_max_workers,
350
+ max_workers=max_workers,
347
351
  ) as executor:
348
352
  for page in doc_il.page:
349
353
  self.process_page(page, executor, pbar, tracker.new_page())
@@ -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,12 +122,24 @@ 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
118
138
  def create_max_pages_per_part_split_strategy(max_pages_per_part: int):
119
139
  return PageCountStrategy(max_pages_per_part)
120
140
 
141
+ # for backward compatibility,
142
+ # new parameters should be added at the end of the function.
121
143
  def __init__(
122
144
  self,
123
145
  translator: BaseTranslator,
@@ -176,6 +198,7 @@ class TranslationConfig:
176
198
  skip_formula_offset_calculation: bool = False,
177
199
  term_extraction_translator: BaseTranslator | None = None,
178
200
  metadata_extra_data: str | None = None,
201
+ term_pool_max_workers: int | None = None,
179
202
  ):
180
203
  self.translator = translator
181
204
  self.term_extraction_translator = term_extraction_translator or translator
@@ -204,6 +227,13 @@ class TranslationConfig:
204
227
  self.pool_max_workers = (
205
228
  pool_max_workers if pool_max_workers is not None else qps
206
229
  )
230
+ # Set term_pool_max_workers for automatic term extraction.
231
+ # If not provided, default to pool_max_workers.
232
+ self.term_pool_max_workers = (
233
+ term_pool_max_workers
234
+ if term_pool_max_workers is not None
235
+ else self.pool_max_workers
236
+ )
207
237
  self.split_short_lines = split_short_lines
208
238
 
209
239
  self.short_line_split_factor = short_line_split_factor
@@ -463,6 +493,8 @@ class TranslateResult:
463
493
  no_watermark_dual_pdf_path: Path | None
464
494
  peak_memory_usage: int | None
465
495
  auto_extracted_glossary_path: Path | None
496
+ total_valid_character_count: int | None
497
+ total_valid_text_token_count: int | None
466
498
 
467
499
  def __init__(
468
500
  self,
@@ -479,6 +511,8 @@ class TranslateResult:
479
511
  self.no_watermark_dual_pdf_path = dual_pdf_path
480
512
 
481
513
  self.auto_extracted_glossary_path = auto_extracted_glossary_path
514
+ self.total_valid_character_count = None
515
+ self.total_valid_text_token_count = None
482
516
 
483
517
  def __str__(self):
484
518
  """Return a human-readable string representation of the translation result."""
@@ -524,6 +558,20 @@ class TranslateResult:
524
558
  if hasattr(self, "peak_memory_usage") and self.peak_memory_usage:
525
559
  result.append(f"\tPeak memory usage: {self.peak_memory_usage} MB")
526
560
 
561
+ if hasattr(self, "total_valid_character_count") and isinstance(
562
+ self.total_valid_character_count, int
563
+ ):
564
+ result.append(
565
+ f"\tTotal valid character count: {self.total_valid_character_count}"
566
+ )
567
+
568
+ if hasattr(self, "total_valid_text_token_count") and isinstance(
569
+ self.total_valid_text_token_count, int
570
+ ):
571
+ result.append(
572
+ f"\tTotal valid text token count (gpt-4o): {self.total_valid_text_token_count}"
573
+ )
574
+
527
575
  if result:
528
576
  result.insert(0, "Translation results:")
529
577
 
@@ -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.18"
30
30
 
31
31
 
32
32
  def create_parser():
@@ -280,6 +280,11 @@ def create_parser():
280
280
  type=int,
281
281
  help="Maximum number of worker threads for internal task processing pools. If not specified, defaults to QPS value. This parameter directly sets the worker count, replacing previous QPS-based dynamic calculations.",
282
282
  )
283
+ translation_group.add_argument(
284
+ "--term-pool-max-workers",
285
+ type=int,
286
+ help="Maximum number of worker threads dedicated to automatic term extraction. If not specified, defaults to --pool-max-workers (or QPS value when unset).",
287
+ )
283
288
  translation_group.add_argument(
284
289
  "--no-auto-extract-glossary",
285
290
  action="store_false",
@@ -694,6 +699,7 @@ async def main():
694
699
  figure_table_protection_threshold=args.figure_table_protection_threshold,
695
700
  skip_formula_offset_calculation=args.skip_formula_offset_calculation,
696
701
  metadata_extra_data=args.metadata_extra_data,
702
+ term_pool_max_workers=args.term_pool_max_workers,
697
703
  )
698
704
 
699
705
  def nop(_x):
@@ -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.18"
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.18"
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