/*
* 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"
#pragma pack(push, 1)
struct SkPanose {
//This value changes the meaning of the following 9 bytes.
enum class FamilyType : SK_OT_BYTE {
Any = 0,
NoFit = 1,
TextAndDisplay = 2,
Script = 3,
Decorative = 4,
Pictoral = 5,
} bFamilyType;
union Data {
struct TextAndDisplay {
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;
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;
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;
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.
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.
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
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;
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;
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;
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 {
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;
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;
enum class Spacing : SK_OT_BYTE {
Any = 0,
NoFit = 1,
ProportionalSpaced = 2,
Monospaced = 3,
} bSpacing;
enum class AspectRatio : SK_OT_BYTE {
Any = 0,
NoFit = 1,
VeryCondensed = 2,
Condensed = 3,
Normal = 4,
Expanded = 5,
VeryExpanded = 6,
} bAspectRatio;
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;
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;
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;
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;
enum class XAscent : SK_OT_BYTE {
Any = 0,
NoFit = 1,
VeryLow = 2,
Low = 3,
Medium = 4,
High = 5,
VeryHigh = 6,
} bXAscent;
} script;
struct Decorative {
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;
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;
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;
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;
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;
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;
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;
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;
enum class RangeOfCharacters : SK_OT_BYTE {
Any = 0,
NoFit = 1,
ExtendedCollection = 2,
Litterals = 3,
NoLowerCase = 4,
SmallCaps = 5,
} bRangeOfCharacters;
} decorative;
struct Pictoral {
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;
enum class Weight : SK_OT_BYTE {
NoFit = 1,
} bWeight;
enum class Spacing : SK_OT_BYTE {
Any = 0,
NoFit = 1,
ProportionalSpaced = 2,
Monospaced = 3,
} bSpacing;
enum class AspectRatioAndContrast : SK_OT_BYTE {
NoFit = 1,
} bAspectRatioAndContrast;
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;
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;
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;
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;
};
#pragma pack(pop)
static_assert(sizeof(SkPanose) == 10, "sizeof_SkPanose_not_10");
#endif