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§
Sourcefn advance(&mut self, state: &mut TerminalState, bytes: &[u8])
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, "界");