
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
import r from '@foliojs-fork/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')
});