xref: /aosp_15_r20/external/skia/src/sfnt/SkOTTable_name.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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