diff options
| author | Fuwn <[email protected]> | 2022-06-14 08:45:09 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2022-06-14 08:45:09 +0000 |
| commit | b5703a59c59bfe95143cf8dc6cc54f20f67fb4fd (patch) | |
| tree | 44022e3944119c39df5b9082aaac3a77841c8c10 /src/convert | |
| parent | fix(ast): list ast construction (diff) | |
| download | germ-b5703a59c59bfe95143cf8dc6cc54f20f67fb4fd.tar.xz germ-b5703a59c59bfe95143cf8dc6cc54f20f67fb4fd.zip | |
feat(macros): general utility macros
Diffstat (limited to 'src/convert')
| -rw-r--r-- | src/convert/html.rs | 75 | ||||
| -rw-r--r-- | src/convert/markdown.rs | 77 |
2 files changed, 0 insertions, 152 deletions
diff --git a/src/convert/html.rs b/src/convert/html.rs deleted file mode 100644 index 7b1cafe..0000000 --- a/src/convert/html.rs +++ /dev/null @@ -1,75 +0,0 @@ -// This file is part of Germ <https://github.com/gemrest/germ>. -// Copyright (C) 2022-2022 Fuwn <[email protected]> -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -// Copyright (C) 2022-2022 Fuwn <[email protected]> -// SPDX-License-Identifier: GPL-3.0-only - -use crate::ast::Node; - -pub fn convert(source: &[Node]) -> String { - let mut html = String::new(); - - // Since we have an AST tree of the Gemtext, it is very easy to convert from - // this AST tree to an alternative markup format. - for node in source { - match node { - Node::Text(text) => html.push_str(&format!("<p>{}</p>", text)), - Node::Link { - to, - text, - } => { - html.push_str(&format!( - "<a href=\"{}\">{}</a><br>", - to, - text.clone().unwrap_or_else(|| to.clone()) - )); - } - Node::Heading { - level, - text, - } => { - html.push_str(&format!( - "<{}>{}</{0}>", - match level { - 1 => "h1", - 2 => "h2", - 3 => "h3", - _ => "p", - }, - text - )); - } - Node::List(items) => - html.push_str(&format!( - "<ul>{}</ul>", - items - .iter() - .map(|i| format!("<li>{}</li>", i)) - .collect::<Vec<String>>() - .join("\n") - )), - Node::Blockquote(text) => - html.push_str(&format!("<blockquote>{}</blockquote>", text)), - Node::PreformattedText { - text, .. - } => { - html.push_str(&format!("<pre>{}</pre>", text)); - } - Node::Whitespace => {} - } - } - - html -} diff --git a/src/convert/markdown.rs b/src/convert/markdown.rs deleted file mode 100644 index a38da9f..0000000 --- a/src/convert/markdown.rs +++ /dev/null @@ -1,77 +0,0 @@ -// This file is part of Germ <https://github.com/gemrest/germ>. -// Copyright (C) 2022-2022 Fuwn <[email protected]> -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -// Copyright (C) 2022-2022 Fuwn <[email protected]> -// SPDX-License-Identifier: GPL-3.0-only - -use crate::ast::Node; - -pub fn convert(source: &[Node]) -> String { - let mut markdown = String::new(); - - // Since we have an AST tree of the Gemtext, it is very easy to convert from - // this AST tree to an alternative markup format. - for node in source { - match node { - Node::Text(text) => markdown.push_str(&format!("{}\n", text)), - Node::Link { - to, - text, - } => - markdown.push_str(&*text.clone().map_or_else( - || format!("<{}>\n", to), - |text| format!("[{}]({})\n", text, to), - )), - Node::Heading { - level, - text, - } => { - markdown.push_str(&format!( - "{} {}\n", - match level { - 1 => "#", - 2 => "##", - 3 => "###", - _ => "", - }, - 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!("> {}\n", text)), - Node::PreformattedText { - alt_text, - text, - } => { - markdown.push_str(&format!( - "```{}\n{}```\n", - alt_text.clone().unwrap_or_else(|| "".to_string()), - text - )); - } - Node::Whitespace => markdown.push('\n'), - } - } - - markdown -} |