🦠 The Definitive Gemini Protocol Toolkit
gemini gemini-protocol gemtext parser zero-dependency toolkit ast converter html markdown cli networking

fix(markdown): Optimise Markdown conversion

fuwn.net a786497c f80e2cd0

verified
+15 -28
+4 -8
src/ast/container.rs
··· 199 199 // If the Gemtext line starts with an "=" ("=>"), it is a link line, 200 200 // so splitting it up should be easy enough. 201 201 let line = line.get(2..).unwrap_or(""); 202 - let mut split = line 203 - .split_whitespace() 204 - .map(String::from) 205 - .collect::<Vec<String>>() 206 - .into_iter(); 202 + let mut split = line.split_whitespace(); 207 203 208 204 nodes.push(Node::Link { 209 - to: split.next().unwrap_or_default(), 205 + to: split.next().unwrap_or_default().to_string(), 210 206 text: { 211 - let rest = split.collect::<Vec<String>>().join(" "); 207 + let rest: Vec<&str> = split.collect(); 212 208 213 - if rest.is_empty() { None } else { Some(rest) } 209 + if rest.is_empty() { None } else { Some(rest.join(" ")) } 214 210 }, 215 211 }); 216 212
+7 -9
src/convert/html.rs
··· 50 50 ); 51 51 } 52 52 Node::List(items) => { 53 - let _ = write!( 54 - &mut html, 55 - "<ul>{}</ul>", 56 - items 57 - .iter() 58 - .map(|i| format!("<li>{i}</li>")) 59 - .collect::<Vec<String>>() 60 - .join("\n") 61 - ); 53 + let _ = write!(&mut html, "<ul>"); 54 + 55 + for item in items { 56 + let _ = write!(&mut html, "<li>{item}</li>"); 57 + } 58 + 59 + let _ = write!(&mut html, "</ul>"); 62 60 } 63 61 Node::Blockquote(text) => { 64 62 let _ = write!(&mut html, "<blockquote>{text}</blockquote>");
+4 -11
src/convert/markdown.rs
··· 45 45 text 46 46 ); 47 47 } 48 - Node::List(items) => { 49 - let _ = writeln!( 50 - &mut markdown, 51 - "{}", 52 - items 53 - .iter() 54 - .map(|i| format!("- {i}")) 55 - .collect::<Vec<String>>() 56 - .join("\n"), 57 - ); 58 - } 48 + Node::List(items) => 49 + for item in items { 50 + let _ = writeln!(&mut markdown, "- {item}"); 51 + }, 59 52 Node::Blockquote(text) => { 60 53 let _ = writeln!(&mut markdown, "> {text}"); 61 54 }