1f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com/* 2f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com * Copyright 2012 Google Inc. 3f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com * 4f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com * Use of this source code is governed by a BSD-style license that can be 5f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com * found in the LICENSE file. 6f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com */ 7f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com 8f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#ifndef SkOTTable_OS_2_V0_DEFINED 9f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#define SkOTTable_OS_2_V0_DEFINED 10f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com 11f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#include "SkEndian.h" 12f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#include "SkIBMFamilyClass.h" 13f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#include "SkOTTableTypes.h" 14f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#include "SkPanose.h" 15f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#include "SkTypedEnum.h" 16f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com 17f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#pragma pack(push, 1) 18f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com 19f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.comstruct SkOTTableOS2_V0 { 20f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_USHORT version; 21a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com //SkOTTableOS2_VA::VERSION and SkOTTableOS2_V0::VERSION are both 0. 22a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com //The only way to differentiate these two versions is by the size of the table. 23a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com static const SK_OT_USHORT VERSION = SkTEndian_SwapBE16(0); 24b0a327e9390da5865d4c56db5e5259adc3380d37skia.committer@gmail.com 25f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT xAvgCharWidth; 26f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com struct WeightClass { 27f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_TYPED_ENUM(Value, SK_OT_USHORT, 28f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((Thin, SkTEndian_SwapBE16(100))) 29f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((ExtraLight, SkTEndian_SwapBE16(200))) 30f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((Light, SkTEndian_SwapBE16(300))) 31f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((Normal, SkTEndian_SwapBE16(400))) 32f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((Medium, SkTEndian_SwapBE16(500))) 33f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((SemiBold, SkTEndian_SwapBE16(600))) 34f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((Bold, SkTEndian_SwapBE16(700))) 35f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((ExtraBold, SkTEndian_SwapBE16(800))) 36f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((Black, SkTEndian_SwapBE16(900))) 37f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_SEQ_END, 38f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_SEQ_END) 39f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_USHORT value; 40f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com } usWeightClass; 41f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com struct WidthClass { 42f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_TYPED_ENUM(Value, SK_OT_USHORT, 43f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((UltraCondensed, SkTEndian_SwapBE16(1))) 44f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((ExtraCondensed, SkTEndian_SwapBE16(2))) 45f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((Condensed, SkTEndian_SwapBE16(3))) 46f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((SemiCondensed, SkTEndian_SwapBE16(4))) 47f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((Medium, SkTEndian_SwapBE16(5))) 48f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((SemiExpanded, SkTEndian_SwapBE16(6))) 49f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((Expanded, SkTEndian_SwapBE16(7))) 50f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((ExtraExpanded, SkTEndian_SwapBE16(8))) 51f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com ((UltraExpanded, SkTEndian_SwapBE16(9))) 52f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_SEQ_END, 53f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com (value)SK_SEQ_END) 54f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com } usWidthClass; 55f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com union Type { 56f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com struct Field { 57f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com //8-15 58f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_BYTE_BITFIELD( 59f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved08, 60f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved09, 61f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved10, 62f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved11, 63f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved12, 64f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved13, 65f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved14, 66f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved15) 67f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com //0-7 68f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_BYTE_BITFIELD( 69f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved00, 70f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Restricted, 71f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com PreviewPrint, 72f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Editable, 73f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved04, 74f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved05, 75f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved06, 76f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved07) 77f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com } field; 78f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com struct Raw { 79562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com static const SK_OT_USHORT Installable = 0; 80562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com static const SK_OT_USHORT RestrictedMask = SkOTSetUSHORTBit<1>::value; 81562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com static const SK_OT_USHORT PreviewPrintMask = SkOTSetUSHORTBit<2>::value; 82562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com static const SK_OT_USHORT EditableMask = SkOTSetUSHORTBit<3>::value; 83f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_USHORT value; 84f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com } raw; 85f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com } fsType; 86f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT ySubscriptXSize; 87f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT ySubscriptYSize; 88f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT ySubscriptXOffset; 89f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT ySubscriptYOffset; 90f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT ySuperscriptXSize; 91f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT ySuperscriptYSize; 92f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT ySuperscriptXOffset; 93f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT ySuperscriptYOffset; 94f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT yStrikeoutSize; 95f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT yStrikeoutPosition; 96f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SkIBMFamilyClass sFamilyClass; 97f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SkPanose panose; 98f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_ULONG ulCharRange[4]; 99f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_CHAR achVendID[4]; 100f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com union Selection { 101f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com struct Field { 102f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com //8-15 103f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_BYTE_BITFIELD( 104f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved08, 105f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved09, 106f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved10, 107f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved11, 108f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved12, 109f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved13, 110f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved14, 111f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved15) 112f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com //0-7 113f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_BYTE_BITFIELD( 114f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Italic, 115f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Underscore, 116f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Negative, 117f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Outlined, 118f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Strikeout, 119f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Bold, 120f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Regular, 121f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com Reserved07) 122f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com } field; 123f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com struct Raw { 124562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com static const SK_OT_USHORT ItalicMask = SkOTSetUSHORTBit<0>::value; 125562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com static const SK_OT_USHORT UnderscoreMask = SkOTSetUSHORTBit<1>::value; 126562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com static const SK_OT_USHORT NegativeMask = SkOTSetUSHORTBit<2>::value; 127562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com static const SK_OT_USHORT OutlinedMask = SkOTSetUSHORTBit<3>::value; 128562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com static const SK_OT_USHORT StrikeoutMask = SkOTSetUSHORTBit<4>::value; 129562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com static const SK_OT_USHORT BoldMask = SkOTSetUSHORTBit<5>::value; 130562b2e67a29f24db4c258aa2fa59cd7b4ee15174bungeman@google.com static const SK_OT_USHORT RegularMask = SkOTSetUSHORTBit<6>::value; 131f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_USHORT value; 132f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com } raw; 133f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com } fsSelection; 134f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_USHORT usFirstCharIndex; 135f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_USHORT usLastCharIndex; 136f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com //version0 137f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT sTypoAscender; 138f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT sTypoDescender; 139f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_SHORT sTypoLineGap; 140f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_USHORT usWinAscent; 141f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com SK_OT_USHORT usWinDescent; 142f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com}; 143f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com 144f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#pragma pack(pop) 145f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com 146f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com 147f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.comSK_COMPILE_ASSERT(sizeof(SkOTTableOS2_V0) == 78, sizeof_SkOTTableOS2_V0_not_78); 148f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com 149f8d1aee2526a384a570b082b17f3a19fe72bd15ebungeman@google.com#endif 150