use crate::widgets::markdown_widget::foundation::elements::{ElementKind, TextSegment};
fn segments_to_text(segments: &[TextSegment]) -> String {
segments
.iter()
.map(|seg| match seg {
TextSegment::Plain(t) => t.clone(),
TextSegment::Bold(t) => t.clone(),
TextSegment::Italic(t) => t.clone(),
TextSegment::BoldItalic(t) => t.clone(),
TextSegment::InlineCode(t) => format!("`{}`", t),
TextSegment::Link { text, .. } => text.clone(),
TextSegment::Strikethrough(t) => t.clone(),
TextSegment::Html(t) => t.clone(),
TextSegment::Checkbox(_) => String::new(),
})
.collect::<Vec<_>>()
.join("")
}
pub fn element_to_plain_text(kind: &ElementKind) -> String {
match kind {
ElementKind::Heading { text, .. } => segments_to_text(text),
ElementKind::Paragraph(segments) => segments_to_text(segments),
ElementKind::ListItem { content, .. } => segments_to_text(content),
ElementKind::Blockquote { content, .. } => segments_to_text(content),
ElementKind::CodeBlockHeader { language, .. } => format!("```{}", language),
ElementKind::CodeBlockContent { content, .. } => content.clone(),
ElementKind::TableRow { cells, .. } => cells.join(" | "),
ElementKind::Frontmatter { fields, .. } => fields
.iter()
.map(|(k, v)| format!("{}: {}", k, v))
.collect::<Vec<_>>()
.join(", "),
ElementKind::FrontmatterStart { context_id, .. } => {
context_id.clone().unwrap_or_else(|| "---".to_string())
}
ElementKind::FrontmatterField { key, value } => format!("{}: {}", key, value),
ElementKind::FrontmatterEnd => "---".to_string(),
_ => String::new(),
}
}