Line data Source code
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 "SkEndian.h"
12 : #include "SkOTTableTypes.h"
13 : #include "SkString.h"
14 :
15 : #pragma pack(push, 1)
16 :
17 : struct 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 SkOTTableName& name) : fName(name), fIndex(0), fType(-1) { }
544 0 : Iterator(const SkOTTableName& name, SkOTTableName::Record::NameID::Predefined::Value type)
545 0 : : fName(name), fIndex(0), fType(type)
546 0 : { }
547 :
548 0 : void reset(SkOTTableName::Record::NameID::Predefined::Value type) {
549 0 : fIndex = 0;
550 0 : fType = type;
551 0 : }
552 :
553 0 : struct Record {
554 : SkString name;
555 : SkString language;
556 : SK_OT_USHORT type;
557 : };
558 : bool next(Record&);
559 :
560 : private:
561 : const SkOTTableName& fName;
562 : size_t fIndex;
563 : int fType;
564 : };
565 : };
566 :
567 : #pragma pack(pop)
568 :
569 :
570 : static_assert(sizeof(SkOTTableName) == 6, "sizeof_SkOTTableName_not_6");
571 : static_assert(sizeof(SkOTTableName::Format1Ext) == 2, "sizeof_SkOTTableNameF1_not_2");
572 : static_assert(sizeof(SkOTTableName::Format1Ext::LangTagRecord) == 4, "sizeof_SkOTTableNameLangTagRecord_not_4");
573 : static_assert(sizeof(SkOTTableName::Record) == 12, "sizeof_SkOTTableNameRecord_not_12");
574 :
575 : #endif
|