use pulldown_cmark::{Event, Options, Parser, Tag, TagEnd};
pub fn generate_html(text: String) -> String {
let (content, signature) = match text.rsplit_once("\r\n-- \r\n") {
Some((content, signature)) => (content, Some(signature)),
None => (text.as_str(), None),
};
let mut html = String::new();
html.push_str(r#"<!doctype html><html><head><meta charset="utf-8"></head><body>"#);
pulldown_cmark::html::push_html(
&mut html,
Parser::new_ext(content, Options::ENABLE_SMART_PUNCTUATION),
);
if let Some(signature) = signature {
html.push_str("-- <br>");
pulldown_cmark::html::push_html(
&mut html,
Parser::new_ext(signature, Options::ENABLE_SMART_PUNCTUATION).filter_map(|event| {
match event {
Event::SoftBreak => Some(Event::HardBreak),
Event::Start(Tag::Paragraph) | Event::End(TagEnd::Paragraph) => None,
_ => Some(event),
}
}),
);
}
html.push_str("</body></html>");
html
}