(root)/
freetype-2.13.2/
include/
freetype/
tttables.h
       1  /****************************************************************************
       2   *
       3   * tttables.h
       4   *
       5   *   Basic SFNT/TrueType tables definitions and interface
       6   *   (specification only).
       7   *
       8   * Copyright (C) 1996-2023 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  TT_Header_
      85    {
      86      FT_Fixed   Table_Version;
      87      FT_Fixed   Font_Revision;
      88  
      89      FT_Long    CheckSum_Adjust;
      90      FT_Long    Magic_Number;
      91  
      92      FT_UShort  Flags;
      93      FT_UShort  Units_Per_EM;
      94  
      95      FT_ULong   Created [2];
      96      FT_ULong   Modified[2];
      97  
      98      FT_Short   xMin;
      99      FT_Short   yMin;
     100      FT_Short   xMax;
     101      FT_Short   yMax;
     102  
     103      FT_UShort  Mac_Style;
     104      FT_UShort  Lowest_Rec_PPEM;
     105  
     106      FT_Short   Font_Direction;
     107      FT_Short   Index_To_Loc_Format;
     108      FT_Short   Glyph_Data_Format;
     109  
     110    } TT_Header;
     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  TT_HoriHeader_
     201    {
     202      FT_Fixed   Version;
     203      FT_Short   Ascender;
     204      FT_Short   Descender;
     205      FT_Short   Line_Gap;
     206  
     207      FT_UShort  advance_Width_Max;      /* advance width maximum */
     208  
     209      FT_Short   min_Left_Side_Bearing;  /* minimum left-sb       */
     210      FT_Short   min_Right_Side_Bearing; /* minimum right-sb      */
     211      FT_Short   xMax_Extent;            /* xmax extents          */
     212      FT_Short   caret_Slope_Rise;
     213      FT_Short   caret_Slope_Run;
     214      FT_Short   caret_Offset;
     215  
     216      FT_Short   Reserved[4];
     217  
     218      FT_Short   metric_Data_Format;
     219      FT_UShort  number_Of_HMetrics;
     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*      long_metrics;
     226      void*      short_metrics;
     227  
     228    } TT_HoriHeader;
     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  TT_VertHeader_
     319    {
     320      FT_Fixed   Version;
     321      FT_Short   Ascender;
     322      FT_Short   Descender;
     323      FT_Short   Line_Gap;
     324  
     325      FT_UShort  advance_Height_Max;      /* advance height maximum */
     326  
     327      FT_Short   min_Top_Side_Bearing;    /* minimum top-sb          */
     328      FT_Short   min_Bottom_Side_Bearing; /* minimum bottom-sb       */
     329      FT_Short   yMax_Extent;             /* ymax extents            */
     330      FT_Short   caret_Slope_Rise;
     331      FT_Short   caret_Slope_Run;
     332      FT_Short   caret_Offset;
     333  
     334      FT_Short   Reserved[4];
     335  
     336      FT_Short   metric_Data_Format;
     337      FT_UShort  number_Of_VMetrics;
     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*      long_metrics;
     344      void*      short_metrics;
     345  
     346    } TT_VertHeader;
     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   ulCodePageRange1;       /* Bits 0-31   */
     415      FT_ULong   ulCodePageRange2;       /* 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/20 points) */
     428      FT_UShort  usUpperOpticalPointSize;       /* in twips (1/20 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 */