BabelDOC 0.3.21__tar.gz → 0.3.23__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 (103) hide show
  1. {babeldoc-0.3.21 → babeldoc-0.3.23}/PKG-INFO +1 -1
  2. babeldoc-0.3.23/babeldoc/__init__.py +1 -0
  3. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/const.py +1 -1
  4. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/frontend/il_creater.py +3 -1
  5. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/translator/translator.py +13 -6
  6. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/high_level.py +7 -2
  7. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/main.py +4 -1
  8. {babeldoc-0.3.21 → babeldoc-0.3.23}/pyproject.toml +2 -2
  9. {babeldoc-0.3.21 → babeldoc-0.3.23}/uv.lock +169 -169
  10. babeldoc-0.3.21/babeldoc/__init__.py +0 -1
  11. {babeldoc-0.3.21 → babeldoc-0.3.23}/.cursorignore +0 -0
  12. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  13. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  14. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/PULL_REQUEST_TEMPLATE/pr_form.yml +0 -0
  15. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/dependabot.yml +0 -0
  16. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/labels.yml +0 -0
  17. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/release-drafter.yml +0 -0
  18. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/workflows/codeql.yml +0 -0
  19. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/workflows/docs.yml +0 -0
  20. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/workflows/labeler.yml +0 -0
  21. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/workflows/lint.yml +0 -0
  22. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/workflows/pr-lint.yml +0 -0
  23. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/workflows/publish-to-pypi.yml +0 -0
  24. {babeldoc-0.3.21 → babeldoc-0.3.23}/.github/workflows/test.yml +0 -0
  25. {babeldoc-0.3.21 → babeldoc-0.3.23}/.gitignore +0 -0
  26. {babeldoc-0.3.21 → babeldoc-0.3.23}/.pre-commit-config.yaml +0 -0
  27. {babeldoc-0.3.21 → babeldoc-0.3.23}/LICENSE +0 -0
  28. {babeldoc-0.3.21 → babeldoc-0.3.23}/README.md +0 -0
  29. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/assets/assets.py +0 -0
  30. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/assets/embedding_assets_metadata.py +0 -0
  31. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/asynchronize/__init__.py +0 -0
  32. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/converter.py +0 -0
  33. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/__init__.py +0 -0
  34. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/babeldoc_exception/BabelDOCException.py +0 -0
  35. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/backend/__init__.py +0 -0
  36. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/backend/pdf_creater.py +0 -0
  37. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/frontend/__init__.py +0 -0
  38. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/il_version_1.py +0 -0
  39. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/il_version_1.rnc +0 -0
  40. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/il_version_1.rng +0 -0
  41. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/il_version_1.xsd +0 -0
  42. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/midend/__init__.py +0 -0
  43. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/midend/add_debug_information.py +0 -0
  44. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/midend/detect_scanned_file.py +0 -0
  45. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/midend/il_translator.py +0 -0
  46. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/midend/il_translator_llm_only.py +0 -0
  47. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/midend/layout_parser.py +0 -0
  48. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/midend/paragraph_finder.py +0 -0
  49. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/midend/remove_descent.py +0 -0
  50. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/midend/styles_and_formulas.py +0 -0
  51. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/midend/table_parser.py +0 -0
  52. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/midend/typesetting.py +0 -0
  53. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/translator/__init__.py +0 -0
  54. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/translator/cache.py +0 -0
  55. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/utils/atomic_integer.py +0 -0
  56. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/utils/fontmap.py +0 -0
  57. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/utils/layout_helper.py +0 -0
  58. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/utils/priority_thread_pool_executor.py +0 -0
  59. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/utils/style_helper.py +0 -0
  60. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/document_il/xml_converter.py +0 -0
  61. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/docvision/README.md +0 -0
  62. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/docvision/__init__.py +0 -0
  63. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/docvision/doclayout.py +0 -0
  64. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/docvision/rpc_doclayout.py +0 -0
  65. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
  66. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/format/office/__init__.py +0 -0
  67. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/pdfinterp.py +0 -0
  68. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/progress_monitor.py +0 -0
  69. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/result_merger.py +0 -0
  70. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/split_manager.py +0 -0
  71. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/tools/generate_font_metadata.py +0 -0
  72. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/tools/italic_assistance.py +0 -0
  73. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/tools/italic_recognize_tool.py +0 -0
  74. {babeldoc-0.3.21 → babeldoc-0.3.23}/babeldoc/translation_config.py +0 -0
  75. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/CODE_OF_CONDUCT.md +0 -0
  76. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/CONTRIBUTING.md +0 -0
  77. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/CONTRIBUTOR_REWARD.md +0 -0
  78. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
  79. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
  80. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
  81. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
  82. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
  83. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/ImplementationDetails/README.md +0 -0
  84. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
  85. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
  86. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/README.md +0 -0
  87. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/deploy.sh +0 -0
  88. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/images/babeldoc-banner.png +0 -0
  89. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
  90. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
  91. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
  92. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
  93. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/images/babeldoc-big-logo.png +0 -0
  94. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/images/babeldoc-contributor_reward_example.png +0 -0
  95. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/images/babeldoc-preview.gif +0 -0
  96. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
  97. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
  98. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/images/babeldoc-small-logo.png +0 -0
  99. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/index.md +0 -0
  100. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/intro-to-pdf-object.md +0 -0
  101. {babeldoc-0.3.21 → babeldoc-0.3.23}/docs/requirements.txt +0 -0
  102. {babeldoc-0.3.21 → babeldoc-0.3.23}/mkdocs.yml +0 -0
  103. {babeldoc-0.3.21 → babeldoc-0.3.23}/tests/test_translation_config.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: BabelDOC
3
- Version: 0.3.21
3
+ Version: 0.3.23
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.3.23"
@@ -3,7 +3,7 @@ import shutil
3
3
  import subprocess
4
4
  from pathlib import Path
5
5
 
6
- __version__ = "0.3.21"
6
+ __version__ = "0.3.23"
7
7
 
8
8
  CACHE_FOLDER = Path.home() / ".cache" / "babeldoc"
9
9
 
@@ -346,6 +346,7 @@ def parse_font_file(doc, idx, encoding, differences):
346
346
  bbox_list = []
347
347
  data = doc.xref_stream(idx)
348
348
  face = freetype.Face(BytesIO(data))
349
+ scale = 1000 / face.units_per_EM
349
350
  for charmap in face.charmaps:
350
351
  if charmap.encoding_name == "FT_ENCODING_ADOBE_CUSTOM":
351
352
  face.select_charmap(freetype.FT_ENCODING_ADOBE_CUSTOM)
@@ -354,7 +355,8 @@ def parse_font_file(doc, idx, encoding, differences):
354
355
  if differences:
355
356
  for code, name in differences:
356
357
  bbox_list[code] = get_name_cbox(face, name.encode("U8"))
357
- return bbox_list
358
+ norm_bbox_list = [[v * scale for v in box] for box in bbox_list]
359
+ return norm_bbox_list
358
360
 
359
361
 
360
362
  def parse_encoding(obj_str):
@@ -215,9 +215,7 @@ class OpenAITranslator(BaseTranslator):
215
215
  **self.options,
216
216
  messages=self.prompt(text),
217
217
  )
218
- self.token_count.inc(response.usage.total_tokens)
219
- self.prompt_token_count.inc(response.usage.prompt_tokens)
220
- self.completion_token_count.inc(response.usage.completion_tokens)
218
+ self.update_token_count(response)
221
219
  return response.choices[0].message.content.strip()
222
220
 
223
221
  def prompt(self, text):
@@ -255,11 +253,20 @@ class OpenAITranslator(BaseTranslator):
255
253
  },
256
254
  ],
257
255
  )
258
- self.token_count.inc(response.usage.total_tokens)
259
- self.prompt_token_count.inc(response.usage.prompt_tokens)
260
- self.completion_token_count.inc(response.usage.completion_tokens)
256
+ self.update_token_count(response)
261
257
  return response.choices[0].message.content.strip()
262
258
 
259
+ def update_token_count(self, response):
260
+ try:
261
+ if response.usage and response.usage.total_tokens:
262
+ self.token_count.inc(response.usage.total_tokens)
263
+ if response.usage and response.usage.prompt_tokens:
264
+ self.prompt_token_count.inc(response.usage.prompt_tokens)
265
+ if response.usage and response.usage.completion_tokens:
266
+ self.completion_token_count.inc(response.usage.completion_tokens)
267
+ except Exception as e:
268
+ logger.exception("Error updating token count")
269
+
263
270
  def get_formular_placeholder(self, placeholder_id: int):
264
271
  return "{{v" + str(placeholder_id) + "}}"
265
272
  return "{{" + str(placeholder_id) + "}}"
@@ -547,7 +547,8 @@ def do_translate(
547
547
  return result
548
548
 
549
549
  except Exception as e:
550
- logger.exception(f"translate error: {e}")
550
+ logger.error(f"translate error: {e}")
551
+ pm.disable = False
551
552
  pm.translate_error(e)
552
553
  raise
553
554
  finally:
@@ -712,7 +713,9 @@ def _do_translate_single(
712
713
  try:
713
714
  if translation_config.watermark_output_mode == WatermarkOutputMode.Both:
714
715
  mono_watermark_first_page_doc_bytes, dual_watermark_first_page_doc_bytes = (
715
- generate_first_page_with_watermark(doc_pdf2zh, translation_config, docs)
716
+ generate_first_page_with_watermark(
717
+ doc_pdf2zh, translation_config, docs, mediabox_data
718
+ )
716
719
  )
717
720
  except Exception:
718
721
  logger.warning(
@@ -762,6 +765,7 @@ def generate_first_page_with_watermark(
762
765
  mupdf: Document,
763
766
  translation_config: TranslationConfig,
764
767
  doc_il: il_version_1.Document,
768
+ mediabox_data: dict[int, Any] | None = None,
765
769
  ) -> (io.BytesIO, io.BytesIO):
766
770
  first_page_doc = Document()
767
771
  first_page_doc.insert_pdf(mupdf, from_page=0, to_page=0)
@@ -784,6 +788,7 @@ def generate_first_page_with_watermark(
784
788
  watermarked_temp_pdf_path.as_posix(),
785
789
  il_only_first_page_doc,
786
790
  watermarked_config,
791
+ mediabox_data,
787
792
  )
788
793
  result = pdf_creater.write(watermarked_config)
789
794
  mono_pdf_bytes = None
@@ -23,7 +23,7 @@ from babeldoc.translation_config import TranslationConfig
23
23
  from babeldoc.translation_config import WatermarkOutputMode
24
24
 
25
25
  logger = logging.getLogger(__name__)
26
- __version__ = "0.3.21"
26
+ __version__ = "0.3.23"
27
27
 
28
28
 
29
29
  def create_parser():
@@ -395,6 +395,9 @@ async def main():
395
395
  progress_handler(event)
396
396
  if config.debug:
397
397
  logger.debug(event)
398
+ if event["type"] == "error":
399
+ logger.error(f"Error: {event['error']}")
400
+ break
398
401
  if event["type"] == "finish":
399
402
  result = event["translate_result"]
400
403
  logger.info(str(result))
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "BabelDOC"
3
- version = "0.3.21"
3
+ version = "0.3.23"
4
4
  description = "Yet Another Document Translator"
5
5
  license = "AGPL-3.0"
6
6
  readme = "README.md"
@@ -149,7 +149,7 @@ pythonpath = [".", "src"]
149
149
  testpaths = ["tests"]
150
150
 
151
151
  [bumpver]
152
- current_version = "0.3.21"
152
+ current_version = "0.3.23"
153
153
  version_pattern = "MAJOR.MINOR.PATCH[.PYTAGNUM]"
154
154
 
155
155
  [bumpver.file_patterns]