import type { ConnectorDef, NodeDef, NoteDef, RegionDef, ArrowEnd, FrameSpec } from '../types.js'; import type { GgError } from './errors.js'; export interface ArrowSpec { ends: ArrowEnd; dashed: boolean; } export type Token = { type: 'word'; value: string; line: number; } | { type: 'id-sigil'; value: string; line: number; } | { type: 'pos'; col: number; row: number; line: number; } | { type: 'span'; from: { col: number; row: number; }; to: { col: number; row: number; }; line: number; } | { type: 'label'; value: string; line: number; } | { type: 'target-list'; ids: string[]; line: number; } | { type: 'frame-spec'; spec: FrameSpec; line: number; } | { type: 'attr'; key: string; value: string; line: number; } | { type: 'arrow'; spec: ArrowSpec; line: number; } | { type: 'body'; value: Record; line: number; } | { type: 'stmt-end'; line: number; }; export declare function tokenize(src: string): { tokens: Token[]; errors: GgError[]; }; export interface ParseLineResult { node?: NodeDef; region?: RegionDef; connector?: ConnectorDef; note?: NoteDef; /** doc-stmt body merges into the diagram-level settings. */ doc?: Record; /** When the doc statement carried a `[frame-spec]`, this is the * parsed spec — the parser collects such blocks into * `DiagramDef.frameOverrides` instead of folding them into the * base settings. */ docFrames?: FrameSpec; error?: GgError; } export interface ParsedStatements { statements: ParseLineResult[]; errors: GgError[]; } export declare function parseStatements(tokens: Token[]): ParsedStatements; declare function applyNodeAttr(node: NodeDef, key: string, value: string, line: number): GgError | null; export declare function parseLine(text: string, _raw: string, line: number): ParseLineResult; export { applyNodeAttr as _applyNodeAttr }; //# sourceMappingURL=dsl.d.ts.map