LocatorTester::LocatorTester() { UInt16 classValueArray[10]; for (int i = 0; i < 10; i++) { classValueArray[i] = (i % 2); } ClassDefTable markAttachClass; markAttachClass.classFormat = 1; markAttachClass.format1.startGlyph = 0; markAttachClass.format1.glyphCount = 10; markAttachClass.format1.classValueArray = classValueArray; Glyph glyphs[5]; for (int i = 0; i < 5; i++) { glyphs[i] = (Glyph)(i * 2); } CoverageTable markGlyphCoverage; markGlyphCoverage.coverageFormat = 1; markGlyphCoverage.format1.glyphArray = glyphs; markGlyphCoverage.format1.glyphCount = 5; MarkGlyphSetsDefTable markGlyphSets; markGlyphSets.markSetTableFormat = 1; markGlyphSets.markSetCount = 1; markGlyphSets.coverage = &markGlyphCoverage; GDEF gdef; gdef.version = 0x00010002; gdef.glyphClassDef = NULL; gdef.attachList = NULL; gdef.ligCaretList = NULL; gdef.markAttachClassDef = &markAttachClass; gdef.markGlyphSetsDef = &markGlyphSets; Writer writer; writer.write(&gdef); m_gdef = new uint8_t[writer.size()]; memcpy(m_gdef, writer.data(), (size_t)writer.size()); }
static void loadTable(void *object, SFTag tag, SFUInt8 *buffer, SFUInteger *length) { if (tag == SFTagMake('G', 'S', 'U', 'B')) { UInt16 lookupIndex[1]; lookupIndex[0] = 0; FeatureTable kernFeature; kernFeature.featureParams = 0; kernFeature.lookupCount = 1; kernFeature.lookupListIndex = lookupIndex; FeatureRecord featureRecord[1]; memcpy(&featureRecord[0].featureTag, "ccmp", 4); featureRecord[0].feature = &kernFeature; FeatureListTable featureList; featureList.featureCount = 1; featureList.featureRecord = featureRecord; UInt16 engFeatureIndex[1]; engFeatureIndex[0] = 0; LangSysTable engLangSys; engLangSys.lookupOrder = 0; engLangSys.reqFeatureIndex = 0xFFFF; engLangSys.featureCount = 1; engLangSys.featureIndex = engFeatureIndex; LangSysRecord langSysRecord[1]; memcpy(&langSysRecord[0].langSysTag, "ENG ", 4); langSysRecord[0].langSys = &engLangSys; UInt16 dfltFeatureIndex[1]; dfltFeatureIndex[0] = 0; LangSysTable dfltLangSys; dfltLangSys.lookupOrder = 0; dfltLangSys.reqFeatureIndex = 0xFFFF; dfltLangSys.featureCount = 1; dfltLangSys.featureIndex = dfltFeatureIndex; ScriptTable latnScript; latnScript.defaultLangSys = &dfltLangSys; latnScript.langSysCount = 1; latnScript.langSysRecord = langSysRecord; ScriptRecord scripts[1]; memcpy(&scripts[0].scriptTag, "latn", 4); scripts[0].script = &latnScript; ScriptListTable scriptList; scriptList.scriptCount = 1; scriptList.scriptRecord = scripts; GSUB gsub; gsub.version = 0x00010000; gsub.scriptList = &scriptList; gsub.featureList = &featureList; gsub.lookupList = NULL; Writer writer; writer.write(&gsub); if (length) { *length = (SFUInteger)writer.size(); } if (buffer) { memcpy(buffer, writer.data(), (size_t)writer.size()); } } }