/****************************************************************************
 *
 * tttypes.h
 *
 *   Basic SFNT/TrueType type definitions and interface (specification
 *   only).
 *
 * Copyright (C) 1996-2023 by
 * David Turner, Robert Wilhelm, and Werner Lemberg.
 *
 * This file is part of the FreeType project, and may only be used,
 * modified, and distributed under the terms of the FreeType project
 * license, LICENSE.TXT.  By continuing to use, modify, or distribute
 * this file you indicate that you have read the license and
 * understand and accept it fully.
 *
 */


#ifndef TTTYPES_H_
#define TTTYPES_H_


#include <freetype/tttables.h>
#include <freetype/internal/ftobjs.h>
#include <freetype/ftcolor.h>

#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
#include <freetype/ftmm.h>
#endif


FT_BEGIN_HEADER


  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/
  /***                                                                   ***/
  /***                                                                   ***/
  /***             REQUIRED TRUETYPE/OPENTYPE TABLES DEFINITIONS         ***/
  /***                                                                   ***/
  /***                                                                   ***/
  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/


  /**************************************************************************
   *
   * @struct:
   *   TTC_HeaderRec
   *
   * @description:
   *   TrueType collection header.  This table contains the offsets of the
   *   font headers of each distinct TrueType face in the file.
   *
   * @fields:
   *   tag ::
   *     Must be 'ttc~' to indicate a TrueType collection.
   *
   *   version ::
   *     The version number.
   *
   *   count ::
   *     The number of faces in the collection.  The specification says this
   *     should be an unsigned long, but we use a signed long since we need
   *     the value -1 for specific purposes.
   *
   *   offsets ::
   *     The offsets of the font headers, one per face.
   */
  typedef struct  TTC_HeaderRec_
  {
    FT_ULong   tag;
    FT_Fixed   version;
    FT_Long    count;
    FT_ULong*  offsets;

  } TTC_HeaderRec;


  /**************************************************************************
   *
   * @struct:
   *   SFNT_HeaderRec
   *
   * @description:
   *   SFNT file format header.
   *
   * @fields:
   *   format_tag ::
   *     The font format tag.
   *
   *   num_tables ::
   *     The number of tables in file.
   *
   *   search_range ::
   *     Must be '16 * (max power of 2 <= num_tables)'.
   *
   *   entry_selector ::
   *     Must be log2 of 'search_range / 16'.
   *
   *   range_shift ::
   *     Must be 'num_tables * 16 - search_range'.
   */
  typedef struct  SFNT_HeaderRec_
  {
    FT_ULong   format_tag;
    FT_UShort  num_tables;
    FT_UShort  search_range;
    FT_UShort  entry_selector;
    FT_UShort  range_shift;

    FT_ULong   offset;  /* not in file */

  } SFNT_HeaderRec, *SFNT_Header;


  /**************************************************************************
   *
   * @struct:
   *   TT_TableRec
   *
   * @description:
   *   This structure describes a given table of a TrueType font.
   *
   * @fields:
   *   Tag ::
   *     A four-bytes tag describing the table.
   *
   *   CheckSum ::
   *     The table checksum.  This value can be ignored.
   *
   *   Offset ::
   *     The offset of the table from the start of the TrueType font in its
   *     resource.
   *
   *   Length ::
   *     The table length (in bytes).
   */
  typedef struct  TT_TableRec_
  {
    FT_ULong  Tag;        /*        table type */
    FT_ULong  CheckSum;   /*    table checksum */
    FT_ULong  Offset;     /* table file offset */
    FT_ULong  Length;     /*      table length */

  } TT_TableRec, *TT_Table;


  /**************************************************************************
   *
   * @struct:
   *   TT_LongMetricsRec
   *
   * @description:
   *   A structure modeling the long metrics of the 'hmtx' and 'vmtx'
   *   TrueType tables.  The values are expressed in font units.
   *
   * @fields:
   *   advance ::
   *     The advance width or height for the glyph.
   *
   *   bearing ::
   *     The left-side or top-side bearing for the glyph.
   */
  typedef struct  TT_LongMetricsRec_
  {
    FT_UShort  advance;
    FT_Short   bearing;

  } TT_LongMetricsRec, *TT_LongMetrics;


  /**************************************************************************
   *
   * @type:
   *   TT_ShortMetrics
   *
   * @description:
   *   A simple type to model the short metrics of the 'hmtx' and 'vmtx'
   *   tables.
   */
  typedef FT_Short  TT_ShortMetrics;


  /**************************************************************************
   *
   * @struct:
   *   TT_NameRec
   *
   * @description:
   *   A structure modeling TrueType name records.  Name records are used to
   *   store important strings like family name, style name, copyright,
   *   etc. in _localized_ versions (i.e., language, encoding, etc).
   *
   * @fields:
   *   platformID ::
   *     The ID of the name's encoding platform.
   *
   *   encodingID ::
   *     The platform-specific ID for the name's encoding.
   *
   *   languageID ::
   *     The platform-specific ID for the name's language.
   *
   *   nameID ::
   *     The ID specifying what kind of name this is.
   *
   *   stringLength ::
   *     The length of the string in bytes.
   *
   *   stringOffset ::
   *     The offset to the string in the 'name' table.
   *
   *   string ::
   *     A pointer to the string's bytes.  Note that these are usually UTF-16
   *     encoded characters.
   */
  typedef struct  TT_NameRec_
  {
    FT_UShort  platformID;
    FT_UShort  encodingID;
    FT_UShort  languageID;
    FT_UShort  nameID;
    FT_UShort  stringLength;
    FT_ULong   stringOffset;

    /* this last field is not defined in the spec */
    /* but used by the FreeType engine            */

    FT_Byte*  string;

  } TT_NameRec, *TT_Name;


  /**************************************************************************
   *
   * @struct:
   *   TT_LangTagRec
   *
   * @description:
   *   A structure modeling language tag records in SFNT 'name' tables,
   *   introduced in OpenType version 1.6.
   *
   * @fields:
   *   stringLength ::
   *     The length of the string in bytes.
   *
   *   stringOffset ::
   *     The offset to the string in the 'name' table.
   *
   *   string ::
   *     A pointer to the string's bytes.  Note that these are UTF-16BE
   *     encoded characters.
   */
  typedef struct TT_LangTagRec_
  {
    FT_UShort  stringLength;
    FT_ULong   stringOffset;

    /* this last field is not defined in the spec */
    /* but used by the FreeType engine            */

    FT_Byte*  string;

  } TT_LangTagRec, *TT_LangTag;


  /**************************************************************************
   *
   * @struct:
   *   TT_NameTableRec
   *
   * @description:
   *   A structure modeling the TrueType name table.
   *
   * @fields:
   *   format ::
   *     The format of the name table.
   *
   *   numNameRecords ::
   *     The number of names in table.
   *
   *   storageOffset ::
   *     The offset of the name table in the 'name' TrueType table.
   *
   *   names ::
   *     An array of name records.
   *
   *   numLangTagRecords ::
   *     The number of language tags in table.
   *
   *   langTags ::
   *     An array of language tag records.
   *
   *   stream ::
   *     The file's input stream.
   */
  typedef struct  TT_NameTableRec_
  {
    FT_UShort       format;
    FT_UInt         numNameRecords;
    FT_UInt         storageOffset;
    TT_NameRec*     names;
    FT_UInt         numLangTagRecords;
    TT_LangTagRec*  langTags;
    FT_Stream       stream;

  } TT_NameTableRec, *TT_NameTable;


  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/
  /***                                                                   ***/
  /***                                                                   ***/
  /***             OPTIONAL TRUETYPE/OPENTYPE TABLES DEFINITIONS         ***/
  /***                                                                   ***/
  /***                                                                   ***/
  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/


  /**************************************************************************
   *
   * @struct:
   *   TT_GaspRangeRec
   *
   * @description:
   *   A tiny structure used to model a gasp range according to the TrueType
   *   specification.
   *
   * @fields:
   *   maxPPEM ::
   *     The maximum ppem value to which `gaspFlag` applies.
   *
   *   gaspFlag ::
   *     A flag describing the grid-fitting and anti-aliasing modes to be
   *     used.
   */
  typedef struct  TT_GaspRangeRec_
  {
    FT_UShort  maxPPEM;
    FT_UShort  gaspFlag;

  } TT_GaspRangeRec, *TT_GaspRange;


#define TT_GASP_GRIDFIT  0x01
#define TT_GASP_DOGRAY   0x02


  /**************************************************************************
   *
   * @struct:
   *   TT_GaspRec
   *
   * @description:
   *   A structure modeling the TrueType 'gasp' table used to specify
   *   grid-fitting and anti-aliasing behaviour.
   *
   * @fields:
   *   version ::
   *     The version number.
   *
   *   numRanges ::
   *     The number of gasp ranges in table.
   *
   *   gaspRanges ::
   *     An array of gasp ranges.
   */
  typedef struct  TT_Gasp_
  {
    FT_UShort     version;
    FT_UShort     numRanges;
    TT_GaspRange  gaspRanges;

  } TT_GaspRec;


  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/
  /***                                                                   ***/
  /***                                                                   ***/
  /***                    EMBEDDED BITMAPS SUPPORT                       ***/
  /***                                                                   ***/
  /***                                                                   ***/
  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/


  /**************************************************************************
   *
   * @struct:
   *   TT_SBit_MetricsRec
   *
   * @description:
   *   A structure used to hold the big metrics of a given glyph bitmap in a
   *   TrueType or OpenType font.  These are usually found in the 'EBDT'
   *   (Microsoft) or 'bloc' (Apple) table.
   *
   * @fields:
   *   height ::
   *     The glyph height in pixels.
   *
   *   width ::
   *     The glyph width in pixels.
   *
   *   horiBearingX ::
   *     The horizontal left bearing.
   *
   *   horiBearingY ::
   *     The horizontal top bearing.
   *
   *   horiAdvance ::
   *     The horizontal advance.
   *
   *   vertBearingX ::
   *     The vertical left bearing.
   *
   *   vertBearingY ::
   *     The vertical top bearing.
   *
   *   vertAdvance ::
   *     The vertical advance.
   */
  typedef struct  TT_SBit_MetricsRec_
  {
    FT_UShort  height;
    FT_UShort  width;

    FT_Short   horiBearingX;
    FT_Short   horiBearingY;
    FT_UShort  horiAdvance;

    FT_Short   vertBearingX;
    FT_Short   vertBearingY;
    FT_UShort  vertAdvance;

  } TT_SBit_MetricsRec, *TT_SBit_Metrics;


  /**************************************************************************
   *
   * @struct:
   *   TT_SBit_SmallMetricsRec
   *
   * @description:
   *   A structure used to hold the small metrics of a given glyph bitmap in
   *   a TrueType or OpenType font.  These are usually found in the 'EBDT'
   *   (Microsoft) or the 'bdat' (Apple) table.
   *
   * @fields:
   *   height ::
   *     The glyph height in pixels.
   *
   *   width ::
   *     The glyph width in pixels.
   *
   *   bearingX ::
   *     The left-side bearing.
   *
   *   bearingY ::
   *     The top-side bearing.
   *
   *   advance ::
   *     The advance width or height.
   */
  typedef struct  TT_SBit_Small_Metrics_
  {
    FT_Byte  height;
    FT_Byte  width;

    FT_Char  bearingX;
    FT_Char  bearingY;
    FT_Byte  advance;

  } TT_SBit_SmallMetricsRec, *TT_SBit_SmallMetrics;


  /**************************************************************************
   *
   * @struct:
   *   TT_SBit_LineMetricsRec
   *
   * @description:
   *   A structure used to describe the text line metrics of a given bitmap
   *   strike, for either a horizontal or vertical layout.
   *
   * @fields:
   *   ascender ::
   *     The ascender in pixels.
   *
   *   descender ::
   *     The descender in pixels.
   *
   *   max_width ::
   *     The maximum glyph width in pixels.
   *
   *   caret_slope_enumerator ::
   *     Rise of the caret slope, typically set to 1 for non-italic fonts.
   *
   *   caret_slope_denominator ::
   *     Rise of the caret slope, typically set to 0 for non-italic fonts.
   *
   *   caret_offset ::
   *     Offset in pixels to move the caret for proper positioning.
   *
   *   min_origin_SB ::
   *     Minimum of horiBearingX (resp.  vertBearingY).
   *   min_advance_SB ::
   *     Minimum of
   *
   *     horizontal advance - ( horiBearingX + width )
   *
   *     resp.
   *
   *     vertical advance - ( vertBearingY + height )
   *
   *   max_before_BL ::
   *     Maximum of horiBearingY (resp.  vertBearingY).
   *
   *   min_after_BL ::
   *     Minimum of
   *
   *     horiBearingY - height
   *
   *     resp.
   *
   *     vertBearingX - width
   *
   *   pads ::
   *     Unused (to make the size of the record a multiple of 32 bits.
   */
  typedef struct  TT_SBit_LineMetricsRec_
  {
    FT_Char  ascender;
    FT_Char  descender;
    FT_Byte  max_width;
    FT_Char  caret_slope_numerator;
    FT_Char  caret_slope_denominator;
    FT_Char  caret_offset;
    FT_Char  min_origin_SB;
    FT_Char  min_advance_SB;
    FT_Char  max_before_BL;
    FT_Char  min_after_BL;
    FT_Char  pads[2];

  } TT_SBit_LineMetricsRec, *TT_SBit_LineMetrics;


  /**************************************************************************
   *
   * @struct:
   *   TT_SBit_RangeRec
   *
   * @description:
   *   A TrueType/OpenType subIndexTable as defined in the 'EBLC' (Microsoft)
   *   or 'bloc' (Apple) tables.
   *
   * @fields:
   *   first_glyph ::
   *     The first glyph index in the range.
   *
   *   last_glyph ::
   *     The last glyph index in the range.
   *
   *   index_format ::
   *     The format of index table.  Valid values are 1 to 5.
   *
   *   image_format ::
   *     The format of 'EBDT' image data.
   *
   *   image_offset ::
   *     The offset to image data in 'EBDT'.
   *
   *   image_size ::
   *     For index formats 2 and 5.  This is the size in bytes of each glyph
   *     bitmap.
   *
   *   big_metrics ::
   *     For index formats 2 and 5.  This is the big metrics for each glyph
   *     bitmap.
   *
   *   num_glyphs ::
   *     For index formats 4 and 5.  This is the number of glyphs in the code
   *     array.
   *
   *   glyph_offsets ::
   *     For index formats 1 and 3.
   *
   *   glyph_codes ::
   *     For index formats 4 and 5.
   *
   *   table_offset ::
   *     The offset of the index table in the 'EBLC' table.  Only used during
   *     strike loading.
   */
  typedef struct  TT_SBit_RangeRec_
  {
    FT_UShort           first_glyph;
    FT_UShort           last_glyph;

    FT_UShort           index_format;
    FT_UShort           image_format;
    FT_ULong            image_offset;

    FT_ULong            image_size;
    TT_SBit_MetricsRec  metrics;
    FT_ULong            num_glyphs;

    FT_ULong*           glyph_offsets;
    FT_UShort*          glyph_codes;

    FT_ULong            table_offset;

  } TT_SBit_RangeRec, *TT_SBit_Range;


  /**************************************************************************
   *
   * @struct:
   *   TT_SBit_StrikeRec
   *
   * @description:
   *   A structure used describe a given bitmap strike in the 'EBLC'
   *   (Microsoft) or 'bloc' (Apple) tables.
   *
   * @fields:
   *  num_index_ranges ::
   *    The number of index ranges.
   *
   *  index_ranges ::
   *    An array of glyph index ranges.
   *
   *  color_ref ::
   *    Unused.  `color_ref` is put in for future enhancements, but these
   *    fields are already in use by other platforms (e.g. Newton).  For
   *    details, please see
   *
   *    https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html
   *
   *  hori ::
   *    The line metrics for horizontal layouts.
   *
   *  vert ::
   *    The line metrics for vertical layouts.
   *
   *  start_glyph ::
   *    The lowest glyph index for this strike.
   *
   *  end_glyph ::
   *    The highest glyph index for this strike.
   *
   *  x_ppem ::
   *    The number of horizontal pixels per EM.
   *
   *  y_ppem ::
   *    The number of vertical pixels per EM.
   *
   *  bit_depth ::
   *    The bit depth.  Valid values are 1, 2, 4, and 8.
   *
   *  flags ::
   *    Is this a vertical or horizontal strike?  For details, please see
   *
   *    https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html
   */
  typedef struct  TT_SBit_StrikeRec_
  {
    FT_Int                  num_ranges;
    TT_SBit_Range           sbit_ranges;
    FT_ULong                ranges_offset;

    FT_ULong                color_ref;

    TT_SBit_LineMetricsRec  hori;
    TT_SBit_LineMetricsRec  vert;

    FT_UShort               start_glyph;
    FT_UShort               end_glyph;

    FT_Byte                 x_ppem;
    FT_Byte                 y_ppem;

    FT_Byte                 bit_depth;
    FT_Char                 flags;

  } TT_SBit_StrikeRec, *TT_SBit_Strike;


  /**************************************************************************
   *
   * @struct:
   *   TT_SBit_ComponentRec
   *
   * @description:
   *   A simple structure to describe a compound sbit element.
   *
   * @fields:
   *   glyph_code ::
   *     The element's glyph index.
   *
   *   x_offset ::
   *     The element's left bearing.
   *
   *   y_offset ::
   *     The element's top bearing.
   */
  typedef struct  TT_SBit_ComponentRec_
  {
    FT_UShort  glyph_code;
    FT_Char    x_offset;
    FT_Char    y_offset;

  } TT_SBit_ComponentRec, *TT_SBit_Component;


  /**************************************************************************
   *
   * @struct:
   *   TT_SBit_ScaleRec
   *
   * @description:
   *   A structure used describe a given bitmap scaling table, as defined in
   *   the 'EBSC' table.
   *
   * @fields:
   *   hori ::
   *     The horizontal line metrics.
   *
   *   vert ::
   *     The vertical line metrics.
   *
   *   x_ppem ::
   *     The number of horizontal pixels per EM.
   *
   *   y_ppem ::
   *     The number of vertical pixels per EM.
   *
   *   x_ppem_substitute ::
   *     Substitution x_ppem value.
   *
   *   y_ppem_substitute ::
   *     Substitution y_ppem value.
   */
  typedef struct  TT_SBit_ScaleRec_
  {
    TT_SBit_LineMetricsRec  hori;
    TT_SBit_LineMetricsRec  vert;

    FT_Byte                 x_ppem;
    FT_Byte                 y_ppem;

    FT_Byte                 x_ppem_substitute;
    FT_Byte                 y_ppem_substitute;

  } TT_SBit_ScaleRec, *TT_SBit_Scale;


  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/
  /***                                                                   ***/
  /***                                                                   ***/
  /***                  POSTSCRIPT GLYPH NAMES SUPPORT                   ***/
  /***                                                                   ***/
  /***                                                                   ***/
  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/


  /**************************************************************************
   *
   * @struct:
   *   TT_Post_NamesRec
   *
   * @description:
   *   Postscript names table, either format 2.0 or 2.5.
   *
   * @fields:
   *   loaded ::
   *     A flag to indicate whether the PS names are loaded.
   *
   *   num_glyphs ::
   *     The number of named glyphs in the table.
   *
   *   num_names ::
   *     The number of PS names stored in the table.
   *
   *   glyph_indices ::
   *     The indices of the glyphs in the names arrays.
   *
   *   glyph_names ::
   *     The PS names not in Mac Encoding.
   */
  typedef struct  TT_Post_NamesRec_
  {
    FT_Bool     loaded;
    FT_UShort   num_glyphs;
    FT_UShort   num_names;
    FT_UShort*  glyph_indices;
    FT_Byte**   glyph_names;

  } TT_Post_NamesRec, *TT_Post_Names;


  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/
  /***                                                                   ***/
  /***                                                                   ***/
  /***                    GX VARIATION TABLE SUPPORT                     ***/
  /***                                                                   ***/
  /***                                                                   ***/
  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/


#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
  typedef struct GX_BlendRec_  *GX_Blend;
#endif

  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/
  /***                                                                   ***/
  /***                                                                   ***/
  /***              EMBEDDED BDF PROPERTIES TABLE SUPPORT                ***/
  /***                                                                   ***/
  /***                                                                   ***/
  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/

  /*
   * These types are used to support a `BDF ' table that isn't part of the
   * official TrueType specification.  It is mainly used in SFNT-based bitmap
   * fonts that were generated from a set of BDF fonts.
   *
   * The format of the table is as follows.
   *
   *   USHORT version `BDF ' table version number, should be 0x0001.  USHORT
   *   strikeCount Number of strikes (bitmap sizes) in this table.  ULONG
   *   stringTable Offset (from start of BDF table) to string
   *                         table.
   *
   * This is followed by an array of `strikeCount' descriptors, having the
   * following format.
   *
   *   USHORT ppem Vertical pixels per EM for this strike.  USHORT numItems
   *   Number of items for this strike (properties and
   *                         atoms).  Maximum is 255.
   *
   * This array in turn is followed by `strikeCount' value sets.  Each `value
   * set' is an array of `numItems' items with the following format.
   *
   *   ULONG    item_name    Offset in string table to item name.
   *   USHORT   item_type    The item type.  Possible values are
   *                            0 => string (e.g., COMMENT)
   *                            1 => atom   (e.g., FONT or even SIZE)
   *                            2 => int32
   *                            3 => uint32
   *                         0x10 => A flag to indicate a properties.  This
   *                                 is ORed with the above values.
   *   ULONG    item_value   For strings  => Offset into string table without
   *                                         the corresponding double quotes.
   *                         For atoms    => Offset into string table.
   *                         For integers => Direct value.
   *
   * All strings in the string table consist of bytes and are
   * zero-terminated.
   *
   */

#ifdef TT_CONFIG_OPTION_BDF

  typedef struct  TT_BDFRec_
  {
    FT_Byte*   table;
    FT_Byte*   table_end;
    FT_Byte*   strings;
    FT_ULong   strings_size;
    FT_UInt    num_strikes;
    FT_Bool    loaded;

  } TT_BDFRec, *TT_BDF;

#endif /* TT_CONFIG_OPTION_BDF */

  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/
  /***                                                                   ***/
  /***                                                                   ***/
  /***                  ORIGINAL TT_FACE CLASS DEFINITION                ***/
  /***                                                                   ***/
  /***                                                                   ***/
  /*************************************************************************/
  /*************************************************************************/
  /*************************************************************************/


  /**************************************************************************
   *
   * This structure/class is defined here because it is common to the
   * following formats: TTF, OpenType-TT, and OpenType-CFF.
   *
   * Note, however, that the classes TT_Size and TT_GlyphSlot are not shared
   * between font drivers, and are thus defined in `ttobjs.h`.
   *
   */


  /**************************************************************************
   *
   * @type:
   *   TT_Face
   *
   * @description:
   *   A handle to a TrueType face/font object.  A TT_Face encapsulates the
   *   resolution and scaling independent parts of a TrueType font resource.
   *
   * @note:
   *   The TT_Face structure is also used as a 'parent class' for the
   *   OpenType-CFF class (T2_Face).
   */
  typedef struct TT_FaceRec_*  TT_Face;


  /* a function type used for the truetype bytecode interpreter hooks */
  typedef FT_Error
  (*TT_Interpreter)( void*  exec_context );

  /* forward declaration */
  typedef struct TT_LoaderRec_*  TT_Loader;


  /**************************************************************************
   *
   * @functype:
   *   TT_Loader_GotoTableFunc
   *
   * @description:
   *   Seeks a stream to the start of a given TrueType table.
   *
   * @input:
   *   face ::
   *     A handle to the target face object.
   *
   *   tag ::
   *     A 4-byte tag used to name the table.
   *
   *   stream ::
   *     The input stream.
   *
   * @output:
   *   length ::
   *     The length of the table in bytes.  Set to 0 if not needed.
   *
   * @return:
   *   FreeType error code.  0 means success.
   *
   * @note:
   *   The stream cursor must be at the font file's origin.
   */
  typedef FT_Error
  (*TT_Loader_GotoTableFunc)( TT_Face    face,
                              FT_ULong   tag,
                              FT_Stream  stream,
                              FT_ULong*  length );


  /**************************************************************************
   *
   * @functype:
   *   TT_Loader_StartGlyphFunc
   *
   * @description:
   *   Seeks a stream to the start of a given glyph element, and opens a
   *   frame for it.
   *
   * @input:
   *   loader ::
   *     The current TrueType glyph loader object.
   *
   *     glyph index :: The index of the glyph to access.
   *
   *   offset ::
   *     The offset of the glyph according to the 'locations' table.
   *
   *   byte_count ::
   *     The size of the frame in bytes.
   *
   * @return:
   *   FreeType error code.  0 means success.
   *
   * @note:
   *   This function is normally equivalent to FT_STREAM_SEEK(offset)
   *   followed by FT_FRAME_ENTER(byte_count) with the loader's stream, but
   *   alternative formats (e.g. compressed ones) might use something
   *   different.
   */
  typedef FT_Error
  (*TT_Loader_StartGlyphFunc)( TT_Loader  loader,
                               FT_UInt    glyph_index,
                               FT_ULong   offset,
                               FT_UInt    byte_count );


  /**************************************************************************
   *
   * @functype:
   *   TT_Loader_ReadGlyphFunc
   *
   * @description:
   *   Reads one glyph element (its header, a simple glyph, or a composite)
   *   from the loader's current stream frame.
   *
   * @input:
   *   loader ::
   *     The current TrueType glyph loader object.
   *
   * @return:
   *   FreeType error code.  0 means success.
   */
  typedef FT_Error
  (*TT_Loader_ReadGlyphFunc)( TT_Loader  loader );


  /**************************************************************************
   *
   * @functype:
   *   TT_Loader_EndGlyphFunc
   *
   * @description:
   *   Closes the current loader stream frame for the glyph.
   *
   * @input:
   *   loader ::
   *     The current TrueType glyph loader object.
   */
  typedef void
  (*TT_Loader_EndGlyphFunc)( TT_Loader  loader );


  typedef enum TT_SbitTableType_
  {
    TT_SBIT_TABLE_TYPE_NONE = 0,
    TT_SBIT_TABLE_TYPE_EBLC, /* `EBLC' (Microsoft), */
                             /* `bloc' (Apple)      */
    TT_SBIT_TABLE_TYPE_CBLC, /* `CBLC' (Google)     */
    TT_SBIT_TABLE_TYPE_SBIX, /* `sbix' (Apple)      */

    /* do not remove */
    TT_SBIT_TABLE_TYPE_MAX

  } TT_SbitTableType;


  /* OpenType 1.8 brings new tables for variation font support;  */
  /* to make the old MM and GX fonts still work we need to check */
  /* the presence (and validity) of the functionality provided   */
  /* by those tables.  The following flag macros are for the     */
  /* field `variation_support'.                                  */
  /*                                                             */
  /* Note that `fvar' gets checked immediately at font loading,  */
  /* while the other features are only loaded if MM support is   */
  /* actually requested.                                         */

  /* FVAR */
#define TT_FACE_FLAG_VAR_FVAR  ( 1 << 0 )

  /* HVAR */
#define TT_FACE_FLAG_VAR_HADVANCE  ( 1 << 1 )
#define TT_FACE_FLAG_VAR_LSB       ( 1 << 2 )
#define TT_FACE_FLAG_VAR_RSB       ( 1 << 3 )

  /* VVAR */
#define TT_FACE_FLAG_VAR_VADVANCE  ( 1 << 4 )
#define TT_FACE_FLAG_VAR_TSB       ( 1 << 5 )
#define TT_FACE_FLAG_VAR_BSB       ( 1 << 6 )
#define TT_FACE_FLAG_VAR_VORG      ( 1 << 7 )

  /* MVAR */
#define TT_FACE_FLAG_VAR_MVAR  ( 1 << 8 )


  /**************************************************************************
   *
   *                        TrueType Face Type
   *
   * @struct:
   *   TT_Face
   *
   * @description:
   *   The TrueType face class.  These objects model the resolution and
   *   point-size independent data found in a TrueType font file.
   *
   * @fields:
   *   root ::
   *     The base FT_Face structure, managed by the base layer.
   *
   *   ttc_header ::
   *     The TrueType collection header, used when the file is a 'ttc' rather
   *     than a 'ttf'.  For ordinary font files, the field `ttc_header.count`
   *     is set to 0.
   *
   *   format_tag ::
   *     The font format tag.
   *
   *   num_tables ::
   *     The number of TrueType tables in this font file.
   *
   *   dir_tables ::
   *     The directory of TrueType tables for this font file.
   *
   *   header ::
   *     The font's font header ('head' table).  Read on font opening.
   *
   *   horizontal ::
   *     The font's horizontal header ('hhea' table).  This field also
   *     contains the associated horizontal metrics table ('hmtx').
   *
   *   max_profile ::
   *     The font's maximum profile table.  Read on font opening.  Note that
   *     some maximum values cannot be taken directly from this table.  We
   *     thus define additional fields below to hold the computed maxima.
   *
   *   vertical_info ::
   *     A boolean which is set when the font file contains vertical metrics.
   *     If not, the value of the 'vertical' field is undefined.
   *
   *   vertical ::
   *     The font's vertical header ('vhea' table).  This field also contains
   *     the associated vertical metrics table ('vmtx'), if found.
   *     IMPORTANT: The contents of this field is undefined if the
   *     `vertical_info` field is unset.
   *
   *   num_names ::
   *     The number of name records within this TrueType font.
   *
   *   name_table ::
   *     The table of name records ('name').
   *
   *   os2 ::
   *     The font's OS/2 table ('OS/2').
   *
   *   postscript ::
   *     The font's PostScript table ('post' table).  The PostScript glyph
   *     names are not loaded by the driver on face opening.  See the
   *     'ttpost' module for more details.
   *
   *   cmap_table ::
   *     Address of the face's 'cmap' SFNT table in memory (it's an extracted
   *     frame).
   *
   *   cmap_size ::
   *     The size in bytes of the `cmap_table` described above.
   *
   *   goto_table ::
   *     A function called by each TrueType table loader to position a
   *     stream's cursor to the start of a given table according to its tag.
   *     It defaults to TT_Goto_Face but can be different for strange formats
   *     (e.g.  Type 42).
   *
   *   access_glyph_frame ::
   *     A function used to access the frame of a given glyph within the
   *     face's font file.
   *
   *   forget_glyph_frame ::
   *     A function used to forget the frame of a given glyph when all data
   *     has been loaded.
   *
   *   read_glyph_header ::
   *     A function used to read a glyph header.  It must be called between
   *     an 'access' and 'forget'.
   *
   *   read_simple_glyph ::
   *     A function used to read a simple glyph.  It must be called after the
   *     header was read, and before the 'forget'.
   *
   *   read_composite_glyph ::
   *     A function used to read a composite glyph.  It must be called after
   *     the header was read, and before the 'forget'.
   *
   *   sfnt ::
   *     A pointer to the SFNT service.
   *
   *   psnames ::
   *     A pointer to the PostScript names service.
   *
   *   mm ::
   *     A pointer to the Multiple Masters service.
   *
   *   var ::
   *     A pointer to the Metrics Variations service.
   *
   *   hdmx ::
   *     The face's horizontal device metrics ('hdmx' table).  This table is
   *     optional in TrueType/OpenType fonts.
   *
   *   gasp ::
   *     The grid-fitting and scaling properties table ('gasp').  This table
   *     is optional in TrueType/OpenType fonts.
   *
   *   pclt ::
   *     The 'pclt' SFNT table.
   *
   *   num_sbit_scales ::
   *     The number of sbit scales for this font.
   *
   *   sbit_scales ::
   *     Array of sbit scales embedded in this font.  This table is optional
   *     in a TrueType/OpenType font.
   *
   *   postscript_names ::
   *     A table used to store the Postscript names of the glyphs for this
   *     font.  See the file `ttconfig.h` for comments on the
   *     TT_CONFIG_OPTION_POSTSCRIPT_NAMES option.
   *
   *   palette_data ::
   *     Some fields from the 'CPAL' table that are directly indexed.
   *
   *   palette_index ::
   *     The current palette index, as set by @FT_Palette_Select.
   *
   *   palette ::
   *     An array containing the current palette's colors.
   *
   *   have_foreground_color ::
   *     There was a call to @FT_Palette_Set_Foreground_Color.
   *
   *   foreground_color ::
   *     The current foreground color corresponding to 'CPAL' color index
   *     0xFFFF.  Only valid if `have_foreground_color` is set.
   *
   *   font_program_size ::
   *     Size in bytecodes of the face's font program.  0 if none defined.
   *     Ignored for Type 2 fonts.
   *
   *   font_program ::
   *     The face's font program (bytecode stream) executed at load time,
   *     also used during glyph rendering.  Comes from the 'fpgm' table.
   *     Ignored for Type 2 font fonts.
   *
   *   cvt_program_size ::
   *     The size in bytecodes of the face's cvt program.  Ignored for Type 2
   *     fonts.
   *
   *   cvt_program ::
   *     The face's cvt program (bytecode stream) executed each time an
   *     instance/size is changed/reset.  Comes from the 'prep' table.
   *     Ignored for Type 2 fonts.
   *
   *   cvt_size ::
   *     Size of the control value table (in entries).  Ignored for Type 2
   *     fonts.
   *
   *   cvt ::
   *     The face's original control value table.  Coordinates are expressed
   *     in unscaled font units (in 26.6 format).  Comes from the 'cvt~'
   *     table.  Ignored for Type 2 fonts.
   *
   *     If varied by the `CVAR' table, non-integer values are possible.
   *
   *   interpreter ::
   *     A pointer to the TrueType bytecode interpreters field is also used
   *     to hook the debugger in 'ttdebug'.
   *
   *   extra ::
   *     Reserved for third-party font drivers.
   *
   *   postscript_name ::
   *     The PS name of the font.  Used by the postscript name service.
   *
   *   glyf_len ::
   *     The length of the 'glyf' table.  Needed for malformed 'loca' tables.
   *
   *   glyf_offset ::
   *     The file offset of the 'glyf' table.
   *
   *   is_cff2 ::
   *     Set if the font format is CFF2.
   *
   *   doblend ::
   *     A boolean which is set if the font should be blended (this is for GX
   *     var).
   *
   *   blend ::
   *     Contains the data needed to control GX variation tables (rather like
   *     Multiple Master data).
   *
   *   variation_support ::
   *     Flags that indicate which OpenType functionality related to font
   *     variation support is present, valid, and usable.  For example,
   *     TT_FACE_FLAG_VAR_FVAR is only set if we have at least one design
   *     axis.
   *
   *   var_postscript_prefix ::
   *     The PostScript name prefix needed for constructing a variation font
   *     instance's PS name .
   *
   *   var_postscript_prefix_len ::
   *     The length of the `var_postscript_prefix` string.
   *
   *   horz_metrics_size ::
   *     The size of the 'hmtx' table.
   *
   *   vert_metrics_size ::
   *     The size of the 'vmtx' table.
   *
   *   num_locations ::
   *     The number of glyph locations in this TrueType file.  This should be
   *     one more than the number of glyphs.  Ignored for Type 2 fonts.
   *
   *   glyph_locations ::
   *     An array of longs.  These are offsets to glyph data within the
   *     'glyf' table.  Ignored for Type 2 font faces.
   *
   *   hdmx_table ::
   *     A pointer to the 'hdmx' table.
   *
   *   hdmx_table_size ::
   *     The size of the 'hdmx' table.
   *
   *   hdmx_record_count ::
   *     The number of hdmx records.
   *
   *   hdmx_record_size ::
   *     The size of a single hdmx record.
   *
   *   hdmx_records ::
   *     A array of pointers to the 'hdmx' table records sorted by ppem.
   *
   *   sbit_table ::
   *     A pointer to the font's embedded bitmap location table.
   *
   *   sbit_table_size ::
   *     The size of `sbit_table`.
   *
   *   sbit_table_type ::
   *     The sbit table type (CBLC, sbix, etc.).
   *
   *   sbit_num_strikes ::
   *     The number of sbit strikes exposed by FreeType's API, omitting
   *     invalid strikes.
   *
   *   sbit_strike_map ::
   *     A mapping between the strike indices exposed by the API and the
   *     indices used in the font's sbit table.
   *
   *   cpal ::
   *     A pointer to data related to the 'CPAL' table.  `NULL` if the table
   *     is not available.
   *
   *   colr ::
   *     A pointer to data related to the 'COLR' table.  `NULL` if the table
   *     is not available.
   *
   *   kern_table ::
   *     A pointer to the 'kern' table.
   *
   *   kern_table_size ::
   *     The size of the 'kern' table.
   *
   *   num_kern_tables ::
   *     The number of supported kern subtables (up to 32; FreeType
   *     recognizes only horizontal ones with format 0).
   *
   *   kern_avail_bits ::
   *     The availability status of kern subtables; if bit n is set, table n
   *     is available.
   *
   *   kern_order_bits ::
   *     The sortedness status of kern subtables; if bit n is set, table n is
   *     sorted.
   *
   *   bdf ::
   *     Data related to an SFNT font's 'bdf' table; see `tttypes.h`.
   *
   *   horz_metrics_offset ::
   *     The file offset of the 'hmtx' table.
   *
   *   vert_metrics_offset ::
   *     The file offset of the 'vmtx' table.
   *
   *   sph_found_func_flags ::
   *     Flags identifying special bytecode functions (used by the v38
   *     implementation of the bytecode interpreter).
   *
   *   sph_compatibility_mode ::
   *     This flag is set if we are in ClearType backward compatibility mode
   *     (used by the v38 implementation of the bytecode interpreter).
   *
   *   ebdt_start ::
   *     The file offset of the sbit data table (CBDT, bdat, etc.).
   *
   *   ebdt_size ::
   *     The size of the sbit data table.
   */
  typedef struct  TT_FaceRec_
  {
    FT_FaceRec            root;

    TTC_HeaderRec         ttc_header;

    FT_ULong              format_tag;
    FT_UShort             num_tables;
    TT_Table              dir_tables;

    TT_Header             header;       /* TrueType header table          */
    TT_HoriHeader         horizontal;   /* TrueType horizontal header     */

    TT_MaxProfile         max_profile;

    FT_Bool               vertical_info;
    TT_VertHeader         vertical;     /* TT Vertical header, if present */

    FT_UShort             num_names;    /* number of name records  */
    TT_NameTableRec       name_table;   /* name table              */

    TT_OS2                os2;          /* TrueType OS/2 table            */
    TT_Postscript         postscript;   /* TrueType Postscript table      */

    FT_Byte*              cmap_table;   /* extracted `cmap' table */
    FT_ULong              cmap_size;

    TT_Loader_GotoTableFunc   goto_table;

    TT_Loader_StartGlyphFunc  access_glyph_frame;
    TT_Loader_EndGlyphFunc    forget_glyph_frame;
    TT_Loader_ReadGlyphFunc   read_glyph_header;
    TT_Loader_ReadGlyphFunc   read_simple_glyph;
    TT_Loader_ReadGlyphFunc   read_composite_glyph;

    /* a typeless pointer to the SFNT_Interface table used to load */
    /* the basic TrueType tables in the face object                */
    void*                 sfnt;

    /* a typeless pointer to the FT_Service_PsCMapsRec table used to */
    /* handle glyph names <-> unicode & Mac values                   */
    void*                 psnames;

#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
    /* a typeless pointer to the FT_Service_MultiMasters table used to */
    /* handle variation fonts                                          */
    void*                 mm;

    /* a typeless pointer to the FT_Service_MetricsVariationsRec table */
    /* used to handle the HVAR, VVAR, and MVAR OpenType tables by the  */
    /* "truetype" driver                                               */
    void*                 tt_var;

    /* a typeless pointer to the FT_Service_MetricsVariationsRec table */
    /* used to handle the HVAR, VVAR, and MVAR OpenType tables by this */
    /* TT_Face's driver                                                */
    void*                 face_var;
#endif

    /* a typeless pointer to the PostScript Aux service */
    void*                 psaux;


    /************************************************************************
     *
     * Optional TrueType/OpenType tables
     *
     */

    /* grid-fitting and scaling table */
    TT_GaspRec            gasp;                 /* the `gasp' table */

    /* PCL 5 table */
    TT_PCLT               pclt;

    /* embedded bitmaps support */
    FT_ULong              num_sbit_scales;
    TT_SBit_Scale         sbit_scales;

    /* postscript names table */
    TT_Post_NamesRec      postscript_names;

    /* glyph colors */
    FT_Palette_Data       palette_data;         /* since 2.10 */
    FT_UShort             palette_index;
    FT_Color*             palette;
    FT_Bool               have_foreground_color;
    FT_Color              foreground_color;


    /************************************************************************
     *
     * TrueType-specific fields (ignored by the CFF driver)
     *
     */

    /* the font program, if any */
    FT_ULong              font_program_size;
    FT_Byte*              font_program;

    /* the cvt program, if any */
    FT_ULong              cvt_program_size;
    FT_Byte*              cvt_program;

    /* the original, unscaled, control value table */
    FT_ULong              cvt_size;
    FT_Int32*             cvt;

    /* A pointer to the bytecode interpreter to use.  This is also */
    /* used to hook the debugger for the `ttdebug' utility.        */
    TT_Interpreter        interpreter;


    /************************************************************************
     *
     * Other tables or fields. This is used by derivative formats like
     * OpenType.
     *
     */

    FT_Generic            extra;

    const char*           postscript_name;

    FT_ULong              glyf_len;
    FT_ULong              glyf_offset;    /* since 2.7.1 */

    FT_Bool               is_cff2;        /* since 2.7.1 */

#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
    FT_Bool               doblend;
    GX_Blend              blend;

    FT_UInt32             variation_support;     /* since 2.7.1 */

    const char*           var_postscript_prefix;     /* since 2.7.2 */
    FT_UInt               var_postscript_prefix_len; /* since 2.7.2 */

#endif

    /* since version 2.2 */

    FT_ULong              horz_metrics_size;
    FT_ULong              vert_metrics_size;

    FT_ULong              num_locations; /* up to 0xFFFF + 1 */
    FT_Byte*              glyph_locations;

    FT_Byte*              hdmx_table;
    FT_ULong              hdmx_table_size;
    FT_UInt               hdmx_record_count;
    FT_ULong              hdmx_record_size;
    FT_Byte**             hdmx_records;

    FT_Byte*              sbit_table;
    FT_ULong              sbit_table_size;
    TT_SbitTableType      sbit_table_type;
    FT_UInt               sbit_num_strikes;
    FT_UInt*              sbit_strike_map;

    FT_Byte*              kern_table;
    FT_ULong              kern_table_size;
    FT_UInt               num_kern_tables;
    FT_UInt32             kern_avail_bits;
    FT_UInt32             kern_order_bits;

#ifdef TT_CONFIG_OPTION_BDF
    TT_BDFRec             bdf;
#endif /* TT_CONFIG_OPTION_BDF */

    /* since 2.3.0 */
    FT_ULong              horz_metrics_offset;
    FT_ULong              vert_metrics_offset;

#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
    /* since 2.4.12 */
    FT_ULong              sph_found_func_flags; /* special functions found */
                                                /* for this face           */
    FT_Bool               sph_compatibility_mode;
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */

#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
    /* since 2.7 */
    FT_ULong              ebdt_start;  /* either `CBDT', `EBDT', or `bdat' */
    FT_ULong              ebdt_size;
#endif

    /* since 2.10 */
    void*                 cpal;
    void*                 colr;

    /* since 2.12 */
    void*                 svg;

  } TT_FaceRec;


  /**************************************************************************
   *
   * @struct:
   *    TT_GlyphZoneRec
   *
   * @description:
   *   A glyph zone is used to load, scale and hint glyph outline
   *   coordinates.
   *
   * @fields:
   *   memory ::
   *     A handle to the memory manager.
   *
   *   max_points ::
   *     The maximum size in points of the zone.
   *
   *   max_contours ::
   *     Max size in links contours of the zone.
   *
   *   n_points ::
   *     The current number of points in the zone.
   *
   *   n_contours ::
   *     The current number of contours in the zone.
   *
   *   org ::
   *     The original glyph coordinates (font units/scaled).
   *
   *   cur ::
   *     The current glyph coordinates (scaled/hinted).
   *
   *   tags ::
   *     The point control tags.
   *
   *   contours ::
   *     The contours end points.
   *
   *   first_point ::
   *     Offset of the current subglyph's first point.
   */
  typedef struct  TT_GlyphZoneRec_
  {
    FT_Memory   memory;
    FT_UShort   max_points;
    FT_Short    max_contours;
    FT_UShort   n_points;    /* number of points in zone    */
    FT_Short    n_contours;  /* number of contours          */

    FT_Vector*  org;         /* original point coordinates  */
    FT_Vector*  cur;         /* current point coordinates   */
    FT_Vector*  orus;        /* original (unscaled) point coordinates */

    FT_Byte*    tags;        /* current touch flags         */
    FT_UShort*  contours;    /* contour end points          */

    FT_UShort   first_point; /* offset of first (#0) point  */

  } TT_GlyphZoneRec, *TT_GlyphZone;


  /* handle to execution context */
  typedef struct TT_ExecContextRec_*  TT_ExecContext;


  /**************************************************************************
   *
   * @type:
   *   TT_Size
   *
   * @description:
   *   A handle to a TrueType size object.
   */
  typedef struct TT_SizeRec_*  TT_Size;


  /* glyph loader structure */
  typedef struct  TT_LoaderRec_
  {
    TT_Face          face;
    TT_Size          size;
    FT_GlyphSlot     glyph;
    FT_GlyphLoader   gloader;

    FT_ULong         load_flags;
    FT_UInt          glyph_index;

    FT_Stream        stream;
    FT_UInt          byte_len;

    FT_Short         n_contours;
    FT_BBox          bbox;
    FT_Int           left_bearing;
    FT_Int           advance;
    FT_Int           linear;
    FT_Bool          linear_def;
    FT_Vector        pp1;
    FT_Vector        pp2;

    /* the zone where we load our glyphs */
    TT_GlyphZoneRec  base;
    TT_GlyphZoneRec  zone;

    TT_ExecContext   exec;
    FT_Byte*         instructions;
    FT_ULong         ins_pos;

    /* for possible extensibility in other formats */
    void*            other;

    /* since version 2.1.8 */
    FT_Int           top_bearing;
    FT_Int           vadvance;
    FT_Vector        pp3;
    FT_Vector        pp4;

    /* since version 2.2.1 */
    FT_Byte*         cursor;
    FT_Byte*         limit;

    /* since version 2.6.2 */
    FT_ListRec       composites;

    /* since version 2.11.2 */
    FT_Byte*         widthp;

  } TT_LoaderRec;


FT_END_HEADER

#endif /* TTTYPES_H_ */


/* END */
