| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import re
- def extract_mermaid(text: str) -> str:
- if not text:
- return ""
- fenced = re.findall(r"```(?:mermaid)?\s*([\s\S]*?)```", text, flags=re.IGNORECASE)
- if fenced:
- return fenced[0].strip()
- return text.strip()
- def extract_optimized_text(text: str) -> str:
- if not text:
- return ""
- marker_start = "【优化后规范描述】"
- marker_start_alt = "【优化后描述】"
- marker_code = "【Mermaid 流程图代码】"
- if marker_start in text and marker_code in text:
- return text.split(marker_start, 1)[1].split(marker_code, 1)[0].strip()
- if marker_start_alt in text and marker_code in text:
- return text.split(marker_start_alt, 1)[1].split(marker_code, 1)[0].strip()
- fenced_removed = re.sub(r"```(?:mermaid)?[\s\S]*?```", "", text, flags=re.IGNORECASE).strip()
- fenced_removed = fenced_removed.replace(marker_start, "").replace(marker_start_alt, "").strip()
- fenced_removed = fenced_removed.replace(marker_code, "").strip()
- return fenced_removed
- def prune_complexity(code: str, mode: str) -> str:
- if mode == "standard":
- return code
- lines = [ln.rstrip() for ln in code.splitlines() if ln.strip()]
- if not lines:
- return code
- head = lines[0]
- body = lines[1:]
- max_lines = 12 if mode == "standard" else 11
- if len(body) > max_lines:
- body = body[:max_lines]
- return "\n".join([head] + body)
- def apply_direction(code: str, direction: str) -> str:
- normalized = "LR" if str(direction).upper() == "LR" else "TD"
- if not code:
- return code
- lines = code.splitlines()
- if not lines:
- return code
- first_idx = None
- for idx, line in enumerate(lines):
- if line.strip():
- first_idx = idx
- break
- if first_idx is None:
- return code
- first_line = lines[first_idx].strip()
- if re.match(r"^(flowchart|graph)\s+(TD|LR|TB|BT|RL)\b", first_line, flags=re.IGNORECASE):
- lines[first_idx] = re.sub(
- r"^(flowchart|graph)\s+(TD|LR|TB|BT|RL)\b",
- rf"\1 {normalized}",
- lines[first_idx],
- flags=re.IGNORECASE,
- )
- return "\n".join(lines)
- if re.match(r"^(flowchart|graph)\b", first_line, flags=re.IGNORECASE):
- lines[first_idx] = re.sub(
- r"^(flowchart|graph)\b",
- rf"\1 {normalized}",
- lines[first_idx],
- flags=re.IGNORECASE,
- )
- return "\n".join(lines)
- return f"flowchart {normalized}\n{code}"
|