#graph-node #language #edge #generate #file #api #generation

dot_graph

用于生成 Graphviz DOT 语言文件的库

5 个版本

0.2.3 2022年5月24日
0.2.2 2022年5月18日
0.2.1 2022年5月18日
0.2.0 2022年5月16日
0.1.0 2022年5月15日

#127 in 可视化

Download history 23/week @ 2024-03-11 27/week @ 2024-03-18 10/week @ 2024-03-25 41/week @ 2024-04-01 38/week @ 2024-04-08 21/week @ 2024-04-15 24/week @ 2024-04-22 44/week @ 2024-04-29 41/week @ 2024-05-06 45/week @ 2024-05-13 68/week @ 2024-05-20 64/week @ 2024-05-27 55/week @ 2024-06-03 41/week @ 2024-06-10 48/week @ 2024-06-17 40/week @ 2024-06-24

192 每月下载次数
用于 3 crates

MIT/Apache

31KB
616

dot_graph

用于生成 Graphviz DOT 语言文件的库。代码是从 dot-rust 分支出来的,并提供了新的 API 以便更易于使用。

License License: MIT

使用方法

DOT 文件的三个基本部分,在库中分别是 GraphNodeEdge。其中 Graph 是库的入口点。你可以通过简单的使用来生成一个空的 .dot 文件:

use dot_graph::{Graph, Kind};

let graph = Graph::new("empty_graph", Kind::Digraph);

let dot_string = graph.to_dot_string().unwrap();

assert_eq!(dot_string,
   r#"digraph empty_graph {
}
//!"#);

为了添加一些基本的节点和边

use dot_graph::{Graph, Kind, Node, Edge};

let mut graph = Graph::new("single_edge", Kind::Digraph);

graph.add_node(Node::new("N0"));
graph.add_node(Node::new("N1"));
graph.add_edge(Edge::new("N0", "N1", "E"));

let dot_string = graph.to_dot_string().unwrap();

assert_eq!(dot_string,
r#"digraph single_edge {
    "N0"[label="N0"];
    "N1"[label="N1"];
    "N0" -> "N1"[label="E"];
}
"#);

如果你还想添加一些其他属性,如样式、箭头、颜色,你可以按链式调用这些方法,例如

use dot_graph::{Graph, Kind, Node, Edge, Style};

let mut graph = Graph::new("single_edge", Kind::Digraph);

graph.add_node(Node::new("N0"));
graph.add_node(Node::new("N1"));
graph.add_edge(Edge::new("N0", "N1", "E").style(Style::Bold).color(Some("red")));

assert_eq!(graph.to_dot_string().unwrap(),
r#"digraph single_edge {
    "N0"[label="N0"];
    "N1"[label="N1"];
    "N0" -> "N1"[label="E"][style="bold"][color="red"];
}
"#);

从版本 0.2.1 开始,dot_graph 支持子图生成,例如

#[test]
fn test_subgraph() {
    let mut graph = Graph::new("di", Kind::Digraph);
    let mut c1 = Subgraph::new("cluster_0").label("");
    c1.add_node(Node::new("N0"));
    c1.add_node(Node::new("N1"));
    let mut c2 = Subgraph::new("cluster_1").label("");
    c2.add_node(Node::new("N2"));
    c2.add_node(Node::new("N3"));
    graph.add_subgraph(c1);
    graph.add_subgraph(c2);
    graph.add_edge(Edge::new("N0", "N1", ""));
    graph.add_edge(Edge::new("N0", "N2", ""));
    graph.add_edge(Edge::new("N1", "N3", ""));
    graph.add_edge(Edge::new("N2", "N3", ""));
    

    assert_eq!(graph.to_dot_string().unwrap(),
r#"digraph di {
subgraph cluster_0 {
    label="";
    "N0"[label="N0"];
    "N1"[label="N1"];
}
subgraph cluster_1 {
    label="";
    "N2"[label="N2"];
    "N3"[label="N3"];
}
"N0" -> "N1"[label=""];
"N0" -> "N2"[label=""];
"N1" -> "N3"[label=""];
"N2" -> "N3"[label=""];
}
"#);
}

更多示例,请查看测试。

该库正在积极开发中,我们将在未来包含更多的 dot 属性。

路线图(待办事项列表)

  • 支持子图

贡献

  • 欢迎所有形式的贡献。请根据需要创建问题/PR。
  • 我们相信 TDD(测试驱动开发)方法不仅有助于开发,也有助于彼此之间的沟通。因此,添加更多的测试可能是报告错误或甚至建议新功能的好方法。

许可证

dot_graph 主要根据 MIT 许可证和 Apache 许可证(版本 2.0)的条款进行分发。

有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT。

rudg:Rust UML 图生成器。一个从 Rust 源代码生成 UML 图的库。

无运行时依赖