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