BabelDOC 0.1.18__tar.gz → 0.1.19__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.
- {babeldoc-0.1.18 → babeldoc-0.1.19}/PKG-INFO +4 -1
- {babeldoc-0.1.18 → babeldoc-0.1.19}/README.md +3 -0
- babeldoc-0.1.19/babeldoc/__init__.py +1 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/const.py +1 -1
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/backend/pdf_creater.py +15 -15
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/main.py +1 -1
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/pdfinterp.py +7 -1
- {babeldoc-0.1.18 → babeldoc-0.1.19}/pyproject.toml +2 -2
- {babeldoc-0.1.18 → babeldoc-0.1.19}/uv.lock +1 -1
- babeldoc-0.1.18/babeldoc/__init__.py +0 -1
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.cursorignore +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.github/dependabot.yml +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.github/labels.yml +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.github/release-drafter.yml +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.github/workflows/codeql.yml +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.github/workflows/docs.yml +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.github/workflows/labeler.yml +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.github/workflows/publish-to-pypi.yml +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.github/workflows/test.yml +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.gitignore +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/.pre-commit-config.yaml +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/LICENSE +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/asynchronize/__init__.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/converter.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/__init__.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/backend/__init__.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/frontend/__init__.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/frontend/il_creater.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/il_version_1.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/il_version_1.rnc +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/il_version_1.rng +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/il_version_1.xsd +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/midend/__init__.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/midend/add_debug_information.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/midend/il_translator.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/midend/layout_parser.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/midend/paragraph_finder.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/midend/remove_descent.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/midend/styles_and_formulas.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/midend/typesetting.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/translator/__init__.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/translator/cache.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/translator/translator.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/utils/fontmap.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/utils/layout_helper.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/utils/style_helper.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/document_il/xml_converter.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/docvision/README.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/docvision/__init__.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/docvision/doclayout.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/docvision/rpc_doclayout.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/high_level.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/progress_monitor.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/babeldoc/translation_config.py +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/CODE_OF_CONDUCT.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/CONTRIBUTING.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/CONTRIBUTOR_REWARD.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/ImplementationDetails/README.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/README.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/deploy.sh +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/images/babeldoc-banner.png +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/images/babeldoc-contributor_reward_example.png +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/images/babeldoc-preview.gif +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/index.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/intro-to-pdf-object.md +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/docs/requirements.txt +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/mkdocs.yml +0 -0
- {babeldoc-0.1.18 → babeldoc-0.1.19}/tests/test_translation_config.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: BabelDOC
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.19
|
|
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
|
|
@@ -134,7 +134,10 @@ uv run babeldoc --bing --files example.pdf --files example2.pdf
|
|
|
134
134
|
|
|
135
135
|
> [!TIP]
|
|
136
136
|
> Currently, this project mainly focuses on English-to-Chinese translation, and other scenarios have not been tested yet.
|
|
137
|
+
>
|
|
137
138
|
> (2025.3.1 update): Basic English target language support has been added, primarily to minimize line breaks within words([0-9A-Za-z]+).
|
|
139
|
+
>
|
|
140
|
+
> [HELP WANTED: Collecting word regular expressions for more languages](https://github.com/funstory-ai/BabelDOC/issues/129)
|
|
138
141
|
|
|
139
142
|
### PDF Processing Options
|
|
140
143
|
|
|
@@ -100,7 +100,10 @@ uv run babeldoc --bing --files example.pdf --files example2.pdf
|
|
|
100
100
|
|
|
101
101
|
> [!TIP]
|
|
102
102
|
> Currently, this project mainly focuses on English-to-Chinese translation, and other scenarios have not been tested yet.
|
|
103
|
+
>
|
|
103
104
|
> (2025.3.1 update): Basic English target language support has been added, primarily to minimize line breaks within words([0-9A-Za-z]+).
|
|
105
|
+
>
|
|
106
|
+
> [HELP WANTED: Collecting word regular expressions for more languages](https://github.com/funstory-ai/BabelDOC/issues/129)
|
|
104
107
|
|
|
105
108
|
### PDF Processing Options
|
|
106
109
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.1.19"
|
|
@@ -413,11 +413,11 @@ class PDFCreater:
|
|
|
413
413
|
|
|
414
414
|
# 使用子进程进行字体子集化
|
|
415
415
|
if not translation_config.skip_clean:
|
|
416
|
-
pdf = self.subset_fonts_in_subprocess(pdf, translation_config)
|
|
416
|
+
pdf = self.subset_fonts_in_subprocess(pdf, translation_config, tag="debug")
|
|
417
417
|
return pdf
|
|
418
418
|
|
|
419
419
|
def subset_fonts_in_subprocess(
|
|
420
|
-
self, pdf: pymupdf.Document, translation_config: TranslationConfig
|
|
420
|
+
self, pdf: pymupdf.Document, translation_config: TranslationConfig, tag: str
|
|
421
421
|
) -> pymupdf.Document:
|
|
422
422
|
"""Run font subsetting in a subprocess with timeout.
|
|
423
423
|
|
|
@@ -431,14 +431,10 @@ class PDFCreater:
|
|
|
431
431
|
original_pdf = pdf
|
|
432
432
|
# Create temporary file paths
|
|
433
433
|
temp_input = str(
|
|
434
|
-
translation_config.get_working_file_path(
|
|
435
|
-
f"temp_subset_input_{int(time.time())}.pdf"
|
|
436
|
-
)
|
|
434
|
+
translation_config.get_working_file_path(f"temp_subset_input_{tag}.pdf")
|
|
437
435
|
)
|
|
438
436
|
temp_output = str(
|
|
439
|
-
translation_config.get_working_file_path(
|
|
440
|
-
f"temp_subset_output_{int(time.time())}.pdf"
|
|
441
|
-
)
|
|
437
|
+
translation_config.get_working_file_path(f"temp_subset_output_{tag}.pdf")
|
|
442
438
|
)
|
|
443
439
|
|
|
444
440
|
# Save PDF to temporary file without subsetting
|
|
@@ -504,6 +500,7 @@ class PDFCreater:
|
|
|
504
500
|
deflate_fonts: bool = True,
|
|
505
501
|
linear: bool = False,
|
|
506
502
|
timeout: int = 120,
|
|
503
|
+
tag: str = "",
|
|
507
504
|
) -> bool:
|
|
508
505
|
"""Save a PDF document with a timeout for the clean=True operation.
|
|
509
506
|
|
|
@@ -523,14 +520,10 @@ class PDFCreater:
|
|
|
523
520
|
"""
|
|
524
521
|
# Create temporary file paths
|
|
525
522
|
temp_input = str(
|
|
526
|
-
translation_config.get_working_file_path(
|
|
527
|
-
f"temp_save_input_{int(time.time())}.pdf"
|
|
528
|
-
)
|
|
523
|
+
translation_config.get_working_file_path(f"temp_save_input_{tag}.pdf")
|
|
529
524
|
)
|
|
530
525
|
temp_output = str(
|
|
531
|
-
translation_config.get_working_file_path(
|
|
532
|
-
f"temp_save_output_{int(time.time())}.pdf"
|
|
533
|
-
)
|
|
526
|
+
translation_config.get_working_file_path(f"temp_save_output_{tag}.pdf")
|
|
534
527
|
)
|
|
535
528
|
|
|
536
529
|
# Save PDF to temporary file first
|
|
@@ -614,6 +607,9 @@ class PDFCreater:
|
|
|
614
607
|
logger.error(f"Error copying saved PDF: {e}")
|
|
615
608
|
pdf.save(output_path) # Fallback to direct save
|
|
616
609
|
return False
|
|
610
|
+
finally:
|
|
611
|
+
Path(temp_input).unlink()
|
|
612
|
+
Path(temp_output).unlink()
|
|
617
613
|
else:
|
|
618
614
|
logger.warning(
|
|
619
615
|
f"PDF save with clean=True failed with exit code {exit_code} or produced empty file"
|
|
@@ -748,7 +744,9 @@ class PDFCreater:
|
|
|
748
744
|
1,
|
|
749
745
|
) as pbar:
|
|
750
746
|
if not translation_config.skip_clean:
|
|
751
|
-
pdf = self.subset_fonts_in_subprocess(
|
|
747
|
+
pdf = self.subset_fonts_in_subprocess(
|
|
748
|
+
pdf, translation_config, tag="mono"
|
|
749
|
+
)
|
|
752
750
|
|
|
753
751
|
pbar.advance()
|
|
754
752
|
with self.translation_config.progress_monitor.stage_start(
|
|
@@ -773,6 +771,7 @@ class PDFCreater:
|
|
|
773
771
|
clean=not translation_config.skip_clean,
|
|
774
772
|
deflate_fonts=True,
|
|
775
773
|
linear=False,
|
|
774
|
+
tag="mono",
|
|
776
775
|
)
|
|
777
776
|
pbar.advance()
|
|
778
777
|
dual_out_path = None
|
|
@@ -823,6 +822,7 @@ class PDFCreater:
|
|
|
823
822
|
clean=not translation_config.skip_clean,
|
|
824
823
|
deflate_fonts=True,
|
|
825
824
|
linear=False,
|
|
825
|
+
tag="dual",
|
|
826
826
|
)
|
|
827
827
|
if translation_config.debug:
|
|
828
828
|
translation_config.raise_if_cancelled()
|
|
@@ -249,7 +249,13 @@ class PDFPageInterpreterEx(PDFPageInterpreter):
|
|
|
249
249
|
subtype = xobj.get("Subtype")
|
|
250
250
|
if subtype is LITERAL_FORM and "BBox" in xobj:
|
|
251
251
|
interpreter = self.dup()
|
|
252
|
-
|
|
252
|
+
|
|
253
|
+
# In extremely rare cases, a none might be mixed in the bbox, for example
|
|
254
|
+
# /BBox [ 0 3.052 null 274.9 157.3 ]
|
|
255
|
+
bbox = list(
|
|
256
|
+
filter(lambda x: x is not None, cast(Rect, list_value(xobj["BBox"])))
|
|
257
|
+
)
|
|
258
|
+
|
|
253
259
|
matrix = cast(Matrix, list_value(xobj.get("Matrix", MATRIX_IDENTITY)))
|
|
254
260
|
# According to PDF reference 1.7 section 4.9.1, XObjects in
|
|
255
261
|
# earlier PDFs (prior to v1.2) use the page's Resources entry
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "BabelDOC"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.19"
|
|
4
4
|
description = "Yet Another Document Translator"
|
|
5
5
|
license = "AGPL-3.0"
|
|
6
6
|
readme = "README.md"
|
|
@@ -132,7 +132,7 @@ pythonpath = [".", "src"]
|
|
|
132
132
|
testpaths = ["tests"]
|
|
133
133
|
|
|
134
134
|
[bumpver]
|
|
135
|
-
current_version = "0.1.
|
|
135
|
+
current_version = "0.1.19"
|
|
136
136
|
version_pattern = "MAJOR.MINOR.PATCH[.PYTAGNUM]"
|
|
137
137
|
|
|
138
138
|
[bumpver.file_patterns]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.1.18"
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{babeldoc-0.1.18 → babeldoc-0.1.19}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{babeldoc-0.1.18 → babeldoc-0.1.19}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|