import type { CodeToTokensOptions, GrammarState, HighlighterCore, HighlighterGeneric, ThemedToken } from 'shiki';
export type ShikiStreamTokenizerOptions = CodeToTokensOptions<string, string> & {
    highlighter: HighlighterCore | HighlighterGeneric<any, any>;
};
export interface ShikiStreamTokenizerEnqueueResult {
    /**
     * 要撤回的行数
     */
    recall: number;
    /**
     * 稳定行
     */
    stable: ThemedToken[][];
    /**
     * 不稳定行
     */
    unstable: ThemedToken[][];
}
/**
 * 修改自 shiki-stream 的 tokenizer。
 *
 * 和 shiki-stream 实现的不同：
 * - tokenizer 会拆分代码块为两个 subtrunk，第一个 subtrunk 可以包含多行。
 * - 这个实现可以避免 chunk 过大时引入额外开销。
 */
export declare class ShikiStreamTokenizer {
    readonly options: ShikiStreamTokenizerOptions;
    linesUnstable: ThemedToken[][];
    lastUnstableCodeChunk: string;
    lastStableGrammarState: GrammarState | undefined;
    constructor(options: ShikiStreamTokenizerOptions);
    /**
     * 使用 tokenizer 处理一个代码片段。
     */
    enqueue(chunk: string): Promise<ShikiStreamTokenizerEnqueueResult>;
    close(): {
        stable: ThemedToken[][];
    };
    clear(): void;
}
/**
 * 将代码字符串 chunk 按行分割为至多两个 subtrunks
 * @param chunk 代码字符串
 * @returns subtrunks 数组
 */
export declare function splitToSubTrunks(chunk: string): string[];
