diff options
author | bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-08-06 22:53:04 +0000 |
---|---|---|
committer | bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-08-06 22:53:04 +0000 |
commit | 990d85f02ba6efaf6f3d75262d7ed650edc8afd5 (patch) | |
tree | a78ea0deb1c45b661ac1bdd25036cafc35229f9b /src/sfnt/SkOTUtils.cpp | |
parent | 2273f9b45fb78b0cc7df81f96f74b0c3c0e6cc37 (diff) |
Add getFamilyNames to SkTypeface.
Review URL: https://codereview.chromium.org/21716005
git-svn-id: http://skia.googlecode.com/svn/trunk@10589 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/sfnt/SkOTUtils.cpp')
-rw-r--r-- | src/sfnt/SkOTUtils.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/sfnt/SkOTUtils.cpp b/src/sfnt/SkOTUtils.cpp index c7716fffd5..004a888310 100644 --- a/src/sfnt/SkOTUtils.cpp +++ b/src/sfnt/SkOTUtils.cpp @@ -159,3 +159,45 @@ SkData* SkOTUtils::RenameFont(SkStream* fontData, const char* fontName, int font return rewrittenFontData.detach(); } + + +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)); +} + +bool SkOTUtils::LocalizedStrings_NameTable::next(SkTypeface::LocalizedString* localizedString) { + do { + SkOTTableName::Iterator::Record record; + if (fFamilyNameIter.next(record)) { + localizedString->fString = record.name; + localizedString->fLanguage = record.language; + return true; + } + if (fTypesCount == fTypesIndex + 1) { + return false; + } + ++fTypesIndex; + fFamilyNameIter.reset(fTypes[fTypesIndex]); + } while (true); +} + +SkOTTableName::Record::NameID::Predefined::Value +SkOTUtils::LocalizedStrings_NameTable::familyNameTypes[3] = { + SkOTTableName::Record::NameID::Predefined::FontFamilyName, + SkOTTableName::Record::NameID::Predefined::PreferredFamily, + SkOTTableName::Record::NameID::Predefined::WWSFamilyName, +}; |