/* * 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 "SkEndian.h" #include "SkOTTableTypes.h" #include "SkString.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