import type { GlyphId } from "../../types.ts"; import type { Reader } from "../binary/reader.ts"; /** * COLR (Color) table parser * Defines color glyph layers */ export interface ColrTable { version: number; baseGlyphRecords: BaseGlyphRecord[]; layerRecords: LayerRecord[]; baseGlyphPaintRecords?: BaseGlyphPaintRecord[]; layerList?: Paint[]; clipList?: ClipRecord[]; varIdxMap?: number[]; itemVariationStore?: ItemVariationStore; } export interface BaseGlyphRecord { glyphId: GlyphId; firstLayerIndex: number; numLayers: number; } export interface LayerRecord { glyphId: GlyphId; paletteIndex: number; } export interface BaseGlyphPaintRecord { glyphId: GlyphId; paint: Paint; } export declare enum PaintFormat { ColrLayers = 1, Solid = 2, VarSolid = 3, LinearGradient = 4, VarLinearGradient = 5, RadialGradient = 6, VarRadialGradient = 7, SweepGradient = 8, VarSweepGradient = 9, Glyph = 10, ColrGlyph = 11, Transform = 12, VarTransform = 13, Translate = 14, VarTranslate = 15, Scale = 16, VarScale = 17, ScaleAroundCenter = 18, VarScaleAroundCenter = 19, ScaleUniform = 20, VarScaleUniform = 21, ScaleUniformAroundCenter = 22, VarScaleUniformAroundCenter = 23, Rotate = 24, VarRotate = 25, RotateAroundCenter = 26, VarRotateAroundCenter = 27, Skew = 28, VarSkew = 29, SkewAroundCenter = 30, VarSkewAroundCenter = 31, Composite = 32 } export type Paint = PaintColrLayers | PaintSolid | PaintLinearGradient | PaintRadialGradient | PaintSweepGradient | PaintGlyph | PaintColrGlyph | PaintTransform | PaintTranslate | PaintScale | PaintRotate | PaintSkew | PaintComposite; export interface PaintColrLayers { format: PaintFormat.ColrLayers; numLayers: number; firstLayerIndex: number; } export interface PaintSolid { format: PaintFormat.Solid | PaintFormat.VarSolid; paletteIndex: number; alpha: number; varIndexBase?: number; } export interface PaintLinearGradient { format: PaintFormat.LinearGradient | PaintFormat.VarLinearGradient; colorLine: ColorLine; x0: number; y0: number; x1: number; y1: number; x2: number; y2: number; } export interface PaintRadialGradient { format: PaintFormat.RadialGradient | PaintFormat.VarRadialGradient; colorLine: ColorLine; x0: number; y0: number; radius0: number; x1: number; y1: number; radius1: number; } export interface PaintSweepGradient { format: PaintFormat.SweepGradient | PaintFormat.VarSweepGradient; colorLine: ColorLine; centerX: number; centerY: number; startAngle: number; endAngle: number; } export interface PaintGlyph { format: PaintFormat.Glyph; paint: Paint; glyphId: GlyphId; } export interface PaintColrGlyph { format: PaintFormat.ColrGlyph; glyphId: GlyphId; } export interface PaintTransform { format: PaintFormat.Transform | PaintFormat.VarTransform; paint: Paint; transform: Affine2x3; } export interface PaintTranslate { format: PaintFormat.Translate | PaintFormat.VarTranslate; paint: Paint; dx: number; dy: number; } export interface PaintScale { format: PaintFormat.Scale | PaintFormat.VarScale | PaintFormat.ScaleAroundCenter | PaintFormat.VarScaleAroundCenter | PaintFormat.ScaleUniform | PaintFormat.VarScaleUniform | PaintFormat.ScaleUniformAroundCenter | PaintFormat.VarScaleUniformAroundCenter; paint: Paint; scaleX: number; scaleY: number; centerX?: number; centerY?: number; } export interface PaintRotate { format: PaintFormat.Rotate | PaintFormat.VarRotate | PaintFormat.RotateAroundCenter | PaintFormat.VarRotateAroundCenter; paint: Paint; angle: number; centerX?: number; centerY?: number; } export interface PaintSkew { format: PaintFormat.Skew | PaintFormat.VarSkew | PaintFormat.SkewAroundCenter | PaintFormat.VarSkewAroundCenter; paint: Paint; xSkewAngle: number; ySkewAngle: number; centerX?: number; centerY?: number; } export interface PaintComposite { format: PaintFormat.Composite; sourcePaint: Paint; compositeMode: CompositeMode; backdropPaint: Paint; } export interface ColorLine { extend: Extend; colorStops: ColorStop[]; } export interface ColorStop { stopOffset: number; paletteIndex: number; alpha: number; } export declare enum Extend { Pad = 0, Repeat = 1, Reflect = 2 } export declare enum CompositeMode { Clear = 0, Src = 1, Dest = 2, SrcOver = 3, DestOver = 4, SrcIn = 5, DestIn = 6, SrcOut = 7, DestOut = 8, SrcAtop = 9, DestAtop = 10, Xor = 11, Plus = 12, Screen = 13, Overlay = 14, Darken = 15, Lighten = 16, ColorDodge = 17, ColorBurn = 18, HardLight = 19, SoftLight = 20, Difference = 21, Exclusion = 22, Multiply = 23, Hue = 24, Saturation = 25, Color = 26, Luminosity = 27 } export interface Affine2x3 { xx: number; yx: number; xy: number; yy: number; dx: number; dy: number; } export interface ClipRecord { startGlyphId: GlyphId; endGlyphId: GlyphId; clipBox: ClipBox; } export interface ClipBox { format: number; xMin: number; yMin: number; xMax: number; yMax: number; varIndexBase?: number; } export interface ItemVariationStore { format: number; variationRegionListOffset: number; itemVariationDataCount: number; itemVariationDataOffsets: number[]; variationRegions: VariationRegion[]; itemVariationData: ItemVariationData[]; } export interface VariationRegion { regionAxes: RegionAxisCoordinates[]; } export interface RegionAxisCoordinates { startCoord: number; peakCoord: number; endCoord: number; } export interface ItemVariationData { itemCount: number; wordDeltaCount: number; regionIndexCount: number; regionIndexes: number[]; deltaSets: number[][]; } export interface VarColorLine extends ColorLine { varIndexBase?: number; } export interface VarColorStop extends ColorStop { varIndexBase?: number; } /** * Parse COLR table - color glyph definitions with layered or gradient fills * Supports both v0 (simple layers) and v1 (advanced paint operations) * @param reader - Reader positioned at start of COLR table * @returns Parsed COLR table with color layer and paint definitions */ export declare function parseColr(reader: Reader): ColrTable; /** * Get color layers for a glyph (v0) */ export declare function getColorLayers(colr: ColrTable, glyphId: GlyphId): LayerRecord[] | null; /** * Get paint for a glyph (v1) */ export declare function getColorPaint(colr: ColrTable, glyphId: GlyphId): Paint | null; /** * Check if glyph has color data */ export declare function hasColorGlyph(colr: ColrTable, glyphId: GlyphId): boolean; /** * Get clip box for a glyph */ export declare function getClipBox(colr: ColrTable, glyphId: GlyphId): ClipBox | null; /** * Calculate variation delta for a paint value */ export declare function getColorVariationDelta(colr: ColrTable, varIndex: number, coords: number[]): number; /** * Check if COLR table is version 1 */ export declare function isColrV1(colr: ColrTable): boolean; /** * Get the paint layer at a specific index from the layer list */ export declare function getLayerPaint(colr: ColrTable, index: number): Paint | null;