ratatui-markdown 0.1.1

Markdown rendering, collapsible JSON/TOML trees, and rich scroll widgets for ratatui
Documentation
#[derive(Debug, Clone, PartialEq)]
pub enum MarkdownBlock {
    Heading1(String),
    Heading2(String),
    Heading3(String),
    Paragraph(Vec<String>),
    CodeBlock(String, String),
    InlineCode(String),
    ListItem(String, u8),
    Blockquote(String),
    HorizontalRule,
    BlankLine,
    Table {
        headers: Vec<String>,
        rows: Vec<Vec<String>>,
    },
}

impl MarkdownBlock {
    pub fn line_count(&self) -> usize {
        match self {
            MarkdownBlock::Heading1(_)
            | MarkdownBlock::Heading2(_)
            | MarkdownBlock::Heading3(_)
            | MarkdownBlock::InlineCode(_)
            | MarkdownBlock::HorizontalRule
            | MarkdownBlock::BlankLine => 1,
            MarkdownBlock::Paragraph(lines) => lines.len().max(1),
            MarkdownBlock::CodeBlock(_, code) => code.lines().count().max(1) + 2,
            MarkdownBlock::ListItem(_, _) => 1,
            MarkdownBlock::Blockquote(text) => text.lines().count().max(1),
            MarkdownBlock::Table { rows, .. } => {
                let header_lines = 2;
                let row_lines = rows.len() * 2 + 1;
                header_lines + row_lines
            }
        }
    }
}

#[derive(Debug)]
pub(crate) enum TextToken {
    Word(String),
    Space,
    Newline,
}