import { TokenType, TokensType } from '../model'; import { BasicInlineTokenMap } from '../inline/model'; export const enum BlockTag { Space, Heading, Paragraph, Quote, Footnotes, List, OrdList, Table, Code, Math, Hr, Text } export const enum BlockOrder { Newline, Code, Fences, Math, Heading, NpTable, Hr, Quote, List, Abbrev, Footnotes, Def, Table, LHeading, Paragraph, Text, } export const enum BlockAlign { None, Left, Center, Right, } export interface BlockHeading { [BlockTag.Heading]: { i: number; // index n: number; // level _: TokensType; }; } export interface BlockPhrase { _: TokensType; } export interface BlockParagraph { [BlockTag.Paragraph]: BlockPhrase; } export interface BlockText { [BlockTag.Text]: BlockPhrase; } export interface BlockNested { _: TokensType; } export interface BlockQuote { [BlockTag.Quote]: BlockNested; } export interface BlockFootnote extends BlockNested { i: number; // offset l: string; } export interface BlockFootnotes { [BlockTag.Footnotes]: { i: number; // offset _: BlockFootnote[]; }; } export interface BlockList { [BlockTag.List]: { _: BlockListItem[]; }; } export interface BlockOrdList { [BlockTag.OrdList]: { s?: number; // start number _: BlockListItem[]; }; } export interface BlockListItem { t?: 1; // is task item c?: 1; // is checked _: TokensType; } export interface BlockTable { [BlockTag.Table]: { h: BlockTableCell[]; a: BlockAlign[]; _: BlockTableRow[]; }; } export type BlockTableCell = TokensType; export type BlockTableRow = BlockTableCell[]; export interface BlockHr { [BlockTag.Hr]: BlockEmpty; } export interface BlockEmpty { } export interface BlockCode { [BlockTag.Code]: { l?: string; /* language */ _: string; /* code source */ }; } export interface BlockMath { [BlockTag.Math]: { s?: string; /* specification */ _: string; /* math equations */ }; } export interface BlockSpace { [BlockTag.Space]: BlockEmpty; } export interface BlockTokenMap extends BlockSpace, BlockCode, BlockHeading, BlockHr, BlockQuote, BlockList, BlockOrdList, BlockParagraph, BlockText, BlockTable { } // Metas export interface MetaHeading { t: string; // text n: number; // level } export interface MetaHeadings { h: MetaHeading[]; } export interface MetaLink { l: string; // href t?: string; // title } export interface MetaLinks { l: Record; } export interface MetaAbbrevs { a: Record; } export interface MetaFootnotes { f: string[]; /* note anchors */ } export interface MetaData extends MetaHeadings, MetaLinks { } // Basics export interface BasicBlockTokenMap extends BlockTokenMap { } export type BasicBlockToken = TokenType;