/// <reference types="node" />
import { DataSource } from "../../source";
/**
 * Handle group based modfile entry.
 * @param type Group type.
 * @param size Children data size.
 * @param label Group label.
 * @param parse Parse children function.
 */
export declare type GroupHandler = (type: number, size: number, label: number, parse: ParseChildren) => void;
/**
 * Handle record modfile entry.
 * @param type Record type.
 * @param size Data size (potentially after compression).
 * @param flags Record flags.
 * @param formId Form identifier.
 * @param parse Parse children function.
 */
export declare type RecordHandler = (type: number, size: number, flags: number, formId: number, parse: ParseFields) => void;
/**
 * Group children handler.
 */
export interface ChildHandler {
    /**
     * Handle group child entry.
     */
    handleGroup: GroupHandler;
    /**
     * Handle record child entry.
     */
    handleRecord: RecordHandler;
}
/**
 * Handle field based modfile entry.
 * @param type Field type.
 * @param size Data size.
 * @param buffer Data buffer.
 * @param offset Data offset within the buffer.
 */
export declare type FieldHandler = (type: number, size: number, buffer: Buffer, offset: number) => void;
/**
 * Parse record fields.
 * @param handler Field handler.
 */
export declare type ParseFields = (handler: FieldHandler) => void;
/**
 * Parse group children.
 * @param handler Group child handler.
 */
export declare type ParseChildren = (handler: ChildHandler) => void;
/**
 * Simple parser for Bethesda's ESM/ESP modfiles.
 * Parser reads provided data source and processes entries via provided entry handler.
 */
export default class ModfileParser {
    private source;
    constructor(source: DataSource);
    /**
     * Start modfile parsing with the given handler.
     * @param handler Top-level modfile handler.
     */
    parse(handler: ChildHandler): void;
    /**
     * Parse next entry and return its size in bytes.
     * @param handler Current modfile handler.
     * @param assert Whether to signal error when there is no content.
     * @returns Number of processed bytes or zero for EOF.
     */
    private parseNext;
    /**
     * Parse group based entry and return its size (including header).
     * @param buffer Buffer with group header.
     * @param handler Modfile handler to use.
     */
    private parseGroup;
    /**
     * Parse record based entry and return size of its data.
     * @param type Record type.
     * @param buffer Buffer with record header.
     * @param handler Modfile handler to use.
     * @returns Number of processed bytes.
     */
    private parseRecord;
    /**
     * Parse field based entries.
     * @param buffer Byffer with field header.
     * @param handler Modfile handler to use.
     * @returns Number of processed bytes.
     */
    private parseFields;
    /**
     * Parse field at the specified offset.
     * @param buffer Data buffer all the field data.
     * @param offset Offset of field data in the buffer.
     * @param size Size of field data.
     * @param handler Modfile handler to use.
     */
    private parseField;
}
