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 | |
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 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 | |
572 | static_assert(sizeof(SkOTTableName) == 6, "sizeof_SkOTTableName_not_6" ); |
573 | static_assert(sizeof(SkOTTableName::Format1Ext) == 2, "sizeof_SkOTTableNameF1_not_2" ); |
574 | static_assert(sizeof(SkOTTableName::Format1Ext::LangTagRecord) == 4, "sizeof_SkOTTableNameLangTagRecord_not_4" ); |
575 | static_assert(sizeof(SkOTTableName::Record) == 12, "sizeof_SkOTTableNameRecord_not_12" ); |
576 | |
577 | #endif |
578 | |