import type { Fixed, FWord, Int16, Uint16, Uint32 } from "./BinaryReader"; /** * Main function for parsing TTF files. * * @param data TTF file in binary format. * @returns a parsed TTF object. */ export declare function parseTTF(data: ArrayBuffer): TTF; export type TTF = { GPOS?: GPOSTable; cmap: CmapTable; glyf: GlyfTable; head: HeadTable; hhea: HheaTable; hmtx: HmtxTable; loca: LocaTable; maxp: MaxpTable; }; export type Table = { checksum: number; length: number; offset: number; }; export type HeadTable = { checksumAdjustment: Uint32; created: string; flags: Uint16; fontDirectionHint: Int16; fontRevision: Fixed; glyphDataFormat: Int16; indexToLocFormat: Int16; lowestRecPPEM: Uint16; macStyle: Uint16; magicNumber: Uint32; majorVersion: Uint16; minorVersion: Uint16; modified: string; unitsPerEm: Uint16; xMax: FWord; xMin: FWord; yMax: FWord; yMin: FWord; }; export type CmapTable = { encodingRecords: Array<{ encodingID: Uint16; offset: Uint32; platformID: Uint16; }>; endCodes: Array; entrySelector: Uint16; format: Uint16; glyphIndexMap: Record; idDeltas: Array; idRangeOffsets: Array; language: Uint16; length: Uint16; numTables: Uint16; rangeShift: Uint16; searchRange: Uint16; segCount: Uint16; segCountX2: Uint16; startCodes: Array; version: Uint16; }; export type MaxpTable = { numGlyphs: Uint16; version: "0.5" | "1.0"; }; export type HheaTable = { advanceWidthMax: Uint16; ascender: FWord; caretOffset: FWord; caretSlopeRise: Int16; caretSlopeRun: Int16; descender: FWord; lineGap: FWord; majorVersion: Uint16; metricDataFormat: Int16; minLeftSideBearing: FWord; minRightSideBearing: FWord; minorVersion: Uint16; numberOfHMetrics: Uint16; reserved1: Int16; reserved2: Int16; reserved3: Int16; reserved4: Int16; xMaxExtent: FWord; }; export type HmtxTable = { hMetrics: Array<{ advanceWidth: Uint16; leftSideBearing: Int16; }>; leftSideBearings: Array; }; export type LocaTable = { offsets: Array; }; export type GlyfTable = Array<{ numberOfContours: Int16; xMax: FWord; xMin: FWord; yMax: FWord; yMin: FWord; }>; export type GPOSTable = { features: Array<{ lookupListIndices: Array; paramsOffset: number; tag: string; }>; lookups: Array; }; export type GPOSLookup = { lookupFlag: number; lookupType: number; markFilteringSet?: number; subtables: Array<{ extension: ExtensionLookupType2Format1 | ExtensionLookupType2Format2; extensionLookupType: number; posFormat: number; }>; }; export type ValueRecord = { xAdvDevice?: number; xAdvance?: number; xPlaDevice?: number; xPlacement?: number; yAdvDevice?: number; yAdvance?: number; yPlaDevice?: number; yPlacement?: number; }; export type ExtensionLookupType2Format1 = { coverage: CoverageTableFormat1 | CoverageTableFormat2; pairSets: Array>; posFormat: 1; valueFormat1: number; valueFormat2: number; }; export type ClassDefFormat1 = { classes: Array; format: 1; startGlyph: number; }; export type ClassDefFormat2 = { format: 2; ranges: Array<{ class: number; endGlyphID: number; startGlyphID: number; }>; }; export type ExtensionLookupType2Format2 = { classDef1: ClassDefFormat1 | ClassDefFormat2; classDef2: ClassDefFormat1 | ClassDefFormat2; classRecords: Array>; coverage: CoverageTableFormat1 | CoverageTableFormat2; posFormat: 2; valueFormat1: number; valueFormat2: number; }; /** * https://learn.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-table */ export type CoverageTableFormat1 = { coverageFormat: 1; glyphArray: Array; }; export type CoverageTableFormat2 = { coverageFormat: 2; rangeRecords: Array<{ endGlyphID: number; startCoverageIndex: number; startGlyphID: number; }>; };