plan_converter.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. from typing import List
  2. class PlanConverter:
  3. @staticmethod
  4. def _sanitize_lines(text: str) -> List[str]:
  5. raw_lines = [line.strip() for line in text.splitlines()]
  6. lines = [line for line in raw_lines if line]
  7. return lines
  8. @staticmethod
  9. def to_mermaid(text: str, direction: str = "TD") -> str:
  10. lines = PlanConverter._sanitize_lines(text)
  11. if not lines:
  12. return f"flowchart {direction}\n A[空计划]"
  13. # 支持单行 "A -> B -> C" 快捷输入
  14. if len(lines) == 1 and "->" in lines[0]:
  15. segments = [seg.strip() for seg in lines[0].split("->") if seg.strip()]
  16. lines = segments
  17. nodes = []
  18. edges = []
  19. for idx, label in enumerate(lines):
  20. node_id = f"N{idx + 1}"
  21. safe_label = label.replace('"', "'")
  22. nodes.append(f" {node_id}[\"{safe_label}\"]")
  23. if idx > 0:
  24. prev_id = f"N{idx}"
  25. edges.append(f" {prev_id} --> {node_id}")
  26. body = "\n".join(nodes + edges)
  27. return f"flowchart {direction}\n{body}"