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.

     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  */
     8 #ifndef SkOTTable_name_DEFINED
     9 #define SkOTTable_name_DEFINED
    11 #include "SkEndian.h"
    12 #include "SkOTTableTypes.h"
    13 #include "SkString.h"
    14 #include "SkTypedEnum.h"
    16 #pragma pack(push, 1)
    18 struct SkOTTableName {
    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;
    25     SK_OT_USHORT format;
    26     static const SK_OT_USHORT format_0 = SkTEndian_SwapBE16(0);
    27     /** Format 1 was added in OpenType 1.6 (April 2009). */
    28     static const SK_OT_USHORT format_1 = SkTEndian_SwapBE16(1);
    30     /** The number of name records which follow. */
    31     SK_OT_USHORT count;
    33     /** Offset in SK_OT_BYTEs to start of string storage area (from start of table). */
    34     SK_OT_USHORT stringOffset;
    36     struct Record {
    37         /** The platform ID specifies how to interpret the encoding and language ID. */
    38         struct PlatformID {
    39             SK_TYPED_ENUM(Value, SK_OT_USHORT,
    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)))
    45                 SK_SEQ_END,
    46             (value)SK_SEQ_END)
    47         } platformID;
    49         union EncodingID {
    50             SK_OT_USHORT custom;
    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;
    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;
   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;
   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;
   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;
   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;
   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;
   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;
   523         /** The length of the string in SK_OT_BYTEs. */
   524         SK_OT_USHORT length;
   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];
   532     struct Format1Ext {
   533         /** The number of languageTagRecords which follow. */
   534         SK_OT_USHORT langTagCount;
   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;
   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)
   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)
   554             : fName(name), fIndex(0), fType(type)
   555         { }
   557         void reset(SkOTTableName::Record::NameID::Predefined::Value type) {
   558             fIndex = 0;
   559             fType = type;
   560         }
   562         struct Record {
   563             SK_OT_USHORT type;
   564             SkString name;
   565             SkString language;
   566         };
   567         bool next(Record&);
   569     private:
   570         const SkOTTableName& fName;
   571         size_t fIndex;
   572         int fType;
   573     };
   574 };
   576 #pragma pack(pop)
   579 SK_COMPILE_ASSERT(sizeof(SkOTTableName) == 6, sizeof_SkOTTableName_not_6);
   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);
   584 #endif

mercurial