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