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