import { Reader } from "../binary/reader.ts"; /** * CFF2 (Compact Font Format 2) table parser * Used by variable fonts with PostScript outlines */ export interface Cff2Table { version: { major: number; minor: number; }; topDict: Cff2TopDict; globalSubrs: Uint8Array[]; charStrings: Uint8Array[]; fdArray: Cff2FDDict[]; fdSelect: Cff2FDSelect | null; vstore: ItemVariationStore | null; } export interface Cff2TopDict { charStrings?: number; fdArray?: number; fdSelect?: number; vstore?: number; fontMatrix?: number[]; } export interface Cff2PrivateDict { blueValues?: number[]; otherBlues?: number[]; familyBlues?: number[]; familyOtherBlues?: number[]; blueScale?: number; blueShift?: number; blueFuzz?: number; stdHW?: number; stdVW?: number; stemSnapH?: number[]; stemSnapV?: number[]; languageGroup?: number; expansionFactor?: number; subrs?: number; vsindex?: number; blend?: number[]; } export interface Cff2FDDict { fontName?: string; private?: Cff2PrivateDict; privateOffset?: number; privateSize?: number; localSubrs?: Uint8Array[]; } export interface Cff2FDSelect { format: number; select: (glyphId: number) => number; } export interface ItemVariationStore { format: number; variationRegionList: VariationRegionList; itemVariationData: ItemVariationData[]; } export interface VariationRegionList { axisCount: number; regionCount: number; regions: VariationRegion[]; } export interface VariationRegion { axes: RegionAxisCoordinates[]; } export interface RegionAxisCoordinates { startCoord: number; peakCoord: number; endCoord: number; } export interface ItemVariationData { itemCount: number; regionIndexCount: number; regionIndexes: number[]; deltaSets: number[][]; } /** * Parse CFF2 table */ export declare function parseCff2(reader: Reader): Cff2Table; /** * Parse CFF2 INDEX structure (uses 32-bit count) */ declare function parseIndex(reader: Reader): Uint8Array[]; /** * Read offset of given size */ declare function readOffset(reader: Reader, offSize: number): number; /** * Parse a CFF2 DICT structure */ declare function parseDict(reader: Reader): Map; /** * Parse real number */ declare function parseReal(reader: Reader): number; /** * Parse CFF2 Top DICT */ declare function parseCff2TopDict(reader: Reader): Cff2TopDict; /** * Parse CFF2 FD DICT */ declare function parseCff2FDDict(reader: Reader): Cff2FDDict; /** * Parse CFF2 Private DICT */ declare function parseCff2PrivateDict(reader: Reader): Cff2PrivateDict; /** * Convert delta-encoded values to absolute */ declare function deltaToAbsolute(deltas: number[]): number[]; /** * Parse FDSelect structure */ declare function parseFDSelect(reader: Reader, numGlyphs: number): Cff2FDSelect; /** * Parse ItemVariationStore */ declare function parseItemVariationStore(reader: Reader): ItemVariationStore; /** * Parse VariationRegionList */ declare function parseVariationRegionList(reader: Reader): VariationRegionList; /** * Parse ItemVariationData */ declare function parseItemVariationData(reader: Reader): ItemVariationData; /** * Calculate variation delta for given coordinates */ export declare function calculateVariationDelta(vstore: ItemVariationStore, outerIndex: number, innerIndex: number, normalizedCoords: number[]): number; export declare const __testing: { parseIndex: typeof parseIndex; readOffset: typeof readOffset; parseDict: typeof parseDict; parseReal: typeof parseReal; parseCff2TopDict: typeof parseCff2TopDict; parseCff2FDDict: typeof parseCff2FDDict; parseCff2PrivateDict: typeof parseCff2PrivateDict; deltaToAbsolute: typeof deltaToAbsolute; parseFDSelect: typeof parseFDSelect; parseItemVariationStore: typeof parseItemVariationStore; parseVariationRegionList: typeof parseVariationRegionList; parseItemVariationData: typeof parseItemVariationData; }; export {};