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