aboutsummaryrefslogtreecommitdiff
path: root/src/convert/markdown.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/convert/markdown.rs')
-rw-r--r--src/convert/markdown.rs43
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'),
}