aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs39
1 files changed, 32 insertions, 7 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 1402108..011b6a1 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -286,9 +286,6 @@ impl Parser {
self.ignoring,
byte as char,
);
-
- self.num_params = 0;
- self.param = 0;
},
Action::EscDispatch => {
performer.esc_dispatch(self.params(), self.intermediates(), self.ignoring, byte);
@@ -322,13 +319,13 @@ impl Parser {
}
},
Action::Clear => {
+ // Reset everything on ESC/CSI/DCS entry
self.intermediate_idx = 0;
- self.num_params = 0;
self.ignoring = false;
+ self.num_params = 0;
+ self.param = 0;
},
- Action::BeginUtf8 => {
- self.process_utf8(performer, byte);
- },
+ Action::BeginUtf8 => self.process_utf8(performer, byte),
}
}
}
@@ -710,6 +707,34 @@ mod tests {
}
#[test]
+ fn csi_reset() {
+ static INPUT: &[u8] = b"\x1b[3;1\x1b[2J";
+ let mut dispatcher = CsiDispatcher::default();
+ let mut parser = Parser::new();
+
+ for byte in INPUT {
+ parser.advance(&mut dispatcher, *byte);
+ }
+
+ assert_eq!(dispatcher.params.len(), 1);
+ assert_eq!(dispatcher.params[0], &[2]);
+ }
+
+ #[test]
+ fn dcs_reset() {
+ static INPUT: &[u8] = b"\x1bP1X\x9c\x1b[31mH";
+ let mut dispatcher = CsiDispatcher::default();
+ let mut parser = Parser::new();
+
+ for byte in INPUT {
+ parser.advance(&mut dispatcher, *byte);
+ }
+
+ assert_eq!(dispatcher.params.len(), 1);
+ assert_eq!(dispatcher.params[0], &[31]);
+ }
+
+ #[test]
fn parse_osc_with_utf8_arguments() {
static INPUT: &[u8] = &[
0x0d, 0x1b, 0x5d, 0x32, 0x3b, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x27, 0xc2, 0xaf, 0x5c,