import type MarkdownIt from 'markdown-it';
import type Token from 'markdown-it/lib/token.js';
import type { DirectiveSpec, GenericNode, RoleSpec } from 'myst-common';
import type { Text } from 'myst-spec';
import type { VFile } from 'vfile';
import type { MathExtensionOptions } from './math.js';
export type MdastOptions = {
    handlers?: Record<string, TokenHandlerSpec>;
    hoistSingleImagesOutofParagraphs?: boolean;
    nestBlocks?: boolean;
};
export type TokenHandlerSpec = {
    type: string;
    getAttrs?: (token: Token, tokens: Token[], index: number, state: MarkdownParseState) => Record<string, any>;
    attrs?: Record<string, any>;
    noCloseToken?: boolean;
    isText?: boolean;
    isLeaf?: boolean;
};
export type AllOptions = {
    vfile: VFile;
    markdownit: MarkdownIt.Options;
    extensions: {
        smartquotes?: boolean;
        colonFences?: boolean;
        frontmatter?: boolean;
        math?: boolean | MathExtensionOptions;
        footnotes?: boolean;
        citations?: boolean;
        deflist?: boolean;
        tasklist?: boolean;
        tables?: boolean;
        blocks?: boolean;
        strikethrough?: boolean;
    };
    mdast: MdastOptions;
    directives: DirectiveSpec[];
    roles: RoleSpec[];
};
export declare function withoutTrailingNewline(str: string): string;
/** MarkdownParseState tracks the context of a running token stream.
 *
 * Loosely based on prosemirror-markdown
 */
export declare class MarkdownParseState {
    src: string;
    stack: GenericNode[];
    handlers: Record<string, TokenHandler>;
    constructor(src: string, handlers: Record<string, TokenHandlerSpec>);
    top(): GenericNode;
    addNode(node?: GenericNode): GenericNode | undefined;
    addText(text: string, token: Token, type?: string, attrs?: Record<string, any>): GenericNode<Record<string, any>> | Text | undefined;
    openNode(type: string, token: Token, attrs: Record<string, any>, isLeaf?: boolean): void;
    closeNode(): GenericNode | undefined;
    parseTokens(tokens?: Token[] | null): void;
    _lastPosition: GenericNode['position'];
    addPositionsToNode(node: GenericNode, token: Token): void;
}
type TokenHandler = (state: MarkdownParseState, token: Token, tokens: Token[], index: number) => void;
export {};
//# sourceMappingURL=fromMarkdown.d.ts.map