export type Item = Emittable | string; export declare const DEFAULT_WIDTH = 80; export declare class Formatter { width: number; indentDelta: string; currentIndent: string; buffer: Array; get indentSize(): number; set indentSize(n: number); write(i: Item): void; newline(): void; toString(): string; withIndent(f: () => void): void; clone(): Formatter; } export declare function formatItems(i: Item[], width?: number): string; export interface Emittable { writeOn(f: Formatter): void; } export declare class Sequence implements Emittable { items: Array; constructor(items: Array); get separator(): string; get terminator(): string; writeOn(f: Formatter): void; } export declare class CommaSequence extends Sequence { get separator(): string; } export declare abstract class Grouping extends CommaSequence { abstract get open(): string; abstract get close(): string; writeHorizontally(f: Formatter): void; writeVertically(f: Formatter): void; writeOn(f: Formatter): void; } export declare class Parens extends Grouping { get open(): string; get close(): string; } export declare class OperatorSequence extends Parens { operator: string; constructor(operator: string, items: Array); get separator(): string; } export declare class Brackets extends Grouping { get open(): string; get close(): string; } export declare class AngleBrackets extends Grouping { get open(): string; get close(): string; } export declare class Braces extends Grouping { get open(): string; get close(): string; } export declare class Block extends Braces { get separator(): string; get terminator(): string; } export declare const seq: (...items: Item[]) => Sequence; export declare const commas: (...items: Item[]) => CommaSequence; export declare const parens: (...items: Item[]) => Parens; export declare const opseq: (zero: string, op: string, ...items: Item[]) => string | OperatorSequence; export declare const brackets: (...items: Item[]) => Brackets; export declare const anglebrackets: (...items: Item[]) => AngleBrackets; export declare const braces: (...items: Item[]) => Braces; export declare const block: (...items: Item[]) => Block; export declare const fnblock: (...items: Item[]) => Sequence; export declare const keyvalue: (k: string, v: Item) => Sequence;