Trait TerminalParser

Source
pub trait TerminalParser {
    // Required method
    fn advance(&mut self, state: &mut TerminalState, bytes: &[u8]);
}
Expand description

Incrementally applies terminal-process bytes to mutable terminal state.

Implementations retain parsing state across calls so callers may split UTF-8 and escape sequences at arbitrary byte boundaries. The operation has no return value; implementations report recoverable protocol issues through the supplied state, typically as warnings.

§Examples

use ailloli_ui_terminal_core::{TerminalParser, TerminalState, VteTerminalParser};

fn feed(parser: &mut impl TerminalParser, state: &mut TerminalState, bytes: &[u8]) {
    parser.advance(state, bytes);
}

let mut parser = VteTerminalParser::new();
let mut state = TerminalState::new();
feed(&mut parser, &mut state, b"hello");
assert!(state.screen.lines[0].plain_text().starts_with("hello"));

Required Methods§

Source

fn advance(&mut self, state: &mut TerminalState, bytes: &[u8])

Consumes one arbitrary byte chunk and applies completed actions to state.

An empty slice is a no-op. Chunks may end mid-character or mid-sequence; the parser must retain enough state for a later call.

§Examples
use ailloli_ui_terminal_core::{TerminalParser, TerminalState, VteTerminalParser};

let mut parser = VteTerminalParser::default();
let mut state = TerminalState::new();
let utf8 = "界".as_bytes();
parser.advance(&mut state, &utf8[..1]);
parser.advance(&mut state, &utf8[1..]);
assert_eq!(state.screen.lines[0].cells[0].text, "界");

Implementors§