gfx/skia/trunk/src/sfnt/SkOTTable_name.h

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

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

mercurial