export interface Keyword { readonly description: string; readonly example?: string; readonly name: string; } export interface KeywordBlock { readonly keywords: readonly (Keyword | string)[]; readonly kind: "keyword"; } export interface Comparison { readonly correct: string; readonly issue: string; readonly wrong: string; } export interface CompareBlock { readonly entries: readonly Comparison[]; readonly kind: "compare"; } export interface CheckBlock { readonly items: readonly string[]; readonly kind: "check"; } export interface Signature { readonly name: string; readonly purpose: string; readonly verb: string; } export interface TypeBlock { readonly kind: "type"; readonly types: readonly Signature[]; } export interface DiagramBlock { readonly grammar?: boolean; readonly kind: "diagram"; readonly text: string; } export type GrammarBlock = CheckBlock | CompareBlock | DiagramBlock | KeywordBlock | TypeBlock; export interface GrammarRule { readonly grammar: string; readonly title: string; }