Initial upload: TermDiagram v0.1.0
Some checks failed
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled

This commit is contained in:
2026-01-29 22:28:01 +00:00
parent 4a0f030d13
commit c3ee31cb51

View File

@@ -0,0 +1,49 @@
from typing import List, Optional
from ..models import Module
class SvgDiagramGenerator:
def generate(self, modules: List[Module]) -> Optional[str]:
try:
import pygraphviz as pgv
except ImportError:
return None
graph = pgv.AGraph(directed=True, strict=False)
graph.graph_attr["rankdir"] = "TB"
for module in modules:
for cls in module.classes:
graph.add_node(cls.name, shape="box", label=cls.name)
return graph.to_string()
def generate_dot(self, modules: List[Module]) -> str:
lines = ["digraph architecture {"]
lines.append(" rankdir=TB;")
lines.append(" node [shape=box];")
lines.append("")
for module in modules:
for cls in module.classes:
for base in cls.bases:
lines.append(f" {base} -> {cls.name};")
lines.append("}")
return "\n".join(lines)
def save_svg(self, modules: List[Module], output_path: str):
try:
import pygraphviz as pgv
except ImportError:
return
graph = pgv.AGraph(directed=True, strict=False)
graph.graph_attr["rankdir"] = "TB"
for module in modules:
for cls in module.classes:
graph.add_node(cls.name, shape="box", label=cls.name)
graph.layout(prog="dot")
graph.draw(output_path)