diff --git a/src/termdiagram/generators/mermaid_generator.py b/src/termdiagram/generators/mermaid_generator.py new file mode 100644 index 0000000..7936a72 --- /dev/null +++ b/src/termdiagram/generators/mermaid_generator.py @@ -0,0 +1,34 @@ +from typing import List +from ..models import Module, ClassSymbol + + +class MermaidDiagramGenerator: + def generate_class_diagram(self, modules: List[Module]) -> str: + lines = ["classDiagram"] + lines.append(" direction TB") + lines.append("") + + for module in modules: + for cls in module.classes: + self._render_class(lines, cls) + lines.append("") + + for module in modules: + for cls in module.classes: + self._render_relationships(lines, cls) + + return "\n".join(lines) + + def _render_class(self, lines: List[str], cls: ClassSymbol): + class_def = f" class {cls.name} {{" + lines.append(class_def) + + for method in cls.methods: + sig = f"({', '.join(method.params)})":"" + lines.append(f" +{method.name}{sig}") + + lines.append(" }") + + def _render_relationships(self, lines: List[str], cls: ClassSymbol): + for base in cls.bases: + lines.append(f" {base} <|-- {cls.name}")