export interface Frontmatter { fm: Record; body: string; ok: boolean; } /** Minimal frontmatter reader: `key: value`, `- item` lists, `[a, b]` inline lists. */ export declare function parseFrontmatter(src: string): Frontmatter; /** Split a markdown table row on UNESCAPED pipes — `\|` is legal inside a cell. */ export declare function splitRow(line: string): string[]; export declare function isSeparator(cells: string[]): boolean; /** Per-line "inside a code fence" mask. Fence delimiters themselves count as inside. */ export declare function fenceMask(lines: string[]): boolean[]; export interface RawSection { heading: string | null; md: string; } /** * Split a body into ordered sections: optional preamble (prose before the * first `##`, minus the `# Title` line), then one entry per `## Heading`. */ export declare function splitSections(body: string): RawSection[]; export interface RawTable { header: string[]; rows: { cells: Record; rawCount: number; headerCount: number; }[]; } /** * Parse the table rows of a section, keyed by lowercased header (so new * optional columns never break old parsers). Multiple tables may follow one * heading with DIFFERENT columns: a row whose first cell repeats the current * header's first cell starts a new table (kb-lint semantics), and each row is * keyed by its own table's header. `header` reports the union of headers seen; * rawCount preserves the original cell count for cell/header mismatch checks. */ export declare function parseTables(section: string): RawTable; export declare const LINK_RE: RegExp;