diff options
Diffstat (limited to 'src/convert/markdown.rs')
| -rw-r--r-- | src/convert/markdown.rs | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/src/convert/markdown.rs b/src/convert/markdown.rs index 71e54f2..d90790f 100644 --- a/src/convert/markdown.rs +++ b/src/convert/markdown.rs @@ -16,7 +16,7 @@ // Copyright (C) 2022-2022 Fuwn <[email protected]> // SPDX-License-Identifier: GPL-3.0-only -use crate::ast::Node; +use {crate::ast::Node, std::fmt::Write}; pub fn convert(source: &[Node]) -> String { let mut markdown = String::new(); @@ -25,14 +25,17 @@ pub fn convert(source: &[Node]) -> String { // this AST tree to an alternative markup format. for node in source { match node { - Node::Text(text) => markdown.push_str(&format!("{text}\n")), + Node::Text(text) => { + let _ = writeln!(&mut markdown, "{text}"); + } Node::Link { to, text } => markdown.push_str(&text.clone().map_or_else( || format!("<{to}>\n"), |text| format!("[{text}]({to})\n"), )), Node::Heading { level, text } => { - markdown.push_str(&format!( - "{} {}\n", + let _ = writeln!( + &mut markdown, + "{} {}", match level { 1 => "#", 2 => "##", @@ -40,23 +43,29 @@ pub fn convert(source: &[Node]) -> String { _ => "", }, text - )); + ); + } + Node::List(items) => { + let _ = writeln!( + &mut markdown, + "{}", + items + .iter() + .map(|i| format!("- {i}")) + .collect::<Vec<String>>() + .join("\n"), + ); + } + Node::Blockquote(text) => { + let _ = writeln!(&mut markdown, "> {text}"); } - Node::List(items) => markdown.push_str(&format!( - "{}\n", - items - .iter() - .map(|i| format!("- {i}")) - .collect::<Vec<String>>() - .join("\n"), - )), - Node::Blockquote(text) => markdown.push_str(&format!("> {text}\n")), Node::PreformattedText { alt_text, text } => { - markdown.push_str(&format!( - "```{}\n{}```\n", + let _ = writeln!( + &mut markdown, + "```{}\n{}```", alt_text.clone().unwrap_or_default(), text - )); + ); } Node::Whitespace => markdown.push('\n'), } |