blob: b344bfa9e38a2e232cb15d43ee0c43e79b046841 [file] [log] [blame]
/*
* Copyright 2011 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// TODO(arthurhsu): IMPLEMENT: not really used and tested, need cleanup
#include "sfntly/name_table.h"
namespace sfntly {
/******************************************************************************
* Constants
******************************************************************************/
const int32_t NameTable::Offset::kFormat = 0;
const int32_t NameTable::Offset::kCount = 2;
const int32_t NameTable::Offset::kStringOffset = 4;
const int32_t NameTable::Offset::kNameRecordStart = 6;
const int32_t NameTable::Offset::kLangTagCount = 0;
const int32_t NameTable::Offset::kLangTagRecord = 2;
const int32_t NameTable::Offset::kNameRecordSize = 12;
const int32_t NameTable::Offset::kNameRecordPlatformId = 0;
const int32_t NameTable::Offset::kNameRecordEncodingId = 2;
const int32_t NameTable::Offset::kNameRecordLanguageId = 4;
const int32_t NameTable::Offset::kNameRecordNameId = 6;
const int32_t NameTable::Offset::kNameRecordStringLength = 8;
const int32_t NameTable::Offset::kNameRecordStringOffset = 10;
const int32_t NameTable::NameId::kUnknown = -1;
const int32_t NameTable::NameId::kCopyrightNotice = 0;
const int32_t NameTable::NameId::kFontFamilyName = 1;
const int32_t NameTable::NameId::kFontSubfamilyName = 2;
const int32_t NameTable::NameId::kUniqueFontIdentifier = 3;
const int32_t NameTable::NameId::kFullFontName = 4;
const int32_t NameTable::NameId::kVersionString = 5;
const int32_t NameTable::NameId::kPostscriptName = 6;
const int32_t NameTable::NameId::kTrademark = 7;
const int32_t NameTable::NameId::kManufacturerName = 8;
const int32_t NameTable::NameId::kDesigner = 9;
const int32_t NameTable::NameId::kDescription = 10;
const int32_t NameTable::NameId::kVendorURL = 11;
const int32_t NameTable::NameId::kDesignerURL = 12;
const int32_t NameTable::NameId::kLicenseDescription = 13;
const int32_t NameTable::NameId::kLicenseInfoURL = 14;
const int32_t NameTable::NameId::kReserved15 = 15;
const int32_t NameTable::NameId::kPreferredFamily = 16;
const int32_t NameTable::NameId::kPreferredSubfamily = 17;
const int32_t NameTable::NameId::kCompatibleFullName = 18;
const int32_t NameTable::NameId::kSampleText = 19;
const int32_t NameTable::NameId::kPostscriptCID = 20;
const int32_t NameTable::NameId::kWWSFamilyName = 21;
const int32_t NameTable::NameId::kWWSSubfamilyName = 22;
const int32_t UnicodeLanguageId::kUnknown = -1;
const int32_t UnicodeLanguageId::kAll = 0;
const int32_t MacintoshLanguageId::kUnknown = -1;
const int32_t MacintoshLanguageId::kEnglish = 0;
const int32_t MacintoshLanguageId::kFrench = 1;
const int32_t MacintoshLanguageId::kGerman = 2;
const int32_t MacintoshLanguageId::kItalian = 3;
const int32_t MacintoshLanguageId::kDutch = 4;
const int32_t MacintoshLanguageId::kSwedish = 5;
const int32_t MacintoshLanguageId::kSpanish = 6;
const int32_t MacintoshLanguageId::kDanish = 7;
const int32_t MacintoshLanguageId::kPortuguese = 8;
const int32_t MacintoshLanguageId::kNorwegian = 9;
const int32_t MacintoshLanguageId::kHebrew = 10;
const int32_t MacintoshLanguageId::kJapanese = 11;
const int32_t MacintoshLanguageId::kArabic = 12;
const int32_t MacintoshLanguageId::kFinnish = 13;
const int32_t MacintoshLanguageId::kGreek = 14;
const int32_t MacintoshLanguageId::kIcelandic = 15;
const int32_t MacintoshLanguageId::kMaltese = 16;
const int32_t MacintoshLanguageId::kTurkish = 17;
const int32_t MacintoshLanguageId::kCroatian = 18;
const int32_t MacintoshLanguageId::kChinese_Traditional = 19;
const int32_t MacintoshLanguageId::kUrdu = 20;
const int32_t MacintoshLanguageId::kHindi = 21;
const int32_t MacintoshLanguageId::kThai = 22;
const int32_t MacintoshLanguageId::kKorean = 23;
const int32_t MacintoshLanguageId::kLithuanian = 24;
const int32_t MacintoshLanguageId::kPolish = 25;
const int32_t MacintoshLanguageId::kHungarian = 26;
const int32_t MacintoshLanguageId::kEstonian = 27;
const int32_t MacintoshLanguageId::kLatvian = 28;
const int32_t MacintoshLanguageId::kSami = 29;
const int32_t MacintoshLanguageId::kFaroese = 30;
const int32_t MacintoshLanguageId::kFarsiPersian = 31;
const int32_t MacintoshLanguageId::kRussian = 32;
const int32_t MacintoshLanguageId::kChinese_Simplified = 33;
const int32_t MacintoshLanguageId::kFlemish = 34;
const int32_t MacintoshLanguageId::kIrishGaelic = 35;
const int32_t MacintoshLanguageId::kAlbanian = 36;
const int32_t MacintoshLanguageId::kRomanian = 37;
const int32_t MacintoshLanguageId::kCzech = 38;
const int32_t MacintoshLanguageId::kSlovak = 39;
const int32_t MacintoshLanguageId::kSlovenian = 40;
const int32_t MacintoshLanguageId::kYiddish = 41;
const int32_t MacintoshLanguageId::kSerbian = 42;
const int32_t MacintoshLanguageId::kMacedonian = 43;
const int32_t MacintoshLanguageId::kBulgarian = 44;
const int32_t MacintoshLanguageId::kUkrainian = 45;
const int32_t MacintoshLanguageId::kByelorussian = 46;
const int32_t MacintoshLanguageId::kUzbek = 47;
const int32_t MacintoshLanguageId::kKazakh = 48;
const int32_t MacintoshLanguageId::kAzerbaijani_Cyrillic = 49;
const int32_t MacintoshLanguageId::kAzerbaijani_Arabic = 50;
const int32_t MacintoshLanguageId::kArmenian = 51;
const int32_t MacintoshLanguageId::kGeorgian = 52;
const int32_t MacintoshLanguageId::kMoldavian = 53;
const int32_t MacintoshLanguageId::kKirghiz = 54;
const int32_t MacintoshLanguageId::kTajiki = 55;
const int32_t MacintoshLanguageId::kTurkmen = 56;
const int32_t MacintoshLanguageId::kMongolian_Mongolian = 57;
const int32_t MacintoshLanguageId::kMongolian_Cyrillic = 58;
const int32_t MacintoshLanguageId::kPashto = 59;
const int32_t MacintoshLanguageId::kKurdish = 60;
const int32_t MacintoshLanguageId::kKashmiri = 61;
const int32_t MacintoshLanguageId::kSindhi = 62;
const int32_t MacintoshLanguageId::kTibetan = 63;
const int32_t MacintoshLanguageId::kNepali = 64;
const int32_t MacintoshLanguageId::kSanskrit = 65;
const int32_t MacintoshLanguageId::kMarathi = 66;
const int32_t MacintoshLanguageId::kBengali = 67;
const int32_t MacintoshLanguageId::kAssamese = 68;
const int32_t MacintoshLanguageId::kGujarati = 69;
const int32_t MacintoshLanguageId::kPunjabi = 70;
const int32_t MacintoshLanguageId::kOriya = 71;
const int32_t MacintoshLanguageId::kMalayalam = 72;
const int32_t MacintoshLanguageId::kKannada = 73;
const int32_t MacintoshLanguageId::kTamil = 74;
const int32_t MacintoshLanguageId::kTelugu = 75;
const int32_t MacintoshLanguageId::kSinhalese = 76;
const int32_t MacintoshLanguageId::kBurmese = 77;
const int32_t MacintoshLanguageId::kKhmer = 78;
const int32_t MacintoshLanguageId::kLao = 79;
const int32_t MacintoshLanguageId::kVietnamese = 80;
const int32_t MacintoshLanguageId::kIndonesian = 81;
const int32_t MacintoshLanguageId::kTagalong = 82;
const int32_t MacintoshLanguageId::kMalay_Roman = 83;
const int32_t MacintoshLanguageId::kMalay_Arabic = 84;
const int32_t MacintoshLanguageId::kAmharic = 85;
const int32_t MacintoshLanguageId::kTigrinya = 86;
const int32_t MacintoshLanguageId::kGalla = 87;
const int32_t MacintoshLanguageId::kSomali = 88;
const int32_t MacintoshLanguageId::kSwahili = 89;
const int32_t MacintoshLanguageId::kKinyarwandaRuanda = 90;
const int32_t MacintoshLanguageId::kRundi = 91;
const int32_t MacintoshLanguageId::kNyanjaChewa = 92;
const int32_t MacintoshLanguageId::kMalagasy = 93;
const int32_t MacintoshLanguageId::kEsperanto = 94;
const int32_t MacintoshLanguageId::kWelsh = 128;
const int32_t MacintoshLanguageId::kBasque = 129;
const int32_t MacintoshLanguageId::kCatalan = 130;
const int32_t MacintoshLanguageId::kLatin = 131;
const int32_t MacintoshLanguageId::kQuenchua = 132;
const int32_t MacintoshLanguageId::kGuarani = 133;
const int32_t MacintoshLanguageId::kAymara = 134;
const int32_t MacintoshLanguageId::kTatar = 135;
const int32_t MacintoshLanguageId::kUighur = 136;
const int32_t MacintoshLanguageId::kDzongkha = 137;
const int32_t MacintoshLanguageId::kJavanese_Roman = 138;
const int32_t MacintoshLanguageId::kSundanese_Roman = 139;
const int32_t MacintoshLanguageId::kGalician = 140;
const int32_t MacintoshLanguageId::kAfrikaans = 141;
const int32_t MacintoshLanguageId::kBreton = 142;
const int32_t MacintoshLanguageId::kInuktitut = 143;
const int32_t MacintoshLanguageId::kScottishGaelic = 144;
const int32_t MacintoshLanguageId::kManxGaelic = 145;
const int32_t MacintoshLanguageId::kIrishGaelic_WithDotAbove = 146;
const int32_t MacintoshLanguageId::kTongan = 147;
const int32_t MacintoshLanguageId::kGreek_Polytonic = 148;
const int32_t MacintoshLanguageId::kGreenlandic = 149;
const int32_t MacintoshLanguageId::kAzerbaijani_Roman = 150;
const int32_t WindowsLanguageId::kUnknown = -1;
const int32_t WindowsLanguageId::kAfrikaans_SouthAfrica = 0x0436;
const int32_t WindowsLanguageId::kAlbanian_Albania = 0x041C;
const int32_t WindowsLanguageId::kAlsatian_France = 0x0484;
const int32_t WindowsLanguageId::kAmharic_Ethiopia = 0x045E;
const int32_t WindowsLanguageId::kArabic_Algeria = 0x1401;
const int32_t WindowsLanguageId::kArabic_Bahrain = 0x3C01;
const int32_t WindowsLanguageId::kArabic_Egypt = 0x0C01;
const int32_t WindowsLanguageId::kArabic_Iraq = 0x0801;
const int32_t WindowsLanguageId::kArabic_Jordan = 0x2C01;
const int32_t WindowsLanguageId::kArabic_Kuwait = 0x3401;
const int32_t WindowsLanguageId::kArabic_Lebanon = 0x3001;
const int32_t WindowsLanguageId::kArabic_Libya = 0x1001;
const int32_t WindowsLanguageId::kArabic_Morocco = 0x1801;
const int32_t WindowsLanguageId::kArabic_Oman = 0x2001;
const int32_t WindowsLanguageId::kArabic_Qatar = 0x4001;
const int32_t WindowsLanguageId::kArabic_SaudiArabia = 0x0401;
const int32_t WindowsLanguageId::kArabic_Syria = 0x2801;
const int32_t WindowsLanguageId::kArabic_Tunisia = 0x1C01;
const int32_t WindowsLanguageId::kArabic_UAE = 0x3801;
const int32_t WindowsLanguageId::kArabic_Yemen = 0x2401;
const int32_t WindowsLanguageId::kArmenian_Armenia = 0x042B;
const int32_t WindowsLanguageId::kAssamese_India = 0x044D;
const int32_t WindowsLanguageId::kAzeri_Cyrillic_Azerbaijan = 0x082C;
const int32_t WindowsLanguageId::kAzeri_Latin_Azerbaijan = 0x042C;
const int32_t WindowsLanguageId::kBashkir_Russia = 0x046D;
const int32_t WindowsLanguageId::kBasque_Basque = 0x042D;
const int32_t WindowsLanguageId::kBelarusian_Belarus = 0x0423;
const int32_t WindowsLanguageId::kBengali_Bangladesh = 0x0845;
const int32_t WindowsLanguageId::kBengali_India = 0x0445;
const int32_t WindowsLanguageId::kBosnian_Cyrillic_BosniaAndHerzegovina = 0x201A;
const int32_t WindowsLanguageId::kBosnian_Latin_BosniaAndHerzegovina = 0x141A;
const int32_t WindowsLanguageId::kBreton_France = 0x047E;
const int32_t WindowsLanguageId::kBulgarian_Bulgaria = 0x0402;
const int32_t WindowsLanguageId::kCatalan_Catalan = 0x0403;
const int32_t WindowsLanguageId::kChinese_HongKongSAR = 0x0C04;
const int32_t WindowsLanguageId::kChinese_MacaoSAR = 0x1404;
const int32_t WindowsLanguageId::kChinese_PeoplesRepublicOfChina = 0x0804;
const int32_t WindowsLanguageId::kChinese_Singapore = 0x1004;
const int32_t WindowsLanguageId::kChinese_Taiwan = 0x0404;
const int32_t WindowsLanguageId::kCorsican_France = 0x0483;
const int32_t WindowsLanguageId::kCroatian_Croatia = 0x041A;
const int32_t WindowsLanguageId::kCroatian_Latin_BosniaAndHerzegovina = 0x101A;
const int32_t WindowsLanguageId::kCzech_CzechRepublic = 0x0405;
const int32_t WindowsLanguageId::kDanish_Denmark = 0x0406;
const int32_t WindowsLanguageId::kDari_Afghanistan = 0x048C;
const int32_t WindowsLanguageId::kDivehi_Maldives = 0x0465;
const int32_t WindowsLanguageId::kDutch_Belgium = 0x0813;
const int32_t WindowsLanguageId::kDutch_Netherlands = 0x0413;
const int32_t WindowsLanguageId::kEnglish_Australia = 0x0C09;
const int32_t WindowsLanguageId::kEnglish_Belize = 0x2809;
const int32_t WindowsLanguageId::kEnglish_Canada = 0x1009;
const int32_t WindowsLanguageId::kEnglish_Caribbean = 0x2409;
const int32_t WindowsLanguageId::kEnglish_India = 0x4009;
const int32_t WindowsLanguageId::kEnglish_Ireland = 0x1809;
const int32_t WindowsLanguageId::kEnglish_Jamaica = 0x2009;
const int32_t WindowsLanguageId::kEnglish_Malaysia = 0x4409;
const int32_t WindowsLanguageId::kEnglish_NewZealand = 0x1409;
const int32_t WindowsLanguageId::kEnglish_RepublicOfThePhilippines = 0x3409;
const int32_t WindowsLanguageId::kEnglish_Singapore = 0x4809;
const int32_t WindowsLanguageId::kEnglish_SouthAfrica = 0x1C09;
const int32_t WindowsLanguageId::kEnglish_TrinidadAndTobago = 0x2C09;
const int32_t WindowsLanguageId::kEnglish_UnitedKingdom = 0x0809;
const int32_t WindowsLanguageId::kEnglish_UnitedStates = 0x0409;
const int32_t WindowsLanguageId::kEnglish_Zimbabwe = 0x3009;
const int32_t WindowsLanguageId::kEstonian_Estonia = 0x0425;
const int32_t WindowsLanguageId::kFaroese_FaroeIslands = 0x0438;
const int32_t WindowsLanguageId::kFilipino_Philippines = 0x0464;
const int32_t WindowsLanguageId::kFinnish_Finland = 0x040B;
const int32_t WindowsLanguageId::kFrench_Belgium = 0x080C;
const int32_t WindowsLanguageId::kFrench_Canada = 0x0C0C;
const int32_t WindowsLanguageId::kFrench_France = 0x040C;
const int32_t WindowsLanguageId::kFrench_Luxembourg = 0x140c;
const int32_t WindowsLanguageId::kFrench_PrincipalityOfMonoco = 0x180C;
const int32_t WindowsLanguageId::kFrench_Switzerland = 0x100C;
const int32_t WindowsLanguageId::kFrisian_Netherlands = 0x0462;
const int32_t WindowsLanguageId::kGalician_Galician = 0x0456;
const int32_t WindowsLanguageId::kGeorgian_Georgia = 0x0437;
const int32_t WindowsLanguageId::kGerman_Austria = 0x0C07;
const int32_t WindowsLanguageId::kGerman_Germany = 0x0407;
const int32_t WindowsLanguageId::kGerman_Liechtenstein = 0x1407;
const int32_t WindowsLanguageId::kGerman_Luxembourg = 0x1007;
const int32_t WindowsLanguageId::kGerman_Switzerland = 0x0807;
const int32_t WindowsLanguageId::kGreek_Greece = 0x0408;
const int32_t WindowsLanguageId::kGreenlandic_Greenland = 0x046F;
const int32_t WindowsLanguageId::kGujarati_India = 0x0447;
const int32_t WindowsLanguageId::kHausa_Latin_Nigeria = 0x0468;
const int32_t WindowsLanguageId::kHebrew_Israel = 0x040D;
const int32_t WindowsLanguageId::kHindi_India = 0x0439;
const int32_t WindowsLanguageId::kHungarian_Hungary = 0x040E;
const int32_t WindowsLanguageId::kIcelandic_Iceland = 0x040F;
const int32_t WindowsLanguageId::kIgbo_Nigeria = 0x0470;
const int32_t WindowsLanguageId::kIndonesian_Indonesia = 0x0421;
const int32_t WindowsLanguageId::kInuktitut_Canada = 0x045D;
const int32_t WindowsLanguageId::kInuktitut_Latin_Canada = 0x085D;
const int32_t WindowsLanguageId::kIrish_Ireland = 0x083C;
const int32_t WindowsLanguageId::kisiXhosa_SouthAfrica = 0x0434;
const int32_t WindowsLanguageId::kisiZulu_SouthAfrica = 0x0435;
const int32_t WindowsLanguageId::kItalian_Italy = 0x0410;
const int32_t WindowsLanguageId::kItalian_Switzerland = 0x0810;
const int32_t WindowsLanguageId::kJapanese_Japan = 0x0411;
const int32_t WindowsLanguageId::kKannada_India = 0x044B;
const int32_t WindowsLanguageId::kKazakh_Kazakhstan = 0x043F;
const int32_t WindowsLanguageId::kKhmer_Cambodia = 0x0453;
const int32_t WindowsLanguageId::kKiche_Guatemala = 0x0486;
const int32_t WindowsLanguageId::kKinyarwanda_Rwanda = 0x0487;
const int32_t WindowsLanguageId::kKiswahili_Kenya = 0x0441;
const int32_t WindowsLanguageId::kKonkani_India = 0x0457;
const int32_t WindowsLanguageId::kKorean_Korea = 0x0412;
const int32_t WindowsLanguageId::kKyrgyz_Kyrgyzstan = 0x0440;
const int32_t WindowsLanguageId::kLao_LaoPDR = 0x0454;
const int32_t WindowsLanguageId::kLatvian_Latvia = 0x0426;
const int32_t WindowsLanguageId::kLithuanian_Lithuania = 0x0427;
const int32_t WindowsLanguageId::kLowerSorbian_Germany = 0x082E;
const int32_t WindowsLanguageId::kLuxembourgish_Luxembourg = 0x046E;
const int32_t WindowsLanguageId::kMacedonian_FYROM_FormerYugoslavRepublicOfMacedonia = 0x042F;
const int32_t WindowsLanguageId::kMalay_BruneiDarussalam = 0x083E;
const int32_t WindowsLanguageId::kMalay_Malaysia = 0x043E;
const int32_t WindowsLanguageId::kMalayalam_India = 0x044C;
const int32_t WindowsLanguageId::kMaltese_Malta = 0x043A;
const int32_t WindowsLanguageId::kMaori_NewZealand = 0x0481;
const int32_t WindowsLanguageId::kMapudungun_Chile = 0x047A;
const int32_t WindowsLanguageId::kMarathi_India = 0x044E;
const int32_t WindowsLanguageId::kMohawk_Mohawk = 0x047C;
const int32_t WindowsLanguageId::kMongolian_Cyrillic_Mongolia = 0x0450;
const int32_t WindowsLanguageId::kMongolian_Traditional_PeoplesRepublicOfChina = 0x0850;
const int32_t WindowsLanguageId::kNepali_Nepal = 0x0461;
const int32_t WindowsLanguageId::kNorwegian_Bokmal_Norway = 0x0414;
const int32_t WindowsLanguageId::kNorwegian_Nynorsk_Norway = 0x0814;
const int32_t WindowsLanguageId::kOccitan_France = 0x0482;
const int32_t WindowsLanguageId::kOriya_India = 0x0448;
const int32_t WindowsLanguageId::kPashto_Afghanistan = 0x0463;
const int32_t WindowsLanguageId::kPolish_Poland = 0x0415;
const int32_t WindowsLanguageId::kPortuguese_Brazil = 0x0416;
const int32_t WindowsLanguageId::kPortuguese_Portugal = 0x0816;
const int32_t WindowsLanguageId::kPunjabi_India = 0x0446;
const int32_t WindowsLanguageId::kQuechua_Bolivia = 0x046B;
const int32_t WindowsLanguageId::kQuechua_Ecuador = 0x086B;
const int32_t WindowsLanguageId::kQuechua_Peru = 0x0C6B;
const int32_t WindowsLanguageId::kRomanian_Romania = 0x0418;
const int32_t WindowsLanguageId::kRomansh_Switzerland = 0x0417;
const int32_t WindowsLanguageId::kRussian_Russia = 0x0419;
const int32_t WindowsLanguageId::kSami_Inari_Finland = 0x243B;
const int32_t WindowsLanguageId::kSami_Lule_Norway = 0x103B;
const int32_t WindowsLanguageId::kSami_Lule_Sweden = 0x143B;
const int32_t WindowsLanguageId::kSami_Northern_Finland = 0x0C3B;
const int32_t WindowsLanguageId::kSami_Northern_Norway = 0x043B;
const int32_t WindowsLanguageId::kSami_Northern_Sweden = 0x083B;
const int32_t WindowsLanguageId::kSami_Skolt_Finland = 0x203B;
const int32_t WindowsLanguageId::kSami_Southern_Norway = 0x183B;
const int32_t WindowsLanguageId::kSami_Southern_Sweden = 0x1C3B;
const int32_t WindowsLanguageId::kSanskrit_India = 0x044F;
const int32_t WindowsLanguageId::kSerbian_Cyrillic_BosniaAndHerzegovina = 0x1C1A;
const int32_t WindowsLanguageId::kSerbian_Cyrillic_Serbia = 0x0C1A;
const int32_t WindowsLanguageId::kSerbian_Latin_BosniaAndHerzegovina = 0x181A;
const int32_t WindowsLanguageId::kSerbian_Latin_Serbia = 0x081A;
const int32_t WindowsLanguageId::kSesothoSaLeboa_SouthAfrica = 0x046C;
const int32_t WindowsLanguageId::kSetswana_SouthAfrica = 0x0432;
const int32_t WindowsLanguageId::kSinhala_SriLanka = 0x045B;
const int32_t WindowsLanguageId::kSlovak_Slovakia = 0x041B;
const int32_t WindowsLanguageId::kSlovenian_Slovenia = 0x0424;
const int32_t WindowsLanguageId::kSpanish_Argentina = 0x2C0A;
const int32_t WindowsLanguageId::kSpanish_Bolivia = 0x400A;
const int32_t WindowsLanguageId::kSpanish_Chile = 0x340A;
const int32_t WindowsLanguageId::kSpanish_Colombia = 0x240A;
const int32_t WindowsLanguageId::kSpanish_CostaRica = 0x140A;
const int32_t WindowsLanguageId::kSpanish_DominicanRepublic = 0x1C0A;
const int32_t WindowsLanguageId::kSpanish_Ecuador = 0x300A;
const int32_t WindowsLanguageId::kSpanish_ElSalvador = 0x440A;
const int32_t WindowsLanguageId::kSpanish_Guatemala = 0x100A;
const int32_t WindowsLanguageId::kSpanish_Honduras = 0x480A;
const int32_t WindowsLanguageId::kSpanish_Mexico = 0x080A;
const int32_t WindowsLanguageId::kSpanish_Nicaragua = 0x4C0A;
const int32_t WindowsLanguageId::kSpanish_Panama = 0x180A;
const int32_t WindowsLanguageId::kSpanish_Paraguay = 0x3C0A;
const int32_t WindowsLanguageId::kSpanish_Peru = 0x280A;
const int32_t WindowsLanguageId::kSpanish_PuertoRico = 0x500A;
const int32_t WindowsLanguageId::kSpanish_ModernSort_Spain = 0x0C0A;
const int32_t WindowsLanguageId::kSpanish_TraditionalSort_Spain = 0x040A;
const int32_t WindowsLanguageId::kSpanish_UnitedStates = 0x540A;
const int32_t WindowsLanguageId::kSpanish_Uruguay = 0x380A;
const int32_t WindowsLanguageId::kSpanish_Venezuela = 0x200A;
const int32_t WindowsLanguageId::kSweden_Finland = 0x081D;
const int32_t WindowsLanguageId::kSwedish_Sweden = 0x041D;
const int32_t WindowsLanguageId::kSyriac_Syria = 0x045A;
const int32_t WindowsLanguageId::kTajik_Cyrillic_Tajikistan = 0x0428;
const int32_t WindowsLanguageId::kTamazight_Latin_Algeria = 0x085F;
const int32_t WindowsLanguageId::kTamil_India = 0x0449;
const int32_t WindowsLanguageId::kTatar_Russia = 0x0444;
const int32_t WindowsLanguageId::kTelugu_India = 0x044A;
const int32_t WindowsLanguageId::kThai_Thailand = 0x041E;
const int32_t WindowsLanguageId::kTibetan_PRC = 0x0451;
const int32_t WindowsLanguageId::kTurkish_Turkey = 0x041F;
const int32_t WindowsLanguageId::kTurkmen_Turkmenistan = 0x0442;
const int32_t WindowsLanguageId::kUighur_PRC = 0x0480;
const int32_t WindowsLanguageId::kUkrainian_Ukraine = 0x0422;
const int32_t WindowsLanguageId::kUpperSorbian_Germany = 0x042E;
const int32_t WindowsLanguageId::kUrdu_IslamicRepublicOfPakistan = 0x0420;
const int32_t WindowsLanguageId::kUzbek_Cyrillic_Uzbekistan = 0x0843;
const int32_t WindowsLanguageId::kUzbek_Latin_Uzbekistan = 0x0443;
const int32_t WindowsLanguageId::kVietnamese_Vietnam = 0x042A;
const int32_t WindowsLanguageId::kWelsh_UnitedKingdom = 0x0452;
const int32_t WindowsLanguageId::kWolof_Senegal = 0x0448;
const int32_t WindowsLanguageId::kYakut_Russia = 0x0485;
const int32_t WindowsLanguageId::kYi_PRC = 0x0478;
const int32_t WindowsLanguageId::kYoruba_Nigeria = 0x046A;
/******************************************************************************
* NameTable class
******************************************************************************/
NameTable::NameTable(Header* header, ReadableFontData* data)
: Table(header, data) {}
NameTable::~NameTable() {}
int32_t NameTable::format() {
return data_->readUShort(Offset::kFormat);
}
int32_t NameTable::nameCount() {
return data_->readUShort(Offset::kCount);
}
int32_t NameTable::stringOffset() {
return data_->readUShort(Offset::kStringOffset);
}
int32_t NameTable::offsetForNameRecord(int32_t index) {
return Offset::kNameRecordStart + index * Offset::kNameRecordSize;
}
int32_t NameTable::platformId(int32_t index) {
return data_->readUShort(Offset::kNameRecordPlatformId +
offsetForNameRecord(index));
}
int32_t NameTable::encodingId(int32_t index) {
return data_->readUShort(Offset::kNameRecordEncodingId +
offsetForNameRecord(index));
}
int32_t NameTable::languageId(int32_t index) {
return data_->readUShort(Offset::kNameRecordLanguageId +
offsetForNameRecord(index));
}
int32_t NameTable::nameId(int32_t index) {
return data_->readUShort(Offset::kNameRecordNameId +
offsetForNameRecord(index));
}
int32_t NameTable::nameLength(int32_t index) {
return data_->readUShort(Offset::kNameRecordStringLength +
offsetForNameRecord(index));
}
int32_t NameTable::nameOffset(int32_t index) {
return data_->readUShort(Offset::kNameRecordStringOffset +
offsetForNameRecord(index) + stringOffset());
}
void NameTable::nameAsBytes(int32_t index, ByteVector* b) {
assert(b);
int32_t length = nameLength(index);
b->clear();
b->resize(length);
data_->readBytes(nameOffset(index), b, 0, length);
}
CALLER_ATTACH NameTable::NameEntry* NameTable::nameEntry(int32_t index) {
ByteVector b;
nameAsBytes(index, &b);
NameEntryPtr instance = new NameEntry(platformId(index), encodingId(index),
languageId(index), nameId(index), b);
return instance.detach();
}
/******************************************************************************
* NameTable::NameEntry class
******************************************************************************/
void NameTable::NameEntry::init(int32_t platform_id, int32_t encoding_id,
int32_t language_id, int32_t name_id,
const ByteVector* name_bytes) {
platform_id_ = platform_id;
encoding_id_ = encoding_id;
language_id_ = language_id;
name_id_ = name_id;
if (name_bytes)
name_bytes_ = *name_bytes;
}
NameTable::NameEntry::NameEntry() {
init(0, 0, 0, 0, NULL);
}
NameTable::NameEntry::NameEntry(int32_t platform_id, int32_t encoding_id,
int32_t language_id, int32_t name_id,
const ByteVector& name_bytes) {
init(platform_id, encoding_id, language_id, name_id, &name_bytes);
}
NameTable::NameEntry::~NameEntry() {}
int32_t NameTable::NameEntry::platformId() { return platform_id_; }
int32_t NameTable::NameEntry::encodingId() { return encoding_id_; }
int32_t NameTable::NameEntry::languageId() { return language_id_; }
int32_t NameTable::NameEntry::nameId() { return name_id_; }
int32_t NameTable::NameEntry::nameBytesLength() { return name_bytes_.size(); }
ByteVector* NameTable::NameEntry::nameBytes() { return &name_bytes_; }
bool NameTable::NameEntry::operator==(const NameEntry& obj) {
return (encoding_id_ == obj.encoding_id_ &&
language_id_ == obj.language_id_ &&
platform_id_ == obj.platform_id_ &&
name_id_ == obj.name_id_);
}
int NameTable::NameEntry::hashCode() {
return ((encoding_id_ & 0x3f) << 26) | ((name_id_ & 0x3f) << 16) |
((platform_id_ & 0x0f) << 12) | (language_id_ & 0xff);
}
int NameTable::NameEntry::compareTo(const NameEntry& o) {
if (platform_id_ != o.platform_id_) {
return platform_id_ - o.platform_id_;
}
if (encoding_id_ != o.encoding_id_) {
return encoding_id_ - o.encoding_id_;
}
if (language_id_ != o.language_id_) {
return language_id_ - o.language_id_;
}
return name_id_ - o.name_id_;
}
/******************************************************************************
* NameTable::NameEntryBuilder class
******************************************************************************/
NameTable::NameEntryBuilder::NameEntryBuilder() {
init(0, 0, 0, 0, NULL);
}
NameTable::NameEntryBuilder::NameEntryBuilder(
int32_t platform_id, int32_t encoding_id, int32_t language_id,
int32_t name_id, const ByteVector& name_bytes) {
init(platform_id, encoding_id, language_id, name_id, &name_bytes);
}
NameTable::NameEntryBuilder::NameEntryBuilder(
int32_t platform_id, int32_t encoding_id, int32_t language_id,
int32_t name_id) {
init(platform_id, encoding_id, language_id, name_id, NULL);
}
NameTable::NameEntryBuilder::NameEntryBuilder(NameEntry* b) {
init(b->platform_id_, b->encoding_id_, b->language_id_, b->name_id_,
b->nameBytes());
}
NameTable::NameEntryBuilder::~NameEntryBuilder() {}
/******************************************************************************
* NameTable::NameEntryIterator class
******************************************************************************/
NameTable::NameEntryIterator::NameEntryIterator(NameTable* table,
NameEntryFilter* filter) :
table_(table), name_index_(0), filter_(filter) {
}
bool NameTable::NameEntryIterator::hasNext() {
if (!filter_) {
if (name_index_ < table_->nameCount()) {
return true;
}
return false;
}
for (; name_index_ < table_->nameCount(); ++name_index_) {
if (filter_->accept(table_->platformId(name_index_),
table_->encodingId(name_index_),
table_->languageId(name_index_),
table_->nameId(name_index_))) {
return true;
}
}
return false;
}
NameTable::NameEntry* NameTable::NameEntryIterator::next() {
if (!hasNext())
return NULL;
return table_->nameEntry(name_index_++);
}
/******************************************************************************
* NameTable::Builder class
******************************************************************************/
NameTable::Builder::Builder(FontDataTableBuilderContainer* font_builder,
Header* header, WritableFontData* data) :
Table::ArrayElementTableBuilder(font_builder, header, data) {
}
NameTable::Builder::Builder(FontDataTableBuilderContainer* font_builder,
Header* header, ReadableFontData* data) :
Table::ArrayElementTableBuilder(font_builder, header, data) {
}
void NameTable::Builder::initialize(ReadableFontData* data) {
if (data) {
NameTablePtr table = new NameTable(header(), data);
NameEntryIterator name_iter(table, NULL);
while (name_iter.hasNext()) {
NameEntryPtr name_entry(name_iter.next());
NameEntryBuilderPtr name_entry_builder = new NameEntryBuilder(name_entry);
name_entry_map_.insert(NameEntryMapEntry(name_entry_builder,
name_entry_builder));
}
}
}
int32_t NameTable::Builder::subSerialize(WritableFontData* new_data) {
int32_t string_table_start_offset =
NameTable::Offset::kNameRecordStart + name_entry_map_.size() *
NameTable::Offset::kNameRecordSize;
// header
new_data->writeUShort(NameTable::Offset::kFormat, 0);
new_data->writeUShort(NameTable::Offset::kCount, name_entry_map_.size());
new_data->writeUShort(NameTable::Offset::kStringOffset,
string_table_start_offset);
int32_t name_record_offset = NameTable::Offset::kNameRecordStart;
int32_t string_offset = 0;
for (NameEntryMap::iterator b = name_entry_map_.begin(),
end = name_entry_map_.end(); b != end; ++b) {
new_data->writeUShort(NameTable::Offset::kNameRecordPlatformId,
b->first->platformId());
new_data->writeUShort(NameTable::Offset::kNameRecordEncodingId,
b->first->encodingId());
new_data->writeUShort(NameTable::Offset::kNameRecordLanguageId,
b->first->languageId());
new_data->writeUShort(NameTable::Offset::kNameRecordNameId,
b->first->nameId());
new_data->writeUShort(NameTable::Offset::kNameRecordStringLength,
b->first->nameBytesLength());
new_data->writeUShort(NameTable::Offset::kNameRecordStringOffset,
string_offset);
name_record_offset += NameTable::Offset::kNameRecordSize;
string_offset += new_data->writeBytes(
string_offset + string_table_start_offset, b->first->nameBytes());
}
return string_offset + string_table_start_offset;
}
bool NameTable::Builder::subReadyToSerialize() {
return !name_entry_map_.empty();
}
int32_t NameTable::Builder::subDataSizeToSerialize() {
if (name_entry_map_.empty()) {
return 0;
}
int32_t size = NameTable::Offset::kNameRecordStart + name_entry_map_.size() *
NameTable::Offset::kNameRecordSize;
for (NameEntryMap::iterator b = name_entry_map_.begin(),
end = name_entry_map_.end(); b != end; ++b) {
size += b->first->nameBytesLength();
}
return size;
}
void NameTable::Builder::subDataSet() {
name_entry_map_.clear();
setModelChanged(false);
}
CALLER_ATTACH FontDataTable* NameTable::Builder::subBuildTable(
ReadableFontData* data) {
FontDataTablePtr table = new NameTable(header(), data);
return table.detach();
}
} // namespace sfntly