• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
24 struct DirectoryEntry
25 {
26     le_uint32   tag;
27     le_uint32   checksum;
28     le_uint32   offset;
29     le_uint32   length;
30 };
31 
32 struct 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 
43 struct CMAPEncodingSubtableHeader
44 {
45     le_uint16   platformID;
46     le_uint16   platformSpecificID;
47     le_uint32   encodingOffset;
48 };
49 
50 struct CMAPTable
51 {
52     le_uint16   version;
53     le_uint16   numberSubtables;
54     CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
55 };
56 
57 struct CMAPEncodingSubtable
58 {
59     le_uint16   format;
60     le_uint16   length;
61     le_uint16   language;
62 };
63 
64 struct CMAPFormat0Encoding : CMAPEncodingSubtable
65 {
66     le_uint8    glyphIndexArray[256];
67 };
68 
69 struct CMAPFormat2Subheader
70 {
71     le_uint16   firstCode;
72     le_uint16   entryCount;
73     le_int16    idDelta;
74     le_uint16   idRangeOffset;
75 };
76 
77 struct CMAPFormat2Encoding : CMAPEncodingSubtable
78 {
79     le_uint16  subHeadKeys[256];
80     CMAPFormat2Subheader subheaders[ANY_NUMBER];
81 };
82 
83 struct 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 
97 struct CMAPFormat6Encoding : CMAPEncodingSubtable
98 {
99     le_uint16   firstCode;
100     le_uint16   entryCount;
101     le_uint16   glyphIndexArray[ANY_NUMBER];
102 };
103 
104 struct CMAPEncodingSubtable32
105 {
106     le_uint32   format;
107     le_uint32   length;
108     le_uint32   language;
109 };
110 
111 struct CMAPGroup
112 {
113     le_uint32   startCharCode;
114     le_uint32   endCharCode;
115     le_uint32   startGlyphCode;
116 };
117 
118 struct CMAPFormat8Encoding : CMAPEncodingSubtable32
119 {
120     le_uint32   is32[65536/32];
121     le_uint32   nGroups;
122     CMAPGroup   groups[ANY_NUMBER];
123 };
124 
125 struct CMAPFormat10Encoding : CMAPEncodingSubtable32
126 {
127     le_uint32   startCharCode;
128     le_uint32   numCharCodes;
129     le_uint16   glyphs[ANY_NUMBER];
130 };
131 
132 struct CMAPFormat12Encoding : CMAPEncodingSubtable32
133 {
134     le_uint32   nGroups;
135     CMAPGroup   groups[ANY_NUMBER];
136 };
137 
138 typedef le_int32 fixed;
139 
140 struct BigDate
141 {
142     le_uint32   bc;
143     le_uint32   ad;
144 };
145 
146 struct 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 
166 struct 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 
185 struct 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 
206 struct LongHorMetric
207 {
208     le_uint16   advanceWidth;
209     le_int16    leftSideBearing;
210 };
211 
212 struct 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