import type { Reader } from "../../font/binary/reader.ts"; import type { Tag, uint16 } from "../../types.ts"; /** * FeatureVariations table * Allows different feature substitutions based on variation axis coordinates * Used in GSUB/GPOS for variable fonts */ export interface FeatureVariations { majorVersion: number; minorVersion: number; featureVariationRecords: FeatureVariationRecord[]; } /** * Feature variation record * Contains a condition set and feature substitutions to apply when conditions are met */ export interface FeatureVariationRecord { conditionSet: ConditionSet; featureTableSubstitution: FeatureTableSubstitution; } /** * Condition set - all conditions must be met */ export interface ConditionSet { conditions: Condition[]; } /** * Single axis condition */ export interface Condition { format: number; axisIndex: uint16; filterRangeMinValue: number; filterRangeMaxValue: number; } /** * Feature table substitution * Maps feature indices to replacement feature tables */ export interface FeatureTableSubstitution { majorVersion: number; minorVersion: number; substitutions: FeatureSubstitutionRecord[]; } /** * Single feature substitution record */ export interface FeatureSubstitutionRecord { featureIndex: uint16; alternateFeature: AlternateFeature; } /** * Alternate feature table */ export interface AlternateFeature { featureParamsOffset: uint16; lookupListIndices: uint16[]; } /** * Parse FeatureVariations table */ export declare function parseFeatureVariations(reader: Reader): FeatureVariations; /** * Evaluate condition set against axis coordinates * Returns true if all conditions are met */ export declare function evaluateConditionSet(conditionSet: ConditionSet, axisCoords: number[]): boolean; /** * Find matching feature variation record for given axis coordinates * Returns the first matching record, or null if none match */ export declare function findMatchingFeatureVariation(featureVariations: FeatureVariations, axisCoords: number[]): FeatureVariationRecord | null; /** * Get substituted lookup list indices for a feature * Returns the original lookups if no substitution applies */ export declare function getSubstitutedLookups(featureVariations: FeatureVariations | null, featureIndex: number, originalLookups: uint16[], axisCoords: number[] | null): uint16[]; /** * Apply feature variations to a feature list * Returns a modified feature list with substituted lookup indices */ export declare function applyFeatureVariations(featureVariations: FeatureVariations | null, featureLookups: Map, featureIndices: Map, axisCoords: number[] | null): Map;