BabelDOC 0.3.48__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.
Files changed (108) hide show
  1. {babeldoc-0.3.48 → babeldoc-0.3.49}/PKG-INFO +1 -1
  2. babeldoc-0.3.49/babeldoc/__init__.py +1 -0
  3. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/const.py +1 -1
  4. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/midend/il_translator_llm_only.py +104 -75
  5. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/high_level.py +10 -4
  6. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/main.py +1 -1
  7. {babeldoc-0.3.48 → babeldoc-0.3.49}/pyproject.toml +2 -2
  8. {babeldoc-0.3.48 → babeldoc-0.3.49}/uv.lock +1 -1
  9. babeldoc-0.3.48/babeldoc/__init__.py +0 -1
  10. {babeldoc-0.3.48 → babeldoc-0.3.49}/.cursorignore +0 -0
  11. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  12. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  13. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/PULL_REQUEST_TEMPLATE/pr_form.yml +0 -0
  14. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  15. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/dependabot.yml +0 -0
  16. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/labels.yml +0 -0
  17. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/release-drafter.yml +0 -0
  18. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/workflows/codeql.yml +0 -0
  19. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/workflows/docs.yml +0 -0
  20. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/workflows/labeler.yml +0 -0
  21. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/workflows/lint.yml +0 -0
  22. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/workflows/pr-lint.yml +0 -0
  23. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/workflows/publish-to-pypi.yml +0 -0
  24. {babeldoc-0.3.48 → babeldoc-0.3.49}/.github/workflows/test.yml +0 -0
  25. {babeldoc-0.3.48 → babeldoc-0.3.49}/.gitignore +0 -0
  26. {babeldoc-0.3.48 → babeldoc-0.3.49}/.pre-commit-config.yaml +0 -0
  27. {babeldoc-0.3.48 → babeldoc-0.3.49}/LICENSE +0 -0
  28. {babeldoc-0.3.48 → babeldoc-0.3.49}/README.md +0 -0
  29. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/assets/assets.py +0 -0
  30. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/assets/embedding_assets_metadata.py +0 -0
  31. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/asynchronize/__init__.py +0 -0
  32. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/converter.py +0 -0
  33. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/__init__.py +0 -0
  34. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/babeldoc_exception/BabelDOCException.py +0 -0
  35. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/backend/__init__.py +0 -0
  36. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/backend/pdf_creater.py +0 -0
  37. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/frontend/__init__.py +0 -0
  38. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/frontend/il_creater.py +0 -0
  39. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/il_version_1.py +0 -0
  40. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/il_version_1.rnc +0 -0
  41. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/il_version_1.rng +0 -0
  42. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/il_version_1.xsd +0 -0
  43. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/midend/__init__.py +0 -0
  44. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/midend/add_debug_information.py +0 -0
  45. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/midend/detect_scanned_file.py +0 -0
  46. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/midend/il_translator.py +0 -0
  47. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/midend/layout_parser.py +0 -0
  48. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/midend/paragraph_finder.py +0 -0
  49. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/midend/remove_descent.py +0 -0
  50. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/midend/styles_and_formulas.py +0 -0
  51. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/midend/table_parser.py +0 -0
  52. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/midend/typesetting.py +0 -0
  53. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/translator/__init__.py +0 -0
  54. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/translator/cache.py +0 -0
  55. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/translator/translator.py +0 -0
  56. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/utils/atomic_integer.py +0 -0
  57. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/utils/fontmap.py +0 -0
  58. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/utils/layout_helper.py +0 -0
  59. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/utils/mupdf_helper.py +0 -0
  60. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/utils/paragraph_helper.py +0 -0
  61. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/utils/priority_thread_pool_executor.py +0 -0
  62. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/utils/style_helper.py +0 -0
  63. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/utils/zstd_helper.py +0 -0
  64. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/document_il/xml_converter.py +0 -0
  65. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/docvision/README.md +0 -0
  66. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/docvision/__init__.py +0 -0
  67. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/docvision/doclayout.py +0 -0
  68. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/docvision/rpc_doclayout.py +0 -0
  69. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
  70. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/format/office/__init__.py +0 -0
  71. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/pdfinterp.py +0 -0
  72. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/progress_monitor.py +0 -0
  73. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/result_merger.py +0 -0
  74. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/split_manager.py +0 -0
  75. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/tools/generate_font_metadata.py +0 -0
  76. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/tools/italic_assistance.py +0 -0
  77. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/tools/italic_recognize_tool.py +0 -0
  78. {babeldoc-0.3.48 → babeldoc-0.3.49}/babeldoc/translation_config.py +0 -0
  79. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/CODE_OF_CONDUCT.md +0 -0
  80. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/CONTRIBUTING.md +0 -0
  81. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/CONTRIBUTOR_REWARD.md +0 -0
  82. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
  83. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
  84. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
  85. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
  86. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
  87. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/ImplementationDetails/README.md +0 -0
  88. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
  89. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
  90. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/README.md +0 -0
  91. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/deploy.sh +0 -0
  92. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/images/babeldoc-banner.png +0 -0
  93. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
  94. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
  95. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
  96. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
  97. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/images/babeldoc-big-logo.png +0 -0
  98. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/images/babeldoc-contributor_reward_example.png +0 -0
  99. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/images/babeldoc-preview.gif +0 -0
  100. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
  101. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
  102. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/images/babeldoc-small-logo.png +0 -0
  103. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/index.md +0 -0
  104. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/intro-to-pdf-object.md +0 -0
  105. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/requirements.txt +0 -0
  106. {babeldoc-0.3.48 → babeldoc-0.3.49}/docs/supported_languages.md +0 -0
  107. {babeldoc-0.3.48 → babeldoc-0.3.49}/mkdocs.yml +0 -0
  108. {babeldoc-0.3.48 → babeldoc-0.3.49}/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.48
3
+ Version: 0.3.49
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.49"
@@ -3,7 +3,7 @@ import shutil
3
3
  import subprocess
4
4
  from pathlib import Path
5
5
 
6
- __version__ = "0.3.48"
6
+ __version__ = "0.3.49"
7
7
 
8
8
  CACHE_FOLDER = Path.home() / ".cache" / "babeldoc"
9
9
 
@@ -267,37 +267,25 @@ class ILTranslatorLLMOnly:
267
267
  obj["formula_placeholders_hint"] = placeholders_hint
268
268
  json_format_input.append(obj)
269
269
 
270
- json_format_input = json.dumps(
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
- llm_input = [self.translation_config.custom_system_prompt]
280
+ llm_prompt_parts.append(self.translation_config.custom_system_prompt)
275
281
  else:
276
- llm_input = [
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
- if llm_hint:
294
- llm_input.append(
295
- "When translating, please refer to the following information to improve translation quality:"
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
- llm_input.append(
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
- llm_input.append(
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
- # Create a structured prompt template for LLM translation
325
- prompt_template = (
326
- f"""
327
- 4. You will be given a JSON formatted input containing entries with "id" and "input" fields.
328
-
329
- For each entry in the JSON, translate the contents of the "input" field into {self.translation_config.lang_out}.
330
- Write the translation back into the "output" field for that entry.
331
-
332
- """
333
- + """
334
- Here is an example of the expected format:
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
- llm_input.append(prompt_template)
363
- llm_input.append(
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
- final_input = "\n".join(llm_input).strip()
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
@@ -644,8 +644,11 @@ def _do_translate_single(
644
644
  "input.decompressed.pdf",
645
645
  )
646
646
  # Fix null xref in PDF file
647
- fix_filter(doc_input)
648
- fix_null_xref(doc_input)
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")
649
652
  doc_input.save(output_path, expand=True, pretty=True)
650
653
  del doc_input
651
654
 
@@ -655,8 +658,11 @@ def _do_translate_single(
655
658
  resfont = "china-ss"
656
659
 
657
660
  # Fix null xref in PDF file
658
- fix_filter(doc_pdf2zh)
659
- fix_null_xref(doc_pdf2zh)
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")
660
666
 
661
667
  mediabox_data = fix_media_box(doc_pdf2zh)
662
668
 
@@ -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.48"
26
+ __version__ = "0.3.49"
27
27
 
28
28
 
29
29
  def create_parser():
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "BabelDOC"
3
- version = "0.3.48"
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.48"
153
+ current_version = "0.3.49"
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.48"
51
+ version = "0.3.49"
52
52
  source = { editable = "." }
53
53
  dependencies = [
54
54
  { name = "bitstring" },
@@ -1 +0,0 @@
1
- __version__ = "0.3.48"
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