import type { F2Dot14, Fixed, int16, int32, Offset16, Offset32, Tag, uint8, uint16, uint32 } from "../../types.ts"; /** * Zero-copy binary reader for OpenType font data. * All multi-byte values are big-endian per OpenType spec. */ export declare class Reader { private readonly data; private readonly start; private readonly end; private pos; constructor(buffer: ArrayBuffer | DataView, offset?: number, length?: number); /** Current read position relative to start */ get offset(): number; /** Bytes remaining to read */ get remaining(): number; /** Total length of this reader's view */ get length(): number; /** Seek to absolute offset (relative to this reader's start) */ seek(offset: number): void; /** Skip bytes */ skip(bytes: number): void; /** Create a sub-reader (zero-copy slice) */ slice(offset: number, length: number): Reader; /** Create a sub-reader from current position */ sliceFrom(offset: number): Reader; /** Peek at a value without advancing position */ peek(fn: () => T): T; uint8(): uint8; int8(): number; uint16(): uint16; int16(): int16; uint32(): uint32; int32(): int32; /** 16.16 fixed-point number */ fixed(): Fixed; /** 2.14 fixed-point number */ f2dot14(): F2Dot14; /** Signed 16-bit integer in font design units */ fword(): int16; /** Unsigned 16-bit integer in font design units */ ufword(): uint16; /** 64-bit signed integer (seconds since 1904-01-01) */ longDateTime(): bigint; /** 4-byte ASCII tag as packed uint32 */ tag(): Tag; /** 4-byte ASCII tag as string */ tagString(): string; /** 16-bit offset */ offset16(): Offset16; /** 32-bit offset */ offset32(): Offset32; /** 24-bit unsigned integer */ uint24(): number; uint8Array(count: number): Uint8Array; uint16Array(count: number): Uint16Array; int16Array(count: number): Int16Array; uint32Array(count: number): Uint32Array; /** Read array using custom reader function */ array(count: number, readFn: (reader: Reader) => T): T[]; /** Read ASCII string of given length */ ascii(length: number): string; /** Read UTF-16BE string (used in 'name' table) */ utf16be(length: number): string; /** Check if there are enough bytes remaining */ hasRemaining(bytes: number): boolean; /** Throw if not enough bytes remaining */ ensureRemaining(bytes: number): void; /** Get raw bytes as Uint8Array (zero-copy view) */ bytes(length: number): Uint8Array; /** Read value at specific offset without moving position */ readAt(offset: number, fn: (reader: Reader) => T): T; }