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(" ") &y
x/y==x& line() &y
x*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));
}