• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /***************************************************************************
2 *
3 *   Copyright (C) 1998-2008, International Business Machines
4 *   Corporation and others.  All Rights Reserved.
5 *
6 ************************************************************************/
7 
8 #ifndef __SFNT_H
9 #define __SFNT_H
10 
11 #include "LETypes.h"
12 
13 U_NAMESPACE_USE
14 
15 #ifndef ANY_NUMBER
16 #define ANY_NUMBER 1
17 #endif
18 
19 struct DirectoryEntry
20 {
21     le_uint32   tag;
22     le_uint32   checksum;
23     le_uint32   offset;
24     le_uint32   length;
25 };
26 
27 #ifndef XP_CPLUSPLUS
28 typedef struct DirectoryEntry DirectoryEntry;
29 #endif
30 
31 struct SFNTDirectory
32 {
33     le_uint32       scalerType;
34     le_uint16       numTables;
35     le_uint16       searchRange;
36     le_uint16       entrySelector;
37     le_uint16       rangeShift;
38     DirectoryEntry  tableDirectory[ANY_NUMBER];
39 };
40 
41 #ifndef XP_CPLUSPLUS
42 typedef struct SFNTDirectory SFNTDirectory;
43 #endif
44 
45 
46 struct CMAPEncodingSubtableHeader
47 {
48     le_uint16   platformID;
49     le_uint16   platformSpecificID;
50     le_uint32   encodingOffset;
51 };
52 
53 #ifndef XP_CPLUSPLUS
54 typedef struct CMAPEncodingSubtableHeader CMAPEncodingSubtableHeader;
55 #endif
56 
57 struct CMAPTable
58 {
59     le_uint16   version;
60     le_uint16   numberSubtables;
61     CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
62 };
63 
64 #ifndef XP_CPLUSPLUS
65 typedef struct CMAPTable CMAPTable;
66 #endif
67 
68 struct CMAPEncodingSubtable
69 {
70     le_uint16   format;
71     le_uint16   length;
72     le_uint16   language;
73 };
74 
75 #ifndef XP_CPLUSPLUS
76 typedef struct CMAPEncodingSubtable CMAPEncodingSubtable;
77 #endif
78 
79 #ifdef XP_CPLUSPLUS
80 struct CMAPFormat0Encoding : CMAPEncodingSubtable
81 {
82     le_uint8    glyphIndexArray[256];
83 };
84 #else
85 struct CMAPFormat0Encoding
86 {
87 	CMAPEncodingSubtable base;
88 
89 	le_uint8 glyphIndexArray[256];
90 };
91 
92 typedef struct CMAPFormat0Encoding CMAPFormat0Encoding;
93 #endif
94 
95 struct CMAPFormat2Subheader
96 {
97     le_uint16   firstCode;
98     le_uint16   entryCount;
99     le_int16    idDelta;
100     le_uint16   idRangeOffset;
101 };
102 
103 #ifndef XP_CPLUSPLUS
104 typedef struct CMAPFormat2Subheader CMAPFormat2Subheader;
105 #endif
106 
107 #ifdef XP_CPLUSPLUS
108 struct CMAPFormat2Encoding : CMAPEncodingSubtable
109 {
110     le_uint16  subHeadKeys[256];
111     CMAPFormat2Subheader subheaders[ANY_NUMBER];
112 };
113 #else
114 struct CMAPFormat2Encoding
115 {
116 	CMAPEncodingSubtable base;
117 
118     le_uint16  subHeadKeys[256];
119     CMAPFormat2Subheader subheaders[ANY_NUMBER];
120 };
121 
122 typedef struct CMAPFormat2Encoding CMAPFormat2Encoding;
123 #endif
124 
125 #ifdef XP_CPLUSPLUS
126 struct CMAPFormat4Encoding : CMAPEncodingSubtable
127 {
128     le_uint16   segCountX2;
129     le_uint16   searchRange;
130     le_uint16   entrySelector;
131     le_uint16   rangeShift;
132     le_uint16   endCodes[ANY_NUMBER];
133 /*
134     le_uint16   reservedPad;
135     le_uint16   startCodes[ANY_NUMBER];
136     le_uint16   idDelta[ANY_NUMBER];
137     le_uint16   idRangeOffset[ANY_NUMBER];
138     le_uint16   glyphIndexArray[ANY_NUMBER];
139 */
140 };
141 #else
142 struct CMAPFormat4Encoding
143 {
144 	CMAPEncodingSubtable base;
145 
146     le_uint16   segCountX2;
147     le_uint16   searchRange;
148     le_uint16   entrySelector;
149     le_uint16   rangeShift;
150     le_uint16   endCodes[ANY_NUMBER];
151 /*
152 //  le_uint16   reservedPad;
153 //  le_uint16   startCodes[ANY_NUMBER];
154 //  le_uint16   idDelta[ANY_NUMBER];
155 //  le_uint16   idRangeOffset[ANY_NUMBER];
156 //  le_uint16   glyphIndexArray[ANY_NUMBER];
157 */
158 };
159 
160 typedef struct CMAPFormat4Encoding CMAPFormat4Encoding;
161 #endif
162 
163 #ifdef XP_CPLUSPLUS
164 struct CMAPFormat6Encoding : CMAPEncodingSubtable
165 {
166     le_uint16   firstCode;
167     le_uint16   entryCount;
168     le_uint16   glyphIndexArray[ANY_NUMBER];
169 };
170 #else
171 struct CMAPFormat6Encoding
172 {
173 	CMAPEncodingSubtable base;
174 
175     le_uint16   firstCode;
176     le_uint16   entryCount;
177     le_uint16   glyphIndexArray[ANY_NUMBER];
178 };
179 
180 typedef struct CMAPFormat6Encoding CMAPFormat6Encoding;
181 #endif
182 
183 struct CMAPEncodingSubtable32
184 {
185     le_uint32   format;
186     le_uint32   length;
187     le_uint32   language;
188 };
189 
190 #ifndef XP_CPLUSPLUS
191 typedef struct CMAPEncodingSubtable32 CMAPEncodingSubtable32;
192 #endif
193 
194 struct CMAPGroup
195 {
196     le_uint32   startCharCode;
197     le_uint32   endCharCode;
198     le_uint32   startGlyphCode;
199 };
200 
201 #ifndef XP_CPLUSPLUS
202 typedef struct CMAPGroup CMAPGroup;
203 #endif
204 
205 #ifdef XP_CPLUSPLUS
206 struct CMAPFormat8Encoding : CMAPEncodingSubtable32
207 {
208     le_uint32   is32[65536/32];
209     le_uint32   nGroups;
210     CMAPGroup   groups[ANY_NUMBER];
211 };
212 #else
213 struct CMAPFormat8Encoding
214 {
215 	CMAPEncodingSubtable32 base;
216 
217     le_uint32   is32[65536/32];
218     le_uint32   nGroups;
219     CMAPGroup   groups[ANY_NUMBER];
220 };
221 
222 typedef struct CMAPFormat8Encoding CMAPFormat8Encoding;
223 #endif
224 
225 #ifdef XP_CPLUSPLUS
226 struct CMAPFormat10Encoding : CMAPEncodingSubtable32
227 {
228     le_uint32   startCharCode;
229     le_uint32   numCharCodes;
230     le_uint16   glyphs[ANY_NUMBER];
231 };
232 #else
233 struct CMAPFormat10Encoding
234 {
235 	CMAPEncodingSubtable32 base;
236 
237     le_uint32   startCharCode;
238     le_uint32   numCharCodes;
239     le_uint16   glyphs[ANY_NUMBER];
240 };
241 
242 typedef struct CMAPFormat10Encoding CMAPFormat10Encoding;
243 #endif
244 
245 #ifdef XP_CPLUSPLUS
246 struct CMAPFormat12Encoding : CMAPEncodingSubtable32
247 {
248     le_uint32   nGroups;
249     CMAPGroup   groups[ANY_NUMBER];
250 };
251 #else
252 struct CMAPFormat12Encoding
253 {
254 	CMAPEncodingSubtable32 base;
255 
256     le_uint32   nGroups;
257     CMAPGroup   groups[ANY_NUMBER];
258 };
259 
260 typedef struct CMAPFormat12Encoding CMAPFormat12Encoding;
261 #endif
262 
263 typedef le_int32 fixed;
264 
265 struct BigDate
266 {
267     le_uint32   bc;
268     le_uint32   ad;
269 };
270 
271 #ifndef XP_CPLUSPLUS
272 typedef struct BigDate BigDate;
273 #endif
274 
275 struct HEADTable
276 {
277     fixed       version;
278     fixed       fontRevision;
279     le_uint32   checksumAdjustment;
280     le_uint32   magicNumber;
281     le_uint16   flags;
282     le_uint16   unitsPerEm;
283     BigDate     created;
284     BigDate     modified;
285     le_int16    xMin;
286     le_int16    yMin;
287     le_int16    xMax;
288     le_int16    yMax;
289     le_int16    lowestRecPPEM;
290     le_int16    fontDirectionHint;
291     le_int16    indexToLocFormat;
292     le_int16    glyphDataFormat;
293 };
294 
295 #ifndef XP_CPLUSPLUS
296 typedef struct HEADTable HEADTable;
297 #endif
298 
299 struct MAXPTable
300 {
301     fixed       version;
302     le_uint16   numGlyphs;
303     le_uint16   maxPoints;
304     le_uint16   maxContours;
305     le_uint16   maxComponentPoints;
306     le_uint16   maxComponentContours;
307     le_uint16   maxZones;
308     le_uint16   maxTwilightPoints;
309     le_uint16   maxStorage;
310     le_uint16   maxFunctionDefs;
311     le_uint16   maxInstructionDefs;
312     le_uint16   maxStackElements;
313     le_uint16   maxSizeOfInstructions;
314     le_uint16   maxComponentElements;
315     le_uint16   maxComponentDepth;
316 };
317 
318 #ifndef XP_CPLUSPLUS
319 typedef struct MAXPTable MAXPTable;
320 #endif
321 
322 struct HHEATable
323 {
324     fixed       version;
325     le_int16    ascent;
326     le_int16    descent;
327     le_int16    lineGap;
328     le_uint16   advanceWidthMax;
329     le_int16    minLeftSideBearing;
330     le_int16    minRightSideBearing;
331     le_int16    xMaxExtent;
332     le_int16    caretSlopeRise;
333     le_int16    caretSlopeRun;
334     le_int16    caretOffset;
335     le_int16    reserved1;
336     le_int16    reserved2;
337     le_int16    reserved3;
338     le_int16    reserved4;
339     le_int16    metricDataFormat;
340     le_uint16   numOfLongHorMetrics;
341 };
342 
343 #ifndef XP_CPLUSPLUS
344 typedef struct HHEATable HHEATable;
345 #endif
346 
347 struct LongHorMetric
348 {
349     le_uint16   advanceWidth;
350     le_int16    leftSideBearing;
351 };
352 
353 #ifndef XP_CPLUSPLUS
354 typedef struct LongHorMetric LongHorMetric;
355 #endif
356 
357 struct HMTXTable
358 {
359     LongHorMetric hMetrics[ANY_NUMBER];       /* ANY_NUMBER = numOfLongHorMetrics from hhea table */
360 /* le_int16        leftSideBearing[ANY_NUMBER];  ANY_NUMBER = numGlyphs - numOfLongHorMetrics     */
361 };
362 
363 #ifndef XP_CPLUSPLUS
364 typedef struct HMTXTable HMTXTable;
365 #endif
366 
367 enum PlatformID
368 {
369     PLATFORM_UNICODE = 0,
370     PLATFORM_MACINTOSH = 1,
371     PLATFORM_ISO       = 2,
372     PLATFORM_MICROSOFT = 3,
373     PLATFORM_CUSTOM    = 4
374 };
375 
376 enum MacintoshEncodingID
377 {
378     MACINTOSH_ROMAN = 0
379 };
380 
381 enum MacintoshLanguageID
382 {
383     MACINTOSH_ENGLISH = 0
384 };
385 
386 enum MicrosoftEncodingID
387 {
388     MICROSOFT_UNICODE_BMP  =  1,
389     MICROSOFT_UNICODE_FULL = 10
390 };
391 
392 enum MicrosoftLanguageID
393 {
394     MICROSOFT_ENGLISH = 0x409
395 };
396 
397 enum NameID
398 {
399     NAME_COPYRIGHT_NOTICE     = 0,
400     NAME_FONT_FAMILY          = 1,
401     NAME_FONT_SUB_FAMILY      = 2,
402     NAME_UNIQUE_FONT_ID       = 3,
403     NAME_FULL_FONT_NAME       = 4,
404     NAME_VERSION_STRING       = 5,
405     NAME_POSTSCRIPT_NAME      = 6,
406     NAME_TRADEMARK            = 7,
407     NAME_MANUFACTURER         = 8,
408     NAME_DESIGNER             = 9,
409     NAME_DESCRIPTION          = 10,
410     NAME_VENDOR_URL           = 11,
411     NAME_DESIGNER_URL         = 12,
412     NAME_LICENSE_DESCRIPTION  = 13,
413     NAME_LICENSE_URL          = 14,
414     NAME_RESERVED             = 15,
415     NAME_PREFERRED_FAMILY     = 16,
416     NAME_PREFERRED_SUB_FAMILY = 17,
417     NAME_COMPATIBLE_FULL      = 18,
418     NAME_SAMPLE_TEXT          = 19,
419     NAME_POSTSCRIPT_CID       = 20
420 };
421 
422 struct NameRecord
423 {
424     le_uint16 platformID;
425     le_uint16 encodingID;
426     le_uint16 languageID;
427     le_uint16 nameID;
428     le_uint16 length;
429     le_uint16 offset;
430 };
431 
432 #ifndef XP_CPLUSPLUS
433 typedef struct NameRecord NameRecord;
434 #endif
435 
436 struct NAMETable
437 {
438     le_uint16 version;
439     le_uint16 count;
440     le_uint16 stringOffset;
441     NameRecord nameRecords[ANY_NUMBER];
442 };
443 
444 #ifndef XP_CPLUSPLUS
445 typedef struct NAMETable NAMETable;
446 #endif
447 
448 #endif
449 
450