/*
* Copyright 2012 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkOTTable_name_DEFINED
#define SkOTTable_name_DEFINED
#include "include/core/SkString.h"
#include "src/base/SkEndian.h"
#include "src/sfnt/SkOTTableTypes.h"
#pragma pack(push,
1)
struct SkOTTableName {
static const SK_OT_CHAR TAG0 =
'n';
static const SK_OT_CHAR TAG1 =
'a';
static const SK_OT_CHAR TAG2 =
'm';
static const SK_OT_CHAR TAG3 =
'e';
static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableName>::value;
SK_OT_USHORT format;
static const SK_OT_USHORT format_0 = SkTEndian_SwapBE16(
0);
/** Format 1 was added in OpenType 1.6 (April 2009). */
static const SK_OT_USHORT format_1 = SkTEndian_SwapBE16(
1);
/** The number of name records which follow. */
SK_OT_USHORT count;
/** Offset in SK_OT_BYTEs to start of string storage area (from start of table). */
SK_OT_USHORT stringOffset;
struct Record {
/** The platform ID specifies how to interpret the encoding and language ID. */
struct PlatformID {
enum Value : SK_OT_USHORT {
Unicode = SkTEndian_SwapBE16(
0),
Macintosh = SkTEndian_SwapBE16(
1),
ISO = SkTEndian_SwapBE16(
2),
// Deprecated, use Unicode instead.
Windows = SkTEndian_SwapBE16(
3),
Custom = SkTEndian_SwapBE16(
4),
} value;
} platformID;
union EncodingID {
SK_OT_USHORT custom;
/** Always UTF-16BE. */
struct Unicode {
enum Value : SK_OT_USHORT {
Unicode10 = SkTEndian_SwapBE16(
0),
Unicode11 = SkTEndian_SwapBE16(
1),
ISO10646 = SkTEndian_SwapBE16(
2),
//deprecated, use Unicode11
Unicode20BMP = SkTEndian_SwapBE16(
3),
Unicode20 = SkTEndian_SwapBE16(
4),
UnicodeVariationSequences = SkTEndian_SwapBE16(
5),
UnicodeFull = SkTEndian_SwapBE16(
6),
} value;
} unicode;
/** These are Mac encodings, see http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/
* for their mappings to unicode.
* Name table strings using PlatformID::Macintosh must use Roman.
*/
struct Macintosh {
enum Value : SK_OT_USHORT {
Roman = SkTEndian_SwapBE16(
0),
Japanese = SkTEndian_SwapBE16(
1),
ChineseTraditional = SkTEndian_SwapBE16(
2),
Korean = SkTEndian_SwapBE16(
3),
Arabic = SkTEndian_SwapBE16(
4),
Hebrew = SkTEndian_SwapBE16(
5),
Greek = SkTEndian_SwapBE16(
6),
Russian = SkTEndian_SwapBE16(
7),
RSymbol = SkTEndian_SwapBE16(
8),
Devanagari = SkTEndian_SwapBE16(
9),
Gurmukhi = SkTEndian_SwapBE16(
10),
Gujarati = SkTEndian_SwapBE16(
11),
Oriya = SkTEndian_SwapBE16(
12),
Bengali = SkTEndian_SwapBE16(
13),
Tamil = SkTEndian_SwapBE16(
14),
Telugu = SkTEndian_SwapBE16(
15),
Kannada = SkTEndian_SwapBE16(
16),
Malayalam = SkTEndian_SwapBE16(
17),
Sinhalese = SkTEndian_SwapBE16(
18),
Burmese = SkTEndian_SwapBE16(
19),
Khmer = SkTEndian_SwapBE16(
20),
Thai = SkTEndian_SwapBE16(
21),
Laotian = SkTEndian_SwapBE16(
22),
Georgian = SkTEndian_SwapBE16(
23),
Armenian = SkTEndian_SwapBE16(
24),
ChineseSimplified = SkTEndian_SwapBE16(
25),
Tibetan = SkTEndian_SwapBE16(
26),
Mongolian = SkTEndian_SwapBE16(
27),
Geez = SkTEndian_SwapBE16(
28),
Slavic = SkTEndian_SwapBE16(
29),
Vietnamese = SkTEndian_SwapBE16(
30),
Sindhi = SkTEndian_SwapBE16(
31),
Uninterpreted = SkTEndian_SwapBE16(
32),
} value;
} macintosh;
/** Deprecated, use Unicode instead. */
struct ISO {
enum Value : SK_OT_USHORT {
ASCII7 = SkTEndian_SwapBE16(
0),
ISO10646 = SkTEndian_SwapBE16(
1),
ISO88591 = SkTEndian_SwapBE16(
2),
} value;
} iso;
/** Name table strings using PlatformID::Windows must use Symbol, UnicodeBMPUCS2, or
* UnicodeUCS4. Symbol and UnicodeBMPUCS2 are both UCS2-BE, UnicodeUCS4 is actually
* UTF-16BE.
*/
struct Windows {
enum Value : SK_OT_USHORT {
Symbol = SkTEndian_SwapBE16(
0),
// UCS2-BE, but don't use this font to display it's own name.
UnicodeBMPUCS2 = SkTEndian_SwapBE16(
1),
// UCS2-BE, Windows default
ShiftJIS = SkTEndian_SwapBE16(
2),
PRC = SkTEndian_SwapBE16(
3),
Big5 = SkTEndian_SwapBE16(
4),
Wansung = SkTEndian_SwapBE16(
5),
Johab = SkTEndian_SwapBE16(
6),
UnicodeUCS4 = SkTEndian_SwapBE16(
10),
// UTF-16BE. It means UCS4 in charmaps.
} value;
} windows;
} encodingID;
/** LanguageIDs <= 0x7FFF are predefined.
* LanguageIDs > 0x7FFF are indexes into the langTagRecord array
* (in format 1 name tables, see SkOTTableName::format).
*/
union LanguageID {
/** A value greater than 0x7FFF.
* languageTagID - 0x8000 is an index into the langTagRecord array.
*/
SK_OT_USHORT languageTagID;
/** These are known as Language Designators.
* Apple now uses BCP 47 (post OSX10.4), so there will be no new entries.
*/
struct Macintosh {
enum Value : SK_OT_USHORT {
English = SkTEndian_SwapBE16(
0),
French = SkTEndian_SwapBE16(
1),
German = SkTEndian_SwapBE16(
2),
Italian = SkTEndian_SwapBE16(
3),
Dutch = SkTEndian_SwapBE16(
4),
Swedish = SkTEndian_SwapBE16(
5),
Spanish = SkTEndian_SwapBE16(
6),
Danish = SkTEndian_SwapBE16(
7),
Portuguese = SkTEndian_SwapBE16(
8),
Norwegian = SkTEndian_SwapBE16(
9),
Hebrew = SkTEndian_SwapBE16(
10),
Japanese = SkTEndian_SwapBE16(
11),
Arabic = SkTEndian_SwapBE16(
12),
Finnish = SkTEndian_SwapBE16(
13),
Greek = SkTEndian_SwapBE16(
14),
Icelandic = SkTEndian_SwapBE16(
15),
Maltese = SkTEndian_SwapBE16(
16),
Turkish = SkTEndian_SwapBE16(
17),
Croatian = SkTEndian_SwapBE16(
18),
ChineseTraditional = SkTEndian_SwapBE16(
19),
Urdu = SkTEndian_SwapBE16(
20),
Hindi = SkTEndian_SwapBE16(
21),
Thai = SkTEndian_SwapBE16(
22),
Korean = SkTEndian_SwapBE16(
23),
Lithuanian = SkTEndian_SwapBE16(
24),
Polish = SkTEndian_SwapBE16(
25),
Hungarian = SkTEndian_SwapBE16(
26),
Estonian = SkTEndian_SwapBE16(
27),
Latvian = SkTEndian_SwapBE16(
28),
Sami = SkTEndian_SwapBE16(
29),
Faroese = SkTEndian_SwapBE16(
30),
Farsi_Persian = SkTEndian_SwapBE16(
31),
Russian = SkTEndian_SwapBE16(
32),
ChineseSimplified = SkTEndian_SwapBE16(
33),
Flemish = SkTEndian_SwapBE16(
34),
IrishGaelic = SkTEndian_SwapBE16(
35),
Albanian = SkTEndian_SwapBE16(
36),
Romanian = SkTEndian_SwapBE16(
37),
Czech = SkTEndian_SwapBE16(
38),
Slovak = SkTEndian_SwapBE16(
39),
Slovenian = SkTEndian_SwapBE16(
40),
Yiddish = SkTEndian_SwapBE16(
41),
Serbian = SkTEndian_SwapBE16(
42),
Macedonian = SkTEndian_SwapBE16(
43),
Bulgarian = SkTEndian_SwapBE16(
44),
Ukrainian = SkTEndian_SwapBE16(
45),
Byelorussian = SkTEndian_SwapBE16(
46),
Uzbek = SkTEndian_SwapBE16(
47),
Kazakh = SkTEndian_SwapBE16(
48),
AzerbaijaniCyrillic = SkTEndian_SwapBE16(
49),
AzerbaijaniArabic = SkTEndian_SwapBE16(
50),
Armenian = SkTEndian_SwapBE16(
51),
Georgian = SkTEndian_SwapBE16(
52),
Moldavian = SkTEndian_SwapBE16(
53),
Kirghiz = SkTEndian_SwapBE16(
54),
Tajiki = SkTEndian_SwapBE16(
55),
Turkmen = SkTEndian_SwapBE16(
56),
MongolianTraditional = SkTEndian_SwapBE16(
57),
MongolianCyrillic = SkTEndian_SwapBE16(
58),
Pashto = SkTEndian_SwapBE16(
59),
Kurdish = SkTEndian_SwapBE16(
60),
Kashmiri = SkTEndian_SwapBE16(
61),
Sindhi = SkTEndian_SwapBE16(
62),
Tibetan = SkTEndian_SwapBE16(
63),
Nepali = SkTEndian_SwapBE16(
64),
Sanskrit = SkTEndian_SwapBE16(
65),
Marathi = SkTEndian_SwapBE16(
66),
Bengali = SkTEndian_SwapBE16(
67),
Assamese = SkTEndian_SwapBE16(
68),
Gujarati = SkTEndian_SwapBE16(
69),
Punjabi = SkTEndian_SwapBE16(
70),
Oriya = SkTEndian_SwapBE16(
71),
Malayalam = SkTEndian_SwapBE16(
72),
Kannada = SkTEndian_SwapBE16(
73),
Tamil = SkTEndian_SwapBE16(
74),
Telugu = SkTEndian_SwapBE16(
75),
Sinhalese = SkTEndian_SwapBE16(
76),
Burmese = SkTEndian_SwapBE16(
77),
Khmer = SkTEndian_SwapBE16(
78),
Lao = SkTEndian_SwapBE16(
79),
Vietnamese = SkTEndian_SwapBE16(
80),
Indonesian = SkTEndian_SwapBE16(
81),
Tagalong = SkTEndian_SwapBE16(
82),
MalayRoman = SkTEndian_SwapBE16(
83),
MalayArabic = SkTEndian_SwapBE16(
84),
Amharic = SkTEndian_SwapBE16(
85),
Tigrinya = SkTEndian_SwapBE16(
86),
Galla = SkTEndian_SwapBE16(
87),
Somali = SkTEndian_SwapBE16(
88),
Swahili = SkTEndian_SwapBE16(
89),
Kinyarwanda_Ruanda = SkTEndian_SwapBE16(
90),
Rundi = SkTEndian_SwapBE16(
91),
Nyanja_Chewa = SkTEndian_SwapBE16(
92),
Malagasy = SkTEndian_SwapBE16(
93),
Esperanto = SkTEndian_SwapBE16(
94),
Welsh = SkTEndian_SwapBE16(
128),
Basque = SkTEndian_SwapBE16(
129),
Catalan = SkTEndian_SwapBE16(
130),
Latin = SkTEndian_SwapBE16(
131),
Quenchua = SkTEndian_SwapBE16(
132),
Guarani = SkTEndian_SwapBE16(
133),
Aymara = SkTEndian_SwapBE16(
134),
Tatar = SkTEndian_SwapBE16(
135),
Uighur = SkTEndian_SwapBE16(
136),
Dzongkha = SkTEndian_SwapBE16(
137),
JavaneseRoman = SkTEndian_SwapBE16(
138),
SundaneseRoman = SkTEndian_SwapBE16(
139),
Galician = SkTEndian_SwapBE16(
140),
Afrikaans = SkTEndian_SwapBE16(
141),
Breton = SkTEndian_SwapBE16(
142),
Inuktitut = SkTEndian_SwapBE16(
143),
ScottishGaelic = SkTEndian_SwapBE16(
144),
ManxGaelic = SkTEndian_SwapBE16(
145),
IrishGaelicWithLenition = SkTEndian_SwapBE16(
146),
Tongan = SkTEndian_SwapBE16(
147),
GreekPolytonic = SkTEndian_SwapBE16(
148),
Greenlandic = SkTEndian_SwapBE16(
149),
AzerbaijaniRoman = SkTEndian_SwapBE16(
150),
} value;
} macintosh;
/** These are known as LCIDs.
* On Windows the current set can be had from EnumSystemLocalesEx and LocaleNameToLCID.
*/
struct Windows {
enum Value : SK_OT_USHORT {
Afrikaans_SouthAfrica = SkTEndian_SwapBE16(
0x0436),
Albanian_Albania = SkTEndian_SwapBE16(
0x041C),
Alsatian_France = SkTEndian_SwapBE16(
0x0484),
Amharic_Ethiopia = SkTEndian_SwapBE16(
0x045E),
Arabic_Algeria = SkTEndian_SwapBE16(
0x1401),
Arabic_Bahrain = SkTEndian_SwapBE16(
0x3C01),
Arabic_Egypt = SkTEndian_SwapBE16(
0x0C01),
Arabic_Iraq = SkTEndian_SwapBE16(
0x0801),
Arabic_Jordan = SkTEndian_SwapBE16(
0x2C01),
Arabic_Kuwait = SkTEndian_SwapBE16(
0x3401),
Arabic_Lebanon = SkTEndian_SwapBE16(
0x3001),
Arabic_Libya = SkTEndian_SwapBE16(
0x1001),
Arabic_Morocco = SkTEndian_SwapBE16(
0x1801),
Arabic_Oman = SkTEndian_SwapBE16(
0x2001),
Arabic_Qatar = SkTEndian_SwapBE16(
0x4001),
Arabic_SaudiArabia = SkTEndian_SwapBE16(
0x0401),
Arabic_Syria = SkTEndian_SwapBE16(
0x2801),
Arabic_Tunisia = SkTEndian_SwapBE16(
0x1C01),
Arabic_UAE = SkTEndian_SwapBE16(
0x3801),
Arabic_Yemen = SkTEndian_SwapBE16(
0x2401),
Armenian_Armenia = SkTEndian_SwapBE16(
0x042B),
Assamese_India = SkTEndian_SwapBE16(
0x044D),
AzeriCyrillic_Azerbaijan = SkTEndian_SwapBE16(
0x082C),
AzeriLatin_Azerbaijan = SkTEndian_SwapBE16(
0x042C),
Bashkir_Russia = SkTEndian_SwapBE16(
0x046D),
Basque_Basque = SkTEndian_SwapBE16(
0x042D),
Belarusian_Belarus = SkTEndian_SwapBE16(
0x0423),
Bengali_Bangladesh = SkTEndian_SwapBE16(
0x0845),
Bengali_India = SkTEndian_SwapBE16(
0x0445),
BosnianCyrillic_BosniaAndHerzegovina = SkTEndian_SwapBE16(
0x201A),
BosnianLatin_BosniaAndHerzegovina = SkTEndian_SwapBE16(
0x141A),
Breton_France = SkTEndian_SwapBE16(
0x047E),
Bulgarian_Bulgaria = SkTEndian_SwapBE16(
0x0402),
Catalan_Catalan = SkTEndian_SwapBE16(
0x0403),
Chinese_HongKongSAR = SkTEndian_SwapBE16(
0x0C04),
Chinese_MacaoSAR = SkTEndian_SwapBE16(
0x1404),
Chinese_PeoplesRepublicOfChina = SkTEndian_SwapBE16(
0x0804),
Chinese_Singapore = SkTEndian_SwapBE16(
0x1004),
Chinese_Taiwan = SkTEndian_SwapBE16(
0x0404),
Corsican_France = SkTEndian_SwapBE16(
0x0483),
Croatian_Croatia = SkTEndian_SwapBE16(
0x041A),
CroatianLatin_BosniaAndHerzegovina = SkTEndian_SwapBE16(
0x101A),
Czech_CzechRepublic = SkTEndian_SwapBE16(
0x0405),
Danish_Denmark = SkTEndian_SwapBE16(
0x0406),
Dari_Afghanistan = SkTEndian_SwapBE16(
0x048C),
Divehi_Maldives = SkTEndian_SwapBE16(
0x0465),
Dutch_Belgium = SkTEndian_SwapBE16(
0x0813),
Dutch_Netherlands = SkTEndian_SwapBE16(
0x0413),
English_Australia = SkTEndian_SwapBE16(
0x0C09),
English_Belize = SkTEndian_SwapBE16(
0x2809),
English_Canada = SkTEndian_SwapBE16(
0x1009),
English_Caribbean = SkTEndian_SwapBE16(
0x2409),
English_India = SkTEndian_SwapBE16(
0x4009),
English_Ireland = SkTEndian_SwapBE16(
0x1809),
English_Jamaica = SkTEndian_SwapBE16(
0x2009),
English_Malaysia = SkTEndian_SwapBE16(
0x4409),
English_NewZealand = SkTEndian_SwapBE16(
0x1409),
English_RepublicOfThePhilippines = SkTEndian_SwapBE16(
0x3409),
English_Singapore = SkTEndian_SwapBE16(
0x4809),
English_SouthAfrica = SkTEndian_SwapBE16(
0x1C09),
English_TrinidadAndTobago = SkTEndian_SwapBE16(
0x2C09),
English_UnitedKingdom = SkTEndian_SwapBE16(
0x0809),
English_UnitedStates = SkTEndian_SwapBE16(
0x0409),
English_Zimbabwe = SkTEndian_SwapBE16(
0x3009),
Estonian_Estonia = SkTEndian_SwapBE16(
0x0425),
Faroese_FaroeIslands = SkTEndian_SwapBE16(
0x0438),
Filipino_Philippines = SkTEndian_SwapBE16(
0x0464),
Finnish_Finland = SkTEndian_SwapBE16(
0x040B),
French_Belgium = SkTEndian_SwapBE16(
0x080C),
French_Canada = SkTEndian_SwapBE16(
0x0C0C),
French_France = SkTEndian_SwapBE16(
0x040C),
French_Luxembourg = SkTEndian_SwapBE16(
0x140c),
French_PrincipalityOfMonoco = SkTEndian_SwapBE16(
0x180C),
French_Switzerland = SkTEndian_SwapBE16(
0x100C),
Frisian_Netherlands = SkTEndian_SwapBE16(
0x0462),
Galician_Galician = SkTEndian_SwapBE16(
0x0456),
Georgian_Georgia = SkTEndian_SwapBE16(
0x0437),
German_Austria = SkTEndian_SwapBE16(
0x0C07),
German_Germany = SkTEndian_SwapBE16(
0x0407),
German_Liechtenstein = SkTEndian_SwapBE16(
0x1407),
German_Luxembourg = SkTEndian_SwapBE16(
0x1007),
German_Switzerland = SkTEndian_SwapBE16(
0x0807),
Greek_Greece = SkTEndian_SwapBE16(
0x0408),
Greenlandic_Greenland = SkTEndian_SwapBE16(
0x046F),
Gujarati_India = SkTEndian_SwapBE16(
0x0447),
HausaLatin_Nigeria = SkTEndian_SwapBE16(
0x0468),
Hebrew_Israel = SkTEndian_SwapBE16(
0x040D),
Hindi_India = SkTEndian_SwapBE16(
0x0439),
Hungarian_Hungary = SkTEndian_SwapBE16(
0x040E),
Icelandic_Iceland = SkTEndian_SwapBE16(
0x040F),
Igbo_Nigeria = SkTEndian_SwapBE16(
0x0470),
Indonesian_Indonesia = SkTEndian_SwapBE16(
0x0421),
Inuktitut_Canada = SkTEndian_SwapBE16(
0x045D),
InuktitutLatin_Canada = SkTEndian_SwapBE16(
0x085D),
Irish_Ireland = SkTEndian_SwapBE16(
0x083C),
isiXhosa_SouthAfrica = SkTEndian_SwapBE16(
0x0434),
isiZulu_SouthAfrica = SkTEndian_SwapBE16(
0x0435),
Italian_Italy = SkTEndian_SwapBE16(
0x0410),
Italian_Switzerland = SkTEndian_SwapBE16(
0x0810),
Japanese_Japan = SkTEndian_SwapBE16(
0x0411),
Kannada_India = SkTEndian_SwapBE16(
0x044B),
Kazakh_Kazakhstan = SkTEndian_SwapBE16(
0x043F),
Khmer_Cambodia = SkTEndian_SwapBE16(
0x0453),
Kiche_Guatemala = SkTEndian_SwapBE16(
0x0486),
Kinyarwanda_Rwanda = SkTEndian_SwapBE16(
0x0487),
Kiswahili_Kenya = SkTEndian_SwapBE16(
0x0441),
Konkani_India = SkTEndian_SwapBE16(
0x0457),
Korean_Korea = SkTEndian_SwapBE16(
0x0412),
Kyrgyz_Kyrgyzstan = SkTEndian_SwapBE16(
0x0440),
Lao_LaoPDR = SkTEndian_SwapBE16(
0x0454),
Latvian_Latvia = SkTEndian_SwapBE16(
0x0426),
Lithuanian_Lithuania = SkTEndian_SwapBE16(
0x0427),
LowerSorbian_Germany = SkTEndian_SwapBE16(
0x082E),
Luxembourgish_Luxembourg = SkTEndian_SwapBE16(
0x046E),
MacedonianFYROM_FormerYugoslavRepublicOfMacedonia = SkTEndian_SwapBE16(
0x042F),
Malay_BruneiDarussalam = SkTEndian_SwapBE16(
0x083E),
Malay_Malaysia = SkTEndian_SwapBE16(
0x043E),
Malayalam_India = SkTEndian_SwapBE16(
0x044C),
Maltese_Malta = SkTEndian_SwapBE16(
0x043A),
Maori_NewZealand = SkTEndian_SwapBE16(
0x0481),
Mapudungun_Chile = SkTEndian_SwapBE16(
0x047A),
Marathi_India = SkTEndian_SwapBE16(
0x044E),
Mohawk_Mohawk = SkTEndian_SwapBE16(
0x047C),
MongolianCyrillic_Mongolia = SkTEndian_SwapBE16(
0x0450),
MongolianTraditional_PeoplesRepublicOfChina = SkTEndian_SwapBE16(
0x0850),
Nepali_Nepal = SkTEndian_SwapBE16(
0x0461),
NorwegianBokmal_Norway = SkTEndian_SwapBE16(
0x0414),
NorwegianNynorsk_Norway = SkTEndian_SwapBE16(
0x0814),
Occitan_France = SkTEndian_SwapBE16(
0x0482),
Odia_India = SkTEndian_SwapBE16(
0x0448),
Pashto_Afghanistan = SkTEndian_SwapBE16(
0x0463),
Polish_Poland = SkTEndian_SwapBE16(
0x0415),
Portuguese_Brazil = SkTEndian_SwapBE16(
0x0416),
Portuguese_Portugal = SkTEndian_SwapBE16(
0x0816),
Punjabi_India = SkTEndian_SwapBE16(
0x0446),
Quechua_Bolivia = SkTEndian_SwapBE16(
0x046B),
Quechua_Ecuador = SkTEndian_SwapBE16(
0x086B),
Quechua_Peru = SkTEndian_SwapBE16(
0x0C6B),
Romanian_Romania = SkTEndian_SwapBE16(
0x0418),
Romansh_Switzerland = SkTEndian_SwapBE16(
0x0417),
Russian_Russia = SkTEndian_SwapBE16(
0x0419),
SamiInari_Finland = SkTEndian_SwapBE16(
0x243B),
SamiLule_Norway = SkTEndian_SwapBE16(
0x103B),
SamiLule_Sweden = SkTEndian_SwapBE16(
0x143B),
SamiNorthern_Finland = SkTEndian_SwapBE16(
0x0C3B),
SamiNorthern_Norway = SkTEndian_SwapBE16(
0x043B),
SamiNorthern_Sweden = SkTEndian_SwapBE16(
0x083B),
SamiSkolt_Finland = SkTEndian_SwapBE16(
0x203B),
SamiSouthern_Norway = SkTEndian_SwapBE16(
0x183B),
SamiSouthern_Sweden = SkTEndian_SwapBE16(
0x1C3B),
Sanskrit_India = SkTEndian_SwapBE16(
0x044F),
SerbianCyrillic_BosniaAndHerzegovina = SkTEndian_SwapBE16(
0x1C1A),
SerbianCyrillic_Serbia = SkTEndian_SwapBE16(
0x0C1A),
SerbianLatin_BosniaAndHerzegovina = SkTEndian_SwapBE16(
0x181A),
SerbianLatin_Serbia = SkTEndian_SwapBE16(
0x081A),
SesothoSaLeboa_SouthAfrica = SkTEndian_SwapBE16(
0x046C),
Setswana_SouthAfrica = SkTEndian_SwapBE16(
0x0432),
Sinhala_SriLanka = SkTEndian_SwapBE16(
0x045B),
Slovak_Slovakia = SkTEndian_SwapBE16(
0x041B),
Slovenian_Slovenia = SkTEndian_SwapBE16(
0x0424),
Spanish_Argentina = SkTEndian_SwapBE16(
0x2C0A),
Spanish_Bolivia = SkTEndian_SwapBE16(
0x400A),
Spanish_Chile = SkTEndian_SwapBE16(
0x340A),
Spanish_Colombia = SkTEndian_SwapBE16(
0x240A),
Spanish_CostaRica = SkTEndian_SwapBE16(
0x140A),
Spanish_DominicanRepublic = SkTEndian_SwapBE16(
0x1C0A),
Spanish_Ecuador = SkTEndian_SwapBE16(
0x300A),
Spanish_ElSalvador = SkTEndian_SwapBE16(
0x440A),
Spanish_Guatemala = SkTEndian_SwapBE16(
0x100A),
Spanish_Honduras = SkTEndian_SwapBE16(
0x480A),
Spanish_Mexico = SkTEndian_SwapBE16(
0x080A),
Spanish_Nicaragua = SkTEndian_SwapBE16(
0x4C0A),
Spanish_Panama = SkTEndian_SwapBE16(
0x180A),
Spanish_Paraguay = SkTEndian_SwapBE16(
0x3C0A),
Spanish_Peru = SkTEndian_SwapBE16(
0x280A),
Spanish_PuertoRico = SkTEndian_SwapBE16(
0x500A),
SpanishModernSort_Spain = SkTEndian_SwapBE16(
0x0C0A),
SpanishTraditionalSort_Spain = SkTEndian_SwapBE16(
0x040A),
Spanish_UnitedStates = SkTEndian_SwapBE16(
0x540A),
Spanish_Uruguay = SkTEndian_SwapBE16(
0x380A),
Spanish_Venezuela = SkTEndian_SwapBE16(
0x200A),
Sweden_Finland = SkTEndian_SwapBE16(
0x081D),
Swedish_Sweden = SkTEndian_SwapBE16(
0x041D),
Syriac_Syria = SkTEndian_SwapBE16(
0x045A),
TajikCyrillic_Tajikistan = SkTEndian_SwapBE16(
0x0428),
TamazightLatin_Algeria = SkTEndian_SwapBE16(
0x085F),
Tamil_India = SkTEndian_SwapBE16(
0x0449),
Tatar_Russia = SkTEndian_SwapBE16(
0x0444),
Telugu_India = SkTEndian_SwapBE16(
0x044A),
Thai_Thailand = SkTEndian_SwapBE16(
0x041E),
Tibetan_PRC = SkTEndian_SwapBE16(
0x0451),
Turkish_Turkey = SkTEndian_SwapBE16(
0x041F),
Turkmen_Turkmenistan = SkTEndian_SwapBE16(
0x0442),
Uighur_PRC = SkTEndian_SwapBE16(
0x0480),
Ukrainian_Ukraine = SkTEndian_SwapBE16(
0x0422),
UpperSorbian_Germany = SkTEndian_SwapBE16(
0x042E),
Urdu_IslamicRepublicOfPakistan = SkTEndian_SwapBE16(
0x0420),
UzbekCyrillic_Uzbekistan = SkTEndian_SwapBE16(
0x0843),
UzbekLatin_Uzbekistan = SkTEndian_SwapBE16(
0x0443),
Vietnamese_Vietnam = SkTEndian_SwapBE16(
0x042A),
Welsh_UnitedKingdom = SkTEndian_SwapBE16(
0x0452),
Wolof_Senegal = SkTEndian_SwapBE16(
0x0488),
Yakut_Russia = SkTEndian_SwapBE16(
0x0485),
Yi_PRC = SkTEndian_SwapBE16(
0x0478),
Yoruba_Nigeria = SkTEndian_SwapBE16(
0x046A),
} value;
} windows;
} languageID;
/** NameIDs <= 0xFF are predefined. Those > 0xFF are font specific. */
union NameID {
/** A font specific name id which should be greater than 0xFF. */
SK_OT_USHORT fontSpecific;
struct Predefined {
enum Value : SK_OT_USHORT {
CopyrightNotice = SkTEndian_SwapBE16(
0),
FontFamilyName = SkTEndian_SwapBE16(
1),
FontSubfamilyName = SkTEndian_SwapBE16(
2),
UniqueFontIdentifier = SkTEndian_SwapBE16(
3),
FullFontName = SkTEndian_SwapBE16(
4),
VersionString = SkTEndian_SwapBE16(
5),
//Version <number>.<number>
PostscriptName = SkTEndian_SwapBE16(
6),
//See spec for constraints.
Trademark = SkTEndian_SwapBE16(
7),
ManufacturerName = SkTEndian_SwapBE16(
8),
Designer = SkTEndian_SwapBE16(
9),
Description = SkTEndian_SwapBE16(
10),
URLVendor = SkTEndian_SwapBE16(
11),
URLDesigner = SkTEndian_SwapBE16(
12),
LicenseDescription = SkTEndian_SwapBE16(
13),
LicenseInfoURL = SkTEndian_SwapBE16(
14),
PreferredFamily = SkTEndian_SwapBE16(
16),
PreferredSubfamily = SkTEndian_SwapBE16(
17),
CompatibleFullName = SkTEndian_SwapBE16(
18),
SampleText = SkTEndian_SwapBE16(
19),
PostscriptCIDFindfontName = SkTEndian_SwapBE16(
20),
WWSFamilyName = SkTEndian_SwapBE16(
21),
WWSSubfamilyName = SkTEndian_SwapBE16(
22),
} value;
} predefined;
} nameID;
/** The length of the string in SK_OT_BYTEs. */
SK_OT_USHORT length;
/** Offset in SK_OT_BYTEs from start of string storage area
* (see SkOTTableName::stringOffset).
*/
SK_OT_USHORT offset;
};
//nameRecord[count];
struct Format1Ext {
/** The number of languageTagRecords which follow. */
SK_OT_USHORT langTagCount;
/** The encoding of a langTagRecord string is always UTF-16BE.
* The content should follow IETF specification BCP 47.
*/
struct LangTagRecord {
/** The length of the string in SK_OT_BYTEs. */
SK_OT_USHORT length;
/** Offset in SK_OT_BYTEs from start of string storage area
* (see SkOTTableName::stringOffset).
*/
SK_OT_USHORT offset;
};
//langTagRecord[langTagCount]
};
//format1ext (if format == format_1)
// The iterator should not be packed.
#pragma pack(pop)
class Iterator {
public:
Iterator(
const uint8_t* nameTable, size_t size)
: fNameTable(nameTable), fNameTableSize(size), fIndex(
0), fType(-
1) { }
Iterator(
const uint8_t* nameTable, size_t size, SK_OT_USHORT type)
: fNameTable(nameTable), fNameTableSize(size), fIndex(
0), fType(type)
{ }
void reset(SK_OT_USHORT type) {
fIndex =
0;
fType = type;
}
struct Record {
SkString name;
SkString language;
SK_OT_USHORT type;
};
bool next(Record&);
private:
const uint8_t* fNameTable;
const size_t fNameTableSize;
size_t fIndex;
int fType;
};
};
static_assert(
sizeof(SkOTTableName) ==
6,
"sizeof(SkOTTableName) not 6");
static_assert(
sizeof(SkOTTableName::Format1Ext) ==
2,
"sizeof(SkOTTableNameF1) not 2");
static_assert(sizeof(SkOTTableName::Format1Ext::LangTagRecord) == 4, "sizeof(SkOTTableNameLangTagRecord) not 4");
static_assert(sizeof(SkOTTableName::Record) == 12, "sizeof(SkOTTableNameRecord) not 12");
#endif