56 lines
2.3 KiB
Rust
56 lines
2.3 KiB
Rust
use super::{MessageComponent, MessageContent};
|
|
|
|
pub fn convert_matrix(message: &str) -> MessageContent {
|
|
todo!();
|
|
}
|
|
|
|
pub fn format_matrix(message_content: &[MessageComponent]) -> String {
|
|
message_content
|
|
.iter()
|
|
.map(|component| match component {
|
|
MessageComponent::Plain(text) => html_escape::encode_text(text).to_string(),
|
|
MessageComponent::Link { target, text } => format!(
|
|
r#"<a href="{}">{}</a>"#,
|
|
html_escape::encode_quoted_attribute(target),
|
|
format_matrix(text)
|
|
),
|
|
|
|
MessageComponent::Italic(inner) => format!("<em>{}</em>", format_matrix(inner)),
|
|
MessageComponent::Bold(inner) => format!("<strong>{}</strong>", format_matrix(inner)),
|
|
MessageComponent::Strikethrough(inner) => {
|
|
format!("<del>{}</del>", format_matrix(inner))
|
|
}
|
|
MessageComponent::Underline(inner) => format!("<u>{}</u>", format_matrix(inner)),
|
|
|
|
MessageComponent::Code(code) => {
|
|
format!("<code>{}</code>", html_escape::encode_text(code))
|
|
}
|
|
MessageComponent::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_else(|| "".to_string()),
|
|
source,
|
|
)
|
|
}
|
|
|
|
MessageComponent::Spoiler { reason, content } => format!(
|
|
"<span data-mx-spoiler{}>{}</span>",
|
|
reason
|
|
.as_ref()
|
|
.map(|reason| format!(r#"="{}""#, html_escape::encode_quoted_attribute(reason)))
|
|
.unwrap_or_else(|| "".to_string()),
|
|
format_matrix(content)
|
|
),
|
|
MessageComponent::HardBreak => "<br>".to_string(),
|
|
MessageComponent::BlockQuote(inner) => {
|
|
format!("<blockquote>{}</blockquote>", format_matrix(inner))
|
|
}
|
|
})
|
|
.collect()
|
|
}
|