blob: 4825fbeb2f74a925ff15c1f36fa6b793ddb12b03 [file] [log] [blame]
* Copyright 2012 Google Inc.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
#ifndef SkOTUtils_DEFINED
#define SkOTUtils_DEFINED
#include "SkOTTableTypes.h"
#include "SkOTTable_name.h"
#include "SkTypeface.h"
class SkData;
class SkStream;
struct SkOTUtils {
* Calculates the OpenType checksum for data.
static uint32_t CalcTableChecksum(SK_OT_ULONG *data, size_t length);
* Renames an sfnt font. On failure (invalid data or not an sfnt font)
* returns NULL.
* Essentially, this removes any existing 'name' table and replaces it
* with a new one in which FontFamilyName, FontSubfamilyName,
* UniqueFontIdentifier, FullFontName, and PostscriptName are fontName.
* The new 'name' table records will be written with the Windows,
* UnicodeBMPUCS2, and English_UnitedStates settings.
* fontName and fontNameLen must be specified in terms of ASCII chars.
static SkData* RenameFont(SkStream* fontData, const char* fontName, int fontNameLen);
/** An implementation of LocalizedStrings which obtains it's data from a 'name' table. */
class LocalizedStrings_NameTable : public SkTypeface::LocalizedStrings {
/** Takes ownership of the nameTableData and will free it with SK_DELETE. */
LocalizedStrings_NameTable(SkOTTableName* nameTableData,
SkOTTableName::Record::NameID::Predefined::Value types[],
int typesCount)
: fTypes(types), fTypesCount(typesCount), fTypesIndex(0)
, fNameTableData(nameTableData), fFamilyNameIter(*nameTableData, fTypes[fTypesIndex])
{ }
/** Creates an iterator over all the family names in the 'name' table of a typeface.
* If no valid 'name' table can be found, returns NULL.
static LocalizedStrings_NameTable* CreateForFamilyNames(const SkTypeface& typeface);
virtual bool next(SkTypeface::LocalizedString* localizedString) SK_OVERRIDE;
static SkOTTableName::Record::NameID::Predefined::Value familyNameTypes[3];
SkOTTableName::Record::NameID::Predefined::Value* fTypes;
int fTypesCount;
int fTypesIndex;
SkAutoTDeleteArray<SkOTTableName> fNameTableData;
SkOTTableName::Iterator fFamilyNameIter;
/** An implementation of LocalizedStrings which has one name. */
class LocalizedStrings_SingleName : public SkTypeface::LocalizedStrings {
LocalizedStrings_SingleName(SkString name, SkString language)
: fName(name), fLanguage(language), fHasNext(true)
{ }
virtual bool next(SkTypeface::LocalizedString* localizedString) SK_OVERRIDE {
localizedString->fString = fName;
localizedString->fLanguage = fLanguage;
bool hadNext = fHasNext;
fHasNext = false;
return hadNext;
SkString fName;
SkString fLanguage;
bool fHasNext;