3 个版本
| 0.2.2 | 2022年8月12日 |
|---|---|
| 0.2.1 | 2022年8月11日 |
| 0.2.0 | 2022年8月11日 |
#292 in 值格式化
14KB
222 行
notugly
一个简单且通用的美化打印库,高度基于 A prettier printer。
如何使用
为了为类型定义美化打印,使用各种实用函数实现 Format 特性
nil用于空元素text创建一个字符串到文档中nest缩进文档cat连接两个文档group和group_with将扁平布局作为替代方案添加。fold、spread、stack和fill以各种方式折叠文档列表
为了更容易定义结构,定义了一些运算符
x&y== cat(x,y)x+y==x& text(" ") &yx/y==x& line() &yx*y==x& group(line) &y
请参阅 examples/ 目录中的完整功能示例。
示例:S-表达式
use notugly::*;
enum SExpr {
Number(i32),
Call(String, Vec<SExpr>),
}
impl Format for SExpr {
fn format(&self) -> Document {
match self {
SExpr::Number(n) => text(format!("{n}")),
SExpr::Call(name, v) => group_with(
"",
group(text("(") & text(name) & nest(2, line() & stack(v))) / text(")"),
),
}
}
}
fn main() {
let big_eq = sexpr!(add (mul 2 6) (div (mul 4 (mul 3 2 1)) (add 1 (sub 3 (add 1 1)))));
println!("{}", big_eq.pretty(40));
}