#ansi #parser #escaping #sequence #iterator #implemented #enums

无std hwatch-ansi-parser

使用nom解析ANSI转义码的库

1个不稳定版本

0.9.0 2024年3月4日

#2268解析器实现

MPL-2.0 许可证

26KB
658

pipeline status docs deps license downloads

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