BabelDOC 0.3.44__tar.gz → 0.3.47__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 (108) hide show
  1. babeldoc-0.3.47/.github/PULL_REQUEST_TEMPLATE.md +65 -0
  2. {babeldoc-0.3.44 → babeldoc-0.3.47}/PKG-INFO +2 -1
  3. {babeldoc-0.3.44 → babeldoc-0.3.47}/README.md +1 -0
  4. babeldoc-0.3.47/babeldoc/__init__.py +1 -0
  5. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/const.py +1 -1
  6. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/midend/il_translator.py +1 -1
  7. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/midend/styles_and_formulas.py +4 -1
  8. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/main.py +23 -2
  9. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/translation_config.py +4 -0
  10. {babeldoc-0.3.44 → babeldoc-0.3.47}/pyproject.toml +2 -2
  11. {babeldoc-0.3.44 → babeldoc-0.3.47}/uv.lock +1 -1
  12. babeldoc-0.3.44/babeldoc/__init__.py +0 -1
  13. {babeldoc-0.3.44 → babeldoc-0.3.47}/.cursorignore +0 -0
  14. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  15. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  16. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/PULL_REQUEST_TEMPLATE/pr_form.yml +0 -0
  17. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/dependabot.yml +0 -0
  18. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/labels.yml +0 -0
  19. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/release-drafter.yml +0 -0
  20. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/workflows/codeql.yml +0 -0
  21. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/workflows/docs.yml +0 -0
  22. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/workflows/labeler.yml +0 -0
  23. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/workflows/lint.yml +0 -0
  24. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/workflows/pr-lint.yml +0 -0
  25. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/workflows/publish-to-pypi.yml +0 -0
  26. {babeldoc-0.3.44 → babeldoc-0.3.47}/.github/workflows/test.yml +0 -0
  27. {babeldoc-0.3.44 → babeldoc-0.3.47}/.gitignore +0 -0
  28. {babeldoc-0.3.44 → babeldoc-0.3.47}/.pre-commit-config.yaml +0 -0
  29. {babeldoc-0.3.44 → babeldoc-0.3.47}/LICENSE +0 -0
  30. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/assets/assets.py +0 -0
  31. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/assets/embedding_assets_metadata.py +0 -0
  32. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/asynchronize/__init__.py +0 -0
  33. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/converter.py +0 -0
  34. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/__init__.py +0 -0
  35. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/babeldoc_exception/BabelDOCException.py +0 -0
  36. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/backend/__init__.py +0 -0
  37. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/backend/pdf_creater.py +0 -0
  38. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/frontend/__init__.py +0 -0
  39. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/frontend/il_creater.py +0 -0
  40. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/il_version_1.py +0 -0
  41. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/il_version_1.rnc +0 -0
  42. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/il_version_1.rng +0 -0
  43. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/il_version_1.xsd +0 -0
  44. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/midend/__init__.py +0 -0
  45. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/midend/add_debug_information.py +0 -0
  46. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/midend/detect_scanned_file.py +0 -0
  47. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/midend/il_translator_llm_only.py +0 -0
  48. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/midend/layout_parser.py +0 -0
  49. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/midend/paragraph_finder.py +0 -0
  50. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/midend/remove_descent.py +0 -0
  51. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/midend/table_parser.py +0 -0
  52. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/midend/typesetting.py +0 -0
  53. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/translator/__init__.py +0 -0
  54. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/translator/cache.py +0 -0
  55. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/translator/translator.py +0 -0
  56. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/utils/atomic_integer.py +0 -0
  57. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/utils/fontmap.py +0 -0
  58. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/utils/layout_helper.py +0 -0
  59. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/utils/mupdf_helper.py +0 -0
  60. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/utils/paragraph_helper.py +0 -0
  61. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/utils/priority_thread_pool_executor.py +0 -0
  62. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/utils/style_helper.py +0 -0
  63. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/utils/zstd_helper.py +0 -0
  64. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/document_il/xml_converter.py +0 -0
  65. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/docvision/README.md +0 -0
  66. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/docvision/__init__.py +0 -0
  67. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/docvision/doclayout.py +0 -0
  68. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/docvision/rpc_doclayout.py +0 -0
  69. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
  70. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/format/office/__init__.py +0 -0
  71. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/high_level.py +0 -0
  72. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/pdfinterp.py +0 -0
  73. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/progress_monitor.py +0 -0
  74. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/result_merger.py +0 -0
  75. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/split_manager.py +0 -0
  76. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/tools/generate_font_metadata.py +0 -0
  77. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/tools/italic_assistance.py +0 -0
  78. {babeldoc-0.3.44 → babeldoc-0.3.47}/babeldoc/tools/italic_recognize_tool.py +0 -0
  79. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/CODE_OF_CONDUCT.md +0 -0
  80. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/CONTRIBUTING.md +0 -0
  81. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/CONTRIBUTOR_REWARD.md +0 -0
  82. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
  83. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
  84. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
  85. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
  86. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
  87. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/ImplementationDetails/README.md +0 -0
  88. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
  89. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
  90. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/README.md +0 -0
  91. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/deploy.sh +0 -0
  92. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/images/babeldoc-banner.png +0 -0
  93. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
  94. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
  95. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
  96. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
  97. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/images/babeldoc-big-logo.png +0 -0
  98. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/images/babeldoc-contributor_reward_example.png +0 -0
  99. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/images/babeldoc-preview.gif +0 -0
  100. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
  101. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
  102. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/images/babeldoc-small-logo.png +0 -0
  103. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/index.md +0 -0
  104. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/intro-to-pdf-object.md +0 -0
  105. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/requirements.txt +0 -0
  106. {babeldoc-0.3.44 → babeldoc-0.3.47}/docs/supported_languages.md +0 -0
  107. {babeldoc-0.3.44 → babeldoc-0.3.47}/mkdocs.yml +0 -0
  108. {babeldoc-0.3.44 → babeldoc-0.3.47}/tests/test_translation_config.py +0 -0
@@ -0,0 +1,65 @@
1
+ ### PR Title
2
+
3
+ <!-- Please fill in a concise and clear PR title below -->
4
+ [PR] <Your concise title here>
5
+
6
+ ### Related Issue(s)
7
+
8
+ <!-- If this PR closes or is related to one or more issues, please list them here (e.g., #37) -->
9
+ <!-- e.g.: Closes #37, Relates to #42 -->
10
+
11
+ ### Motivation and Context
12
+
13
+ <!-- Why is this change required? What problem does it solve? -->
14
+ <!-- If it fixes an open issue, please link to the issue here. -->
15
+
16
+ ### Summary of Changes
17
+
18
+ <!-- What does this PR introduce or fix? Please describe concisely. -->
19
+
20
+ ### PR Type
21
+
22
+ <!-- What kind of change is this? Please select one or more -->
23
+ - [ ] ✨ Enhancement
24
+ - [ ] 🐛 Bug Fix
25
+ - [ ] 📚 Documentation
26
+ - [ ] 🏗️ Refactor
27
+ - [ ] 🧪 Test
28
+ - [ ] 🧹 Chore
29
+
30
+ ### Breaking Changes
31
+
32
+ <!-- Does this PR introduce any breaking changes? If so, please describe them. -->
33
+ <!-- - [ ] Yes, this PR introduces breaking changes.
34
+ <!-- - [ ] No, this PR does not introduce breaking changes. -->
35
+ <!-- Detailed description of breaking changes (if any): -->
36
+
37
+ ### Contributor Checklist
38
+
39
+ - [ ] I have fully read and understood the **[CONTRIBUTING.md](https://funstory-ai.github.io/BabelDOC/CONTRIBUTING/)** guide.
40
+ - [ ] I have performed a self-review of my own code.
41
+ - [ ] My changes follow the project's code style and guidelines
42
+ - [ ] I have linked the related issue(s) in the description above (if applicable)
43
+ - [ ] I have updated relevant documentation (if applicable)
44
+ - [ ] I have added necessary tests that prove my fix is effective or that my feature works (if applicable)
45
+ - [ ] All new and existing tests passed locally with my changes
46
+ - [ ] My changes generate no new warnings or errors
47
+ - [ ] I understand that due to limited maintainer resources, only small PRs are accepted. Suggestions with proof-of-concept patches are appreciated, and my patch may be rewritten if necessary.
48
+
49
+ ### Testing Instructions
50
+
51
+ <!-- Please provide clear and concise step-by-step instructions on how to test your changes. -->
52
+ <!-- e.g.: -->
53
+ <!-- 1. Check out this branch. -->
54
+ <!-- 2. Run `...` to install dependencies. -->
55
+ <!-- 3. Run `...` to start the application/run the script. -->
56
+ <!-- 4. Navigate to `...` or observe `...` -->
57
+ <!-- 5. Verify that `...` (expected outcome). -->
58
+
59
+ ### Screenshots (if applicable)
60
+
61
+ <!-- If your changes include UI modifications, please add screenshots or GIFs to show the before and after. -->
62
+
63
+ ### Additional Notes
64
+
65
+ <!-- Is there anything else the reviewer should know? For example, any dependencies, or potential impacts. -->
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: BabelDOC
3
- Version: 0.3.44
3
+ Version: 0.3.47
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
@@ -205,6 +205,7 @@ uv run babeldoc --files example.pdf --files example2.pdf --openai --openai-model
205
205
  - `--translate-table-text`: Translate table text (experimental, default: False)
206
206
  - `--skip-scanned-detection`: Skip scanned document detection (default: False). When using split translation, only the first part performs detection if not skipped.
207
207
  - `--ocr-workaround`: Use OCR workaround (default: False). When enabled, the tool will use OCR to detect text and fill background for scanned PDF.
208
+ - `--working-dir`: Working directory for translation. If not set, use temp directory.
208
209
 
209
210
  > [!TIP]
210
211
  > - Both `--skip-clean` and `--dual-translate-first` may help improve compatibility with some PDF readers
@@ -156,6 +156,7 @@ uv run babeldoc --files example.pdf --files example2.pdf --openai --openai-model
156
156
  - `--translate-table-text`: Translate table text (experimental, default: False)
157
157
  - `--skip-scanned-detection`: Skip scanned document detection (default: False). When using split translation, only the first part performs detection if not skipped.
158
158
  - `--ocr-workaround`: Use OCR workaround (default: False). When enabled, the tool will use OCR to detect text and fill background for scanned PDF.
159
+ - `--working-dir`: Working directory for translation. If not set, use temp directory.
159
160
 
160
161
  > [!TIP]
161
162
  > - Both `--skip-clean` and `--dual-translate-first` may help improve compatibility with some PDF readers
@@ -0,0 +1 @@
1
+ __version__ = "0.3.47"
@@ -3,7 +3,7 @@ import shutil
3
3
  import subprocess
4
4
  from pathlib import Path
5
5
 
6
- __version__ = "0.3.44"
6
+ __version__ = "0.3.47"
7
7
 
8
8
  CACHE_FOLDER = Path.home() / ".cache" / "babeldoc"
9
9
 
@@ -649,7 +649,7 @@ class ILTranslator:
649
649
  and re.match(f"^{p.left_regex_pattern}", matched_text)
650
650
  )
651
651
  text = re.match(
652
- f"^{placeholder.left_regex_pattern}(.+){placeholder.right_regex_pattern}$",
652
+ f"^{placeholder.left_regex_pattern}(.*){placeholder.right_regex_pattern}$",
653
653
  matched_text,
654
654
  ).group(1)
655
655
 
@@ -607,6 +607,9 @@ class StylesAndFormulas:
607
607
  r"|.*Mincho.*"
608
608
  r"|.*Amerigo.*"
609
609
  r"|.*MSGloriolaIIStd.*"
610
+ r"|.*CMU.+"
611
+ r"|.*LinLibertine.*"
612
+ r"|.*txsys.*"
610
613
  r")$"
611
614
  )
612
615
  precise_formula_font_pattern = (
@@ -644,7 +647,7 @@ class StylesAndFormulas:
644
647
  r"|.*KpMath.*"
645
648
  r"|.*Lete Sans Math.*"
646
649
  r"|.*LeteSansMath.*"
647
- r"|.*LinLibertineO.*"
650
+ # r"|.*LinLibertineO.*"
648
651
  r"|.*Linux Libertine O.*"
649
652
  r"|.*LibertinusMath-Regular.*"
650
653
  r"|.*Libertinus Math.*"
@@ -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.44"
26
+ __version__ = "0.3.47"
27
27
 
28
28
 
29
29
  def create_parser():
@@ -70,6 +70,11 @@ def create_parser():
70
70
  default=None,
71
71
  help="Restore offline assets package from the specified file",
72
72
  )
73
+ parser.add_argument(
74
+ "--working-dir",
75
+ default=None,
76
+ help="Working directory for translation. If not set, use temp directory.",
77
+ )
73
78
  # translation option argument group
74
79
  translation_group = parser.add_argument_group(
75
80
  "Translation",
@@ -320,7 +325,7 @@ async def main():
320
325
  if not Path(file).exists():
321
326
  logger.error(f"文件不存在:{file}")
322
327
  exit(1)
323
- if not file.endswith(".pdf"):
328
+ if not file.lower().endswith(".pdf"):
324
329
  logger.error(f"文件不是 PDF 文件:{file}")
325
330
  exit(1)
326
331
  pending_files.append(file)
@@ -339,6 +344,21 @@ async def main():
339
344
  else:
340
345
  args.output = None
341
346
 
347
+ if args.working_dir:
348
+ working_dir = Path(args.working_dir)
349
+ if not working_dir.exists():
350
+ logger.info(f"工作目录不存在,创建:{working_dir}")
351
+ try:
352
+ working_dir.mkdir(parents=True, exist_ok=True)
353
+ except OSError:
354
+ logger.critical(
355
+ f"Failed to create working directory at {working_dir}",
356
+ exc_info=True,
357
+ )
358
+ exit(1)
359
+ else:
360
+ working_dir = None
361
+
342
362
  watermark_output_mode = WatermarkOutputMode.Watermarked
343
363
  if args.no_watermark:
344
364
  watermark_output_mode = WatermarkOutputMode.NoWatermark
@@ -390,6 +410,7 @@ async def main():
390
410
  skip_scanned_detection=args.skip_scanned_detection,
391
411
  ocr_workaround=args.ocr_workaround,
392
412
  custom_system_prompt=args.custom_system_prompt,
413
+ working_dir=working_dir,
393
414
  )
394
415
 
395
416
  # Create progress handler
@@ -130,6 +130,10 @@ class TranslationConfig:
130
130
  else:
131
131
  working_dir = tempfile.mkdtemp()
132
132
  self._is_temp_dir = True
133
+ else:
134
+ working_dir = Path(working_dir) / Path(input_file).stem
135
+ self._is_temp_dir = False
136
+
133
137
  self.working_dir = working_dir
134
138
 
135
139
  Path(working_dir).mkdir(parents=True, exist_ok=True)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "BabelDOC"
3
- version = "0.3.44"
3
+ version = "0.3.47"
4
4
  description = "Yet Another Document Translator"
5
5
  license = "AGPL-3.0"
6
6
  readme = "README.md"
@@ -150,7 +150,7 @@ pythonpath = [".", "src"]
150
150
  testpaths = ["tests"]
151
151
 
152
152
  [bumpver]
153
- current_version = "0.3.44"
153
+ current_version = "0.3.47"
154
154
  version_pattern = "MAJOR.MINOR.PATCH[.PYTAGNUM]"
155
155
 
156
156
  [bumpver.file_patterns]
@@ -48,7 +48,7 @@ wheels = [
48
48
 
49
49
  [[package]]
50
50
  name = "babeldoc"
51
- version = "0.3.44"
51
+ version = "0.3.47"
52
52
  source = { editable = "." }
53
53
  dependencies = [
54
54
  { name = "bitstring" },
@@ -1 +0,0 @@
1
- __version__ = "0.3.44"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes