import { _PdfCrossReference } from './pdf-cross-reference';
/**
 * Represents an internal PDF name object with interning support.
 *
 * @private
 */
export declare class _PdfName {
    constructor(name: string);
    name: string;
    static get(name: string): _PdfName;
}
/**
 * Represents an internal PDF command/operator token.
 *
 * @private
 */
export declare class _PdfCommand {
    constructor(command: string);
    command: string;
    static get(command: string): _PdfCommand;
}
/**
 * Represents an internal indirect object reference (object number and generation).
 *
 * @private
 */
export declare class _PdfReference {
    constructor(objectNumber: number, gen: number);
    objectNumber: number;
    generationNumber: number;
    /**
     * Indicates whether this reference points to a newly created object.
     *
     * @private
     */
    _isNew: boolean;
    toString(): string;
    static get(objectNumber: number, generationNumber: number): _PdfReference;
}
/**
 * Maintains a set of object references, primarily for cycle detection and tracking.
 *
 * @private
 */
export declare class _PdfReferenceSet {
    constructor(parent?: any);
    /**
     * Backing set that stores reference identity strings.
     *
     * @private
     */
    _set: Set<_PdfReference>;
    has(ref: any): boolean;
    put(ref: any): void;
    remove(ref: any): void;
    clear(): void;
}
/**
 * Provides a cache keyed by reference identity strings for quick object lookup.
 *
 * @private
 */
export declare class _PdfReferenceSetCache {
    constructor();
    /**
     * Internal map from reference string or object id to cached object.
     *
     * @private
     */
    _map: any;
    readonly size: number;
    get(ref: _PdfReference): any;
    has(ref: _PdfReference): boolean;
    put(ref: _PdfReference, obj: any): void;
    set(objId: string, obj: any): void;
    clear(): void;
}
export interface IDictionaryPair<K, V> {
    key: K;
    value: V;
}
export declare class Dictionary<K, V> {
    protected table: {
        [key: string]: IDictionaryPair<K, V>;
    };
    protected nElements: number;
    protected toStr: (key: K) => string;
    constructor(toStringFunction?: (key: K) => string);
    getValue(key: K): V;
    setValue(key: K, value: V): V;
    keys(): K[];
    containsKey(key: K): boolean;
    _size(): number;
}
/**
 * Represents a low-level PDF dictionary with cross-reference aware accessors.
 *
 * @private
 */
export declare class _PdfDictionary {
    constructor(xref?: _PdfCrossReference);
    /**
     * Internal storage for dictionary key-value pairs.
     *
     * @private
     */
    _map: any;
    /**
     * Cross-reference table used to resolve indirect references.
     *
     * @private
     */
    _crossReference: _PdfCrossReference;
    objId: any;
    /**
     * Indicates whether this dictionary represents a newly created object.
     *
     * @private
     */
    _isNew: boolean;
    suppressEncryption: boolean;
    /**
     * Indicates whether the dictionary has been modified since loading.
     *
     * @private
     */
    _updated: boolean;
    isCatalog: boolean;
    /**
     * Holds the current resolved object context, if any.
     *
     * @private
     */
    _currentObj: any;
    /**
     * Indicates whether this dictionary corresponds to a font object.
     *
     * @private
     */
    _isFont: boolean;
    /**
     * Indirect reference associated with this dictionary.
     *
     * @private
     */
    _reference: _PdfReference;
    /**
     * Indicates whether this dictionary has been processed during parsing.
     *
     * @private
     */
    _isProcessed: boolean;
    /**
     * Indicates whether this dictionary represents a signature object.
     *
     * @private
     */
    _isSignature: boolean;
    /**
     * Indicates whether this dictionary has been visited to prevent circular dependencies.
     *
     * @private
     */
    _isVisited: boolean;
    readonly size: number;
    assignXref(xref: any): void;
    getRaw(key: string): any;
    getRawValues(): any;
    get(key1: string, key2?: string, key3?: string): any;
    getArray(key1: string, key2?: string, key3?: string): any[] | undefined;
    set(key: string, value: any): void;
    has(key: string): boolean;
    forEach(callback: any): void;
    update(key: string, value: any): void;
    static getEmpty(xref: _PdfCrossReference): _PdfDictionary;
    static merge(xref: _PdfCrossReference, dictionaryArray: Array<any>, mergeSubDictionary?: boolean): _PdfDictionary;
    /**
     * Initializes the dictionary with default state and assigns the cross-reference if provided.
     *
     * @private
     * @param {_PdfCrossReference} [xref] Cross-reference table for resolving references.
     */
    _initialize(xref?: _PdfCrossReference): void;
    /**
     * Retrieves a raw value by trying up to three alternative keys without dereferencing.
     *
     * @private
     * @param {string} key1 Primary key to look up.
     * @param {string} [key2] Secondary key to try if the first is missing.
     * @param {string} [key3] Tertiary key to try if the first two are missing.
     * @returns {any} The stored value, if present.
     */
    _get(key1: string, key2?: string, key3?: string): any;
}
/**
 * Represents a null placeholder for internal use.
 *
 * @private
 */
export declare class _PdfNull {
    constructor(value?: any);
    value: any;
}
/**
 * Clears all primitive object intern caches for names, commands, and references.
 *
 * @private
 */
export declare function _clearPrimitiveCaches(): void;
/**
 * Determines whether a value is a PDF name and optionally matches the given name.
 *
 * @private
 * @param {any} value The value to test.
 * @param {string} name Optional name to compare against.
 * @returns {boolean} `true` if the value is a name (and matches when provided).
 */
export declare function _isName(value: any, name: string): boolean;
/**
 * Determines whether a value is a PDF command and optionally matches the given command string.
 *
 * @private
 * @param {any} value The value to test.
 * @param {string} command Optional command string to compare against.
 * @returns {boolean} `true` if the value is a command (and matches when provided).
 */
export declare function _isCommand(value: any, command: string): boolean;
