Escaping the escape character
This commit is contained in:
@@ -4,6 +4,7 @@ mod tests;
|
||||
///The following are the implemented ANSI escape sequences. More to be added.
|
||||
#[derive(Debug, PartialEq)]
|
||||
pub enum AnsiSequence {
|
||||
Escape,
|
||||
CursorPos(u32, u32),
|
||||
CursorUp(u32),
|
||||
CursorDown(u32),
|
||||
@@ -61,6 +62,7 @@ impl Display for AnsiSequence {
|
||||
|
||||
use AnsiSequence::*;
|
||||
match self {
|
||||
Escape => write!(formatter, "\u{1b}"),
|
||||
CursorPos(line, col)
|
||||
=> write!(formatter, "[{};{}H", line, col),
|
||||
CursorUp(amt)
|
||||
|
@@ -51,6 +51,14 @@ named!(
|
||||
)
|
||||
);
|
||||
|
||||
named!(
|
||||
escape<&str, AnsiSequence>,
|
||||
do_parse!(
|
||||
tag!("\u{1b}") >>
|
||||
(AnsiSequence::Escape)
|
||||
)
|
||||
);
|
||||
|
||||
named!(
|
||||
cursor_up<&str, AnsiSequence>,
|
||||
do_parse!(
|
||||
@@ -244,7 +252,8 @@ tag_parser!(set_single_shift3, "O", AnsiSequence::SetSingleShift3);
|
||||
named!(
|
||||
combined<&str, AnsiSequence>,
|
||||
alt!(
|
||||
cursor_pos
|
||||
escape
|
||||
| cursor_pos
|
||||
| cursor_up
|
||||
| cursor_down
|
||||
| cursor_forward
|
||||
|
@@ -133,3 +133,15 @@ fn test_default_value() {
|
||||
assert_eq!(strings[3], Output::TextBlock("\x1b[7asd;1234H"));
|
||||
assert_eq!(strings[4], Output::TextBlock("\x1b[a;sd7H"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_escape() {
|
||||
let parts: Vec<_> = "\x1b\x1b[33mFoobar".ansi_parse().collect();
|
||||
assert_eq!(
|
||||
parts,
|
||||
vec![
|
||||
Output::Escape(AnsiSequence::Escape),
|
||||
Output::TextBlock("[33mFoobar")
|
||||
]
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user