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