1 /****************************************************************************
   2  *
   3  * sfnt.h
   4  *
   5  *   High-level 'sfnt' driver interface (specification).
   6  *
   7  * Copyright (C) 1996-2019 by
   8  * David Turner, Robert Wilhelm, and Werner Lemberg.
   9  *
  10  * This file is part of the FreeType project, and may only be used,
  11  * modified, and distributed under the terms of the FreeType project
  12  * license, LICENSE.TXT.  By continuing to use, modify, or distribute
  13  * this file you indicate that you have read the license and
  14  * understand and accept it fully.
  15  *
  16  */
  17 
  18 
  19 #ifndef SFNT_H_
  20 #define SFNT_H_
  21 
  22 
  23 #include <ft2build.h>
  24 #include FT_INTERNAL_DRIVER_H
  25 #include FT_INTERNAL_TRUETYPE_TYPES_H
  26 #include FT_INTERNAL_WOFF_TYPES_H
  27 
  28 
  29 FT_BEGIN_HEADER
  30 
  31 
  32   /**************************************************************************
  33    *
  34    * @functype:
  35    *   TT_Init_Face_Func
  36    *
  37    * @description:
  38    *   First part of the SFNT face object initialization.  This finds the
  39    *   face in a SFNT file or collection, and load its format tag in
  40    *   face->format_tag.
  41    *
  42    * @input:
  43    *   stream ::
  44    *     The input stream.
  45    *
  46    *   face ::
  47    *     A handle to the target face object.
  48    *
  49    *   face_index ::
  50    *     The index of the TrueType font, if we are opening a collection, in
  51    *     bits 0-15.  The numbered instance index~+~1 of a GX (sub)font, if
  52    *     applicable, in bits 16-30.
  53    *
  54    *   num_params ::
  55    *     The number of additional parameters.
  56    *
  57    *   params ::
  58    *     Optional additional parameters.
  59    *
  60    * @return:
  61    *   FreeType error code.  0 means success.
  62    *
  63    * @note:
  64    *   The stream cursor must be at the font file's origin.
  65    *
  66    *   This function recognizes fonts embedded in a 'TrueType collection'.
  67    *
  68    *   Once the format tag has been validated by the font driver, it should
  69    *   then call the TT_Load_Face_Func() callback to read the rest of the
  70    *   SFNT tables in the object.
  71    */
  72   typedef FT_Error
  73   (*TT_Init_Face_Func)( FT_Stream      stream,
  74                         TT_Face        face,
  75                         FT_Int         face_index,
  76                         FT_Int         num_params,
  77                         FT_Parameter*  params );
  78 
  79 
  80   /**************************************************************************
  81    *
  82    * @functype:
  83    *   TT_Load_Face_Func
  84    *
  85    * @description:
  86    *   Second part of the SFNT face object initialization.  This loads the
  87    *   common SFNT tables (head, OS/2, maxp, metrics, etc.) in the face
  88    *   object.
  89    *
  90    * @input:
  91    *   stream ::
  92    *     The input stream.
  93    *
  94    *   face ::
  95    *     A handle to the target face object.
  96    *
  97    *   face_index ::
  98    *     The index of the TrueType font, if we are opening a collection, in
  99    *     bits 0-15.  The numbered instance index~+~1 of a GX (sub)font, if
 100    *     applicable, in bits 16-30.
 101    *
 102    *   num_params ::
 103    *     The number of additional parameters.
 104    *
 105    *   params ::
 106    *     Optional additional parameters.
 107    *
 108    * @return:
 109    *   FreeType error code.  0 means success.
 110    *
 111    * @note:
 112    *   This function must be called after TT_Init_Face_Func().
 113    */
 114   typedef FT_Error
 115   (*TT_Load_Face_Func)( FT_Stream      stream,
 116                         TT_Face        face,
 117                         FT_Int         face_index,
 118                         FT_Int         num_params,
 119                         FT_Parameter*  params );
 120 
 121 
 122   /**************************************************************************
 123    *
 124    * @functype:
 125    *   TT_Done_Face_Func
 126    *
 127    * @description:
 128    *   A callback used to delete the common SFNT data from a face.
 129    *
 130    * @input:
 131    *   face ::
 132    *     A handle to the target face object.
 133    *
 134    * @note:
 135    *   This function does NOT destroy the face object.
 136    */
 137   typedef void
 138   (*TT_Done_Face_Func)( TT_Face  face );
 139 
 140 
 141   /**************************************************************************
 142    *
 143    * @functype:
 144    *   TT_Load_Any_Func
 145    *
 146    * @description:
 147    *   Load any font table into client memory.
 148    *
 149    * @input:
 150    *   face ::
 151    *     The face object to look for.
 152    *
 153    *   tag ::
 154    *     The tag of table to load.  Use the value 0 if you want to access the
 155    *     whole font file, else set this parameter to a valid TrueType table
 156    *     tag that you can forge with the MAKE_TT_TAG macro.
 157    *
 158    *   offset ::
 159    *     The starting offset in the table (or the file if tag == 0).
 160    *
 161    *   length ::
 162    *     The address of the decision variable:
 163    *
 164    *     If `length == NULL`: Loads the whole table.  Returns an error if
 165    *     'offset' == 0!
 166    *
 167    *     If `*length == 0`: Exits immediately; returning the length of the
 168    *     given table or of the font file, depending on the value of 'tag'.
 169    *
 170    *     If `*length != 0`: Loads the next 'length' bytes of table or font,
 171    *     starting at offset 'offset' (in table or font too).
 172    *
 173    * @output:
 174    *   buffer ::
 175    *     The address of target buffer.
 176    *
 177    * @return:
 178    *   TrueType error code.  0 means success.
 179    */
 180   typedef FT_Error
 181   (*TT_Load_Any_Func)( TT_Face    face,
 182                        FT_ULong   tag,
 183                        FT_Long    offset,
 184                        FT_Byte   *buffer,
 185                        FT_ULong*  length );
 186 
 187 
 188   /**************************************************************************
 189    *
 190    * @functype:
 191    *   TT_Find_SBit_Image_Func
 192    *
 193    * @description:
 194    *   Check whether an embedded bitmap (an 'sbit') exists for a given glyph,
 195    *   at a given strike.
 196    *
 197    * @input:
 198    *   face ::
 199    *     The target face object.
 200    *
 201    *   glyph_index ::
 202    *     The glyph index.
 203    *
 204    *   strike_index ::
 205    *     The current strike index.
 206    *
 207    * @output:
 208    *   arange ::
 209    *     The SBit range containing the glyph index.
 210    *
 211    *   astrike ::
 212    *     The SBit strike containing the glyph index.
 213    *
 214    *   aglyph_offset ::
 215    *     The offset of the glyph data in 'EBDT' table.
 216    *
 217    * @return:
 218    *   FreeType error code.  0 means success.  Returns
 219    *   SFNT_Err_Invalid_Argument if no sbit exists for the requested glyph.
 220    */
 221   typedef FT_Error
 222   (*TT_Find_SBit_Image_Func)( TT_Face          face,
 223                               FT_UInt          glyph_index,
 224                               FT_ULong         strike_index,
 225                               TT_SBit_Range   *arange,
 226                               TT_SBit_Strike  *astrike,
 227                               FT_ULong        *aglyph_offset );
 228 
 229 
 230   /**************************************************************************
 231    *
 232    * @functype:
 233    *   TT_Load_SBit_Metrics_Func
 234    *
 235    * @description:
 236    *   Get the big metrics for a given embedded bitmap.
 237    *
 238    * @input:
 239    *   stream ::
 240    *     The input stream.
 241    *
 242    *   range ::
 243    *     The SBit range containing the glyph.
 244    *
 245    * @output:
 246    *   big_metrics ::
 247    *     A big SBit metrics structure for the glyph.
 248    *
 249    * @return:
 250    *   FreeType error code.  0 means success.
 251    *
 252    * @note:
 253    *   The stream cursor must be positioned at the glyph's offset within the
 254    *   'EBDT' table before the call.
 255    *
 256    *   If the image format uses variable metrics, the stream cursor is
 257    *   positioned just after the metrics header in the 'EBDT' table on
 258    *   function exit.
 259    */
 260   typedef FT_Error
 261   (*TT_Load_SBit_Metrics_Func)( FT_Stream        stream,
 262                                 TT_SBit_Range    range,
 263                                 TT_SBit_Metrics  metrics );
 264 
 265 
 266   /**************************************************************************
 267    *
 268    * @functype:
 269    *   TT_Load_SBit_Image_Func
 270    *
 271    * @description:
 272    *   Load a given glyph sbit image from the font resource.  This also
 273    *   returns its metrics.
 274    *
 275    * @input:
 276    *   face ::
 277    *     The target face object.
 278    *
 279    *   strike_index ::
 280    *     The strike index.
 281    *
 282    *   glyph_index ::
 283    *     The current glyph index.
 284    *
 285    *   load_flags ::
 286    *     The current load flags.
 287    *
 288    *   stream ::
 289    *     The input stream.
 290    *
 291    * @output:
 292    *   amap ::
 293    *     The target pixmap.
 294    *
 295    *   ametrics ::
 296    *     A big sbit metrics structure for the glyph image.
 297    *
 298    * @return:
 299    *   FreeType error code.  0 means success.  Returns an error if no glyph
 300    *   sbit exists for the index.
 301    *
 302    * @note:
 303    *   The `map.buffer` field is always freed before the glyph is loaded.
 304    */
 305   typedef FT_Error
 306   (*TT_Load_SBit_Image_Func)( TT_Face              face,
 307                               FT_ULong             strike_index,
 308                               FT_UInt              glyph_index,
 309                               FT_UInt              load_flags,
 310                               FT_Stream            stream,
 311                               FT_Bitmap           *amap,
 312                               TT_SBit_MetricsRec  *ametrics );
 313 
 314 
 315   /**************************************************************************
 316    *
 317    * @functype:
 318    *   TT_Set_SBit_Strike_Func
 319    *
 320    * @description:
 321    *   Select an sbit strike for a given size request.
 322    *
 323    * @input:
 324    *   face ::
 325    *     The target face object.
 326    *
 327    *   req ::
 328    *     The size request.
 329    *
 330    * @output:
 331    *   astrike_index ::
 332    *     The index of the sbit strike.
 333    *
 334    * @return:
 335    *   FreeType error code.  0 means success.  Returns an error if no sbit
 336    *   strike exists for the selected ppem values.
 337    */
 338   typedef FT_Error
 339   (*TT_Set_SBit_Strike_Func)( TT_Face          face,
 340                               FT_Size_Request  req,
 341                               FT_ULong*        astrike_index );
 342 
 343 
 344   /**************************************************************************
 345    *
 346    * @functype:
 347    *   TT_Load_Strike_Metrics_Func
 348    *
 349    * @description:
 350    *   Load the metrics of a given strike.
 351    *
 352    * @input:
 353    *   face ::
 354    *     The target face object.
 355    *
 356    *   strike_index ::
 357    *     The strike index.
 358    *
 359    * @output:
 360    *   metrics ::
 361    *     the metrics of the strike.
 362    *
 363    * @return:
 364    *   FreeType error code.  0 means success.  Returns an error if no such
 365    *   sbit strike exists.
 366    */
 367   typedef FT_Error
 368   (*TT_Load_Strike_Metrics_Func)( TT_Face           face,
 369                                   FT_ULong          strike_index,
 370                                   FT_Size_Metrics*  metrics );
 371 
 372 
 373   /**************************************************************************
 374    *
 375    * @functype:
 376    *   TT_Get_PS_Name_Func
 377    *
 378    * @description:
 379    *   Get the PostScript glyph name of a glyph.
 380    *
 381    * @input:
 382    *   idx ::
 383    *     The glyph index.
 384    *
 385    *   PSname ::
 386    *     The address of a string pointer.  Will be `NULL` in case of error,
 387    *     otherwise it is a pointer to the glyph name.
 388    *
 389    *     You must not modify the returned string!
 390    *
 391    * @output:
 392    *   FreeType error code.  0 means success.
 393    */
 394   typedef FT_Error
 395   (*TT_Get_PS_Name_Func)( TT_Face      face,
 396                           FT_UInt      idx,
 397                           FT_String**  PSname );
 398 
 399 
 400   /**************************************************************************
 401    *
 402    * @functype:
 403    *   TT_Load_Metrics_Func
 404    *
 405    * @description:
 406    *   Load a metrics table, which is a table with a horizontal and a
 407    *   vertical version.
 408    *
 409    * @input:
 410    *   face ::
 411    *     A handle to the target face object.
 412    *
 413    *   stream ::
 414    *     The input stream.
 415    *
 416    *   vertical ::
 417    *     A boolean flag.  If set, load the vertical one.
 418    *
 419    * @return:
 420    *   FreeType error code.  0 means success.
 421    */
 422   typedef FT_Error
 423   (*TT_Load_Metrics_Func)( TT_Face    face,
 424                            FT_Stream  stream,
 425                            FT_Bool    vertical );
 426 
 427 
 428   /**************************************************************************
 429    *
 430    * @functype:
 431    *   TT_Get_Metrics_Func
 432    *
 433    * @description:
 434    *   Load the horizontal or vertical header in a face object.
 435    *
 436    * @input:
 437    *   face ::
 438    *     A handle to the target face object.
 439    *
 440    *   vertical ::
 441    *     A boolean flag.  If set, load vertical metrics.
 442    *
 443    *   gindex ::
 444    *     The glyph index.
 445    *
 446    * @output:
 447    *   abearing ::
 448    *     The horizontal (or vertical) bearing.  Set to zero in case of error.
 449    *
 450    *   aadvance ::
 451    *     The horizontal (or vertical) advance.  Set to zero in case of error.
 452    */
 453   typedef void
 454   (*TT_Get_Metrics_Func)( TT_Face     face,
 455                           FT_Bool     vertical,
 456                           FT_UInt     gindex,
 457                           FT_Short*   abearing,
 458                           FT_UShort*  aadvance );
 459 
 460 
 461   /**************************************************************************
 462    *
 463    * @functype:
 464    *   TT_Set_Palette_Func
 465    *
 466    * @description:
 467    *   Load the colors into `face->palette` for a given palette index.
 468    *
 469    * @input:
 470    *   face ::
 471    *     The target face object.
 472    *
 473    *   idx ::
 474    *     The palette index.
 475    *
 476    * @return:
 477    *   FreeType error code.  0 means success.
 478    */
 479   typedef FT_Error
 480   (*TT_Set_Palette_Func)( TT_Face  face,
 481                           FT_UInt  idx );
 482 
 483 
 484   /**************************************************************************
 485    *
 486    * @functype:
 487    *   TT_Get_Colr_Layer_Func
 488    *
 489    * @description:
 490    *   Iteratively get the color layer data of a given glyph index.
 491    *
 492    * @input:
 493    *   face ::
 494    *     The target face object.
 495    *
 496    *   base_glyph ::
 497    *     The glyph index the colored glyph layers are associated with.
 498    *
 499    * @inout:
 500    *   iterator ::
 501    *     An @FT_LayerIterator object.  For the first call you should set
 502    *     `iterator->p` to `NULL`.  For all following calls, simply use the
 503    *     same object again.
 504    *
 505    * @output:
 506    *   aglyph_index ::
 507    *     The glyph index of the current layer.
 508    *
 509    *   acolor_index ::
 510    *     The color index into the font face's color palette of the current
 511    *     layer.  The value 0xFFFF is special; it doesn't reference a palette
 512    *     entry but indicates that the text foreground color should be used
 513    *     instead (to be set up by the application outside of FreeType).
 514    *
 515    * @return:
 516    *   Value~1 if everything is OK.  If there are no more layers (or if there
 517    *   are no layers at all), value~0 gets returned.  In case of an error,
 518    *   value~0 is returned also.
 519    */
 520   typedef FT_Bool
 521   (*TT_Get_Colr_Layer_Func)( TT_Face            face,
 522                              FT_UInt            base_glyph,
 523                              FT_UInt           *aglyph_index,
 524                              FT_UInt           *acolor_index,
 525                              FT_LayerIterator*  iterator );
 526 
 527 
 528   /**************************************************************************
 529    *
 530    * @functype:
 531    *   TT_Blend_Colr_Func
 532    *
 533    * @description:
 534    *   Blend the bitmap in `new_glyph` into `base_glyph` using the color
 535    *   specified by `color_index`.  If `color_index` is 0xFFFF, use
 536    *   `face->foreground_color` if `face->have_foreground_color` is set.
 537    *   Otherwise check `face->palette_data.palette_flags`: If present and
 538    *   @FT_PALETTE_FOR_DARK_BACKGROUND is set, use BGRA value 0xFFFFFFFF
 539    *   (white opaque).  Otherwise use BGRA value 0x000000FF (black opaque).
 540    *
 541    * @input:
 542    *   face ::
 543    *     The target face object.
 544    *
 545    *   color_index ::
 546    *     Color index from the COLR table.
 547    *
 548    *   base_glyph ::
 549    *     Slot for bitmap to be merged into.  The underlying bitmap may get
 550    *     reallocated.
 551    *
 552    *   new_glyph ::
 553    *     Slot to be incooperated into `base_glyph`.
 554    *
 555    * @return:
 556    *   FreeType error code.  0 means success.  Returns an error if
 557    *   color_index is invalid or reallocation fails.
 558    */
 559   typedef FT_Error
 560   (*TT_Blend_Colr_Func)( TT_Face       face,
 561                          FT_UInt       color_index,
 562                          FT_GlyphSlot  base_glyph,
 563                          FT_GlyphSlot  new_glyph );
 564 
 565 
 566   /**************************************************************************
 567    *
 568    * @functype:
 569    *   TT_Get_Name_Func
 570    *
 571    * @description:
 572    *   From the 'name' table, return a given ENGLISH name record in ASCII.
 573    *
 574    * @input:
 575    *   face ::
 576    *     A handle to the source face object.
 577    *
 578    *   nameid ::
 579    *     The name id of the name record to return.
 580    *
 581    * @inout:
 582    *   name ::
 583    *     The address of an allocated string pointer.  `NULL` if no name is
 584    *     present.
 585    *
 586    * @return:
 587    *   FreeType error code.  0 means success.
 588    */
 589   typedef FT_Error
 590   (*TT_Get_Name_Func)( TT_Face      face,
 591                        FT_UShort    nameid,
 592                        FT_String**  name );
 593 
 594 
 595   /**************************************************************************
 596    *
 597    * @functype:
 598    *   TT_Get_Name_ID_Func
 599    *
 600    * @description:
 601    *   Search whether an ENGLISH version for a given name ID is in the 'name'
 602    *   table.
 603    *
 604    * @input:
 605    *   face ::
 606    *     A handle to the source face object.
 607    *
 608    *   nameid ::
 609    *     The name id of the name record to return.
 610    *
 611    * @output:
 612    *   win ::
 613    *     If non-negative, an index into the 'name' table with the
 614    *     corresponding (3,1) or (3,0) Windows entry.
 615    *
 616    *   apple ::
 617    *     If non-negative, an index into the 'name' table with the
 618    *     corresponding (1,0) Apple entry.
 619    *
 620    * @return:
 621    *   1 if there is either a win or apple entry (or both), 0 otheriwse.
 622    */
 623   typedef FT_Bool
 624   (*TT_Get_Name_ID_Func)( TT_Face    face,
 625                           FT_UShort  nameid,
 626                           FT_Int    *win,
 627                           FT_Int    *apple );
 628 
 629 
 630   /**************************************************************************
 631    *
 632    * @functype:
 633    *   TT_Load_Table_Func
 634    *
 635    * @description:
 636    *   Load a given TrueType table.
 637    *
 638    * @input:
 639    *   face ::
 640    *     A handle to the target face object.
 641    *
 642    *   stream ::
 643    *     The input stream.
 644    *
 645    * @return:
 646    *   FreeType error code.  0 means success.
 647    *
 648    * @note:
 649    *   The function uses `face->goto_table` to seek the stream to the start
 650    *   of the table, except while loading the font directory.
 651    */
 652   typedef FT_Error
 653   (*TT_Load_Table_Func)( TT_Face    face,
 654                          FT_Stream  stream );
 655 
 656 
 657   /**************************************************************************
 658    *
 659    * @functype:
 660    *   TT_Free_Table_Func
 661    *
 662    * @description:
 663    *   Free a given TrueType table.
 664    *
 665    * @input:
 666    *   face ::
 667    *     A handle to the target face object.
 668    */
 669   typedef void
 670   (*TT_Free_Table_Func)( TT_Face  face );
 671 
 672 
 673   /*
 674    * @functype:
 675    *    TT_Face_GetKerningFunc
 676    *
 677    * @description:
 678    *    Return the horizontal kerning value between two glyphs.
 679    *
 680    * @input:
 681    *    face ::
 682    *      A handle to the source face object.
 683    *
 684    *    left_glyph ::
 685    *      The left glyph index.
 686    *
 687    *    right_glyph ::
 688    *      The right glyph index.
 689    *
 690    * @return:
 691    *    The kerning value in font units.
 692    */
 693   typedef FT_Int
 694   (*TT_Face_GetKerningFunc)( TT_Face  face,
 695                              FT_UInt  left_glyph,
 696                              FT_UInt  right_glyph );
 697 
 698 
 699   /**************************************************************************
 700    *
 701    * @struct:
 702    *   SFNT_Interface
 703    *
 704    * @description:
 705    *   This structure holds pointers to the functions used to load and free
 706    *   the basic tables that are required in a 'sfnt' font file.
 707    *
 708    * @fields:
 709    *   Check the various xxx_Func() descriptions for details.
 710    */
 711   typedef struct  SFNT_Interface_
 712   {
 713     TT_Loader_GotoTableFunc      goto_table;
 714 
 715     TT_Init_Face_Func            init_face;
 716     TT_Load_Face_Func            load_face;
 717     TT_Done_Face_Func            done_face;
 718     FT_Module_Requester          get_interface;
 719 
 720     TT_Load_Any_Func             load_any;
 721 
 722     /* these functions are called by `load_face' but they can also  */
 723     /* be called from external modules, if there is a need to do so */
 724     TT_Load_Table_Func           load_head;
 725     TT_Load_Metrics_Func         load_hhea;
 726     TT_Load_Table_Func           load_cmap;
 727     TT_Load_Table_Func           load_maxp;
 728     TT_Load_Table_Func           load_os2;
 729     TT_Load_Table_Func           load_post;
 730 
 731     TT_Load_Table_Func           load_name;
 732     TT_Free_Table_Func           free_name;
 733 
 734     /* this field was called `load_kerning' up to version 2.1.10 */
 735     TT_Load_Table_Func           load_kern;
 736 
 737     TT_Load_Table_Func           load_gasp;
 738     TT_Load_Table_Func           load_pclt;
 739 
 740     /* see `ttload.h'; this field was called `load_bitmap_header' up to */
 741     /* version 2.1.10                                                   */
 742     TT_Load_Table_Func           load_bhed;
 743 
 744     TT_Load_SBit_Image_Func      load_sbit_image;
 745 
 746     /* see `ttpost.h' */
 747     TT_Get_PS_Name_Func          get_psname;
 748     TT_Free_Table_Func           free_psnames;
 749 
 750     /* starting here, the structure differs from version 2.1.7 */
 751 
 752     /* this field was introduced in version 2.1.8, named `get_psname' */
 753     TT_Face_GetKerningFunc       get_kerning;
 754 
 755     /* new elements introduced after version 2.1.10 */
 756 
 757     /* load the font directory, i.e., the offset table and */
 758     /* the table directory                                 */
 759     TT_Load_Table_Func           load_font_dir;
 760     TT_Load_Metrics_Func         load_hmtx;
 761 
 762     TT_Load_Table_Func           load_eblc;
 763     TT_Free_Table_Func           free_eblc;
 764 
 765     TT_Set_SBit_Strike_Func      set_sbit_strike;
 766     TT_Load_Strike_Metrics_Func  load_strike_metrics;
 767 
 768     TT_Load_Table_Func           load_cpal;
 769     TT_Load_Table_Func           load_colr;
 770     TT_Free_Table_Func           free_cpal;
 771     TT_Free_Table_Func           free_colr;
 772     TT_Set_Palette_Func          set_palette;
 773     TT_Get_Colr_Layer_Func       get_colr_layer;
 774     TT_Blend_Colr_Func           colr_blend;
 775 
 776     TT_Get_Metrics_Func          get_metrics;
 777 
 778     TT_Get_Name_Func             get_name;
 779     TT_Get_Name_ID_Func          get_name_id;
 780 
 781   } SFNT_Interface;
 782 
 783 
 784   /* transitional */
 785   typedef SFNT_Interface*   SFNT_Service;
 786 
 787 
 788 #define FT_DEFINE_SFNT_INTERFACE(        \
 789           class_,                        \
 790           goto_table_,                   \
 791           init_face_,                    \
 792           load_face_,                    \
 793           done_face_,                    \
 794           get_interface_,                \
 795           load_any_,                     \
 796           load_head_,                    \
 797           load_hhea_,                    \
 798           load_cmap_,                    \
 799           load_maxp_,                    \
 800           load_os2_,                     \
 801           load_post_,                    \
 802           load_name_,                    \
 803           free_name_,                    \
 804           load_kern_,                    \
 805           load_gasp_,                    \
 806           load_pclt_,                    \
 807           load_bhed_,                    \
 808           load_sbit_image_,              \
 809           get_psname_,                   \
 810           free_psnames_,                 \
 811           get_kerning_,                  \
 812           load_font_dir_,                \
 813           load_hmtx_,                    \
 814           load_eblc_,                    \
 815           free_eblc_,                    \
 816           set_sbit_strike_,              \
 817           load_strike_metrics_,          \
 818           load_cpal_,                    \
 819           load_colr_,                    \
 820           free_cpal_,                    \
 821           free_colr_,                    \
 822           set_palette_,                  \
 823           get_colr_layer_,               \
 824           colr_blend_,                   \
 825           get_metrics_,                  \
 826           get_name_,                     \
 827           get_name_id_ )                 \
 828   static const SFNT_Interface  class_ =  \
 829   {                                      \
 830     goto_table_,                         \
 831     init_face_,                          \
 832     load_face_,                          \
 833     done_face_,                          \
 834     get_interface_,                      \
 835     load_any_,                           \
 836     load_head_,                          \
 837     load_hhea_,                          \
 838     load_cmap_,                          \
 839     load_maxp_,                          \
 840     load_os2_,                           \
 841     load_post_,                          \
 842     load_name_,                          \
 843     free_name_,                          \
 844     load_kern_,                          \
 845     load_gasp_,                          \
 846     load_pclt_,                          \
 847     load_bhed_,                          \
 848     load_sbit_image_,                    \
 849     get_psname_,                         \
 850     free_psnames_,                       \
 851     get_kerning_,                        \
 852     load_font_dir_,                      \
 853     load_hmtx_,                          \
 854     load_eblc_,                          \
 855     free_eblc_,                          \
 856     set_sbit_strike_,                    \
 857     load_strike_metrics_,                \
 858     load_cpal_,                          \
 859     load_colr_,                          \
 860     free_cpal_,                          \
 861     free_colr_,                          \
 862     set_palette_,                        \
 863     get_colr_layer_,                     \
 864     colr_blend_,                         \
 865     get_metrics_,                        \
 866     get_name_,                           \
 867     get_name_id_                         \
 868   };
 869 
 870 
 871 FT_END_HEADER
 872 
 873 #endif /* SFNT_H_ */
 874 
 875 
 876 /* END */