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 SkIBMFamilyClass_DEFINED
9 #define SkIBMFamilyClass_DEFINED
10 
11 #include "src/sfnt/SkOTTableTypes.h"
12 
13 #pragma pack(push, 1)
14 
15 struct SkIBMFamilyClass {
16     enum class Class : SK_OT_BYTE {
17         NoClassification = 0,
18         OldstyleSerifs = 1,
19         TransitionalSerifs = 2,
20         ModernSerifs = 3,
21         ClarendonSerifs = 4,
22         SlabSerifs = 5,
23         //6 reserved for future use
24         FreeformSerifs = 7,
25         SansSerif = 8,
26         Ornamentals = 9,
27         Scripts = 10,
28         //11 reserved for future use
29         Symbolic = 12,
30         //13-15 reserved for future use
31     } familyClass;
32     union SubClass {
33         enum class OldstyleSerifs : SK_OT_BYTE {
34             NoClassification = 0,
35             IBMRoundedLegibility = 1,
36             Garalde = 2,
37             Venetian = 3,
38             ModifiedVenetian = 4,
39             DutchModern = 5,
40             DutchTraditional = 6,
41             Contemporary = 7,
42             Calligraphic = 8,
43             //9-14 reserved for future use
44             Miscellaneous = 15,
45         } oldstyleSerifs;
46         enum class TransitionalSerifs : SK_OT_BYTE {
47             NoClassification = 0,
48             DirectLine = 1,
49             Script = 2,
50             //3-14 reserved for future use
51             Miscellaneous = 15,
52         } transitionalSerifs;
53         enum class ModernSerifs : SK_OT_BYTE {
54             NoClassification = 0,
55             Italian = 1,
56             Script = 2,
57             //3-14 reserved for future use
58             Miscellaneous = 15,
59         } modernSerifs;
60         enum class ClarendonSerifs : SK_OT_BYTE {
61             NoClassification = 0,
62             Clarendon = 1,
63             Modern = 2,
64             Traditional = 3,
65             Newspaper = 4,
66             StubSerif = 5,
67             Monotone = 6,
68             Typewriter = 7,
69             //8-14 reserved for future use
70             Miscellaneous = 15,
71         } clarendonSerifs;
72         enum class SlabSerifs : SK_OT_BYTE {
73             NoClassification = 0,
74             Monotone = 1,
75             Humanist = 2,
76             Geometric = 3,
77             Swiss = 4,
78             Typewriter = 5,
79             //6-14 reserved for future use
80             Miscellaneous = 15,
81         } slabSerifs;
82         enum class FreeformSerifs : SK_OT_BYTE {
83             NoClassification = 0,
84             Modern = 1,
85             //2-14 reserved for future use
86             Miscellaneous = 15,
87         } freeformSerifs;
88         enum class SansSerif : SK_OT_BYTE {
89             NoClassification = 0,
90             IBMNeoGrotesqueGothic = 1,
91             Humanist = 2,
92             LowXRoundGeometric = 3,
93             HighXRoundGeometric = 4,
94             NeoGrotesqueGothic = 5,
95             ModifiedNeoGrotesqueGothic = 6,
96             //7-8 reserved for future use
97             TypewriterGothic = 9,
98             Matrix = 10,
99             //11-14 reserved for future use
100             Miscellaneous = 15,
101         } sansSerif;
102         enum class Ornamentals : SK_OT_BYTE {
103             NoClassification = 0,
104             Engraver = 1,
105             BlackLetter = 2,
106             Decorative = 3,
107             ThreeDimensional = 4,
108             //5-14 reserved for future use
109             Miscellaneous = 15,
110         } ornamentals;
111         enum class Scripts : SK_OT_BYTE {
112             NoClassification = 0,
113             Uncial = 1,
114             Brush_Joined = 2,
115             Formal_Joined = 3,
116             Monotone_Joined = 4,
117             Calligraphic = 5,
118             Brush_Unjoined = 6,
119             Formal_Unjoined = 7,
120             Monotone_Unjoined = 8,
121             //9-14 reserved for future use
122             Miscellaneous = 15,
123         } scripts;
124         enum class Symbolic : SK_OT_BYTE {
125             NoClassification = 0,
126             //1-2 reserved for future use
127             MixedSerif = 3,
128             //4-5 reserved for future use
129             OldstyleSerif = 6,
130             NeoGrotesqueSansSerif = 7,
131             //8-14 reserved for future use
132             Miscellaneous = 15,
133         } symbolic;
134     } familySubClass;
135 };
136 
137 #pragma pack(pop)
138 
139 
140 static_assert(sizeof(SkIBMFamilyClass) == 2, "sizeof_SkIBMFamilyClass_not_2");
141 
142 #endif
143