BabelDOC 0.3.13__tar.gz → 0.3.15__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 (99) hide show
  1. {babeldoc-0.3.13 → babeldoc-0.3.15}/PKG-INFO +1 -1
  2. babeldoc-0.3.15/babeldoc/__init__.py +1 -0
  3. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/const.py +1 -1
  4. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/frontend/il_creater.py +32 -1
  5. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/main.py +3 -3
  6. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/pdfinterp.py +2 -0
  7. {babeldoc-0.3.13 → babeldoc-0.3.15}/pyproject.toml +2 -2
  8. {babeldoc-0.3.13 → babeldoc-0.3.15}/uv.lock +1 -1
  9. babeldoc-0.3.13/babeldoc/__init__.py +0 -1
  10. {babeldoc-0.3.13 → babeldoc-0.3.15}/.cursorignore +0 -0
  11. {babeldoc-0.3.13 → babeldoc-0.3.15}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  12. {babeldoc-0.3.13 → babeldoc-0.3.15}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  13. {babeldoc-0.3.13 → babeldoc-0.3.15}/.github/PULL_REQUEST_TEMPLATE/pr_form.yml +0 -0
  14. {babeldoc-0.3.13 → babeldoc-0.3.15}/.github/dependabot.yml +0 -0
  15. {babeldoc-0.3.13 → babeldoc-0.3.15}/.github/labels.yml +0 -0
  16. {babeldoc-0.3.13 → babeldoc-0.3.15}/.github/release-drafter.yml +0 -0
  17. {babeldoc-0.3.13 → babeldoc-0.3.15}/.github/workflows/codeql.yml +0 -0
  18. {babeldoc-0.3.13 → babeldoc-0.3.15}/.github/workflows/docs.yml +0 -0
  19. {babeldoc-0.3.13 → babeldoc-0.3.15}/.github/workflows/labeler.yml +0 -0
  20. {babeldoc-0.3.13 → babeldoc-0.3.15}/.github/workflows/publish-to-pypi.yml +0 -0
  21. {babeldoc-0.3.13 → babeldoc-0.3.15}/.github/workflows/test.yml +0 -0
  22. {babeldoc-0.3.13 → babeldoc-0.3.15}/.gitignore +0 -0
  23. {babeldoc-0.3.13 → babeldoc-0.3.15}/.pre-commit-config.yaml +0 -0
  24. {babeldoc-0.3.13 → babeldoc-0.3.15}/LICENSE +0 -0
  25. {babeldoc-0.3.13 → babeldoc-0.3.15}/README.md +0 -0
  26. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/assets/assets.py +0 -0
  27. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/assets/embedding_assets_metadata.py +0 -0
  28. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/asynchronize/__init__.py +0 -0
  29. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/converter.py +0 -0
  30. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/__init__.py +0 -0
  31. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/babeldoc_exception/BabelDOCException.py +0 -0
  32. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/backend/__init__.py +0 -0
  33. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/backend/pdf_creater.py +0 -0
  34. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/frontend/__init__.py +0 -0
  35. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/il_version_1.py +0 -0
  36. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/il_version_1.rnc +0 -0
  37. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/il_version_1.rng +0 -0
  38. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/il_version_1.xsd +0 -0
  39. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/midend/__init__.py +0 -0
  40. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/midend/add_debug_information.py +0 -0
  41. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/midend/detect_scanned_file.py +0 -0
  42. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/midend/il_translator.py +0 -0
  43. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/midend/il_translator_llm_only.py +0 -0
  44. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/midend/layout_parser.py +0 -0
  45. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/midend/paragraph_finder.py +0 -0
  46. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/midend/remove_descent.py +0 -0
  47. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/midend/styles_and_formulas.py +0 -0
  48. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/midend/table_parser.py +0 -0
  49. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/midend/typesetting.py +0 -0
  50. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/translator/__init__.py +0 -0
  51. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/translator/cache.py +0 -0
  52. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/translator/translator.py +0 -0
  53. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/utils/atomic_integer.py +0 -0
  54. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/utils/fontmap.py +0 -0
  55. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/utils/layout_helper.py +0 -0
  56. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/utils/priority_thread_pool_executor.py +0 -0
  57. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/utils/style_helper.py +0 -0
  58. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/document_il/xml_converter.py +0 -0
  59. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/docvision/README.md +0 -0
  60. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/docvision/__init__.py +0 -0
  61. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/docvision/doclayout.py +0 -0
  62. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/docvision/rpc_doclayout.py +0 -0
  63. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
  64. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/high_level.py +0 -0
  65. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/progress_monitor.py +0 -0
  66. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/result_merger.py +0 -0
  67. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/split_manager.py +0 -0
  68. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/tools/generate_font_metadata.py +0 -0
  69. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/tools/italic_assistance.py +0 -0
  70. {babeldoc-0.3.13 → babeldoc-0.3.15}/babeldoc/translation_config.py +0 -0
  71. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/CODE_OF_CONDUCT.md +0 -0
  72. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/CONTRIBUTING.md +0 -0
  73. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/CONTRIBUTOR_REWARD.md +0 -0
  74. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
  75. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
  76. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
  77. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
  78. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
  79. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/ImplementationDetails/README.md +0 -0
  80. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
  81. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
  82. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/README.md +0 -0
  83. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/deploy.sh +0 -0
  84. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/images/babeldoc-banner.png +0 -0
  85. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
  86. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
  87. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
  88. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
  89. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/images/babeldoc-big-logo.png +0 -0
  90. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/images/babeldoc-contributor_reward_example.png +0 -0
  91. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/images/babeldoc-preview.gif +0 -0
  92. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
  93. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
  94. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/images/babeldoc-small-logo.png +0 -0
  95. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/index.md +0 -0
  96. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/intro-to-pdf-object.md +0 -0
  97. {babeldoc-0.3.13 → babeldoc-0.3.15}/docs/requirements.txt +0 -0
  98. {babeldoc-0.3.13 → babeldoc-0.3.15}/mkdocs.yml +0 -0
  99. {babeldoc-0.3.13 → babeldoc-0.3.15}/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.13
3
+ Version: 0.3.15
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.15"
@@ -3,7 +3,7 @@ import shutil
3
3
  import subprocess
4
4
  from pathlib import Path
5
5
 
6
- __version__ = "0.3.13"
6
+ __version__ = "0.3.15"
7
7
 
8
8
  CACHE_FOLDER = Path.home() / ".cache" / "babeldoc"
9
9
 
@@ -426,6 +426,37 @@ def get_bbox(bbox, size, c, x, y):
426
426
  return pymupdf.Quad(ll, lr, ul, ur)
427
427
 
428
428
 
429
+ # 常见 Unicode 空格字符的代码点
430
+ unicode_spaces = [
431
+ "\u0020", # 半角空格
432
+ "\u00a0", # 不间断空格
433
+ "\u1680", # Ogham 空格标记
434
+ "\u2000", # En Quad
435
+ "\u2001", # Em Quad
436
+ "\u2002", # En Space
437
+ "\u2003", # Em Space
438
+ "\u2004", # 三分之一 Em 空格
439
+ "\u2005", # 四分之一 Em 空格
440
+ "\u2006", # 六分之一 Em 空格
441
+ "\u2007", # 数样间距
442
+ "\u2008", # 行首前导空格
443
+ "\u2009", # 瘦弱空格
444
+ "\u200a", # hair space
445
+ "\u202f", # 窄不间断空格
446
+ "\u205f", # 数学中等空格
447
+ "\u3000", # 全角空格
448
+ "\u200b", # 零宽度空格
449
+ "\u2060", # 零宽度非断空格
450
+ "\t", # 水平制表符
451
+ ]
452
+
453
+ # 构建正则表达式
454
+ pattern = "^[" + "".join(unicode_spaces) + "]+$"
455
+
456
+ # 编译正则
457
+ space_regex = re.compile(pattern)
458
+
459
+
429
460
  class ILCreater:
430
461
  stage_name = "Parse PDF and Create Intermediate Representation"
431
462
 
@@ -805,7 +836,7 @@ class ILCreater:
805
836
  char_unicode = char.get_text()
806
837
  if "(cid:" not in char_unicode and len(char_unicode) > 1:
807
838
  return
808
- if char_unicode == "\t":
839
+ if space_regex.match(char_unicode):
809
840
  char_unicode = " "
810
841
  advance = char.adv
811
842
  bbox = il_version_1.Box(
@@ -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.13"
26
+ __version__ = "0.3.15"
27
27
 
28
28
 
29
29
  def create_parser():
@@ -266,8 +266,8 @@ async def main():
266
266
  return
267
267
 
268
268
  # 验证翻译服务选择
269
- if not (args.openai or args.translate):
270
- parser.error("必须选择一个翻译服务:--openai 或 --translate")
269
+ if not args.openai:
270
+ parser.error("必须选择一个翻译服务:--openai")
271
271
 
272
272
  # 验证 OpenAI 参数
273
273
  if args.openai and not args.openai_api_key:
@@ -393,6 +393,8 @@ class PDFPageInterpreterEx(PDFPageInterpreter):
393
393
  gs.passthrough_instruction = (
394
394
  self.il_creater.passthrough_per_char_instruction.copy()
395
395
  )
396
+ if isinstance(seq, int) or isinstance(seq, float):
397
+ seq = [seq]
396
398
  self.device.render_string(self.textstate, cast(PDFTextSeq, seq), self.ncs, gs)
397
399
  return
398
400
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "BabelDOC"
3
- version = "0.3.13"
3
+ version = "0.3.15"
4
4
  description = "Yet Another Document Translator"
5
5
  license = "AGPL-3.0"
6
6
  readme = "README.md"
@@ -148,7 +148,7 @@ pythonpath = [".", "src"]
148
148
  testpaths = ["tests"]
149
149
 
150
150
  [bumpver]
151
- current_version = "0.3.13"
151
+ current_version = "0.3.15"
152
152
  version_pattern = "MAJOR.MINOR.PATCH[.PYTAGNUM]"
153
153
 
154
154
  [bumpver.file_patterns]
@@ -48,7 +48,7 @@ wheels = [
48
48
 
49
49
  [[package]]
50
50
  name = "babeldoc"
51
- version = "0.3.13"
51
+ version = "0.3.15"
52
52
  source = { editable = "." }
53
53
  dependencies = [
54
54
  { name = "bitstring" },
@@ -1 +0,0 @@
1
- __version__ = "0.3.13"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes