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_V0_DEFINED
9f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#define SkOTTable_OS_2_V0_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_V0 {
20f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT version;
21a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com    //SkOTTableOS2_VA::VERSION and SkOTTableOS2_V0::VERSION are both 0.
22a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com    //The only way to differentiate these two versions is by the size of the table.
23a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com    static const SK_OT_USHORT VERSION = SkTEndian_SwapBE16(0);
24b0a327e9390da5865d4c56db5e5259adc3380d37skia.committer@gmail.com
25f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT xAvgCharWidth;
26f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    struct WeightClass {
27f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        SK_TYPED_ENUM(Value, SK_OT_USHORT,
28f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Thin, SkTEndian_SwapBE16(100)))
29f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((ExtraLight, SkTEndian_SwapBE16(200)))
30f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Light, SkTEndian_SwapBE16(300)))
31f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Normal, SkTEndian_SwapBE16(400)))
32f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Medium, SkTEndian_SwapBE16(500)))
33f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((SemiBold, SkTEndian_SwapBE16(600)))
34f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Bold, SkTEndian_SwapBE16(700)))
35f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((ExtraBold, SkTEndian_SwapBE16(800)))
36f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Black, SkTEndian_SwapBE16(900)))
37f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_SEQ_END,
38f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        SK_SEQ_END)
39f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        SK_OT_USHORT value;
40f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    } usWeightClass;
41f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    struct WidthClass {
42f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        SK_TYPED_ENUM(Value, SK_OT_USHORT,
43f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((UltraCondensed, SkTEndian_SwapBE16(1)))
44f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((ExtraCondensed, SkTEndian_SwapBE16(2)))
45f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Condensed, SkTEndian_SwapBE16(3)))
46f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((SemiCondensed, SkTEndian_SwapBE16(4)))
47f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Medium, SkTEndian_SwapBE16(5)))
48f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((SemiExpanded, SkTEndian_SwapBE16(6)))
49f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((Expanded, SkTEndian_SwapBE16(7)))
50f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((ExtraExpanded, SkTEndian_SwapBE16(8)))
51f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            ((UltraExpanded, SkTEndian_SwapBE16(9)))
52f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_SEQ_END,
53f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        (value)SK_SEQ_END)
54f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    } usWidthClass;
55f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    union Type {
56f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        struct Field {
57f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //8-15
58f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
59f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved08,
60f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved09,
61f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved10,
62f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved11,
63f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved12,
64f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved13,
65f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved14,
66f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved15)
67f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //0-7
68f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
69f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved00,
70f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Restricted,
71f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                PreviewPrint,
72f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Editable,
73f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved04,
74f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved05,
75f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved06,
76f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved07)
77f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        } field;
78f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        struct Raw {
79562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT Installable = 0;
80562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT RestrictedMask = SkOTSetUSHORTBit<1>::value;
81562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT PreviewPrintMask = SkOTSetUSHORTBit<2>::value;
82562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT EditableMask = SkOTSetUSHORTBit<3>::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    SK_OT_ULONG ulCharRange[4];
99f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_CHAR achVendID[4];
100f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    union Selection {
101f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        struct Field {
102f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //8-15
103f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
104f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved08,
105f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved09,
106f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved10,
107f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved11,
108f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved12,
109f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved13,
110f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved14,
111f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved15)
112f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            //0-7
113f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_BYTE_BITFIELD(
114f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Italic,
115f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Underscore,
116f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Negative,
117f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Outlined,
118f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Strikeout,
119f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Bold,
120f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Regular,
121f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com                Reserved07)
122f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        } field;
123f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        struct Raw {
124562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT ItalicMask = SkOTSetUSHORTBit<0>::value;
125562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT UnderscoreMask = SkOTSetUSHORTBit<1>::value;
126562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT NegativeMask = SkOTSetUSHORTBit<2>::value;
127562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT OutlinedMask = SkOTSetUSHORTBit<3>::value;
128562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT StrikeoutMask = SkOTSetUSHORTBit<4>::value;
129562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT BoldMask = SkOTSetUSHORTBit<5>::value;
130562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com            static const SK_OT_USHORT RegularMask = SkOTSetUSHORTBit<6>::value;
131f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com            SK_OT_USHORT value;
132f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com        } raw;
133f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    } fsSelection;
134f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT usFirstCharIndex;
135f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT usLastCharIndex;
136f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    //version0
137f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT sTypoAscender;
138f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT sTypoDescender;
139f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_SHORT sTypoLineGap;
140f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT usWinAscent;
141f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com    SK_OT_USHORT usWinDescent;
142f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com};
143f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
144f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#pragma pack(pop)
145f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
146f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
147f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.comSK_COMPILE_ASSERT(sizeof(SkOTTableOS2_V0) == 78, sizeof_SkOTTableOS2_V0_not_78);
148f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com
149f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#endif
150