ratatui_toolkit/vt100_term/
parser.rs1use super::Screen;
4use std::sync::{Arc, Mutex};
5use termwiz::escape::parser::Parser as TermwizParser;
6
7pub struct Parser {
11 parser: Arc<Mutex<TermwizParser>>,
13
14 screen: Screen,
16}
17
18impl Parser {
19 pub fn new(rows: usize, cols: usize, scrollback_len: usize) -> Self {
21 Self {
22 parser: Arc::new(Mutex::new(TermwizParser::new())),
23 screen: Screen::new(rows, cols, scrollback_len),
24 }
25 }
26
27 pub fn screen(&self) -> &Screen {
29 &self.screen
30 }
31
32 pub fn screen_mut(&mut self) -> &mut Screen {
34 &mut self.screen
35 }
36
37 pub fn process(&mut self, bytes: &[u8]) {
39 let mut parser = self.parser.lock().unwrap();
40
41 parser.parse(bytes, |action| {
42 self.screen.handle_action(&action);
43 });
44 }
45
46 pub fn resize(&mut self, rows: usize, cols: usize) {
48 self.screen.resize(rows, cols);
49 }
50}