From 31a422cf852f7c4dc8f2961732f01ac3bfa276ea Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 27 Jun 2020 09:39:40 +1000 Subject: [PATCH] fix partially quoted text not handling escaped quotes https://forums.ankiweb.net/t/how-to-search-for-cards-containing-quotes/500/10 --- rslib/src/search/parser.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/rslib/src/search/parser.rs b/rslib/src/search/parser.rs index c5e8cd2d9..8dc90cace 100644 --- a/rslib/src/search/parser.rs +++ b/rslib/src/search/parser.rs @@ -254,6 +254,7 @@ fn quoted_term_inner(s: &str) -> IResult<&str, &str> { fn partially_quoted_term(s: &str) -> IResult<&str, Node> { let term = take_while1(|c| c != ' ' && c != ')' && c != ':'); let (s, (term, _, quoted_val)) = tuple((term, char(':'), quoted_term_str))(s)?; + let quoted_val = unescape_quotes(quoted_val); match search_node_for_text_with_argument(term.into(), quoted_val.into()) { Ok(search) => Ok((s, Node::Search(search))), @@ -475,6 +476,17 @@ mod test { })] ); + // partially quoted text should handle escaping the same way + assert_eq!( + parse(r#""field:va\"lue""#)?, + vec![Search(SingleField { + field: "field".into(), + text: "va\"lue".into(), + is_re: false + })] + ); + assert_eq!(parse(r#""field:va\"lue""#)?, parse(r#"field:"va\"lue""#)?,); + // any character should be escapable in quotes assert_eq!( parse(r#""re:\btest""#)?,