コード例 #1
0
ファイル: LocatorTester.cpp プロジェクト: mta452/SheenFigure
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());
}
コード例 #2
0
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());
        }
    }
}