1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2012 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SkOTUtils_DEFINED 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkOTUtils_DEFINED 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkOTTableTypes.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkOTTable_OS_2_V4.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkOTTable_name.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTypeface.h" 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkData; 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkStream; 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct SkAdvancedTypefaceMetrics; 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct SkOTUtils { 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /** 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Calculates the OpenType checksum for data. 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static uint32_t CalcTableChecksum(SK_OT_ULONG *data, size_t length); 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /** 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Renames an sfnt font. On failure (invalid data or not an sfnt font) 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * returns nullptr. 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Essentially, this removes any existing 'name' table and replaces it 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * with a new one in which FontFamilyName, FontSubfamilyName, 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * UniqueFontIdentifier, FullFontName, and PostscriptName are fontName. 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * The new 'name' table records will be written with the Windows, 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * UnicodeBMPUCS2, and English_UnitedStates settings. 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * fontName and fontNameLen must be specified in terms of ASCII chars. 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Does not affect fontData's ownership. 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static SkData* RenameFont(SkStreamAsset* fontData, const char* fontName, int fontNameLen); 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /** An implementation of LocalizedStrings which obtains it's data from a 'name' table. */ 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot class LocalizedStrings_NameTable : public SkTypeface::LocalizedStrings { 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot public: 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /** Takes ownership of the nameTableData and will free it with SK_DELETE. */ 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot LocalizedStrings_NameTable(SkOTTableName* nameTableData, 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkOTTableName::Record::NameID::Predefined::Value types[], 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int typesCount) 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : fTypes(types), fTypesCount(typesCount), fTypesIndex(0) 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fNameTableData(nameTableData), fFamilyNameIter(*nameTableData, fTypes[fTypesIndex]) 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { } 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /** Creates an iterator over all the family names in the 'name' table of a typeface. 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * If no valid 'name' table can be found, returns nullptr. 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static LocalizedStrings_NameTable* CreateForFamilyNames(const SkTypeface& typeface); 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool next(SkTypeface::LocalizedString* localizedString) override; 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot private: 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static SkOTTableName::Record::NameID::Predefined::Value familyNameTypes[3]; 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkOTTableName::Record::NameID::Predefined::Value* fTypes; 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int fTypesCount; 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int fTypesIndex; 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot std::unique_ptr<SkOTTableName[]> fNameTableData; 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkOTTableName::Iterator fFamilyNameIter; 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot }; 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /** An implementation of LocalizedStrings which has one name. */ 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot class LocalizedStrings_SingleName : public SkTypeface::LocalizedStrings { 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot public: 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot LocalizedStrings_SingleName(SkString name, SkString language) 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : fName(name), fLanguage(language), fHasNext(true) 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { } 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool next(SkTypeface::LocalizedString* localizedString) override { 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot localizedString->fString = fName; 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot localizedString->fLanguage = fLanguage; 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool hadNext = fHasNext; 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fHasNext = false; 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return hadNext; 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot private: 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString fName; 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString fLanguage; 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool fHasNext; 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot }; 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void SetAdvancedTypefaceFlags(SkOTTableOS2_V4::Type fsType, 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAdvancedTypefaceMetrics* info); 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 97