yog/io/dot
Types
Options for customizing DOT (Graphviz) diagram rendering.
pub type DotOptions {
DotOptions(
node_label: fn(Int, String) -> String,
edge_label: fn(String) -> String,
highlighted_nodes: option.Option(List(Int)),
highlighted_edges: option.Option(List(#(Int, Int))),
node_shape: String,
highlight_color: String,
)
}
Constructors
-
DotOptions( node_label: fn(Int, String) -> String, edge_label: fn(String) -> String, highlighted_nodes: option.Option(List(Int)), highlighted_edges: option.Option(List(#(Int, Int))), node_shape: String, highlight_color: String, )Arguments
- node_label
-
Function to convert node ID and data to a display label
- edge_label
-
Function to convert edge weight to a display label
- highlighted_nodes
-
Optional list of node IDs to highlight
- highlighted_edges
-
Optional list of edges to highlight as (from, to) pairs
- node_shape
-
Node shape (e.g., “circle”, “box”, “ellipse”)
- highlight_color
-
Highlight color for nodes/edges
Values
pub fn default_dot_options() -> DotOptions
Creates default DOT options with simple labeling.
pub fn path_to_dot_options(
path: utils.Path(e),
base_options: DotOptions,
) -> DotOptions
Converts a shortest path result to highlighted DOT options.
Example
let path = pathfinding.shortest_path(
in: graph,
from: 1,
to: 5,
with_zero: "0",
with_add: string_add, // Assume these exist or map to int/float
with_compare: string_compare,
)
case path {
Some(p) -> {
let options = dot.path_to_dot_options(p, default_dot_options())
let diagram = dot.to_dot(graph, options)
io.println(diagram)
}
None -> io.println("No path found")
}
pub fn to_dot(
graph: model.Graph(String, String),
options: DotOptions,
) -> String
Converts a graph to DOT (Graphviz) syntax.
The graph’s node data and edge data must be convertible to strings. Use the options to customize labels and highlighting.
Time Complexity: O(V + E)
Example
let graph =
model.new(Directed)
|> model.add_node(1, "Start")
|> model.add_node(2, "Process")
|> model.add_edge(from: 1, to: 2, with: "5")
let diagram = dot.to_dot(graph, default_dot_options())
// io.println(diagram)
This output can be processed by Graphviz tools (e.g., dot -Tpng -o graph.png):
digraph G {
node [shape=ellipse];
1 [label="Start"];
2 [label="Process"];
1 -> 2 [label="5"];
}