egui_sgr 0.3.0

A Rust library that converts ASCII/ANSI escape sequence color models into colored text in egui
Documentation
use egui_sgr::{
    AnsiColor, AnsiSpanBuffer, AnsiStreamParser, EguiAnsiTheme, ansi_to_layout_job, ansi_to_spans,
    spans_to_layout_job,
};

#[test]
fn public_layout_job_flow() {
    let theme = EguiAnsiTheme::default();
    let spans = ansi_to_spans("plain \x1b[38;5;208morange\x1b[0m");
    let job = spans_to_layout_job(&spans, &theme);

    assert_eq!(job.text, "plain orange");
    assert_eq!(job.sections[1].format.color, theme.palette[208]);
    assert_eq!(
        job,
        ansi_to_layout_job("plain \x1b[38;5;208morange\x1b[0m", &theme)
    );
}

#[test]
fn public_stream_parser_flow() {
    let mut parser = AnsiStreamParser::new();

    assert!(parser.push_bytes(b"\x1b[31").is_empty());
    let spans = parser.push_bytes(b"mred");

    assert_eq!(spans.len(), 1);
    assert_eq!(spans[0].text, "red");
    assert_eq!(spans[0].style.foreground, AnsiColor::Indexed(1));
    assert_eq!(parser.current_style().foreground, AnsiColor::Indexed(1));
}

#[test]
fn public_span_buffer_flow() {
    let theme = EguiAnsiTheme::default();
    let mut buffer = AnsiSpanBuffer::new();

    buffer.push_str("\x1b[32mgreen ");
    buffer.push_str("text\x1b[0m");
    buffer.finish();

    assert_eq!(buffer.spans().len(), 1);
    assert_eq!(buffer.to_layout_job(&theme).text, "green text");
}