#pragma once #include #include namespace ZShell::llm { // Splits a markdown document into top-level blocks for QML rendering // (cmark-gfm AST walk). Inline structure is not flattened; Text and // Heading blocks carry markdown source that QML renders with // Text.MarkdownText. // // Block map keys: // "type" int (LlmMarkdown::Type) // "level" int (Heading) // "language" QString (Code, lowercased, empty when unknown) // "code" QString (Code) // "text" QString (Text/Heading, markdown source) // "latex" QString (Math, without the $$ delimiters) class MarkdownParser { public: [[nodiscard]] static QVariantList parse(const QString& source); }; } // namespace ZShell::llm