SkOTTable_name.h revision a980269c2498836101146adc729ef780fb89824e
18ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com/* 28ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com * Copyright 2012 Google Inc. 38ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com * 48ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com * Use of this source code is governed by a BSD-style license that can be 58ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com * found in the LICENSE file. 68ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com */ 78ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 88ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#ifndef SkOTTable_name_DEFINED 98ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#define SkOTTable_name_DEFINED 108ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 118ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#include "SkEndian.h" 128ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#include "SkOTTableTypes.h" 1307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com#include "SkString.h" 148ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#include "SkTypedEnum.h" 158ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 168ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#pragma pack(push, 1) 178ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 188ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.comstruct SkOTTableName { 19ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG0 = 'n'; 20ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG1 = 'a'; 21ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG2 = 'm'; 22ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG3 = 'e'; 23ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableName>::value; 24ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com 258ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com SK_OT_USHORT format; 268ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com static const SK_OT_USHORT format_0 = SkTEndian_SwapBE16(0); 2707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** Format 1 was added in OpenType 1.6 (April 2009). */ 288ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com static const SK_OT_USHORT format_1 = SkTEndian_SwapBE16(1); 2907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 3007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** The number of name records which follow. */ 318ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com SK_OT_USHORT count; 328ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 3307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** Offset in SK_OT_BYTEs to start of string storage area (from start of table). */ 3407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_OT_USHORT stringOffset; 358ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 3607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com struct Record { 3707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** The platform ID specifies how to interpret the encoding and language ID. */ 3807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com struct PlatformID { 398ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com SK_TYPED_ENUM(Value, SK_OT_USHORT, 4007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Unicode, SkTEndian_SwapBE16(0))) 4107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Macintosh, SkTEndian_SwapBE16(1))) 4207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ISO, SkTEndian_SwapBE16(2))) // Deprecated, use Unicode instead. 4307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Windows, SkTEndian_SwapBE16(3))) 4407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Custom, SkTEndian_SwapBE16(4))) 458ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com SK_SEQ_END, 468ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com (value)SK_SEQ_END) 4707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com } platformID; 4807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 4907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com union EncodingID { 5007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_OT_USHORT custom; 5107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 5207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** Always UTF-16BE. */ 5307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com struct Unicode { 5407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_TYPED_ENUM(Value, SK_OT_USHORT, 5507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Unicode10, SkTEndian_SwapBE16(0))) 5607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Unicode11, SkTEndian_SwapBE16(1))) 5707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ISO10646, SkTEndian_SwapBE16(2))) //deprecated, use Unicode11 5807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Unicode20BMP, SkTEndian_SwapBE16(3))) 5907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Unicode20, SkTEndian_SwapBE16(4))) 6007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((UnicodeVariationSequences, SkTEndian_SwapBE16(5))) 6107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((UnicodeFull, SkTEndian_SwapBE16(6))) 6207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_SEQ_END, 6307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com (value)SK_SEQ_END) 6407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com } unicode; 6507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 6607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** These are Mac encodings, see http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/ 6707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com * for their mappings to unicode. 6807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com * Name table strings using PlatformID::Macintosh must use Roman. 6907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com */ 7007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com struct Macintosh { 7107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_TYPED_ENUM(Value, SK_OT_USHORT, 7207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Roman, SkTEndian_SwapBE16(0))) 7307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Japanese, SkTEndian_SwapBE16(1))) 7407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ChineseTraditional, SkTEndian_SwapBE16(2))) 7507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Korean, SkTEndian_SwapBE16(3))) 7607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic, SkTEndian_SwapBE16(4))) 7707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Hebrew, SkTEndian_SwapBE16(5))) 7807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Greek, SkTEndian_SwapBE16(6))) 7907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Russian, SkTEndian_SwapBE16(7))) 8007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((RSymbol, SkTEndian_SwapBE16(8))) 8107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Devanagari, SkTEndian_SwapBE16(9))) 8207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Gurmukhi, SkTEndian_SwapBE16(10))) 8307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Gujarati, SkTEndian_SwapBE16(11))) 8407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Oriya, SkTEndian_SwapBE16(12))) 8507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Bengali, SkTEndian_SwapBE16(13))) 8607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Tamil, SkTEndian_SwapBE16(14))) 8707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Telugu, SkTEndian_SwapBE16(15))) 8807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kannada, SkTEndian_SwapBE16(16))) 8907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Malayalam, SkTEndian_SwapBE16(17))) 9007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Sinhalese, SkTEndian_SwapBE16(18))) 9107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Burmese, SkTEndian_SwapBE16(19))) 9207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Khmer, SkTEndian_SwapBE16(20))) 9307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Thai, SkTEndian_SwapBE16(21))) 9407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Laotian, SkTEndian_SwapBE16(22))) 9507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Georgian, SkTEndian_SwapBE16(23))) 9607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Armenian, SkTEndian_SwapBE16(24))) 9707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ChineseSimplified, SkTEndian_SwapBE16(25))) 9807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Tibetan, SkTEndian_SwapBE16(26))) 9907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Mongolian, SkTEndian_SwapBE16(27))) 10007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Geez, SkTEndian_SwapBE16(28))) 10107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Slavic, SkTEndian_SwapBE16(29))) 10207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Vietnamese, SkTEndian_SwapBE16(30))) 10307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Sindhi, SkTEndian_SwapBE16(31))) 10407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Uninterpreted, SkTEndian_SwapBE16(32))) 10507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_SEQ_END, 10607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com (value)SK_SEQ_END) 10707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com } macintosh; 10807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 10907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** Deprecated, use Unicode instead. */ 11007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com struct ISO { 11107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_TYPED_ENUM(Value, SK_OT_USHORT, 11207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ASCII7, SkTEndian_SwapBE16(0))) 11307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ISO10646, SkTEndian_SwapBE16(1))) 11407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ISO88591, SkTEndian_SwapBE16(2))) 11507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_SEQ_END, 11607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com (value)SK_SEQ_END) 11707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com } iso; 11807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 11907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** Name table strings using PlatformID::Windows must use Symbol, UnicodeBMPUCS2, or 12007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com * UnicodeUCS4. Symbol and UnicodeBMPUCS2 are both UCS2-BE, UnicodeUCS4 is actually 12107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com * UTF-16BE. 12207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com */ 12307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com struct Windows { 12407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_TYPED_ENUM(Value, SK_OT_USHORT, 12507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Symbol, SkTEndian_SwapBE16(0))) // UCS2-BE, but don't use this font to display it's own name. 12607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((UnicodeBMPUCS2, SkTEndian_SwapBE16(1))) // UCS2-BE, Windows default 12707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ShiftJIS, SkTEndian_SwapBE16(2))) 12807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((PRC, SkTEndian_SwapBE16(3))) 12907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Big5, SkTEndian_SwapBE16(4))) 13007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Wansung, SkTEndian_SwapBE16(5))) 13107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Johab, SkTEndian_SwapBE16(6))) 13207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((UnicodeUCS4, SkTEndian_SwapBE16(10))) // UTF-16BE. It means UCS4 in charmaps. 13307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_SEQ_END, 13407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com (value)SK_SEQ_END) 13507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com } windows; 13607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com } encodingID; 13707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 13807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** LanguageIDs <= 0x7FFF are predefined. 13907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com * LanguageIDs > 0x7FFF are indexes into the langTagRecord array 14007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com * (in format 1 name tables, see SkOTTableName::format). 14107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com */ 14207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com union LanguageID { 14307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** A value greater than 0x7FFF. 14407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com * languageTagID - 0x8000 is an index into the langTagRecord array. 14507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com */ 14607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_OT_USHORT languageTagID; 14707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 14807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** These are known as Language Designators. 14907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com * Apple now uses BCP 47 (post OSX10.4), so there will be no new entries. 15007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com */ 15107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com struct Macintosh { 15207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_TYPED_ENUM(Value, SK_OT_USHORT, 15307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English, SkTEndian_SwapBE16(0))) 15407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((French, SkTEndian_SwapBE16(1))) 15507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((German, SkTEndian_SwapBE16(2))) 15607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Italian, SkTEndian_SwapBE16(3))) 15707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Dutch, SkTEndian_SwapBE16(4))) 15807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Swedish, SkTEndian_SwapBE16(5))) 15907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish, SkTEndian_SwapBE16(6))) 16007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Danish, SkTEndian_SwapBE16(7))) 16107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Portuguese, SkTEndian_SwapBE16(8))) 16207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Norwegian, SkTEndian_SwapBE16(9))) 16307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Hebrew, SkTEndian_SwapBE16(10))) 16407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Japanese, SkTEndian_SwapBE16(11))) 16507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic, SkTEndian_SwapBE16(12))) 16607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Finnish, SkTEndian_SwapBE16(13))) 16707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Greek, SkTEndian_SwapBE16(14))) 16807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Icelandic, SkTEndian_SwapBE16(15))) 16907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Maltese, SkTEndian_SwapBE16(16))) 17007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Turkish, SkTEndian_SwapBE16(17))) 17107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Croatian, SkTEndian_SwapBE16(18))) 17207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ChineseTraditional, SkTEndian_SwapBE16(19))) 17307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Urdu, SkTEndian_SwapBE16(20))) 17407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Hindi, SkTEndian_SwapBE16(21))) 17507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Thai, SkTEndian_SwapBE16(22))) 17607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Korean, SkTEndian_SwapBE16(23))) 17707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Lithuanian, SkTEndian_SwapBE16(24))) 17807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Polish, SkTEndian_SwapBE16(25))) 17907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Hungarian, SkTEndian_SwapBE16(26))) 18007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Estonian, SkTEndian_SwapBE16(27))) 18107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Latvian, SkTEndian_SwapBE16(28))) 18207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Sami, SkTEndian_SwapBE16(29))) 18307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Faroese, SkTEndian_SwapBE16(30))) 18407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Farsi_Persian, SkTEndian_SwapBE16(31))) 18507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Russian, SkTEndian_SwapBE16(32))) 18607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ChineseSimplified, SkTEndian_SwapBE16(33))) 18707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Flemish, SkTEndian_SwapBE16(34))) 18807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((IrishGaelic, SkTEndian_SwapBE16(35))) 18907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Albanian, SkTEndian_SwapBE16(36))) 19007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Romanian, SkTEndian_SwapBE16(37))) 19107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Czech, SkTEndian_SwapBE16(38))) 19207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Slovak, SkTEndian_SwapBE16(39))) 19307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Slovenian, SkTEndian_SwapBE16(40))) 19407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Yiddish, SkTEndian_SwapBE16(41))) 19507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Serbian, SkTEndian_SwapBE16(42))) 19607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Macedonian, SkTEndian_SwapBE16(43))) 19707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Bulgarian, SkTEndian_SwapBE16(44))) 19807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Ukrainian, SkTEndian_SwapBE16(45))) 19907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Byelorussian, SkTEndian_SwapBE16(46))) 20007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Uzbek, SkTEndian_SwapBE16(47))) 20107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kazakh, SkTEndian_SwapBE16(48))) 20207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((AzerbaijaniCyrillic, SkTEndian_SwapBE16(49))) 20307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((AzerbaijaniArabic, SkTEndian_SwapBE16(50))) 20407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Armenian, SkTEndian_SwapBE16(51))) 20507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Georgian, SkTEndian_SwapBE16(52))) 20607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Moldavian, SkTEndian_SwapBE16(53))) 20707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kirghiz, SkTEndian_SwapBE16(54))) 20807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Tajiki, SkTEndian_SwapBE16(55))) 20907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Turkmen, SkTEndian_SwapBE16(56))) 21007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((MongolianTraditional, SkTEndian_SwapBE16(57))) 21107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((MongolianCyrillic, SkTEndian_SwapBE16(58))) 21207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Pashto, SkTEndian_SwapBE16(59))) 21307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kurdish, SkTEndian_SwapBE16(60))) 21407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kashmiri, SkTEndian_SwapBE16(61))) 21507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Sindhi, SkTEndian_SwapBE16(62))) 21607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Tibetan, SkTEndian_SwapBE16(63))) 21707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Nepali, SkTEndian_SwapBE16(64))) 21807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Sanskrit, SkTEndian_SwapBE16(65))) 21907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Marathi, SkTEndian_SwapBE16(66))) 22007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Bengali, SkTEndian_SwapBE16(67))) 22107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Assamese, SkTEndian_SwapBE16(68))) 22207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Gujarati, SkTEndian_SwapBE16(69))) 22307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Punjabi, SkTEndian_SwapBE16(70))) 22407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Oriya, SkTEndian_SwapBE16(71))) 22507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Malayalam, SkTEndian_SwapBE16(72))) 22607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kannada, SkTEndian_SwapBE16(73))) 22707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Tamil, SkTEndian_SwapBE16(74))) 22807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Telugu, SkTEndian_SwapBE16(75))) 22907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Sinhalese, SkTEndian_SwapBE16(76))) 23007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Burmese, SkTEndian_SwapBE16(77))) 23107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Khmer, SkTEndian_SwapBE16(78))) 23207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Lao, SkTEndian_SwapBE16(79))) 23307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Vietnamese, SkTEndian_SwapBE16(80))) 23407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Indonesian, SkTEndian_SwapBE16(81))) 23507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Tagalong, SkTEndian_SwapBE16(82))) 23607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((MalayRoman, SkTEndian_SwapBE16(83))) 23707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((MalayArabic, SkTEndian_SwapBE16(84))) 23807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Amharic, SkTEndian_SwapBE16(85))) 23907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Tigrinya, SkTEndian_SwapBE16(86))) 24007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Galla, SkTEndian_SwapBE16(87))) 24107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Somali, SkTEndian_SwapBE16(88))) 24207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Swahili, SkTEndian_SwapBE16(89))) 24307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kinyarwanda_Ruanda, SkTEndian_SwapBE16(90))) 24407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Rundi, SkTEndian_SwapBE16(91))) 24507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Nyanja_Chewa, SkTEndian_SwapBE16(92))) 24607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Malagasy, SkTEndian_SwapBE16(93))) 24707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Esperanto, SkTEndian_SwapBE16(94))) 24807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Welsh, SkTEndian_SwapBE16(128))) 24907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Basque, SkTEndian_SwapBE16(129))) 25007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Catalan, SkTEndian_SwapBE16(130))) 25107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Latin, SkTEndian_SwapBE16(131))) 25207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Quenchua, SkTEndian_SwapBE16(132))) 25307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Guarani, SkTEndian_SwapBE16(133))) 25407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Aymara, SkTEndian_SwapBE16(134))) 25507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Tatar, SkTEndian_SwapBE16(135))) 25607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Uighur, SkTEndian_SwapBE16(136))) 25707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Dzongkha, SkTEndian_SwapBE16(137))) 25807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((JavaneseRoman, SkTEndian_SwapBE16(138))) 25907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SundaneseRoman, SkTEndian_SwapBE16(139))) 26007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Galician, SkTEndian_SwapBE16(140))) 26107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Afrikaans, SkTEndian_SwapBE16(141))) 26207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Breton, SkTEndian_SwapBE16(142))) 26307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Inuktitut, SkTEndian_SwapBE16(143))) 26407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ScottishGaelic, SkTEndian_SwapBE16(144))) 26507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ManxGaelic, SkTEndian_SwapBE16(145))) 26607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((IrishGaelicWithLenition, SkTEndian_SwapBE16(146))) 26707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Tongan, SkTEndian_SwapBE16(147))) 26807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((GreekPolytonic, SkTEndian_SwapBE16(148))) 26907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Greenlandic, SkTEndian_SwapBE16(149))) 27007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((AzerbaijaniRoman, SkTEndian_SwapBE16(150))) 27107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_SEQ_END, 27207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com (value)SK_SEQ_END) 27307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com } macintosh; 27407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 27507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** These are known as LCIDs. 27607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com * On Windows the current set can be had from EnumSystemLocalesEx and LocaleNameToLCID. 27707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com */ 27807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com struct Windows { 27907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_TYPED_ENUM(Value, SK_OT_USHORT, 28007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Afrikaans_SouthAfrica, SkTEndian_SwapBE16(0x0436))) 28107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Albanian_Albania, SkTEndian_SwapBE16(0x041C))) 28207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Alsatian_France, SkTEndian_SwapBE16(0x0484))) 28307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Amharic_Ethiopia, SkTEndian_SwapBE16(0x045E))) 28407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Algeria, SkTEndian_SwapBE16(0x1401))) 28507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Bahrain, SkTEndian_SwapBE16(0x3C01))) 28607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Egypt, SkTEndian_SwapBE16(0x0C01))) 28707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Iraq, SkTEndian_SwapBE16(0x0801))) 28807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Jordan, SkTEndian_SwapBE16(0x2C01))) 28907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Kuwait, SkTEndian_SwapBE16(0x3401))) 29007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Lebanon, SkTEndian_SwapBE16(0x3001))) 29107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Libya, SkTEndian_SwapBE16(0x1001))) 29207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Morocco, SkTEndian_SwapBE16(0x1801))) 29307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Oman, SkTEndian_SwapBE16(0x2001))) 29407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Qatar, SkTEndian_SwapBE16(0x4001))) 29507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_SaudiArabia, SkTEndian_SwapBE16(0x0401))) 29607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Syria, SkTEndian_SwapBE16(0x2801))) 29707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Tunisia, SkTEndian_SwapBE16(0x1C01))) 29807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_UAE, SkTEndian_SwapBE16(0x3801))) 29907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Arabic_Yemen, SkTEndian_SwapBE16(0x2401))) 30007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Armenian_Armenia, SkTEndian_SwapBE16(0x042B))) 30107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Assamese_India, SkTEndian_SwapBE16(0x044D))) 30207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((AzeriCyrillic_Azerbaijan, SkTEndian_SwapBE16(0x082C))) 30307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((AzeriLatin_Azerbaijan, SkTEndian_SwapBE16(0x042C))) 30407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Bashkir_Russia, SkTEndian_SwapBE16(0x046D))) 30507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Basque_Basque, SkTEndian_SwapBE16(0x042D))) 30607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Belarusian_Belarus, SkTEndian_SwapBE16(0x0423))) 30707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Bengali_Bangladesh, SkTEndian_SwapBE16(0x0845))) 30807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Bengali_India, SkTEndian_SwapBE16(0x0445))) 30907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((BosnianCyrillic_BosniaAndHerzegovina, SkTEndian_SwapBE16(0x201A))) 31007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((BosnianLatin_BosniaAndHerzegovina, SkTEndian_SwapBE16(0x141A))) 31107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Breton_France, SkTEndian_SwapBE16(0x047E))) 31207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Bulgarian_Bulgaria, SkTEndian_SwapBE16(0x0402))) 31307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Catalan_Catalan, SkTEndian_SwapBE16(0x0403))) 31407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Chinese_HongKongSAR, SkTEndian_SwapBE16(0x0C04))) 31507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Chinese_MacaoSAR, SkTEndian_SwapBE16(0x1404))) 31607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Chinese_PeoplesRepublicOfChina, SkTEndian_SwapBE16(0x0804))) 31707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Chinese_Singapore, SkTEndian_SwapBE16(0x1004))) 31807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Chinese_Taiwan, SkTEndian_SwapBE16(0x0404))) 31907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Corsican_France, SkTEndian_SwapBE16(0x0483))) 32007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Croatian_Croatia, SkTEndian_SwapBE16(0x041A))) 32107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((CroatianLatin_BosniaAndHerzegovina, SkTEndian_SwapBE16(0x101A))) 32207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Czech_CzechRepublic, SkTEndian_SwapBE16(0x0405))) 32307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Danish_Denmark, SkTEndian_SwapBE16(0x0406))) 32407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Dari_Afghanistan, SkTEndian_SwapBE16(0x048C))) 32507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Divehi_Maldives, SkTEndian_SwapBE16(0x0465))) 32607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Dutch_Belgium, SkTEndian_SwapBE16(0x0813))) 32707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Dutch_Netherlands, SkTEndian_SwapBE16(0x0413))) 32807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_Australia, SkTEndian_SwapBE16(0x0C09))) 32907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_Belize, SkTEndian_SwapBE16(0x2809))) 33007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_Canada, SkTEndian_SwapBE16(0x1009))) 33107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_Caribbean, SkTEndian_SwapBE16(0x2409))) 33207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_India, SkTEndian_SwapBE16(0x4009))) 33307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_Ireland, SkTEndian_SwapBE16(0x1809))) 33407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_Jamaica, SkTEndian_SwapBE16(0x2009))) 33507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_Malaysia, SkTEndian_SwapBE16(0x4409))) 33607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_NewZealand, SkTEndian_SwapBE16(0x1409))) 33707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_RepublicOfThePhilippines, SkTEndian_SwapBE16(0x3409))) 33807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_Singapore, SkTEndian_SwapBE16(0x4809))) 33907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_SouthAfrica, SkTEndian_SwapBE16(0x1C09))) 34007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_TrinidadAndTobago, SkTEndian_SwapBE16(0x2C09))) 34107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_UnitedKingdom, SkTEndian_SwapBE16(0x0809))) 34207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_UnitedStates, SkTEndian_SwapBE16(0x0409))) 34307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((English_Zimbabwe, SkTEndian_SwapBE16(0x3009))) 34407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Estonian_Estonia, SkTEndian_SwapBE16(0x0425))) 34507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Faroese_FaroeIslands, SkTEndian_SwapBE16(0x0438))) 34607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Filipino_Philippines, SkTEndian_SwapBE16(0x0464))) 34707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Finnish_Finland, SkTEndian_SwapBE16(0x040B))) 34807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((French_Belgium, SkTEndian_SwapBE16(0x080C))) 34907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((French_Canada, SkTEndian_SwapBE16(0x0C0C))) 35007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((French_France, SkTEndian_SwapBE16(0x040C))) 35107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((French_Luxembourg, SkTEndian_SwapBE16(0x140c))) 35207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((French_PrincipalityOfMonoco, SkTEndian_SwapBE16(0x180C))) 35307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((French_Switzerland, SkTEndian_SwapBE16(0x100C))) 35407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Frisian_Netherlands, SkTEndian_SwapBE16(0x0462))) 35507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Galician_Galician, SkTEndian_SwapBE16(0x0456))) 35607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Georgian_Georgia, SkTEndian_SwapBE16(0x0437))) 35707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((German_Austria, SkTEndian_SwapBE16(0x0C07))) 35807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((German_Germany, SkTEndian_SwapBE16(0x0407))) 35907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((German_Liechtenstein, SkTEndian_SwapBE16(0x1407))) 36007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((German_Luxembourg, SkTEndian_SwapBE16(0x1007))) 36107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((German_Switzerland, SkTEndian_SwapBE16(0x0807))) 36207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Greek_Greece, SkTEndian_SwapBE16(0x0408))) 36307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Greenlandic_Greenland, SkTEndian_SwapBE16(0x046F))) 36407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Gujarati_India, SkTEndian_SwapBE16(0x0447))) 36507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((HausaLatin_Nigeria, SkTEndian_SwapBE16(0x0468))) 36607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Hebrew_Israel, SkTEndian_SwapBE16(0x040D))) 36707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Hindi_India, SkTEndian_SwapBE16(0x0439))) 36807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Hungarian_Hungary, SkTEndian_SwapBE16(0x040E))) 36907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Icelandic_Iceland, SkTEndian_SwapBE16(0x040F))) 37007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Igbo_Nigeria, SkTEndian_SwapBE16(0x0470))) 37107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Indonesian_Indonesia, SkTEndian_SwapBE16(0x0421))) 37207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Inuktitut_Canada, SkTEndian_SwapBE16(0x045D))) 37307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((InuktitutLatin_Canada, SkTEndian_SwapBE16(0x085D))) 37407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Irish_Ireland, SkTEndian_SwapBE16(0x083C))) 37507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((isiXhosa_SouthAfrica, SkTEndian_SwapBE16(0x0434))) 37607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((isiZulu_SouthAfrica, SkTEndian_SwapBE16(0x0435))) 37707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Italian_Italy, SkTEndian_SwapBE16(0x0410))) 37807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Italian_Switzerland, SkTEndian_SwapBE16(0x0810))) 37907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Japanese_Japan, SkTEndian_SwapBE16(0x0411))) 38007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kannada_India, SkTEndian_SwapBE16(0x044B))) 38107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kazakh_Kazakhstan, SkTEndian_SwapBE16(0x043F))) 38207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Khmer_Cambodia, SkTEndian_SwapBE16(0x0453))) 38307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kiche_Guatemala, SkTEndian_SwapBE16(0x0486))) 38407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kinyarwanda_Rwanda, SkTEndian_SwapBE16(0x0487))) 38507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kiswahili_Kenya, SkTEndian_SwapBE16(0x0441))) 38607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Konkani_India, SkTEndian_SwapBE16(0x0457))) 38707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Korean_Korea, SkTEndian_SwapBE16(0x0412))) 38807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Kyrgyz_Kyrgyzstan, SkTEndian_SwapBE16(0x0440))) 38907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Lao_LaoPDR, SkTEndian_SwapBE16(0x0454))) 39007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Latvian_Latvia, SkTEndian_SwapBE16(0x0426))) 39107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Lithuanian_Lithuania, SkTEndian_SwapBE16(0x0427))) 39207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((LowerSorbian_Germany, SkTEndian_SwapBE16(0x082E))) 39307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Luxembourgish_Luxembourg, SkTEndian_SwapBE16(0x046E))) 39407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((MacedonianFYROM_FormerYugoslavRepublicOfMacedonia, SkTEndian_SwapBE16(0x042F))) 39507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Malay_BruneiDarussalam, SkTEndian_SwapBE16(0x083E))) 39607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Malay_Malaysia, SkTEndian_SwapBE16(0x043E))) 39707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Malayalam_India, SkTEndian_SwapBE16(0x044C))) 39807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Maltese_Malta, SkTEndian_SwapBE16(0x043A))) 39907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Maori_NewZealand, SkTEndian_SwapBE16(0x0481))) 40007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Mapudungun_Chile, SkTEndian_SwapBE16(0x047A))) 40107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Marathi_India, SkTEndian_SwapBE16(0x044E))) 40207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Mohawk_Mohawk, SkTEndian_SwapBE16(0x047C))) 40307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((MongolianCyrillic_Mongolia, SkTEndian_SwapBE16(0x0450))) 40407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((MongolianTraditional_PeoplesRepublicOfChina, SkTEndian_SwapBE16(0x0850))) 40507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Nepali_Nepal, SkTEndian_SwapBE16(0x0461))) 40607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((NorwegianBokmal_Norway, SkTEndian_SwapBE16(0x0414))) 40707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((NorwegianNynorsk_Norway, SkTEndian_SwapBE16(0x0814))) 40807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Occitan_France, SkTEndian_SwapBE16(0x0482))) 40907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Odia_India, SkTEndian_SwapBE16(0x0448))) 41007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Pashto_Afghanistan, SkTEndian_SwapBE16(0x0463))) 41107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Polish_Poland, SkTEndian_SwapBE16(0x0415))) 41207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Portuguese_Brazil, SkTEndian_SwapBE16(0x0416))) 41307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Portuguese_Portugal, SkTEndian_SwapBE16(0x0816))) 41407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Punjabi_India, SkTEndian_SwapBE16(0x0446))) 41507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Quechua_Bolivia, SkTEndian_SwapBE16(0x046B))) 41607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Quechua_Ecuador, SkTEndian_SwapBE16(0x086B))) 41707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Quechua_Peru, SkTEndian_SwapBE16(0x0C6B))) 41807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Romanian_Romania, SkTEndian_SwapBE16(0x0418))) 41907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Romansh_Switzerland, SkTEndian_SwapBE16(0x0417))) 42007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Russian_Russia, SkTEndian_SwapBE16(0x0419))) 42107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SamiInari_Finland, SkTEndian_SwapBE16(0x243B))) 42207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SamiLule_Norway, SkTEndian_SwapBE16(0x103B))) 42307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SamiLule_Sweden, SkTEndian_SwapBE16(0x143B))) 42407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SamiNorthern_Finland, SkTEndian_SwapBE16(0x0C3B))) 42507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SamiNorthern_Norway, SkTEndian_SwapBE16(0x043B))) 42607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SamiNorthern_Sweden, SkTEndian_SwapBE16(0x083B))) 42707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SamiSkolt_Finland, SkTEndian_SwapBE16(0x203B))) 42807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SamiSouthern_Norway, SkTEndian_SwapBE16(0x183B))) 42907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SamiSouthern_Sweden, SkTEndian_SwapBE16(0x1C3B))) 43007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Sanskrit_India, SkTEndian_SwapBE16(0x044F))) 43107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SerbianCyrillic_BosniaAndHerzegovina, SkTEndian_SwapBE16(0x1C1A))) 43207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SerbianCyrillic_Serbia, SkTEndian_SwapBE16(0x0C1A))) 43307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SerbianLatin_BosniaAndHerzegovina, SkTEndian_SwapBE16(0x181A))) 43407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SerbianLatin_Serbia, SkTEndian_SwapBE16(0x081A))) 43507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SesothoSaLeboa_SouthAfrica, SkTEndian_SwapBE16(0x046C))) 43607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Setswana_SouthAfrica, SkTEndian_SwapBE16(0x0432))) 43707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Sinhala_SriLanka, SkTEndian_SwapBE16(0x045B))) 43807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Slovak_Slovakia, SkTEndian_SwapBE16(0x041B))) 43907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Slovenian_Slovenia, SkTEndian_SwapBE16(0x0424))) 44007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Argentina, SkTEndian_SwapBE16(0x2C0A))) 44107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Bolivia, SkTEndian_SwapBE16(0x400A))) 44207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Chile, SkTEndian_SwapBE16(0x340A))) 44307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Colombia, SkTEndian_SwapBE16(0x240A))) 44407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_CostaRica, SkTEndian_SwapBE16(0x140A))) 44507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_DominicanRepublic, SkTEndian_SwapBE16(0x1C0A))) 44607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Ecuador, SkTEndian_SwapBE16(0x300A))) 44707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_ElSalvador, SkTEndian_SwapBE16(0x440A))) 44807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Guatemala, SkTEndian_SwapBE16(0x100A))) 44907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Honduras, SkTEndian_SwapBE16(0x480A))) 45007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Mexico, SkTEndian_SwapBE16(0x080A))) 45107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Nicaragua, SkTEndian_SwapBE16(0x4C0A))) 45207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Panama, SkTEndian_SwapBE16(0x180A))) 45307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Paraguay, SkTEndian_SwapBE16(0x3C0A))) 45407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Peru, SkTEndian_SwapBE16(0x280A))) 45507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_PuertoRico, SkTEndian_SwapBE16(0x500A))) 45607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SpanishModernSort_Spain, SkTEndian_SwapBE16(0x0C0A))) 45707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SpanishTraditionalSort_Spain, SkTEndian_SwapBE16(0x040A))) 45807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_UnitedStates, SkTEndian_SwapBE16(0x540A))) 45907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Uruguay, SkTEndian_SwapBE16(0x380A))) 46007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Spanish_Venezuela, SkTEndian_SwapBE16(0x200A))) 46107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Sweden_Finland, SkTEndian_SwapBE16(0x081D))) 46207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Swedish_Sweden, SkTEndian_SwapBE16(0x041D))) 46307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Syriac_Syria, SkTEndian_SwapBE16(0x045A))) 46407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((TajikCyrillic_Tajikistan, SkTEndian_SwapBE16(0x0428))) 46507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((TamazightLatin_Algeria, SkTEndian_SwapBE16(0x085F))) 46607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Tamil_India, SkTEndian_SwapBE16(0x0449))) 46707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Tatar_Russia, SkTEndian_SwapBE16(0x0444))) 46807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Telugu_India, SkTEndian_SwapBE16(0x044A))) 46907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Thai_Thailand, SkTEndian_SwapBE16(0x041E))) 47007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Tibetan_PRC, SkTEndian_SwapBE16(0x0451))) 47107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Turkish_Turkey, SkTEndian_SwapBE16(0x041F))) 47207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Turkmen_Turkmenistan, SkTEndian_SwapBE16(0x0442))) 47307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Uighur_PRC, SkTEndian_SwapBE16(0x0480))) 47407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Ukrainian_Ukraine, SkTEndian_SwapBE16(0x0422))) 47507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((UpperSorbian_Germany, SkTEndian_SwapBE16(0x042E))) 47607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Urdu_IslamicRepublicOfPakistan, SkTEndian_SwapBE16(0x0420))) 47707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((UzbekCyrillic_Uzbekistan, SkTEndian_SwapBE16(0x0843))) 47807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((UzbekLatin_Uzbekistan, SkTEndian_SwapBE16(0x0443))) 47907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Vietnamese_Vietnam, SkTEndian_SwapBE16(0x042A))) 48007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Welsh_UnitedKingdom, SkTEndian_SwapBE16(0x0452))) 48107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Wolof_Senegal, SkTEndian_SwapBE16(0x0488))) 48207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Yakut_Russia, SkTEndian_SwapBE16(0x0485))) 48307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Yi_PRC, SkTEndian_SwapBE16(0x0478))) 48407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Yoruba_Nigeria, SkTEndian_SwapBE16(0x046A))) 48507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_SEQ_END, 48607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com (value)SK_SEQ_END) 48707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com } windows; 48807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com } languageID; 48907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 49007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** NameIDs <= 0xFF are predefined. Those > 0xFF are font specific. */ 49107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com union NameID { 49207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** A font specific name id which should be greater than 0xFF. */ 49307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_OT_USHORT fontSpecific; 49407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com struct Predefined { 49507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_TYPED_ENUM(Value, SK_OT_USHORT, 49607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((CopyrightNotice, SkTEndian_SwapBE16(0))) 49707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((FontFamilyName, SkTEndian_SwapBE16(1))) 49807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((FontSubfamilyName, SkTEndian_SwapBE16(2))) 49907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((UniqueFontIdentifier, SkTEndian_SwapBE16(3))) 50007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((FullFontName, SkTEndian_SwapBE16(4))) 50107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((VersionString, SkTEndian_SwapBE16(5))) //Version <number>.<number> 50207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((PostscriptName, SkTEndian_SwapBE16(6))) //See spec for constraints. 50307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Trademark, SkTEndian_SwapBE16(7))) 50407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((ManufacturerName, SkTEndian_SwapBE16(8))) 50507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Designer, SkTEndian_SwapBE16(9))) 50607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((Description, SkTEndian_SwapBE16(10))) 50707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((URLVendor, SkTEndian_SwapBE16(11))) 50807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((URLDesigner, SkTEndian_SwapBE16(12))) 50907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((LicenseDescription, SkTEndian_SwapBE16(13))) 51007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((LicenseInfoURL, SkTEndian_SwapBE16(14))) 51107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((PreferredFamily, SkTEndian_SwapBE16(16))) 51207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((PreferredSubfamily, SkTEndian_SwapBE16(17))) 51307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((CompatibleFullName, SkTEndian_SwapBE16(18))) 51407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((SampleText, SkTEndian_SwapBE16(19))) 51507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((PostscriptCIDFindfontName, SkTEndian_SwapBE16(20))) 51607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((WWSFamilyName, SkTEndian_SwapBE16(21))) 51707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com ((WWSSubfamilyName, SkTEndian_SwapBE16(22))) 51807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_SEQ_END, 51907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com (value)SK_SEQ_END) 52007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com } predefined; 52107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com } nameID; 52207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 52307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** The length of the string in SK_OT_BYTEs. */ 52407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_OT_USHORT length; 52507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 52607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** Offset in SK_OT_BYTEs from start of string storage area 52707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com * (see SkOTTableName::stringOffset). 52807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com */ 52907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_OT_USHORT offset; 53007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com }; //nameRecord[count]; 53107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 53207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com struct Format1Ext { 53307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** The number of languageTagRecords which follow. */ 53407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_OT_USHORT langTagCount; 53507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 53607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** The encoding of a langTagRecord string is always UTF-16BE. 53707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com * The content should follow IETF specification BCP 47. 53807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com */ 53907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com struct LangTagRecord { 54007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** The length of the string in SK_OT_BYTEs. */ 54107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_OT_USHORT length; 54207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 54307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com /** Offset in SK_OT_BYTEs from start of string storage area 54407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com * (see SkOTTableName::stringOffset). 54507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com */ 54607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SK_OT_USHORT offset; 54707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com }; //langTagRecord[langTagCount] 54807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com }; //format1ext (if format == format_1) 54907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 55007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com class Iterator { 55107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com public: 55207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com Iterator(const SkOTTableName& name) : fName(name), fIndex(0), fType(-1) { } 55307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com Iterator(const SkOTTableName& name, SkOTTableName::Record::NameID::Predefined::Value type) 554041e2dbc0614e3341e1349fd0e962744a45b6194skia.committer@gmail.com : fName(name), fIndex(0), fType(type) 55507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com { } 55607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 557a980269c2498836101146adc729ef780fb89824ebungeman@google.com void reset(SkOTTableName::Record::NameID::Predefined::Value type) { 558a980269c2498836101146adc729ef780fb89824ebungeman@google.com fIndex = 0; 559a980269c2498836101146adc729ef780fb89824ebungeman@google.com fType = type; 560a980269c2498836101146adc729ef780fb89824ebungeman@google.com } 561a980269c2498836101146adc729ef780fb89824ebungeman@google.com 56207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com struct Record { 563a980269c2498836101146adc729ef780fb89824ebungeman@google.com SK_OT_USHORT type; 56407a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SkString name; 56507a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com SkString language; 56607a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com }; 56707a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com bool next(Record&); 56807a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com 56907a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com private: 57007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com const SkOTTableName& fName; 57107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com size_t fIndex; 57207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com int fType; 57307a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.com }; 5748ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com}; 5758ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 5768ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#pragma pack(pop) 5778ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 5788ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 5798ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.comSK_COMPILE_ASSERT(sizeof(SkOTTableName) == 6, sizeof_SkOTTableName_not_6); 58007a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.comSK_COMPILE_ASSERT(sizeof(SkOTTableName::Format1Ext) == 2, sizeof_SkOTTableNameF1_not_2); 58107a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.comSK_COMPILE_ASSERT(sizeof(SkOTTableName::Format1Ext::LangTagRecord) == 4, sizeof_SkOTTableNameLangTagRecord_not_4); 58207a69f848cd6e28e0870ac9eeeba2d05f8e8d8bebungeman@google.comSK_COMPILE_ASSERT(sizeof(SkOTTableName::Record) == 12, sizeof_SkOTTableNameRecord_not_12); 5838ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 5848ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#endif 585