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