diff options
| author | Fuwn <[email protected]> | 2025-05-21 08:41:57 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-05-21 08:41:57 +0000 |
| commit | 0fd7b223c2f73b9f7ba41e395ab4de0a01bc9c04 (patch) | |
| tree | 72162b1998794387819c3eefdb3c0616195d462b /src/html.rs | |
| parent | chore(just): Use base Cargo Justfile from Fuwn/justfiles (diff) | |
| download | september-0fd7b223c2f73b9f7ba41e395ab4de0a01bc9c04.tar.xz september-0fd7b223c2f73b9f7ba41e395ab4de0a01bc9c04.zip | |
refactor(src): Remove unnecessary allocations
Diffstat (limited to 'src/html.rs')
| -rw-r--r-- | src/html.rs | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/src/html.rs b/src/html.rs index 933ce8e..609be98 100644 --- a/src/html.rs +++ b/src/html.rs @@ -1,4 +1,4 @@ -use {germ::ast::Node, std::env::var, url::Url}; +use {germ::ast::Node, std::env::var, std::fmt::Write, url::Url}; fn link_from_host_href(url: &Url, href: &str) -> Option<String> { Some(format!( @@ -98,7 +98,9 @@ pub fn from_gemini( } match node { - Node::Text(text) => html.push_str(&format!("<p>{}</p>", safe(text))), + Node::Text(text) => { + let _ = write!(&mut html, "<p>{}</p>", safe(text)); + } Node::Link { to, text } => { let mut href = to.to_string(); let mut surface = false; @@ -202,18 +204,20 @@ pub fn from_gemini( || extension == "svg" { if embed_images == "1" { - html.push_str(&format!( - "<p><a href=\"{}\">{}</a> <i>Embedded below</i></p>\n", + let _ = writeln!( + &mut html, + "<p><a href=\"{}\">{}</a> <i>Embedded below</i></p>", href, safe(text.as_ref().unwrap_or(to)), - )); + ); } - html.push_str(&format!( - "<p><img src=\"{}\" alt=\"{}\" /></p>\n", + let _ = writeln!( + &mut html, + "<p><img src=\"{}\" alt=\"{}\" /></p>", safe(&href), safe(text.as_ref().unwrap_or(to)), - )); + ); continue; } @@ -222,12 +226,13 @@ pub fn from_gemini( previous_link = true; - html.push_str(&format!( + let _ = write!( + &mut html, r#"{}<a href="{}">{}</a>"#, if condense_links { "" } else { GEMINI_FRAGMENT }, href, safe(text.as_ref().unwrap_or(to)).trim(), - )); + ); } Node::Heading { level, text } => { if !condensible_headings.contains(&node.to_gemtext().as_str()) { @@ -238,7 +243,8 @@ pub fn from_gemini( title = safe(text).to_string(); } - html.push_str(&format!( + let _ = write!( + &mut html, "<{}>{}</{0}>", match level { 1 => "h1", @@ -247,25 +253,28 @@ pub fn from_gemini( _ => "p", }, safe(text), - )); + ); + } + Node::List(items) => { + let _ = write!( + &mut html, + "<ul>{}</ul>", + items + .iter() + .map(|i| format!("<li>{}</li>", safe(i))) + .collect::<Vec<String>>() + .join("\n") + ); } - Node::List(items) => html.push_str(&format!( - "<ul>{}</ul>", - items - .iter() - .map(|i| format!("<li>{}</li>", safe(i))) - .collect::<Vec<String>>() - .join("\n") - )), Node::Blockquote(text) => { - html.push_str(&format!("<blockquote>{}</blockquote>", safe(text))); + let _ = write!(&mut html, "<blockquote>{}</blockquote>", safe(text)); } Node::PreformattedText { text, .. } => { let mut new_text = text.to_string(); new_text.pop(); - html.push_str(&format!("<pre>{new_text}</pre>")); + let _ = write!(&mut html, "<pre>{new_text}</pre>"); } Node::Whitespace => {} } |