| 12345678910111213141516171819202122232425262728293031323334 |
- from typing import List
- class PlanConverter:
- @staticmethod
- def _sanitize_lines(text: str) -> List[str]:
- raw_lines = [line.strip() for line in text.splitlines()]
- lines = [line for line in raw_lines if line]
- return lines
- @staticmethod
- def to_mermaid(text: str, direction: str = "TD") -> str:
- lines = PlanConverter._sanitize_lines(text)
- if not lines:
- return f"flowchart {direction}\n A[空计划]"
- # 支持单行 "A -> B -> C" 快捷输入
- if len(lines) == 1 and "->" in lines[0]:
- segments = [seg.strip() for seg in lines[0].split("->") if seg.strip()]
- lines = segments
- nodes = []
- edges = []
- for idx, label in enumerate(lines):
- node_id = f"N{idx + 1}"
- safe_label = label.replace('"', "'")
- nodes.append(f" {node_id}[\"{safe_label}\"]")
- if idx > 0:
- prev_id = f"N{idx}"
- edges.append(f" {prev_id} --> {node_id}")
- body = "\n".join(nodes + edges)
- return f"flowchart {direction}\n{body}"
|