import { type ClassDef } from "../../layout/structures/class-def.ts"; import { type Coverage } from "../../layout/structures/coverage.ts"; import type { GlyphId, uint16 } from "../../types.ts"; import type { Reader } from "../binary/reader.ts"; import type { GposLookup } from "./gpos.ts"; /** Position lookup record - applies a lookup at a position */ export interface PosLookupRecord { sequenceIndex: uint16; lookupListIndex: uint16; } /** Context positioning lookup (Type 7) */ export interface ContextPosLookup extends GposLookup { type: 7; subtables: ContextPosSubtable[]; } export type ContextPosSubtable = ContextPosFormat1 | ContextPosFormat2 | ContextPosFormat3; /** Format 1: Simple glyph contexts */ export interface ContextPosFormat1 { format: 1; coverage: Coverage; ruleSets: (PosContextRule[] | null)[]; } export interface PosContextRule { glyphCount: uint16; inputSequence: GlyphId[]; lookupRecords: PosLookupRecord[]; } /** Format 2: Class-based contexts */ export interface ContextPosFormat2 { format: 2; coverage: Coverage; classDef: ClassDef; classRuleSets: (PosClassRule[] | null)[]; } export interface PosClassRule { glyphCount: uint16; inputClasses: uint16[]; lookupRecords: PosLookupRecord[]; } /** Format 3: Coverage-based contexts */ export interface ContextPosFormat3 { format: 3; coverages: Coverage[]; lookupRecords: PosLookupRecord[]; } /** Chaining context positioning lookup (Type 8) */ export interface ChainingContextPosLookup extends GposLookup { type: 8; subtables: ChainingContextPosSubtable[]; } export type ChainingContextPosSubtable = ChainingContextPosFormat1 | ChainingContextPosFormat2 | ChainingContextPosFormat3; /** Format 1: Simple chaining context */ export interface ChainingContextPosFormat1 { format: 1; coverage: Coverage; chainRuleSets: (PosChainRule[] | null)[]; } export interface PosChainRule { backtrackSequence: GlyphId[]; inputSequence: GlyphId[]; lookaheadSequence: GlyphId[]; lookupRecords: PosLookupRecord[]; } /** Format 2: Class-based chaining context */ export interface ChainingContextPosFormat2 { format: 2; coverage: Coverage; backtrackClassDef: ClassDef; inputClassDef: ClassDef; lookaheadClassDef: ClassDef; chainClassRuleSets: (PosChainClassRule[] | null)[]; } export interface PosChainClassRule { backtrackClasses: uint16[]; inputClasses: uint16[]; lookaheadClasses: uint16[]; lookupRecords: PosLookupRecord[]; } /** Format 3: Coverage-based chaining context */ export interface ChainingContextPosFormat3 { format: 3; backtrackCoverages: Coverage[]; inputCoverages: Coverage[]; lookaheadCoverages: Coverage[]; lookupRecords: PosLookupRecord[]; } export declare function parseContextPos(reader: Reader, subtableOffsets: number[]): ContextPosSubtable[]; export declare function parseChainingContextPos(reader: Reader, subtableOffsets: number[]): ChainingContextPosSubtable[];