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 可视化
192 每月下载次数
用于 3 crates
31KB
616 行
dot_graph
用于生成 Graphviz DOT 语言文件的库。代码是从 dot-rust 分支出来的,并提供了新的 API 以便更易于使用。
使用方法
DOT 文件的三个基本部分,在库中分别是 Graph
、Node
和 Edge
。其中 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 图的库。