7个版本
0.3.0 | 2024年7月8日 |
---|---|
0.2.1 | 2024年5月28日 |
0.1.3 | 2022年9月8日 |
0.1.0 | 2021年11月17日 |
在 解析器实现 中排名 234
每月下载量 261
在 3 crate 中使用
83KB
2K SLoC
dot-parser
此crate提供dot文件(也称为Graphviz)的解析器,实现紧密遵循Graphviz给出的正式语法。此外,我们提供转换函数(即列表的等价物 flat_map
),以操作图,以及图的规范表示,它将子图展平,并用简单的边语句替换具有多个右侧的边语句。
用法
在 Cargo.toml
中
dot-parser = "*"
在你的Rust源文件中(根据你的需求进行修改)
use dot_parser::*;
然后,可以使用 dot_parser::ast::Graph
的 from_file
方法解析文件。如果打开和读取文件存在问题,或者文件内容不是有效的Graphviz图,则解析文件可能会失败。
fn main() {
let res = ast::Graph::from_file("/path/to/graph.dot");
match res {
Ok(graph) =>
println!("{:#?}", graph),
Err(e) =>
println!("{}", e),
}
}
处理 dot_parser::ast::Graph
不太方便,因为其表示紧密遵循Graphviz语法。例如,我们必须考虑子图或属性列表的列表等。相反,使用 dot_parser::canonical::Graph
更容易。
fn main() {
let res = ast::Graph::from_file("/path/to/graph.dot").unwrap();
let canonical = canonical::Graph::from(res);
println!("{:#?}", canonical);
}
功能
输出dot图
使用 display
功能,规范图可以显示(遵循Graphviz语法),只要属性的类型实现了 Display
。
fn main() {
let res = ast::Graph::from_file("/path/to/graph.dot").unwrap();
let canonical = canonical::Graph::from(res).filter_map::<_, String>(&|_| None);
println!("{}", canonical);
}
Petgraph 兼容性
使用 petgraph
功能,可以将规范图转换为Petgraph的图。
fn main() {
let res = ast::Graph::from_file("/path/to/graph.dot").unwrap();
let canonical = canonical::Graph::from(res);
let petgraph: petgraph::graph::Graph<_, _> = canonical.into();
println!("{:#?}", canonical);
}
编译时导入
可以使用 dot_parser_macros
crate 在编译时导入图。宏 from_dot_file!
允许从文件静态导入图,而 from_dot_string!
允许您直接在Rust源文件中写入图。
use dot_parser_macros::*;
use dot_parser::ast::Graph;
fn main() {
let graph = from_dot_file!("/tmp/graph.dot");
println!("{:#?}", graph);
}
限制
- 官方上,任何XML字符串都可以用作ID,任何HTML字符串都可以用作标签。目前这还没有正确实现。
- 官方上,以'#'开头的行被认为是预处理器的输出,会被忽略。目前还没有实现。
致谢
这个crate是由Martin Vassor编写的,他是牛津大学移动阅读小组的成员,曾就职于伦敦帝国理工学院。
本工作的初始开发(直到v0.1.3)得到了EPSRC资助,资助编号为EP/T006544/1、EP/K011715/1、EP/K034413/1、EP/L00058X/1、EP/N027833/1、EP/N028201/1、EP/T014709/1、EP/V000462/1以及NCSS/EPSRC VeTSS。
依赖项
~2.1–3.5MB
~63K SLoC