mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 16:56:36 -04:00
Merge pull request #1237 from hgiesel/tagnone2
Add escape_anki_wildcards_for_search_node
This commit is contained in:
commit
1dd7bacf75
2 changed files with 20 additions and 9 deletions
|
@ -12,7 +12,7 @@ use crate::{
|
||||||
parse_search, BoolSeparator, Node, PropertyKind, RatingKind, SearchNode, StateKind,
|
parse_search, BoolSeparator, Node, PropertyKind, RatingKind, SearchNode, StateKind,
|
||||||
TemplateKind,
|
TemplateKind,
|
||||||
},
|
},
|
||||||
text::escape_anki_wildcards,
|
text::escape_anki_wildcards_for_search_node,
|
||||||
};
|
};
|
||||||
|
|
||||||
impl TryFrom<pb::SearchNode> for Node {
|
impl TryFrom<pb::SearchNode> for Node {
|
||||||
|
@ -22,9 +22,15 @@ impl TryFrom<pb::SearchNode> for Node {
|
||||||
use pb::search_node::{group::Joiner, Filter, Flag};
|
use pb::search_node::{group::Joiner, Filter, Flag};
|
||||||
Ok(if let Some(filter) = msg.filter {
|
Ok(if let Some(filter) = msg.filter {
|
||||||
match filter {
|
match filter {
|
||||||
Filter::Tag(s) => Node::Search(SearchNode::Tag(escape_anki_wildcards(&s))),
|
Filter::Tag(s) => {
|
||||||
Filter::Deck(s) => Node::Search(SearchNode::Deck(escape_anki_wildcards(&s))),
|
Node::Search(SearchNode::Tag(escape_anki_wildcards_for_search_node(&s)))
|
||||||
Filter::Note(s) => Node::Search(SearchNode::Notetype(escape_anki_wildcards(&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) => {
|
Filter::Template(u) => {
|
||||||
Node::Search(SearchNode::CardTemplate(TemplateKind::Ordinal(u as u16)))
|
Node::Search(SearchNode::CardTemplate(TemplateKind::Ordinal(u as u16)))
|
||||||
}
|
}
|
||||||
|
@ -35,7 +41,7 @@ impl TryFrom<pb::SearchNode> for Node {
|
||||||
text: dupe.first_field,
|
text: dupe.first_field,
|
||||||
}),
|
}),
|
||||||
Filter::FieldName(s) => Node::Search(SearchNode::SingleField {
|
Filter::FieldName(s) => Node::Search(SearchNode::SingleField {
|
||||||
field: escape_anki_wildcards(&s),
|
field: escape_anki_wildcards_for_search_node(&s),
|
||||||
text: "*".to_string(),
|
text: "*".to_string(),
|
||||||
is_re: false,
|
is_re: false,
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -399,13 +399,18 @@ pub(crate) fn to_text(txt: &str) -> Cow<str> {
|
||||||
|
|
||||||
/// Escape Anki wildcards and the backslash for escaping them: \*_
|
/// Escape Anki wildcards and the backslash for escaping them: \*_
|
||||||
pub(crate) fn escape_anki_wildcards(txt: &str) -> String {
|
pub(crate) fn escape_anki_wildcards(txt: &str) -> String {
|
||||||
if txt == "_*" {
|
|
||||||
txt.to_string()
|
|
||||||
} else {
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref RE: Regex = Regex::new(r"[\\*_]").unwrap();
|
static ref RE: Regex = Regex::new(r"[\\*_]").unwrap();
|
||||||
}
|
}
|
||||||
RE.replace_all(&txt, r"\$0").into()
|
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 {
|
||||||
|
escape_anki_wildcards(txt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue