#ansi-term #ansi #parser #terminal #no-std

no-std cansi

分类 ANSI - ANSI 转义码解析器与分类器

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解析器实现

Download history 516/week @ 2024-03-14 581/week @ 2024-03-21 665/week @ 2024-03-28 592/week @ 2024-04-04 586/week @ 2024-04-11 610/week @ 2024-04-18 562/week @ 2024-04-25 501/week @ 2024-05-02 488/week @ 2024-05-09 575/week @ 2024-05-16 573/week @ 2024-05-23 510/week @ 2024-05-30 1717/week @ 2024-06-06 2355/week @ 2024-06-13 2740/week @ 2024-06-20 3215/week @ 2024-06-27

10,100 每月下载量
8 crate(直接使用3个)中使用

MIT 许可证

54KB
1K SLoC

Build Status Latest Version Rust Documentation codecov

分类 ANSI - ANSI 转义码解析器与分类器

查看 rs 文档。github 上查看进度并贡献。

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"] }

无运行时依赖