1f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com/*
2f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com * Copyright 2012 Google Inc.
3f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com *
4f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com * Use of this source code is governed by a BSD-style license that can be
5f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com * found in the LICENSE file.
6f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com */
7f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
8f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#ifndef SkOTTable_OS_2_V4_DEFINED
9f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#define SkOTTable_OS_2_V4_DEFINED
10f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
11f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#include "SkEndian.h"
12f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#include "SkIBMFamilyClass.h"
13f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#include "SkOTTableTypes.h"
14f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#include "SkPanose.h"
15f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#include "SkTypedEnum.h"
16f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
17f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#pragma pack(push, 1)
18f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
19f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.comstruct SkOTTableOS2_V4 {
20f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT version;
21a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com    static const SK_OT_USHORT VERSION = SkTEndian_SwapBE16(4);
22b0a327e9390da5865d4c56db5e5259adc3380d37skia.committer@gmail.com
23f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT xAvgCharWidth;
24f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    struct WeightClass {
25f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        SK_TYPED_ENUM(Value, SK_OT_USHORT,
26f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Thin, SkTEndian_SwapBE16(100)))
27f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((ExtraLight, SkTEndian_SwapBE16(200)))
28f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Light, SkTEndian_SwapBE16(300)))
29f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Normal, SkTEndian_SwapBE16(400)))
30f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Medium, SkTEndian_SwapBE16(500)))
31f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((SemiBold, SkTEndian_SwapBE16(600)))
32f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Bold, SkTEndian_SwapBE16(700)))
33f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((ExtraBold, SkTEndian_SwapBE16(800)))
34f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Black, SkTEndian_SwapBE16(900)))
35f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_SEQ_END,
36f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        SK_SEQ_END)
37f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        SK_OT_USHORT value;
38f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    } usWeightClass;
39f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    struct WidthClass {
40f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        SK_TYPED_ENUM(Value, SK_OT_USHORT,
41f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((UltraCondensed, SkTEndian_SwapBE16(1)))
42f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((ExtraCondensed, SkTEndian_SwapBE16(2)))
43f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Condensed, SkTEndian_SwapBE16(3)))
44f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((SemiCondensed, SkTEndian_SwapBE16(4)))
45f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Medium, SkTEndian_SwapBE16(5)))
46f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((SemiExpanded, SkTEndian_SwapBE16(6)))
47f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Expanded, SkTEndian_SwapBE16(7)))
48f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((ExtraExpanded, SkTEndian_SwapBE16(8)))
49f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((UltraExpanded, SkTEndian_SwapBE16(9)))
50f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_SEQ_END,
51f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        (value)SK_SEQ_END)
52f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    } usWidthClass;
53f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    union Type {
54f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        struct Field {
55f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //8-15
56f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
57f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                NoSubsetting,
58f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Bitmap,
59f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved10,
60f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved11,
61f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved12,
62f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved13,
63f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved14,
64f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved15)
65f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //0-7
66f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
67f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved00,
68f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Restricted,
69f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                PreviewPrint,
70f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Editable,
71f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved04,
72f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved05,
73f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved06,
74f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved07)
75f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        } field;
76f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        struct Raw {
77562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT Installable = 0;
78562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT RestrictedMask = SkOTSetUSHORTBit<1>::value;
79562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT PreviewPrintMask = SkOTSetUSHORTBit<2>::value;
80562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT EditableMask = SkOTSetUSHORTBit<3>::value;
81562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT NoSubsettingMask = SkOTSetUSHORTBit<8>::value;
82562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT BitmapMask = SkOTSetUSHORTBit<9>::value;
83f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_USHORT value;
84f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        } raw;
85f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    } fsType;
86f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT ySubscriptXSize;
87f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT ySubscriptYSize;
88f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT ySubscriptXOffset;
89f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT ySubscriptYOffset;
90f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT ySuperscriptXSize;
91f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT ySuperscriptYSize;
92f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT ySuperscriptXOffset;
93f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT ySuperscriptYOffset;
94f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT yStrikeoutSize;
95f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT yStrikeoutPosition;
96f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SkIBMFamilyClass sFamilyClass;
97f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SkPanose panose;
98f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    union UnicodeRange {
99f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        struct Field {
100f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l0 24-31
101f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
102f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Thai,
103f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Lao,
104f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Georgian,
105f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Balinese,
106f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                HangulJamo,
107f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                LatinExtendedAdditional,
108f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                GreekExtended,
109f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                GeneralPunctuation)
110f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l0 16-23
111f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
112f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Bengali,
113f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Gurmukhi,
114f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Gujarati,
115f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Oriya,
116f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Tamil,
117f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Telugu,
118f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Kannada,
119f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Malayalam)
120f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l0 8-15
121f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
122f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Coptic,
123f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Cyrillic,
124f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Armenian,
125f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Hebrew,
126f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Vai,
127f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Arabic,
128f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                NKo,
129f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Devanagari)
130f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l0 0-7
131f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
132f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                BasicLatin,
133f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Latin1Supplement,
134f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                LatinExtendedA,
135f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                LatinExtendedB,
136f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                IPAExtensions,
137f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                SpacingModifierLetters,
138f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                CombiningDiacriticalMarks,
139f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                GreekAndCoptic)
140f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
141f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l1 24-31
142f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
143f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Hangul,
144f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                NonPlane0,
145f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Phoenician,
146f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                CJKUnifiedIdeographs,
147f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                PrivateUseArea,
148f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                CJKCompatibilityIdeographs,
149f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                AlphabeticPresentationForms,
150f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                ArabicPresentationFormsA)
151f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l1 16-23
152f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
153f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                CJKSymbolsAndPunctuation,
154f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Hiragana,
155f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Katakana,
156f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Bopomofo,
157f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                HangulCompatibilityJamo,
158f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                PhagsPa,
159f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                EnclosedCJKLettersAndMonths,
160f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                CJKCompatibility)
161f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l1 8-15
162f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
163f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                ControlPictures,
164f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                OpticalCharacterRecognition,
165f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                EnclosedAlphanumerics,
166f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                BoxDrawing,
167f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                BlockElements,
168f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                GeometricShapes,
169f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                MiscellaneousSymbols,
170f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Dingbats)
171f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l1 0-7
172f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
173f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                SuperscriptsAndSubscripts,
174f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                CurrencySymbols,
175f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                CombiningDiacriticalMarksForSymbols,
176f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                LetterlikeSymbols,
177f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                NumberForms,
178f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Arrows,
179f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                MathematicalOperators,
180f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                MiscellaneousTechnical)
181f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
182f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l2 24-31
183f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
184f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                MusicalSymbols,
185f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                MathematicalAlphanumericSymbols,
186f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                PrivateUse,
187f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                VariationSelectors,
188f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Tags,
189f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Limbu,
190f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                TaiLe,
191f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                NewTaiLue)
192f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l2 16-23
193f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
194f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Khmer,
195f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Mongolian,
196f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Braille,
197f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Yi,
198f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Tagalog_Hanunoo_Buhid_Tagbanwa,
199f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                OldItalic,
200f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Gothic,
201f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Deseret)
202f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l2 8-15
203f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
204f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Thaana,
205f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Sinhala,
206f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Myanmar,
207f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Ethiopic,
208f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Cherokee,
209f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                UnifiedCanadianSyllabics,
210f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Ogham,
211f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Runic)
212f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l2 0-7
213f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
214f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                CombiningHalfMarks,
215f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                CJKCompatibilityForms,
216f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                SmallFormVariants,
217f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                ArabicPresentationFormsB,
218f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                HalfwidthAndFullwidthForms,
219f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Specials,
220f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Tibetan,
221f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Syriac)
222f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
223f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l3 24-31
224f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
225f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                PhaistosDisc,
226f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Carian_Lycian_Lydian,
227f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                DominoTiles_MahjongTiles,
228f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved123,
229f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved124,
230f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved125,
231f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved126,
232f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved127)
233f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l3 16-23
234f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
235f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Sundanese,
236f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Lepcha,
237f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                OlChiki,
238f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Saurashtra,
239f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                KayahLi,
240f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Rejang,
241f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Cham,
242f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                AncientSymbols)
243f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l3 8-15
244f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
245f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                OldPersian,
246f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Shavian,
247f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Osmanya,
248f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                CypriotSyllabary,
249f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Kharoshthi,
250f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                TaiXuanJingSymbols,
251f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Cuneiform,
252f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                CountingRodNumerals)
253f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l3 0-7
254f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
255f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Buginese,
256f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Glagolitic,
257f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Tifinagh,
258f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                YijingHexagramSymbols,
259f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                SylotiNagri,
260f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                LinearB_AegeanNumbers,
261f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                AncientGreekNumbers,
262f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Ugaritic)
263f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        } field;
264f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        struct Raw {
265f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            struct l0 {
266562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG BasicLatinMask = SkOTSetULONGBit<0>::value;
267562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Latin1SupplementMask = SkOTSetULONGBit<1>::value;
268562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG LatinExtendedAMask = SkOTSetULONGBit<2>::value;
269562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG LatinExtendedBMask = SkOTSetULONGBit<3>::value;
270562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG IPAExtensionsMask = SkOTSetULONGBit<4>::value;
271562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG SpacingModifierLettersMask = SkOTSetULONGBit<5>::value;
272562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CombiningDiacriticalMarksMask = SkOTSetULONGBit<6>::value;
273562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG GreekAndCopticMask = SkOTSetULONGBit<7>::value;
274562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CopticMask = SkOTSetULONGBit<8>::value;
275562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CyrillicMask = SkOTSetULONGBit<9>::value;
276562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG ArmenianMask = SkOTSetULONGBit<10>::value;
277562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG HebrewMask = SkOTSetULONGBit<11>::value;
278562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG VaiMask = SkOTSetULONGBit<12>::value;
279562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG ArabicMask = SkOTSetULONGBit<13>::value;
280562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG NKoMask = SkOTSetULONGBit<14>::value;
281562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG DevanagariMask = SkOTSetULONGBit<15>::value;
282562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG BengaliMask = SkOTSetULONGBit<16>::value;
283562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG GurmukhiMask = SkOTSetULONGBit<17>::value;
284562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG GujaratiMask = SkOTSetULONGBit<18>::value;
285562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG OriyaMask = SkOTSetULONGBit<19>::value;
286562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG TamilMask = SkOTSetULONGBit<20>::value;
287562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG TeluguMask = SkOTSetULONGBit<21>::value;
288562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG KannadaMask = SkOTSetULONGBit<22>::value;
289562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MalayalamMask = SkOTSetULONGBit<23>::value;
290562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG ThaiMask = SkOTSetULONGBit<24>::value;
291562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG LaoMask = SkOTSetULONGBit<25>::value;
292562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG GeorgianMask = SkOTSetULONGBit<26>::value;
293562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG BalineseMask = SkOTSetULONGBit<27>::value;
294562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG HangulJamoMask = SkOTSetULONGBit<28>::value;
295562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG LatinExtendedAdditionalMask = SkOTSetULONGBit<29>::value;
296562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG GreekExtendedMask = SkOTSetULONGBit<30>::value;
297562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG GeneralPunctuationMask = SkOTSetULONGBit<31>::value;
298f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            };
299f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            struct l1 {
300562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG SuperscriptsAndSubscriptsMask = SkOTSetULONGBit<32 - 32>::value;
301562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CurrencySymbolsMask = SkOTSetULONGBit<33 - 32>::value;
302562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CombiningDiacriticalMarksForSymbolsMask = SkOTSetULONGBit<34 - 32>::value;
303562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG LetterlikeSymbolsMask = SkOTSetULONGBit<35 - 32>::value;
304562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG NumberFormsMask = SkOTSetULONGBit<36 - 32>::value;
305562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG ArrowsMask = SkOTSetULONGBit<37 - 32>::value;
306562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MathematicalOperatorsMask = SkOTSetULONGBit<38 - 32>::value;
307562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MiscellaneousTechnicalMask = SkOTSetULONGBit<39 - 32>::value;
308562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG ControlPicturesMask = SkOTSetULONGBit<40 - 32>::value;
309562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG OpticalCharacterRecognitionMask = SkOTSetULONGBit<41 - 32>::value;
310562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG EnclosedAlphanumericsMask = SkOTSetULONGBit<42 - 32>::value;
311562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG BoxDrawingMask = SkOTSetULONGBit<43 - 32>::value;
312562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG BlockElementsMask = SkOTSetULONGBit<44 - 32>::value;
313562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG GeometricShapesMask = SkOTSetULONGBit<45 - 32>::value;
314562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MiscellaneousSymbolsMask = SkOTSetULONGBit<46 - 32>::value;
315562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG DingbatsMask = SkOTSetULONGBit<47 - 32>::value;
316562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CJKSymbolsAndPunctuationMask = SkOTSetULONGBit<48 - 32>::value;
317562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG HiraganaMask = SkOTSetULONGBit<49 - 32>::value;
318562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG KatakanaMask = SkOTSetULONGBit<50 - 32>::value;
319562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG BopomofoMask = SkOTSetULONGBit<51 - 32>::value;
320562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG HangulCompatibilityJamoMask = SkOTSetULONGBit<52 - 32>::value;
321562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG PhagsPaMask = SkOTSetULONGBit<53 - 32>::value;
322562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG EnclosedCJKLettersAndMonthsMask = SkOTSetULONGBit<54 - 32>::value;
323562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CJKCompatibilityMask = SkOTSetULONGBit<55 - 32>::value;
324562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG HangulMask = SkOTSetULONGBit<56 - 32>::value;
325562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG NonPlane0Mask = SkOTSetULONGBit<57 - 32>::value;
326562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG PhoenicianMask = SkOTSetULONGBit<58 - 32>::value;
327562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CJKUnifiedIdeographsMask = SkOTSetULONGBit<59 - 32>::value;
328562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG PrivateUseAreaMask = SkOTSetULONGBit<60 - 32>::value;
329562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CJKCompatibilityIdeographsMask = SkOTSetULONGBit<61 - 32>::value;
330562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG AlphabeticPresentationFormsMask = SkOTSetULONGBit<62 - 32>::value;
331562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG ArabicPresentationFormsAMask = SkOTSetULONGBit<63 - 32>::value;
332f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            };
333f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            struct l2 {
334562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CombiningHalfMarksMask = SkOTSetULONGBit<64 - 64>::value;
335562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CJKCompatibilityFormsMask = SkOTSetULONGBit<65 - 64>::value;
336562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG SmallFormVariantsMask = SkOTSetULONGBit<66 - 64>::value;
337562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG ArabicPresentationFormsBMask = SkOTSetULONGBit<67 - 64>::value;
338562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG HalfwidthAndFullwidthFormsMask = SkOTSetULONGBit<68 - 64>::value;
339562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG SpecialsMask = SkOTSetULONGBit<69 - 64>::value;
340562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG TibetanMask = SkOTSetULONGBit<70 - 64>::value;
341562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG SyriacMask = SkOTSetULONGBit<71 - 64>::value;
342562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG ThaanaMask = SkOTSetULONGBit<72 - 64>::value;
343562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG SinhalaMask = SkOTSetULONGBit<73 - 64>::value;
344562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MyanmarMask = SkOTSetULONGBit<74 - 64>::value;
345562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG EthiopicMask = SkOTSetULONGBit<75 - 64>::value;
346562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CherokeeMask = SkOTSetULONGBit<76 - 64>::value;
347562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG UnifiedCanadianSyllabicsMask = SkOTSetULONGBit<77 - 64>::value;
348562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG OghamMask = SkOTSetULONGBit<78 - 64>::value;
349562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG RunicMask = SkOTSetULONGBit<79 - 64>::value;
350562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG KhmerMask = SkOTSetULONGBit<80 - 64>::value;
351562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MongolianMask = SkOTSetULONGBit<81 - 64>::value;
352562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG BrailleMask = SkOTSetULONGBit<82 - 64>::value;
353562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG YiMask = SkOTSetULONGBit<83 - 64>::value;
354562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Tagalog_Hanunoo_Buhid_TagbanwaMask = SkOTSetULONGBit<84 - 64>::value;
355562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG OldItalicMask = SkOTSetULONGBit<85 - 64>::value;
356562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG GothicMask = SkOTSetULONGBit<86 - 64>::value;
357562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG DeseretMask = SkOTSetULONGBit<87 - 64>::value;
358562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MusicalSymbolsMask = SkOTSetULONGBit<88 - 64>::value;
359562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MathematicalAlphanumericSymbolsMask = SkOTSetULONGBit<89 - 64>::value;
360562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG PrivateUseMask = SkOTSetULONGBit<90 - 64>::value;
361562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG VariationSelectorsMask = SkOTSetULONGBit<91 - 64>::value;
362562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG TagsMask = SkOTSetULONGBit<92 - 64>::value;
363562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG LimbuMask = SkOTSetULONGBit<93 - 64>::value;
364562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG TaiLeMask = SkOTSetULONGBit<94 - 64>::value;
365562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG NewTaiLueMask = SkOTSetULONGBit<95 - 64>::value;
366f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            };
367f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            struct l3 {
368562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG BugineseMask = SkOTSetULONGBit<96 - 96>::value;
369562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG GlagoliticMask = SkOTSetULONGBit<97 - 96>::value;
370562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG TifinaghMask = SkOTSetULONGBit<98 - 96>::value;
371562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG YijingHexagramSymbolsMask = SkOTSetULONGBit<99 - 96>::value;
372562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG SylotiNagriMask = SkOTSetULONGBit<100 - 96>::value;
373562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG LinearB_AegeanNumbersMask = SkOTSetULONGBit<101 - 96>::value;
374562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG AncientGreekNumbersMask = SkOTSetULONGBit<102 - 96>::value;
375562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG UgariticMask = SkOTSetULONGBit<103 - 96>::value;
376562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG OldPersianMask = SkOTSetULONGBit<104 - 96>::value;
377562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG ShavianMask = SkOTSetULONGBit<105 - 96>::value;
378562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG OsmanyaMask = SkOTSetULONGBit<106 - 96>::value;
379562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CypriotSyllabaryMask = SkOTSetULONGBit<107 - 96>::value;
380562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG KharoshthiMask = SkOTSetULONGBit<108 - 96>::value;
381562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG TaiXuanJingSymbolsMask = SkOTSetULONGBit<109 - 96>::value;
382562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CuneiformMask = SkOTSetULONGBit<110 - 96>::value;
383562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG CountingRodNumeralsMask = SkOTSetULONGBit<111 - 96>::value;
384562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG SundaneseMask = SkOTSetULONGBit<112 - 96>::value;
385562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG LepchaMask = SkOTSetULONGBit<113 - 96>::value;
386562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG OlChikiMask = SkOTSetULONGBit<114 - 96>::value;
387562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG SaurashtraMask = SkOTSetULONGBit<115 - 96>::value;
388562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG KayahLiMask = SkOTSetULONGBit<116 - 96>::value;
389562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG RejangMask = SkOTSetULONGBit<117 - 96>::value;
390562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG ChamMask = SkOTSetULONGBit<118 - 96>::value;
391562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG AncientSymbolsMask = SkOTSetULONGBit<119 - 96>::value;
392562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG PhaistosDiscMask = SkOTSetULONGBit<120 - 96>::value;
393562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Carian_Lycian_LydianMask = SkOTSetULONGBit<121 - 96>::value;
394562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG DominoTiles_MahjongTilesMask = SkOTSetULONGBit<122 - 96>::value;
395f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            };
396f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_ULONG value[4];
397f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        } raw;
398f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    } ulUnicodeRange;
399f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_CHAR achVendID[4];
400f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    union Selection {
401f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        struct Field {
402f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //8-15
403f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
404f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                WWS,
405f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Oblique,
406f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved10,
407f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved11,
408f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved12,
409f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved13,
410f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved14,
411f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved15)
412f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //0-7
413f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
414f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Italic,
415f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Underscore,
416f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Negative,
417f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Outlined,
418f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Strikeout,
419f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Bold,
420f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Regular,
421f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                UseTypoMetrics)
422f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        } field;
423f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        struct Raw {
424562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT ItalicMask = SkOTSetUSHORTBit<0>::value;
425562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT UnderscoreMask = SkOTSetUSHORTBit<1>::value;
426562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT NegativeMask = SkOTSetUSHORTBit<2>::value;
427562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT OutlinedMask = SkOTSetUSHORTBit<3>::value;
428562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT StrikeoutMask = SkOTSetUSHORTBit<4>::value;
429562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT BoldMask = SkOTSetUSHORTBit<5>::value;
430562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT RegularMask = SkOTSetUSHORTBit<6>::value;
431562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT UseTypoMetricsMask = SkOTSetUSHORTBit<7>::value;
432562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT WWSMask = SkOTSetUSHORTBit<8>::value;
433562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT ObliqueMask = SkOTSetUSHORTBit<9>::value;
434f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_USHORT value;
435f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        } raw;
436f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    } fsSelection;
437f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT usFirstCharIndex;
438f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT usLastCharIndex;
439f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    //version0
440f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT sTypoAscender;
441f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT sTypoDescender;
442f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT sTypoLineGap;
443f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT usWinAscent;
444f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT usWinDescent;
445f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    //version1
446f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    union CodePageRange {
447f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        struct Field {
448f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l0 24-31
449f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
450f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved24,
451f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved25,
452f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved26,
453f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved27,
454f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved28,
455f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                MacintoshCharacterSet,
456f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                OEMCharacterSet,
457f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                SymbolCharacterSet)
458f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l0 16-23
459f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
460f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Thai_874,
461f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                JISJapan_932,
462f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                ChineseSimplified_936,
463f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                KoreanWansung_949,
464f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                ChineseTraditional_950,
465f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                KoreanJohab_1361,
466f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved22,
467f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved23)
468f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l0 8-15
469f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
470f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Vietnamese,
471f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved09,
472f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved10,
473f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved11,
474f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved12,
475f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved13,
476f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved14,
477f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved15)
478f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l0 0-7
479f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
480f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Latin1_1252,
481f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Latin2EasternEurope_1250,
482f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Cyrillic_1251,
483f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Greek_1253,
484f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Turkish_1254,
485f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Hebrew_1255,
486f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Arabic_1256,
487f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                WindowsBaltic_1257)
488f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
489f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l1 24-31
490f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
491f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                IBMTurkish_857,
492f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                IBMCyrillic_855,
493f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Latin2_852,
494f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                MSDOSBaltic_775,
495f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Greek_737,
496f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Arabic_708,
497f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                WELatin1_850,
498f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                US_437)
499f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l1 16-23
500f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
501f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                IBMGreek_869,
502f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                MSDOSRussian_866,
503f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                MSDOSNordic_865,
504f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Arabic_864,
505f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                MSDOSCanadianFrench_863,
506f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Hebrew_862,
507f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                MSDOSIcelandic_861,
508f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                MSDOSPortuguese_860)
509f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l1 8-15
510f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
511f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved40,
512f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved41,
513f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved42,
514f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved43,
515f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved44,
516f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved45,
517f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved46,
518f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved47)
519f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //l1 0-7
520f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
521f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved32,
522f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved33,
523f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved34,
524f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved35,
525f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved36,
526f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved37,
527f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved38,
528f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved39)
529f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        } field;
530f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        struct Raw {
531f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            struct l0 {
532562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Latin1_1252Mask = SkOTSetULONGBit<0>::value;
533562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Latin2EasternEurope_1250Mask = SkOTSetULONGBit<1>::value;
534562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Cyrillic_1251Mask = SkOTSetULONGBit<2>::value;
535562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Greek_1253Mask = SkOTSetULONGBit<3>::value;
536562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Turkish_1254Mask = SkOTSetULONGBit<4>::value;
537562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Hebrew_1255Mask = SkOTSetULONGBit<5>::value;
538562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Arabic_1256Mask = SkOTSetULONGBit<6>::value;
539562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG WindowsBaltic_1257Mask = SkOTSetULONGBit<7>::value;
540562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Vietnamese_1258Mask = SkOTSetULONGBit<8>::value;
541562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Thai_874Mask = SkOTSetULONGBit<16>::value;
542562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG JISJapan_932Mask = SkOTSetULONGBit<17>::value;
543562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG ChineseSimplified_936Mask = SkOTSetULONGBit<18>::value;
544562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG KoreanWansung_949Mask = SkOTSetULONGBit<19>::value;
545562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG ChineseTraditional_950Mask = SkOTSetULONGBit<20>::value;
546562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG KoreanJohab_1361Mask = SkOTSetULONGBit<21>::value;
547562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MacintoshCharacterSetMask = SkOTSetULONGBit<29>::value;
548562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG OEMCharacterSetMask = SkOTSetULONGBit<30>::value;
549562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG SymbolCharacterSetMask = SkOTSetULONGBit<31>::value;
550f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            };
551f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            struct l1 {
552562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG IBMGreek_869Mask = SkOTSetULONGBit<48 - 32>::value;
553562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MSDOSRussian_866Mask = SkOTSetULONGBit<49 - 32>::value;
554562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MSDOSNordic_865Mask = SkOTSetULONGBit<50 - 32>::value;
555562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Arabic_864Mask = SkOTSetULONGBit<51 - 32>::value;
556562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MSDOSCanadianFrench_863Mask = SkOTSetULONGBit<52 - 32>::value;
557562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Hebrew_862Mask = SkOTSetULONGBit<53 - 32>::value;
558562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MSDOSIcelandic_861Mask = SkOTSetULONGBit<54 - 32>::value;
559562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MSDOSPortuguese_860Mask = SkOTSetULONGBit<55 - 32>::value;
560562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG IBMTurkish_857Mask = SkOTSetULONGBit<56 - 32>::value;
561562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG IBMCyrillic_855Mask = SkOTSetULONGBit<57 - 32>::value;
562562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Latin2_852Mask = SkOTSetULONGBit<58 - 32>::value;
563562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG MSDOSBaltic_775Mask = SkOTSetULONGBit<59 - 32>::value;
564562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Greek_737Mask = SkOTSetULONGBit<60 - 32>::value;
565562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG Arabic_708Mask = SkOTSetULONGBit<61 - 32>::value;
566562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG WELatin1_850Mask = SkOTSetULONGBit<62 - 32>::value;
567562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com                static const SK_OT_ULONG US_437Mask = SkOTSetULONGBit<63 - 32>::value;
568f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            };
569f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_ULONG value[2];
570f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        } raw;
571f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    } ulCodePageRange;
572f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    //version2
573f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT sxHeight;
574f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT sCapHeight;
575f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT usDefaultChar;
576f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT usBreakChar;
577f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT usMaxContext;
578f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com};
579f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
580f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#pragma pack(pop)
581f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
582f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
583f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.comSK_COMPILE_ASSERT(sizeof(SkOTTableOS2_V4) == 96, sizeof_SkOTTableOS2_V4_not_96);
584f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
585f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#endif
586