
Add `std` default feature Only implement for String if `std` is enabled Replace std Vec with heapless
53 lines
1.8 KiB
Markdown
53 lines
1.8 KiB
Markdown
[](https://gitlab.com/davidbittner/ansi-parser/pipelines?ref=master)
|
|
[](https://docs.rs/ansi-parser/)
|
|
[](https://gitlab.com/davidbittner/ansi-parser/blob/master/Cargo.toml)
|
|
[](https://www.mozilla.org/en-US/MPL/2.0/)
|
|
[]()
|
|
|
|
# Ansi Escape Sequence Parser
|
|
|
|
For a complete list of implemented sequences, see the [documentation](https://docs.rs/ansi-parser).
|
|
|
|
This is done through a pulldown type parser, where an iterator is exposed. This essentially
|
|
turns all of the ANSI sequences into enums and splits the string at every location that there
|
|
was an ANSI Sequence.
|
|
|
|
Example:
|
|
|
|
```rust
|
|
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` support
|
|
|
|
`no_std` is supported via disabling the `std` feature in your `Cargo.toml`.
|