1/* 2 ****************************************************************************** * 3 * 4 * Copyright (C) 1999-2001, International Business Machines 5 * Corporation and others. All Rights Reserved. 6 * 7 ****************************************************************************** * 8 * file name: sfnt.h 9 * 10 * created on: ??/??/2001 11 * created by: Eric R. Mader 12 */ 13 14#ifndef __SFNT_H 15#define __SFNT_H 16 17#include "LETypes.h" 18 19 20#ifndef ANY_NUMBER 21#define ANY_NUMBER 1 22#endif 23 24struct DirectoryEntry 25{ 26 le_uint32 tag; 27 le_uint32 checksum; 28 le_uint32 offset; 29 le_uint32 length; 30}; 31 32struct SFNTDirectory 33{ 34 le_uint32 scalerType; 35 le_uint16 numTables; 36 le_uint16 searchRange; 37 le_uint16 entrySelector; 38 le_uint16 rangeShift; 39 DirectoryEntry tableDirectory[ANY_NUMBER]; 40}; 41 42 43struct CMAPEncodingSubtableHeader 44{ 45 le_uint16 platformID; 46 le_uint16 platformSpecificID; 47 le_uint32 encodingOffset; 48}; 49 50struct CMAPTable 51{ 52 le_uint16 version; 53 le_uint16 numberSubtables; 54 CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER]; 55}; 56 57struct CMAPEncodingSubtable 58{ 59 le_uint16 format; 60 le_uint16 length; 61 le_uint16 language; 62}; 63 64struct CMAPFormat0Encoding : CMAPEncodingSubtable 65{ 66 le_uint8 glyphIndexArray[256]; 67}; 68 69struct CMAPFormat2Subheader 70{ 71 le_uint16 firstCode; 72 le_uint16 entryCount; 73 le_int16 idDelta; 74 le_uint16 idRangeOffset; 75}; 76 77struct CMAPFormat2Encoding : CMAPEncodingSubtable 78{ 79 le_uint16 subHeadKeys[256]; 80 CMAPFormat2Subheader subheaders[ANY_NUMBER]; 81}; 82 83struct CMAPFormat4Encoding : CMAPEncodingSubtable 84{ 85 le_uint16 segCountX2; 86 le_uint16 searchRange; 87 le_uint16 entrySelector; 88 le_uint16 rangeShift; 89 le_uint16 endCodes[ANY_NUMBER]; 90// le_uint16 reservedPad; 91// le_uint16 startCodes[ANY_NUMBER]; 92// le_uint16 idDelta[ANY_NUMBER]; 93// le_uint16 idRangeOffset[ANY_NUMBER]; 94// le_uint16 glyphIndexArray[ANY_NUMBER]; 95}; 96 97struct CMAPFormat6Encoding : CMAPEncodingSubtable 98{ 99 le_uint16 firstCode; 100 le_uint16 entryCount; 101 le_uint16 glyphIndexArray[ANY_NUMBER]; 102}; 103 104struct CMAPEncodingSubtable32 105{ 106 le_uint32 format; 107 le_uint32 length; 108 le_uint32 language; 109}; 110 111struct CMAPGroup 112{ 113 le_uint32 startCharCode; 114 le_uint32 endCharCode; 115 le_uint32 startGlyphCode; 116}; 117 118struct CMAPFormat8Encoding : CMAPEncodingSubtable32 119{ 120 le_uint32 is32[65536/32]; 121 le_uint32 nGroups; 122 CMAPGroup groups[ANY_NUMBER]; 123}; 124 125struct CMAPFormat10Encoding : CMAPEncodingSubtable32 126{ 127 le_uint32 startCharCode; 128 le_uint32 numCharCodes; 129 le_uint16 glyphs[ANY_NUMBER]; 130}; 131 132struct CMAPFormat12Encoding : CMAPEncodingSubtable32 133{ 134 le_uint32 nGroups; 135 CMAPGroup groups[ANY_NUMBER]; 136}; 137 138typedef le_int32 fixed; 139 140struct BigDate 141{ 142 le_uint32 bc; 143 le_uint32 ad; 144}; 145 146struct HEADTable 147{ 148 fixed version; 149 fixed fontRevision; 150 le_uint32 checksumAdjustment; 151 le_uint32 magicNumber; 152 le_uint16 flags; 153 le_uint16 unitsPerEm; 154 BigDate created; 155 BigDate modified; 156 le_int16 xMin; 157 le_int16 yMin; 158 le_int16 xMax; 159 le_int16 yMax; 160 le_int16 lowestRecPPEM; 161 le_int16 fontDirectionHint; 162 le_int16 indexToLocFormat; 163 le_int16 glyphDataFormat; 164}; 165 166struct MAXPTable 167{ 168 fixed version; 169 le_uint16 numGlyphs; 170 le_uint16 maxPoints; 171 le_uint16 maxContours; 172 le_uint16 maxComponentPoints; 173 le_uint16 maxComponentContours; 174 le_uint16 maxZones; 175 le_uint16 maxTwilightPoints; 176 le_uint16 maxStorage; 177 le_uint16 maxFunctionDefs; 178 le_uint16 maxInstructionDefs; 179 le_uint16 maxStackElements; 180 le_uint16 maxSizeOfInstructions; 181 le_uint16 maxComponentElements; 182 le_uint16 maxComponentDepth; 183}; 184 185struct HHEATable 186{ 187 fixed version; 188 le_int16 ascent; 189 le_int16 descent; 190 le_int16 lineGap; 191 le_uint16 advanceWidthMax; 192 le_int16 minLeftSideBearing; 193 le_int16 minRightSideBearing; 194 le_int16 xMaxExtent; 195 le_int16 caretSlopeRise; 196 le_int16 caretSlopeRun; 197 le_int16 caretOffset; 198 le_int16 reserved1; 199 le_int16 reserved2; 200 le_int16 reserved3; 201 le_int16 reserved4; 202 le_int16 metricDataFormat; 203 le_uint16 numOfLongHorMetrics; 204}; 205 206struct LongHorMetric 207{ 208 le_uint16 advanceWidth; 209 le_int16 leftSideBearing; 210}; 211 212struct HMTXTable 213{ 214 LongHorMetric hMetrics[ANY_NUMBER]; // ANY_NUMBER = numOfLongHorMetrics from hhea table 215// le_int16 leftSideBearing[ANY_NUMBER]; // ANY_NUMBER = numGlyphs - numOfLongHorMetrics 216}; 217 218#endif 219 220