PeacebinfLow commited on
Commit
e6712c1
·
verified ·
1 Parent(s): 7bfb308

Create mermaid_renderer.py

Browse files
Files changed (1) hide show
  1. flows_04/mermaid_renderer.py +43 -0
flows_04/mermaid_renderer.py ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from .graph_models import FlowGraph
2
+
3
+
4
+ def build_mermaid(flow: FlowGraph) -> str:
5
+ """
6
+ Build a Mermaid graph string from a FlowGraph.
7
+
8
+ - Nodes become: id[Label]
9
+ - Edges become: source -->|label| target
10
+ - Node styles: style id <style>
11
+ - Edge styles: linkStyle <index> <style>
12
+ """
13
+ lines = ["graph TD"]
14
+
15
+ # Nodes
16
+ for node in flow.nodes:
17
+ safe_label = node.label or node.id
18
+ lines.append(f" {node.id}[{safe_label}]")
19
+
20
+ # Edges (keep index for linkStyle)
21
+ edge_styles = []
22
+ for idx, edge in enumerate(flow.edges):
23
+ if edge.label:
24
+ lines.append(f" {edge.source} -->|{edge.label}| {edge.target}")
25
+ else:
26
+ lines.append(f" {edge.source} --> {edge.target}")
27
+
28
+ style = edge.metadata.get("style") if edge.metadata else None
29
+ if style:
30
+ edge_styles.append((idx, style))
31
+
32
+ # Node styles
33
+ for node in flow.nodes:
34
+ style = node.metadata.get("style") if node.metadata else None
35
+ if style:
36
+ lines.append(f" style {node.id} {style}")
37
+
38
+ # Edge styles (Mermaid linkStyle uses numeric index)
39
+ for idx, style in edge_styles:
40
+ lines.append(f" linkStyle {idx} {style}")
41
+
42
+ mermaid = "```mermaid\n" + "\n".join(lines) + "\n```"
43
+ return mermaid