Support escaping backslash in sexp.
This commit is contained in:
parent
a817eefce7
commit
0d6f6288c9
@ -175,7 +175,7 @@ fn quoted_atom<'s>(input: &'s str) -> Res<&'s str, Token<'s>> {
|
|||||||
_ => false,
|
_ => false,
|
||||||
}),
|
}),
|
||||||
'\\',
|
'\\',
|
||||||
one_of(r#""n"#),
|
one_of(r#""n\\"#),
|
||||||
)(remaining)?;
|
)(remaining)?;
|
||||||
let (remaining, _) = tag(r#"""#)(remaining)?;
|
let (remaining, _) = tag(r#"""#)(remaining)?;
|
||||||
let source = get_consumed(input, remaining);
|
let source = get_consumed(input, remaining);
|
||||||
@ -298,4 +298,27 @@ mod tests {
|
|||||||
r#"baz"#
|
r#"baz"#
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn string_containing_escaped_characters() {
|
||||||
|
let input = r#" (foo "\\( x=2 \\)" bar) "#;
|
||||||
|
let (remaining, parsed) = sexp_with_padding(input).expect("Parse the input");
|
||||||
|
assert_eq!(remaining, "");
|
||||||
|
assert!(match parsed {
|
||||||
|
Token::Atom(_) => false,
|
||||||
|
Token::List(_) => true,
|
||||||
|
Token::TextWithProperties(_) => false,
|
||||||
|
});
|
||||||
|
let children = match parsed {
|
||||||
|
Token::List(children) => children,
|
||||||
|
_ => panic!("Should be a list."),
|
||||||
|
};
|
||||||
|
assert_eq!(
|
||||||
|
match children.get(1) {
|
||||||
|
Some(Token::Atom(body)) => *body,
|
||||||
|
_ => panic!("First child should be an atom."),
|
||||||
|
},
|
||||||
|
r#""\\( x=2 \\)""#
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user