Current File : /home/tradevaly/www/node_modules/fontkit/src/tables/GSUB.js |
import r from 'restructure';
import {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';
import {FeatureVariations} from './variations';
let Sequence = new r.Array(r.uint16, r.uint16);
let AlternateSet = Sequence;
let Ligature = new r.Struct({
glyph: r.uint16,
compCount: r.uint16,
components: new r.Array(r.uint16, t => t.compCount - 1)
});
let LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);
let GSUBLookup = new r.VersionedStruct('lookupType', {
1: new r.VersionedStruct(r.uint16, {// Single Substitution
1: {
coverage: new r.Pointer(r.uint16, Coverage),
deltaGlyphID: r.int16
},
2: {
coverage: new r.Pointer(r.uint16, Coverage),
glyphCount: r.uint16,
substitute: new r.LazyArray(r.uint16, 'glyphCount')
}
}),
2: { // Multiple Substitution
substFormat: r.uint16,
coverage: new r.Pointer(r.uint16, Coverage),
count: r.uint16,
sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')
},
3: { // Alternate Substitution
substFormat: r.uint16,
coverage: new r.Pointer(r.uint16, Coverage),
count: r.uint16,
alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')
},
4: { // Ligature Substitution
substFormat: r.uint16,
coverage: new r.Pointer(r.uint16, Coverage),
count: r.uint16,
ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')
},
5: Context, // Contextual Substitution
6: ChainingContext, // Chaining Contextual Substitution
7: { // Extension Substitution
substFormat: r.uint16,
lookupType: r.uint16, // cannot also be 7
extension: new r.Pointer(r.uint32, GSUBLookup)
},
8: { // Reverse Chaining Contextual Single Substitution
substFormat: r.uint16,
coverage: new r.Pointer(r.uint16, Coverage),
backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),
lookaheadGlyphCount: r.uint16,
lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),
glyphCount: r.uint16,
substitutes: new r.Array(r.uint16, 'glyphCount')
}
});
// Fix circular reference
GSUBLookup.versions[7].extension.type = GSUBLookup;
export default new r.VersionedStruct(r.uint32, {
header: {
scriptList: new r.Pointer(r.uint16, ScriptList),
featureList: new r.Pointer(r.uint16, FeatureList),
lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup))
},
0x00010000: {},
0x00010001: {
featureVariations: new r.Pointer(r.uint32, FeatureVariations)
}
});