Current File : /home/tradevaly/www/node_modules/fontkit/src/tables/HVAR.js |
import r from 'restructure';
import {resolveLength} from 'restructure/src/utils';
import {ItemVariationStore} from './variations';
// TODO: add this to restructure
class VariableSizeNumber {
constructor(size) {
this._size = size;
}
decode(stream, parent) {
switch (this.size(0, parent)) {
case 1: return stream.readUInt8();
case 2: return stream.readUInt16BE();
case 3: return stream.readUInt24BE();
case 4: return stream.readUInt32BE();
}
}
size(val, parent) {
return resolveLength(this._size, null, parent);
}
}
let MapDataEntry = new r.Struct({
entry: new VariableSizeNumber(t => ((t.parent.entryFormat & 0x0030) >> 4) + 1),
outerIndex: t => t.entry >> ((t.parent.entryFormat & 0x000F) + 1),
innerIndex: t => t.entry & ((1 << ((t.parent.entryFormat & 0x000F) + 1)) - 1)
});
let DeltaSetIndexMap = new r.Struct({
entryFormat: r.uint16,
mapCount: r.uint16,
mapData: new r.Array(MapDataEntry, 'mapCount')
});
export default new r.Struct({
majorVersion: r.uint16,
minorVersion: r.uint16,
itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),
advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),
LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),
RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)
});