/*
* Copyright 2012 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkPanose_DEFINED
#define SkPanose_DEFINED
#include "SkOTTableTypes.h"
#include "SkTypedEnum.h"
#pragma pack(push, 1)
struct SkPanose {
//This value changes the meaning of the following 9 bytes.
struct FamilyType {
SK_TYPED_ENUM(Value, SK_OT_BYTE,
((Any, 0))
((NoFit, 1))
((TextAndDisplay, 2))
((Script, 3))
((Decorative, 4))
((Pictoral, 5))
SK_SEQ_END,
(value)SK_SEQ_END)
} bFamilyType;
union Data {
struct TextAndDisplay {
struct SerifStyle {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bSerifStyle;
struct Weight {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bWeight;
struct Proportion {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bProportion;
struct Contrast {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bContrast;
#ifdef SK_WIN_PANOSE
//This is what Windows (and FontForge and Apple TT spec) define.
//The Impact font uses 9.
struct StrokeVariation {
SK_TYPED_ENUM(Value, SK_OT_BYTE,
((Any, 0))
((NoFit, 1))
((GradualDiagonal, 2))
((GradualTransitional, 3))
((GradualVertical, 4))
((GradualHorizontal, 5))
((RapidVertical, 6))
((RapidHorizontal, 7))
((InstantVertical, 8))
SK_SEQ_END,
(value)SK_SEQ_END)
} bStrokeVariation;
#else
//Stroke variation description in OT OS/2 ver0,ver1 is incorrect.
//This is what HP Panose says.
struct StrokeVariation {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bStrokeVariation;
#endif
struct ArmStyle {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bArmStyle;
struct Letterform {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bLetterform;
struct Midline {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bMidline;
struct XHeight {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bXHeight;
} textAndDisplay;
struct Script {
struct ToolKind {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bToolKind;
struct Weight {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bWeight;
struct Spacing {
SK_TYPED_ENUM(Value, SK_OT_BYTE,
((Any, 0))
((NoFit, 1))
((ProportionalSpaced, 2))
((Monospaced, 3))
SK_SEQ_END,
(value)SK_SEQ_END)
} bSpacing;
struct AspectRatio {
SK_TYPED_ENUM(Value, SK_OT_BYTE,
((Any, 0))
((NoFit, 1))
((VeryCondensed, 2))
((Condensed, 3))
((Normal, 4))
((Expanded, 5))
((VeryExpanded, 6))
SK_SEQ_END,
(value)SK_SEQ_END)
} bAspectRatio;
struct Contrast {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bContrast;
struct Topology {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bTopology;
struct Form {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bForm;
struct Finials {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bFinials;
struct XAscent {
SK_TYPED_ENUM(Value, SK_OT_BYTE,
((Any, 0))
((NoFit, 1))
((VeryLow, 2))
((Low, 3))
((Medium, 4))
((High, 5))
((VeryHigh, 6))
SK_SEQ_END,
(value)SK_SEQ_END)
} bXAscent;
} script;
struct Decorative {
struct Class {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bClass;
struct Weight {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bWeight;
struct Aspect {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bAspect;
struct Contrast {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bContrast;
struct SerifVariant {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bSerifVariant;
struct Treatment {
SK_TYPED_ENUM(Value, SK_OT_BYTE,
((Any, 0))
((NoFit, 1))
((None_StandardSolidFill, 2))
((White_NoFill, 3))
((PatternedFill, 4))
((ComplexFill, 5))
((ShapedFill, 6))
((DrawnDistressed, 7))
SK_SEQ_END,
(value)SK_SEQ_END)
} bTreatment;
struct Lining {
SK_TYPED_ENUM(Value, SK_OT_BYTE,
((Any, 0))
((NoFit, 1))
((None, 2))
((Inline, 3))
((Outline, 4))
((Engraved, 5))
((Shadow, 6))
((Relief, 7))
((Backdrop, 8))
SK_SEQ_END,
(value)SK_SEQ_END)
} bLining;
struct Topology {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bTopology;
struct RangeOfCharacters {
SK_TYPED_ENUM(Value, SK_OT_BYTE,
((Any, 0))
((NoFit, 1))
((ExtendedCollection, 2))
((Litterals, 3))
((NoLowerCase, 4))
((SmallCaps, 5))
SK_SEQ_END,
(value)SK_SEQ_END)
} bRangeOfCharacters;
} decorative;
struct Pictoral {
struct Kind {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bKind;
struct Weight {
SK_TYPED_ENUM(Value, SK_OT_BYTE,
((NoFit, 1))
SK_SEQ_END,
(value)SK_SEQ_END)
} bWeight;
struct Spacing {
SK_TYPED_ENUM(Value, SK_OT_BYTE,
((Any, 0))
((NoFit, 1))
((ProportionalSpaced, 2))
((Monospaced, 3))
SK_SEQ_END,
(value)SK_SEQ_END)
} bSpacing;
struct AspectRatioAndContrast {
SK_TYPED_ENUM(Value, SK_OT_BYTE,
((NoFit, 1))
SK_SEQ_END,
(value)SK_SEQ_END)
} bAspectRatioAndContrast;
struct AspectRatio94 {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bAspectRatio94;
struct AspectRatio119 {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bAspectRatio119;
struct AspectRatio157 {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bAspectRatio157;
struct AspectRatio163 {
SK_TYPED_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))
SK_SEQ_END,
(value)SK_SEQ_END)
} bAspectRatio163;
} pictoral;
} data;
};
#pragma pack(pop)
SK_COMPILE_ASSERT(sizeof(SkPanose) == 10, sizeof_SkPanose_not_10);
#endif