beth-parser
Version:
Parser library for Bethesda's Creation Engine data files
100 lines (99 loc) • 3.24 kB
TypeScript
/// <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;
}