/** @private */
export declare class StringScanner {
    charIndex: number;
    readonly string: string;
    private readonly charCount;
    private readonly charsToBytes;
    private readonly length;
    private readonly multiByteMode;
    constructor(string: string);
    /**
     * Whether the current character index is at the end of the input string.
     */
    get isEnd(): boolean;
    /**
     * Returns the number of characters in the given string, which may differ from
     * the byte length if the string contains multibyte characters.
     */
    protected charLength(string: string, multiByteSafe?: boolean): number;
    /**
     * Advances the scanner by the given number of characters, stopping if the end
     * of the string is reached.
     */
    advance(count?: number): void;
    /**
     * Returns the byte index of the given character index in the string. The two
     * may differ in strings that contain multibyte characters.
     */
    charIndexToByteIndex(charIndex?: number): number;
    /**
     * Consumes and returns the given number of characters if possible, advancing
     * the scanner and stopping if the end of the string is reached.
     *
     * If no characters could be consumed, an empty string will be returned.
     */
    consume(charCount?: number): string;
    /**
     * Consumes and returns the given number of bytes if possible, advancing the
     * scanner and stopping if the end of the string is reached.
     *
     * It's up to the caller to ensure that the given byte count doesn't split a
     * multibyte character.
     *
     * If no bytes could be consumed, an empty string will be returned.
     */
    consumeBytes(byteCount: number): string;
    /**
     * Consumes and returns all characters for which the given function returns
     * `true`, stopping when `false` is returned or the end of the input is
     * reached.
     */
    consumeMatchFn(fn: (char: string) => boolean): string;
    /**
     * Consumes the given string if it exists at the current character index, and
     * advances the scanner.
     *
     * If the given string doesn't exist at the current character index, an empty
     * string will be returned and the scanner will not be advanced.
     */
    consumeString(stringToConsume: string): string;
    /**
     * Consumes characters until the given global regex is matched, advancing the
     * scanner up to (but not beyond) the beginning of the match. If the regex
     * doesn't match, nothing will be consumed.
     *
     * Returns the consumed string, or an empty string if nothing was consumed.
     */
    consumeUntilMatch(regex: RegExp): string;
    /**
     * Consumes characters until the given string is found, advancing the scanner
     * up to (but not beyond) that point. If the string is never found, nothing
     * will be consumed.
     *
     * Returns the consumed string, or an empty string if nothing was consumed.
     */
    consumeUntilString(searchString: string): string;
    /**
     * Returns the given number of characters starting at the current character
     * index, without advancing the scanner and without exceeding the end of the
     * input string.
     */
    peek(count?: number): string;
    /**
     * Resets the scanner position to the given character _index_, or to the start
     * of the input string if no index is given.
     *
     * If _index_ is negative, the scanner position will be moved backward by that
     * many characters, stopping if the beginning of the string is reached.
     */
    reset(index?: number): void;
}
//# sourceMappingURL=StringScanner.d.ts.map