18 个版本

0.9.1 2024年5月19日
0.8.0 2021年4月25日
0.7.0 2020年10月5日
0.6.5 2019年5月10日

#214解析器实现

Download history 785/week @ 2024-04-28 820/week @ 2024-05-05 1120/week @ 2024-05-12 1215/week @ 2024-05-19 1285/week @ 2024-05-26 1372/week @ 2024-06-02 994/week @ 2024-06-09 1231/week @ 2024-06-16 1476/week @ 2024-06-23 1234/week @ 2024-06-30 1074/week @ 2024-07-07 958/week @ 2024-07-14 1270/week @ 2024-07-21 1539/week @ 2024-07-28 1166/week @ 2024-08-04 1042/week @ 2024-08-11

5,174 每月下载量
用于 19 个 crate (13 个直接使用)

MPL-2.0 许可证

26KB
588 代码行

pipeline status docs deps license downloads

Ansii 转义序列解析器

有关实现序列的完整列表,请参阅 文档

这是通过下拉类型解析器完成的,其中公开了迭代器。这本质上将所有 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 功能来支持。

依赖项

~1.5MB
~28K SLoC