| /* | |
| * 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) | |
| // The iterator should not be packed. | |
| #pragma pack(pop) | |
| 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; | |
| }; | |
| }; | |
| 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 |