BabelDOC 0.4.2__tar.gz → 0.4.6__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 (301) hide show
  1. {babeldoc-0.4.2 → babeldoc-0.4.6}/PKG-INFO +1 -1
  2. babeldoc-0.4.6/babeldoc/__init__.py +1 -0
  3. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/const.py +1 -1
  4. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/docvision/rpc_doclayout2.py +1 -1
  5. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/backend/pdf_creater.py +1 -1
  6. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/frontend/il_creater.py +1 -1
  7. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/midend/add_debug_information.py +3 -4
  8. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/midend/styles_and_formulas.py +87 -41
  9. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/midend/typesetting.py +8 -7
  10. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/utils/layout_helper.py +2 -0
  11. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/high_level.py +10 -1
  12. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/result_merger.py +4 -2
  13. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/translation_config.py +2 -2
  14. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/glossary.py +11 -1
  15. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/main.py +1 -1
  16. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/pdffont.py +7 -89
  17. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/tools/italic_assistance.py +2 -3
  18. {babeldoc-0.4.2 → babeldoc-0.4.6}/pyproject.toml +7 -3
  19. {babeldoc-0.4.2 → babeldoc-0.4.6}/uv.lock +2 -1
  20. babeldoc-0.4.2/babeldoc/__init__.py +0 -1
  21. {babeldoc-0.4.2 → babeldoc-0.4.6}/.cursorignore +0 -0
  22. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  23. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  24. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/PULL_REQUEST_TEMPLATE/pr_form.yml +0 -0
  25. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  26. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/dependabot.yml +0 -0
  27. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/labels.yml +0 -0
  28. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/release-drafter.yml +0 -0
  29. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/workflows/codeql.yml +0 -0
  30. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/workflows/docs.yml +0 -0
  31. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/workflows/labeler.yml +0 -0
  32. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/workflows/lint.yml +0 -0
  33. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/workflows/pr-lint.yml +0 -0
  34. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/workflows/publish-to-pypi.yml +0 -0
  35. {babeldoc-0.4.2 → babeldoc-0.4.6}/.github/workflows/test.yml +0 -0
  36. {babeldoc-0.4.2 → babeldoc-0.4.6}/.gitignore +0 -0
  37. {babeldoc-0.4.2 → babeldoc-0.4.6}/.pre-commit-config.yaml +0 -0
  38. {babeldoc-0.4.2 → babeldoc-0.4.6}/LICENSE +0 -0
  39. {babeldoc-0.4.2 → babeldoc-0.4.6}/README.md +0 -0
  40. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/assets/assets.py +0 -0
  41. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/assets/embedding_assets_metadata.py +0 -0
  42. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/asynchronize/__init__.py +0 -0
  43. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/babeldoc_exception/BabelDOCException.py +0 -0
  44. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/babeldoc_exception/__init__.py +0 -0
  45. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/docvision/README.md +0 -0
  46. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/docvision/__init__.py +0 -0
  47. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/docvision/base_doclayout.py +0 -0
  48. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/docvision/doclayout.py +0 -0
  49. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/docvision/rpc_doclayout.py +0 -0
  50. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
  51. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/__init__.py +0 -0
  52. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/__init__.py +0 -0
  53. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/converter.py +0 -0
  54. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/__init__.py +0 -0
  55. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/backend/__init__.py +0 -0
  56. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/frontend/__init__.py +0 -0
  57. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/il_version_1.py +0 -0
  58. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/il_version_1.rnc +0 -0
  59. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/il_version_1.rng +0 -0
  60. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/il_version_1.xsd +0 -0
  61. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/midend/__init__.py +0 -0
  62. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/midend/automatic_term_extractor.py +0 -0
  63. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/midend/detect_scanned_file.py +0 -0
  64. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/midend/il_translator.py +0 -0
  65. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/midend/il_translator_llm_only.py +0 -0
  66. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/midend/layout_parser.py +0 -0
  67. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/midend/paragraph_finder.py +0 -0
  68. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/midend/remove_descent.py +0 -0
  69. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/midend/table_parser.py +0 -0
  70. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/utils/__init__.py +0 -0
  71. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/utils/fontmap.py +0 -0
  72. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/utils/formular_helper.py +0 -0
  73. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/utils/mupdf_helper.py +0 -0
  74. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/utils/paragraph_helper.py +0 -0
  75. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/utils/style_helper.py +0 -0
  76. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/utils/zstd_helper.py +0 -0
  77. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/document_il/xml_converter.py +0 -0
  78. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/pdfinterp.py +0 -0
  79. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/format/pdf/split_manager.py +0 -0
  80. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/LICENSE +0 -0
  81. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/__init__.py +0 -0
  82. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/_saslprep.py +0 -0
  83. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/arcfour.py +0 -0
  84. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/ascii85.py +0 -0
  85. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/casting.py +0 -0
  86. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/ccitt.py +0 -0
  87. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/78-EUC-H.pickle.gz +0 -0
  88. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/78-EUC-V.pickle.gz +0 -0
  89. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/78-H.pickle.gz +0 -0
  90. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/78-RKSJ-H.pickle.gz +0 -0
  91. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/78-RKSJ-V.pickle.gz +0 -0
  92. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/78-V.pickle.gz +0 -0
  93. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/78ms-RKSJ-H.pickle.gz +0 -0
  94. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/78ms-RKSJ-V.pickle.gz +0 -0
  95. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/83pv-RKSJ-H.pickle.gz +0 -0
  96. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/83pv-RKSJ-V.pickle.gz +0 -0
  97. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/90ms-RKSJ-H.pickle.gz +0 -0
  98. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/90ms-RKSJ-V.pickle.gz +0 -0
  99. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/90msp-RKSJ-H.pickle.gz +0 -0
  100. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/90msp-RKSJ-V.pickle.gz +0 -0
  101. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/90pv-RKSJ-H.pickle.gz +0 -0
  102. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/90pv-RKSJ-V.pickle.gz +0 -0
  103. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Add-H.pickle.gz +0 -0
  104. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Add-RKSJ-H.pickle.gz +0 -0
  105. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Add-RKSJ-V.pickle.gz +0 -0
  106. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Add-V.pickle.gz +0 -0
  107. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/B5-H.pickle.gz +0 -0
  108. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/B5-V.pickle.gz +0 -0
  109. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/B5pc-H.pickle.gz +0 -0
  110. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/B5pc-V.pickle.gz +0 -0
  111. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/CNS-EUC-H.pickle.gz +0 -0
  112. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/CNS-EUC-V.pickle.gz +0 -0
  113. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/CNS1-H.pickle.gz +0 -0
  114. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/CNS1-V.pickle.gz +0 -0
  115. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/CNS2-H.pickle.gz +0 -0
  116. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/CNS2-V.pickle.gz +0 -0
  117. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/ETHK-B5-H.pickle.gz +0 -0
  118. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/ETHK-B5-V.pickle.gz +0 -0
  119. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/ETen-B5-H.pickle.gz +0 -0
  120. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/ETen-B5-V.pickle.gz +0 -0
  121. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/ETenms-B5-H.pickle.gz +0 -0
  122. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/ETenms-B5-V.pickle.gz +0 -0
  123. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/EUC-H.pickle.gz +0 -0
  124. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/EUC-V.pickle.gz +0 -0
  125. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Ext-H.pickle.gz +0 -0
  126. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Ext-RKSJ-H.pickle.gz +0 -0
  127. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Ext-RKSJ-V.pickle.gz +0 -0
  128. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Ext-V.pickle.gz +0 -0
  129. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GB-EUC-H.pickle.gz +0 -0
  130. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GB-EUC-V.pickle.gz +0 -0
  131. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GB-H.pickle.gz +0 -0
  132. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GB-V.pickle.gz +0 -0
  133. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBK-EUC-H.pickle.gz +0 -0
  134. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBK-EUC-V.pickle.gz +0 -0
  135. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBK2K-H.pickle.gz +0 -0
  136. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBK2K-V.pickle.gz +0 -0
  137. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBKp-EUC-H.pickle.gz +0 -0
  138. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBKp-EUC-V.pickle.gz +0 -0
  139. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBT-EUC-H.pickle.gz +0 -0
  140. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBT-EUC-V.pickle.gz +0 -0
  141. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBT-H.pickle.gz +0 -0
  142. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBT-V.pickle.gz +0 -0
  143. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBTpc-EUC-H.pickle.gz +0 -0
  144. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBTpc-EUC-V.pickle.gz +0 -0
  145. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBpc-EUC-H.pickle.gz +0 -0
  146. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/GBpc-EUC-V.pickle.gz +0 -0
  147. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/H.pickle.gz +0 -0
  148. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/HKdla-B5-H.pickle.gz +0 -0
  149. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/HKdla-B5-V.pickle.gz +0 -0
  150. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/HKdlb-B5-H.pickle.gz +0 -0
  151. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/HKdlb-B5-V.pickle.gz +0 -0
  152. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/HKgccs-B5-H.pickle.gz +0 -0
  153. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/HKgccs-B5-V.pickle.gz +0 -0
  154. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/HKm314-B5-H.pickle.gz +0 -0
  155. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/HKm314-B5-V.pickle.gz +0 -0
  156. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/HKm471-B5-H.pickle.gz +0 -0
  157. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/HKm471-B5-V.pickle.gz +0 -0
  158. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/HKscs-B5-H.pickle.gz +0 -0
  159. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/HKscs-B5-V.pickle.gz +0 -0
  160. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Hankaku-H.pickle.gz +0 -0
  161. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Hankaku-V.pickle.gz +0 -0
  162. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Hiragana-H.pickle.gz +0 -0
  163. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Hiragana-V.pickle.gz +0 -0
  164. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/KSC-EUC-H.pickle.gz +0 -0
  165. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/KSC-EUC-V.pickle.gz +0 -0
  166. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/KSC-H.pickle.gz +0 -0
  167. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/KSC-Johab-H.pickle.gz +0 -0
  168. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/KSC-Johab-V.pickle.gz +0 -0
  169. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/KSC-V.pickle.gz +0 -0
  170. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/KSCms-UHC-H.pickle.gz +0 -0
  171. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/KSCms-UHC-HW-H.pickle.gz +0 -0
  172. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/KSCms-UHC-HW-V.pickle.gz +0 -0
  173. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/KSCms-UHC-V.pickle.gz +0 -0
  174. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/KSCpc-EUC-H.pickle.gz +0 -0
  175. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/KSCpc-EUC-V.pickle.gz +0 -0
  176. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Katakana-H.pickle.gz +0 -0
  177. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Katakana-V.pickle.gz +0 -0
  178. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/NWP-H.pickle.gz +0 -0
  179. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/NWP-V.pickle.gz +0 -0
  180. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/README.txt +0 -0
  181. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/RKSJ-H.pickle.gz +0 -0
  182. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/RKSJ-V.pickle.gz +0 -0
  183. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Roman-H.pickle.gz +0 -0
  184. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/Roman-V.pickle.gz +0 -0
  185. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniCNS-UCS2-H.pickle.gz +0 -0
  186. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniCNS-UCS2-V.pickle.gz +0 -0
  187. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniCNS-UTF16-H.pickle.gz +0 -0
  188. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniCNS-UTF16-V.pickle.gz +0 -0
  189. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniCNS-UTF32-H.pickle.gz +0 -0
  190. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniCNS-UTF32-V.pickle.gz +0 -0
  191. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniCNS-UTF8-H.pickle.gz +0 -0
  192. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniCNS-UTF8-V.pickle.gz +0 -0
  193. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniGB-UCS2-H.pickle.gz +0 -0
  194. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniGB-UCS2-V.pickle.gz +0 -0
  195. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniGB-UTF16-H.pickle.gz +0 -0
  196. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniGB-UTF16-V.pickle.gz +0 -0
  197. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniGB-UTF32-H.pickle.gz +0 -0
  198. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniGB-UTF32-V.pickle.gz +0 -0
  199. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniGB-UTF8-H.pickle.gz +0 -0
  200. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniGB-UTF8-V.pickle.gz +0 -0
  201. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS-UCS2-H.pickle.gz +0 -0
  202. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS-UCS2-HW-H.pickle.gz +0 -0
  203. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS-UCS2-HW-V.pickle.gz +0 -0
  204. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS-UCS2-V.pickle.gz +0 -0
  205. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS-UTF16-H.pickle.gz +0 -0
  206. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS-UTF16-V.pickle.gz +0 -0
  207. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS-UTF32-H.pickle.gz +0 -0
  208. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS-UTF32-V.pickle.gz +0 -0
  209. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS-UTF8-H.pickle.gz +0 -0
  210. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS-UTF8-V.pickle.gz +0 -0
  211. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS2004-UTF16-H.pickle.gz +0 -0
  212. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS2004-UTF16-V.pickle.gz +0 -0
  213. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS2004-UTF32-H.pickle.gz +0 -0
  214. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS2004-UTF32-V.pickle.gz +0 -0
  215. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS2004-UTF8-H.pickle.gz +0 -0
  216. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJIS2004-UTF8-V.pickle.gz +0 -0
  217. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJISX0213-UTF32-H.pickle.gz +0 -0
  218. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJISX0213-UTF32-V.pickle.gz +0 -0
  219. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJISX02132004-UTF32-H.pickle.gz +0 -0
  220. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniJISX02132004-UTF32-V.pickle.gz +0 -0
  221. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniKS-UCS2-H.pickle.gz +0 -0
  222. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniKS-UCS2-V.pickle.gz +0 -0
  223. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniKS-UTF16-H.pickle.gz +0 -0
  224. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniKS-UTF16-V.pickle.gz +0 -0
  225. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniKS-UTF32-H.pickle.gz +0 -0
  226. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniKS-UTF32-V.pickle.gz +0 -0
  227. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniKS-UTF8-H.pickle.gz +0 -0
  228. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/UniKS-UTF8-V.pickle.gz +0 -0
  229. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/V.pickle.gz +0 -0
  230. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/WP-Symbol-H.pickle.gz +0 -0
  231. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/WP-Symbol-V.pickle.gz +0 -0
  232. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/to-unicode-Adobe-CNS1.pickle.gz +0 -0
  233. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/to-unicode-Adobe-GB1.pickle.gz +0 -0
  234. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/to-unicode-Adobe-Japan1.pickle.gz +0 -0
  235. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmap/to-unicode-Adobe-Korea1.pickle.gz +0 -0
  236. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/cmapdb.py +0 -0
  237. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/converter.py +0 -0
  238. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/data_structures.py +0 -0
  239. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/encodingdb.py +0 -0
  240. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/fontmetrics.py +0 -0
  241. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/glyphlist.py +0 -0
  242. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/high_level.py +0 -0
  243. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/image.py +0 -0
  244. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/jbig2.py +0 -0
  245. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/latin_enc.py +0 -0
  246. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/layout.py +0 -0
  247. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/lzw.py +0 -0
  248. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/pdfcolor.py +0 -0
  249. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/pdfdevice.py +0 -0
  250. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/pdfdocument.py +0 -0
  251. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/pdfexceptions.py +0 -0
  252. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/pdfinterp.py +0 -0
  253. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/pdfpage.py +0 -0
  254. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/pdfparser.py +0 -0
  255. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/pdftypes.py +0 -0
  256. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/psexceptions.py +0 -0
  257. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/psparser.py +0 -0
  258. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/py.typed +0 -0
  259. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/runlength.py +0 -0
  260. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/settings.py +0 -0
  261. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/pdfminer/utils.py +0 -0
  262. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/progress_monitor.py +0 -0
  263. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/tools/generate_font_metadata.py +0 -0
  264. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/tools/italic_recognize_tool.py +0 -0
  265. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/translator/__init__.py +0 -0
  266. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/translator/cache.py +0 -0
  267. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/translator/translator.py +0 -0
  268. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/utils/__init__.py +0 -0
  269. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/utils/atomic_integer.py +0 -0
  270. {babeldoc-0.4.2 → babeldoc-0.4.6}/babeldoc/utils/priority_thread_pool_executor.py +0 -0
  271. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/CODE_OF_CONDUCT.md +0 -0
  272. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/CONTRIBUTING.md +0 -0
  273. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/CONTRIBUTOR_REWARD.md +0 -0
  274. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
  275. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
  276. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
  277. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
  278. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
  279. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/ImplementationDetails/README.md +0 -0
  280. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
  281. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
  282. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/README.md +0 -0
  283. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/deploy.sh +0 -0
  284. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/example/demo_glossary.csv +0 -0
  285. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/images/babeldoc-banner.png +0 -0
  286. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
  287. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
  288. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
  289. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
  290. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/images/babeldoc-big-logo.png +0 -0
  291. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/images/babeldoc-contributor_reward_example.png +0 -0
  292. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/images/babeldoc-preview.gif +0 -0
  293. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
  294. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
  295. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/images/babeldoc-small-logo.png +0 -0
  296. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/index.md +0 -0
  297. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/intro-to-pdf-object.md +0 -0
  298. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/requirements.txt +0 -0
  299. {babeldoc-0.4.2 → babeldoc-0.4.6}/docs/supported_languages.md +0 -0
  300. {babeldoc-0.4.2 → babeldoc-0.4.6}/mkdocs.yml +0 -0
  301. {babeldoc-0.4.2 → babeldoc-0.4.6}/tests/test_translation_config.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: BabelDOC
3
- Version: 0.4.2
3
+ Version: 0.4.6
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
@@ -0,0 +1 @@
1
+ __version__ = "0.4.6"
@@ -3,7 +3,7 @@ import shutil
3
3
  import subprocess
4
4
  from pathlib import Path
5
5
 
6
- __version__ = "0.4.2"
6
+ __version__ = "0.4.6"
7
7
 
8
8
  CACHE_FOLDER = Path.home() / ".cache" / "babeldoc"
9
9
 
@@ -286,7 +286,7 @@ class RpcDocLayoutModel(DocLayoutModel):
286
286
  translate_config,
287
287
  save_debug_image,
288
288
  ):
289
- with ThreadPoolExecutor(max_workers=64) as executor:
289
+ with ThreadPoolExecutor(max_workers=128) as executor:
290
290
  yield from executor.map(
291
291
  self.predict_page,
292
292
  pages,
@@ -331,7 +331,7 @@ class PDFCreater:
331
331
  self,
332
332
  draw_op: BitStream,
333
333
  rectangle: il_version_1.PdfRectangle,
334
- line_width: float = 0.5,
334
+ line_width: float = 0.4,
335
335
  ):
336
336
  """Draw a rectangle in PDF for visualization purposes.
337
337
 
@@ -656,7 +656,7 @@ class ILCreater:
656
656
  _, encoding = self.mupdf.xref_get_key(xref_id, "Encoding")
657
657
  if encoding == "/Identity-H" or encoding == "/Identity-V":
658
658
  encoding_length = 2
659
- if encoding == "/WinAnsiEncoding":
659
+ elif encoding == "/WinAnsiEncoding":
660
660
  encoding_length = 1
661
661
  else:
662
662
  _, to_unicode_id = self.mupdf.xref_get_key(xref_id, "ToUnicode")
@@ -3,7 +3,6 @@ import logging
3
3
  import babeldoc.format.pdf.document_il.il_version_1 as il_version_1
4
4
  from babeldoc.format.pdf.document_il import GraphicState
5
5
  from babeldoc.format.pdf.document_il.utils.style_helper import BLUE
6
- from babeldoc.format.pdf.document_il.utils.style_helper import CYAN
7
6
  from babeldoc.format.pdf.document_il.utils.style_helper import ORANGE
8
7
  from babeldoc.format.pdf.document_il.utils.style_helper import TEAL
9
8
  from babeldoc.format.pdf.document_il.utils.style_helper import YELLOW
@@ -133,9 +132,9 @@ class AddDebugInformation:
133
132
  char.visual_bbox.box, TEAL, line_width=0.2
134
133
  ),
135
134
  )
136
- page.pdf_rectangle.append(
137
- self._create_rectangle(char.box, CYAN, line_width=0.2),
138
- )
135
+ # page.pdf_rectangle.append(
136
+ # self._create_rectangle(char.box, CYAN, line_width=0.2),
137
+ # )
139
138
 
140
139
  for xobj in page.pdf_xobject:
141
140
  new_paragraphs.append(
@@ -23,6 +23,7 @@ from babeldoc.format.pdf.document_il.utils.formular_helper import update_formula
23
23
  from babeldoc.format.pdf.document_il.utils.layout_helper import LEFT_BRACKET
24
24
  from babeldoc.format.pdf.document_il.utils.layout_helper import RIGHT_BRACKET
25
25
  from babeldoc.format.pdf.document_il.utils.layout_helper import build_layout_index
26
+ from babeldoc.format.pdf.document_il.utils.layout_helper import calculate_iou_for_boxes
26
27
  from babeldoc.format.pdf.document_il.utils.layout_helper import (
27
28
  calculate_y_iou_for_boxes,
28
29
  )
@@ -66,6 +67,7 @@ class StylesAndFormulas:
66
67
  self.merge_overlapping_formulas(page)
67
68
  # self.process_page_offsets(page)
68
69
  self.process_translatable_formulas(page)
70
+ self.update_all_formula_data(page)
69
71
  self.process_page_offsets(page)
70
72
  self.update_all_formula_data(page)
71
73
  self.process_page_styles(page)
@@ -476,6 +478,8 @@ class StylesAndFormulas:
476
478
  return
477
479
 
478
480
  for paragraph in page.pdf_paragraph:
481
+ if paragraph.debug_id is None:
482
+ continue
479
483
  if not paragraph.pdf_paragraph_composition:
480
484
  continue
481
485
 
@@ -499,22 +503,28 @@ class StylesAndFormulas:
499
503
  comp = paragraph.pdf_paragraph_composition[j]
500
504
  if comp.pdf_line:
501
505
  for char in reversed(comp.pdf_line.pdf_character):
506
+ if not char.pdf_character_id:
507
+ continue
502
508
  # 检查 y 坐标是否接近,判断是否在同一行
503
509
  left_iou = calculate_y_iou_for_boxes(char.box, formula.box)
504
510
  if left_iou > 0.6:
505
511
  left_char = char
506
512
  break
513
+ break
507
514
 
508
515
  # 查找右边最近的同一行的文本
509
516
  for j in range(i + 1, len(paragraph.pdf_paragraph_composition)):
510
517
  comp = paragraph.pdf_paragraph_composition[j]
511
518
  if comp.pdf_line:
512
519
  for char in comp.pdf_line.pdf_character:
520
+ if not char.pdf_character_id:
521
+ continue
513
522
  # 检查 y 坐标是否接近,判断是否在同一行
514
523
  right_iou = calculate_y_iou_for_boxes(char.box, formula.box)
515
524
  if right_iou > 0.6:
516
525
  right_char = char
517
526
  break
527
+ break
518
528
 
519
529
  # If both text segments exist, keep the one with higher IOU
520
530
  if left_char and right_char:
@@ -600,6 +610,9 @@ class StylesAndFormulas:
600
610
 
601
611
  def is_translatable_formula(self, formula: PdfFormula) -> bool:
602
612
  """判断公式是否只包含需要正常翻译的字符(数字、空格和英文逗号)"""
613
+ if all(char.formula_layout_id for char in formula.pdf_character):
614
+ return False
615
+
603
616
  text = "".join(char.char_unicode for char in formula.pdf_character)
604
617
  if formula.y_offset > 0.1:
605
618
  return False
@@ -710,8 +723,11 @@ class StylesAndFormulas:
710
723
 
711
724
  def merge_overlapping_formulas(self, page: Page):
712
725
  """
713
- 合并 x 轴重叠且 y 轴有交集的相邻公式,或者 x 轴相邻且 y 轴 IOU > 0.5 的公式,
714
- 或者所有字符的 layout id 都相同的公式
726
+ 合并符合以下条件的公式:
727
+ 1. x 轴重叠且 y 轴有交集的相邻公式,或者
728
+ 2. x 轴相邻且 y 轴 IOU > 0.5 的相邻公式,或者
729
+ 3. 所有字符的 layout id 都相同的相邻公式,或者
730
+ 4. 任意两个公式的 IOU > 0.8
715
731
  角标可能会被识别成单独的公式,需要合并
716
732
  """
717
733
  if not page.pdf_paragraph:
@@ -721,46 +737,76 @@ class StylesAndFormulas:
721
737
  if not paragraph.pdf_paragraph_composition:
722
738
  continue
723
739
 
724
- i = 0
725
- while i < len(paragraph.pdf_paragraph_composition) - 1:
726
- comp1 = paragraph.pdf_paragraph_composition[i]
727
- comp2 = paragraph.pdf_paragraph_composition[i + 1]
728
-
729
- # 检查是否都是公式
730
- if comp1.pdf_formula is None or comp2.pdf_formula is None:
731
- i += 1
732
- continue
733
-
734
- formula1 = comp1.pdf_formula
735
- formula2 = comp2.pdf_formula
736
-
737
- # 检查合并条件:
738
- # 1. x 轴重叠且 y 轴有交集,或者
739
- # 2. x 轴相邻且 y 轴 IOU > 0.5,或者
740
- # 3. 所有字符的 layout id 都相同
741
- should_merge = (
742
- (
743
- self.is_x_axis_contained(formula1.box, formula2.box)
744
- and self.has_y_intersection(formula1.box, formula2.box)
745
- )
746
- or (
747
- self.is_x_axis_adjacent(formula1.box, formula2.box)
748
- and self.calculate_y_iou(formula1.box, formula2.box) > 0.5
749
- )
750
- or (self._have_same_layout_ids(formula1, formula2, page))
751
- )
740
+ # 重复执行合并过程,直到没有更多可以合并的公式
741
+ merged = True
742
+ while merged:
743
+ merged = False
744
+ for i in range(len(paragraph.pdf_paragraph_composition)):
745
+ if merged:
746
+ break
747
+ comp1 = paragraph.pdf_paragraph_composition[i]
748
+ if comp1.pdf_formula is None:
749
+ continue
750
+
751
+ for j in range(i + 1, len(paragraph.pdf_paragraph_composition)):
752
+ comp2 = paragraph.pdf_paragraph_composition[j]
753
+ if comp2.pdf_formula is None:
754
+ continue
755
+
756
+ formula1 = comp1.pdf_formula
757
+ formula2 = comp2.pdf_formula
758
+
759
+ # 检查合并条件:
760
+ # 1. x 轴重叠且 y 轴有交集,或者
761
+ # 2. x 轴相邻且 y 轴 IOU > 0.5,或者
762
+ # 3. 所有字符的 layout id 都相同,或者
763
+ # 4. 任意两个公式的 IOU > 0.8
764
+ should_merge = (
765
+ (
766
+ j == i + 1
767
+ and (
768
+ (
769
+ self.is_x_axis_contained(
770
+ formula1.box, formula2.box
771
+ )
772
+ and self.has_y_intersection(
773
+ formula1.box, formula2.box
774
+ )
775
+ )
776
+ or (
777
+ self.is_x_axis_adjacent(
778
+ formula1.box, formula2.box
779
+ )
780
+ and self.calculate_y_iou(
781
+ formula1.box, formula2.box
782
+ )
783
+ > 0.5
784
+ )
785
+ )
786
+ )
787
+ or (self._have_same_layout_ids(formula1, formula2, page))
788
+ or (
789
+ calculate_iou_for_boxes(formula1.box, formula2.box)
790
+ > 0.8
791
+ )
792
+ or (
793
+ calculate_iou_for_boxes(formula2.box, formula1.box)
794
+ > 0.8
795
+ )
796
+ )
752
797
 
753
- if should_merge:
754
- # 合并公式
755
- merged_formula = self.merge_formulas(formula1, formula2)
756
- paragraph.pdf_paragraph_composition[i] = PdfParagraphComposition(
757
- pdf_formula=merged_formula,
758
- )
759
- # 删除第二个公式
760
- del paragraph.pdf_paragraph_composition[i + 1]
761
- # 不增加 i,因为合并后的公式可能还需要和下一个公式合并
762
- else:
763
- i += 1
798
+ if should_merge:
799
+ # 合并公式
800
+ merged_formula = self.merge_formulas(formula1, formula2)
801
+ paragraph.pdf_paragraph_composition[i] = (
802
+ PdfParagraphComposition(
803
+ pdf_formula=merged_formula,
804
+ )
805
+ )
806
+ # 删除第二个公式
807
+ del paragraph.pdf_paragraph_composition[j]
808
+ merged = True
809
+ break
764
810
 
765
811
  def _have_same_layout_ids(
766
812
  self, formula1: PdfFormula, formula2: PdfFormula, page: Page
@@ -350,11 +350,12 @@ class TypesettingUnit:
350
350
 
351
351
  return box
352
352
  elif self.formular:
353
- if self.formular.x_offset <= 0.5:
354
- return self.formular.box
355
- formular_box = copy.copy(self.formular.box)
356
- formular_box.x2 += self.formular.x_advance
357
- return formular_box
353
+ return self.formular.box
354
+ # if self.formular.x_offset <= 0.5:
355
+ # return self.formular.box
356
+ # formular_box = copy.copy(self.formular.box)
357
+ # formular_box.x2 += self.formular.x_advance
358
+ # return formular_box
358
359
  elif self.unicode:
359
360
  char_width = self.font.char_lengths(self.unicode, self.font_size)[0]
360
361
  if self.x is None or self.y is None or self.scale is None:
@@ -407,8 +408,8 @@ class TypesettingUnit:
407
408
  elif self.formular:
408
409
  # 创建新的公式对象,保持内部字符的相对位置
409
410
  new_chars = []
410
- min_x = min(char.visual_bbox.box.x for char in self.formular.pdf_character)
411
- min_y = min(char.visual_bbox.box.y for char in self.formular.pdf_character)
411
+ min_x = self.formular.box.x
412
+ min_y = self.formular.box.y
412
413
 
413
414
  for char in self.formular.pdf_character:
414
415
  # 计算相对位置
@@ -634,6 +634,7 @@ def get_character_layout(
634
634
  "abstract",
635
635
  "content",
636
636
  "figure_title",
637
+ "chart_title",
637
638
  "table_title",
638
639
  "doc_title",
639
640
  "footnote",
@@ -722,6 +723,7 @@ def is_text_layout(layout: Layout):
722
723
  "footer",
723
724
  "seal",
724
725
  "text",
726
+ "chart_title",
725
727
  ]
726
728
 
727
729
 
@@ -491,7 +491,7 @@ def do_translate(
491
491
  pm.total_parts = len(split_points)
492
492
 
493
493
  # Process parts serially
494
- results: dict[int, TranslateResult] = {}
494
+ results: dict[int, TranslateResult | None] = {}
495
495
  original_watermark_mode = (
496
496
  translation_config.watermark_output_mode
497
497
  )
@@ -515,6 +515,12 @@ def do_translate(
515
515
  part_config.page_ranges = [
516
516
  (x, x) for x in should_translate_pages
517
517
  ]
518
+ if (
519
+ translation_config.only_include_translated_page
520
+ and not should_translate_pages
521
+ ):
522
+ results[i] = None
523
+ continue
518
524
 
519
525
  # Only first part should do scanned detection if enabled
520
526
  if i > 0:
@@ -805,6 +811,9 @@ def _do_translate_single(
805
811
  docs = il_creater.create_il()
806
812
  logger.debug(f"finish create il from {temp_pdf_path}")
807
813
  del il_creater
814
+ if translation_config.only_include_translated_page and not docs.page:
815
+ return None
816
+
808
817
  if translation_config.debug:
809
818
  xml_converter.write_json(
810
819
  docs,
@@ -16,7 +16,9 @@ class ResultMerger:
16
16
  def __init__(self, translation_config: TranslationConfig):
17
17
  self.config = translation_config
18
18
 
19
- def merge_results(self, results: dict[int, TranslateResult]) -> TranslateResult:
19
+ def merge_results(
20
+ self, results: dict[int, TranslateResult | None]
21
+ ) -> TranslateResult:
20
22
  """Merge multiple translation results into one"""
21
23
  if not results:
22
24
  raise ValueError("No results to merge")
@@ -35,7 +37,7 @@ class ResultMerger:
35
37
  dual_file_name_no_watermark = (
36
38
  f"{basename}{debug_suffix}.{self.config.lang_out}.dual.pdf"
37
39
  )
38
-
40
+ results = {k: v for k, v in results.items() if v is not None}
39
41
  # Sort results by part index
40
42
  sorted_results = dict(sorted(results.items()))
41
43
  first_result = next(iter(sorted_results.values()))
@@ -354,7 +354,7 @@ class TranslationConfig:
354
354
  if part_index in self._part_working_dirs:
355
355
  part_dir = self._part_working_dirs[part_index]
356
356
  if part_dir.exists():
357
- shutil.rmtree(part_dir)
357
+ shutil.rmtree(part_dir, ignore_errors=True)
358
358
  del self._part_working_dirs[part_index]
359
359
 
360
360
  def cleanup_temp_files(self):
@@ -364,7 +364,7 @@ class TranslationConfig:
364
364
  self.cleanup_part_working_dir(part_index)
365
365
  if self._is_temp_dir:
366
366
  logger.info(f"cleanup temp files: {self.working_dir}")
367
- shutil.rmtree(self.working_dir)
367
+ shutil.rmtree(self.working_dir, ignore_errors=True)
368
368
  except Exception:
369
369
  logger.exception("Error cleaning up temporary files")
370
370
 
@@ -39,7 +39,17 @@ TERM_NORM_PATTERN = re.compile(r"\s+", regex.UNICODE)
39
39
  class Glossary:
40
40
  def __init__(self, name: str, entries: list[GlossaryEntry]):
41
41
  self.name = name
42
- self.entries = entries
42
+
43
+ # Deduplicate entries based on normalized source
44
+ unique_entries = []
45
+ seen_normalized_sources = set()
46
+ for entry in entries:
47
+ normalized_source = self.normalize_source(entry.source)
48
+ if normalized_source not in seen_normalized_sources:
49
+ unique_entries.append(entry)
50
+ seen_normalized_sources.add(normalized_source)
51
+ self.entries = unique_entries
52
+
43
53
  self.normalized_lookup: dict[str, tuple[str, str]] = {}
44
54
  self.id_lookup: list[tuple[str, str]] = []
45
55
  self.hs_dbs: list[hyperscan.Database] | None = None
@@ -21,7 +21,7 @@ from babeldoc.translator.translator import OpenAITranslator
21
21
  from babeldoc.translator.translator import set_translate_rate_limiter
22
22
 
23
23
  logger = logging.getLogger(__name__)
24
- __version__ = "0.4.2"
24
+ __version__ = "0.4.6"
25
25
 
26
26
 
27
27
  def create_parser():
@@ -8,6 +8,7 @@ from typing import TYPE_CHECKING
8
8
  from typing import Any
9
9
  from typing import BinaryIO
10
10
  from typing import cast
11
+ import freetype
11
12
 
12
13
  from babeldoc.pdfminer.casting import safe_float
13
14
  from babeldoc.pdfminer.casting import safe_rect_list
@@ -749,99 +750,16 @@ class TrueTypeFont:
749
750
  def create_unicode_map(self) -> FileUnicodeMap:
750
751
  if b"cmap" not in self.tables:
751
752
  raise TrueTypeFont.CMapNotFound
752
- (base_offset, length) = self.tables[b"cmap"]
753
753
  fp = self.fp
754
- fp.seek(base_offset)
755
- (version, nsubtables) = cast(tuple[int, int], struct.unpack(">HH", fp.read(4)))
756
- subtables: list[tuple[int, int, int]] = []
757
- for i in range(nsubtables):
758
- subtables.append(
759
- cast(tuple[int, int, int], struct.unpack(">HHL", fp.read(8))),
760
- )
761
- char2gid: dict[int, int] = {}
762
- # Only supports subtable type 0, 2 and 4.
763
- for platform_id, encoding_id, st_offset in subtables:
764
- # Skip non-Unicode cmaps.
765
- # https://docs.microsoft.com/en-us/typography/opentype/spec/cmap
766
- if not (platform_id == 0 or (platform_id == 3 and encoding_id in [1, 10])):
767
- continue
768
- fp.seek(base_offset + st_offset)
769
- (fmttype, fmtlen, fmtlang) = cast(
770
- tuple[int, int, int],
771
- struct.unpack(">HHH", fp.read(6)),
772
- )
773
- if fmttype == 0:
774
- char2gid.update(
775
- enumerate(
776
- cast(tuple[int, ...], struct.unpack(">256B", fp.read(256))),
777
- ),
778
- )
779
- elif fmttype == 2:
780
- subheaderkeys = cast(
781
- tuple[int, ...],
782
- struct.unpack(">256H", fp.read(512)),
783
- )
784
- firstbytes = [0] * 8192
785
- for i, k in enumerate(subheaderkeys):
786
- firstbytes[k // 8] = i
787
- nhdrs = max(subheaderkeys) // 8 + 1
788
- hdrs: list[tuple[int, int, int, int, int]] = []
789
- for i in range(nhdrs):
790
- (firstcode, entcount, delta, offset) = cast(
791
- tuple[int, int, int, int],
792
- struct.unpack(">HHhH", fp.read(8)),
793
- )
794
- hdrs.append((i, firstcode, entcount, delta, fp.tell() - 2 + offset))
795
- for i, firstcode, entcount, delta, pos in hdrs:
796
- if not entcount:
797
- continue
798
- first = firstcode + (firstbytes[i] << 8)
799
- fp.seek(pos)
800
- for c in range(entcount):
801
- gid = cast(tuple[int], struct.unpack(">H", fp.read(2)))[0]
802
- if gid:
803
- gid += delta
804
- char2gid[first + c] = gid
805
- elif fmttype == 4:
806
- (segcount, _1, _2, _3) = cast(
807
- tuple[int, int, int, int],
808
- struct.unpack(">HHHH", fp.read(8)),
809
- )
810
- segcount //= 2
811
- ecs = cast(
812
- tuple[int, ...],
813
- struct.unpack(">%dH" % segcount, fp.read(2 * segcount)),
814
- )
815
- fp.read(2)
816
- scs = cast(
817
- tuple[int, ...],
818
- struct.unpack(">%dH" % segcount, fp.read(2 * segcount)),
819
- )
820
- idds = cast(
821
- tuple[int, ...],
822
- struct.unpack(">%dh" % segcount, fp.read(2 * segcount)),
823
- )
824
- pos = fp.tell()
825
- idrs = cast(
826
- tuple[int, ...],
827
- struct.unpack(">%dH" % segcount, fp.read(2 * segcount)),
828
- )
829
- for ec, sc, idd, idr in zip(ecs, scs, idds, idrs, strict=False):
830
- if idr:
831
- fp.seek(pos + idr)
832
- for c in range(sc, ec + 1):
833
- b = cast(tuple[int], struct.unpack(">H", fp.read(2)))[0]
834
- char2gid[c] = (b + idd) & 0xFFFF
835
- else:
836
- for c in range(sc, ec + 1):
837
- char2gid[c] = (c + idd) & 0xFFFF
838
- else:
839
- assert False, str(("Unhandled", fmttype))
840
- if not char2gid:
754
+ char2gid = []
755
+ try:
756
+ face = freetype.Face(fp)
757
+ char2gid = list(face.get_chars())
758
+ except Exception:
841
759
  raise TrueTypeFont.CMapNotFound
842
760
  # create unicode map
843
761
  unicode_map = FileUnicodeMap()
844
- for char, gid in char2gid.items():
762
+ for char, gid in char2gid:
845
763
  unicode_map.add_cid2unichr(gid, char)
846
764
  return unicode_map
847
765
 
@@ -5,7 +5,7 @@ from pathlib import Path
5
5
 
6
6
  import orjson
7
7
  from babeldoc.const import CACHE_FOLDER
8
- from babeldoc.format.pdf.document_il.midend.styles_and_formulas import StylesAndFormulas
8
+ from babeldoc.format.pdf.document_il.utils.formular_helper import is_formulas_font
9
9
  from babeldoc.format.pdf.translation_config import TranslationConfig
10
10
  from rich.console import Console
11
11
  from rich.table import Table
@@ -252,7 +252,6 @@ def main():
252
252
  translation_config = TranslationConfig(
253
253
  *[None for _ in range(3)], lang_out="zh_cn", doc_layout_model=1
254
254
  )
255
- checker = StylesAndFormulas(translation_config)
256
255
 
257
256
  # Create table
258
257
  table = Table(title="Font Recognition Results")
@@ -266,7 +265,7 @@ def main():
266
265
  for each_font in fonts:
267
266
  page_index, font_name, paragraph_index, font_debug_id = each_font
268
267
 
269
- if checker.is_formulas_font(font_name):
268
+ if is_formulas_font(font_name, None):
270
269
  table.add_row(
271
270
  str(page_index),
272
271
  str(paragraph_index),
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "BabelDOC"
3
- version = "0.4.2"
3
+ version = "0.4.6"
4
4
  description = "Yet Another Document Translator"
5
5
  license = "AGPL-3.0"
6
6
  readme = "README.md"
@@ -157,7 +157,7 @@ pythonpath = [".", "src"]
157
157
  testpaths = ["tests"]
158
158
 
159
159
  [bumpver]
160
- current_version = "0.4.2"
160
+ current_version = "0.4.6"
161
161
  version_pattern = "MAJOR.MINOR.PATCH[.PYTAGNUM]"
162
162
 
163
163
  [bumpver.file_patterns]
@@ -180,4 +180,8 @@ yadt = { path = ".", editable = true }
180
180
 
181
181
  [tool.pyright]
182
182
  pythonVersion = "3.10"
183
- typeCheckingMode = "off"
183
+ # typeCheckingMode = "off"
184
+ reportGeneralTypeIssues = false
185
+ reportUnknownVariableType = false
186
+ reportMissingParameterType = false
187
+ reportUnknownParameterType = false
@@ -48,7 +48,7 @@ wheels = [
48
48
 
49
49
  [[package]]
50
50
  name = "babeldoc"
51
- version = "0.4.2"
51
+ version = "0.4.6"
52
52
  source = { editable = "." }
53
53
  dependencies = [
54
54
  { name = "bitstring" },
@@ -2333,6 +2333,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/bd/62/d29612ca33b7844e7
2333
2333
  wheels = [
2334
2334
  { url = "https://files.pythonhosted.org/packages/32/5a/3399a2caf51c91db650de57464465b830c2d4ea15b23d24a98182202b704/pymupdf-1.26.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:32296f12a7c7f36febd59cee77823a54490313bcaba9879b17def6518186f94e", size = 23054640, upload-time = "2025-06-11T22:14:07.439Z" },
2335
2335
  { url = "https://files.pythonhosted.org/packages/64/e0/cc3ec6a4d5ada8992b8610f134565ceb517243f12736b50d795cb3459315/pymupdf-1.26.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:aad7949eca62aca40854510cdb125cf873b181726dc9497a90834200f31faa63", size = 22402766, upload-time = "2025-06-11T22:14:25.557Z" },
2336
+ { url = "https://files.pythonhosted.org/packages/e8/cf/d5b1cd775a17a7b83e25cbf4c46f64cf1352c962ca97646e3e01953cf0df/pymupdf-1.26.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3b62c4d443121ed9a2eb967c3a0e45f8dbabcc838db8604ece02c4e868808edc", size = 23448474, upload-time = "2025-06-20T17:51:56.446Z" },
2336
2337
  { url = "https://files.pythonhosted.org/packages/82/9f/e7101bd24a0f5cbfa0310c8e5c3a8ec0dd9a86986812ff86ac2fbd273c92/pymupdf-1.26.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a65c411eb1cbb79e40c307e10fbad23658f19e9d7334ac4de21d24b58009a7b9", size = 24056183, upload-time = "2025-06-11T22:14:53.777Z" },
2337
2338
  { url = "https://files.pythonhosted.org/packages/99/39/23ac15cf0edc2877ef366dc7ae041ac199d212433c2c3113661d1a1d5ad0/pymupdf-1.26.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:26cebdcc1b2b7a7445423599ce2e0000f2be0333cce0fa0e6846e5a7da46f965", size = 24258802, upload-time = "2025-06-11T22:15:20.499Z" },
2338
2339
  { url = "https://files.pythonhosted.org/packages/e1/8c/56bd5951128d5c5c0b64d2942090c2cd7bc44302bac991b941ac736e3d63/pymupdf-1.26.1-cp39-abi3-win32.whl", hash = "sha256:82ed9e106cf564fc959c0691c374ba68443086ba1a1c9f26128eebbc3e6df9e5", size = 16927933, upload-time = "2025-06-11T22:15:59.72Z" },
@@ -1 +0,0 @@
1
- __version__ = "0.4.2"
File without changes
File without changes
File without changes