BabelDOC 0.3.26__tar.gz → 0.3.28__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.26 → babeldoc-0.3.28}/PKG-INFO +2 -1
- babeldoc-0.3.28/babeldoc/__init__.py +1 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/const.py +1 -1
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/backend/pdf_creater.py +13 -7
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/frontend/il_creater.py +3 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/midend/detect_scanned_file.py +7 -2
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/midend/styles_and_formulas.py +20 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/midend/typesetting.py +28 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/translator/translator.py +0 -1
- babeldoc-0.3.28/babeldoc/document_il/utils/zstd_helper.py +21 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/docvision/table_detection/rapidocr.py +1 -1
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/high_level.py +29 -6
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/main.py +1 -1
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/pdfinterp.py +3 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/pyproject.toml +3 -2
- {babeldoc-0.3.26 → babeldoc-0.3.28}/uv.lock +43 -1
- babeldoc-0.3.26/babeldoc/__init__.py +0 -1
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.cursorignore +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/PULL_REQUEST_TEMPLATE/pr_form.yml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/dependabot.yml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/labels.yml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/release-drafter.yml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/workflows/codeql.yml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/workflows/docs.yml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/workflows/labeler.yml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/workflows/lint.yml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/workflows/pr-lint.yml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/workflows/publish-to-pypi.yml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.github/workflows/test.yml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.gitignore +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/.pre-commit-config.yaml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/LICENSE +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/README.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/assets/assets.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/assets/embedding_assets_metadata.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/asynchronize/__init__.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/converter.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/__init__.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/babeldoc_exception/BabelDOCException.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/backend/__init__.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/frontend/__init__.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/il_version_1.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/il_version_1.rnc +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/il_version_1.rng +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/il_version_1.xsd +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/midend/__init__.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/midend/add_debug_information.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/midend/il_translator.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/midend/il_translator_llm_only.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/midend/layout_parser.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/midend/paragraph_finder.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/midend/remove_descent.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/midend/table_parser.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/translator/__init__.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/translator/cache.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/utils/atomic_integer.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/utils/fontmap.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/utils/layout_helper.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/utils/priority_thread_pool_executor.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/utils/style_helper.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/document_il/xml_converter.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/docvision/README.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/docvision/__init__.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/docvision/doclayout.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/docvision/rpc_doclayout.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/format/office/__init__.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/progress_monitor.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/result_merger.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/split_manager.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/tools/generate_font_metadata.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/tools/italic_assistance.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/tools/italic_recognize_tool.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/babeldoc/translation_config.py +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/CODE_OF_CONDUCT.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/CONTRIBUTING.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/CONTRIBUTOR_REWARD.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/ImplementationDetails/README.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/README.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/deploy.sh +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/images/babeldoc-banner.png +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/images/babeldoc-big-logo.png +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/images/babeldoc-contributor_reward_example.png +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/images/babeldoc-preview.gif +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/images/babeldoc-small-logo.png +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/index.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/intro-to-pdf-object.md +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/docs/requirements.txt +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/mkdocs.yml +0 -0
- {babeldoc-0.3.26 → babeldoc-0.3.28}/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.
|
|
3
|
+
Version: 0.3.28
|
|
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
|
|
@@ -38,6 +38,7 @@ Requires-Dist: tiktoken>=0.9.0
|
|
|
38
38
|
Requires-Dist: toml>=0.10.2
|
|
39
39
|
Requires-Dist: tqdm>=4.67.1
|
|
40
40
|
Requires-Dist: xsdata[cli,lxml,soap]>=24.12
|
|
41
|
+
Requires-Dist: zstd>=1.5.6.7
|
|
41
42
|
Provides-Extra: cuda
|
|
42
43
|
Requires-Dist: onnxruntime-gpu>=1.16.1; extra == 'cuda'
|
|
43
44
|
Provides-Extra: directml
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.3.28"
|
|
@@ -15,6 +15,7 @@ from bitstring import BitStream
|
|
|
15
15
|
from babeldoc.assets.embedding_assets_metadata import FONT_NAMES
|
|
16
16
|
from babeldoc.document_il import il_version_1
|
|
17
17
|
from babeldoc.document_il.utils.fontmap import FontMapper
|
|
18
|
+
from babeldoc.document_il.utils.zstd_helper import zstd_decompress
|
|
18
19
|
from babeldoc.translation_config import TranslateResult
|
|
19
20
|
from babeldoc.translation_config import TranslationConfig
|
|
20
21
|
from babeldoc.translation_config import WatermarkOutputMode
|
|
@@ -776,11 +777,12 @@ class PDFCreater:
|
|
|
776
777
|
return False
|
|
777
778
|
|
|
778
779
|
def restore_media_box(self, doc: pymupdf.Document, mediabox_data: dict) -> None:
|
|
779
|
-
for pageno,
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
780
|
+
for pageno, page_box_data in mediabox_data.items():
|
|
781
|
+
for name, box in page_box_data.items():
|
|
782
|
+
try:
|
|
783
|
+
doc.xref_set_key(doc[pageno].xref, name, box)
|
|
784
|
+
except Exception:
|
|
785
|
+
logger.error(f"Error restoring media box {name} from PDF")
|
|
784
786
|
|
|
785
787
|
def write(
|
|
786
788
|
self, translation_config: TranslationConfig, check_font_exists: bool = False
|
|
@@ -831,13 +833,17 @@ class PDFCreater:
|
|
|
831
833
|
page_encoding_length_map
|
|
832
834
|
)
|
|
833
835
|
xobj_op = BitStream()
|
|
834
|
-
|
|
836
|
+
base_op = xobj.base_operations.value
|
|
837
|
+
base_op = zstd_decompress(base_op)
|
|
838
|
+
xobj_op.append(base_op.encode())
|
|
835
839
|
xobj_draw_ops[xobj.xobj_id] = xobj_op
|
|
836
840
|
|
|
837
841
|
page_op = BitStream()
|
|
838
842
|
# q {ops_base}Q 1 0 0 1 {x0} {y0} cm {ops_new}
|
|
839
843
|
# page_op.append(b"q ")
|
|
840
|
-
|
|
844
|
+
base_op = page.base_operations.value
|
|
845
|
+
base_op = zstd_decompress(base_op)
|
|
846
|
+
page_op.append(base_op.encode())
|
|
841
847
|
page_op.append(b" \n")
|
|
842
848
|
# page_op.append(b" Q ")
|
|
843
849
|
# page_op.append(
|
|
@@ -19,6 +19,7 @@ from pdfminer.pdftypes import resolve1 as pdftypes_resolve1
|
|
|
19
19
|
from pdfminer.psparser import PSLiteral
|
|
20
20
|
|
|
21
21
|
from babeldoc.document_il import il_version_1
|
|
22
|
+
from babeldoc.document_il.utils import zstd_helper
|
|
22
23
|
from babeldoc.document_il.utils.style_helper import BLACK
|
|
23
24
|
from babeldoc.document_il.utils.style_helper import YELLOW
|
|
24
25
|
from babeldoc.translation_config import TranslationConfig
|
|
@@ -587,6 +588,7 @@ class ILCreater:
|
|
|
587
588
|
self.pop_passthrough_per_char_instruction()
|
|
588
589
|
self.pop_xobj()
|
|
589
590
|
xobj = self.xobj_map[xobj_id]
|
|
591
|
+
base_op = zstd_helper.zstd_compress(base_op)
|
|
590
592
|
xobj.base_operations = il_version_1.BaseOperations(value=base_op)
|
|
591
593
|
self.xobj_inc += 1
|
|
592
594
|
|
|
@@ -636,6 +638,7 @@ class ILCreater:
|
|
|
636
638
|
self.current_page.page_number = page_number
|
|
637
639
|
|
|
638
640
|
def on_page_base_operation(self, operation: str):
|
|
641
|
+
operation = zstd_helper.zstd_compress(operation)
|
|
639
642
|
self.current_page.base_operations = il_version_1.BaseOperations(value=operation)
|
|
640
643
|
|
|
641
644
|
def on_page_resource_font(self, font: PDFFont, xref_id: int, font_id: str):
|
|
@@ -8,6 +8,7 @@ from skimage.metrics import structural_similarity
|
|
|
8
8
|
from babeldoc.document_il import il_version_1
|
|
9
9
|
from babeldoc.document_il.babeldoc_exception.BabelDOCException import ScannedPDFError
|
|
10
10
|
from babeldoc.document_il.utils.style_helper import GREEN
|
|
11
|
+
from babeldoc.document_il.utils.zstd_helper import zstd_decompress
|
|
11
12
|
from babeldoc.translation_config import TranslationConfig
|
|
12
13
|
|
|
13
14
|
logger = logging.getLogger(__name__)
|
|
@@ -111,11 +112,15 @@ class DetectScannedFile:
|
|
|
111
112
|
)[:, :, ::-1]
|
|
112
113
|
new_xref = pdf.get_new_xref()
|
|
113
114
|
pdf.update_object(new_xref, "<<>>")
|
|
114
|
-
|
|
115
|
+
baseop = page.base_operations.value
|
|
116
|
+
baseop = zstd_decompress(baseop)
|
|
117
|
+
pdf.update_stream(new_xref, baseop.encode("utf-8"))
|
|
115
118
|
pdf[page.page_number].set_contents(new_xref)
|
|
116
119
|
|
|
117
120
|
for xobj in page.pdf_xobject:
|
|
118
|
-
|
|
121
|
+
base_op = xobj.base_operations.value
|
|
122
|
+
base_op = zstd_decompress(base_op)
|
|
123
|
+
pdf.update_stream(xobj.xref_id, base_op.encode("utf-8"))
|
|
119
124
|
|
|
120
125
|
after_page_image = pdf[page.page_number].get_pixmap()
|
|
121
126
|
after_page_image = np.frombuffer(after_page_image.samples, np.uint8).reshape(
|
|
@@ -586,6 +586,26 @@ class StylesAndFormulas:
|
|
|
586
586
|
r"|.*SabonLTPro.*"
|
|
587
587
|
r"|.*ArnoPro.*"
|
|
588
588
|
r"|.*CharisSIL.*"
|
|
589
|
+
r"|.*MSReference.*"
|
|
590
|
+
r"|.*CMUSerif-Roman.*"
|
|
591
|
+
r"|.*CourierNewPS.*"
|
|
592
|
+
r"|.*XCharter.*"
|
|
593
|
+
r"|.*GillSans.*"
|
|
594
|
+
r"|.*Perpetua.*"
|
|
595
|
+
r"|.*GEInspira.*"
|
|
596
|
+
r"|.*AGaramond.*"
|
|
597
|
+
r"|.*BMath.*"
|
|
598
|
+
r"|.*MSTT.*"
|
|
599
|
+
r"|.*Bookinsanity.*"
|
|
600
|
+
r"|.*ScalySans.*"
|
|
601
|
+
r"|.*Code2000.*"
|
|
602
|
+
r"|.*Minion.*"
|
|
603
|
+
r"|.*JansonTextLT.*"
|
|
604
|
+
r"|.*MathPack.*"
|
|
605
|
+
r"|.*Macmillan.*"
|
|
606
|
+
r"|.*NimbusSan.*"
|
|
607
|
+
r"|.*Mincho.*"
|
|
608
|
+
r"|.*Amerigo.*"
|
|
589
609
|
r")$"
|
|
590
610
|
)
|
|
591
611
|
precise_formula_font_pattern = (
|
|
@@ -111,8 +111,36 @@ class TypesettingUnit:
|
|
|
111
111
|
r"\uAB30-\uAB6F" # Latin Extended E
|
|
112
112
|
r"\u0250-\u02A0" # IPA Extensions
|
|
113
113
|
r"\u0400-\u04FF" # Cyrillic
|
|
114
|
+
r"\u0300-\u036F" # Combining Diacritical Marks
|
|
115
|
+
r"\u0500-\u052F" # Cyrillic Supplement
|
|
116
|
+
r"\u0370-\u03FF" # Greek and Coptic
|
|
117
|
+
r"\u2DE0-\u2DFF" # Cyrillic Extended-A
|
|
118
|
+
r"\uA650-\uA69F" # Cyrillic Extended-B
|
|
119
|
+
r"\u1200-\u137F" # Ethiopic
|
|
120
|
+
r"\u1380-\u139F" # Ethiopic Supplement
|
|
121
|
+
r"\u2D80-\u2DDF" # Ethiopic Extended
|
|
122
|
+
r"\uAB00-\uAB2F" # Ethiopic Extended-A
|
|
123
|
+
r"\U0001E7E0-\U0001E7FF" # Ethiopic Extended-B
|
|
124
|
+
r"\u0E80-\u0EFF" # Lao
|
|
125
|
+
r"\u0D00-\u0D7F" # Malayalam
|
|
126
|
+
r"\u0A80-\u0AFF" # Gujarati
|
|
127
|
+
r"\u0E00-\u0E7F" # Thai
|
|
128
|
+
r"\u1000-\u109F" # Myanmar
|
|
129
|
+
r"\uAA60-\uAA7F" # Myanmar Extended-A
|
|
130
|
+
r"\uA9E0-\uA9FF" # Myanmar Extended-B
|
|
131
|
+
r"\U000116D0-\U000116FF" # Myanmar Extended-C
|
|
132
|
+
r"\u0B80-\u0BFF" # Tamil
|
|
133
|
+
r"\u0C00-\u0C7F" # Telugu
|
|
134
|
+
r"\u0B00-\u0B7F" # Oriya
|
|
135
|
+
r"\u0530-\u058F" # Armenian
|
|
136
|
+
r"\u10A0-\u10FF" # Georgian
|
|
137
|
+
r"\u1C90-\u1CBF" # Georgian Extended
|
|
138
|
+
r"\u2D00-\u2D2F" # Georgian Supplement
|
|
139
|
+
r"\u1780-\u17FF" # Khmer
|
|
140
|
+
r"\u19E0-\u19FF" # Khmer Symbols
|
|
114
141
|
r"'"
|
|
115
142
|
r"-" # Hyphen
|
|
143
|
+
r"·" # Middle Dot (U+00B7) For Català
|
|
116
144
|
r"]+$",
|
|
117
145
|
unicode,
|
|
118
146
|
):
|
|
@@ -268,7 +268,6 @@ class OpenAITranslator(BaseTranslator):
|
|
|
268
268
|
logger.exception("Error updating token count")
|
|
269
269
|
|
|
270
270
|
def get_formular_placeholder(self, placeholder_id: int):
|
|
271
|
-
return f"<formula id='{placeholder_id}' />"
|
|
272
271
|
return "{{v" + str(placeholder_id) + "}}"
|
|
273
272
|
return "{{" + str(placeholder_id) + "}}"
|
|
274
273
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
|
|
3
|
+
import zstd
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def zstd_compress(data) -> str:
|
|
7
|
+
if isinstance(data, str):
|
|
8
|
+
data = data.encode()
|
|
9
|
+
if not isinstance(data, bytes):
|
|
10
|
+
raise TypeError(f"data must be str or bytes, not {type(data)}")
|
|
11
|
+
|
|
12
|
+
return base64.b85encode(zstd.compress(data)).decode()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def zstd_decompress(data) -> str:
|
|
16
|
+
if isinstance(data, str):
|
|
17
|
+
data = data.encode()
|
|
18
|
+
if not isinstance(data, bytes):
|
|
19
|
+
raise TypeError(f"data must be str or bytes, not {type(data)}")
|
|
20
|
+
|
|
21
|
+
return zstd.decompress(base64.b85decode(data)).decode()
|
|
@@ -91,7 +91,7 @@ class RapidOCRModel:
|
|
|
91
91
|
self.use_dml = True
|
|
92
92
|
elif re.match(r"cuda", provider, re.IGNORECASE):
|
|
93
93
|
self.use_cuda = True
|
|
94
|
-
|
|
94
|
+
self.use_dml = False # force disable directml
|
|
95
95
|
self.model = RapidOCR(
|
|
96
96
|
det_model_path=get_table_detection_rapidocr_model_path(),
|
|
97
97
|
det_use_cuda=self.use_cuda,
|
|
@@ -479,13 +479,23 @@ def do_translate(
|
|
|
479
479
|
part_config.input_file = part_temp_input_path
|
|
480
480
|
|
|
481
481
|
temp_doc = Document()
|
|
482
|
+
for x in range(
|
|
483
|
+
split_point.start_page, split_point.end_page + 1
|
|
484
|
+
):
|
|
485
|
+
xref = original_doc[x].xref
|
|
486
|
+
if (
|
|
487
|
+
original_doc.xref_get_key(xref, "Annots")[0]
|
|
488
|
+
!= "null"
|
|
489
|
+
):
|
|
490
|
+
original_doc.xref_set_key(
|
|
491
|
+
xref, "Annots", "null"
|
|
492
|
+
)
|
|
482
493
|
temp_doc.insert_pdf(
|
|
483
494
|
original_doc,
|
|
484
495
|
from_page=split_point.start_page,
|
|
485
496
|
to_page=split_point.end_page,
|
|
486
497
|
)
|
|
487
498
|
temp_doc.save(part_temp_input_path)
|
|
488
|
-
|
|
489
499
|
assert (
|
|
490
500
|
temp_doc.page_count
|
|
491
501
|
== split_point.end_page - split_point.start_page + 1
|
|
@@ -547,7 +557,10 @@ def do_translate(
|
|
|
547
557
|
return result
|
|
548
558
|
|
|
549
559
|
except Exception as e:
|
|
550
|
-
|
|
560
|
+
if translation_config.debug:
|
|
561
|
+
logger.exception("translate error:")
|
|
562
|
+
else:
|
|
563
|
+
logger.error(f"translate error: {e}")
|
|
551
564
|
pm.disable = False
|
|
552
565
|
pm.translate_error(e)
|
|
553
566
|
raise
|
|
@@ -560,17 +573,27 @@ def do_translate(
|
|
|
560
573
|
def fix_media_box(doc: Document) -> None:
|
|
561
574
|
mediabox_data = {}
|
|
562
575
|
for page in doc:
|
|
576
|
+
page_box_data = {}
|
|
563
577
|
mediabox = doc.xref_get_key(page.xref, "MediaBox")
|
|
564
|
-
|
|
565
|
-
# Some PDF pages do not have a mediabox
|
|
566
578
|
if mediabox[0] == "null":
|
|
567
579
|
mediabox = ("array", "[0 0 612 792]")
|
|
568
580
|
doc.xref_set_key(page.xref, "MediaBox", mediabox[1])
|
|
569
581
|
if page.mediabox.x0 != 0 or page.mediabox.y0 != 0:
|
|
582
|
+
x0 = page.mediabox.x0
|
|
583
|
+
y0 = page.mediabox.y0
|
|
570
584
|
x1 = page.mediabox.x1
|
|
571
585
|
y1 = page.mediabox.y1
|
|
572
|
-
|
|
573
|
-
doc.xref_set_key(page.xref, "MediaBox", f"[0 0 {x1} {y1}]")
|
|
586
|
+
page_box_data["MediaBox"] = doc.xref_get_key(page.xref, "MediaBox")[1]
|
|
587
|
+
doc.xref_set_key(page.xref, "MediaBox", f"[0 0 {x1 - x0} {y1 - y0}]")
|
|
588
|
+
if page.cropbox.x0 != 0 or page.cropbox.y0 != 0:
|
|
589
|
+
x0 = page.cropbox.x0
|
|
590
|
+
y0 = page.cropbox.y0
|
|
591
|
+
x1 = page.cropbox.x1
|
|
592
|
+
y1 = page.cropbox.y1
|
|
593
|
+
page_box_data["CropBox"] = doc.xref_get_key(page.xref, "CropBox")[1]
|
|
594
|
+
doc.xref_set_key(page.xref, "CropBox", f"[0 0 {x1 - x0} {y1 - x0}]")
|
|
595
|
+
if page_box_data:
|
|
596
|
+
mediabox_data[page.number] = page_box_data
|
|
574
597
|
return mediabox_data
|
|
575
598
|
|
|
576
599
|
|
|
@@ -26,6 +26,7 @@ from pdfminer.pdftypes import resolve1
|
|
|
26
26
|
from pdfminer.pdftypes import stream_value
|
|
27
27
|
from pdfminer.psexceptions import PSEOF
|
|
28
28
|
from pdfminer.psparser import PSKeyword
|
|
29
|
+
from pdfminer.psparser import PSLiteral
|
|
29
30
|
from pdfminer.psparser import keyword_name
|
|
30
31
|
from pdfminer.psparser import literal_name
|
|
31
32
|
from pdfminer.utils import MATRIX_IDENTITY
|
|
@@ -388,6 +389,8 @@ class PDFPageInterpreterEx(PDFPageInterpreter):
|
|
|
388
389
|
if settings.STRICT:
|
|
389
390
|
raise PDFInterpreterError("No font specified!")
|
|
390
391
|
return
|
|
392
|
+
if isinstance(seq, PSLiteral):
|
|
393
|
+
return
|
|
391
394
|
assert self.ncs is not None
|
|
392
395
|
gs = self.graphicstate.copy()
|
|
393
396
|
gs.passthrough_instruction = (
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "BabelDOC"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.28"
|
|
4
4
|
description = "Yet Another Document Translator"
|
|
5
5
|
license = "AGPL-3.0"
|
|
6
6
|
readme = "README.md"
|
|
@@ -43,6 +43,7 @@ dependencies = [
|
|
|
43
43
|
"python-levenshtein>=0.27.1",
|
|
44
44
|
"opencv-python-headless>=4.10.0.84",
|
|
45
45
|
"rapidocr-onnxruntime>=1.4.4",
|
|
46
|
+
"zstd>=1.5.6.7",
|
|
46
47
|
]
|
|
47
48
|
|
|
48
49
|
[project.optional-dependencies]
|
|
@@ -149,7 +150,7 @@ pythonpath = [".", "src"]
|
|
|
149
150
|
testpaths = ["tests"]
|
|
150
151
|
|
|
151
152
|
[bumpver]
|
|
152
|
-
current_version = "0.3.
|
|
153
|
+
current_version = "0.3.28"
|
|
153
154
|
version_pattern = "MAJOR.MINOR.PATCH[.PYTAGNUM]"
|
|
154
155
|
|
|
155
156
|
[bumpver.file_patterns]
|
|
@@ -48,7 +48,7 @@ wheels = [
|
|
|
48
48
|
|
|
49
49
|
[[package]]
|
|
50
50
|
name = "babeldoc"
|
|
51
|
-
version = "0.3.
|
|
51
|
+
version = "0.3.28"
|
|
52
52
|
source = { editable = "." }
|
|
53
53
|
dependencies = [
|
|
54
54
|
{ name = "bitstring" },
|
|
@@ -77,6 +77,7 @@ dependencies = [
|
|
|
77
77
|
{ name = "toml" },
|
|
78
78
|
{ name = "tqdm" },
|
|
79
79
|
{ name = "xsdata", extra = ["cli", "lxml", "soap"] },
|
|
80
|
+
{ name = "zstd" },
|
|
80
81
|
]
|
|
81
82
|
|
|
82
83
|
[package.optional-dependencies]
|
|
@@ -136,6 +137,7 @@ requires-dist = [
|
|
|
136
137
|
{ name = "toml", specifier = ">=0.10.2" },
|
|
137
138
|
{ name = "tqdm", specifier = ">=4.67.1" },
|
|
138
139
|
{ name = "xsdata", extras = ["cli", "lxml", "soap"], specifier = ">=24.12" },
|
|
140
|
+
{ name = "zstd", specifier = ">=1.5.6.7" },
|
|
139
141
|
]
|
|
140
142
|
provides-extras = ["directml", "cuda", "memray"]
|
|
141
143
|
|
|
@@ -2589,3 +2591,43 @@ lxml = [
|
|
|
2589
2591
|
soap = [
|
|
2590
2592
|
{ name = "requests" },
|
|
2591
2593
|
]
|
|
2594
|
+
|
|
2595
|
+
[[package]]
|
|
2596
|
+
name = "zstd"
|
|
2597
|
+
version = "1.5.6.7"
|
|
2598
|
+
source = { registry = "https://pypi.org/simple" }
|
|
2599
|
+
sdist = { url = "https://files.pythonhosted.org/packages/92/a7/5f4c6c2a62dd88f58133e333af1c251dd08f98d48445f650889d85e43b7b/zstd-1.5.6.7.tar.gz", hash = "sha256:b3fa8f6bfb5e116b950ad633edccae4f65055a213ab4c00c1d4397f4b257b697", size = 649577, upload_time = "2025-04-02T18:28:58.514Z" }
|
|
2600
|
+
wheels = [
|
|
2601
|
+
{ url = "https://files.pythonhosted.org/packages/fc/b4/37d54cb46cd3ee1680d8464bd343ca372a58d243ff9132cb65a4042df3a2/zstd-1.5.6.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:60a2b68ac60e25a4587e49017fadb3ba99934e2afc97c2298f31b22a3737c6b0", size = 258038, upload_time = "2025-04-02T19:04:10.292Z" },
|
|
2602
|
+
{ url = "https://files.pythonhosted.org/packages/83/db/94b8aa947015f3a6319fb680125dce8af34f89b3e7e9fb71380895163644/zstd-1.5.6.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e0cc85d3d5b5cb05b21031c71343842c13946126734b71e71a123d35a62dab9", size = 208967, upload_time = "2025-04-02T19:04:12.486Z" },
|
|
2603
|
+
{ url = "https://files.pythonhosted.org/packages/79/c1/d3351559167482d66fb2428269c269d383285a6a8b0f2772146b6e4da683/zstd-1.5.6.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e27301a94f23bd10db3cef6b2c9a3aed08601dc5aff12cd87beb842f17314d1b", size = 1316273, upload_time = "2025-04-02T19:49:22.682Z" },
|
|
2604
|
+
{ url = "https://files.pythonhosted.org/packages/1b/56/69b5ca85462dee8f0fd313efe176b2591867fe42f73c8925babe4b032a01/zstd-1.5.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:4bb87ba5fbffec01feb4d1e29202279ca620f4fd41118977c03d324fb44ce348", size = 1383763, upload_time = "2025-04-02T19:49:15.577Z" },
|
|
2605
|
+
{ url = "https://files.pythonhosted.org/packages/5c/52/51608eabc22b7166201b87759a415ad3c054c0f2f10cbda7e32618f0ea7d/zstd-1.5.6.7-cp310-cp310-manylinux_2_4_i686.whl", hash = "sha256:8fec74516ed95cd3a961f0b2c787d26f394313554d2570807159a19668c63b24", size = 259210, upload_time = "2025-04-02T18:40:36.764Z" },
|
|
2606
|
+
{ url = "https://files.pythonhosted.org/packages/70/e6/36cb79fc7c1b9e0201174628ab43b7636d9d26c8ebccde03241c85ee56ed/zstd-1.5.6.7-cp310-cp310-manylinux_2_4_x86_64.whl", hash = "sha256:e536723b7d4aa9185d57b4b33a18775b6ac5c3d47bf02f6ae8dae7685726c4ff", size = 245247, upload_time = "2025-04-02T18:49:03.325Z" },
|
|
2607
|
+
{ url = "https://files.pythonhosted.org/packages/e2/c2/c8eb0ad5f847b6bc80a556362df732dbbf241cf2ad66cd6015cdb1d92a85/zstd-1.5.6.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:540b0aa080f01e9cc19f8f9d01472968e9a54f0f2a9034adc7ed939e616ab8ae", size = 1328277, upload_time = "2025-04-02T19:49:20.367Z" },
|
|
2608
|
+
{ url = "https://files.pythonhosted.org/packages/ac/d1/6002a07762a17369dd0f9da851d995ad389eeac2db9a7d06eef0d1a727de/zstd-1.5.6.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6b99bedbede3d4f1946137a4710cf40d2ece6495014cbb15e641ba4e15b7a72d", size = 1710317, upload_time = "2025-04-02T19:49:18.495Z" },
|
|
2609
|
+
{ url = "https://files.pythonhosted.org/packages/56/d1/8ec0b0f8a9c6a45a4ba09ae0bf81604a9936c33206444c5a4de9bdd7a31e/zstd-1.5.6.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:76675a75382589120073ed8d5e390c7a62abd66fdbfbeb205dadf065a95f1f29", size = 1652317, upload_time = "2025-04-02T19:49:24.981Z" },
|
|
2610
|
+
{ url = "https://files.pythonhosted.org/packages/41/19/a4c3598fb3b6f65681331dd048b70f69dcb2198aa018c1d7ad4a039e20cb/zstd-1.5.6.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9b5fabd0616ad5b2f7440adf78d9b8f61fa937df152f3e1470096b491ae8c7a7", size = 1725460, upload_time = "2025-04-02T19:49:27.514Z" },
|
|
2611
|
+
{ url = "https://files.pythonhosted.org/packages/63/48/a815134f041282c8f8097fcef7afd27d8ecd37c5611e4179a5f664226577/zstd-1.5.6.7-cp310-cp310-win32.whl", hash = "sha256:24a8af38292c01cb1242d3d0e37bee487c21c1a694aac2556e1ebe05bf7ef840", size = 144805, upload_time = "2025-04-02T19:29:28.22Z" },
|
|
2612
|
+
{ url = "https://files.pythonhosted.org/packages/92/4a/0999127fcde0ccf8dfa63d20ab1e56033258527d0f839b81f325f2f1c11c/zstd-1.5.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:d9a1c02f75de4f9e20ed304bea024a74aea53736e3dc9be547832273a07d0a2b", size = 160065, upload_time = "2025-04-02T19:29:29.474Z" },
|
|
2613
|
+
{ url = "https://files.pythonhosted.org/packages/56/c8/f6469343feb0d95f9966a7fbe127542fc343f9f32a6555cd49d08454e1c4/zstd-1.5.6.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ee151cc25ce718f083f026ec896f40fba86c9bc8815f9cbe65f8590fc81f6e5f", size = 258038, upload_time = "2025-04-02T18:43:47.713Z" },
|
|
2614
|
+
{ url = "https://files.pythonhosted.org/packages/77/c7/e4d9862f20c90154789ab7a5b46999b4ab2f371079833ef0e75c3e224ea0/zstd-1.5.6.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:83f84483bffaa804f1fbf3a4d7504f0c3d804a3bb015938346bda1442f4931dc", size = 208969, upload_time = "2025-04-02T18:43:48.913Z" },
|
|
2615
|
+
{ url = "https://files.pythonhosted.org/packages/15/2b/6429ba768476de3fa6fe7ca873f6743018bdbef14d51abd20c52c2f345f7/zstd-1.5.6.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d3e4fbce0953917972768b0d8bdea59795e9b22fcf7ce730e67a4f072b4330e9", size = 1316228, upload_time = "2025-04-02T19:15:22.841Z" },
|
|
2616
|
+
{ url = "https://files.pythonhosted.org/packages/82/64/4a97003d859be7db0d344be9f891200e91d1023ac99da74660ee6ab093f9/zstd-1.5.6.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a2f3bd6f79e9629561204f9f449eca6a259705442c8b968d187a5a3de461dc5e", size = 1383894, upload_time = "2025-04-02T19:15:33.857Z" },
|
|
2617
|
+
{ url = "https://files.pythonhosted.org/packages/ae/49/58205e8d8bb1696b8437151efd6f3d87387191ec98c25df7da664b79e440/zstd-1.5.6.7-cp311-cp311-manylinux_2_4_i686.whl", hash = "sha256:6272ca99303b7858837e4524b2373080bdafef7b1366852d29245805c8fca9ec", size = 259208, upload_time = "2025-04-02T18:45:32.094Z" },
|
|
2618
|
+
{ url = "https://files.pythonhosted.org/packages/cc/0a/d8883346be117a2ea69519075e9268d36466058d659653583073bcf02b9e/zstd-1.5.6.7-cp311-cp311-manylinux_2_4_x86_64.whl", hash = "sha256:785a7c82f54ad4e300879e5a33bb86e3eb97b0f678ee4fc31e0b5ec14693c5a5", size = 245245, upload_time = "2025-04-02T18:30:00.849Z" },
|
|
2619
|
+
{ url = "https://files.pythonhosted.org/packages/16/56/9c0707a8303cccd93d7edca439de8e2c1f165830d855c86800550fb833c7/zstd-1.5.6.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:5bb52fa9a37159b4a3642da62b429b26ce58993f1dd98006581a7589940b8116", size = 1328423, upload_time = "2025-04-02T19:15:25.759Z" },
|
|
2620
|
+
{ url = "https://files.pythonhosted.org/packages/12/d0/1b35bd9b97f26a6aa8a9dcf5640730a4ff95c1e0c432cc37cea949b0f5ad/zstd-1.5.6.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f1bb169f99b44401eebbe558ff53971cdd93a7f408120ea243bcb53f70cb40ad", size = 1710515, upload_time = "2025-04-02T19:15:27.327Z" },
|
|
2621
|
+
{ url = "https://files.pythonhosted.org/packages/f0/f7/f7dc2465b0561d9c7c6cebe0c7b7b3c2138ecb9760cfa364c9485adaa3f5/zstd-1.5.6.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7682d8183290354e268d27967a383f3c681427288cee2de073c0ed56585838f5", size = 1652458, upload_time = "2025-04-02T19:15:30.879Z" },
|
|
2622
|
+
{ url = "https://files.pythonhosted.org/packages/b3/f3/3a85b68d62b9161f0174a76c7158126ce5f0492c4ffc79ebbcd630312c90/zstd-1.5.6.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:58cf8372acb391813de57a8ef1973aa4679843a21d5e92f3b7f397760be993fa", size = 1725625, upload_time = "2025-04-02T19:15:24.339Z" },
|
|
2623
|
+
{ url = "https://files.pythonhosted.org/packages/d6/24/0842eecdc7f82744cc89088dd088aaa20489350cf1af3a18f93eb5991ddb/zstd-1.5.6.7-cp311-cp311-win32.whl", hash = "sha256:524bf8017ccde72d056251a15154e0e474fcf1568f80cd45ca4845b71483fb83", size = 144806, upload_time = "2025-04-02T19:20:36.567Z" },
|
|
2624
|
+
{ url = "https://files.pythonhosted.org/packages/c8/20/73af4ee27fad89fcd5c28a8ca840f9b2333f05cfc7e9a5a3388e043a9e4a/zstd-1.5.6.7-cp311-cp311-win_amd64.whl", hash = "sha256:2d559b3c8ef94bd313306fdb1cf5d0bf0159e4dbddd02170f84f5f56811d8a21", size = 160063, upload_time = "2025-04-02T19:20:37.789Z" },
|
|
2625
|
+
{ url = "https://files.pythonhosted.org/packages/bd/74/709140155d6e225782f539185b078329a620c9ff47cebff8c83c26678d0b/zstd-1.5.6.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:63be0e292a0b09177595674492387bfde0df7dadad72a8d98d09fc71f40899a1", size = 258010, upload_time = "2025-04-02T18:51:41.933Z" },
|
|
2626
|
+
{ url = "https://files.pythonhosted.org/packages/33/b1/a07f2c7197d0cdc5e4902b369e313c1859bca942a276003c484b6c480cb5/zstd-1.5.6.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b40aa76745b5fbf2217a94369dd1bb017467acd5f1af802ab7d61ee2c3671e59", size = 209113, upload_time = "2025-04-02T18:51:43.427Z" },
|
|
2627
|
+
{ url = "https://files.pythonhosted.org/packages/8f/5c/22af5445f65c684e86a44a166d057bf5ce042ab809998fde52d7a1a12417/zstd-1.5.6.7-cp312-cp312-manylinux_2_4_i686.whl", hash = "sha256:f23f19592f1602932f284d82f9c8e4ff28e0ef384077ab4c2a8d80f888f729d0", size = 259532, upload_time = "2025-04-02T18:39:17.549Z" },
|
|
2628
|
+
{ url = "https://files.pythonhosted.org/packages/65/24/46598527f79eff47fcd860d743fd7a517f1a0db1e017b40fdaf805fee34c/zstd-1.5.6.7-cp312-cp312-win32.whl", hash = "sha256:284df0a2bba3a26eb49388a251822043afc82369c7116b11204826258963a675", size = 144843, upload_time = "2025-04-02T19:18:54.384Z" },
|
|
2629
|
+
{ url = "https://files.pythonhosted.org/packages/5a/6a/9b92db285ef15b51a1e62662672b1ce3c30dbc20aa75c233ca60b1b4d1f4/zstd-1.5.6.7-cp312-cp312-win_amd64.whl", hash = "sha256:ef6d543208ec11891a2655e38b39cecee0f20e85d34cb3a94b98444908e7e844", size = 160084, upload_time = "2025-04-02T19:18:55.523Z" },
|
|
2630
|
+
{ url = "https://files.pythonhosted.org/packages/de/38/f80f5a5ccd1793869a043da59bfb0566dafb35de147b17d9f28e6d2163b0/zstd-1.5.6.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:38044c539b2bc2bbc1a220a1dde5707ba76459aebbb9f90635b053d34fe6d09d", size = 249438, upload_time = "2025-04-02T19:15:28.166Z" },
|
|
2631
|
+
{ url = "https://files.pythonhosted.org/packages/43/fa/b10f7cb4856f7f16914b99f6e02642f20ea025c17aed9abd732bd7829994/zstd-1.5.6.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:61e2fa10380b4b0fc28927ca2ae7fb3adf4fabcb2270f0b5f4c19d5be6af4890", size = 198587, upload_time = "2025-04-02T19:33:59.836Z" },
|
|
2632
|
+
{ url = "https://files.pythonhosted.org/packages/1d/a1/35f8c2f3a718cdf8f1e3318a29f6f691ee5d83bfe4df38c8b112649acd82/zstd-1.5.6.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:95d1abeb4e68f82dd591c2cdd6658ec120521c0a1433643f5b209f2d0d27fa58", size = 160136, upload_time = "2025-04-02T19:08:44.184Z" },
|
|
2633
|
+
]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.3.26"
|
|
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.26 → babeldoc-0.3.28}/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
|
{babeldoc-0.3.26 → babeldoc-0.3.28}/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
|
{babeldoc-0.3.26 → babeldoc-0.3.28}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{babeldoc-0.3.26 → babeldoc-0.3.28}/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.26 → babeldoc-0.3.28}/docs/images/babeldoc-big-logo-with-transparent-background.png
RENAMED
|
File without changes
|
{babeldoc-0.3.26 → babeldoc-0.3.28}/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.26 → babeldoc-0.3.28}/docs/images/babeldoc-small-logo-with-transparent-background.png
RENAMED
|
File without changes
|
{babeldoc-0.3.26 → babeldoc-0.3.28}/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
|