import { Node, Element, DataNode, NodeWithChildren, Document } from "./node";
export * from "./node";
export interface DomHandlerOptions {
    /**
     * Add a `startIndex` property to nodes.
     * When the parser is used in a non-streaming fashion, `startIndex` is an integer
     * indicating the position of the start of the node in the document.
     *
     * @default false
     */
    withStartIndices?: boolean;
    /**
     * Add an `endIndex` property to nodes.
     * When the parser is used in a non-streaming fashion, `endIndex` is an integer
     * indicating the position of the end of the node in the document.
     *
     * @default false
     */
    withEndIndices?: boolean;
    /**
     * Replace all whitespace with single spaces.
     *
     * **Note:** Enabling this might break your markup.
     *
     * @default false
     * @deprecated
     */
    normalizeWhitespace?: boolean;
    /**
     * Treat the markup as XML.
     *
     * @default false
     */
    xmlMode?: boolean;
}
interface ParserInterface {
    startIndex: number | null;
    endIndex: number | null;
}
declare type Callback = (error: Error | null, dom: Node[]) => void;
declare type ElementCallback = (element: Element) => void;
export declare class DomHandler {
    /** The elements of the DOM */
    dom: Node[];
    /** The root element for the DOM */
    root: Document;
    /** Called once parsing has completed. */
    private readonly callback;
    /** Settings for the handler. */
    private readonly options;
    /** Callback whenever a tag is closed. */
    private readonly elementCB;
    /** Indicated whether parsing has been completed. */
    private done;
    /** Stack of open tags. */
    protected tagStack: NodeWithChildren[];
    /** A data node that is still being written to. */
    protected lastNode: DataNode | null;
    /** Reference to the parser instance. Used for location information. */
    private parser;
    /**
     * @param callback Called once parsing has completed.
     * @param options Settings for the handler.
     * @param elementCB Callback whenever a tag is closed.
     */
    constructor(callback?: Callback | null, options?: DomHandlerOptions | null, elementCB?: ElementCallback);
    onparserinit(parser: ParserInterface): void;
    onreset(): void;
    onend(): void;
    onerror(error: Error): void;
    onclosetag(): void;
    onopentag(name: string, attribs: {
        [key: string]: string;
    }): void;
    ontext(data: string): void;
    oncomment(data: string): void;
    oncommentend(): void;
    oncdatastart(): void;
    oncdataend(): void;
    onprocessinginstruction(name: string, data: string): void;
    protected handleCallback(error: Error | null): void;
    protected addNode(node: Node): void;
}
export default DomHandler;
//# sourceMappingURL=index.d.ts.map