diff options
Diffstat (limited to 'vendor/anstyle-parse/examples')
-rw-r--r-- | vendor/anstyle-parse/examples/parselog.rs | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/vendor/anstyle-parse/examples/parselog.rs b/vendor/anstyle-parse/examples/parselog.rs new file mode 100644 index 0000000..ed89650 --- /dev/null +++ b/vendor/anstyle-parse/examples/parselog.rs @@ -0,0 +1,78 @@ +//! Parse input from stdin and log actions on stdout +use std::io::{self, Read}; + +use anstyle_parse::{DefaultCharAccumulator, Params, Parser, Perform}; + +/// A type implementing Perform that just logs actions +struct Log; + +impl Perform for Log { + fn print(&mut self, c: char) { + println!("[print] {:?}", c); + } + + fn execute(&mut self, byte: u8) { + println!("[execute] {:02x}", byte); + } + + fn hook(&mut self, params: &Params, intermediates: &[u8], ignore: bool, c: u8) { + println!( + "[hook] params={:?}, intermediates={:?}, ignore={:?}, char={:?}", + params, intermediates, ignore, c + ); + } + + fn put(&mut self, byte: u8) { + println!("[put] {:02x}", byte); + } + + fn unhook(&mut self) { + println!("[unhook]"); + } + + fn osc_dispatch(&mut self, params: &[&[u8]], bell_terminated: bool) { + println!( + "[osc_dispatch] params={:?} bell_terminated={}", + params, bell_terminated + ); + } + + fn csi_dispatch(&mut self, params: &Params, intermediates: &[u8], ignore: bool, c: u8) { + println!( + "[csi_dispatch] params={:#?}, intermediates={:?}, ignore={:?}, char={:?}", + params, intermediates, ignore, c + ); + } + + fn esc_dispatch(&mut self, intermediates: &[u8], ignore: bool, byte: u8) { + println!( + "[esc_dispatch] intermediates={:?}, ignore={:?}, byte={:02x}", + intermediates, ignore, byte + ); + } +} + +fn main() { + let input = io::stdin(); + let mut handle = input.lock(); + + let mut statemachine = Parser::<DefaultCharAccumulator>::new(); + let mut performer = Log; + + let mut buf = [0; 2048]; + + loop { + match handle.read(&mut buf) { + Ok(0) => break, + Ok(n) => { + for byte in &buf[..n] { + statemachine.advance(&mut performer, *byte); + } + } + Err(err) => { + println!("err: {}", err); + break; + } + } + } +} |