]> git.saurik.com Git - apple/icu.git/blob - icuSources/test/perf/leperf/sfnt.h
ICU-66108.tar.gz
[apple/icu.git] / icuSources / test / perf / leperf / sfnt.h
1 /***************************************************************************
2 *
3 * © 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