1 /* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkOTTable_name_DEFINED 9 #define SkOTTable_name_DEFINED 10 11 #include "include/core/SkString.h" 12 #include "src/core/SkEndian.h" 13 #include "src/sfnt/SkOTTableTypes.h" 14 15 #pragma pack(push, 1) 16 17 struct SkOTTableName { 18 static const SK_OT_CHAR TAG0 = 'n'; 19 static const SK_OT_CHAR TAG1 = 'a'; 20 static const SK_OT_CHAR TAG2 = 'm'; 21 static const SK_OT_CHAR TAG3 = 'e'; 22 static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableName>::value; 23 24 SK_OT_USHORT format; 25 static const SK_OT_USHORT format_0 = SkTEndian_SwapBE16(0); 26 /** Format 1 was added in OpenType 1.6 (April 2009). */ 27 static const SK_OT_USHORT format_1 = SkTEndian_SwapBE16(1); 28 29 /** The number of name records which follow. */ 30 SK_OT_USHORT count; 31 32 /** Offset in SK_OT_BYTEs to start of string storage area (from start of table). */ 33 SK_OT_USHORT stringOffset; 34 35 struct Record { 36 /** The platform ID specifies how to interpret the encoding and language ID. */ 37 struct PlatformID { 38 enum Value : SK_OT_USHORT { 39 Unicode = SkTEndian_SwapBE16(0), 40 Macintosh = SkTEndian_SwapBE16(1), 41 ISO = SkTEndian_SwapBE16(2), // Deprecated, use Unicode instead. 42 Windows = SkTEndian_SwapBE16(3), 43 Custom = SkTEndian_SwapBE16(4), 44 } value; 45 } platformID; 46 47 union EncodingID { 48 SK_OT_USHORT custom; 49 50 /** Always UTF-16BE. */ 51 struct Unicode { 52 enum Value : SK_OT_USHORT { 53 Unicode10 = SkTEndian_SwapBE16(0), 54 Unicode11 = SkTEndian_SwapBE16(1), 55 ISO10646 = SkTEndian_SwapBE16(2), //deprecated, use Unicode11 56 Unicode20BMP = SkTEndian_SwapBE16(3), 57 Unicode20 = SkTEndian_SwapBE16(4), 58 UnicodeVariationSequences = SkTEndian_SwapBE16(5), 59 UnicodeFull = SkTEndian_SwapBE16(6), 60 } value; 61 } unicode; 62 63 /** These are Mac encodings, see http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/ 64 * for their mappings to unicode. 65 * Name table strings using PlatformID::Macintosh must use Roman. 66 */ 67 struct Macintosh { 68 enum Value : SK_OT_USHORT { 69 Roman = SkTEndian_SwapBE16(0), 70 Japanese = SkTEndian_SwapBE16(1), 71 ChineseTraditional = SkTEndian_SwapBE16(2), 72 Korean = SkTEndian_SwapBE16(3), 73 Arabic = SkTEndian_SwapBE16(4), 74 Hebrew = SkTEndian_SwapBE16(5), 75 Greek = SkTEndian_SwapBE16(6), 76 Russian = SkTEndian_SwapBE16(7), 77 RSymbol = SkTEndian_SwapBE16(8), 78 Devanagari = SkTEndian_SwapBE16(9), 79 Gurmukhi = SkTEndian_SwapBE16(10), 80 Gujarati = SkTEndian_SwapBE16(11), 81 Oriya = SkTEndian_SwapBE16(12), 82 Bengali = SkTEndian_SwapBE16(13), 83 Tamil = SkTEndian_SwapBE16(14), 84 Telugu = SkTEndian_SwapBE16(15), 85 Kannada = SkTEndian_SwapBE16(16), 86 Malayalam = SkTEndian_SwapBE16(17), 87 Sinhalese = SkTEndian_SwapBE16(18), 88 Burmese = SkTEndian_SwapBE16(19), 89 Khmer = SkTEndian_SwapBE16(20), 90 Thai = SkTEndian_SwapBE16(21), 91 Laotian = SkTEndian_SwapBE16(22), 92 Georgian = SkTEndian_SwapBE16(23), 93 Armenian = SkTEndian_SwapBE16(24), 94 ChineseSimplified = SkTEndian_SwapBE16(25), 95 Tibetan = SkTEndian_SwapBE16(26), 96 Mongolian = SkTEndian_SwapBE16(27), 97 Geez = SkTEndian_SwapBE16(28), 98 Slavic = SkTEndian_SwapBE16(29), 99 Vietnamese = SkTEndian_SwapBE16(30), 100 Sindhi = SkTEndian_SwapBE16(31), 101 Uninterpreted = SkTEndian_SwapBE16(32), 102 } value; 103 } macintosh; 104 105 /** Deprecated, use Unicode instead. */ 106 struct ISO { 107 enum Value : SK_OT_USHORT { 108 ASCII7 = SkTEndian_SwapBE16(0), 109 ISO10646 = SkTEndian_SwapBE16(1), 110 ISO88591 = SkTEndian_SwapBE16(2), 111 } value; 112 } iso; 113 114 /** Name table strings using PlatformID::Windows must use Symbol, UnicodeBMPUCS2, or 115 * UnicodeUCS4. Symbol and UnicodeBMPUCS2 are both UCS2-BE, UnicodeUCS4 is actually 116 * UTF-16BE. 117 */ 118 struct Windows { 119 enum Value : SK_OT_USHORT { 120 Symbol = SkTEndian_SwapBE16(0), // UCS2-BE, but don't use this font to display it's own name. 121 UnicodeBMPUCS2 = SkTEndian_SwapBE16(1), // UCS2-BE, Windows default 122 ShiftJIS = SkTEndian_SwapBE16(2), 123 PRC = SkTEndian_SwapBE16(3), 124 Big5 = SkTEndian_SwapBE16(4), 125 Wansung = SkTEndian_SwapBE16(5), 126 Johab = SkTEndian_SwapBE16(6), 127 UnicodeUCS4 = SkTEndian_SwapBE16(10), // UTF-16BE. It means UCS4 in charmaps. 128 } value; 129 } windows; 130 } encodingID; 131 132 /** LanguageIDs <= 0x7FFF are predefined. 133 * LanguageIDs > 0x7FFF are indexes into the langTagRecord array 134 * (in format 1 name tables, see SkOTTableName::format). 135 */ 136 union LanguageID { 137 /** A value greater than 0x7FFF. 138 * languageTagID - 0x8000 is an index into the langTagRecord array. 139 */ 140 SK_OT_USHORT languageTagID; 141 142 /** These are known as Language Designators. 143 * Apple now uses BCP 47 (post OSX10.4), so there will be no new entries. 144 */ 145 struct Macintosh { 146 enum Value : SK_OT_USHORT { 147 English = SkTEndian_SwapBE16(0), 148 French = SkTEndian_SwapBE16(1), 149 German = SkTEndian_SwapBE16(2), 150 Italian = SkTEndian_SwapBE16(3), 151 Dutch = SkTEndian_SwapBE16(4), 152 Swedish = SkTEndian_SwapBE16(5), 153 Spanish = SkTEndian_SwapBE16(6), 154 Danish = SkTEndian_SwapBE16(7), 155 Portuguese = SkTEndian_SwapBE16(8), 156 Norwegian = SkTEndian_SwapBE16(9), 157 Hebrew = SkTEndian_SwapBE16(10), 158 Japanese = SkTEndian_SwapBE16(11), 159 Arabic = SkTEndian_SwapBE16(12), 160 Finnish = SkTEndian_SwapBE16(13), 161 Greek = SkTEndian_SwapBE16(14), 162 Icelandic = SkTEndian_SwapBE16(15), 163 Maltese = SkTEndian_SwapBE16(16), 164 Turkish = SkTEndian_SwapBE16(17), 165 Croatian = SkTEndian_SwapBE16(18), 166 ChineseTraditional = SkTEndian_SwapBE16(19), 167 Urdu = SkTEndian_SwapBE16(20), 168 Hindi = SkTEndian_SwapBE16(21), 169 Thai = SkTEndian_SwapBE16(22), 170 Korean = SkTEndian_SwapBE16(23), 171 Lithuanian = SkTEndian_SwapBE16(24), 172 Polish = SkTEndian_SwapBE16(25), 173 Hungarian = SkTEndian_SwapBE16(26), 174 Estonian = SkTEndian_SwapBE16(27), 175 Latvian = SkTEndian_SwapBE16(28), 176 Sami = SkTEndian_SwapBE16(29), 177 Faroese = SkTEndian_SwapBE16(30), 178 Farsi_Persian = SkTEndian_SwapBE16(31), 179 Russian = SkTEndian_SwapBE16(32), 180 ChineseSimplified = SkTEndian_SwapBE16(33), 181 Flemish = SkTEndian_SwapBE16(34), 182 IrishGaelic = SkTEndian_SwapBE16(35), 183 Albanian = SkTEndian_SwapBE16(36), 184 Romanian = SkTEndian_SwapBE16(37), 185 Czech = SkTEndian_SwapBE16(38), 186 Slovak = SkTEndian_SwapBE16(39), 187 Slovenian = SkTEndian_SwapBE16(40), 188 Yiddish = SkTEndian_SwapBE16(41), 189 Serbian = SkTEndian_SwapBE16(42), 190 Macedonian = SkTEndian_SwapBE16(43), 191 Bulgarian = SkTEndian_SwapBE16(44), 192 Ukrainian = SkTEndian_SwapBE16(45), 193 Byelorussian = SkTEndian_SwapBE16(46), 194 Uzbek = SkTEndian_SwapBE16(47), 195 Kazakh = SkTEndian_SwapBE16(48), 196 AzerbaijaniCyrillic = SkTEndian_SwapBE16(49), 197 AzerbaijaniArabic = SkTEndian_SwapBE16(50), 198 Armenian = SkTEndian_SwapBE16(51), 199 Georgian = SkTEndian_SwapBE16(52), 200 Moldavian = SkTEndian_SwapBE16(53), 201 Kirghiz = SkTEndian_SwapBE16(54), 202 Tajiki = SkTEndian_SwapBE16(55), 203 Turkmen = SkTEndian_SwapBE16(56), 204 MongolianTraditional = SkTEndian_SwapBE16(57), 205 MongolianCyrillic = SkTEndian_SwapBE16(58), 206 Pashto = SkTEndian_SwapBE16(59), 207 Kurdish = SkTEndian_SwapBE16(60), 208 Kashmiri = SkTEndian_SwapBE16(61), 209 Sindhi = SkTEndian_SwapBE16(62), 210 Tibetan = SkTEndian_SwapBE16(63), 211 Nepali = SkTEndian_SwapBE16(64), 212 Sanskrit = SkTEndian_SwapBE16(65), 213 Marathi = SkTEndian_SwapBE16(66), 214 Bengali = SkTEndian_SwapBE16(67), 215 Assamese = SkTEndian_SwapBE16(68), 216 Gujarati = SkTEndian_SwapBE16(69), 217 Punjabi = SkTEndian_SwapBE16(70), 218 Oriya = SkTEndian_SwapBE16(71), 219 Malayalam = SkTEndian_SwapBE16(72), 220 Kannada = SkTEndian_SwapBE16(73), 221 Tamil = SkTEndian_SwapBE16(74), 222 Telugu = SkTEndian_SwapBE16(75), 223 Sinhalese = SkTEndian_SwapBE16(76), 224 Burmese = SkTEndian_SwapBE16(77), 225 Khmer = SkTEndian_SwapBE16(78), 226 Lao = SkTEndian_SwapBE16(79), 227 Vietnamese = SkTEndian_SwapBE16(80), 228 Indonesian = SkTEndian_SwapBE16(81), 229 Tagalong = SkTEndian_SwapBE16(82), 230 MalayRoman = SkTEndian_SwapBE16(83), 231 MalayArabic = SkTEndian_SwapBE16(84), 232 Amharic = SkTEndian_SwapBE16(85), 233 Tigrinya = SkTEndian_SwapBE16(86), 234 Galla = SkTEndian_SwapBE16(87), 235 Somali = SkTEndian_SwapBE16(88), 236 Swahili = SkTEndian_SwapBE16(89), 237 Kinyarwanda_Ruanda = SkTEndian_SwapBE16(90), 238 Rundi = SkTEndian_SwapBE16(91), 239 Nyanja_Chewa = SkTEndian_SwapBE16(92), 240 Malagasy = SkTEndian_SwapBE16(93), 241 Esperanto = SkTEndian_SwapBE16(94), 242 Welsh = SkTEndian_SwapBE16(128), 243 Basque = SkTEndian_SwapBE16(129), 244 Catalan = SkTEndian_SwapBE16(130), 245 Latin = SkTEndian_SwapBE16(131), 246 Quenchua = SkTEndian_SwapBE16(132), 247 Guarani = SkTEndian_SwapBE16(133), 248 Aymara = SkTEndian_SwapBE16(134), 249 Tatar = SkTEndian_SwapBE16(135), 250 Uighur = SkTEndian_SwapBE16(136), 251 Dzongkha = SkTEndian_SwapBE16(137), 252 JavaneseRoman = SkTEndian_SwapBE16(138), 253 SundaneseRoman = SkTEndian_SwapBE16(139), 254 Galician = SkTEndian_SwapBE16(140), 255 Afrikaans = SkTEndian_SwapBE16(141), 256 Breton = SkTEndian_SwapBE16(142), 257 Inuktitut = SkTEndian_SwapBE16(143), 258 ScottishGaelic = SkTEndian_SwapBE16(144), 259 ManxGaelic = SkTEndian_SwapBE16(145), 260 IrishGaelicWithLenition = SkTEndian_SwapBE16(146), 261 Tongan = SkTEndian_SwapBE16(147), 262 GreekPolytonic = SkTEndian_SwapBE16(148), 263 Greenlandic = SkTEndian_SwapBE16(149), 264 AzerbaijaniRoman = SkTEndian_SwapBE16(150), 265 } value; 266 } macintosh; 267 268 /** These are known as LCIDs. 269 * On Windows the current set can be had from EnumSystemLocalesEx and LocaleNameToLCID. 270 */ 271 struct Windows { 272 enum Value : SK_OT_USHORT { 273 Afrikaans_SouthAfrica = SkTEndian_SwapBE16(0x0436), 274 Albanian_Albania = SkTEndian_SwapBE16(0x041C), 275 Alsatian_France = SkTEndian_SwapBE16(0x0484), 276 Amharic_Ethiopia = SkTEndian_SwapBE16(0x045E), 277 Arabic_Algeria = SkTEndian_SwapBE16(0x1401), 278 Arabic_Bahrain = SkTEndian_SwapBE16(0x3C01), 279 Arabic_Egypt = SkTEndian_SwapBE16(0x0C01), 280 Arabic_Iraq = SkTEndian_SwapBE16(0x0801), 281 Arabic_Jordan = SkTEndian_SwapBE16(0x2C01), 282 Arabic_Kuwait = SkTEndian_SwapBE16(0x3401), 283 Arabic_Lebanon = SkTEndian_SwapBE16(0x3001), 284 Arabic_Libya = SkTEndian_SwapBE16(0x1001), 285 Arabic_Morocco = SkTEndian_SwapBE16(0x1801), 286 Arabic_Oman = SkTEndian_SwapBE16(0x2001), 287 Arabic_Qatar = SkTEndian_SwapBE16(0x4001), 288 Arabic_SaudiArabia = SkTEndian_SwapBE16(0x0401), 289 Arabic_Syria = SkTEndian_SwapBE16(0x2801), 290 Arabic_Tunisia = SkTEndian_SwapBE16(0x1C01), 291 Arabic_UAE = SkTEndian_SwapBE16(0x3801), 292 Arabic_Yemen = SkTEndian_SwapBE16(0x2401), 293 Armenian_Armenia = SkTEndian_SwapBE16(0x042B), 294 Assamese_India = SkTEndian_SwapBE16(0x044D), 295 AzeriCyrillic_Azerbaijan = SkTEndian_SwapBE16(0x082C), 296 AzeriLatin_Azerbaijan = SkTEndian_SwapBE16(0x042C), 297 Bashkir_Russia = SkTEndian_SwapBE16(0x046D), 298 Basque_Basque = SkTEndian_SwapBE16(0x042D), 299 Belarusian_Belarus = SkTEndian_SwapBE16(0x0423), 300 Bengali_Bangladesh = SkTEndian_SwapBE16(0x0845), 301 Bengali_India = SkTEndian_SwapBE16(0x0445), 302 BosnianCyrillic_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x201A), 303 BosnianLatin_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x141A), 304 Breton_France = SkTEndian_SwapBE16(0x047E), 305 Bulgarian_Bulgaria = SkTEndian_SwapBE16(0x0402), 306 Catalan_Catalan = SkTEndian_SwapBE16(0x0403), 307 Chinese_HongKongSAR = SkTEndian_SwapBE16(0x0C04), 308 Chinese_MacaoSAR = SkTEndian_SwapBE16(0x1404), 309 Chinese_PeoplesRepublicOfChina = SkTEndian_SwapBE16(0x0804), 310 Chinese_Singapore = SkTEndian_SwapBE16(0x1004), 311 Chinese_Taiwan = SkTEndian_SwapBE16(0x0404), 312 Corsican_France = SkTEndian_SwapBE16(0x0483), 313 Croatian_Croatia = SkTEndian_SwapBE16(0x041A), 314 CroatianLatin_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x101A), 315 Czech_CzechRepublic = SkTEndian_SwapBE16(0x0405), 316 Danish_Denmark = SkTEndian_SwapBE16(0x0406), 317 Dari_Afghanistan = SkTEndian_SwapBE16(0x048C), 318 Divehi_Maldives = SkTEndian_SwapBE16(0x0465), 319 Dutch_Belgium = SkTEndian_SwapBE16(0x0813), 320 Dutch_Netherlands = SkTEndian_SwapBE16(0x0413), 321 English_Australia = SkTEndian_SwapBE16(0x0C09), 322 English_Belize = SkTEndian_SwapBE16(0x2809), 323 English_Canada = SkTEndian_SwapBE16(0x1009), 324 English_Caribbean = SkTEndian_SwapBE16(0x2409), 325 English_India = SkTEndian_SwapBE16(0x4009), 326 English_Ireland = SkTEndian_SwapBE16(0x1809), 327 English_Jamaica = SkTEndian_SwapBE16(0x2009), 328 English_Malaysia = SkTEndian_SwapBE16(0x4409), 329 English_NewZealand = SkTEndian_SwapBE16(0x1409), 330 English_RepublicOfThePhilippines = SkTEndian_SwapBE16(0x3409), 331 English_Singapore = SkTEndian_SwapBE16(0x4809), 332 English_SouthAfrica = SkTEndian_SwapBE16(0x1C09), 333 English_TrinidadAndTobago = SkTEndian_SwapBE16(0x2C09), 334 English_UnitedKingdom = SkTEndian_SwapBE16(0x0809), 335 English_UnitedStates = SkTEndian_SwapBE16(0x0409), 336 English_Zimbabwe = SkTEndian_SwapBE16(0x3009), 337 Estonian_Estonia = SkTEndian_SwapBE16(0x0425), 338 Faroese_FaroeIslands = SkTEndian_SwapBE16(0x0438), 339 Filipino_Philippines = SkTEndian_SwapBE16(0x0464), 340 Finnish_Finland = SkTEndian_SwapBE16(0x040B), 341 French_Belgium = SkTEndian_SwapBE16(0x080C), 342 French_Canada = SkTEndian_SwapBE16(0x0C0C), 343 French_France = SkTEndian_SwapBE16(0x040C), 344 French_Luxembourg = SkTEndian_SwapBE16(0x140c), 345 French_PrincipalityOfMonoco = SkTEndian_SwapBE16(0x180C), 346 French_Switzerland = SkTEndian_SwapBE16(0x100C), 347 Frisian_Netherlands = SkTEndian_SwapBE16(0x0462), 348 Galician_Galician = SkTEndian_SwapBE16(0x0456), 349 Georgian_Georgia = SkTEndian_SwapBE16(0x0437), 350 German_Austria = SkTEndian_SwapBE16(0x0C07), 351 German_Germany = SkTEndian_SwapBE16(0x0407), 352 German_Liechtenstein = SkTEndian_SwapBE16(0x1407), 353 German_Luxembourg = SkTEndian_SwapBE16(0x1007), 354 German_Switzerland = SkTEndian_SwapBE16(0x0807), 355 Greek_Greece = SkTEndian_SwapBE16(0x0408), 356 Greenlandic_Greenland = SkTEndian_SwapBE16(0x046F), 357 Gujarati_India = SkTEndian_SwapBE16(0x0447), 358 HausaLatin_Nigeria = SkTEndian_SwapBE16(0x0468), 359 Hebrew_Israel = SkTEndian_SwapBE16(0x040D), 360 Hindi_India = SkTEndian_SwapBE16(0x0439), 361 Hungarian_Hungary = SkTEndian_SwapBE16(0x040E), 362 Icelandic_Iceland = SkTEndian_SwapBE16(0x040F), 363 Igbo_Nigeria = SkTEndian_SwapBE16(0x0470), 364 Indonesian_Indonesia = SkTEndian_SwapBE16(0x0421), 365 Inuktitut_Canada = SkTEndian_SwapBE16(0x045D), 366 InuktitutLatin_Canada = SkTEndian_SwapBE16(0x085D), 367 Irish_Ireland = SkTEndian_SwapBE16(0x083C), 368 isiXhosa_SouthAfrica = SkTEndian_SwapBE16(0x0434), 369 isiZulu_SouthAfrica = SkTEndian_SwapBE16(0x0435), 370 Italian_Italy = SkTEndian_SwapBE16(0x0410), 371 Italian_Switzerland = SkTEndian_SwapBE16(0x0810), 372 Japanese_Japan = SkTEndian_SwapBE16(0x0411), 373 Kannada_India = SkTEndian_SwapBE16(0x044B), 374 Kazakh_Kazakhstan = SkTEndian_SwapBE16(0x043F), 375 Khmer_Cambodia = SkTEndian_SwapBE16(0x0453), 376 Kiche_Guatemala = SkTEndian_SwapBE16(0x0486), 377 Kinyarwanda_Rwanda = SkTEndian_SwapBE16(0x0487), 378 Kiswahili_Kenya = SkTEndian_SwapBE16(0x0441), 379 Konkani_India = SkTEndian_SwapBE16(0x0457), 380 Korean_Korea = SkTEndian_SwapBE16(0x0412), 381 Kyrgyz_Kyrgyzstan = SkTEndian_SwapBE16(0x0440), 382 Lao_LaoPDR = SkTEndian_SwapBE16(0x0454), 383 Latvian_Latvia = SkTEndian_SwapBE16(0x0426), 384 Lithuanian_Lithuania = SkTEndian_SwapBE16(0x0427), 385 LowerSorbian_Germany = SkTEndian_SwapBE16(0x082E), 386 Luxembourgish_Luxembourg = SkTEndian_SwapBE16(0x046E), 387 MacedonianFYROM_FormerYugoslavRepublicOfMacedonia = SkTEndian_SwapBE16(0x042F), 388 Malay_BruneiDarussalam = SkTEndian_SwapBE16(0x083E), 389 Malay_Malaysia = SkTEndian_SwapBE16(0x043E), 390 Malayalam_India = SkTEndian_SwapBE16(0x044C), 391 Maltese_Malta = SkTEndian_SwapBE16(0x043A), 392 Maori_NewZealand = SkTEndian_SwapBE16(0x0481), 393 Mapudungun_Chile = SkTEndian_SwapBE16(0x047A), 394 Marathi_India = SkTEndian_SwapBE16(0x044E), 395 Mohawk_Mohawk = SkTEndian_SwapBE16(0x047C), 396 MongolianCyrillic_Mongolia = SkTEndian_SwapBE16(0x0450), 397 MongolianTraditional_PeoplesRepublicOfChina = SkTEndian_SwapBE16(0x0850), 398 Nepali_Nepal = SkTEndian_SwapBE16(0x0461), 399 NorwegianBokmal_Norway = SkTEndian_SwapBE16(0x0414), 400 NorwegianNynorsk_Norway = SkTEndian_SwapBE16(0x0814), 401 Occitan_France = SkTEndian_SwapBE16(0x0482), 402 Odia_India = SkTEndian_SwapBE16(0x0448), 403 Pashto_Afghanistan = SkTEndian_SwapBE16(0x0463), 404 Polish_Poland = SkTEndian_SwapBE16(0x0415), 405 Portuguese_Brazil = SkTEndian_SwapBE16(0x0416), 406 Portuguese_Portugal = SkTEndian_SwapBE16(0x0816), 407 Punjabi_India = SkTEndian_SwapBE16(0x0446), 408 Quechua_Bolivia = SkTEndian_SwapBE16(0x046B), 409 Quechua_Ecuador = SkTEndian_SwapBE16(0x086B), 410 Quechua_Peru = SkTEndian_SwapBE16(0x0C6B), 411 Romanian_Romania = SkTEndian_SwapBE16(0x0418), 412 Romansh_Switzerland = SkTEndian_SwapBE16(0x0417), 413 Russian_Russia = SkTEndian_SwapBE16(0x0419), 414 SamiInari_Finland = SkTEndian_SwapBE16(0x243B), 415 SamiLule_Norway = SkTEndian_SwapBE16(0x103B), 416 SamiLule_Sweden = SkTEndian_SwapBE16(0x143B), 417 SamiNorthern_Finland = SkTEndian_SwapBE16(0x0C3B), 418 SamiNorthern_Norway = SkTEndian_SwapBE16(0x043B), 419 SamiNorthern_Sweden = SkTEndian_SwapBE16(0x083B), 420 SamiSkolt_Finland = SkTEndian_SwapBE16(0x203B), 421 SamiSouthern_Norway = SkTEndian_SwapBE16(0x183B), 422 SamiSouthern_Sweden = SkTEndian_SwapBE16(0x1C3B), 423 Sanskrit_India = SkTEndian_SwapBE16(0x044F), 424 SerbianCyrillic_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x1C1A), 425 SerbianCyrillic_Serbia = SkTEndian_SwapBE16(0x0C1A), 426 SerbianLatin_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x181A), 427 SerbianLatin_Serbia = SkTEndian_SwapBE16(0x081A), 428 SesothoSaLeboa_SouthAfrica = SkTEndian_SwapBE16(0x046C), 429 Setswana_SouthAfrica = SkTEndian_SwapBE16(0x0432), 430 Sinhala_SriLanka = SkTEndian_SwapBE16(0x045B), 431 Slovak_Slovakia = SkTEndian_SwapBE16(0x041B), 432 Slovenian_Slovenia = SkTEndian_SwapBE16(0x0424), 433 Spanish_Argentina = SkTEndian_SwapBE16(0x2C0A), 434 Spanish_Bolivia = SkTEndian_SwapBE16(0x400A), 435 Spanish_Chile = SkTEndian_SwapBE16(0x340A), 436 Spanish_Colombia = SkTEndian_SwapBE16(0x240A), 437 Spanish_CostaRica = SkTEndian_SwapBE16(0x140A), 438 Spanish_DominicanRepublic = SkTEndian_SwapBE16(0x1C0A), 439 Spanish_Ecuador = SkTEndian_SwapBE16(0x300A), 440 Spanish_ElSalvador = SkTEndian_SwapBE16(0x440A), 441 Spanish_Guatemala = SkTEndian_SwapBE16(0x100A), 442 Spanish_Honduras = SkTEndian_SwapBE16(0x480A), 443 Spanish_Mexico = SkTEndian_SwapBE16(0x080A), 444 Spanish_Nicaragua = SkTEndian_SwapBE16(0x4C0A), 445 Spanish_Panama = SkTEndian_SwapBE16(0x180A), 446 Spanish_Paraguay = SkTEndian_SwapBE16(0x3C0A), 447 Spanish_Peru = SkTEndian_SwapBE16(0x280A), 448 Spanish_PuertoRico = SkTEndian_SwapBE16(0x500A), 449 SpanishModernSort_Spain = SkTEndian_SwapBE16(0x0C0A), 450 SpanishTraditionalSort_Spain = SkTEndian_SwapBE16(0x040A), 451 Spanish_UnitedStates = SkTEndian_SwapBE16(0x540A), 452 Spanish_Uruguay = SkTEndian_SwapBE16(0x380A), 453 Spanish_Venezuela = SkTEndian_SwapBE16(0x200A), 454 Sweden_Finland = SkTEndian_SwapBE16(0x081D), 455 Swedish_Sweden = SkTEndian_SwapBE16(0x041D), 456 Syriac_Syria = SkTEndian_SwapBE16(0x045A), 457 TajikCyrillic_Tajikistan = SkTEndian_SwapBE16(0x0428), 458 TamazightLatin_Algeria = SkTEndian_SwapBE16(0x085F), 459 Tamil_India = SkTEndian_SwapBE16(0x0449), 460 Tatar_Russia = SkTEndian_SwapBE16(0x0444), 461 Telugu_India = SkTEndian_SwapBE16(0x044A), 462 Thai_Thailand = SkTEndian_SwapBE16(0x041E), 463 Tibetan_PRC = SkTEndian_SwapBE16(0x0451), 464 Turkish_Turkey = SkTEndian_SwapBE16(0x041F), 465 Turkmen_Turkmenistan = SkTEndian_SwapBE16(0x0442), 466 Uighur_PRC = SkTEndian_SwapBE16(0x0480), 467 Ukrainian_Ukraine = SkTEndian_SwapBE16(0x0422), 468 UpperSorbian_Germany = SkTEndian_SwapBE16(0x042E), 469 Urdu_IslamicRepublicOfPakistan = SkTEndian_SwapBE16(0x0420), 470 UzbekCyrillic_Uzbekistan = SkTEndian_SwapBE16(0x0843), 471 UzbekLatin_Uzbekistan = SkTEndian_SwapBE16(0x0443), 472 Vietnamese_Vietnam = SkTEndian_SwapBE16(0x042A), 473 Welsh_UnitedKingdom = SkTEndian_SwapBE16(0x0452), 474 Wolof_Senegal = SkTEndian_SwapBE16(0x0488), 475 Yakut_Russia = SkTEndian_SwapBE16(0x0485), 476 Yi_PRC = SkTEndian_SwapBE16(0x0478), 477 Yoruba_Nigeria = SkTEndian_SwapBE16(0x046A), 478 } value; 479 } windows; 480 } languageID; 481 482 /** NameIDs <= 0xFF are predefined. Those > 0xFF are font specific. */ 483 union NameID { 484 /** A font specific name id which should be greater than 0xFF. */ 485 SK_OT_USHORT fontSpecific; 486 struct Predefined { 487 enum Value : SK_OT_USHORT { 488 CopyrightNotice = SkTEndian_SwapBE16(0), 489 FontFamilyName = SkTEndian_SwapBE16(1), 490 FontSubfamilyName = SkTEndian_SwapBE16(2), 491 UniqueFontIdentifier = SkTEndian_SwapBE16(3), 492 FullFontName = SkTEndian_SwapBE16(4), 493 VersionString = SkTEndian_SwapBE16(5), //Version <number>.<number> 494 PostscriptName = SkTEndian_SwapBE16(6), //See spec for constraints. 495 Trademark = SkTEndian_SwapBE16(7), 496 ManufacturerName = SkTEndian_SwapBE16(8), 497 Designer = SkTEndian_SwapBE16(9), 498 Description = SkTEndian_SwapBE16(10), 499 URLVendor = SkTEndian_SwapBE16(11), 500 URLDesigner = SkTEndian_SwapBE16(12), 501 LicenseDescription = SkTEndian_SwapBE16(13), 502 LicenseInfoURL = SkTEndian_SwapBE16(14), 503 PreferredFamily = SkTEndian_SwapBE16(16), 504 PreferredSubfamily = SkTEndian_SwapBE16(17), 505 CompatibleFullName = SkTEndian_SwapBE16(18), 506 SampleText = SkTEndian_SwapBE16(19), 507 PostscriptCIDFindfontName = SkTEndian_SwapBE16(20), 508 WWSFamilyName = SkTEndian_SwapBE16(21), 509 WWSSubfamilyName = SkTEndian_SwapBE16(22), 510 } value; 511 } predefined; 512 } nameID; 513 514 /** The length of the string in SK_OT_BYTEs. */ 515 SK_OT_USHORT length; 516 517 /** Offset in SK_OT_BYTEs from start of string storage area 518 * (see SkOTTableName::stringOffset). 519 */ 520 SK_OT_USHORT offset; 521 }; //nameRecord[count]; 522 523 struct Format1Ext { 524 /** The number of languageTagRecords which follow. */ 525 SK_OT_USHORT langTagCount; 526 527 /** The encoding of a langTagRecord string is always UTF-16BE. 528 * The content should follow IETF specification BCP 47. 529 */ 530 struct LangTagRecord { 531 /** The length of the string in SK_OT_BYTEs. */ 532 SK_OT_USHORT length; 533 534 /** Offset in SK_OT_BYTEs from start of string storage area 535 * (see SkOTTableName::stringOffset). 536 */ 537 SK_OT_USHORT offset; 538 }; //langTagRecord[langTagCount] 539 }; //format1ext (if format == format_1) 540 541 class Iterator { 542 public: IteratorSkOTTableName543 Iterator(const uint8_t* nameTable, size_t size) 544 : fNameTable(nameTable), fNameTableSize(size), fIndex(0), fType(-1) { } IteratorSkOTTableName545 Iterator(const uint8_t* nameTable, size_t size, SK_OT_USHORT type) 546 : fNameTable(nameTable), fNameTableSize(size), fIndex(0), fType(type) 547 { } 548 resetSkOTTableName549 void reset(SK_OT_USHORT type) { 550 fIndex = 0; 551 fType = type; 552 } 553 554 struct Record { 555 SkString name; 556 SkString language; 557 SK_OT_USHORT type; 558 }; 559 bool next(Record&); 560 561 private: 562 const uint8_t* fNameTable; 563 const size_t fNameTableSize; 564 size_t fIndex; 565 int fType; 566 }; 567 }; 568 569 #pragma pack(pop) 570 571 572 static_assert(sizeof(SkOTTableName) == 6, "sizeof_SkOTTableName_not_6"); 573 static_assert(sizeof(SkOTTableName::Format1Ext) == 2, "sizeof_SkOTTableNameF1_not_2"); 574 static_assert(sizeof(SkOTTableName::Format1Ext::LangTagRecord) == 4, "sizeof_SkOTTableNameLangTagRecord_not_4"); 575 static_assert(sizeof(SkOTTableName::Record) == 12, "sizeof_SkOTTableNameRecord_not_12"); 576 577 #endif 578