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