| 21 | |
| 22 | |
| 23 | def clean_text(text: str) -> str: |
| 24 | lines = text.splitlines() |
| 25 | out: list[str] = [] |
| 26 | in_fence = False |
| 27 | fence_lang = "" |
| 28 | fence_lines: list[str] = [] |
| 29 | |
| 30 | def flush_fence() -> None: |
| 31 | nonlocal fence_lines |
| 32 | if fence_lang in TRANSLATABLE_FENCES and any(re.search(r"[\u4e00-\u9fff]", line) for line in fence_lines): |
| 33 | translated = translate_text("\n".join(fence_lines)) |
| 34 | out.extend(translated.splitlines()) |
| 35 | else: |
| 36 | out.extend(fence_lines) |
| 37 | fence_lines = [] |
| 38 | |
| 39 | for line in lines: |
| 40 | fence_match = re.match(r"^(```|~~~)\s*([A-Za-z0-9_-]*)", line) |
| 41 | if fence_match: |
| 42 | if in_fence: |
| 43 | flush_fence() |
| 44 | out.append(line) |
| 45 | in_fence = False |
| 46 | fence_lang = "" |
| 47 | else: |
| 48 | out.append(line) |
| 49 | in_fence = True |
| 50 | fence_lang = fence_match.group(2).lower() |
| 51 | continue |
| 52 | |
| 53 | if in_fence: |
| 54 | fence_lines.append(line) |
| 55 | continue |
| 56 | |
| 57 | cleaned = re.sub(r"^(\s*)::\s+", r"\1- ", line) |
| 58 | cleaned = re.sub(r"\s+\*\*$", "**", cleaned) |
| 59 | cleaned = cleaned.replace("Cordex", "Codex") |
| 60 | out.append(cleaned) |
| 61 | |
| 62 | if in_fence: |
| 63 | flush_fence() |
| 64 | |
| 65 | return "\n".join(out).rstrip() + "\n" |
| 66 | |
| 67 | |
| 68 | def main() -> None: |