|
|
import {Feature} from './opentype';
|
|
|
import r from 'restructure';
|
|
|
|
|
|
/*******************
|
|
|
* Variation Store *
|
|
|
*******************/
|
|
|
|
|
|
let F2DOT14 = new r.Fixed(16, 'BE', 14);
|
|
|
let RegionAxisCoordinates = new r.Struct({
|
|
|
startCoord: F2DOT14,
|
|
|
peakCoord: F2DOT14,
|
|
|
endCoord: F2DOT14
|
|
|
});
|
|
|
|
|
|
let VariationRegionList = new r.Struct({
|
|
|
axisCount: r.uint16,
|
|
|
regionCount: r.uint16,
|
|
|
variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')
|
|
|
});
|
|
|
|
|
|
let DeltaSet = new r.Struct({
|
|
|
shortDeltas: new r.Array(r.int16, t => t.parent.shortDeltaCount),
|
|
|
regionDeltas: new r.Array(r.int8, t => t.parent.regionIndexCount - t.parent.shortDeltaCount),
|
|
|
deltas: t => t.shortDeltas.concat(t.regionDeltas)
|
|
|
});
|
|
|
|
|
|
let ItemVariationData = new r.Struct({
|
|
|
itemCount: r.uint16,
|
|
|
shortDeltaCount: r.uint16,
|
|
|
regionIndexCount: r.uint16,
|
|
|
regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),
|
|
|
deltaSets: new r.Array(DeltaSet, 'itemCount')
|
|
|
});
|
|
|
|
|
|
export let ItemVariationStore = new r.Struct({
|
|
|
format: r.uint16,
|
|
|
variationRegionList: new r.Pointer(r.uint32, VariationRegionList),
|
|
|
variationDataCount: r.uint16,
|
|
|
itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')
|
|
|
});
|
|
|
|
|
|
/**********************
|
|
|
* Feature Variations *
|
|
|
**********************/
|
|
|
|
|
|
let ConditionTable = new r.VersionedStruct(r.uint16, {
|
|
|
1: {
|
|
|
axisIndex: r.uint16,
|
|
|
axisIndex: r.uint16,
|
|
|
filterRangeMinValue: F2DOT14,
|
|
|
filterRangeMaxValue: F2DOT14
|
|
|
}
|
|
|
});
|
|
|
|
|
|
let ConditionSet = new r.Struct({
|
|
|
conditionCount: r.uint16,
|
|
|
conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')
|
|
|
});
|
|
|
|
|
|
let FeatureTableSubstitutionRecord = new r.Struct({
|
|
|
featureIndex: r.uint16,
|
|
|
alternateFeatureTable: new r.Pointer(r.uint32, Feature, {type: 'parent'})
|
|
|
});
|
|
|
|
|
|
let FeatureTableSubstitution = new r.Struct({
|
|
|
version: r.fixed32,
|
|
|
substitutionCount: r.uint16,
|
|
|
substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')
|
|
|
});
|
|
|
|
|
|
let FeatureVariationRecord = new r.Struct({
|
|
|
conditionSet: new r.Pointer(r.uint32, ConditionSet, {type: 'parent'}),
|
|
|
featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {type: 'parent'})
|
|
|
});
|
|
|
|
|
|
export let FeatureVariations = new r.Struct({
|
|
|
majorVersion: r.uint16,
|
|
|
minorVersion: r.uint16,
|
|
|
featureVariationRecordCount: r.uint32,
|
|
|
featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')
|
|
|
});
|
|
|
|