import r from 'restructure'; import {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype'; import {ItemVariationStore} from './variations'; let AttachPoint = new r.Array(r.uint16, r.uint16); let AttachList = new r.Struct({ coverage: new r.Pointer(r.uint16, Coverage), glyphCount: r.uint16, attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount') }); let CaretValue = new r.VersionedStruct(r.uint16, { 1: { // Design units only coordinate: r.int16 }, 2: { // Contour point caretValuePoint: r.uint16 }, 3: { // Design units plus Device table coordinate: r.int16, deviceTable: new r.Pointer(r.uint16, Device) } }); let LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16); let LigCaretList = new r.Struct({ coverage: new r.Pointer(r.uint16, Coverage), ligGlyphCount: r.uint16, ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount') }); let MarkGlyphSetsDef = new r.Struct({ markSetTableFormat: r.uint16, markSetCount: r.uint16, coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount') }); export default new r.VersionedStruct(r.uint32, { header: { glyphClassDef: new r.Pointer(r.uint16, ClassDef), attachList: new r.Pointer(r.uint16, AttachList), ligCaretList: new r.Pointer(r.uint16, LigCaretList), markAttachClassDef: new r.Pointer(r.uint16, ClassDef) }, 0x00010000: {}, 0x00010002: { markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef) }, 0x00010003: { markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef), itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore) } });