1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2012 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SkOTTable_OS_2_V0_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkOTTable_OS_2_V0_DEFINED
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkEndian.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkIBMFamilyClass.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkOTTableTypes.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPanose.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#pragma pack(push, 1)
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct SkOTTableOS2_V0 {
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_USHORT version;
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    //SkOTTableOS2_VA::VERSION and SkOTTableOS2_V0::VERSION are both 0.
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    //The only way to differentiate these two versions is by the size of the table.
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    static const SK_OT_USHORT VERSION = SkTEndian_SwapBE16(0);
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT xAvgCharWidth;
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    struct WeightClass {
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        enum Value : SK_OT_USHORT {
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Thin = SkTEndian_SwapBE16(100),
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            ExtraLight = SkTEndian_SwapBE16(200),
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Light = SkTEndian_SwapBE16(300),
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Normal = SkTEndian_SwapBE16(400),
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Medium = SkTEndian_SwapBE16(500),
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SemiBold = SkTEndian_SwapBE16(600),
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Bold = SkTEndian_SwapBE16(700),
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            ExtraBold = SkTEndian_SwapBE16(800),
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Black = SkTEndian_SwapBE16(900),
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        };
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SK_OT_USHORT value;
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    } usWeightClass;
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    struct WidthClass {
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        enum Value : SK_OT_USHORT {
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            UltraCondensed = SkTEndian_SwapBE16(1),
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            ExtraCondensed = SkTEndian_SwapBE16(2),
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Condensed = SkTEndian_SwapBE16(3),
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SemiCondensed = SkTEndian_SwapBE16(4),
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Medium = SkTEndian_SwapBE16(5),
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SemiExpanded = SkTEndian_SwapBE16(6),
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Expanded = SkTEndian_SwapBE16(7),
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            ExtraExpanded = SkTEndian_SwapBE16(8),
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            UltraExpanded = SkTEndian_SwapBE16(9),
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        } value;
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    } usWidthClass;
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    union Type {
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        struct Field {
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            //8-15
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_OT_BYTE_BITFIELD(
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved08,
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved09,
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved10,
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved11,
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved12,
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved13,
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved14,
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved15)
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            //0-7
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_OT_BYTE_BITFIELD(
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved00,
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Restricted,
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                PreviewPrint,
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Editable,
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved04,
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved05,
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved06,
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved07)
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        } field;
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        struct Raw {
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            static const SK_OT_USHORT Installable = 0;
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            static const SK_OT_USHORT RestrictedMask = SkOTSetUSHORTBit<1>::value;
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            static const SK_OT_USHORT PreviewPrintMask = SkOTSetUSHORTBit<2>::value;
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            static const SK_OT_USHORT EditableMask = SkOTSetUSHORTBit<3>::value;
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_OT_USHORT value;
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        } raw;
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    } fsType;
83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT ySubscriptXSize;
84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT ySubscriptYSize;
85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT ySubscriptXOffset;
86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT ySubscriptYOffset;
87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT ySuperscriptXSize;
88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT ySuperscriptYSize;
89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT ySuperscriptXOffset;
90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT ySuperscriptYOffset;
91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT yStrikeoutSize;
92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT yStrikeoutPosition;
93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkIBMFamilyClass sFamilyClass;
94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPanose panose;
95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_ULONG ulCharRange[4];
96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_CHAR achVendID[4];
97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    union Selection {
98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        struct Field {
99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            //8-15
100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_OT_BYTE_BITFIELD(
101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved08,
102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved09,
103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved10,
104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved11,
105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved12,
106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved13,
107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved14,
108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved15)
109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            //0-7
110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_OT_BYTE_BITFIELD(
111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Italic,
112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Underscore,
113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Negative,
114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Outlined,
115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Strikeout,
116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Bold,
117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Regular,
118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                Reserved07)
119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        } field;
120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        struct Raw {
121fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            static const SK_OT_USHORT ItalicMask = SkOTSetUSHORTBit<0>::value;
122fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            static const SK_OT_USHORT UnderscoreMask = SkOTSetUSHORTBit<1>::value;
123fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            static const SK_OT_USHORT NegativeMask = SkOTSetUSHORTBit<2>::value;
124fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            static const SK_OT_USHORT OutlinedMask = SkOTSetUSHORTBit<3>::value;
125fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            static const SK_OT_USHORT StrikeoutMask = SkOTSetUSHORTBit<4>::value;
126fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            static const SK_OT_USHORT BoldMask = SkOTSetUSHORTBit<5>::value;
127fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            static const SK_OT_USHORT RegularMask = SkOTSetUSHORTBit<6>::value;
128fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_OT_USHORT value;
129fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        } raw;
130fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    } fsSelection;
131fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_USHORT usFirstCharIndex;
132fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_USHORT usLastCharIndex;
133fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    //version0
134fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT sTypoAscender;
135fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT sTypoDescender;
136fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_SHORT sTypoLineGap;
137fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_USHORT usWinAscent;
138fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_OT_USHORT usWinDescent;
139fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
140fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
141fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#pragma pack(pop)
142fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
143fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
144fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic_assert(sizeof(SkOTTableOS2_V0) == 78, "sizeof_SkOTTableOS2_V0_not_78");
145fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
146fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
147