import { AbstractNode } from "../../common/AbstractNode";
import { Comment } from "../../common/Comment";
import { NodePositionInterface } from "../../common/NodePositionInterface";
import { Parser as EelParser, EelParserOptions } from '../eel/parser';
import { ParserHandoverResult, ParserInterface } from "../parserInterface";
import { Lexer } from "./lexer";
import { InlineEelNode } from "./nodes/InlineEelNode";
import { TagAttributeNode } from "./nodes/TagAttributeNode";
import { TagNode } from "./nodes/TagNode";
import { TagSpreadEelAttributeNode } from "./nodes/TagSpreadEelAttributeNode";
import { TextNode } from "./nodes/TextNode";
export interface AfxParserOptions {
    allowUnclosedTags: boolean;
    eelParserOptions?: EelParserOptions;
}
export declare class Parser implements ParserInterface {
    protected lexer: Lexer;
    nodesByType: Map<typeof AbstractNode, AbstractNode[]>;
    positionOffset: number;
    protected options: AfxParserOptions;
    constructor(lexer: Lexer, positionOffset?: number, options?: AfxParserOptions);
    protected applyOffset(position: NodePositionInterface): NodePositionInterface;
    parse(): (Comment | InlineEelNode | TextNode | TagNode)[];
    parseText(parent?: AbstractNode | undefined): Generator<InlineEelNode | TextNode, void, unknown>;
    parseJavascript(parent?: AbstractNode | undefined): TextNode;
    parseTextsOrTags(parent?: AbstractNode | undefined): Generator<Comment | InlineEelNode | TextNode | TagNode, void, unknown>;
    parseComment(): Generator<Comment, void, unknown>;
    parseTag(parent?: AbstractNode | undefined): TagNode;
    parseSpreadEelAttribute(): TagSpreadEelAttributeNode;
    parseTagAttribute(): TagAttributeNode;
    parseLazyWhitespace(): void;
    handover<T extends AbstractNode>(parser: ParserInterface, parent?: AbstractNode | undefined): Array<T>;
    protected addNodesFromHandoverResult<T extends AbstractNode>(result: ParserHandoverResult<T>, parent?: AbstractNode | undefined): void;
    receiveHandover<T extends AbstractNode>(text: string): ParserHandoverResult<T>;
    logRemaining(cap?: number | undefined): void;
    protected addNodeToNodesByType(node: AbstractNode): void;
    protected flushNodesByType(): Map<typeof AbstractNode, AbstractNode[]>;
    protected buildEelParser(): EelParser;
}
