1个不稳定版本
0.9.0 | 2024年3月4日 |
---|
#2268在解析器实现
26KB
658 行
ANSI转义序列解析器
有关实现的完整序列列表,请参阅文档。
这是通过一个下拉类型解析器完成的,其中公开了一个迭代器。这本质上将所有的ANSI序列转换为枚举,并在有ANSI序列的每个位置分割字符串。
示例
use ansi_parser::{Output, AnsiParser};
use ansi_parser::AnsiSequence;
fn main() {
//Parse the first two blocks in the list
//By parsing it this way, it allows you to iterate over the
//elements returned.
//
//The parser only every holds a reference to the data,
//so there is no allocation.
let parsed: Vec<Output> = "This is \u{1b}[3Asome text!"
.ansi_parse()
.take(2)
.collect();
assert_eq!(
vec![
Output::TextBlock("This is "),
Output::Escape(AnsiSequence::CursorUp(3))
],
parsed
);
for block in parsed.into_iter() {
match block {
Output::TextBlock(text) => println!("{}", text),
Output::Escape(seq) => println!("{}", seq)
}
}
}
no_std
支持
no_std
通过在您的 Cargo.toml
中禁用 std
功能来支持。
注意
在主要单元版本更新之前,请在crate中以 hwatch-ansi-parser
注册。
依赖关系
~1.5MB
~34K SLoC