aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib.rs22
1 files changed, 22 insertions, 0 deletions
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(),
@@ -558,6 +567,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() {
// Create dispatcher and check state