Show More
Commit Description:
add model solution
Commit Description:
add model solution
References:
File last commit:
Show/Diff file:
Action:
node_modules/fontkit/src/tables/HVAR.js
| 44 lines
| 1.3 KiB
| application/javascript
| JavascriptLexer
|
r789 | 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) | ||||
}); | ||||