|  | /* | 
|  | * 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 SkOTTable_name_DEFINED | 
|  | #define SkOTTable_name_DEFINED | 
|  |  | 
|  | #include "include/core/SkString.h" | 
|  | #include "src/core/SkEndian.h" | 
|  | #include "src/sfnt/SkOTTableTypes.h" | 
|  |  | 
|  | #pragma pack(push, 1) | 
|  |  | 
|  | struct SkOTTableName { | 
|  | static const SK_OT_CHAR TAG0 = 'n'; | 
|  | static const SK_OT_CHAR TAG1 = 'a'; | 
|  | static const SK_OT_CHAR TAG2 = 'm'; | 
|  | static const SK_OT_CHAR TAG3 = 'e'; | 
|  | static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableName>::value; | 
|  |  | 
|  | SK_OT_USHORT format; | 
|  | static const SK_OT_USHORT format_0 = SkTEndian_SwapBE16(0); | 
|  | /** Format 1 was added in OpenType 1.6 (April 2009). */ | 
|  | static const SK_OT_USHORT format_1 = SkTEndian_SwapBE16(1); | 
|  |  | 
|  | /** The number of name records which follow. */ | 
|  | SK_OT_USHORT count; | 
|  |  | 
|  | /** Offset in SK_OT_BYTEs to start of string storage area (from start of table). */ | 
|  | SK_OT_USHORT stringOffset; | 
|  |  | 
|  | struct Record { | 
|  | /** The platform ID specifies how to interpret the encoding and language ID. */ | 
|  | struct PlatformID { | 
|  | enum Value : SK_OT_USHORT { | 
|  | Unicode = SkTEndian_SwapBE16(0), | 
|  | Macintosh = SkTEndian_SwapBE16(1), | 
|  | ISO = SkTEndian_SwapBE16(2), // Deprecated, use Unicode instead. | 
|  | Windows = SkTEndian_SwapBE16(3), | 
|  | Custom = SkTEndian_SwapBE16(4), | 
|  | } value; | 
|  | } platformID; | 
|  |  | 
|  | union EncodingID { | 
|  | SK_OT_USHORT custom; | 
|  |  | 
|  | /** Always UTF-16BE. */ | 
|  | struct Unicode { | 
|  | enum Value : SK_OT_USHORT { | 
|  | Unicode10 = SkTEndian_SwapBE16(0), | 
|  | Unicode11 = SkTEndian_SwapBE16(1), | 
|  | ISO10646 = SkTEndian_SwapBE16(2), //deprecated, use Unicode11 | 
|  | Unicode20BMP = SkTEndian_SwapBE16(3), | 
|  | Unicode20 = SkTEndian_SwapBE16(4), | 
|  | UnicodeVariationSequences = SkTEndian_SwapBE16(5), | 
|  | UnicodeFull = SkTEndian_SwapBE16(6), | 
|  | } value; | 
|  | } unicode; | 
|  |  | 
|  | /** These are Mac encodings, see http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/ | 
|  | *  for their mappings to unicode. | 
|  | *  Name table strings using PlatformID::Macintosh must use Roman. | 
|  | */ | 
|  | struct Macintosh { | 
|  | enum Value : SK_OT_USHORT { | 
|  | Roman = SkTEndian_SwapBE16(0), | 
|  | Japanese = SkTEndian_SwapBE16(1), | 
|  | ChineseTraditional = SkTEndian_SwapBE16(2), | 
|  | Korean = SkTEndian_SwapBE16(3), | 
|  | Arabic = SkTEndian_SwapBE16(4), | 
|  | Hebrew = SkTEndian_SwapBE16(5), | 
|  | Greek = SkTEndian_SwapBE16(6), | 
|  | Russian = SkTEndian_SwapBE16(7), | 
|  | RSymbol = SkTEndian_SwapBE16(8), | 
|  | Devanagari = SkTEndian_SwapBE16(9), | 
|  | Gurmukhi = SkTEndian_SwapBE16(10), | 
|  | Gujarati = SkTEndian_SwapBE16(11), | 
|  | Oriya = SkTEndian_SwapBE16(12), | 
|  | Bengali = SkTEndian_SwapBE16(13), | 
|  | Tamil = SkTEndian_SwapBE16(14), | 
|  | Telugu = SkTEndian_SwapBE16(15), | 
|  | Kannada = SkTEndian_SwapBE16(16), | 
|  | Malayalam = SkTEndian_SwapBE16(17), | 
|  | Sinhalese = SkTEndian_SwapBE16(18), | 
|  | Burmese = SkTEndian_SwapBE16(19), | 
|  | Khmer = SkTEndian_SwapBE16(20), | 
|  | Thai = SkTEndian_SwapBE16(21), | 
|  | Laotian = SkTEndian_SwapBE16(22), | 
|  | Georgian = SkTEndian_SwapBE16(23), | 
|  | Armenian = SkTEndian_SwapBE16(24), | 
|  | ChineseSimplified = SkTEndian_SwapBE16(25), | 
|  | Tibetan = SkTEndian_SwapBE16(26), | 
|  | Mongolian = SkTEndian_SwapBE16(27), | 
|  | Geez = SkTEndian_SwapBE16(28), | 
|  | Slavic = SkTEndian_SwapBE16(29), | 
|  | Vietnamese = SkTEndian_SwapBE16(30), | 
|  | Sindhi = SkTEndian_SwapBE16(31), | 
|  | Uninterpreted = SkTEndian_SwapBE16(32), | 
|  | } value; | 
|  | } macintosh; | 
|  |  | 
|  | /** Deprecated, use Unicode instead. */ | 
|  | struct ISO { | 
|  | enum Value : SK_OT_USHORT { | 
|  | ASCII7 = SkTEndian_SwapBE16(0), | 
|  | ISO10646 = SkTEndian_SwapBE16(1), | 
|  | ISO88591 = SkTEndian_SwapBE16(2), | 
|  | } value; | 
|  | } iso; | 
|  |  | 
|  | /** Name table strings using PlatformID::Windows must use Symbol, UnicodeBMPUCS2, or | 
|  | *  UnicodeUCS4. Symbol and UnicodeBMPUCS2 are both UCS2-BE, UnicodeUCS4 is actually | 
|  | *  UTF-16BE. | 
|  | */ | 
|  | struct Windows { | 
|  | enum Value : SK_OT_USHORT { | 
|  | Symbol = SkTEndian_SwapBE16(0), // UCS2-BE, but don't use this font to display it's own name. | 
|  | UnicodeBMPUCS2 = SkTEndian_SwapBE16(1), // UCS2-BE, Windows default | 
|  | ShiftJIS = SkTEndian_SwapBE16(2), | 
|  | PRC = SkTEndian_SwapBE16(3), | 
|  | Big5 = SkTEndian_SwapBE16(4), | 
|  | Wansung = SkTEndian_SwapBE16(5), | 
|  | Johab = SkTEndian_SwapBE16(6), | 
|  | UnicodeUCS4 = SkTEndian_SwapBE16(10), // UTF-16BE. It means UCS4 in charmaps. | 
|  | } value; | 
|  | } windows; | 
|  | } encodingID; | 
|  |  | 
|  | /** LanguageIDs <= 0x7FFF are predefined. | 
|  | *  LanguageIDs > 0x7FFF are indexes into the langTagRecord array | 
|  | *  (in format 1 name tables, see SkOTTableName::format). | 
|  | */ | 
|  | union LanguageID { | 
|  | /** A value greater than 0x7FFF. | 
|  | *  languageTagID - 0x8000 is an index into the langTagRecord array. | 
|  | */ | 
|  | SK_OT_USHORT languageTagID; | 
|  |  | 
|  | /** These are known as Language Designators. | 
|  | *  Apple now uses BCP 47 (post OSX10.4), so there will be no new entries. | 
|  | */ | 
|  | struct Macintosh { | 
|  | enum Value : SK_OT_USHORT { | 
|  | English = SkTEndian_SwapBE16(0), | 
|  | French = SkTEndian_SwapBE16(1), | 
|  | German = SkTEndian_SwapBE16(2), | 
|  | Italian = SkTEndian_SwapBE16(3), | 
|  | Dutch = SkTEndian_SwapBE16(4), | 
|  | Swedish = SkTEndian_SwapBE16(5), | 
|  | Spanish = SkTEndian_SwapBE16(6), | 
|  | Danish = SkTEndian_SwapBE16(7), | 
|  | Portuguese = SkTEndian_SwapBE16(8), | 
|  | Norwegian = SkTEndian_SwapBE16(9), | 
|  | Hebrew = SkTEndian_SwapBE16(10), | 
|  | Japanese = SkTEndian_SwapBE16(11), | 
|  | Arabic = SkTEndian_SwapBE16(12), | 
|  | Finnish = SkTEndian_SwapBE16(13), | 
|  | Greek = SkTEndian_SwapBE16(14), | 
|  | Icelandic = SkTEndian_SwapBE16(15), | 
|  | Maltese = SkTEndian_SwapBE16(16), | 
|  | Turkish = SkTEndian_SwapBE16(17), | 
|  | Croatian = SkTEndian_SwapBE16(18), | 
|  | ChineseTraditional = SkTEndian_SwapBE16(19), | 
|  | Urdu = SkTEndian_SwapBE16(20), | 
|  | Hindi = SkTEndian_SwapBE16(21), | 
|  | Thai = SkTEndian_SwapBE16(22), | 
|  | Korean = SkTEndian_SwapBE16(23), | 
|  | Lithuanian = SkTEndian_SwapBE16(24), | 
|  | Polish = SkTEndian_SwapBE16(25), | 
|  | Hungarian = SkTEndian_SwapBE16(26), | 
|  | Estonian = SkTEndian_SwapBE16(27), | 
|  | Latvian = SkTEndian_SwapBE16(28), | 
|  | Sami = SkTEndian_SwapBE16(29), | 
|  | Faroese = SkTEndian_SwapBE16(30), | 
|  | Farsi_Persian = SkTEndian_SwapBE16(31), | 
|  | Russian = SkTEndian_SwapBE16(32), | 
|  | ChineseSimplified = SkTEndian_SwapBE16(33), | 
|  | Flemish = SkTEndian_SwapBE16(34), | 
|  | IrishGaelic = SkTEndian_SwapBE16(35), | 
|  | Albanian = SkTEndian_SwapBE16(36), | 
|  | Romanian = SkTEndian_SwapBE16(37), | 
|  | Czech = SkTEndian_SwapBE16(38), | 
|  | Slovak = SkTEndian_SwapBE16(39), | 
|  | Slovenian = SkTEndian_SwapBE16(40), | 
|  | Yiddish = SkTEndian_SwapBE16(41), | 
|  | Serbian = SkTEndian_SwapBE16(42), | 
|  | Macedonian = SkTEndian_SwapBE16(43), | 
|  | Bulgarian = SkTEndian_SwapBE16(44), | 
|  | Ukrainian = SkTEndian_SwapBE16(45), | 
|  | Byelorussian = SkTEndian_SwapBE16(46), | 
|  | Uzbek = SkTEndian_SwapBE16(47), | 
|  | Kazakh = SkTEndian_SwapBE16(48), | 
|  | AzerbaijaniCyrillic = SkTEndian_SwapBE16(49), | 
|  | AzerbaijaniArabic = SkTEndian_SwapBE16(50), | 
|  | Armenian = SkTEndian_SwapBE16(51), | 
|  | Georgian = SkTEndian_SwapBE16(52), | 
|  | Moldavian = SkTEndian_SwapBE16(53), | 
|  | Kirghiz = SkTEndian_SwapBE16(54), | 
|  | Tajiki = SkTEndian_SwapBE16(55), | 
|  | Turkmen = SkTEndian_SwapBE16(56), | 
|  | MongolianTraditional = SkTEndian_SwapBE16(57), | 
|  | MongolianCyrillic = SkTEndian_SwapBE16(58), | 
|  | Pashto = SkTEndian_SwapBE16(59), | 
|  | Kurdish = SkTEndian_SwapBE16(60), | 
|  | Kashmiri = SkTEndian_SwapBE16(61), | 
|  | Sindhi = SkTEndian_SwapBE16(62), | 
|  | Tibetan = SkTEndian_SwapBE16(63), | 
|  | Nepali = SkTEndian_SwapBE16(64), | 
|  | Sanskrit = SkTEndian_SwapBE16(65), | 
|  | Marathi = SkTEndian_SwapBE16(66), | 
|  | Bengali = SkTEndian_SwapBE16(67), | 
|  | Assamese = SkTEndian_SwapBE16(68), | 
|  | Gujarati = SkTEndian_SwapBE16(69), | 
|  | Punjabi = SkTEndian_SwapBE16(70), | 
|  | Oriya = SkTEndian_SwapBE16(71), | 
|  | Malayalam = SkTEndian_SwapBE16(72), | 
|  | Kannada = SkTEndian_SwapBE16(73), | 
|  | Tamil = SkTEndian_SwapBE16(74), | 
|  | Telugu = SkTEndian_SwapBE16(75), | 
|  | Sinhalese = SkTEndian_SwapBE16(76), | 
|  | Burmese = SkTEndian_SwapBE16(77), | 
|  | Khmer = SkTEndian_SwapBE16(78), | 
|  | Lao = SkTEndian_SwapBE16(79), | 
|  | Vietnamese = SkTEndian_SwapBE16(80), | 
|  | Indonesian = SkTEndian_SwapBE16(81), | 
|  | Tagalong = SkTEndian_SwapBE16(82), | 
|  | MalayRoman = SkTEndian_SwapBE16(83), | 
|  | MalayArabic = SkTEndian_SwapBE16(84), | 
|  | Amharic = SkTEndian_SwapBE16(85), | 
|  | Tigrinya = SkTEndian_SwapBE16(86), | 
|  | Galla = SkTEndian_SwapBE16(87), | 
|  | Somali = SkTEndian_SwapBE16(88), | 
|  | Swahili = SkTEndian_SwapBE16(89), | 
|  | Kinyarwanda_Ruanda = SkTEndian_SwapBE16(90), | 
|  | Rundi = SkTEndian_SwapBE16(91), | 
|  | Nyanja_Chewa = SkTEndian_SwapBE16(92), | 
|  | Malagasy = SkTEndian_SwapBE16(93), | 
|  | Esperanto = SkTEndian_SwapBE16(94), | 
|  | Welsh = SkTEndian_SwapBE16(128), | 
|  | Basque = SkTEndian_SwapBE16(129), | 
|  | Catalan = SkTEndian_SwapBE16(130), | 
|  | Latin = SkTEndian_SwapBE16(131), | 
|  | Quenchua = SkTEndian_SwapBE16(132), | 
|  | Guarani = SkTEndian_SwapBE16(133), | 
|  | Aymara = SkTEndian_SwapBE16(134), | 
|  | Tatar = SkTEndian_SwapBE16(135), | 
|  | Uighur = SkTEndian_SwapBE16(136), | 
|  | Dzongkha = SkTEndian_SwapBE16(137), | 
|  | JavaneseRoman = SkTEndian_SwapBE16(138), | 
|  | SundaneseRoman = SkTEndian_SwapBE16(139), | 
|  | Galician = SkTEndian_SwapBE16(140), | 
|  | Afrikaans = SkTEndian_SwapBE16(141), | 
|  | Breton = SkTEndian_SwapBE16(142), | 
|  | Inuktitut = SkTEndian_SwapBE16(143), | 
|  | ScottishGaelic = SkTEndian_SwapBE16(144), | 
|  | ManxGaelic = SkTEndian_SwapBE16(145), | 
|  | IrishGaelicWithLenition = SkTEndian_SwapBE16(146), | 
|  | Tongan = SkTEndian_SwapBE16(147), | 
|  | GreekPolytonic = SkTEndian_SwapBE16(148), | 
|  | Greenlandic = SkTEndian_SwapBE16(149), | 
|  | AzerbaijaniRoman = SkTEndian_SwapBE16(150), | 
|  | } value; | 
|  | } macintosh; | 
|  |  | 
|  | /** These are known as LCIDs. | 
|  | *  On Windows the current set can be had from EnumSystemLocalesEx and LocaleNameToLCID. | 
|  | */ | 
|  | struct Windows { | 
|  | enum Value : SK_OT_USHORT { | 
|  | Afrikaans_SouthAfrica = SkTEndian_SwapBE16(0x0436), | 
|  | Albanian_Albania = SkTEndian_SwapBE16(0x041C), | 
|  | Alsatian_France = SkTEndian_SwapBE16(0x0484), | 
|  | Amharic_Ethiopia = SkTEndian_SwapBE16(0x045E), | 
|  | Arabic_Algeria = SkTEndian_SwapBE16(0x1401), | 
|  | Arabic_Bahrain = SkTEndian_SwapBE16(0x3C01), | 
|  | Arabic_Egypt = SkTEndian_SwapBE16(0x0C01), | 
|  | Arabic_Iraq = SkTEndian_SwapBE16(0x0801), | 
|  | Arabic_Jordan = SkTEndian_SwapBE16(0x2C01), | 
|  | Arabic_Kuwait = SkTEndian_SwapBE16(0x3401), | 
|  | Arabic_Lebanon = SkTEndian_SwapBE16(0x3001), | 
|  | Arabic_Libya = SkTEndian_SwapBE16(0x1001), | 
|  | Arabic_Morocco = SkTEndian_SwapBE16(0x1801), | 
|  | Arabic_Oman = SkTEndian_SwapBE16(0x2001), | 
|  | Arabic_Qatar = SkTEndian_SwapBE16(0x4001), | 
|  | Arabic_SaudiArabia = SkTEndian_SwapBE16(0x0401), | 
|  | Arabic_Syria = SkTEndian_SwapBE16(0x2801), | 
|  | Arabic_Tunisia = SkTEndian_SwapBE16(0x1C01), | 
|  | Arabic_UAE = SkTEndian_SwapBE16(0x3801), | 
|  | Arabic_Yemen = SkTEndian_SwapBE16(0x2401), | 
|  | Armenian_Armenia = SkTEndian_SwapBE16(0x042B), | 
|  | Assamese_India = SkTEndian_SwapBE16(0x044D), | 
|  | AzeriCyrillic_Azerbaijan = SkTEndian_SwapBE16(0x082C), | 
|  | AzeriLatin_Azerbaijan = SkTEndian_SwapBE16(0x042C), | 
|  | Bashkir_Russia = SkTEndian_SwapBE16(0x046D), | 
|  | Basque_Basque = SkTEndian_SwapBE16(0x042D), | 
|  | Belarusian_Belarus = SkTEndian_SwapBE16(0x0423), | 
|  | Bengali_Bangladesh = SkTEndian_SwapBE16(0x0845), | 
|  | Bengali_India = SkTEndian_SwapBE16(0x0445), | 
|  | BosnianCyrillic_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x201A), | 
|  | BosnianLatin_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x141A), | 
|  | Breton_France = SkTEndian_SwapBE16(0x047E), | 
|  | Bulgarian_Bulgaria = SkTEndian_SwapBE16(0x0402), | 
|  | Catalan_Catalan = SkTEndian_SwapBE16(0x0403), | 
|  | Chinese_HongKongSAR = SkTEndian_SwapBE16(0x0C04), | 
|  | Chinese_MacaoSAR = SkTEndian_SwapBE16(0x1404), | 
|  | Chinese_PeoplesRepublicOfChina = SkTEndian_SwapBE16(0x0804), | 
|  | Chinese_Singapore = SkTEndian_SwapBE16(0x1004), | 
|  | Chinese_Taiwan = SkTEndian_SwapBE16(0x0404), | 
|  | Corsican_France = SkTEndian_SwapBE16(0x0483), | 
|  | Croatian_Croatia = SkTEndian_SwapBE16(0x041A), | 
|  | CroatianLatin_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x101A), | 
|  | Czech_CzechRepublic = SkTEndian_SwapBE16(0x0405), | 
|  | Danish_Denmark = SkTEndian_SwapBE16(0x0406), | 
|  | Dari_Afghanistan = SkTEndian_SwapBE16(0x048C), | 
|  | Divehi_Maldives = SkTEndian_SwapBE16(0x0465), | 
|  | Dutch_Belgium = SkTEndian_SwapBE16(0x0813), | 
|  | Dutch_Netherlands = SkTEndian_SwapBE16(0x0413), | 
|  | English_Australia = SkTEndian_SwapBE16(0x0C09), | 
|  | English_Belize = SkTEndian_SwapBE16(0x2809), | 
|  | English_Canada = SkTEndian_SwapBE16(0x1009), | 
|  | English_Caribbean = SkTEndian_SwapBE16(0x2409), | 
|  | English_India = SkTEndian_SwapBE16(0x4009), | 
|  | English_Ireland = SkTEndian_SwapBE16(0x1809), | 
|  | English_Jamaica = SkTEndian_SwapBE16(0x2009), | 
|  | English_Malaysia = SkTEndian_SwapBE16(0x4409), | 
|  | English_NewZealand = SkTEndian_SwapBE16(0x1409), | 
|  | English_RepublicOfThePhilippines = SkTEndian_SwapBE16(0x3409), | 
|  | English_Singapore = SkTEndian_SwapBE16(0x4809), | 
|  | English_SouthAfrica = SkTEndian_SwapBE16(0x1C09), | 
|  | English_TrinidadAndTobago = SkTEndian_SwapBE16(0x2C09), | 
|  | English_UnitedKingdom = SkTEndian_SwapBE16(0x0809), | 
|  | English_UnitedStates = SkTEndian_SwapBE16(0x0409), | 
|  | English_Zimbabwe = SkTEndian_SwapBE16(0x3009), | 
|  | Estonian_Estonia = SkTEndian_SwapBE16(0x0425), | 
|  | Faroese_FaroeIslands = SkTEndian_SwapBE16(0x0438), | 
|  | Filipino_Philippines = SkTEndian_SwapBE16(0x0464), | 
|  | Finnish_Finland = SkTEndian_SwapBE16(0x040B), | 
|  | French_Belgium = SkTEndian_SwapBE16(0x080C), | 
|  | French_Canada = SkTEndian_SwapBE16(0x0C0C), | 
|  | French_France = SkTEndian_SwapBE16(0x040C), | 
|  | French_Luxembourg = SkTEndian_SwapBE16(0x140c), | 
|  | French_PrincipalityOfMonoco = SkTEndian_SwapBE16(0x180C), | 
|  | French_Switzerland = SkTEndian_SwapBE16(0x100C), | 
|  | Frisian_Netherlands = SkTEndian_SwapBE16(0x0462), | 
|  | Galician_Galician = SkTEndian_SwapBE16(0x0456), | 
|  | Georgian_Georgia = SkTEndian_SwapBE16(0x0437), | 
|  | German_Austria = SkTEndian_SwapBE16(0x0C07), | 
|  | German_Germany = SkTEndian_SwapBE16(0x0407), | 
|  | German_Liechtenstein = SkTEndian_SwapBE16(0x1407), | 
|  | German_Luxembourg = SkTEndian_SwapBE16(0x1007), | 
|  | German_Switzerland = SkTEndian_SwapBE16(0x0807), | 
|  | Greek_Greece = SkTEndian_SwapBE16(0x0408), | 
|  | Greenlandic_Greenland = SkTEndian_SwapBE16(0x046F), | 
|  | Gujarati_India = SkTEndian_SwapBE16(0x0447), | 
|  | HausaLatin_Nigeria = SkTEndian_SwapBE16(0x0468), | 
|  | Hebrew_Israel = SkTEndian_SwapBE16(0x040D), | 
|  | Hindi_India = SkTEndian_SwapBE16(0x0439), | 
|  | Hungarian_Hungary = SkTEndian_SwapBE16(0x040E), | 
|  | Icelandic_Iceland = SkTEndian_SwapBE16(0x040F), | 
|  | Igbo_Nigeria = SkTEndian_SwapBE16(0x0470), | 
|  | Indonesian_Indonesia = SkTEndian_SwapBE16(0x0421), | 
|  | Inuktitut_Canada = SkTEndian_SwapBE16(0x045D), | 
|  | InuktitutLatin_Canada = SkTEndian_SwapBE16(0x085D), | 
|  | Irish_Ireland = SkTEndian_SwapBE16(0x083C), | 
|  | isiXhosa_SouthAfrica = SkTEndian_SwapBE16(0x0434), | 
|  | isiZulu_SouthAfrica = SkTEndian_SwapBE16(0x0435), | 
|  | Italian_Italy = SkTEndian_SwapBE16(0x0410), | 
|  | Italian_Switzerland = SkTEndian_SwapBE16(0x0810), | 
|  | Japanese_Japan = SkTEndian_SwapBE16(0x0411), | 
|  | Kannada_India = SkTEndian_SwapBE16(0x044B), | 
|  | Kazakh_Kazakhstan = SkTEndian_SwapBE16(0x043F), | 
|  | Khmer_Cambodia = SkTEndian_SwapBE16(0x0453), | 
|  | Kiche_Guatemala = SkTEndian_SwapBE16(0x0486), | 
|  | Kinyarwanda_Rwanda = SkTEndian_SwapBE16(0x0487), | 
|  | Kiswahili_Kenya = SkTEndian_SwapBE16(0x0441), | 
|  | Konkani_India = SkTEndian_SwapBE16(0x0457), | 
|  | Korean_Korea = SkTEndian_SwapBE16(0x0412), | 
|  | Kyrgyz_Kyrgyzstan = SkTEndian_SwapBE16(0x0440), | 
|  | Lao_LaoPDR = SkTEndian_SwapBE16(0x0454), | 
|  | Latvian_Latvia = SkTEndian_SwapBE16(0x0426), | 
|  | Lithuanian_Lithuania = SkTEndian_SwapBE16(0x0427), | 
|  | LowerSorbian_Germany = SkTEndian_SwapBE16(0x082E), | 
|  | Luxembourgish_Luxembourg = SkTEndian_SwapBE16(0x046E), | 
|  | MacedonianFYROM_FormerYugoslavRepublicOfMacedonia = SkTEndian_SwapBE16(0x042F), | 
|  | Malay_BruneiDarussalam = SkTEndian_SwapBE16(0x083E), | 
|  | Malay_Malaysia = SkTEndian_SwapBE16(0x043E), | 
|  | Malayalam_India = SkTEndian_SwapBE16(0x044C), | 
|  | Maltese_Malta = SkTEndian_SwapBE16(0x043A), | 
|  | Maori_NewZealand = SkTEndian_SwapBE16(0x0481), | 
|  | Mapudungun_Chile = SkTEndian_SwapBE16(0x047A), | 
|  | Marathi_India = SkTEndian_SwapBE16(0x044E), | 
|  | Mohawk_Mohawk = SkTEndian_SwapBE16(0x047C), | 
|  | MongolianCyrillic_Mongolia = SkTEndian_SwapBE16(0x0450), | 
|  | MongolianTraditional_PeoplesRepublicOfChina = SkTEndian_SwapBE16(0x0850), | 
|  | Nepali_Nepal = SkTEndian_SwapBE16(0x0461), | 
|  | NorwegianBokmal_Norway = SkTEndian_SwapBE16(0x0414), | 
|  | NorwegianNynorsk_Norway = SkTEndian_SwapBE16(0x0814), | 
|  | Occitan_France = SkTEndian_SwapBE16(0x0482), | 
|  | Odia_India = SkTEndian_SwapBE16(0x0448), | 
|  | Pashto_Afghanistan = SkTEndian_SwapBE16(0x0463), | 
|  | Polish_Poland = SkTEndian_SwapBE16(0x0415), | 
|  | Portuguese_Brazil = SkTEndian_SwapBE16(0x0416), | 
|  | Portuguese_Portugal = SkTEndian_SwapBE16(0x0816), | 
|  | Punjabi_India = SkTEndian_SwapBE16(0x0446), | 
|  | Quechua_Bolivia = SkTEndian_SwapBE16(0x046B), | 
|  | Quechua_Ecuador = SkTEndian_SwapBE16(0x086B), | 
|  | Quechua_Peru = SkTEndian_SwapBE16(0x0C6B), | 
|  | Romanian_Romania = SkTEndian_SwapBE16(0x0418), | 
|  | Romansh_Switzerland = SkTEndian_SwapBE16(0x0417), | 
|  | Russian_Russia = SkTEndian_SwapBE16(0x0419), | 
|  | SamiInari_Finland = SkTEndian_SwapBE16(0x243B), | 
|  | SamiLule_Norway = SkTEndian_SwapBE16(0x103B), | 
|  | SamiLule_Sweden = SkTEndian_SwapBE16(0x143B), | 
|  | SamiNorthern_Finland = SkTEndian_SwapBE16(0x0C3B), | 
|  | SamiNorthern_Norway = SkTEndian_SwapBE16(0x043B), | 
|  | SamiNorthern_Sweden = SkTEndian_SwapBE16(0x083B), | 
|  | SamiSkolt_Finland = SkTEndian_SwapBE16(0x203B), | 
|  | SamiSouthern_Norway = SkTEndian_SwapBE16(0x183B), | 
|  | SamiSouthern_Sweden = SkTEndian_SwapBE16(0x1C3B), | 
|  | Sanskrit_India = SkTEndian_SwapBE16(0x044F), | 
|  | SerbianCyrillic_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x1C1A), | 
|  | SerbianCyrillic_Serbia = SkTEndian_SwapBE16(0x0C1A), | 
|  | SerbianLatin_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x181A), | 
|  | SerbianLatin_Serbia = SkTEndian_SwapBE16(0x081A), | 
|  | SesothoSaLeboa_SouthAfrica = SkTEndian_SwapBE16(0x046C), | 
|  | Setswana_SouthAfrica = SkTEndian_SwapBE16(0x0432), | 
|  | Sinhala_SriLanka = SkTEndian_SwapBE16(0x045B), | 
|  | Slovak_Slovakia = SkTEndian_SwapBE16(0x041B), | 
|  | Slovenian_Slovenia = SkTEndian_SwapBE16(0x0424), | 
|  | Spanish_Argentina = SkTEndian_SwapBE16(0x2C0A), | 
|  | Spanish_Bolivia = SkTEndian_SwapBE16(0x400A), | 
|  | Spanish_Chile = SkTEndian_SwapBE16(0x340A), | 
|  | Spanish_Colombia = SkTEndian_SwapBE16(0x240A), | 
|  | Spanish_CostaRica = SkTEndian_SwapBE16(0x140A), | 
|  | Spanish_DominicanRepublic = SkTEndian_SwapBE16(0x1C0A), | 
|  | Spanish_Ecuador = SkTEndian_SwapBE16(0x300A), | 
|  | Spanish_ElSalvador = SkTEndian_SwapBE16(0x440A), | 
|  | Spanish_Guatemala = SkTEndian_SwapBE16(0x100A), | 
|  | Spanish_Honduras = SkTEndian_SwapBE16(0x480A), | 
|  | Spanish_Mexico = SkTEndian_SwapBE16(0x080A), | 
|  | Spanish_Nicaragua = SkTEndian_SwapBE16(0x4C0A), | 
|  | Spanish_Panama = SkTEndian_SwapBE16(0x180A), | 
|  | Spanish_Paraguay = SkTEndian_SwapBE16(0x3C0A), | 
|  | Spanish_Peru = SkTEndian_SwapBE16(0x280A), | 
|  | Spanish_PuertoRico = SkTEndian_SwapBE16(0x500A), | 
|  | SpanishModernSort_Spain = SkTEndian_SwapBE16(0x0C0A), | 
|  | SpanishTraditionalSort_Spain = SkTEndian_SwapBE16(0x040A), | 
|  | Spanish_UnitedStates = SkTEndian_SwapBE16(0x540A), | 
|  | Spanish_Uruguay = SkTEndian_SwapBE16(0x380A), | 
|  | Spanish_Venezuela = SkTEndian_SwapBE16(0x200A), | 
|  | Sweden_Finland = SkTEndian_SwapBE16(0x081D), | 
|  | Swedish_Sweden = SkTEndian_SwapBE16(0x041D), | 
|  | Syriac_Syria = SkTEndian_SwapBE16(0x045A), | 
|  | TajikCyrillic_Tajikistan = SkTEndian_SwapBE16(0x0428), | 
|  | TamazightLatin_Algeria = SkTEndian_SwapBE16(0x085F), | 
|  | Tamil_India = SkTEndian_SwapBE16(0x0449), | 
|  | Tatar_Russia = SkTEndian_SwapBE16(0x0444), | 
|  | Telugu_India = SkTEndian_SwapBE16(0x044A), | 
|  | Thai_Thailand = SkTEndian_SwapBE16(0x041E), | 
|  | Tibetan_PRC = SkTEndian_SwapBE16(0x0451), | 
|  | Turkish_Turkey = SkTEndian_SwapBE16(0x041F), | 
|  | Turkmen_Turkmenistan = SkTEndian_SwapBE16(0x0442), | 
|  | Uighur_PRC = SkTEndian_SwapBE16(0x0480), | 
|  | Ukrainian_Ukraine = SkTEndian_SwapBE16(0x0422), | 
|  | UpperSorbian_Germany = SkTEndian_SwapBE16(0x042E), | 
|  | Urdu_IslamicRepublicOfPakistan = SkTEndian_SwapBE16(0x0420), | 
|  | UzbekCyrillic_Uzbekistan = SkTEndian_SwapBE16(0x0843), | 
|  | UzbekLatin_Uzbekistan = SkTEndian_SwapBE16(0x0443), | 
|  | Vietnamese_Vietnam = SkTEndian_SwapBE16(0x042A), | 
|  | Welsh_UnitedKingdom = SkTEndian_SwapBE16(0x0452), | 
|  | Wolof_Senegal = SkTEndian_SwapBE16(0x0488), | 
|  | Yakut_Russia = SkTEndian_SwapBE16(0x0485), | 
|  | Yi_PRC = SkTEndian_SwapBE16(0x0478), | 
|  | Yoruba_Nigeria = SkTEndian_SwapBE16(0x046A), | 
|  | } value; | 
|  | } windows; | 
|  | } languageID; | 
|  |  | 
|  | /** NameIDs <= 0xFF are predefined. Those > 0xFF are font specific. */ | 
|  | union NameID { | 
|  | /** A font specific name id which should be greater than 0xFF. */ | 
|  | SK_OT_USHORT fontSpecific; | 
|  | struct Predefined { | 
|  | enum Value : SK_OT_USHORT { | 
|  | CopyrightNotice = SkTEndian_SwapBE16(0), | 
|  | FontFamilyName = SkTEndian_SwapBE16(1), | 
|  | FontSubfamilyName = SkTEndian_SwapBE16(2), | 
|  | UniqueFontIdentifier = SkTEndian_SwapBE16(3), | 
|  | FullFontName = SkTEndian_SwapBE16(4), | 
|  | VersionString = SkTEndian_SwapBE16(5), //Version <number>.<number> | 
|  | PostscriptName = SkTEndian_SwapBE16(6), //See spec for constraints. | 
|  | Trademark = SkTEndian_SwapBE16(7), | 
|  | ManufacturerName = SkTEndian_SwapBE16(8), | 
|  | Designer = SkTEndian_SwapBE16(9), | 
|  | Description = SkTEndian_SwapBE16(10), | 
|  | URLVendor = SkTEndian_SwapBE16(11), | 
|  | URLDesigner = SkTEndian_SwapBE16(12), | 
|  | LicenseDescription = SkTEndian_SwapBE16(13), | 
|  | LicenseInfoURL = SkTEndian_SwapBE16(14), | 
|  | PreferredFamily = SkTEndian_SwapBE16(16), | 
|  | PreferredSubfamily = SkTEndian_SwapBE16(17), | 
|  | CompatibleFullName = SkTEndian_SwapBE16(18), | 
|  | SampleText = SkTEndian_SwapBE16(19), | 
|  | PostscriptCIDFindfontName = SkTEndian_SwapBE16(20), | 
|  | WWSFamilyName = SkTEndian_SwapBE16(21), | 
|  | WWSSubfamilyName = SkTEndian_SwapBE16(22), | 
|  | } value; | 
|  | } predefined; | 
|  | } nameID; | 
|  |  | 
|  | /** The length of the string in SK_OT_BYTEs. */ | 
|  | SK_OT_USHORT length; | 
|  |  | 
|  | /** Offset in SK_OT_BYTEs from start of string storage area | 
|  | *  (see SkOTTableName::stringOffset). | 
|  | */ | 
|  | SK_OT_USHORT offset; | 
|  | }; //nameRecord[count]; | 
|  |  | 
|  | struct Format1Ext { | 
|  | /** The number of languageTagRecords which follow. */ | 
|  | SK_OT_USHORT langTagCount; | 
|  |  | 
|  | /** The encoding of a langTagRecord string is always UTF-16BE. | 
|  | *  The content should follow IETF specification BCP 47. | 
|  | */ | 
|  | struct LangTagRecord { | 
|  | /** The length of the string in SK_OT_BYTEs. */ | 
|  | SK_OT_USHORT length; | 
|  |  | 
|  | /** Offset in SK_OT_BYTEs from start of string storage area | 
|  | *  (see SkOTTableName::stringOffset). | 
|  | */ | 
|  | SK_OT_USHORT offset; | 
|  | }; //langTagRecord[langTagCount] | 
|  | }; //format1ext (if format == format_1) | 
|  |  | 
|  | class Iterator { | 
|  | public: | 
|  | Iterator(const uint8_t* nameTable, size_t size) | 
|  | : fNameTable(nameTable), fNameTableSize(size), fIndex(0), fType(-1) { } | 
|  | Iterator(const uint8_t* nameTable, size_t size, SK_OT_USHORT type) | 
|  | : fNameTable(nameTable), fNameTableSize(size), fIndex(0), fType(type) | 
|  | { } | 
|  |  | 
|  | void reset(SK_OT_USHORT type) { | 
|  | fIndex = 0; | 
|  | fType = type; | 
|  | } | 
|  |  | 
|  | struct Record { | 
|  | SkString name; | 
|  | SkString language; | 
|  | SK_OT_USHORT type; | 
|  | }; | 
|  | bool next(Record&); | 
|  |  | 
|  | private: | 
|  | const uint8_t* fNameTable; | 
|  | const size_t fNameTableSize; | 
|  | size_t fIndex; | 
|  | int fType; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | #pragma pack(pop) | 
|  |  | 
|  |  | 
|  | static_assert(sizeof(SkOTTableName) == 6, "sizeof_SkOTTableName_not_6"); | 
|  | static_assert(sizeof(SkOTTableName::Format1Ext) == 2, "sizeof_SkOTTableNameF1_not_2"); | 
|  | static_assert(sizeof(SkOTTableName::Format1Ext::LangTagRecord) == 4, "sizeof_SkOTTableNameLangTagRecord_not_4"); | 
|  | static_assert(sizeof(SkOTTableName::Record) == 12, "sizeof_SkOTTableNameRecord_not_12"); | 
|  |  | 
|  | #endif |