Files
docutranslate/filetranslate/decorator/markdown_mask.py
2025-05-08 14:28:15 +08:00

32 lines
1.0 KiB
Python

from functools import wraps
from typing import Concatenate, ParamSpec, Callable
import re
from filetranslate.utils.markdown_utils import MaskDict
P=ParamSpec("P")
def mask_uris_temp(func:Callable[Concatenate[str, P], str]) -> Callable[Concatenate[str, P], str]:
@wraps(func)
def wrapper(markdown: str, *args: P.args, **kwargs: P.kwargs) -> str:
mask_dict=MaskDict()
def uri2placeholder(match:re.Match):
id=mask_dict.create_id()
mask_dict.set(id,match.group())
return f"<ph-{id}>"
def placeholder2uri(match:re.Match):
id=match.group(1)
uri=mask_dict.get(id)
if uri is None:
return match.group()
return uri
uri_pattern=r'!?\[.*?\]\(.*?\)'
markdown=re.sub(uri_pattern,uri2placeholder,markdown)
result=func(markdown, *args, **kwargs)
ph_pattern=r"<ph-([a-zA-Z0-9]+)>"
result=re.sub(ph_pattern,placeholder2uri,result)
return result
return wrapper
if __name__ == '__main__':
pass