8 个稳定版本
2.2.1 | 2022年11月3日 |
---|---|
2.2.0 | 2022年7月28日 |
2.1.1 | 2020年8月20日 |
2.1.0 | 2019年8月23日 |
1.0.0 | 2018年12月31日 |
#608 在 解析器实现 中
10,100 每月下载量
在 8 个 crate(直接使用3个)中使用
54KB
1K SLoC
分类 ANSI - ANSI 转义码解析器与分类器
cansi
将解析包含 ANSI 转义序列的文本,并返回一个带有颜色和样式元数据的拆解文本。 cansi
只关注 CSI
序列,特别是 SGR
参数。 cansi
不会构造转义文本,有一些 crate,如 colored
,可以很好地进行文本着色和样式设置。
示例用法
此示例使用了
colored
crate 来帮助构造转义文本字符串。它可以与其他将转义序列注入文本字符串的工具一起工作(假设它们遵循 ANSI 规范)。
extern crate cansi;
extern crate colored;
use cansi::*;
use colored::Colorize;
use std::io::Write;
let v = &mut Vec::new();
write!(
v,
"Hello, {}{}{}{}{}{}",
"w".white().on_red(),
"o".cyan().on_green(),
"r".magenta().on_yellow(),
"l".blue().on_white(),
"d".yellow().on_bright_cyan(),
"!".bright_red().on_bright_yellow(),
)
.unwrap();
let text = String::from_utf8_lossy(&v);
let result = categorise_text(&text); // cansi function
assert_eq!(result.len(), 7); // there should be seven differently styled components
assert_eq!("Hello, world!", &construct_text_no_codes(&result));
// 'Hello, ' is just defaults
assert_eq!(
result[0],
CategorisedSlice {
text: "Hello, ",
start: 0,
end: 7,
fg_colour: Color::White,
bg_colour: Color::Black,
intensity: Intensity::Normal,
italic: false,
underline: false,
blink: false,
reversed: false,
hidden: false,
strikethrough: false
}
);
// 'w' is coloured differently
assert_eq!(
result[1],
CategorisedSlice {
text: "w",
start: 15,
end: 16,
fg_colour: Color::White,
bg_colour: Color::Red,
intensity: Intensity::Normal,
italic: false,
underline: false,
blink: false,
reversed: false,
hidden: false,
strikethrough: false
}
);
针对 no_std
此 crate 可以使用 alloc
来替代标准库进行 no_std 目标。默认情况下启用标准库,因此需要禁用默认特性并启用 alloc
特性才能以这种方式使用 crate。
[dependencies]
cansi = { version = "2.1.0", default-features = false, features = ["alloc"] }