See the rs docs. Look at progress and contribute on github.
cansi will parse text with ANSI escape sequences in it and return a deconstructed
text with metadata around the colouring and styling. cansi is only concerned
with CSI sequences, particuarly the SGR parameters. cansi will not construct
escaped text, there are crates such as colored
that do a great job of colouring and styling text.
This example was done using the
coloredcrate to help with constructing the escaped text string. It will work with other tools that inject escape sequences into text strings (given they follow ANSI specification).
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
}
);This crate can use alloc in place of the standard library for no_std targets.
The standard library is enabled by default, so disabling default features and enabling the
alloc feature is required to use the crate this way.
[dependencies]
cansi = { version = "2.1.0", default-features = false, features = ["alloc"] }