import r from 'restructure'; import {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype'; import {ItemVariationStore} from './variations'; let BaseCoord = new r.VersionedStruct(r.uint16, { 1: { // Design units only coordinate: r.int16 // X or Y value, in design units }, 2: { // Design units plus contour point coordinate: r.int16, // X or Y value, in design units referenceGlyph: r.uint16, // GlyphID of control glyph baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph }, 3: { // Design units plus Device table coordinate: r.int16, // X or Y value, in design units deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value } }); let BaseValues = new r.Struct({ defaultIndex: r.uint16, // Index of default baseline for this script-same index in the BaseTagList baseCoordCount: r.uint16, baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount') }); let FeatMinMaxRecord = new r.Struct({ tag: new r.String(4), // 4-byte feature identification tag-must match FeatureTag in FeatureList minCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}), // May be NULL maxCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}) // May be NULL }); let MinMax = new r.Struct({ minCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL maxCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL featMinMaxCount: r.uint16, // May be 0 featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order }); let BaseLangSysRecord = new r.Struct({ tag: new r.String(4), // 4-byte language system identification tag minMax: new r.Pointer(r.uint16, MinMax, {type: 'parent'}) }); let BaseScript = new r.Struct({ baseValues: new r.Pointer(r.uint16, BaseValues), // May be NULL defaultMinMax: new r.Pointer(r.uint16, MinMax), // May be NULL baseLangSysCount: r.uint16, // May be 0 baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag }); let BaseScriptRecord = new r.Struct({ tag: new r.String(4), // 4-byte script identification tag script: new r.Pointer(r.uint16, BaseScript, {type: 'parent'}) }); let BaseScriptList = new r.Array(BaseScriptRecord, r.uint16); // Array of 4-byte baseline identification tags-must be in alphabetical order let BaseTagList = new r.Array(new r.String(4), r.uint16); let Axis = new r.Struct({ baseTagList: new r.Pointer(r.uint16, BaseTagList), // May be NULL baseScriptList: new r.Pointer(r.uint16, BaseScriptList) }); export default new r.VersionedStruct(r.uint32, { header: { horizAxis: new r.Pointer(r.uint16, Axis), // May be NULL vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL }, 0x00010000: {}, 0x00010001: { itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore) } });