bungeman@google.com | 53b9587 | 2012-02-07 21:30:21 +0000 | [diff] [blame] | 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" |
bungeman@google.com | 67227c5 | 2013-04-02 14:12:38 +0000 | [diff] [blame] | 13 | #include "SkString.h" |
bungeman@google.com | 53b9587 | 2012-02-07 21:30:21 +0000 | [diff] [blame] | 14 | #include "SkTypedEnum.h" |
| 15 | |
| 16 | #pragma pack(push, 1) |
| 17 | |
| 18 | struct SkOTTableName { |
bungeman@google.com | a5a2dd0 | 2012-06-25 14:26:48 +0000 | [diff] [blame] | 19 | 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.com | 53b9587 | 2012-02-07 21:30:21 +0000 | [diff] [blame] | 25 | SK_OT_USHORT format; |
| 26 | static const SK_OT_USHORT format_0 = SkTEndian_SwapBE16(0); |
bungeman@google.com | 67227c5 | 2013-04-02 14:12:38 +0000 | [diff] [blame] | 27 | /** Format 1 was added in OpenType 1.6 (April 2009). */ |
bungeman@google.com | 53b9587 | 2012-02-07 21:30:21 +0000 | [diff] [blame] | 28 | static const SK_OT_USHORT format_1 = SkTEndian_SwapBE16(1); |
bungeman@google.com | 67227c5 | 2013-04-02 14:12:38 +0000 | [diff] [blame] | 29 | |
| 30 | /** The number of name records which follow. */ |
bungeman@google.com | 53b9587 | 2012-02-07 21:30:21 +0000 | [diff] [blame] | 31 | SK_OT_USHORT count; |
bungeman@google.com | 53b9587 | 2012-02-07 21:30:21 +0000 | [diff] [blame] | 32 | |
bungeman@google.com | 67227c5 | 2013-04-02 14:12:38 +0000 | [diff] [blame] | 33 | /** Offset in SK_OT_BYTEs to start of string storage area (from start of table). */ |
| 34 | SK_OT_USHORT stringOffset; |
bungeman@google.com | 53b9587 | 2012-02-07 21:30:21 +0000 | [diff] [blame] | 35 | |
bungeman@google.com | 67227c5 | 2013-04-02 14:12:38 +0000 | [diff] [blame] | 36 | struct Record { |
| 37 | /** The platform ID specifies how to interpret the encoding and language ID. */ |
| 38 | struct PlatformID { |
bungeman@google.com | 53b9587 | 2012-02-07 21:30:21 +0000 | [diff] [blame] | 39 | SK_TYPED_ENUM(Value, SK_OT_USHORT, |
bungeman@google.com | 67227c5 | 2013-04-02 14:12:38 +0000 | [diff] [blame] | 40 | ((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.com | 53b9587 | 2012-02-07 21:30:21 +0000 | [diff] [blame] | 45 | SK_SEQ_END, |
| 46 | (value)SK_SEQ_END) |
bungeman@google.com | 67227c5 | 2013-04-02 14:12:38 +0000 | [diff] [blame] | 47 | } 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.com | 965c36a | 2013-04-03 07:01:14 +0000 | [diff] [blame] | 554 | : fName(name), fIndex(0), fType(type) |
bungeman@google.com | 67227c5 | 2013-04-02 14:12:38 +0000 | [diff] [blame] | 555 | { } |
| 556 | |
bungeman@google.com | ee8341d | 2013-08-07 02:45:25 +0000 | [diff] [blame] | 557 | void reset(SkOTTableName::Record::NameID::Predefined::Value type) { |
| 558 | fIndex = 0; |
| 559 | fType = type; |
| 560 | } |
| 561 | |
bungeman@google.com | 67227c5 | 2013-04-02 14:12:38 +0000 | [diff] [blame] | 562 | struct Record { |
bungeman@google.com | ee8341d | 2013-08-07 02:45:25 +0000 | [diff] [blame] | 563 | SK_OT_USHORT type; |
bungeman@google.com | 67227c5 | 2013-04-02 14:12:38 +0000 | [diff] [blame] | 564 | SkString name; |
| 565 | SkString language; |
| 566 | }; |
| 567 | bool next(Record&); |
| 568 | |
| 569 | private: |
| 570 | const SkOTTableName& fName; |
| 571 | size_t fIndex; |
| 572 | int fType; |
| 573 | }; |
bungeman@google.com | 53b9587 | 2012-02-07 21:30:21 +0000 | [diff] [blame] | 574 | }; |
| 575 | |
| 576 | #pragma pack(pop) |
| 577 | |
| 578 | |
| 579 | SK_COMPILE_ASSERT(sizeof(SkOTTableName) == 6, sizeof_SkOTTableName_not_6); |
bungeman@google.com | 67227c5 | 2013-04-02 14:12:38 +0000 | [diff] [blame] | 580 | SK_COMPILE_ASSERT(sizeof(SkOTTableName::Format1Ext) == 2, sizeof_SkOTTableNameF1_not_2); |
| 581 | SK_COMPILE_ASSERT(sizeof(SkOTTableName::Format1Ext::LangTagRecord) == 4, sizeof_SkOTTableNameLangTagRecord_not_4); |
| 582 | SK_COMPILE_ASSERT(sizeof(SkOTTableName::Record) == 12, sizeof_SkOTTableNameRecord_not_12); |
bungeman@google.com | 53b9587 | 2012-02-07 21:30:21 +0000 | [diff] [blame] | 583 | |
| 584 | #endif |