Current File : /home/tradevaly/www/node_modules/fontkit/src/tables/morx.js |
import r from 'restructure';
import { UnboundedArray, LookupTable, StateTable } from './aat';
let LigatureData = {
action: r.uint16
};
let ContextualData = {
markIndex: r.uint16,
currentIndex: r.uint16
};
let InsertionData = {
currentInsertIndex: r.uint16,
markedInsertIndex: r.uint16
};
let SubstitutionTable = new r.Struct({
items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable))
});
let SubtableData = new r.VersionedStruct('type', {
0: { // Indic Rearrangement Subtable
stateTable: new StateTable
},
1: { // Contextual Glyph Substitution Subtable
stateTable: new StateTable(ContextualData),
substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)
},
2: { // Ligature subtable
stateTable: new StateTable(LigatureData),
ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),
components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),
ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))
},
4: { // Non-contextual Glyph Substitution Subtable
lookupTable: new LookupTable
},
5: { // Glyph Insertion Subtable
stateTable: new StateTable(InsertionData),
insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))
}
});
let Subtable = new r.Struct({
length: r.uint32,
coverage: r.uint24,
type: r.uint8,
subFeatureFlags: r.uint32,
table: SubtableData,
padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)
});
let FeatureEntry = new r.Struct({
featureType: r.uint16,
featureSetting: r.uint16,
enableFlags: r.uint32,
disableFlags: r.uint32
});
let MorxChain = new r.Struct({
defaultFlags: r.uint32,
chainLength: r.uint32,
nFeatureEntries: r.uint32,
nSubtables: r.uint32,
features: new r.Array(FeatureEntry, 'nFeatureEntries'),
subtables: new r.Array(Subtable, 'nSubtables')
});
export default new r.Struct({
version: r.uint16,
unused: new r.Reserved(r.uint16),
nChains: r.uint32,
chains: new r.Array(MorxChain, 'nChains')
});