Move FamilyClass and Panose enums to enum class.

The IBMFamilyClass and Panose structures are obvious candidates
for simplification now that it is no longer necessary to nest
enums inside structs to avoid name clashes.

Review-Url: https://codereview.chromium.org/2253543004
diff --git a/src/ports/SkTypeface_win_dw.cpp b/src/ports/SkTypeface_win_dw.cpp
index 09eeb36..348bc9f 100644
--- a/src/ports/SkTypeface_win_dw.cpp
+++ b/src/ports/SkTypeface_win_dw.cpp
@@ -383,14 +383,25 @@
     if (os2Table->version.v0.fsSelection.field.Italic) {
         info->fStyle |= SkAdvancedTypefaceMetrics::kItalic_Style;
     }
-    //Script
-    if (SkPanose::FamilyType::Script == os2Table->version.v0.panose.bFamilyType.value) {
-        info->fStyle |= SkAdvancedTypefaceMetrics::kScript_Style;
     //Serif
-    } else if (SkPanose::FamilyType::TextAndDisplay == os2Table->version.v0.panose.bFamilyType.value &&
-               SkPanose::Data::TextAndDisplay::SerifStyle::Triangle <= os2Table->version.v0.panose.data.textAndDisplay.bSerifStyle.value &&
-               SkPanose::Data::TextAndDisplay::SerifStyle::NoFit != os2Table->version.v0.panose.data.textAndDisplay.bSerifStyle.value) {
-        info->fStyle |= SkAdvancedTypefaceMetrics::kSerif_Style;
+    using SerifStyle = SkPanose::Data::TextAndDisplay::SerifStyle;
+    SerifStyle serifStyle = os2Table->version.v0.panose.data.textAndDisplay.bSerifStyle;
+    if (SkPanose::FamilyType::TextAndDisplay == os2Table->version.v0.panose.bFamilyType) {
+        if (SerifStyle::Cove == serifStyle ||
+            SerifStyle::ObtuseCove == serifStyle ||
+            SerifStyle::SquareCove == serifStyle ||
+            SerifStyle::ObtuseSquareCove == serifStyle ||
+            SerifStyle::Square == serifStyle ||
+            SerifStyle::Thin == serifStyle ||
+            SerifStyle::Bone == serifStyle ||
+            SerifStyle::Exaggerated == serifStyle ||
+            SerifStyle::Triangle == serifStyle)
+        {
+            info->fStyle |= SkAdvancedTypefaceMetrics::kSerif_Style;
+        }
+    //Script
+    } else if (SkPanose::FamilyType::Script == os2Table->version.v0.panose.bFamilyType) {
+        info->fStyle |= SkAdvancedTypefaceMetrics::kScript_Style;
     }
 
     info->fItalicAngle = SkEndian_SwapBE32(postTable->italicAngle) >> 16;
diff --git a/src/sfnt/SkIBMFamilyClass.h b/src/sfnt/SkIBMFamilyClass.h
index 190952b..b95c91e 100644
--- a/src/sfnt/SkIBMFamilyClass.h
+++ b/src/sfnt/SkIBMFamilyClass.h
@@ -13,7 +13,7 @@
 #pragma pack(push, 1)
 
 struct SkIBMFamilyClass {
-    enum Class : SK_OT_BYTE {
+    enum class Class : SK_OT_BYTE {
         NoClassification = 0,
         OldstyleSerifs = 1,
         TransitionalSerifs = 2,
@@ -30,126 +30,106 @@
         //13-15 reserved for future use
     } familyClass;
     union SubClass {
-        struct OldstyleSerifs {
-            enum Value : SK_OT_BYTE {
-                NoClassification = 0,
-                IBMRoundedLegibility = 1,
-                Garalde = 2,
-                Venetian = 3,
-                ModifiedVenetian = 4,
-                DutchModern = 5,
-                DutchTraditional = 6,
-                Contemporary = 7,
-                Calligraphic = 8,
-                //9-14 reserved for future use
-                Miscellaneous = 15,
-            } value;
+        enum class OldstyleSerifs : SK_OT_BYTE {
+            NoClassification = 0,
+            IBMRoundedLegibility = 1,
+            Garalde = 2,
+            Venetian = 3,
+            ModifiedVenetian = 4,
+            DutchModern = 5,
+            DutchTraditional = 6,
+            Contemporary = 7,
+            Calligraphic = 8,
+            //9-14 reserved for future use
+            Miscellaneous = 15,
         } oldstyleSerifs;
-        struct TransitionalSerifs {
-            enum Value : SK_OT_BYTE {
-                NoClassification = 0,
-                DirectLine = 1,
-                Script = 2,
-                //3-14 reserved for future use
-                Miscellaneous = 15,
-            } value;
+        enum class TransitionalSerifs : SK_OT_BYTE {
+            NoClassification = 0,
+            DirectLine = 1,
+            Script = 2,
+            //3-14 reserved for future use
+            Miscellaneous = 15,
         } transitionalSerifs;
-        struct ModernSerifs {
-            enum Value : SK_OT_BYTE {
-                NoClassification = 0,
-                Italian = 1,
-                Script = 2,
-                //3-14 reserved for future use
-                Miscellaneous = 15,
-            } value;
+        enum class ModernSerifs : SK_OT_BYTE {
+            NoClassification = 0,
+            Italian = 1,
+            Script = 2,
+            //3-14 reserved for future use
+            Miscellaneous = 15,
         } modernSerifs;
-        struct ClarendonSerifs {
-            enum Value : SK_OT_BYTE {
-                NoClassification = 0,
-                Clarendon = 1,
-                Modern = 2,
-                Traditional = 3,
-                Newspaper = 4,
-                StubSerif = 5,
-                Monotone = 6,
-                Typewriter = 7,
-                //8-14 reserved for future use
-                Miscellaneous = 15,
-            } value;
+        enum class ClarendonSerifs : SK_OT_BYTE {
+            NoClassification = 0,
+            Clarendon = 1,
+            Modern = 2,
+            Traditional = 3,
+            Newspaper = 4,
+            StubSerif = 5,
+            Monotone = 6,
+            Typewriter = 7,
+            //8-14 reserved for future use
+            Miscellaneous = 15,
         } clarendonSerifs;
-        struct SlabSerifs {
-            enum Value : SK_OT_BYTE {
-                NoClassification = 0,
-                Monotone = 1,
-                Humanist = 2,
-                Geometric = 3,
-                Swiss = 4,
-                Typewriter = 5,
-                //6-14 reserved for future use
-                Miscellaneous = 15,
-            } value;
+        enum class SlabSerifs : SK_OT_BYTE {
+            NoClassification = 0,
+            Monotone = 1,
+            Humanist = 2,
+            Geometric = 3,
+            Swiss = 4,
+            Typewriter = 5,
+            //6-14 reserved for future use
+            Miscellaneous = 15,
         } slabSerifs;
-        struct FreeformSerifs {
-            enum Value : SK_OT_BYTE {
-                NoClassification = 0,
-                Modern = 1,
-                //2-14 reserved for future use
-                Miscellaneous = 15,
-            } value;
+        enum class FreeformSerifs : SK_OT_BYTE {
+            NoClassification = 0,
+            Modern = 1,
+            //2-14 reserved for future use
+            Miscellaneous = 15,
         } freeformSerifs;
-        struct SansSerif {
-            enum Value : SK_OT_BYTE {
-                NoClassification = 0,
-                IBMNeoGrotesqueGothic = 1,
-                Humanist = 2,
-                LowXRoundGeometric = 3,
-                HighXRoundGeometric = 4,
-                NeoGrotesqueGothic = 5,
-                ModifiedNeoGrotesqueGothic = 6,
-                //7-8 reserved for future use
-                TypewriterGothic = 9,
-                Matrix = 10,
-                //11-14 reserved for future use
-                Miscellaneous = 15,
-            } value;
+        enum class SansSerif : SK_OT_BYTE {
+            NoClassification = 0,
+            IBMNeoGrotesqueGothic = 1,
+            Humanist = 2,
+            LowXRoundGeometric = 3,
+            HighXRoundGeometric = 4,
+            NeoGrotesqueGothic = 5,
+            ModifiedNeoGrotesqueGothic = 6,
+            //7-8 reserved for future use
+            TypewriterGothic = 9,
+            Matrix = 10,
+            //11-14 reserved for future use
+            Miscellaneous = 15,
         } sansSerif;
-        struct Ornamentals {
-            enum Value : SK_OT_BYTE {
-                NoClassification = 0,
-                Engraver = 1,
-                BlackLetter = 2,
-                Decorative = 3,
-                ThreeDimensional = 4,
-                //5-14 reserved for future use
-                Miscellaneous = 15,
-            } value;
+        enum class Ornamentals : SK_OT_BYTE {
+            NoClassification = 0,
+            Engraver = 1,
+            BlackLetter = 2,
+            Decorative = 3,
+            ThreeDimensional = 4,
+            //5-14 reserved for future use
+            Miscellaneous = 15,
         } ornamentals;
-        struct Scripts {
-            enum Value : SK_OT_BYTE {
-                NoClassification = 0,
-                Uncial = 1,
-                Brush_Joined = 2,
-                Formal_Joined = 3,
-                Monotone_Joined = 4,
-                Calligraphic = 5,
-                Brush_Unjoined = 6,
-                Formal_Unjoined = 7,
-                Monotone_Unjoined = 8,
-                //9-14 reserved for future use
-                Miscellaneous = 15,
-            } value;
+        enum class Scripts : SK_OT_BYTE {
+            NoClassification = 0,
+            Uncial = 1,
+            Brush_Joined = 2,
+            Formal_Joined = 3,
+            Monotone_Joined = 4,
+            Calligraphic = 5,
+            Brush_Unjoined = 6,
+            Formal_Unjoined = 7,
+            Monotone_Unjoined = 8,
+            //9-14 reserved for future use
+            Miscellaneous = 15,
         } scripts;
-        struct Symbolic {
-            enum Value : SK_OT_BYTE {
-                NoClassification = 0,
-                //1-2 reserved for future use
-                MixedSerif = 3,
-                //4-5 reserved for future use
-                OldstyleSerif = 6,
-                NeoGrotesqueSansSerif = 7,
-                //8-14 reserved for future use
-                Miscellaneous = 15,
-            } value;
+        enum class Symbolic : SK_OT_BYTE {
+            NoClassification = 0,
+            //1-2 reserved for future use
+            MixedSerif = 3,
+            //4-5 reserved for future use
+            OldstyleSerif = 6,
+            NeoGrotesqueSansSerif = 7,
+            //8-14 reserved for future use
+            Miscellaneous = 15,
         } symbolic;
     } familySubClass;
 };
diff --git a/src/sfnt/SkPanose.h b/src/sfnt/SkPanose.h
index 648aec6..e399169 100644
--- a/src/sfnt/SkPanose.h
+++ b/src/sfnt/SkPanose.h
@@ -14,580 +14,506 @@
 
 struct SkPanose {
     //This value changes the meaning of the following 9 bytes.
-    struct FamilyType {
-        enum Value : SK_OT_BYTE {
-            Any = 0,
-            NoFit = 1,
-            TextAndDisplay = 2,
-            Script = 3,
-            Decorative = 4,
-            Pictoral = 5,
-        } value;
+    enum class FamilyType : SK_OT_BYTE {
+        Any = 0,
+        NoFit = 1,
+        TextAndDisplay = 2,
+        Script = 3,
+        Decorative = 4,
+        Pictoral = 5,
     } bFamilyType;
 
     union Data {
         struct TextAndDisplay {
-            struct SerifStyle {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    Cove = 2,
-                    ObtuseCove = 3,
-                    SquareCove = 4,
-                    ObtuseSquareCove = 5,
-                    Square = 6,
-                    Thin = 7,
-                    Bone = 8,
-                    Exaggerated = 9,
-                    Triangle = 10,
-                    NormalSans = 11,
-                    ObtuseSans = 12,
-                    PerpSans = 13,
-                    Flared = 14,
-                    Rounded = 15,
-                } value;
+            enum class SerifStyle : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                Cove = 2,
+                ObtuseCove = 3,
+                SquareCove = 4,
+                ObtuseSquareCove = 5,
+                Square = 6,
+                Thin = 7,
+                Bone = 8,
+                Exaggerated = 9,
+                Triangle = 10,
+                NormalSans = 11,
+                ObtuseSans = 12,
+                PerpSans = 13,
+                Flared = 14,
+                Rounded = 15,
             } bSerifStyle;
 
-            struct Weight {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    VeryLight = 2,
-                    Light = 3,
-                    Thin = 4,
-                    Book = 5,
-                    Medium = 6,
-                    Demi = 7,
-                    Bold = 8,
-                    Heavy = 9,
-                    Black = 10,
-                    ExtraBlack = 11,
-                } value;
+            enum class Weight : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                VeryLight = 2,
+                Light = 3,
+                Thin = 4,
+                Book = 5,
+                Medium = 6,
+                Demi = 7,
+                Bold = 8,
+                Heavy = 9,
+                Black = 10,
+                ExtraBlack = 11,
             } bWeight;
 
-            struct Proportion {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    OldStyle = 2,
-                    Modern = 3,
-                    EvenWidth = 4,
-                    Expanded = 5,
-                    Condensed = 6,
-                    VeryExpanded = 7,
-                    VeryCondensed = 8,
-                    Monospaced = 9,
-                } value;
+            enum class Proportion : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                OldStyle = 2,
+                Modern = 3,
+                EvenWidth = 4,
+                Expanded = 5,
+                Condensed = 6,
+                VeryExpanded = 7,
+                VeryCondensed = 8,
+                Monospaced = 9,
             } bProportion;
 
-            struct Contrast {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    None = 2,
-                    VeryLow = 3,
-                    Low = 4,
-                    MediumLow = 5,
-                    Medium = 6,
-                    MediumHigh = 7,
-                    High = 8,
-                    VeryHigh = 9,
-                } value;
+            enum class Contrast : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                None = 2,
+                VeryLow = 3,
+                Low = 4,
+                MediumLow = 5,
+                Medium = 6,
+                MediumHigh = 7,
+                High = 8,
+                VeryHigh = 9,
             } bContrast;
 
 #ifdef SK_WIN_PANOSE
             //This is what Windows (and FontForge and Apple TT spec) define.
             //The Impact font uses 9.
-            struct StrokeVariation {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    GradualDiagonal = 2,
-                    GradualTransitional = 3,
-                    GradualVertical = 4,
-                    GradualHorizontal = 5,
-                    RapidVertical = 6,
-                    RapidHorizontal = 7,
-                    InstantVertical = 8,
-                } value;
+            enum class StrokeVariation : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                GradualDiagonal = 2,
+                GradualTransitional = 3,
+                GradualVertical = 4,
+                GradualHorizontal = 5,
+                RapidVertical = 6,
+                RapidHorizontal = 7,
+                InstantVertical = 8,
             } bStrokeVariation;
 #else
             //Stroke variation description in OT OS/2 ver0,ver1 is incorrect.
             //This is what HP Panose says.
-            struct StrokeVariation {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    NoVariation = 2,
-                    Gradual_Diagonal = 3,
-                    Gradual_Transitional = 4,
-                    Gradual_Vertical = 5,
-                    Gradual_Horizontal = 6,
-                    Rapid_Vertical = 7,
-                    Rapid_Horizontal = 8,
-                    Instant_Vertical = 9,
-                    Instant_Horizontal = 10,
-                } value;
+            enum class StrokeVariation : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                NoVariation = 2,
+                Gradual_Diagonal = 3,
+                Gradual_Transitional = 4,
+                Gradual_Vertical = 5,
+                Gradual_Horizontal = 6,
+                Rapid_Vertical = 7,
+                Rapid_Horizontal = 8,
+                Instant_Vertical = 9,
+                Instant_Horizontal = 10,
             } bStrokeVariation;
 #endif
 
-            struct ArmStyle {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    StraightArms_Horizontal = 2,
-                    StraightArms_Wedge = 3,
-                    StraightArms_Vertical = 4,
-                    StraightArms_SingleSerif = 5,
-                    StraightArms_DoubleSerif = 6,
-                    NonStraightArms_Horizontal = 7,
-                    NonStraightArms_Wedge = 8,
-                    NonStraightArms_Vertical = 9,
-                    NonStraightArms_SingleSerif = 10,
-                    NonStraightArms_DoubleSerif = 11,
-                } value;
+            enum class ArmStyle : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                StraightArms_Horizontal = 2,
+                StraightArms_Wedge = 3,
+                StraightArms_Vertical = 4,
+                StraightArms_SingleSerif = 5,
+                StraightArms_DoubleSerif = 6,
+                NonStraightArms_Horizontal = 7,
+                NonStraightArms_Wedge = 8,
+                NonStraightArms_Vertical = 9,
+                NonStraightArms_SingleSerif = 10,
+                NonStraightArms_DoubleSerif = 11,
             } bArmStyle;
 
-            struct Letterform {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    Normal_Contact = 2,
-                    Normal_Weighted = 3,
-                    Normal_Boxed = 4,
-                    Normal_Flattened = 5,
-                    Normal_Rounded = 6,
-                    Normal_OffCenter = 7,
-                    Normal_Square = 8,
-                    Oblique_Contact = 9,
-                    Oblique_Weighted = 10,
-                    Oblique_Boxed = 11,
-                    Oblique_Flattened = 12,
-                    Oblique_Rounded = 13,
-                    Oblique_OffCenter = 14,
-                    Oblique_Square = 15,
-                } value;
+            enum class Letterform : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                Normal_Contact = 2,
+                Normal_Weighted = 3,
+                Normal_Boxed = 4,
+                Normal_Flattened = 5,
+                Normal_Rounded = 6,
+                Normal_OffCenter = 7,
+                Normal_Square = 8,
+                Oblique_Contact = 9,
+                Oblique_Weighted = 10,
+                Oblique_Boxed = 11,
+                Oblique_Flattened = 12,
+                Oblique_Rounded = 13,
+                Oblique_OffCenter = 14,
+                Oblique_Square = 15,
             } bLetterform;
 
-            struct Midline {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    Standard_Trimmed = 2,
-                    Standard_Pointed = 3,
-                    Standard_Serifed = 4,
-                    High_Trimmed = 5,
-                    High_Pointed = 6,
-                    High_Serifed = 7,
-                    Constant_Trimmed = 8,
-                    Constant_Pointed = 9,
-                    Constant_Serifed = 10,
-                    Low_Trimmed = 11,
-                    Low_Pointed = 12,
-                    Low_Serifed = 13,
-                } value;
+            enum class Midline : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                Standard_Trimmed = 2,
+                Standard_Pointed = 3,
+                Standard_Serifed = 4,
+                High_Trimmed = 5,
+                High_Pointed = 6,
+                High_Serifed = 7,
+                Constant_Trimmed = 8,
+                Constant_Pointed = 9,
+                Constant_Serifed = 10,
+                Low_Trimmed = 11,
+                Low_Pointed = 12,
+                Low_Serifed = 13,
             } bMidline;
 
-            struct XHeight {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    Constant_Small = 2,
-                    Constant_Standard = 3,
-                    Constant_Large = 4,
-                    Ducking_Small = 5,
-                    Ducking_Standard = 6,
-                    Ducking_Large = 7,
-                } value;
+            enum class XHeight : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                Constant_Small = 2,
+                Constant_Standard = 3,
+                Constant_Large = 4,
+                Ducking_Small = 5,
+                Ducking_Standard = 6,
+                Ducking_Large = 7,
             } bXHeight;
         } textAndDisplay;
 
         struct Script {
-            struct ToolKind {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    FlatNib = 2,
-                    PressurePoint = 3,
-                    Engraved = 4,
-                    Ball = 5,
-                    Brush = 6,
-                    Rough = 7,
-                    FeltPen = 8,
-                    WildBrush = 9,
-                } value;
+            enum class ToolKind : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                FlatNib = 2,
+                PressurePoint = 3,
+                Engraved = 4,
+                Ball = 5,
+                Brush = 6,
+                Rough = 7,
+                FeltPen = 8,
+                WildBrush = 9,
             } bToolKind;
 
-            struct Weight {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    VeryLight = 2,
-                    Light = 3,
-                    Thin = 4,
-                    Book = 5,
-                    Medium = 6,
-                    Demi = 7,
-                    Bold = 8,
-                    Heavy = 9,
-                    Black = 10,
-                    ExtraBlack = 11,
-                } value;
+            enum class Weight : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                VeryLight = 2,
+                Light = 3,
+                Thin = 4,
+                Book = 5,
+                Medium = 6,
+                Demi = 7,
+                Bold = 8,
+                Heavy = 9,
+                Black = 10,
+                ExtraBlack = 11,
             } bWeight;
 
-            struct Spacing {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    ProportionalSpaced = 2,
-                    Monospaced = 3,
-                } value;
+            enum class Spacing : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                ProportionalSpaced = 2,
+                Monospaced = 3,
             } bSpacing;
 
-            struct AspectRatio {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    VeryCondensed = 2,
-                    Condensed = 3,
-                    Normal = 4,
-                    Expanded = 5,
-                    VeryExpanded = 6,
-                } value;
+            enum class AspectRatio : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                VeryCondensed = 2,
+                Condensed = 3,
+                Normal = 4,
+                Expanded = 5,
+                VeryExpanded = 6,
             } bAspectRatio;
 
-            struct Contrast {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    None = 2,
-                    VeryLow = 3,
-                    Low = 4,
-                    MediumLow = 5,
-                    Medium = 6,
-                    MediumHigh = 7,
-                    High = 8,
-                    VeryHigh = 9,
-                } value;
+            enum class Contrast : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                None = 2,
+                VeryLow = 3,
+                Low = 4,
+                MediumLow = 5,
+                Medium = 6,
+                MediumHigh = 7,
+                High = 8,
+                VeryHigh = 9,
             } bContrast;
 
-            struct Topology {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    Roman_Disconnected = 2,
-                    Roman_Trailing = 3,
-                    Roman_Connected = 4,
-                    Cursive_Disconnected = 5,
-                    Cursive_Trailing = 6,
-                    Cursive_Connected = 7,
-                    Blackletter_Disconnected = 8,
-                    Blackletter_Trailing = 9,
-                    Blackletter_Connected = 10,
-                } value;
+            enum class Topology : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                Roman_Disconnected = 2,
+                Roman_Trailing = 3,
+                Roman_Connected = 4,
+                Cursive_Disconnected = 5,
+                Cursive_Trailing = 6,
+                Cursive_Connected = 7,
+                Blackletter_Disconnected = 8,
+                Blackletter_Trailing = 9,
+                Blackletter_Connected = 10,
             } bTopology;
 
-            struct Form {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    Upright_NoWrapping = 2,
-                    Upright_SomeWrapping = 3,
-                    Upright_MoreWrapping = 4,
-                    Upright_ExtremeWrapping = 5,
-                    Oblique_NoWrapping = 6,
-                    Oblique_SomeWrapping = 7,
-                    Oblique_MoreWrapping = 8,
-                    Oblique_ExtremeWrapping = 9,
-                    Exaggerated_NoWrapping = 10,
-                    Exaggerated_SomeWrapping = 11,
-                    Exaggerated_MoreWrapping = 12,
-                    Exaggerated_ExtremeWrapping = 13,
-                } value;
+            enum class Form : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                Upright_NoWrapping = 2,
+                Upright_SomeWrapping = 3,
+                Upright_MoreWrapping = 4,
+                Upright_ExtremeWrapping = 5,
+                Oblique_NoWrapping = 6,
+                Oblique_SomeWrapping = 7,
+                Oblique_MoreWrapping = 8,
+                Oblique_ExtremeWrapping = 9,
+                Exaggerated_NoWrapping = 10,
+                Exaggerated_SomeWrapping = 11,
+                Exaggerated_MoreWrapping = 12,
+                Exaggerated_ExtremeWrapping = 13,
             } bForm;
 
-            struct Finials {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    None_NoLoops = 2,
-                    None_ClosedLoops = 3,
-                    None_OpenLoops = 4,
-                    Sharp_NoLoops = 5,
-                    Sharp_ClosedLoops = 6,
-                    Sharp_OpenLoops = 7,
-                    Tapered_NoLoops = 8,
-                    Tapered_ClosedLoops = 9,
-                    Tapered_OpenLoops = 10,
-                    Round_NoLoops = 11,
-                    Round_ClosedLoops = 12,
-                    Round_OpenLoops = 13,
-                } value;
+            enum class Finials : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                None_NoLoops = 2,
+                None_ClosedLoops = 3,
+                None_OpenLoops = 4,
+                Sharp_NoLoops = 5,
+                Sharp_ClosedLoops = 6,
+                Sharp_OpenLoops = 7,
+                Tapered_NoLoops = 8,
+                Tapered_ClosedLoops = 9,
+                Tapered_OpenLoops = 10,
+                Round_NoLoops = 11,
+                Round_ClosedLoops = 12,
+                Round_OpenLoops = 13,
             } bFinials;
 
-            struct XAscent {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    VeryLow = 2,
-                    Low = 3,
-                    Medium = 4,
-                    High = 5,
-                    VeryHigh = 6,
-                } value;
+            enum class XAscent : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                VeryLow = 2,
+                Low = 3,
+                Medium = 4,
+                High = 5,
+                VeryHigh = 6,
             } bXAscent;
         } script;
 
         struct Decorative {
-            struct Class {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    Derivative = 2,
-                    NonStandard_Topology = 3,
-                    NonStandard_Elements = 4,
-                    NonStandard_Aspect = 5,
-                    Initials = 6,
-                    Cartoon = 7,
-                    PictureStems = 8,
-                    Ornamented = 9,
-                    TextAndBackground = 10,
-                    Collage = 11,
-                    Montage = 12,
-                } value;
+            enum class Class : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                Derivative = 2,
+                NonStandard_Topology = 3,
+                NonStandard_Elements = 4,
+                NonStandard_Aspect = 5,
+                Initials = 6,
+                Cartoon = 7,
+                PictureStems = 8,
+                Ornamented = 9,
+                TextAndBackground = 10,
+                Collage = 11,
+                Montage = 12,
             } bClass;
 
-            struct Weight {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    VeryLight = 2,
-                    Light = 3,
-                    Thin = 4,
-                    Book = 5,
-                    Medium = 6,
-                    Demi = 7,
-                    Bold = 8,
-                    Heavy = 9,
-                    Black = 10,
-                    ExtraBlack = 11,
-                } value;
+            enum class Weight : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                VeryLight = 2,
+                Light = 3,
+                Thin = 4,
+                Book = 5,
+                Medium = 6,
+                Demi = 7,
+                Bold = 8,
+                Heavy = 9,
+                Black = 10,
+                ExtraBlack = 11,
             } bWeight;
 
-            struct Aspect {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    SuperCondensed = 2,
-                    VeryCondensed = 3,
-                    Condensed = 4,
-                    Normal = 5,
-                    Extended = 6,
-                    VeryExtended = 7,
-                    SuperExtended = 8,
-                    Monospaced = 9,
-                } value;
+            enum class Aspect : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                SuperCondensed = 2,
+                VeryCondensed = 3,
+                Condensed = 4,
+                Normal = 5,
+                Extended = 6,
+                VeryExtended = 7,
+                SuperExtended = 8,
+                Monospaced = 9,
             } bAspect;
 
-            struct Contrast {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    None = 2,
-                    VeryLow = 3,
-                    Low = 4,
-                    MediumLow = 5,
-                    Medium = 6,
-                    MediumHigh = 7,
-                    High = 8,
-                    VeryHigh = 9,
-                    HorizontalLow = 10,
-                    HorizontalMedium = 11,
-                    HorizontalHigh = 12,
-                    Broken = 13,
-                } value;
+            enum class Contrast : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                None = 2,
+                VeryLow = 3,
+                Low = 4,
+                MediumLow = 5,
+                Medium = 6,
+                MediumHigh = 7,
+                High = 8,
+                VeryHigh = 9,
+                HorizontalLow = 10,
+                HorizontalMedium = 11,
+                HorizontalHigh = 12,
+                Broken = 13,
             } bContrast;
 
-            struct SerifVariant {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    Cove = 2,
-                    ObtuseCove = 3,
-                    SquareCove = 4,
-                    ObtuseSquareCove = 5,
-                    Square = 6,
-                    Thin = 7,
-                    Oval = 8,
-                    Exaggerated = 9,
-                    Triangle = 10,
-                    NormalSans = 11,
-                    ObtuseSans = 12,
-                    PerpendicularSans = 13,
-                    Flared = 14,
-                    Rounded = 15,
-                    Script = 16,
-                } value;
+            enum class SerifVariant : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                Cove = 2,
+                ObtuseCove = 3,
+                SquareCove = 4,
+                ObtuseSquareCove = 5,
+                Square = 6,
+                Thin = 7,
+                Oval = 8,
+                Exaggerated = 9,
+                Triangle = 10,
+                NormalSans = 11,
+                ObtuseSans = 12,
+                PerpendicularSans = 13,
+                Flared = 14,
+                Rounded = 15,
+                Script = 16,
             } bSerifVariant;
 
-            struct Treatment {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    None_StandardSolidFill = 2,
-                    White_NoFill = 3,
-                    PatternedFill = 4,
-                    ComplexFill = 5,
-                    ShapedFill = 6,
-                    DrawnDistressed = 7,
-                } value;
+            enum class Treatment : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                None_StandardSolidFill = 2,
+                White_NoFill = 3,
+                PatternedFill = 4,
+                ComplexFill = 5,
+                ShapedFill = 6,
+                DrawnDistressed = 7,
             } bTreatment;
 
-            struct Lining {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    None = 2,
-                    Inline = 3,
-                    Outline = 4,
-                    Engraved = 5,
-                    Shadow = 6,
-                    Relief = 7,
-                    Backdrop = 8,
-                } value;
+            enum class Lining : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                None = 2,
+                Inline = 3,
+                Outline = 4,
+                Engraved = 5,
+                Shadow = 6,
+                Relief = 7,
+                Backdrop = 8,
             } bLining;
 
-            struct Topology {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    Standard = 2,
-                    Square = 3,
-                    MultipleSegment = 4,
-                    DecoWacoMidlines = 5,
-                    UnevenWeighting = 6,
-                    DiverseArms = 7,
-                    DiverseForms = 8,
-                    LombardicForms = 9,
-                    UpperCaseInLowerCase = 10,
-                    ImpliedTopology = 11,
-                    HorseshoeEandA = 12,
-                    Cursive = 13,
-                    Blackletter = 14,
-                    SwashVariance = 15,
-                } value;
+            enum class Topology : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                Standard = 2,
+                Square = 3,
+                MultipleSegment = 4,
+                DecoWacoMidlines = 5,
+                UnevenWeighting = 6,
+                DiverseArms = 7,
+                DiverseForms = 8,
+                LombardicForms = 9,
+                UpperCaseInLowerCase = 10,
+                ImpliedTopology = 11,
+                HorseshoeEandA = 12,
+                Cursive = 13,
+                Blackletter = 14,
+                SwashVariance = 15,
             } bTopology;
 
-            struct RangeOfCharacters {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    ExtendedCollection = 2,
-                    Litterals = 3,
-                    NoLowerCase = 4,
-                    SmallCaps = 5,
-                } value;
+            enum class RangeOfCharacters : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                ExtendedCollection = 2,
+                Litterals = 3,
+                NoLowerCase = 4,
+                SmallCaps = 5,
             } bRangeOfCharacters;
         } decorative;
 
         struct Pictoral {
-            struct Kind {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    Montages = 2,
-                    Pictures = 3,
-                    Shapes = 4,
-                    Scientific = 5,
-                    Music = 6,
-                    Expert = 7,
-                    Patterns = 8,
-                    Boarders = 9,
-                    Icons = 10,
-                    Logos = 11,
-                    IndustrySpecific = 12,
-                } value;
+            enum class Kind : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                Montages = 2,
+                Pictures = 3,
+                Shapes = 4,
+                Scientific = 5,
+                Music = 6,
+                Expert = 7,
+                Patterns = 8,
+                Boarders = 9,
+                Icons = 10,
+                Logos = 11,
+                IndustrySpecific = 12,
             } bKind;
 
-            struct Weight {
-                enum Value : SK_OT_BYTE {
-                    NoFit = 1,
-                } value;
+            enum class Weight : SK_OT_BYTE {
+                NoFit = 1,
             } bWeight;
 
-            struct Spacing {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    ProportionalSpaced = 2,
-                    Monospaced = 3,
-                } value;
+            enum class Spacing : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                ProportionalSpaced = 2,
+                Monospaced = 3,
             } bSpacing;
 
-            struct AspectRatioAndContrast {
-                enum Value : SK_OT_BYTE {
-                    NoFit = 1,
-                } value;
+            enum class AspectRatioAndContrast : SK_OT_BYTE {
+                NoFit = 1,
             } bAspectRatioAndContrast;
 
-            struct AspectRatio94 {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    NoWidth = 2,
-                    ExceptionallyWide = 3,
-                    SuperWide = 4,
-                    VeryWide = 5,
-                    Wide = 6,
-                    Normal = 7,
-                    Narrow = 8,
-                    VeryNarrow = 9,
-                } value;
+            enum class AspectRatio94 : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                NoWidth = 2,
+                ExceptionallyWide = 3,
+                SuperWide = 4,
+                VeryWide = 5,
+                Wide = 6,
+                Normal = 7,
+                Narrow = 8,
+                VeryNarrow = 9,
             } bAspectRatio94;
 
-            struct AspectRatio119 {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    NoWidth = 2,
-                    ExceptionallyWide = 3,
-                    SuperWide = 4,
-                    VeryWide = 5,
-                    Wide = 6,
-                    Normal = 7,
-                    Narrow = 8,
-                    VeryNarrow = 9,
-                } value;
+            enum class AspectRatio119 : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                NoWidth = 2,
+                ExceptionallyWide = 3,
+                SuperWide = 4,
+                VeryWide = 5,
+                Wide = 6,
+                Normal = 7,
+                Narrow = 8,
+                VeryNarrow = 9,
             } bAspectRatio119;
 
-             struct AspectRatio157 {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    NoWidth = 2,
-                    ExceptionallyWide = 3,
-                    SuperWide = 4,
-                    VeryWide = 5,
-                    Wide = 6,
-                    Normal = 7,
-                    Narrow = 8,
-                    VeryNarrow = 9,
-                } value;
+             enum class AspectRatio157 : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                NoWidth = 2,
+                ExceptionallyWide = 3,
+                SuperWide = 4,
+                VeryWide = 5,
+                Wide = 6,
+                Normal = 7,
+                Narrow = 8,
+                VeryNarrow = 9,
             } bAspectRatio157;
 
-            struct AspectRatio163 {
-                enum Value : SK_OT_BYTE {
-                    Any = 0,
-                    NoFit = 1,
-                    NoWidth = 2,
-                    ExceptionallyWide = 3,
-                    SuperWide = 4,
-                    VeryWide = 5,
-                    Wide = 6,
-                    Normal = 7,
-                    Narrow = 8,
-                    VeryNarrow = 9,
-                } value;
+            enum class AspectRatio163 : SK_OT_BYTE {
+                Any = 0,
+                NoFit = 1,
+                NoWidth = 2,
+                ExceptionallyWide = 3,
+                SuperWide = 4,
+                VeryWide = 5,
+                Wide = 6,
+                Normal = 7,
+                Narrow = 8,
+                VeryNarrow = 9,
             } bAspectRatio163;
         } pictoral;
     } data;