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