import r from 'restructure'; import { LookupTable, StateTable1 } from './aat'; let ClassTable = new r.Struct({ length: r.uint16, coverage: r.uint16, subFeatureFlags: r.uint32, stateTable: new StateTable1 }); let WidthDeltaRecord = new r.Struct({ justClass: r.uint32, beforeGrowLimit: r.fixed32, beforeShrinkLimit: r.fixed32, afterGrowLimit: r.fixed32, afterShrinkLimit: r.fixed32, growFlags: r.uint16, shrinkFlags: r.uint16 }); let WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32); let ActionData = new r.VersionedStruct('actionType', { 0: { // Decomposition action lowerLimit: r.fixed32, upperLimit: r.fixed32, order: r.uint16, glyphs: new r.Array(r.uint16, r.uint16) }, 1: { // Unconditional add glyph action addGlyph: r.uint16 }, 2: { // Conditional add glyph action substThreshold: r.fixed32, addGlyph: r.uint16, substGlyph: r.uint16 }, 3: {}, // Stretch glyph action (no data, not supported by CoreText) 4: { // Ductile glyph action (not supported by CoreText) variationAxis: r.uint32, minimumLimit: r.fixed32, noStretchValue: r.fixed32, maximumLimit: r.fixed32 }, 5: { // Repeated add glyph action flags: r.uint16, glyph: r.uint16 } }); let Action = new r.Struct({ actionClass: r.uint16, actionType: r.uint16, actionLength: r.uint32, actionData: ActionData, padding: new r.Reserved(r.uint8, t => t.actionLength - t._currentOffset) }); let PostcompensationAction = new r.Array(Action, r.uint32); let PostCompensationTable = new r.Struct({ lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction)) }); let JustificationTable = new r.Struct({ classTable: new r.Pointer(r.uint16, ClassTable, { type: 'parent' }), wdcOffset: r.uint16, postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, { type: 'parent' }), widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, { type: 'parent', relativeTo: 'wdcOffset' })) }); export default new r.Struct({ version: r.uint32, format: r.uint16, horizontal: new r.Pointer(r.uint16, JustificationTable), vertical: new r.Pointer(r.uint16, JustificationTable) });