Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /***************************************************************************/
  2. /*                                                                         */
  3. /*  sfnt.h                                                                 */
  4. /*                                                                         */
  5. /*    High-level `sfnt' driver interface (specification).                  */
  6. /*                                                                         */
  7. /*  Copyright 1996-2006, 2009, 2012-2013 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.  
  27.  
  28. FT_BEGIN_HEADER
  29.  
  30.  
  31.   /*************************************************************************/
  32.   /*                                                                       */
  33.   /* <FuncType>                                                            */
  34.   /*    TT_Init_Face_Func                                                  */
  35.   /*                                                                       */
  36.   /* <Description>                                                         */
  37.   /*    First part of the SFNT face object initialization.  This finds     */
  38.   /*    the face in a SFNT file or collection, and load its format tag in  */
  39.   /*    face->format_tag.                                                  */
  40.   /*                                                                       */
  41.   /* <Input>                                                               */
  42.   /*    stream     :: The input stream.                                    */
  43.   /*                                                                       */
  44.   /*    face       :: A handle to the target face object.                  */
  45.   /*                                                                       */
  46.   /*    face_index :: The index of the TrueType font, if we are opening a  */
  47.   /*                  collection.                                          */
  48.   /*                                                                       */
  49.   /*    num_params :: The number of additional parameters.                 */
  50.   /*                                                                       */
  51.   /*    params     :: Optional additional parameters.                      */
  52.   /*                                                                       */
  53.   /* <Return>                                                              */
  54.   /*    FreeType error code.  0 means success.                             */
  55.   /*                                                                       */
  56.   /* <Note>                                                                */
  57.   /*    The stream cursor must be at the font file's origin.               */
  58.   /*                                                                       */
  59.   /*    This function recognizes fonts embedded in a `TrueType             */
  60.   /*    collection'.                                                       */
  61.   /*                                                                       */
  62.   /*    Once the format tag has been validated by the font driver, it      */
  63.   /*    should then call the TT_Load_Face_Func() callback to read the rest */
  64.   /*    of the SFNT tables in the object.                                  */
  65.   /*                                                                       */
  66.   typedef FT_Error
  67.   (*TT_Init_Face_Func)( FT_Stream      stream,
  68.                         TT_Face        face,
  69.                         FT_Int         face_index,
  70.                         FT_Int         num_params,
  71.                         FT_Parameter*  params );
  72.  
  73.  
  74.   /*************************************************************************/
  75.   /*                                                                       */
  76.   /* <FuncType>                                                            */
  77.   /*    TT_Load_Face_Func                                                  */
  78.   /*                                                                       */
  79.   /* <Description>                                                         */
  80.   /*    Second part of the SFNT face object initialization.  This loads    */
  81.   /*    the common SFNT tables (head, OS/2, maxp, metrics, etc.) in the    */
  82.   /*    face object.                                                       */
  83.   /*                                                                       */
  84.   /* <Input>                                                               */
  85.   /*    stream     :: The input stream.                                    */
  86.   /*                                                                       */
  87.   /*    face       :: A handle to the target face object.                  */
  88.   /*                                                                       */
  89.   /*    face_index :: The index of the TrueType font, if we are opening a  */
  90.   /*                  collection.                                          */
  91.   /*                                                                       */
  92.   /*    num_params :: The number of additional parameters.                 */
  93.   /*                                                                       */
  94.   /*    params     :: Optional additional parameters.                      */
  95.   /*                                                                       */
  96.   /* <Return>                                                              */
  97.   /*    FreeType error code.  0 means success.                             */
  98.   /*                                                                       */
  99.   /* <Note>                                                                */
  100.   /*    This function must be called after TT_Init_Face_Func().            */
  101.   /*                                                                       */
  102.   typedef FT_Error
  103.   (*TT_Load_Face_Func)( FT_Stream      stream,
  104.                         TT_Face        face,
  105.                         FT_Int         face_index,
  106.                         FT_Int         num_params,
  107.                         FT_Parameter*  params );
  108.  
  109.  
  110.   /*************************************************************************/
  111.   /*                                                                       */
  112.   /* <FuncType>                                                            */
  113.   /*    TT_Done_Face_Func                                                  */
  114.   /*                                                                       */
  115.   /* <Description>                                                         */
  116.   /*    A callback used to delete the common SFNT data from a face.        */
  117.   /*                                                                       */
  118.   /* <Input>                                                               */
  119.   /*    face :: A handle to the target face object.                        */
  120.   /*                                                                       */
  121.   /* <Note>                                                                */
  122.   /*    This function does NOT destroy the face object.                    */
  123.   /*                                                                       */
  124.   typedef void
  125.   (*TT_Done_Face_Func)( TT_Face  face );
  126.  
  127.  
  128.   /*************************************************************************/
  129.   /*                                                                       */
  130.   /* <FuncType>                                                            */
  131.   /*    TT_Load_Any_Func                                                   */
  132.   /*                                                                       */
  133.   /* <Description>                                                         */
  134.   /*    Load any font table into client memory.                            */
  135.   /*                                                                       */
  136.   /* <Input>                                                               */
  137.   /*    face   :: The face object to look for.                             */
  138.   /*                                                                       */
  139.   /*    tag    :: The tag of table to load.  Use the value 0 if you want   */
  140.   /*              to access the whole font file, else set this parameter   */
  141.   /*              to a valid TrueType table tag that you can forge with    */
  142.   /*              the MAKE_TT_TAG macro.                                   */
  143.   /*                                                                       */
  144.   /*    offset :: The starting offset in the table (or the file if         */
  145.   /*              tag == 0).                                               */
  146.   /*                                                                       */
  147.   /*    length :: The address of the decision variable:                    */
  148.   /*                                                                       */
  149.   /*                If length == NULL:                                     */
  150.   /*                  Loads the whole table.  Returns an error if          */
  151.   /*                  `offset' == 0!                                       */
  152.   /*                                                                       */
  153.   /*                If *length == 0:                                       */
  154.   /*                  Exits immediately; returning the length of the given */
  155.   /*                  table or of the font file, depending on the value of */
  156.   /*                  `tag'.                                               */
  157.   /*                                                                       */
  158.   /*                If *length != 0:                                       */
  159.   /*                  Loads the next `length' bytes of table or font,      */
  160.   /*                  starting at offset `offset' (in table or font too).  */
  161.   /*                                                                       */
  162.   /* <Output>                                                              */
  163.   /*    buffer :: The address of target buffer.                            */
  164.   /*                                                                       */
  165.   /* <Return>                                                              */
  166.   /*    TrueType error code.  0 means success.                             */
  167.   /*                                                                       */
  168.   typedef FT_Error
  169.   (*TT_Load_Any_Func)( TT_Face    face,
  170.                        FT_ULong   tag,
  171.                        FT_Long    offset,
  172.                        FT_Byte   *buffer,
  173.                        FT_ULong*  length );
  174.  
  175.  
  176.   /*************************************************************************/
  177.   /*                                                                       */
  178.   /* <FuncType>                                                            */
  179.   /*    TT_Find_SBit_Image_Func                                            */
  180.   /*                                                                       */
  181.   /* <Description>                                                         */
  182.   /*    Check whether an embedded bitmap (an `sbit') exists for a given    */
  183.   /*    glyph, at a given strike.                                          */
  184.   /*                                                                       */
  185.   /* <Input>                                                               */
  186.   /*    face          :: The target face object.                           */
  187.   /*                                                                       */
  188.   /*    glyph_index   :: The glyph index.                                  */
  189.   /*                                                                       */
  190.   /*    strike_index  :: The current strike index.                         */
  191.   /*                                                                       */
  192.   /* <Output>                                                              */
  193.   /*    arange        :: The SBit range containing the glyph index.        */
  194.   /*                                                                       */
  195.   /*    astrike       :: The SBit strike containing the glyph index.       */
  196.   /*                                                                       */
  197.   /*    aglyph_offset :: The offset of the glyph data in `EBDT' table.     */
  198.   /*                                                                       */
  199.   /* <Return>                                                              */
  200.   /*    FreeType error code.  0 means success.  Returns                    */
  201.   /*    SFNT_Err_Invalid_Argument if no sbit exists for the requested      */
  202.   /*    glyph.                                                             */
  203.   /*                                                                       */
  204.   typedef FT_Error
  205.   (*TT_Find_SBit_Image_Func)( TT_Face          face,
  206.                               FT_UInt          glyph_index,
  207.                               FT_ULong         strike_index,
  208.                               TT_SBit_Range   *arange,
  209.                               TT_SBit_Strike  *astrike,
  210.                               FT_ULong        *aglyph_offset );
  211.  
  212.  
  213.   /*************************************************************************/
  214.   /*                                                                       */
  215.   /* <FuncType>                                                            */
  216.   /*    TT_Load_SBit_Metrics_Func                                          */
  217.   /*                                                                       */
  218.   /* <Description>                                                         */
  219.   /*    Get the big metrics for a given embedded bitmap.                   */
  220.   /*                                                                       */
  221.   /* <Input>                                                               */
  222.   /*    stream      :: The input stream.                                   */
  223.   /*                                                                       */
  224.   /*    range       :: The SBit range containing the glyph.                */
  225.   /*                                                                       */
  226.   /* <Output>                                                              */
  227.   /*    big_metrics :: A big SBit metrics structure for the glyph.         */
  228.   /*                                                                       */
  229.   /* <Return>                                                              */
  230.   /*    FreeType error code.  0 means success.                             */
  231.   /*                                                                       */
  232.   /* <Note>                                                                */
  233.   /*    The stream cursor must be positioned at the glyph's offset within  */
  234.   /*    the `EBDT' table before the call.                                  */
  235.   /*                                                                       */
  236.   /*    If the image format uses variable metrics, the stream cursor is    */
  237.   /*    positioned just after the metrics header in the `EBDT' table on    */
  238.   /*    function exit.                                                     */
  239.   /*                                                                       */
  240.   typedef FT_Error
  241.   (*TT_Load_SBit_Metrics_Func)( FT_Stream        stream,
  242.                                 TT_SBit_Range    range,
  243.                                 TT_SBit_Metrics  metrics );
  244.  
  245.  
  246.   /*************************************************************************/
  247.   /*                                                                       */
  248.   /* <FuncType>                                                            */
  249.   /*    TT_Load_SBit_Image_Func                                            */
  250.   /*                                                                       */
  251.   /* <Description>                                                         */
  252.   /*    Load a given glyph sbit image from the font resource.  This also   */
  253.   /*    returns its metrics.                                               */
  254.   /*                                                                       */
  255.   /* <Input>                                                               */
  256.   /*    face ::                                                            */
  257.   /*      The target face object.                                          */
  258.   /*                                                                       */
  259.   /*    strike_index ::                                                    */
  260.   /*      The strike index.                                                */
  261.   /*                                                                       */
  262.   /*    glyph_index ::                                                     */
  263.   /*      The current glyph index.                                         */
  264.   /*                                                                       */
  265.   /*    load_flags ::                                                      */
  266.   /*      The current load flags.                                          */
  267.   /*                                                                       */
  268.   /*    stream ::                                                          */
  269.   /*      The input stream.                                                */
  270.   /*                                                                       */
  271.   /* <Output>                                                              */
  272.   /*    amap ::                                                            */
  273.   /*      The target pixmap.                                               */
  274.   /*                                                                       */
  275.   /*    ametrics ::                                                        */
  276.   /*      A big sbit metrics structure for the glyph image.                */
  277.   /*                                                                       */
  278.   /* <Return>                                                              */
  279.   /*    FreeType error code.  0 means success.  Returns an error if no     */
  280.   /*    glyph sbit exists for the index.                                   */
  281.   /*                                                                       */
  282.   /*  <Note>                                                               */
  283.   /*    The `map.buffer' field is always freed before the glyph is loaded. */
  284.   /*                                                                       */
  285.   typedef FT_Error
  286.   (*TT_Load_SBit_Image_Func)( TT_Face              face,
  287.                               FT_ULong             strike_index,
  288.                               FT_UInt              glyph_index,
  289.                               FT_UInt              load_flags,
  290.                               FT_Stream            stream,
  291.                               FT_Bitmap           *amap,
  292.                               TT_SBit_MetricsRec  *ametrics );
  293.  
  294.  
  295.   /*************************************************************************/
  296.   /*                                                                       */
  297.   /* <FuncType>                                                            */
  298.   /*    TT_Set_SBit_Strike_Func                                            */
  299.   /*                                                                       */
  300.   /* <Description>                                                         */
  301.   /*    Select an sbit strike for a given size request.                    */
  302.   /*                                                                       */
  303.   /* <Input>                                                               */
  304.   /*    face          :: The target face object.                           */
  305.   /*                                                                       */
  306.   /*    req           :: The size request.                                 */
  307.   /*                                                                       */
  308.   /* <Output>                                                              */
  309.   /*    astrike_index :: The index of the sbit strike.                     */
  310.   /*                                                                       */
  311.   /* <Return>                                                              */
  312.   /*    FreeType error code.  0 means success.  Returns an error if no     */
  313.   /*    sbit strike exists for the selected ppem values.                   */
  314.   /*                                                                       */
  315.   typedef FT_Error
  316.   (*TT_Set_SBit_Strike_Func)( TT_Face          face,
  317.                               FT_Size_Request  req,
  318.                               FT_ULong*        astrike_index );
  319.  
  320.  
  321.   /*************************************************************************/
  322.   /*                                                                       */
  323.   /* <FuncType>                                                            */
  324.   /*    TT_Load_Strike_Metrics_Func                                        */
  325.   /*                                                                       */
  326.   /* <Description>                                                         */
  327.   /*    Load the metrics of a given strike.                                */
  328.   /*                                                                       */
  329.   /* <Input>                                                               */
  330.   /*    face          :: The target face object.                           */
  331.   /*                                                                       */
  332.   /*    strike_index  :: The strike index.                                 */
  333.   /*                                                                       */
  334.   /* <Output>                                                              */
  335.   /*    metrics       :: the metrics of the strike.                        */
  336.   /*                                                                       */
  337.   /* <Return>                                                              */
  338.   /*    FreeType error code.  0 means success.  Returns an error if no     */
  339.   /*    such sbit strike exists.                                           */
  340.   /*                                                                       */
  341.   typedef FT_Error
  342.   (*TT_Load_Strike_Metrics_Func)( TT_Face           face,
  343.                                   FT_ULong          strike_index,
  344.                                   FT_Size_Metrics*  metrics );
  345.  
  346.  
  347.   /*************************************************************************/
  348.   /*                                                                       */
  349.   /* <FuncType>                                                            */
  350.   /*    TT_Get_PS_Name_Func                                                */
  351.   /*                                                                       */
  352.   /* <Description>                                                         */
  353.   /*    Get the PostScript glyph name of a glyph.                          */
  354.   /*                                                                       */
  355.   /* <Input>                                                               */
  356.   /*    idx  :: The glyph index.                                           */
  357.   /*                                                                       */
  358.   /*    PSname :: The address of a string pointer.  Will be NULL in case   */
  359.   /*              of error, otherwise it is a pointer to the glyph name.   */
  360.   /*                                                                       */
  361.   /*              You must not modify the returned string!                 */
  362.   /*                                                                       */
  363.   /* <Output>                                                              */
  364.   /*    FreeType error code.  0 means success.                             */
  365.   /*                                                                       */
  366.   typedef FT_Error
  367.   (*TT_Get_PS_Name_Func)( TT_Face      face,
  368.                           FT_UInt      idx,
  369.                           FT_String**  PSname );
  370.  
  371.  
  372.   /*************************************************************************/
  373.   /*                                                                       */
  374.   /* <FuncType>                                                            */
  375.   /*    TT_Load_Metrics_Func                                               */
  376.   /*                                                                       */
  377.   /* <Description>                                                         */
  378.   /*    Load a metrics table, which is a table with a horizontal and a     */
  379.   /*    vertical version.                                                  */
  380.   /*                                                                       */
  381.   /* <Input>                                                               */
  382.   /*    face     :: A handle to the target face object.                    */
  383.   /*                                                                       */
  384.   /*    stream   :: The input stream.                                      */
  385.   /*                                                                       */
  386.   /*    vertical :: A boolean flag.  If set, load the vertical one.        */
  387.   /*                                                                       */
  388.   /* <Return>                                                              */
  389.   /*    FreeType error code.  0 means success.                             */
  390.   /*                                                                       */
  391.   typedef FT_Error
  392.   (*TT_Load_Metrics_Func)( TT_Face    face,
  393.                            FT_Stream  stream,
  394.                            FT_Bool    vertical );
  395.  
  396.  
  397.   /*************************************************************************/
  398.   /*                                                                       */
  399.   /* <FuncType>                                                            */
  400.   /*    TT_Get_Metrics_Func                                                */
  401.   /*                                                                       */
  402.   /* <Description>                                                         */
  403.   /*    Load the horizontal or vertical header in a face object.           */
  404.   /*                                                                       */
  405.   /* <Input>                                                               */
  406.   /*    face     :: A handle to the target face object.                    */
  407.   /*                                                                       */
  408.   /*    stream   :: The input stream.                                      */
  409.   /*                                                                       */
  410.   /*    vertical :: A boolean flag.  If set, load vertical metrics.        */
  411.   /*                                                                       */
  412.   /* <Return>                                                              */
  413.   /*    FreeType error code.  0 means success.                             */
  414.   /*                                                                       */
  415.   typedef FT_Error
  416.   (*TT_Get_Metrics_Func)( TT_Face     face,
  417.                           FT_Bool     vertical,
  418.                           FT_UInt     gindex,
  419.                           FT_Short*   abearing,
  420.                           FT_UShort*  aadvance );
  421.  
  422.  
  423.   /*************************************************************************/
  424.   /*                                                                       */
  425.   /* <FuncType>                                                            */
  426.   /*    TT_Load_Table_Func                                                 */
  427.   /*                                                                       */
  428.   /* <Description>                                                         */
  429.   /*    Load a given TrueType table.                                       */
  430.   /*                                                                       */
  431.   /* <Input>                                                               */
  432.   /*    face   :: A handle to the target face object.                      */
  433.   /*                                                                       */
  434.   /*    stream :: The input stream.                                        */
  435.   /*                                                                       */
  436.   /* <Return>                                                              */
  437.   /*    FreeType error code.  0 means success.                             */
  438.   /*                                                                       */
  439.   /* <Note>                                                                */
  440.   /*    The function uses `face->goto_table' to seek the stream to the     */
  441.   /*    start of the table, except while loading the font directory.       */
  442.   /*                                                                       */
  443.   typedef FT_Error
  444.   (*TT_Load_Table_Func)( TT_Face    face,
  445.                          FT_Stream  stream );
  446.  
  447.  
  448.   /*************************************************************************/
  449.   /*                                                                       */
  450.   /* <FuncType>                                                            */
  451.   /*    TT_Free_Table_Func                                                 */
  452.   /*                                                                       */
  453.   /* <Description>                                                         */
  454.   /*    Free a given TrueType table.                                       */
  455.   /*                                                                       */
  456.   /* <Input>                                                               */
  457.   /*    face :: A handle to the target face object.                        */
  458.   /*                                                                       */
  459.   typedef void
  460.   (*TT_Free_Table_Func)( TT_Face  face );
  461.  
  462.  
  463.   /*
  464.    * @functype:
  465.    *    TT_Face_GetKerningFunc
  466.    *
  467.    * @description:
  468.    *    Return the horizontal kerning value between two glyphs.
  469.    *
  470.    * @input:
  471.    *    face        :: A handle to the source face object.
  472.    *    left_glyph  :: The left glyph index.
  473.    *    right_glyph :: The right glyph index.
  474.    *
  475.    * @return:
  476.    *    The kerning value in font units.
  477.    */
  478.   typedef FT_Int
  479.   (*TT_Face_GetKerningFunc)( TT_Face  face,
  480.                              FT_UInt  left_glyph,
  481.                              FT_UInt  right_glyph );
  482.  
  483.  
  484.   /*************************************************************************/
  485.   /*                                                                       */
  486.   /* <Struct>                                                              */
  487.   /*    SFNT_Interface                                                     */
  488.   /*                                                                       */
  489.   /* <Description>                                                         */
  490.   /*    This structure holds pointers to the functions used to load and    */
  491.   /*    free the basic tables that are required in a `sfnt' font file.     */
  492.   /*                                                                       */
  493.   /* <Fields>                                                              */
  494.   /*    Check the various xxx_Func() descriptions for details.             */
  495.   /*                                                                       */
  496.   typedef struct  SFNT_Interface_
  497.   {
  498.     TT_Loader_GotoTableFunc      goto_table;
  499.  
  500.     TT_Init_Face_Func            init_face;
  501.     TT_Load_Face_Func            load_face;
  502.     TT_Done_Face_Func            done_face;
  503.     FT_Module_Requester          get_interface;
  504.  
  505.     TT_Load_Any_Func             load_any;
  506.  
  507.     /* these functions are called by `load_face' but they can also  */
  508.     /* be called from external modules, if there is a need to do so */
  509.     TT_Load_Table_Func           load_head;
  510.     TT_Load_Metrics_Func         load_hhea;
  511.     TT_Load_Table_Func           load_cmap;
  512.     TT_Load_Table_Func           load_maxp;
  513.     TT_Load_Table_Func           load_os2;
  514.     TT_Load_Table_Func           load_post;
  515.  
  516.     TT_Load_Table_Func           load_name;
  517.     TT_Free_Table_Func           free_name;
  518.  
  519.     /* this field was called `load_kerning' up to version 2.1.10 */
  520.     TT_Load_Table_Func           load_kern;
  521.  
  522.     TT_Load_Table_Func           load_gasp;
  523.     TT_Load_Table_Func           load_pclt;
  524.  
  525.     /* see `ttload.h'; this field was called `load_bitmap_header' up to */
  526.     /* version 2.1.10                                                   */
  527.     TT_Load_Table_Func           load_bhed;
  528.  
  529.     TT_Load_SBit_Image_Func      load_sbit_image;
  530.  
  531.     /* see `ttpost.h' */
  532.     TT_Get_PS_Name_Func          get_psname;
  533.     TT_Free_Table_Func           free_psnames;
  534.  
  535.     /* starting here, the structure differs from version 2.1.7 */
  536.  
  537.     /* this field was introduced in version 2.1.8, named `get_psname' */
  538.     TT_Face_GetKerningFunc       get_kerning;
  539.  
  540.     /* new elements introduced after version 2.1.10 */
  541.  
  542.     /* load the font directory, i.e., the offset table and */
  543.     /* the table directory                                 */
  544.     TT_Load_Table_Func           load_font_dir;
  545.     TT_Load_Metrics_Func         load_hmtx;
  546.  
  547.     TT_Load_Table_Func           load_eblc;
  548.     TT_Free_Table_Func           free_eblc;
  549.  
  550.     TT_Set_SBit_Strike_Func      set_sbit_strike;
  551.     TT_Load_Strike_Metrics_Func  load_strike_metrics;
  552.  
  553.     TT_Get_Metrics_Func          get_metrics;
  554.  
  555.   } SFNT_Interface;
  556.  
  557.  
  558.   /* transitional */
  559.   typedef SFNT_Interface*   SFNT_Service;
  560.  
  561. #ifndef FT_CONFIG_OPTION_PIC
  562.  
  563. #define FT_DEFINE_SFNT_INTERFACE(        \
  564.           class_,                        \
  565.           goto_table_,                   \
  566.           init_face_,                    \
  567.           load_face_,                    \
  568.           done_face_,                    \
  569.           get_interface_,                \
  570.           load_any_,                     \
  571.           load_head_,                    \
  572.           load_hhea_,                    \
  573.           load_cmap_,                    \
  574.           load_maxp_,                    \
  575.           load_os2_,                     \
  576.           load_post_,                    \
  577.           load_name_,                    \
  578.           free_name_,                    \
  579.           load_kern_,                    \
  580.           load_gasp_,                    \
  581.           load_pclt_,                    \
  582.           load_bhed_,                    \
  583.           load_sbit_image_,              \
  584.           get_psname_,                   \
  585.           free_psnames_,                 \
  586.           get_kerning_,                  \
  587.           load_font_dir_,                \
  588.           load_hmtx_,                    \
  589.           load_eblc_,                    \
  590.           free_eblc_,                    \
  591.           set_sbit_strike_,              \
  592.           load_strike_metrics_,          \
  593.           get_metrics_ )                 \
  594.   static const SFNT_Interface  class_ =  \
  595.   {                                      \
  596.     goto_table_,                         \
  597.     init_face_,                          \
  598.     load_face_,                          \
  599.     done_face_,                          \
  600.     get_interface_,                      \
  601.     load_any_,                           \
  602.     load_head_,                          \
  603.     load_hhea_,                          \
  604.     load_cmap_,                          \
  605.     load_maxp_,                          \
  606.     load_os2_,                           \
  607.     load_post_,                          \
  608.     load_name_,                          \
  609.     free_name_,                          \
  610.     load_kern_,                          \
  611.     load_gasp_,                          \
  612.     load_pclt_,                          \
  613.     load_bhed_,                          \
  614.     load_sbit_image_,                    \
  615.     get_psname_,                         \
  616.     free_psnames_,                       \
  617.     get_kerning_,                        \
  618.     load_font_dir_,                      \
  619.     load_hmtx_,                          \
  620.     load_eblc_,                          \
  621.     free_eblc_,                          \
  622.     set_sbit_strike_,                    \
  623.     load_strike_metrics_,                \
  624.     get_metrics_,                        \
  625.   };
  626.  
  627. #else /* FT_CONFIG_OPTION_PIC */
  628.  
  629. #define FT_INTERNAL( a, a_ )  \
  630.           clazz->a = a_;
  631.  
  632. #define FT_DEFINE_SFNT_INTERFACE(                       \
  633.           class_,                                       \
  634.           goto_table_,                                  \
  635.           init_face_,                                   \
  636.           load_face_,                                   \
  637.           done_face_,                                   \
  638.           get_interface_,                               \
  639.           load_any_,                                    \
  640.           load_head_,                                   \
  641.           load_hhea_,                                   \
  642.           load_cmap_,                                   \
  643.           load_maxp_,                                   \
  644.           load_os2_,                                    \
  645.           load_post_,                                   \
  646.           load_name_,                                   \
  647.           free_name_,                                   \
  648.           load_kern_,                                   \
  649.           load_gasp_,                                   \
  650.           load_pclt_,                                   \
  651.           load_bhed_,                                   \
  652.           load_sbit_image_,                             \
  653.           get_psname_,                                  \
  654.           free_psnames_,                                \
  655.           get_kerning_,                                 \
  656.           load_font_dir_,                               \
  657.           load_hmtx_,                                   \
  658.           load_eblc_,                                   \
  659.           free_eblc_,                                   \
  660.           set_sbit_strike_,                             \
  661.           load_strike_metrics_,                         \
  662.           get_metrics_ )                                \
  663.   void                                                  \
  664.   FT_Init_Class_ ## class_( FT_Library       library,   \
  665.                             SFNT_Interface*  clazz )    \
  666.   {                                                     \
  667.     FT_UNUSED( library );                               \
  668.                                                         \
  669.     clazz->goto_table          = goto_table_;           \
  670.     clazz->init_face           = init_face_;            \
  671.     clazz->load_face           = load_face_;            \
  672.     clazz->done_face           = done_face_;            \
  673.     clazz->get_interface       = get_interface_;        \
  674.     clazz->load_any            = load_any_;             \
  675.     clazz->load_head           = load_head_;            \
  676.     clazz->load_hhea           = load_hhea_;            \
  677.     clazz->load_cmap           = load_cmap_;            \
  678.     clazz->load_maxp           = load_maxp_;            \
  679.     clazz->load_os2            = load_os2_;             \
  680.     clazz->load_post           = load_post_;            \
  681.     clazz->load_name           = load_name_;            \
  682.     clazz->free_name           = free_name_;            \
  683.     clazz->load_kern           = load_kern_;            \
  684.     clazz->load_gasp           = load_gasp_;            \
  685.     clazz->load_pclt           = load_pclt_;            \
  686.     clazz->load_bhed           = load_bhed_;            \
  687.     clazz->load_sbit_image     = load_sbit_image_;      \
  688.     clazz->get_psname          = get_psname_;           \
  689.     clazz->free_psnames        = free_psnames_;         \
  690.     clazz->get_kerning         = get_kerning_;          \
  691.     clazz->load_font_dir       = load_font_dir_;        \
  692.     clazz->load_hmtx           = load_hmtx_;            \
  693.     clazz->load_eblc           = load_eblc_;            \
  694.     clazz->free_eblc           = free_eblc_;            \
  695.     clazz->set_sbit_strike     = set_sbit_strike_;      \
  696.     clazz->load_strike_metrics = load_strike_metrics_;  \
  697.     clazz->get_metrics         = get_metrics_;          \
  698.   }
  699.  
  700. #endif /* FT_CONFIG_OPTION_PIC */
  701.  
  702. FT_END_HEADER
  703.  
  704. #endif /* __SFNT_H__ */
  705.  
  706.  
  707. /* END */
  708.