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 SkPanose_DEFINED
      9 #define SkPanose_DEFINED
     10 
     11 #include "SkOTTableTypes.h"
     12 
     13 #pragma pack(push, 1)
     14 
     15 struct SkPanose {
     16     //This value changes the meaning of the following 9 bytes.
     17     enum class FamilyType : SK_OT_BYTE {
     18         Any = 0,
     19         NoFit = 1,
     20         TextAndDisplay = 2,
     21         Script = 3,
     22         Decorative = 4,
     23         Pictoral = 5,
     24     } bFamilyType;
     25 
     26     union Data {
     27         struct TextAndDisplay {
     28             enum class SerifStyle : SK_OT_BYTE {
     29                 Any = 0,
     30                 NoFit = 1,
     31                 Cove = 2,
     32                 ObtuseCove = 3,
     33                 SquareCove = 4,
     34                 ObtuseSquareCove = 5,
     35                 Square = 6,
     36                 Thin = 7,
     37                 Bone = 8,
     38                 Exaggerated = 9,
     39                 Triangle = 10,
     40                 NormalSans = 11,
     41                 ObtuseSans = 12,
     42                 PerpSans = 13,
     43                 Flared = 14,
     44                 Rounded = 15,
     45             } bSerifStyle;
     46 
     47             enum class Weight : SK_OT_BYTE {
     48                 Any = 0,
     49                 NoFit = 1,
     50                 VeryLight = 2,
     51                 Light = 3,
     52                 Thin = 4,
     53                 Book = 5,
     54                 Medium = 6,
     55                 Demi = 7,
     56                 Bold = 8,
     57                 Heavy = 9,
     58                 Black = 10,
     59                 ExtraBlack = 11,
     60             } bWeight;
     61 
     62             enum class Proportion : SK_OT_BYTE {
     63                 Any = 0,
     64                 NoFit = 1,
     65                 OldStyle = 2,
     66                 Modern = 3,
     67                 EvenWidth = 4,
     68                 Expanded = 5,
     69                 Condensed = 6,
     70                 VeryExpanded = 7,
     71                 VeryCondensed = 8,
     72                 Monospaced = 9,
     73             } bProportion;
     74 
     75             enum class Contrast : SK_OT_BYTE {
     76                 Any = 0,
     77                 NoFit = 1,
     78                 None = 2,
     79                 VeryLow = 3,
     80                 Low = 4,
     81                 MediumLow = 5,
     82                 Medium = 6,
     83                 MediumHigh = 7,
     84                 High = 8,
     85                 VeryHigh = 9,
     86             } bContrast;
     87 
     88 #ifdef SK_WIN_PANOSE
     89             //This is what Windows (and FontForge and Apple TT spec) define.
     90             //The Impact font uses 9.
     91             enum class StrokeVariation : SK_OT_BYTE {
     92                 Any = 0,
     93                 NoFit = 1,
     94                 GradualDiagonal = 2,
     95                 GradualTransitional = 3,
     96                 GradualVertical = 4,
     97                 GradualHorizontal = 5,
     98                 RapidVertical = 6,
     99                 RapidHorizontal = 7,
    100                 InstantVertical = 8,
    101             } bStrokeVariation;
    102 #else
    103             //Stroke variation description in OT OS/2 ver0,ver1 is incorrect.
    104             //This is what HP Panose says.
    105             enum class StrokeVariation : SK_OT_BYTE {
    106                 Any = 0,
    107                 NoFit = 1,
    108                 NoVariation = 2,
    109                 Gradual_Diagonal = 3,
    110                 Gradual_Transitional = 4,
    111                 Gradual_Vertical = 5,
    112                 Gradual_Horizontal = 6,
    113                 Rapid_Vertical = 7,
    114                 Rapid_Horizontal = 8,
    115                 Instant_Vertical = 9,
    116                 Instant_Horizontal = 10,
    117             } bStrokeVariation;
    118 #endif
    119 
    120             enum class ArmStyle : SK_OT_BYTE {
    121                 Any = 0,
    122                 NoFit = 1,
    123                 StraightArms_Horizontal = 2,
    124                 StraightArms_Wedge = 3,
    125                 StraightArms_Vertical = 4,
    126                 StraightArms_SingleSerif = 5,
    127                 StraightArms_DoubleSerif = 6,
    128                 NonStraightArms_Horizontal = 7,
    129                 NonStraightArms_Wedge = 8,
    130                 NonStraightArms_Vertical = 9,
    131                 NonStraightArms_SingleSerif = 10,
    132                 NonStraightArms_DoubleSerif = 11,
    133             } bArmStyle;
    134 
    135             enum class Letterform : SK_OT_BYTE {
    136                 Any = 0,
    137                 NoFit = 1,
    138                 Normal_Contact = 2,
    139                 Normal_Weighted = 3,
    140                 Normal_Boxed = 4,
    141                 Normal_Flattened = 5,
    142                 Normal_Rounded = 6,
    143                 Normal_OffCenter = 7,
    144                 Normal_Square = 8,
    145                 Oblique_Contact = 9,
    146                 Oblique_Weighted = 10,
    147                 Oblique_Boxed = 11,
    148                 Oblique_Flattened = 12,
    149                 Oblique_Rounded = 13,
    150                 Oblique_OffCenter = 14,
    151                 Oblique_Square = 15,
    152             } bLetterform;
    153 
    154             enum class Midline : SK_OT_BYTE {
    155                 Any = 0,
    156                 NoFit = 1,
    157                 Standard_Trimmed = 2,
    158                 Standard_Pointed = 3,
    159                 Standard_Serifed = 4,
    160                 High_Trimmed = 5,
    161                 High_Pointed = 6,
    162                 High_Serifed = 7,
    163                 Constant_Trimmed = 8,
    164                 Constant_Pointed = 9,
    165                 Constant_Serifed = 10,
    166                 Low_Trimmed = 11,
    167                 Low_Pointed = 12,
    168                 Low_Serifed = 13,
    169             } bMidline;
    170 
    171             enum class XHeight : SK_OT_BYTE {
    172                 Any = 0,
    173                 NoFit = 1,
    174                 Constant_Small = 2,
    175                 Constant_Standard = 3,
    176                 Constant_Large = 4,
    177                 Ducking_Small = 5,
    178                 Ducking_Standard = 6,
    179                 Ducking_Large = 7,
    180             } bXHeight;
    181         } textAndDisplay;
    182 
    183         struct Script {
    184             enum class ToolKind : SK_OT_BYTE {
    185                 Any = 0,
    186                 NoFit = 1,
    187                 FlatNib = 2,
    188                 PressurePoint = 3,
    189                 Engraved = 4,
    190                 Ball = 5,
    191                 Brush = 6,
    192                 Rough = 7,
    193                 FeltPen = 8,
    194                 WildBrush = 9,
    195             } bToolKind;
    196 
    197             enum class Weight : SK_OT_BYTE {
    198                 Any = 0,
    199                 NoFit = 1,
    200                 VeryLight = 2,
    201                 Light = 3,
    202                 Thin = 4,
    203                 Book = 5,
    204                 Medium = 6,
    205                 Demi = 7,
    206                 Bold = 8,
    207                 Heavy = 9,
    208                 Black = 10,
    209                 ExtraBlack = 11,
    210             } bWeight;
    211 
    212             enum class Spacing : SK_OT_BYTE {
    213                 Any = 0,
    214                 NoFit = 1,
    215                 ProportionalSpaced = 2,
    216                 Monospaced = 3,
    217             } bSpacing;
    218 
    219             enum class AspectRatio : SK_OT_BYTE {
    220                 Any = 0,
    221                 NoFit = 1,
    222                 VeryCondensed = 2,
    223                 Condensed = 3,
    224                 Normal = 4,
    225                 Expanded = 5,
    226                 VeryExpanded = 6,
    227             } bAspectRatio;
    228 
    229             enum class Contrast : SK_OT_BYTE {
    230                 Any = 0,
    231                 NoFit = 1,
    232                 None = 2,
    233                 VeryLow = 3,
    234                 Low = 4,
    235                 MediumLow = 5,
    236                 Medium = 6,
    237                 MediumHigh = 7,
    238                 High = 8,
    239                 VeryHigh = 9,
    240             } bContrast;
    241 
    242             enum class Topology : SK_OT_BYTE {
    243                 Any = 0,
    244                 NoFit = 1,
    245                 Roman_Disconnected = 2,
    246                 Roman_Trailing = 3,
    247                 Roman_Connected = 4,
    248                 Cursive_Disconnected = 5,
    249                 Cursive_Trailing = 6,
    250                 Cursive_Connected = 7,
    251                 Blackletter_Disconnected = 8,
    252                 Blackletter_Trailing = 9,
    253                 Blackletter_Connected = 10,
    254             } bTopology;
    255 
    256             enum class Form : SK_OT_BYTE {
    257                 Any = 0,
    258                 NoFit = 1,
    259                 Upright_NoWrapping = 2,
    260                 Upright_SomeWrapping = 3,
    261                 Upright_MoreWrapping = 4,
    262                 Upright_ExtremeWrapping = 5,
    263                 Oblique_NoWrapping = 6,
    264                 Oblique_SomeWrapping = 7,
    265                 Oblique_MoreWrapping = 8,
    266                 Oblique_ExtremeWrapping = 9,
    267                 Exaggerated_NoWrapping = 10,
    268                 Exaggerated_SomeWrapping = 11,
    269                 Exaggerated_MoreWrapping = 12,
    270                 Exaggerated_ExtremeWrapping = 13,
    271             } bForm;
    272 
    273             enum class Finials : SK_OT_BYTE {
    274                 Any = 0,
    275                 NoFit = 1,
    276                 None_NoLoops = 2,
    277                 None_ClosedLoops = 3,
    278                 None_OpenLoops = 4,
    279                 Sharp_NoLoops = 5,
    280                 Sharp_ClosedLoops = 6,
    281                 Sharp_OpenLoops = 7,
    282                 Tapered_NoLoops = 8,
    283                 Tapered_ClosedLoops = 9,
    284                 Tapered_OpenLoops = 10,
    285                 Round_NoLoops = 11,
    286                 Round_ClosedLoops = 12,
    287                 Round_OpenLoops = 13,
    288             } bFinials;
    289 
    290             enum class XAscent : SK_OT_BYTE {
    291                 Any = 0,
    292                 NoFit = 1,
    293                 VeryLow = 2,
    294                 Low = 3,
    295                 Medium = 4,
    296                 High = 5,
    297                 VeryHigh = 6,
    298             } bXAscent;
    299         } script;
    300 
    301         struct Decorative {
    302             enum class Class : SK_OT_BYTE {
    303                 Any = 0,
    304                 NoFit = 1,
    305                 Derivative = 2,
    306                 NonStandard_Topology = 3,
    307                 NonStandard_Elements = 4,
    308                 NonStandard_Aspect = 5,
    309                 Initials = 6,
    310                 Cartoon = 7,
    311                 PictureStems = 8,
    312                 Ornamented = 9,
    313                 TextAndBackground = 10,
    314                 Collage = 11,
    315                 Montage = 12,
    316             } bClass;
    317 
    318             enum class Weight : SK_OT_BYTE {
    319                 Any = 0,
    320                 NoFit = 1,
    321                 VeryLight = 2,
    322                 Light = 3,
    323                 Thin = 4,
    324                 Book = 5,
    325                 Medium = 6,
    326                 Demi = 7,
    327                 Bold = 8,
    328                 Heavy = 9,
    329                 Black = 10,
    330                 ExtraBlack = 11,
    331             } bWeight;
    332 
    333             enum class Aspect : SK_OT_BYTE {
    334                 Any = 0,
    335                 NoFit = 1,
    336                 SuperCondensed = 2,
    337                 VeryCondensed = 3,
    338                 Condensed = 4,
    339                 Normal = 5,
    340                 Extended = 6,
    341                 VeryExtended = 7,
    342                 SuperExtended = 8,
    343                 Monospaced = 9,
    344             } bAspect;
    345 
    346             enum class Contrast : SK_OT_BYTE {
    347                 Any = 0,
    348                 NoFit = 1,
    349                 None = 2,
    350                 VeryLow = 3,
    351                 Low = 4,
    352                 MediumLow = 5,
    353                 Medium = 6,
    354                 MediumHigh = 7,
    355                 High = 8,
    356                 VeryHigh = 9,
    357                 HorizontalLow = 10,
    358                 HorizontalMedium = 11,
    359                 HorizontalHigh = 12,
    360                 Broken = 13,
    361             } bContrast;
    362 
    363             enum class SerifVariant : SK_OT_BYTE {
    364                 Any = 0,
    365                 NoFit = 1,
    366                 Cove = 2,
    367                 ObtuseCove = 3,
    368                 SquareCove = 4,
    369                 ObtuseSquareCove = 5,
    370                 Square = 6,
    371                 Thin = 7,
    372                 Oval = 8,
    373                 Exaggerated = 9,
    374                 Triangle = 10,
    375                 NormalSans = 11,
    376                 ObtuseSans = 12,
    377                 PerpendicularSans = 13,
    378                 Flared = 14,
    379                 Rounded = 15,
    380                 Script = 16,
    381             } bSerifVariant;
    382 
    383             enum class Treatment : SK_OT_BYTE {
    384                 Any = 0,
    385                 NoFit = 1,
    386                 None_StandardSolidFill = 2,
    387                 White_NoFill = 3,
    388                 PatternedFill = 4,
    389                 ComplexFill = 5,
    390                 ShapedFill = 6,
    391                 DrawnDistressed = 7,
    392             } bTreatment;
    393 
    394             enum class Lining : SK_OT_BYTE {
    395                 Any = 0,
    396                 NoFit = 1,
    397                 None = 2,
    398                 Inline = 3,
    399                 Outline = 4,
    400                 Engraved = 5,
    401                 Shadow = 6,
    402                 Relief = 7,
    403                 Backdrop = 8,
    404             } bLining;
    405 
    406             enum class Topology : SK_OT_BYTE {
    407                 Any = 0,
    408                 NoFit = 1,
    409                 Standard = 2,
    410                 Square = 3,
    411                 MultipleSegment = 4,
    412                 DecoWacoMidlines = 5,
    413                 UnevenWeighting = 6,
    414                 DiverseArms = 7,
    415                 DiverseForms = 8,
    416                 LombardicForms = 9,
    417                 UpperCaseInLowerCase = 10,
    418                 ImpliedTopology = 11,
    419                 HorseshoeEandA = 12,
    420                 Cursive = 13,
    421                 Blackletter = 14,
    422                 SwashVariance = 15,
    423             } bTopology;
    424 
    425             enum class RangeOfCharacters : SK_OT_BYTE {
    426                 Any = 0,
    427                 NoFit = 1,
    428                 ExtendedCollection = 2,
    429                 Litterals = 3,
    430                 NoLowerCase = 4,
    431                 SmallCaps = 5,
    432             } bRangeOfCharacters;
    433         } decorative;
    434 
    435         struct Pictoral {
    436             enum class Kind : SK_OT_BYTE {
    437                 Any = 0,
    438                 NoFit = 1,
    439                 Montages = 2,
    440                 Pictures = 3,
    441                 Shapes = 4,
    442                 Scientific = 5,
    443                 Music = 6,
    444                 Expert = 7,
    445                 Patterns = 8,
    446                 Boarders = 9,
    447                 Icons = 10,
    448                 Logos = 11,
    449                 IndustrySpecific = 12,
    450             } bKind;
    451 
    452             enum class Weight : SK_OT_BYTE {
    453                 NoFit = 1,
    454             } bWeight;
    455 
    456             enum class Spacing : SK_OT_BYTE {
    457                 Any = 0,
    458                 NoFit = 1,
    459                 ProportionalSpaced = 2,
    460                 Monospaced = 3,
    461             } bSpacing;
    462 
    463             enum class AspectRatioAndContrast : SK_OT_BYTE {
    464                 NoFit = 1,
    465             } bAspectRatioAndContrast;
    466 
    467             enum class AspectRatio94 : SK_OT_BYTE {
    468                 Any = 0,
    469                 NoFit = 1,
    470                 NoWidth = 2,
    471                 ExceptionallyWide = 3,
    472                 SuperWide = 4,
    473                 VeryWide = 5,
    474                 Wide = 6,
    475                 Normal = 7,
    476                 Narrow = 8,
    477                 VeryNarrow = 9,
    478             } bAspectRatio94;
    479 
    480             enum class AspectRatio119 : SK_OT_BYTE {
    481                 Any = 0,
    482                 NoFit = 1,
    483                 NoWidth = 2,
    484                 ExceptionallyWide = 3,
    485                 SuperWide = 4,
    486                 VeryWide = 5,
    487                 Wide = 6,
    488                 Normal = 7,
    489                 Narrow = 8,
    490                 VeryNarrow = 9,
    491             } bAspectRatio119;
    492 
    493              enum class AspectRatio157 : SK_OT_BYTE {
    494                 Any = 0,
    495                 NoFit = 1,
    496                 NoWidth = 2,
    497                 ExceptionallyWide = 3,
    498                 SuperWide = 4,
    499                 VeryWide = 5,
    500                 Wide = 6,
    501                 Normal = 7,
    502                 Narrow = 8,
    503                 VeryNarrow = 9,
    504             } bAspectRatio157;
    505 
    506             enum class AspectRatio163 : SK_OT_BYTE {
    507                 Any = 0,
    508                 NoFit = 1,
    509                 NoWidth = 2,
    510                 ExceptionallyWide = 3,
    511                 SuperWide = 4,
    512                 VeryWide = 5,
    513                 Wide = 6,
    514                 Normal = 7,
    515                 Narrow = 8,
    516                 VeryNarrow = 9,
    517             } bAspectRatio163;
    518         } pictoral;
    519     } data;
    520 };
    521 
    522 #pragma pack(pop)
    523 
    524 
    525 static_assert(sizeof(SkPanose) == 10, "sizeof_SkPanose_not_10");
    526 
    527 #endif
    528