From 6f76b86f7c49784aa8f9a079964af37f6f2745da Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Wed, 29 Jul 2020 12:54:29 +1000 Subject: [PATCH] handle multiple clozes in cloze-only filter https://forums.ankiweb.net/t/built-in-tts-not-reading-multiple-clozes/1516 --- rslib/src/cloze.rs | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/rslib/src/cloze.rs b/rslib/src/cloze.rs index 47ea27e54..759873e3a 100644 --- a/rslib/src/cloze.rs +++ b/rslib/src/cloze.rs @@ -93,15 +93,19 @@ pub fn reveal_cloze_text(text: &str, cloze_ord: u16, question: bool) -> Cow } pub fn reveal_cloze_text_only(text: &str, cloze_ord: u16, question: bool) -> Cow { - for caps in CLOZE.captures_iter(text) { - let captured_ord = caps - .get(cloze_caps::ORD) - .unwrap() - .as_str() - .parse() - .unwrap_or(0); + CLOZE + .captures_iter(text) + .filter(|caps| { + let captured_ord = caps + .get(cloze_caps::ORD) + .unwrap() + .as_str() + .parse() + .unwrap_or(0); - if captured_ord == cloze_ord { + captured_ord == cloze_ord + }) + .map(|caps| { let cloze = if question { // hint provided? if let Some(hint) = caps.get(cloze_caps::HINT) { @@ -112,11 +116,12 @@ pub fn reveal_cloze_text_only(text: &str, cloze_ord: u16, question: bool) -> Cow } else { caps.get(cloze_caps::TEXT).unwrap().as_str() }; - return cloze.to_owned().into(); - } - } - "".into() + cloze + }) + .collect::>() + .join(", ") + .into() } /// If text contains any LaTeX tags, render the front and back @@ -214,6 +219,10 @@ mod test { ); assert_eq!(reveal_cloze_text_only("foo {{c1::bar}}", 1, false), "bar"); assert_eq!(reveal_cloze_text_only("foo {{c1::bar}}", 2, false), ""); + assert_eq!( + reveal_cloze_text_only("{{c1::foo}} {{c1::bar}}", 1, false), + "foo, bar" + ); } #[test]