UNPKG

beth-parser

Version:

Parser library for Bethesda's Creation Engine data files

100 lines (99 loc) 3.24 kB
/// <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; }