use elegance::{LineKind, TerminalLine};
pub const DEFAULT_LINE_CAP: usize = 64 * 1024;
#[allow(dead_code)] pub struct AnsiHandler {
line_cap: usize,
parser: vte::Parser,
state: PerformerState,
}
#[derive(Default)]
#[allow(dead_code)] struct PerformerState {
buffer: String,
pending_kind: Option<LineKind>,
out: Vec<TerminalLine>,
}
impl AnsiHandler {
pub fn new() -> Self {
Self::with_line_cap(DEFAULT_LINE_CAP)
}
pub fn with_line_cap(line_cap: usize) -> Self {
Self {
line_cap,
parser: vte::Parser::new(),
state: PerformerState::default(),
}
}
pub fn feed(&mut self, _bytes: &[u8]) -> Vec<TerminalLine> {
todo!("AnsiHandler::feed — see terminal_crate_plan.md §8")
}
pub fn flush(&mut self) -> Option<TerminalLine> {
if self.state.buffer.is_empty() {
return None;
}
let kind = self.state.pending_kind.take().unwrap_or(LineKind::Out);
let text = std::mem::take(&mut self.state.buffer);
Some(TerminalLine::new(kind, text))
}
pub fn line_cap(&self) -> usize {
self.line_cap
}
}
impl Default for AnsiHandler {
fn default() -> Self {
Self::new()
}
}