From a786497ce0255e1ca2dcdcab46030786c1b9e98e Mon Sep 17 00:00:00 2001 From: Fuwn Date: Thu, 11 Sep 2025 06:18:36 +0000 Subject: fix(markdown): Optimise Markdown conversion --- src/ast/container.rs | 12 ++++-------- src/convert/html.rs | 16 +++++++--------- src/convert/markdown.rs | 15 ++++----------- 3 files changed, 15 insertions(+), 28 deletions(-) diff --git a/src/ast/container.rs b/src/ast/container.rs index 46c548b..fe4f949 100644 --- a/src/ast/container.rs +++ b/src/ast/container.rs @@ -199,18 +199,14 @@ impl Ast { // If the Gemtext line starts with an "=" ("=>"), it is a link line, // so splitting it up should be easy enough. let line = line.get(2..).unwrap_or(""); - let mut split = line - .split_whitespace() - .map(String::from) - .collect::>() - .into_iter(); + let mut split = line.split_whitespace(); nodes.push(Node::Link { - to: split.next().unwrap_or_default(), + to: split.next().unwrap_or_default().to_string(), text: { - let rest = split.collect::>().join(" "); + let rest: Vec<&str> = split.collect(); - if rest.is_empty() { None } else { Some(rest) } + if rest.is_empty() { None } else { Some(rest.join(" ")) } }, }); diff --git a/src/convert/html.rs b/src/convert/html.rs index bfba6e7..1927c86 100644 --- a/src/convert/html.rs +++ b/src/convert/html.rs @@ -50,15 +50,13 @@ pub fn convert(source: &[Node]) -> String { ); } Node::List(items) => { - let _ = write!( - &mut html, - "
    {}
", - items - .iter() - .map(|i| format!("
  • {i}
  • ")) - .collect::>() - .join("\n") - ); + let _ = write!(&mut html, "
      "); + + for item in items { + let _ = write!(&mut html, "
    • {item}
    • "); + } + + let _ = write!(&mut html, "
    "); } Node::Blockquote(text) => { let _ = write!(&mut html, "
    {text}
    "); diff --git a/src/convert/markdown.rs b/src/convert/markdown.rs index 27306a7..0dac611 100644 --- a/src/convert/markdown.rs +++ b/src/convert/markdown.rs @@ -45,17 +45,10 @@ pub fn convert(source: &[Node]) -> String { text ); } - Node::List(items) => { - let _ = writeln!( - &mut markdown, - "{}", - items - .iter() - .map(|i| format!("- {i}")) - .collect::>() - .join("\n"), - ); - } + Node::List(items) => + for item in items { + let _ = writeln!(&mut markdown, "- {item}"); + }, Node::Blockquote(text) => { let _ = writeln!(&mut markdown, "> {text}"); } -- cgit v1.2.3