import type { GlyphId, int16, uint16, uint32 } from "../../types.ts"; import type { Reader } from "../binary/reader.ts"; /** * Extended Kerning table (kerx) * Apple Advanced Typography kerning */ export interface KerxTable { version: uint16; nTables: uint32; subtables: KerxSubtable[]; } /** * kerx subtable types */ export declare enum KerxSubtableType { OrderedList = 0, StateTable = 1, SimpleArray = 2, ControlPoint = 4, Format6 = 6 } /** * Coverage flags */ export interface KerxCoverage { vertical: boolean; crossStream: boolean; variation: boolean; } /** * Base subtable */ export interface KerxSubtableBase { length: uint32; coverage: KerxCoverage; tupleCount: uint16; } export type KerxSubtable = KerxOrderedListSubtable | KerxStateTableSubtable | KerxSimpleArraySubtable | KerxControlPointSubtable | KerxFormat6Subtable; /** * Format 0: Ordered list of kerning pairs */ export interface KerxOrderedListSubtable extends KerxSubtableBase { format: KerxSubtableType.OrderedList; nPairs: uint32; pairs: KerxPair[]; } export interface KerxPair { left: GlyphId; right: GlyphId; value: int16; } /** * Format 1: State table */ export interface KerxStateTableSubtable extends KerxSubtableBase { format: KerxSubtableType.StateTable; stateHeader: KerxStateHeader; } export interface KerxStateHeader { nClasses: uint32; classTableOffset: uint32; stateArrayOffset: uint32; entryTableOffset: uint32; valueTableOffset: uint32; } /** * Format 2: Simple array */ export interface KerxSimpleArraySubtable extends KerxSubtableBase { format: KerxSubtableType.SimpleArray; rowWidth: uint16; leftClassTable: KerxClassTable; rightClassTable: KerxClassTable; kerningArray: Int16Array; } export interface KerxClassTable { firstGlyph: GlyphId; nGlyphs: uint16; classes: Uint8Array; } /** * Format 4: Control point actions */ export interface KerxControlPointSubtable extends KerxSubtableBase { format: KerxSubtableType.ControlPoint; flags: uint32; } /** * Format 6: Extended kerning pairs */ export interface KerxFormat6Subtable extends KerxSubtableBase { format: KerxSubtableType.Format6; flags: uint32; rowCount: uint16; columnCount: uint16; rowIndexTableOffset: uint32; columnIndexTableOffset: uint32; kerningArrayOffset: uint32; kerningVectorOffset: uint32; } /** * Parse kerx table */ export declare function parseKerx(reader: Reader): KerxTable; /** * Get kerning value from kerx table */ export declare function getKerxValue(kerx: KerxTable, left: GlyphId, right: GlyphId): number;