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 { GsubLookup } from "./gsub.ts"; /** Sequence lookup record - applies a lookup at a position */ export interface SequenceLookupRecord { sequenceIndex: uint16; lookupListIndex: uint16; } /** Context substitution lookup (Type 5) */ export interface ContextSubstLookup extends GsubLookup { type: 5; subtables: ContextSubstSubtable[]; } export type ContextSubstSubtable = ContextSubstFormat1 | ContextSubstFormat2 | ContextSubstFormat3; /** Format 1: Simple glyph contexts */ export interface ContextSubstFormat1 { format: 1; coverage: Coverage; ruleSets: (ContextRule[] | null)[]; } export interface ContextRule { glyphCount: uint16; inputSequence: GlyphId[]; lookupRecords: SequenceLookupRecord[]; } /** Format 2: Class-based contexts */ export interface ContextSubstFormat2 { format: 2; coverage: Coverage; classDef: ClassDef; classRuleSets: (ClassRule[] | null)[]; } export interface ClassRule { glyphCount: uint16; inputClasses: uint16[]; lookupRecords: SequenceLookupRecord[]; } /** Format 3: Coverage-based contexts */ export interface ContextSubstFormat3 { format: 3; coverages: Coverage[]; lookupRecords: SequenceLookupRecord[]; } /** Chaining context substitution lookup (Type 6) */ export interface ChainingContextSubstLookup extends GsubLookup { type: 6; subtables: ChainingContextSubstSubtable[]; } export type ChainingContextSubstSubtable = ChainingContextFormat1 | ChainingContextFormat2 | ChainingContextFormat3; /** Format 1: Simple chaining context */ export interface ChainingContextFormat1 { format: 1; coverage: Coverage; chainRuleSets: (ChainRule[] | null)[]; } export interface ChainRule { backtrackSequence: GlyphId[]; inputSequence: GlyphId[]; lookaheadSequence: GlyphId[]; lookupRecords: SequenceLookupRecord[]; } /** Format 2: Class-based chaining context */ export interface ChainingContextFormat2 { format: 2; coverage: Coverage; backtrackClassDef: ClassDef; inputClassDef: ClassDef; lookaheadClassDef: ClassDef; chainClassRuleSets: (ChainClassRule[] | null)[]; } export interface ChainClassRule { backtrackClasses: uint16[]; inputClasses: uint16[]; lookaheadClasses: uint16[]; lookupRecords: SequenceLookupRecord[]; } /** Format 3: Coverage-based chaining context */ export interface ChainingContextFormat3 { format: 3; backtrackCoverages: Coverage[]; inputCoverages: Coverage[]; lookaheadCoverages: Coverage[]; lookupRecords: SequenceLookupRecord[]; } export declare function parseContextSubst(reader: Reader, subtableOffsets: number[]): ContextSubstSubtable[]; export declare function parseChainingContextSubst(reader: Reader, subtableOffsets: number[]): ChainingContextSubstSubtable[];