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
13#pragma pack(push, 1)
14
15struct 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
140static_assert(sizeof(SkIBMFamilyClass) == 2, "sizeof_SkIBMFamilyClass_not_2");
141
142#endif
143