From e2151a4ff6039aecda1eb20e38e7a8b0bb066465 Mon Sep 17 00:00:00 2001 From: VojtechStep Date: Tue, 6 Aug 2019 12:16:08 +0200 Subject: Add an implicit zero after trailing semicolon --- src/lib.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 7fa4c22..0813a4d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -298,7 +298,16 @@ impl Parser { let idx = self.num_params; self.params[idx] = self.param; self.num_params += 1; + } else { + // Last character was a semicolon, add a trailing zero + + let idx = self.num_params; + if idx != MAX_PARAMS { + self.params[idx] = 0; + self.num_params += 1; + } } + performer.csi_dispatch( self.params(), self.intermediates(), @@ -557,6 +566,19 @@ mod tests { } + #[test] + fn parse_trailing_semi() { + let mut dispatcher = CsiDispatcher::default(); + let mut parser = Parser::new(); + + for byte in b"\x1b[4;m" { + parser.advance(&mut dispatcher, *byte); + } + + assert_eq!(dispatcher.params.len(), 1); + assert_eq!(dispatcher.params[0], &[4, 0]); + } + #[test] fn parse_semi_set_underline() { -- cgit From bcad429a53cade02f7ec1ebf26c902e55a75acdc Mon Sep 17 00:00:00 2001 From: VojtechStep Date: Tue, 6 Aug 2019 21:38:42 +0200 Subject: Simplify csi dispatching --- src/lib.rs | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 0813a4d..71ea79b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -89,7 +89,6 @@ pub struct Parser { intermediate_idx: usize, params: [i64; MAX_PARAMS], param: i64, - collecting_param: bool, num_params: usize, osc_raw: [u8; MAX_OSC_RAW], osc_params: [(usize, usize); MAX_PARAMS], @@ -108,7 +107,6 @@ impl Parser { intermediate_idx: 0, params: [0i64; MAX_PARAMS], param: 0, - collecting_param: false, num_params: 0, osc_raw: [0; MAX_OSC_RAW], osc_params: [(0, 0); MAX_PARAMS], @@ -294,19 +292,9 @@ impl Parser { }, Action::Unhook => performer.unhook(), Action::CsiDispatch => { - if self.collecting_param { - let idx = self.num_params; - self.params[idx] = self.param; - self.num_params += 1; - } else { - // Last character was a semicolon, add a trailing zero - let idx = self.num_params; - if idx != MAX_PARAMS { - self.params[idx] = 0; - self.num_params += 1; - } - } + self.params[self.num_params] = self.param; + self.num_params += 1; performer.csi_dispatch( self.params(), @@ -317,7 +305,6 @@ impl Parser { self.num_params = 0; self.param = 0; - self.collecting_param = false; } Action::EscDispatch => { performer.esc_dispatch( @@ -348,12 +335,10 @@ impl Parser { self.params[idx] = self.param; self.param = 0; self.num_params += 1; - self.collecting_param = false; } else { // Continue collecting bytes into param self.param = self.param.saturating_mul(10); self.param = self.param.saturating_add((byte - b'0') as i64); - self.collecting_param = true; } }, Action::Clear => { -- cgit From 1f9db05de259c4fb5862d449f1428d6183eadae2 Mon Sep 17 00:00:00 2001 From: VojtechStep Date: Tue, 6 Aug 2019 21:52:10 +0200 Subject: Address stylistic issues --- src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 71ea79b..ba28e7c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -292,7 +292,6 @@ impl Parser { }, Action::Unhook => performer.unhook(), Action::CsiDispatch => { - self.params[self.num_params] = self.param; self.num_params += 1; @@ -552,7 +551,7 @@ mod tests { } #[test] - fn parse_trailing_semi() { + fn parse_csi_params_trailing_semicolon() { let mut dispatcher = CsiDispatcher::default(); let mut parser = Parser::new(); -- cgit