BabelDOC 0.3.47__tar.gz → 0.3.49__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.3.47 → babeldoc-0.3.49}/PKG-INFO +1 -1
- babeldoc-0.3.49/babeldoc/__init__.py +1 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/const.py +1 -1
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/midend/il_translator_llm_only.py +104 -75
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/high_level.py +14 -7
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/main.py +1 -1
- {babeldoc-0.3.47 → babeldoc-0.3.49}/pyproject.toml +2 -2
- {babeldoc-0.3.47 → babeldoc-0.3.49}/uv.lock +1 -1
- babeldoc-0.3.47/babeldoc/__init__.py +0 -1
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.cursorignore +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/PULL_REQUEST_TEMPLATE/pr_form.yml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/dependabot.yml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/labels.yml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/release-drafter.yml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/workflows/codeql.yml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/workflows/docs.yml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/workflows/labeler.yml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/workflows/lint.yml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/workflows/pr-lint.yml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/workflows/publish-to-pypi.yml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.github/workflows/test.yml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.gitignore +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/.pre-commit-config.yaml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/LICENSE +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/README.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/assets/assets.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/assets/embedding_assets_metadata.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/asynchronize/__init__.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/converter.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/__init__.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/babeldoc_exception/BabelDOCException.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/backend/__init__.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/backend/pdf_creater.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/frontend/__init__.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/frontend/il_creater.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/il_version_1.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/il_version_1.rnc +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/il_version_1.rng +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/il_version_1.xsd +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/midend/__init__.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/midend/add_debug_information.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/midend/detect_scanned_file.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/midend/il_translator.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/midend/layout_parser.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/midend/paragraph_finder.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/midend/remove_descent.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/midend/styles_and_formulas.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/midend/table_parser.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/midend/typesetting.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/translator/__init__.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/translator/cache.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/translator/translator.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/utils/atomic_integer.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/utils/fontmap.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/utils/layout_helper.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/utils/mupdf_helper.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/utils/paragraph_helper.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/utils/priority_thread_pool_executor.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/utils/style_helper.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/utils/zstd_helper.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/document_il/xml_converter.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/docvision/README.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/docvision/__init__.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/docvision/doclayout.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/docvision/rpc_doclayout.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/format/office/__init__.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/pdfinterp.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/progress_monitor.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/result_merger.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/split_manager.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/tools/generate_font_metadata.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/tools/italic_assistance.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/tools/italic_recognize_tool.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/babeldoc/translation_config.py +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/CODE_OF_CONDUCT.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/CONTRIBUTING.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/CONTRIBUTOR_REWARD.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/ImplementationDetails/README.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/README.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/deploy.sh +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-banner.png +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-big-logo.png +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-contributor_reward_example.png +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-preview.gif +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-small-logo.png +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/index.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/intro-to-pdf-object.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/requirements.txt +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/docs/supported_languages.md +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/mkdocs.yml +0 -0
- {babeldoc-0.3.47 → babeldoc-0.3.49}/tests/test_translation_config.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.3.49"
|
|
@@ -267,37 +267,25 @@ class ILTranslatorLLMOnly:
|
|
|
267
267
|
obj["formula_placeholders_hint"] = placeholders_hint
|
|
268
268
|
json_format_input.append(obj)
|
|
269
269
|
|
|
270
|
-
|
|
270
|
+
json_format_input_str = json.dumps(
|
|
271
271
|
json_format_input, ensure_ascii=False, indent=2
|
|
272
272
|
)
|
|
273
|
+
|
|
274
|
+
# Start building the new prompt
|
|
275
|
+
llm_prompt_parts = []
|
|
276
|
+
|
|
277
|
+
# 1. #role
|
|
278
|
+
llm_prompt_parts.append("#role")
|
|
273
279
|
if self.translation_config.custom_system_prompt:
|
|
274
|
-
|
|
280
|
+
llm_prompt_parts.append(self.translation_config.custom_system_prompt)
|
|
275
281
|
else:
|
|
276
|
-
|
|
282
|
+
llm_prompt_parts.append(
|
|
277
283
|
f"You are a professional and reliable machine translation engine responsible for translating the input text into {self.translation_config.lang_out}."
|
|
278
|
-
]
|
|
279
|
-
|
|
280
|
-
llm_hint = []
|
|
281
|
-
if title_paragraph:
|
|
282
|
-
llm_hint.append(
|
|
283
|
-
f"The first title in the full text: {title_paragraph.unicode}"
|
|
284
|
-
)
|
|
285
|
-
if (
|
|
286
|
-
local_title_paragraph
|
|
287
|
-
and local_title_paragraph.debug_id != title_paragraph.debug_id
|
|
288
|
-
):
|
|
289
|
-
llm_hint.append(
|
|
290
|
-
f"The most similar title in the full text: {local_title_paragraph.unicode}"
|
|
291
284
|
)
|
|
292
285
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
)
|
|
297
|
-
for i, line in enumerate(llm_hint):
|
|
298
|
-
llm_input.append(f"{i}. {line}")
|
|
299
|
-
llm_input.append("When translating, please follow the following rules:")
|
|
300
|
-
# Create a structured prompt template for LLM translation
|
|
286
|
+
# 2. ##rules
|
|
287
|
+
llm_prompt_parts.append("\n##rules")
|
|
288
|
+
# Dynamically get placeholder examples
|
|
301
289
|
rich_text_left_placeholder = (
|
|
302
290
|
self.translate_engine.get_rich_text_left_placeholder(1)
|
|
303
291
|
)
|
|
@@ -308,66 +296,102 @@ class ILTranslatorLLMOnly:
|
|
|
308
296
|
)
|
|
309
297
|
if isinstance(rich_text_right_placeholder, tuple):
|
|
310
298
|
rich_text_right_placeholder = rich_text_right_placeholder[0]
|
|
311
|
-
llm_input.append(
|
|
312
|
-
f'1. Do not translate style tags, such as "{rich_text_left_placeholder}xxx{rich_text_right_placeholder}"!'
|
|
313
|
-
)
|
|
314
|
-
|
|
315
299
|
formula_placeholder = self.translate_engine.get_formular_placeholder(3)
|
|
316
300
|
if isinstance(formula_placeholder, tuple):
|
|
317
301
|
formula_placeholder = formula_placeholder[0]
|
|
318
|
-
|
|
302
|
+
|
|
303
|
+
llm_prompt_parts.append(
|
|
304
|
+
f'1. Do not translate style tags, such as "{rich_text_left_placeholder}xxx{rich_text_right_placeholder}"'
|
|
305
|
+
)
|
|
306
|
+
llm_prompt_parts.append(
|
|
319
307
|
f'2. Do not translate formula placeholders, such as "{formula_placeholder}". The system will automatically replace the placeholders with the corresponding formulas.'
|
|
320
308
|
)
|
|
321
|
-
|
|
309
|
+
llm_prompt_parts.append(
|
|
322
310
|
"3. If there is no need to translate (such as proper nouns, codes, etc.), then return the original text."
|
|
323
311
|
)
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
<example>
|
|
337
|
-
```json
|
|
338
|
-
Input:
|
|
339
|
-
{
|
|
340
|
-
"id": 1,
|
|
341
|
-
"input": "Source",
|
|
342
|
-
"layout_label": "plain text",
|
|
343
|
-
// this is optional
|
|
344
|
-
"formula_placeholders_hint": {
|
|
345
|
-
"placeholder1": "hint1",
|
|
346
|
-
"placeholder2": "hint2"
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
```
|
|
350
|
-
Output:
|
|
351
|
-
```json
|
|
352
|
-
{
|
|
353
|
-
"id": 1,
|
|
354
|
-
"output": "Translation"
|
|
355
|
-
}
|
|
356
|
-
```
|
|
357
|
-
</example>
|
|
358
|
-
|
|
359
|
-
Please return the translated json directly without wrapping ```json``` tag or include any additional information.
|
|
360
|
-
"""
|
|
312
|
+
|
|
313
|
+
# 3. ##Input
|
|
314
|
+
llm_prompt_parts.append("\n##Input")
|
|
315
|
+
llm_prompt_parts.append(
|
|
316
|
+
'You will be given a JSON formatted input containing entries with "id" and "input" fields.'
|
|
317
|
+
)
|
|
318
|
+
|
|
319
|
+
# 4. ##Output
|
|
320
|
+
llm_prompt_parts.append("\n##Output")
|
|
321
|
+
llm_prompt_parts.append(
|
|
322
|
+
f'For each entry in the JSON, translate the contents of the "input" field into {self.translation_config.lang_out}.'
|
|
361
323
|
)
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
f"""Here is the input:
|
|
365
|
-
|
|
366
|
-
```json
|
|
367
|
-
{json_format_input}
|
|
368
|
-
```"""
|
|
324
|
+
llm_prompt_parts.append(
|
|
325
|
+
'Write the translation back into the "output" field for that entry.'
|
|
369
326
|
)
|
|
370
|
-
|
|
327
|
+
llm_prompt_parts.append(
|
|
328
|
+
"Please return the translated json directly without wrapping ```json``` tag or include any additional information."
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
# 5. ##example
|
|
332
|
+
llm_prompt_parts.append("\n##example")
|
|
333
|
+
llm_prompt_parts.append("Here is an example of the expected format:")
|
|
334
|
+
llm_prompt_parts.append("") # Blank line
|
|
335
|
+
llm_prompt_parts.append("<example>")
|
|
336
|
+
llm_prompt_parts.append("```json")
|
|
337
|
+
llm_prompt_parts.append("Input:")
|
|
338
|
+
llm_prompt_parts.append("{")
|
|
339
|
+
llm_prompt_parts.append(' "id": 1,')
|
|
340
|
+
llm_prompt_parts.append(' "input": "Source",')
|
|
341
|
+
llm_prompt_parts.append(' "layout_label": "plain text",')
|
|
342
|
+
llm_prompt_parts.append(" // this is optional")
|
|
343
|
+
llm_prompt_parts.append(' "formula_placeholders_hint": {')
|
|
344
|
+
llm_prompt_parts.append(' "placeholder1": "hint1",')
|
|
345
|
+
llm_prompt_parts.append(' "placeholder2": "hint2"')
|
|
346
|
+
llm_prompt_parts.append(" }")
|
|
347
|
+
llm_prompt_parts.append("}")
|
|
348
|
+
llm_prompt_parts.append("```")
|
|
349
|
+
llm_prompt_parts.append("Output:")
|
|
350
|
+
llm_prompt_parts.append("```json")
|
|
351
|
+
llm_prompt_parts.append("{")
|
|
352
|
+
llm_prompt_parts.append(' "id": 1,')
|
|
353
|
+
llm_prompt_parts.append(' "output": "Translation"')
|
|
354
|
+
llm_prompt_parts.append("}")
|
|
355
|
+
llm_prompt_parts.append("```")
|
|
356
|
+
llm_prompt_parts.append("</example>")
|
|
357
|
+
|
|
358
|
+
# 6. ##Others (contextual hints)
|
|
359
|
+
other_hints = []
|
|
360
|
+
hint_idx = 0
|
|
361
|
+
if title_paragraph:
|
|
362
|
+
other_hints.append(
|
|
363
|
+
f"{hint_idx}. The first title in the full text: {title_paragraph.unicode}"
|
|
364
|
+
)
|
|
365
|
+
hint_idx += 1
|
|
366
|
+
|
|
367
|
+
if local_title_paragraph:
|
|
368
|
+
# Check if it's different from the global title_paragraph before adding
|
|
369
|
+
is_different_from_global = True
|
|
370
|
+
if title_paragraph:
|
|
371
|
+
if local_title_paragraph.debug_id == title_paragraph.debug_id:
|
|
372
|
+
is_different_from_global = False
|
|
373
|
+
|
|
374
|
+
if is_different_from_global:
|
|
375
|
+
other_hints.append(
|
|
376
|
+
f"{hint_idx}. The most similar title in the full text: {local_title_paragraph.unicode}"
|
|
377
|
+
)
|
|
378
|
+
hint_idx += 1
|
|
379
|
+
|
|
380
|
+
if other_hints:
|
|
381
|
+
llm_prompt_parts.append("\n##Others")
|
|
382
|
+
llm_prompt_parts.append(
|
|
383
|
+
"When translating, please refer to the following information to improve translation quality:"
|
|
384
|
+
)
|
|
385
|
+
llm_prompt_parts.extend(other_hints)
|
|
386
|
+
|
|
387
|
+
llm_prompt_parts.append("\n## Actual Input")
|
|
388
|
+
|
|
389
|
+
# Combine all parts for the main prompt
|
|
390
|
+
main_prompt_content = "\n".join(llm_prompt_parts)
|
|
391
|
+
|
|
392
|
+
# Append the actual JSON input string at the end, without markdown fence
|
|
393
|
+
final_input = main_prompt_content + "\n\n" + json_format_input_str
|
|
394
|
+
|
|
371
395
|
for llm_translate_tracker in llm_translate_trackers:
|
|
372
396
|
llm_translate_tracker.set_input(final_input)
|
|
373
397
|
llm_output = self.translate_engine.llm_translate(
|
|
@@ -382,6 +406,11 @@ class ILTranslatorLLMOnly:
|
|
|
382
406
|
|
|
383
407
|
parsed_output = json.loads(llm_output)
|
|
384
408
|
|
|
409
|
+
if isinstance(parsed_output, dict) and parsed_output.get(
|
|
410
|
+
"output", parsed_output.get("input", False)
|
|
411
|
+
):
|
|
412
|
+
parsed_output = [parsed_output]
|
|
413
|
+
|
|
385
414
|
translation_results = {
|
|
386
415
|
item["id"]: item.get("output", item.get("input"))
|
|
387
416
|
for item in parsed_output
|
|
@@ -423,9 +423,10 @@ def fix_filter(doc):
|
|
|
423
423
|
contents = page.get_contents()
|
|
424
424
|
if len(contents) > 1:
|
|
425
425
|
page_streams = [doc.xref_stream(i) for i in contents]
|
|
426
|
-
|
|
427
|
-
doc.
|
|
428
|
-
doc.
|
|
426
|
+
r = doc.get_new_xref()
|
|
427
|
+
doc.update_object(r, "<<>>")
|
|
428
|
+
doc.update_stream(r, b" ".join(page_streams))
|
|
429
|
+
doc.xref_set_key(page.xref, "Contents", f"{r} 0 R")
|
|
429
430
|
|
|
430
431
|
|
|
431
432
|
def do_translate(
|
|
@@ -643,8 +644,11 @@ def _do_translate_single(
|
|
|
643
644
|
"input.decompressed.pdf",
|
|
644
645
|
)
|
|
645
646
|
# Fix null xref in PDF file
|
|
646
|
-
|
|
647
|
-
|
|
647
|
+
try:
|
|
648
|
+
fix_filter(doc_input)
|
|
649
|
+
fix_null_xref(doc_input)
|
|
650
|
+
except Exception:
|
|
651
|
+
logger.exception("auto fix failed, please check the pdf file")
|
|
648
652
|
doc_input.save(output_path, expand=True, pretty=True)
|
|
649
653
|
del doc_input
|
|
650
654
|
|
|
@@ -654,8 +658,11 @@ def _do_translate_single(
|
|
|
654
658
|
resfont = "china-ss"
|
|
655
659
|
|
|
656
660
|
# Fix null xref in PDF file
|
|
657
|
-
|
|
658
|
-
|
|
661
|
+
try:
|
|
662
|
+
fix_filter(doc_pdf2zh)
|
|
663
|
+
fix_null_xref(doc_pdf2zh)
|
|
664
|
+
except Exception:
|
|
665
|
+
logger.exception("auto fix failed, please check the pdf file")
|
|
659
666
|
|
|
660
667
|
mediabox_data = fix_media_box(doc_pdf2zh)
|
|
661
668
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "BabelDOC"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.49"
|
|
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.
|
|
153
|
+
current_version = "0.3.49"
|
|
154
154
|
version_pattern = "MAJOR.MINOR.PATCH[.PYTAGNUM]"
|
|
155
155
|
|
|
156
156
|
[bumpver.file_patterns]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.3.47"
|
|
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.3.47 → babeldoc-0.3.49}/babeldoc/document_il/babeldoc_exception/BabelDOCException.py
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
|
|
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.3.47 → babeldoc-0.3.49}/babeldoc/document_il/utils/priority_thread_pool_executor.py
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{babeldoc-0.3.47 → babeldoc-0.3.49}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{babeldoc-0.3.47 → babeldoc-0.3.49}/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
|
{babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-big-logo-with-transparent-background.png
RENAMED
|
File without changes
|
{babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-big-logo-with-transparent-background.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-small-logo-with-transparent-background.png
RENAMED
|
File without changes
|
{babeldoc-0.3.47 → babeldoc-0.3.49}/docs/images/babeldoc-small-logo-with-transparent-background.svg
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
|