SkOTUtils::LocalizedStrings_NameTable* SkOTUtils::LocalizedStrings_NameTable::CreateForFamilyNames(const SkTypeface& typeface) { static const SkFontTableTag nameTag = SkSetFourByteTag('n','a','m','e'); size_t nameTableSize = typeface.getTableSize(nameTag); if (0 == nameTableSize) { return NULL; } SkAutoTDeleteArray<uint8_t> nameTableData(new uint8_t[nameTableSize]); size_t copied = typeface.getTableData(nameTag, 0, nameTableSize, nameTableData.get()); if (copied != nameTableSize) { return NULL; } return new SkOTUtils::LocalizedStrings_NameTable((SkOTTableName*)nameTableData.detach(), SkOTUtils::LocalizedStrings_NameTable::familyNameTypes, SK_ARRAY_COUNT(SkOTUtils::LocalizedStrings_NameTable::familyNameTypes)); }
static void test_systemfonts(skiatest::Reporter* reporter, bool verbose) { static const SkFontTableTag nameTag = SkSetFourByteTag('n','a','m','e'); sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault()); int count = SkMin32(fm->countFamilies(), MAX_FAMILIES); for (int i = 0; i < count; ++i) { sk_sp<SkFontStyleSet> set(fm->createStyleSet(i)); for (int j = 0; j < set->count(); ++j) { SkString sname; SkFontStyle fs; set->getStyle(j, &fs, &sname); sk_sp<SkTypeface> typeface(set->createTypeface(j)); SkString familyName; typeface->getFamilyName(&familyName); if (verbose) { SkDebugf("[%s]\n", familyName.c_str()); } sk_sp<SkTypeface::LocalizedStrings> familyNamesIter( typeface->createFamilyNameIterator()); SkTypeface::LocalizedString familyNameLocalized; while (familyNamesIter->next(&familyNameLocalized)) { if (verbose) { SkDebugf("(%s) <%s>\n", familyNameLocalized.fString.c_str(), familyNameLocalized.fLanguage.c_str()); } } size_t nameTableSize = typeface->getTableSize(nameTag); if (0 == nameTableSize) { continue; } SkAutoTMalloc<uint8_t> nameTableData(nameTableSize); size_t copied = typeface->getTableData(nameTag, 0, nameTableSize, nameTableData.get()); if (copied != nameTableSize) { continue; } SkOTTableName::Iterator::Record record; SkOTTableName::Iterator familyNameIter(*((SkOTTableName*)nameTableData.get()), SkOTTableName::Record::NameID::Predefined::FontFamilyName); while (familyNameIter.next(record)) { REPORTER_ASSERT_MESSAGE(reporter, SkOTTableName::Record::NameID::Predefined::FontFamilyName == record.type, "Requested family name, got something else." ); if (verbose) { SkDebugf("{%s} <%s>\n", record.name.c_str(), record.language.c_str()); } } SkOTTableName::Iterator styleNameIter(*((SkOTTableName*)nameTableData.get()), SkOTTableName::Record::NameID::Predefined::FontSubfamilyName); while (styleNameIter.next(record)) { REPORTER_ASSERT_MESSAGE(reporter, SkOTTableName::Record::NameID::Predefined::FontSubfamilyName == record.type, "Requested subfamily name, got something else." ); if (verbose) { SkDebugf("{{%s}} <%s>\n", record.name.c_str(), record.language.c_str()); } } if (verbose) { SkDebugf("\n"); } } } }