Adapt table implementation from crossink

This commit is contained in:
jpirnay
2026-05-07 21:35:14 +02:00
parent 1ca18c4575
commit 3ecbf29bd4
8 changed files with 609 additions and 76 deletions
+11 -1
View File
@@ -23,7 +23,10 @@ enum class BlockType : uint8_t {
Blockquote,
CodeBlock,
HorizontalRule,
BlankLine
BlankLine,
TableHeader, // | col | col | — header row
TableSeparator, // | --- | --- | — ignored visually
TableRow, // | val | val | — data row
};
struct ParsedLine {
@@ -31,8 +34,15 @@ struct ParsedLine {
std::vector<Span> spans;
std::string listPrefix; // "• " or "1. " etc.
uint8_t indentLevel = 0; // Nesting depth (each 4 spaces = 1 level)
// For TableHeader / TableRow: one entry per cell (already inline-parsed)
std::vector<std::vector<Span>> tableCells;
};
// Returns true if the line is a GFM pipe-table row (| ... |) or separator (| --- |).
bool isTableRow(const std::string& line);
// Returns true if the line is a GFM table separator row (| :---: | --- |).
bool isTableSeparator(const std::string& line);
// Parse a single raw line of markdown into block type and styled spans.
// |inCodeBlock| indicates whether the line is inside a fenced code block.
ParsedLine parseLine(const std::string& rawLine, bool inCodeBlock);