phoebe/src/message_ast/convert_matrix.rs

52 lines
2.1 KiB
Rust

use super::{MessageContent, Styled};
pub fn convert_matrix(message: &str) -> MessageContent {
todo!();
}
pub fn format_matrix(message_content: &MessageContent) -> String {
message_content
.iter()
.map(|component| match component {
Styled::Plain(text) => html_escape::encode_text(text).to_string(),
Styled::Link { target, text } => format!(
r#"<a href="{}">{}</a>"#,
html_escape::encode_quoted_attribute(target),
format_matrix(text)
),
Styled::Italic(inner) => format!("<em>{}</em>", format_matrix(inner)),
Styled::Bold(inner) => format!("<strong>{}</strong>", format_matrix(inner)),
Styled::Strikethrough(inner) => format!("<del>{}</del>", format_matrix(inner)),
Styled::Underline(inner) => format!("<u>{}</u>", format_matrix(inner)),
Styled::Code(code) => format!("<code>{}</code>", html_escape::encode_text(code)),
Styled::CodeBlock { lang, source } => {
format!(
r#"<pre><code{}>{}</code></pre>"#,
lang.as_ref()
.map(|lang| format!(
r#" class="language-{}""#,
html_escape::encode_quoted_attribute(lang)
))
.unwrap_or("".to_string()),
source,
)
}
Styled::Spoiler { reason, content } => format!(
"<span data-mx-spoiler{}>{}</span>",
reason
.as_ref()
.map(|reason| format!(r#"="{}""#, html_escape::encode_quoted_attribute(reason)))
.unwrap_or("".to_string()),
format_matrix(content)
),
Styled::HardBreak => "<br>".to_string(),
Styled::BlockQuote(inner) => {
format!("<blockquote>{}</blockquote>", format_matrix(inner))
}
})
.collect()
}