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