From c3ee31cb514900d07863ce07c0524217c0acd136 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Thu, 29 Jan 2026 22:28:01 +0000 Subject: [PATCH] Initial upload: TermDiagram v0.1.0 --- src/termdiagram/generators/svg_generator.py | 49 +++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/termdiagram/generators/svg_generator.py diff --git a/src/termdiagram/generators/svg_generator.py b/src/termdiagram/generators/svg_generator.py new file mode 100644 index 0000000..ff87acd --- /dev/null +++ b/src/termdiagram/generators/svg_generator.py @@ -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)