mirror of
https://github.com/ankitects/anki.git
synced 2025-12-11 13:56:55 -05:00
separate out template ordinal and name search
This commit is contained in:
parent
dcb2b46d1b
commit
91d7b02325
1 changed files with 20 additions and 3 deletions
|
|
@ -54,7 +54,7 @@ pub(super) enum SearchNode<'a> {
|
||||||
text: Cow<'a, str>,
|
text: Cow<'a, str>,
|
||||||
},
|
},
|
||||||
AddedInDays(u32),
|
AddedInDays(u32),
|
||||||
CardTemplate(Cow<'a, str>),
|
CardTemplate(TemplateKind),
|
||||||
Deck(Cow<'a, str>),
|
Deck(Cow<'a, str>),
|
||||||
NoteTypeID(ObjID),
|
NoteTypeID(ObjID),
|
||||||
NoteType(Cow<'a, str>),
|
NoteType(Cow<'a, str>),
|
||||||
|
|
@ -96,6 +96,12 @@ pub(super) enum StateKind {
|
||||||
Suspended,
|
Suspended,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq)]
|
||||||
|
pub(super) enum TemplateKind {
|
||||||
|
Ordinal(u16),
|
||||||
|
Name(String),
|
||||||
|
}
|
||||||
|
|
||||||
/// Parse the input string into a list of nodes.
|
/// Parse the input string into a list of nodes.
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub(super) fn parse(input: &str) -> std::result::Result<Vec<Node>, String> {
|
pub(super) fn parse(input: &str) -> std::result::Result<Vec<Node>, String> {
|
||||||
|
|
@ -223,13 +229,13 @@ fn search_node_for_text_with_argument<'a>(
|
||||||
) -> ParseResult<SearchNode<'a>> {
|
) -> ParseResult<SearchNode<'a>> {
|
||||||
Ok(match key.to_ascii_lowercase().as_str() {
|
Ok(match key.to_ascii_lowercase().as_str() {
|
||||||
"added" => SearchNode::AddedInDays(val.parse()?),
|
"added" => SearchNode::AddedInDays(val.parse()?),
|
||||||
"card" => SearchNode::CardTemplate(val),
|
|
||||||
"deck" => SearchNode::Deck(val),
|
"deck" => SearchNode::Deck(val),
|
||||||
"note" => SearchNode::NoteType(val),
|
"note" => SearchNode::NoteType(val),
|
||||||
"tag" => SearchNode::Tag(val),
|
"tag" => SearchNode::Tag(val),
|
||||||
"mid" => SearchNode::NoteTypeID(val.parse()?),
|
"mid" => SearchNode::NoteTypeID(val.parse()?),
|
||||||
"nid" => SearchNode::NoteIDs(check_id_list(val)?),
|
"nid" => SearchNode::NoteIDs(check_id_list(val)?),
|
||||||
"cid" => SearchNode::CardIDs(check_id_list(val)?),
|
"cid" => SearchNode::CardIDs(check_id_list(val)?),
|
||||||
|
"card" => parse_template(val.as_ref()),
|
||||||
"is" => parse_state(val.as_ref())?,
|
"is" => parse_state(val.as_ref())?,
|
||||||
"flag" => parse_flag(val.as_ref())?,
|
"flag" => parse_flag(val.as_ref())?,
|
||||||
"rated" => parse_rated(val.as_ref())?,
|
"rated" => parse_rated(val.as_ref())?,
|
||||||
|
|
@ -350,6 +356,13 @@ fn parse_prop(val: &str) -> ParseResult<SearchNode<'static>> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse_template(val: &str) -> SearchNode<'static> {
|
||||||
|
SearchNode::CardTemplate(match val.parse::<u16>() {
|
||||||
|
Ok(n) => TemplateKind::Ordinal(n),
|
||||||
|
Err(_) => TemplateKind::Name(val.into()),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
@ -380,7 +393,11 @@ mod test {
|
||||||
assert_eq!(parse("added:3")?, vec![Search(AddedInDays(3))]);
|
assert_eq!(parse("added:3")?, vec![Search(AddedInDays(3))]);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse("card:front")?,
|
parse("card:front")?,
|
||||||
vec![Search(CardTemplate("front".into()))]
|
vec![Search(CardTemplate(TemplateKind::Name("front".into())))]
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
parse("card:3")?,
|
||||||
|
vec![Search(CardTemplate(TemplateKind::Ordinal(3)))]
|
||||||
);
|
);
|
||||||
assert_eq!(parse("deck:default")?, vec![Search(Deck("default".into()))]);
|
assert_eq!(parse("deck:default")?, vec![Search(Deck("default".into()))]);
|
||||||
assert_eq!(parse("note:basic")?, vec![Search(NoteType("basic".into()))]);
|
assert_eq!(parse("note:basic")?, vec![Search(NoteType("basic".into()))]);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue