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
16struct 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
172SK_COMPILE_ASSERT(sizeof(SkIBMFamilyClass) == 2, sizeof_SkIBMFamilyClass_not_2);
173
174#endif
175