From 0f658de702bfdf0806a04740509c6280d57e4958 Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Wed, 16 Jun 2021 09:22:45 +0200 Subject: [PATCH] Add escape_anki_wildcards_for_search_node --- rslib/src/backend/search/search_node.rs | 16 +++++++++++----- rslib/src/text.rs | 13 +++++++++---- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/rslib/src/backend/search/search_node.rs b/rslib/src/backend/search/search_node.rs index b2d9c50d1..0616e89fc 100644 --- a/rslib/src/backend/search/search_node.rs +++ b/rslib/src/backend/search/search_node.rs @@ -12,7 +12,7 @@ use crate::{ parse_search, BoolSeparator, Node, PropertyKind, RatingKind, SearchNode, StateKind, TemplateKind, }, - text::escape_anki_wildcards, + text::escape_anki_wildcards_for_search_node, }; impl TryFrom for Node { @@ -22,9 +22,15 @@ impl TryFrom for Node { use pb::search_node::{group::Joiner, Filter, Flag}; Ok(if let Some(filter) = msg.filter { match filter { - Filter::Tag(s) => Node::Search(SearchNode::Tag(escape_anki_wildcards(&s))), - Filter::Deck(s) => Node::Search(SearchNode::Deck(escape_anki_wildcards(&s))), - Filter::Note(s) => Node::Search(SearchNode::Notetype(escape_anki_wildcards(&s))), + Filter::Tag(s) => { + Node::Search(SearchNode::Tag(escape_anki_wildcards_for_search_node(&s))) + } + Filter::Deck(s) => { + Node::Search(SearchNode::Deck(escape_anki_wildcards_for_search_node(&s))) + } + Filter::Note(s) => Node::Search(SearchNode::Notetype( + escape_anki_wildcards_for_search_node(&s), + )), Filter::Template(u) => { Node::Search(SearchNode::CardTemplate(TemplateKind::Ordinal(u as u16))) } @@ -35,7 +41,7 @@ impl TryFrom for Node { text: dupe.first_field, }), Filter::FieldName(s) => Node::Search(SearchNode::SingleField { - field: escape_anki_wildcards(&s), + field: escape_anki_wildcards_for_search_node(&s), text: "*".to_string(), is_re: false, }), diff --git a/rslib/src/text.rs b/rslib/src/text.rs index 0bb4ce81c..96ecdbdab 100644 --- a/rslib/src/text.rs +++ b/rslib/src/text.rs @@ -399,13 +399,18 @@ pub(crate) fn to_text(txt: &str) -> Cow { /// Escape Anki wildcards and the backslash for escaping them: \*_ pub(crate) fn escape_anki_wildcards(txt: &str) -> String { + lazy_static! { + static ref RE: Regex = Regex::new(r"[\\*_]").unwrap(); + } + RE.replace_all(&txt, r"\$0").into() +} + +/// Escape Anki wildcards unless it's _* +pub(crate) fn escape_anki_wildcards_for_search_node(txt: &str) -> String { if txt == "_*" { txt.to_string() } else { - lazy_static! { - static ref RE: Regex = Regex::new(r"[\\*_]").unwrap(); - } - RE.replace_all(&txt, r"\$0").into() + escape_anki_wildcards(txt) } }