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