1 | /**************************************************************************** |
2 | * |
3 | * tttables.h |
4 | * |
5 | * Basic SFNT/TrueType tables definitions and interface |
6 | * (specification only). |
7 | * |
8 | * Copyright (C) 1996-2021 by |
9 | * David Turner, Robert Wilhelm, and Werner Lemberg. |
10 | * |
11 | * This file is part of the FreeType project, and may only be used, |
12 | * modified, and distributed under the terms of the FreeType project |
13 | * license, LICENSE.TXT. By continuing to use, modify, or distribute |
14 | * this file you indicate that you have read the license and |
15 | * understand and accept it fully. |
16 | * |
17 | */ |
18 | |
19 | |
20 | #ifndef TTTABLES_H_ |
21 | #define TTTABLES_H_ |
22 | |
23 | |
24 | #include <freetype/freetype.h> |
25 | |
26 | #ifdef FREETYPE_H |
27 | #error "freetype.h of FreeType 1 has been loaded!" |
28 | #error "Please fix the directory search order for header files" |
29 | #error "so that freetype.h of FreeType 2 is found first." |
30 | #endif |
31 | |
32 | |
33 | FT_BEGIN_HEADER |
34 | |
35 | /************************************************************************** |
36 | * |
37 | * @section: |
38 | * truetype_tables |
39 | * |
40 | * @title: |
41 | * TrueType Tables |
42 | * |
43 | * @abstract: |
44 | * TrueType-specific table types and functions. |
45 | * |
46 | * @description: |
47 | * This section contains definitions of some basic tables specific to |
48 | * TrueType and OpenType as well as some routines used to access and |
49 | * process them. |
50 | * |
51 | * @order: |
52 | * TT_Header |
53 | * TT_HoriHeader |
54 | * TT_VertHeader |
55 | * TT_OS2 |
56 | * TT_Postscript |
57 | * TT_PCLT |
58 | * TT_MaxProfile |
59 | * |
60 | * FT_Sfnt_Tag |
61 | * FT_Get_Sfnt_Table |
62 | * FT_Load_Sfnt_Table |
63 | * FT_Sfnt_Table_Info |
64 | * |
65 | * FT_Get_CMap_Language_ID |
66 | * FT_Get_CMap_Format |
67 | * |
68 | * FT_PARAM_TAG_UNPATENTED_HINTING |
69 | * |
70 | */ |
71 | |
72 | |
73 | /************************************************************************** |
74 | * |
75 | * @struct: |
76 | * TT_Header |
77 | * |
78 | * @description: |
79 | * A structure to model a TrueType font header table. All fields follow |
80 | * the OpenType specification. The 64-bit timestamps are stored in |
81 | * two-element arrays `Created` and `Modified`, first the upper then |
82 | * the lower 32~bits. |
83 | */ |
84 | typedef struct |
85 | { |
86 | FT_Fixed ; |
87 | FT_Fixed ; |
88 | |
89 | FT_Long ; |
90 | FT_Long ; |
91 | |
92 | FT_UShort ; |
93 | FT_UShort ; |
94 | |
95 | FT_ULong [2]; |
96 | FT_ULong [2]; |
97 | |
98 | FT_Short ; |
99 | FT_Short ; |
100 | FT_Short ; |
101 | FT_Short ; |
102 | |
103 | FT_UShort ; |
104 | FT_UShort ; |
105 | |
106 | FT_Short ; |
107 | FT_Short ; |
108 | FT_Short ; |
109 | |
110 | } ; |
111 | |
112 | |
113 | /************************************************************************** |
114 | * |
115 | * @struct: |
116 | * TT_HoriHeader |
117 | * |
118 | * @description: |
119 | * A structure to model a TrueType horizontal header, the 'hhea' table, |
120 | * as well as the corresponding horizontal metrics table, 'hmtx'. |
121 | * |
122 | * @fields: |
123 | * Version :: |
124 | * The table version. |
125 | * |
126 | * Ascender :: |
127 | * The font's ascender, i.e., the distance from the baseline to the |
128 | * top-most of all glyph points found in the font. |
129 | * |
130 | * This value is invalid in many fonts, as it is usually set by the |
131 | * font designer, and often reflects only a portion of the glyphs found |
132 | * in the font (maybe ASCII). |
133 | * |
134 | * You should use the `sTypoAscender` field of the 'OS/2' table instead |
135 | * if you want the correct one. |
136 | * |
137 | * Descender :: |
138 | * The font's descender, i.e., the distance from the baseline to the |
139 | * bottom-most of all glyph points found in the font. It is negative. |
140 | * |
141 | * This value is invalid in many fonts, as it is usually set by the |
142 | * font designer, and often reflects only a portion of the glyphs found |
143 | * in the font (maybe ASCII). |
144 | * |
145 | * You should use the `sTypoDescender` field of the 'OS/2' table |
146 | * instead if you want the correct one. |
147 | * |
148 | * Line_Gap :: |
149 | * The font's line gap, i.e., the distance to add to the ascender and |
150 | * descender to get the BTB, i.e., the baseline-to-baseline distance |
151 | * for the font. |
152 | * |
153 | * advance_Width_Max :: |
154 | * This field is the maximum of all advance widths found in the font. |
155 | * It can be used to compute the maximum width of an arbitrary string |
156 | * of text. |
157 | * |
158 | * min_Left_Side_Bearing :: |
159 | * The minimum left side bearing of all glyphs within the font. |
160 | * |
161 | * min_Right_Side_Bearing :: |
162 | * The minimum right side bearing of all glyphs within the font. |
163 | * |
164 | * xMax_Extent :: |
165 | * The maximum horizontal extent (i.e., the 'width' of a glyph's |
166 | * bounding box) for all glyphs in the font. |
167 | * |
168 | * caret_Slope_Rise :: |
169 | * The rise coefficient of the cursor's slope of the cursor |
170 | * (slope=rise/run). |
171 | * |
172 | * caret_Slope_Run :: |
173 | * The run coefficient of the cursor's slope. |
174 | * |
175 | * caret_Offset :: |
176 | * The cursor's offset for slanted fonts. |
177 | * |
178 | * Reserved :: |
179 | * 8~reserved bytes. |
180 | * |
181 | * metric_Data_Format :: |
182 | * Always~0. |
183 | * |
184 | * number_Of_HMetrics :: |
185 | * Number of HMetrics entries in the 'hmtx' table -- this value can be |
186 | * smaller than the total number of glyphs in the font. |
187 | * |
188 | * long_metrics :: |
189 | * A pointer into the 'hmtx' table. |
190 | * |
191 | * short_metrics :: |
192 | * A pointer into the 'hmtx' table. |
193 | * |
194 | * @note: |
195 | * For an OpenType variation font, the values of the following fields can |
196 | * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if |
197 | * the font contains an 'MVAR' table: `caret_Slope_Rise`, |
198 | * `caret_Slope_Run`, and `caret_Offset`. |
199 | */ |
200 | typedef struct |
201 | { |
202 | FT_Fixed ; |
203 | FT_Short ; |
204 | FT_Short ; |
205 | FT_Short ; |
206 | |
207 | FT_UShort ; /* advance width maximum */ |
208 | |
209 | FT_Short ; /* minimum left-sb */ |
210 | FT_Short ; /* minimum right-sb */ |
211 | FT_Short ; /* xmax extents */ |
212 | FT_Short ; |
213 | FT_Short ; |
214 | FT_Short ; |
215 | |
216 | FT_Short [4]; |
217 | |
218 | FT_Short ; |
219 | FT_UShort ; |
220 | |
221 | /* The following fields are not defined by the OpenType specification */ |
222 | /* but they are used to connect the metrics header to the relevant */ |
223 | /* 'hmtx' table. */ |
224 | |
225 | void* ; |
226 | void* ; |
227 | |
228 | } ; |
229 | |
230 | |
231 | /************************************************************************** |
232 | * |
233 | * @struct: |
234 | * TT_VertHeader |
235 | * |
236 | * @description: |
237 | * A structure used to model a TrueType vertical header, the 'vhea' |
238 | * table, as well as the corresponding vertical metrics table, 'vmtx'. |
239 | * |
240 | * @fields: |
241 | * Version :: |
242 | * The table version. |
243 | * |
244 | * Ascender :: |
245 | * The font's ascender, i.e., the distance from the baseline to the |
246 | * top-most of all glyph points found in the font. |
247 | * |
248 | * This value is invalid in many fonts, as it is usually set by the |
249 | * font designer, and often reflects only a portion of the glyphs found |
250 | * in the font (maybe ASCII). |
251 | * |
252 | * You should use the `sTypoAscender` field of the 'OS/2' table instead |
253 | * if you want the correct one. |
254 | * |
255 | * Descender :: |
256 | * The font's descender, i.e., the distance from the baseline to the |
257 | * bottom-most of all glyph points found in the font. It is negative. |
258 | * |
259 | * This value is invalid in many fonts, as it is usually set by the |
260 | * font designer, and often reflects only a portion of the glyphs found |
261 | * in the font (maybe ASCII). |
262 | * |
263 | * You should use the `sTypoDescender` field of the 'OS/2' table |
264 | * instead if you want the correct one. |
265 | * |
266 | * Line_Gap :: |
267 | * The font's line gap, i.e., the distance to add to the ascender and |
268 | * descender to get the BTB, i.e., the baseline-to-baseline distance |
269 | * for the font. |
270 | * |
271 | * advance_Height_Max :: |
272 | * This field is the maximum of all advance heights found in the font. |
273 | * It can be used to compute the maximum height of an arbitrary string |
274 | * of text. |
275 | * |
276 | * min_Top_Side_Bearing :: |
277 | * The minimum top side bearing of all glyphs within the font. |
278 | * |
279 | * min_Bottom_Side_Bearing :: |
280 | * The minimum bottom side bearing of all glyphs within the font. |
281 | * |
282 | * yMax_Extent :: |
283 | * The maximum vertical extent (i.e., the 'height' of a glyph's |
284 | * bounding box) for all glyphs in the font. |
285 | * |
286 | * caret_Slope_Rise :: |
287 | * The rise coefficient of the cursor's slope of the cursor |
288 | * (slope=rise/run). |
289 | * |
290 | * caret_Slope_Run :: |
291 | * The run coefficient of the cursor's slope. |
292 | * |
293 | * caret_Offset :: |
294 | * The cursor's offset for slanted fonts. |
295 | * |
296 | * Reserved :: |
297 | * 8~reserved bytes. |
298 | * |
299 | * metric_Data_Format :: |
300 | * Always~0. |
301 | * |
302 | * number_Of_VMetrics :: |
303 | * Number of VMetrics entries in the 'vmtx' table -- this value can be |
304 | * smaller than the total number of glyphs in the font. |
305 | * |
306 | * long_metrics :: |
307 | * A pointer into the 'vmtx' table. |
308 | * |
309 | * short_metrics :: |
310 | * A pointer into the 'vmtx' table. |
311 | * |
312 | * @note: |
313 | * For an OpenType variation font, the values of the following fields can |
314 | * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if |
315 | * the font contains an 'MVAR' table: `Ascender`, `Descender`, |
316 | * `Line_Gap`, `caret_Slope_Rise`, `caret_Slope_Run`, and `caret_Offset`. |
317 | */ |
318 | typedef struct |
319 | { |
320 | FT_Fixed ; |
321 | FT_Short ; |
322 | FT_Short ; |
323 | FT_Short ; |
324 | |
325 | FT_UShort ; /* advance height maximum */ |
326 | |
327 | FT_Short ; /* minimum top-sb */ |
328 | FT_Short ; /* minimum bottom-sb */ |
329 | FT_Short ; /* ymax extents */ |
330 | FT_Short ; |
331 | FT_Short ; |
332 | FT_Short ; |
333 | |
334 | FT_Short [4]; |
335 | |
336 | FT_Short ; |
337 | FT_UShort ; |
338 | |
339 | /* The following fields are not defined by the OpenType specification */ |
340 | /* but they are used to connect the metrics header to the relevant */ |
341 | /* 'vmtx' table. */ |
342 | |
343 | void* ; |
344 | void* ; |
345 | |
346 | } ; |
347 | |
348 | |
349 | /************************************************************************** |
350 | * |
351 | * @struct: |
352 | * TT_OS2 |
353 | * |
354 | * @description: |
355 | * A structure to model a TrueType 'OS/2' table. All fields comply to |
356 | * the OpenType specification. |
357 | * |
358 | * Note that we now support old Mac fonts that do not include an 'OS/2' |
359 | * table. In this case, the `version` field is always set to 0xFFFF. |
360 | * |
361 | * @note: |
362 | * For an OpenType variation font, the values of the following fields can |
363 | * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if |
364 | * the font contains an 'MVAR' table: `sCapHeight`, `sTypoAscender`, |
365 | * `sTypoDescender`, `sTypoLineGap`, `sxHeight`, `usWinAscent`, |
366 | * `usWinDescent`, `yStrikeoutPosition`, `yStrikeoutSize`, |
367 | * `ySubscriptXOffset`, `ySubScriptXSize`, `ySubscriptYOffset`, |
368 | * `ySubscriptYSize`, `ySuperscriptXOffset`, `ySuperscriptXSize`, |
369 | * `ySuperscriptYOffset`, and `ySuperscriptYSize`. |
370 | * |
371 | * Possible values for bits in the `ulUnicodeRangeX` fields are given by |
372 | * the @TT_UCR_XXX macros. |
373 | */ |
374 | |
375 | typedef struct TT_OS2_ |
376 | { |
377 | FT_UShort version; /* 0x0001 - more or 0xFFFF */ |
378 | FT_Short xAvgCharWidth; |
379 | FT_UShort usWeightClass; |
380 | FT_UShort usWidthClass; |
381 | FT_UShort fsType; |
382 | FT_Short ySubscriptXSize; |
383 | FT_Short ySubscriptYSize; |
384 | FT_Short ySubscriptXOffset; |
385 | FT_Short ySubscriptYOffset; |
386 | FT_Short ySuperscriptXSize; |
387 | FT_Short ySuperscriptYSize; |
388 | FT_Short ySuperscriptXOffset; |
389 | FT_Short ySuperscriptYOffset; |
390 | FT_Short yStrikeoutSize; |
391 | FT_Short yStrikeoutPosition; |
392 | FT_Short sFamilyClass; |
393 | |
394 | FT_Byte panose[10]; |
395 | |
396 | FT_ULong ulUnicodeRange1; /* Bits 0-31 */ |
397 | FT_ULong ulUnicodeRange2; /* Bits 32-63 */ |
398 | FT_ULong ulUnicodeRange3; /* Bits 64-95 */ |
399 | FT_ULong ulUnicodeRange4; /* Bits 96-127 */ |
400 | |
401 | FT_Char achVendID[4]; |
402 | |
403 | FT_UShort fsSelection; |
404 | FT_UShort usFirstCharIndex; |
405 | FT_UShort usLastCharIndex; |
406 | FT_Short sTypoAscender; |
407 | FT_Short sTypoDescender; |
408 | FT_Short sTypoLineGap; |
409 | FT_UShort usWinAscent; |
410 | FT_UShort usWinDescent; |
411 | |
412 | /* only version 1 and higher: */ |
413 | |
414 | FT_ULong ; /* Bits 0-31 */ |
415 | FT_ULong ; /* Bits 32-63 */ |
416 | |
417 | /* only version 2 and higher: */ |
418 | |
419 | FT_Short sxHeight; |
420 | FT_Short sCapHeight; |
421 | FT_UShort usDefaultChar; |
422 | FT_UShort usBreakChar; |
423 | FT_UShort usMaxContext; |
424 | |
425 | /* only version 5 and higher: */ |
426 | |
427 | FT_UShort usLowerOpticalPointSize; /* in twips (1/20th points) */ |
428 | FT_UShort usUpperOpticalPointSize; /* in twips (1/20th points) */ |
429 | |
430 | } TT_OS2; |
431 | |
432 | |
433 | /************************************************************************** |
434 | * |
435 | * @struct: |
436 | * TT_Postscript |
437 | * |
438 | * @description: |
439 | * A structure to model a TrueType 'post' table. All fields comply to |
440 | * the OpenType specification. This structure does not reference a |
441 | * font's PostScript glyph names; use @FT_Get_Glyph_Name to retrieve |
442 | * them. |
443 | * |
444 | * @note: |
445 | * For an OpenType variation font, the values of the following fields can |
446 | * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if |
447 | * the font contains an 'MVAR' table: `underlinePosition` and |
448 | * `underlineThickness`. |
449 | */ |
450 | typedef struct TT_Postscript_ |
451 | { |
452 | FT_Fixed FormatType; |
453 | FT_Fixed italicAngle; |
454 | FT_Short underlinePosition; |
455 | FT_Short underlineThickness; |
456 | FT_ULong isFixedPitch; |
457 | FT_ULong minMemType42; |
458 | FT_ULong maxMemType42; |
459 | FT_ULong minMemType1; |
460 | FT_ULong maxMemType1; |
461 | |
462 | /* Glyph names follow in the 'post' table, but we don't */ |
463 | /* load them by default. */ |
464 | |
465 | } TT_Postscript; |
466 | |
467 | |
468 | /************************************************************************** |
469 | * |
470 | * @struct: |
471 | * TT_PCLT |
472 | * |
473 | * @description: |
474 | * A structure to model a TrueType 'PCLT' table. All fields comply to |
475 | * the OpenType specification. |
476 | */ |
477 | typedef struct TT_PCLT_ |
478 | { |
479 | FT_Fixed Version; |
480 | FT_ULong FontNumber; |
481 | FT_UShort Pitch; |
482 | FT_UShort xHeight; |
483 | FT_UShort Style; |
484 | FT_UShort TypeFamily; |
485 | FT_UShort CapHeight; |
486 | FT_UShort SymbolSet; |
487 | FT_Char TypeFace[16]; |
488 | FT_Char CharacterComplement[8]; |
489 | FT_Char FileName[6]; |
490 | FT_Char StrokeWeight; |
491 | FT_Char WidthType; |
492 | FT_Byte SerifStyle; |
493 | FT_Byte Reserved; |
494 | |
495 | } TT_PCLT; |
496 | |
497 | |
498 | /************************************************************************** |
499 | * |
500 | * @struct: |
501 | * TT_MaxProfile |
502 | * |
503 | * @description: |
504 | * The maximum profile ('maxp') table contains many max values, which can |
505 | * be used to pre-allocate arrays for speeding up glyph loading and |
506 | * hinting. |
507 | * |
508 | * @fields: |
509 | * version :: |
510 | * The version number. |
511 | * |
512 | * numGlyphs :: |
513 | * The number of glyphs in this TrueType font. |
514 | * |
515 | * maxPoints :: |
516 | * The maximum number of points in a non-composite TrueType glyph. See |
517 | * also `maxCompositePoints`. |
518 | * |
519 | * maxContours :: |
520 | * The maximum number of contours in a non-composite TrueType glyph. |
521 | * See also `maxCompositeContours`. |
522 | * |
523 | * maxCompositePoints :: |
524 | * The maximum number of points in a composite TrueType glyph. See |
525 | * also `maxPoints`. |
526 | * |
527 | * maxCompositeContours :: |
528 | * The maximum number of contours in a composite TrueType glyph. See |
529 | * also `maxContours`. |
530 | * |
531 | * maxZones :: |
532 | * The maximum number of zones used for glyph hinting. |
533 | * |
534 | * maxTwilightPoints :: |
535 | * The maximum number of points in the twilight zone used for glyph |
536 | * hinting. |
537 | * |
538 | * maxStorage :: |
539 | * The maximum number of elements in the storage area used for glyph |
540 | * hinting. |
541 | * |
542 | * maxFunctionDefs :: |
543 | * The maximum number of function definitions in the TrueType bytecode |
544 | * for this font. |
545 | * |
546 | * maxInstructionDefs :: |
547 | * The maximum number of instruction definitions in the TrueType |
548 | * bytecode for this font. |
549 | * |
550 | * maxStackElements :: |
551 | * The maximum number of stack elements used during bytecode |
552 | * interpretation. |
553 | * |
554 | * maxSizeOfInstructions :: |
555 | * The maximum number of TrueType opcodes used for glyph hinting. |
556 | * |
557 | * maxComponentElements :: |
558 | * The maximum number of simple (i.e., non-composite) glyphs in a |
559 | * composite glyph. |
560 | * |
561 | * maxComponentDepth :: |
562 | * The maximum nesting depth of composite glyphs. |
563 | * |
564 | * @note: |
565 | * This structure is only used during font loading. |
566 | */ |
567 | typedef struct TT_MaxProfile_ |
568 | { |
569 | FT_Fixed version; |
570 | FT_UShort numGlyphs; |
571 | FT_UShort maxPoints; |
572 | FT_UShort maxContours; |
573 | FT_UShort maxCompositePoints; |
574 | FT_UShort maxCompositeContours; |
575 | FT_UShort maxZones; |
576 | FT_UShort maxTwilightPoints; |
577 | FT_UShort maxStorage; |
578 | FT_UShort maxFunctionDefs; |
579 | FT_UShort maxInstructionDefs; |
580 | FT_UShort maxStackElements; |
581 | FT_UShort maxSizeOfInstructions; |
582 | FT_UShort maxComponentElements; |
583 | FT_UShort maxComponentDepth; |
584 | |
585 | } TT_MaxProfile; |
586 | |
587 | |
588 | /************************************************************************** |
589 | * |
590 | * @enum: |
591 | * FT_Sfnt_Tag |
592 | * |
593 | * @description: |
594 | * An enumeration to specify indices of SFNT tables loaded and parsed by |
595 | * FreeType during initialization of an SFNT font. Used in the |
596 | * @FT_Get_Sfnt_Table API function. |
597 | * |
598 | * @values: |
599 | * FT_SFNT_HEAD :: |
600 | * To access the font's @TT_Header structure. |
601 | * |
602 | * FT_SFNT_MAXP :: |
603 | * To access the font's @TT_MaxProfile structure. |
604 | * |
605 | * FT_SFNT_OS2 :: |
606 | * To access the font's @TT_OS2 structure. |
607 | * |
608 | * FT_SFNT_HHEA :: |
609 | * To access the font's @TT_HoriHeader structure. |
610 | * |
611 | * FT_SFNT_VHEA :: |
612 | * To access the font's @TT_VertHeader structure. |
613 | * |
614 | * FT_SFNT_POST :: |
615 | * To access the font's @TT_Postscript structure. |
616 | * |
617 | * FT_SFNT_PCLT :: |
618 | * To access the font's @TT_PCLT structure. |
619 | */ |
620 | typedef enum FT_Sfnt_Tag_ |
621 | { |
622 | FT_SFNT_HEAD, |
623 | FT_SFNT_MAXP, |
624 | FT_SFNT_OS2, |
625 | FT_SFNT_HHEA, |
626 | FT_SFNT_VHEA, |
627 | FT_SFNT_POST, |
628 | FT_SFNT_PCLT, |
629 | |
630 | FT_SFNT_MAX |
631 | |
632 | } FT_Sfnt_Tag; |
633 | |
634 | /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag` */ |
635 | /* values instead */ |
636 | #define ft_sfnt_head FT_SFNT_HEAD |
637 | #define ft_sfnt_maxp FT_SFNT_MAXP |
638 | #define ft_sfnt_os2 FT_SFNT_OS2 |
639 | #define ft_sfnt_hhea FT_SFNT_HHEA |
640 | #define ft_sfnt_vhea FT_SFNT_VHEA |
641 | #define ft_sfnt_post FT_SFNT_POST |
642 | #define ft_sfnt_pclt FT_SFNT_PCLT |
643 | |
644 | |
645 | /************************************************************************** |
646 | * |
647 | * @function: |
648 | * FT_Get_Sfnt_Table |
649 | * |
650 | * @description: |
651 | * Return a pointer to a given SFNT table stored within a face. |
652 | * |
653 | * @input: |
654 | * face :: |
655 | * A handle to the source. |
656 | * |
657 | * tag :: |
658 | * The index of the SFNT table. |
659 | * |
660 | * @return: |
661 | * A type-less pointer to the table. This will be `NULL` in case of |
662 | * error, or if the corresponding table was not found **OR** loaded from |
663 | * the file. |
664 | * |
665 | * Use a typecast according to `tag` to access the structure elements. |
666 | * |
667 | * @note: |
668 | * The table is owned by the face object and disappears with it. |
669 | * |
670 | * This function is only useful to access SFNT tables that are loaded by |
671 | * the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for a |
672 | * list. |
673 | * |
674 | * @example: |
675 | * Here is an example demonstrating access to the 'vhea' table. |
676 | * |
677 | * ``` |
678 | * TT_VertHeader* vert_header; |
679 | * |
680 | * |
681 | * vert_header = |
682 | * (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA ); |
683 | * ``` |
684 | */ |
685 | FT_EXPORT( void* ) |
686 | FT_Get_Sfnt_Table( FT_Face face, |
687 | FT_Sfnt_Tag tag ); |
688 | |
689 | |
690 | /************************************************************************** |
691 | * |
692 | * @function: |
693 | * FT_Load_Sfnt_Table |
694 | * |
695 | * @description: |
696 | * Load any SFNT font table into client memory. |
697 | * |
698 | * @input: |
699 | * face :: |
700 | * A handle to the source face. |
701 | * |
702 | * tag :: |
703 | * The four-byte tag of the table to load. Use value~0 if you want to |
704 | * access the whole font file. Otherwise, you can use one of the |
705 | * definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new |
706 | * one with @FT_MAKE_TAG. |
707 | * |
708 | * offset :: |
709 | * The starting offset in the table (or file if tag~==~0). |
710 | * |
711 | * @output: |
712 | * buffer :: |
713 | * The target buffer address. The client must ensure that the memory |
714 | * array is big enough to hold the data. |
715 | * |
716 | * @inout: |
717 | * length :: |
718 | * If the `length` parameter is `NULL`, try to load the whole table. |
719 | * Return an error code if it fails. |
720 | * |
721 | * Else, if `*length` is~0, exit immediately while returning the |
722 | * table's (or file) full size in it. |
723 | * |
724 | * Else the number of bytes to read from the table or file, from the |
725 | * starting offset. |
726 | * |
727 | * @return: |
728 | * FreeType error code. 0~means success. |
729 | * |
730 | * @note: |
731 | * If you need to determine the table's length you should first call this |
732 | * function with `*length` set to~0, as in the following example: |
733 | * |
734 | * ``` |
735 | * FT_ULong length = 0; |
736 | * |
737 | * |
738 | * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length ); |
739 | * if ( error ) { ... table does not exist ... } |
740 | * |
741 | * buffer = malloc( length ); |
742 | * if ( buffer == NULL ) { ... not enough memory ... } |
743 | * |
744 | * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length ); |
745 | * if ( error ) { ... could not load table ... } |
746 | * ``` |
747 | * |
748 | * Note that structures like @TT_Header or @TT_OS2 can't be used with |
749 | * this function; they are limited to @FT_Get_Sfnt_Table. Reason is that |
750 | * those structures depend on the processor architecture, with varying |
751 | * size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian). |
752 | * |
753 | */ |
754 | FT_EXPORT( FT_Error ) |
755 | FT_Load_Sfnt_Table( FT_Face face, |
756 | FT_ULong tag, |
757 | FT_Long offset, |
758 | FT_Byte* buffer, |
759 | FT_ULong* length ); |
760 | |
761 | |
762 | /************************************************************************** |
763 | * |
764 | * @function: |
765 | * FT_Sfnt_Table_Info |
766 | * |
767 | * @description: |
768 | * Return information on an SFNT table. |
769 | * |
770 | * @input: |
771 | * face :: |
772 | * A handle to the source face. |
773 | * |
774 | * table_index :: |
775 | * The index of an SFNT table. The function returns |
776 | * FT_Err_Table_Missing for an invalid value. |
777 | * |
778 | * @inout: |
779 | * tag :: |
780 | * The name tag of the SFNT table. If the value is `NULL`, |
781 | * `table_index` is ignored, and `length` returns the number of SFNT |
782 | * tables in the font. |
783 | * |
784 | * @output: |
785 | * length :: |
786 | * The length of the SFNT table (or the number of SFNT tables, |
787 | * depending on `tag`). |
788 | * |
789 | * @return: |
790 | * FreeType error code. 0~means success. |
791 | * |
792 | * @note: |
793 | * While parsing fonts, FreeType handles SFNT tables with length zero as |
794 | * missing. |
795 | * |
796 | */ |
797 | FT_EXPORT( FT_Error ) |
798 | FT_Sfnt_Table_Info( FT_Face face, |
799 | FT_UInt table_index, |
800 | FT_ULong *tag, |
801 | FT_ULong *length ); |
802 | |
803 | |
804 | /************************************************************************** |
805 | * |
806 | * @function: |
807 | * FT_Get_CMap_Language_ID |
808 | * |
809 | * @description: |
810 | * Return cmap language ID as specified in the OpenType standard. |
811 | * Definitions of language ID values are in file @FT_TRUETYPE_IDS_H. |
812 | * |
813 | * @input: |
814 | * charmap :: |
815 | * The target charmap. |
816 | * |
817 | * @return: |
818 | * The language ID of `charmap`. If `charmap` doesn't belong to an SFNT |
819 | * face, just return~0 as the default value. |
820 | * |
821 | * For a format~14 cmap (to access Unicode IVS), the return value is |
822 | * 0xFFFFFFFF. |
823 | */ |
824 | FT_EXPORT( FT_ULong ) |
825 | FT_Get_CMap_Language_ID( FT_CharMap charmap ); |
826 | |
827 | |
828 | /************************************************************************** |
829 | * |
830 | * @function: |
831 | * FT_Get_CMap_Format |
832 | * |
833 | * @description: |
834 | * Return the format of an SFNT 'cmap' table. |
835 | * |
836 | * @input: |
837 | * charmap :: |
838 | * The target charmap. |
839 | * |
840 | * @return: |
841 | * The format of `charmap`. If `charmap` doesn't belong to an SFNT face, |
842 | * return -1. |
843 | */ |
844 | FT_EXPORT( FT_Long ) |
845 | FT_Get_CMap_Format( FT_CharMap charmap ); |
846 | |
847 | /* */ |
848 | |
849 | |
850 | FT_END_HEADER |
851 | |
852 | #endif /* TTTABLES_H_ */ |
853 | |
854 | |
855 | /* END */ |
856 | |