From d2022d1a6d60edd4e8bb0c02ea7e9f431bd9be00 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 19 Aug 2023 08:05:39 +1000 Subject: [PATCH] Avoid allocating in extract_latex() if possible; make public --- rslib/src/card_rendering/service.rs | 2 +- rslib/src/latex.rs | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/rslib/src/card_rendering/service.rs b/rslib/src/card_rendering/service.rs index c4bde891c..c9cd203f0 100644 --- a/rslib/src/card_rendering/service.rs +++ b/rslib/src/card_rendering/service.rs @@ -53,7 +53,7 @@ impl crate::services::CardRenderingService for Collection { let (text, extracted) = func(&input.text, input.svg); Ok(anki_proto::card_rendering::ExtractLatexResponse { - text, + text: text.into_owned(), latex: extracted .into_iter() .map( diff --git a/rslib/src/latex.rs b/rslib/src/latex.rs index 833463124..2217bc72d 100644 --- a/rslib/src/latex.rs +++ b/rslib/src/latex.rs @@ -46,18 +46,19 @@ pub struct ExtractedLatex { pub(crate) fn extract_latex_expanding_clozes( text: &str, svg: bool, -) -> (String, Vec) { - let text: Cow = if text.contains("{{c") { - expand_clozes_to_reveal_latex(text).into() +) -> (Cow, Vec) { + if text.contains("{{c") { + let expanded = expand_clozes_to_reveal_latex(text); + let (text, extracts) = extract_latex(&expanded, svg); + (text.into_owned().into(), extracts) } else { - text.into() - }; - extract_latex(&text, svg) + extract_latex(text, svg) + } } /// Extract LaTeX from the provided text. /// Expects cloze deletions to already be expanded. -pub(crate) fn extract_latex(text: &str, svg: bool) -> (String, Vec) { +pub fn extract_latex(text: &str, svg: bool) -> (Cow, Vec) { let mut extracted = vec![]; let new_text = LATEX.replace_all(text, |caps: &Captures| { @@ -78,7 +79,7 @@ pub(crate) fn extract_latex(text: &str, svg: bool) -> (String, Vec Cow { @@ -122,7 +123,8 @@ mod test { format!( "a\"one
and
two\"b", fname - ), + ) + .into(), vec![ExtractedLatex { fname: fname.into(), latex: "one\nand\ntwo".into()