mirror of
https://github.com/ankitects/anki.git
synced 2025-12-11 13:56:55 -05:00
fix overlapping clozes
This commit is contained in:
parent
33bf4c204b
commit
9d84f8fb70
1 changed files with 14 additions and 0 deletions
|
|
@ -131,6 +131,8 @@ mod mathjax_caps {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reveal_cloze_text(text: &str, cloze_ord: u16, question: bool) -> Cow<str> {
|
fn reveal_cloze_text(text: &str, cloze_ord: u16, question: bool) -> Cow<str> {
|
||||||
|
let mut cloze_ord_was_in_text = false;
|
||||||
|
|
||||||
let output = CLOZE.replace_all(text, |caps: &Captures| {
|
let output = CLOZE.replace_all(text, |caps: &Captures| {
|
||||||
let captured_ord = caps
|
let captured_ord = caps
|
||||||
.get(cloze_caps::ORD)
|
.get(cloze_caps::ORD)
|
||||||
|
|
@ -142,6 +144,8 @@ fn reveal_cloze_text(text: &str, cloze_ord: u16, question: bool) -> Cow<str> {
|
||||||
if captured_ord != cloze_ord {
|
if captured_ord != cloze_ord {
|
||||||
// other cloze deletions are unchanged
|
// other cloze deletions are unchanged
|
||||||
return caps.get(cloze_caps::TEXT).unwrap().as_str().to_owned();
|
return caps.get(cloze_caps::TEXT).unwrap().as_str().to_owned();
|
||||||
|
} else {
|
||||||
|
cloze_ord_was_in_text = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
let replacement;
|
let replacement;
|
||||||
|
|
@ -159,6 +163,10 @@ fn reveal_cloze_text(text: &str, cloze_ord: u16, question: bool) -> Cow<str> {
|
||||||
format!("<span class=cloze>{}</span>", replacement)
|
format!("<span class=cloze>{}</span>", replacement)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if !cloze_ord_was_in_text {
|
||||||
|
return "".into();
|
||||||
|
}
|
||||||
|
|
||||||
// if no cloze deletions are found, Anki returns an empty string
|
// if no cloze deletions are found, Anki returns an empty string
|
||||||
match output {
|
match output {
|
||||||
Cow::Borrowed(_) => "".into(),
|
Cow::Borrowed(_) => "".into(),
|
||||||
|
|
@ -353,5 +361,11 @@ field</a>
|
||||||
|
|
||||||
ctx.question_side = false;
|
ctx.question_side = false;
|
||||||
assert_eq!(strip_html(&cloze_filter(text, &ctx)).as_ref(), "one two");
|
assert_eq!(strip_html(&cloze_filter(text, &ctx)).as_ref(), "one two");
|
||||||
|
|
||||||
|
// if the provided ordinal did not match any cloze deletions,
|
||||||
|
// Anki treats the string as blank, which add-ons like
|
||||||
|
// cloze overlapper take advantage of.
|
||||||
|
ctx.card_ord = 2;
|
||||||
|
assert_eq!(cloze_filter(text, &ctx).as_ref(), "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue