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