Home | History | Annotate | Download | only in sfnt
      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 SkOTTable_OS_2_VA_DEFINED
      9 #define SkOTTable_OS_2_VA_DEFINED
     10 
     11 #include "SkEndian.h"
     12 #include "SkIBMFamilyClass.h"
     13 #include "SkOTTableTypes.h"
     14 #include "SkPanose.h"
     15 
     16 #pragma pack(push, 1)
     17 
     18 //Original V0 TT
     19 struct SkOTTableOS2_VA {
     20     SK_OT_USHORT version;
     21     //SkOTTableOS2_VA::VERSION and SkOTTableOS2_V0::VERSION are both 0.
     22     //The only way to differentiate these two versions is by the size of the table.
     23     static const SK_OT_USHORT VERSION = SkTEndian_SwapBE16(0);
     24 
     25     SK_OT_SHORT xAvgCharWidth;
     26     struct WeightClass {
     27         enum Value : SK_OT_USHORT {
     28             UltraLight = SkTEndian_SwapBE16(1),
     29             ExtraLight = SkTEndian_SwapBE16(2),
     30             Light = SkTEndian_SwapBE16(3),
     31             SemiLight = SkTEndian_SwapBE16(4),
     32             Medium = SkTEndian_SwapBE16(5),
     33             SemiBold = SkTEndian_SwapBE16(6),
     34             Bold = SkTEndian_SwapBE16(7),
     35             ExtraBold = SkTEndian_SwapBE16(8),
     36             UltraBold = SkTEndian_SwapBE16(9),
     37             SK_SEQ_END,
     38         } value;
     39     } usWeightClass;
     40     struct WidthClass {
     41         enum Value : SK_OT_USHORT {
     42             UltraCondensed = SkTEndian_SwapBE16(1),
     43             ExtraCondensed = SkTEndian_SwapBE16(2),
     44             Condensed = SkTEndian_SwapBE16(3),
     45             SemiCondensed = SkTEndian_SwapBE16(4),
     46             Medium = SkTEndian_SwapBE16(5),
     47             SemiExpanded = SkTEndian_SwapBE16(6),
     48             Expanded = SkTEndian_SwapBE16(7),
     49             ExtraExpanded = SkTEndian_SwapBE16(8),
     50             UltraExpanded = SkTEndian_SwapBE16(9),
     51             SK_SEQ_END,
     52         } value;
     53     } usWidthClass;
     54     union Type {
     55         struct Field {
     56             //8-15
     57             SK_OT_BYTE_BITFIELD(
     58                 Reserved08,
     59                 Reserved09,
     60                 Reserved10,
     61                 Reserved11,
     62                 Reserved12,
     63                 Reserved13,
     64                 Reserved14,
     65                 Reserved15)
     66             //0-7
     67             SK_OT_BYTE_BITFIELD(
     68                 Reserved00,
     69                 Restricted,
     70                 PreviewPrint,
     71                 Editable,
     72                 Reserved04,
     73                 Reserved05,
     74                 Reserved06,
     75                 Reserved07)
     76         } field;
     77         struct Raw {
     78             static const SK_OT_USHORT Installable = 0;
     79             static const SK_OT_USHORT RestrictedMask = SkOTSetUSHORTBit<1>::value;
     80             static const SK_OT_USHORT PreviewPrintMask = SkOTSetUSHORTBit<2>::value;
     81             static const SK_OT_USHORT EditableMask = SkOTSetUSHORTBit<3>::value;
     82             SK_OT_USHORT value;
     83         } raw;
     84     } fsType;
     85     SK_OT_SHORT ySubscriptXSize;
     86     SK_OT_SHORT ySubscriptYSize;
     87     SK_OT_SHORT ySubscriptXOffset;
     88     SK_OT_SHORT ySubscriptYOffset;
     89     SK_OT_SHORT ySuperscriptXSize;
     90     SK_OT_SHORT ySuperscriptYSize;
     91     SK_OT_SHORT ySuperscriptXOffset;
     92     SK_OT_SHORT ySuperscriptYOffset;
     93     SK_OT_SHORT yStrikeoutSize;
     94     SK_OT_SHORT yStrikeoutPosition;
     95     SkIBMFamilyClass sFamilyClass;
     96     SkPanose panose;
     97     SK_OT_ULONG ulCharRange[4];
     98     SK_OT_CHAR achVendID[4];
     99     union Selection {
    100         struct Field {
    101             //8-15
    102             SK_OT_BYTE_BITFIELD(
    103                 Reserved08,
    104                 Reserved09,
    105                 Reserved10,
    106                 Reserved11,
    107                 Reserved12,
    108                 Reserved13,
    109                 Reserved14,
    110                 Reserved15)
    111             //0-7
    112             SK_OT_BYTE_BITFIELD(
    113                 Italic,
    114                 Underscore,
    115                 Negative,
    116                 Outlined,
    117                 Strikeout,
    118                 Bold,
    119                 Reserved06,
    120                 Reserved07)
    121         } field;
    122         struct Raw {
    123             static const SK_OT_USHORT ItalicMask = SkOTSetUSHORTBit<0>::value;
    124             static const SK_OT_USHORT UnderscoreMask = SkOTSetUSHORTBit<1>::value;
    125             static const SK_OT_USHORT NegativeMask = SkOTSetUSHORTBit<2>::value;
    126             static const SK_OT_USHORT OutlinedMask = SkOTSetUSHORTBit<3>::value;
    127             static const SK_OT_USHORT StrikeoutMask = SkOTSetUSHORTBit<4>::value;
    128             static const SK_OT_USHORT BoldMask = SkOTSetUSHORTBit<5>::value;
    129             SK_OT_USHORT value;
    130         } raw;
    131     } fsSelection;
    132     SK_OT_USHORT usFirstCharIndex;
    133     SK_OT_USHORT usLastCharIndex;
    134 };
    135 
    136 #pragma pack(pop)
    137 
    138 
    139 static_assert(sizeof(SkOTTableOS2_VA) == 68, "sizeof_SkOTTableOS2_VA_not_68");
    140 
    141 #endif
    142