/* * 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" #include "SkTypedEnum.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::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 { SK_TYPED_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))) SK_SEQ_END, (value)SK_SEQ_END) } platformID; union EncodingID { SK_OT_USHORT custom; /** Always UTF-16BE. */ struct Unicode { SK_TYPED_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))) SK_SEQ_END, (value)SK_SEQ_END) } 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 { SK_TYPED_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))) SK_SEQ_END, (value)SK_SEQ_END) } macintosh; /** Deprecated, use Unicode instead. */ struct ISO { SK_TYPED_ENUM(Value, SK_OT_USHORT, ((ASCII7, SkTEndian_SwapBE16(0))) ((ISO10646, SkTEndian_SwapBE16(1))) ((ISO88591, SkTEndian_SwapBE16(2))) SK_SEQ_END, (value)SK_SEQ_END) } 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 { SK_TYPED_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. SK_SEQ_END, (value)SK_SEQ_END) } 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 { SK_TYPED_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))) SK_SEQ_END, (value)SK_SEQ_END) } macintosh; /** These are known as LCIDs. * On Windows the current set can be had from EnumSystemLocalesEx and LocaleNameToLCID. */ struct Windows { SK_TYPED_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))) SK_SEQ_END, (value)SK_SEQ_END) } 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 { SK_TYPED_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 . ((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))) SK_SEQ_END, (value)SK_SEQ_END) } 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 SkOTTableName& name) : fName(name), fIndex(0), fType(-1) { } Iterator(const SkOTTableName& name, SkOTTableName::Record::NameID::Predefined::Value type) : fName(name), fIndex(0), fType(type) { } void reset(SkOTTableName::Record::NameID::Predefined::Value type) { fIndex = 0; fType = type; } struct Record { SkString name; SkString language; SK_OT_USHORT type; }; bool next(Record&); private: const SkOTTableName& fName; 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