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-2001, 2002, 2003, 2004, 2005, 2006 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. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  129.  
  130.   /*************************************************************************/
  131.   /*                                                                       */
  132.   /* <FuncType>                                                            */
  133.   /*    TT_Load_SFNT_HeaderRec_Func                                        */
  134.   /*                                                                       */
  135.   /* <Description>                                                         */
  136.   /*    Loads the header of a SFNT font file.  Supports collections.       */
  137.   /*                                                                       */
  138.   /* <Input>                                                               */
  139.   /*    face       :: A handle to the target face object.                  */
  140.   /*                                                                       */
  141.   /*    stream     :: The input stream.                                    */
  142.   /*                                                                       */
  143.   /*    face_index :: The index of the TrueType font, if we are opening a  */
  144.   /*                  collection.                                          */
  145.   /*                                                                       */
  146.   /* <Output>                                                              */
  147.   /*    sfnt       :: The SFNT header.                                     */
  148.   /*                                                                       */
  149.   /* <Return>                                                              */
  150.   /*    FreeType error code.  0 means success.                             */
  151.   /*                                                                       */
  152.   /* <Note>                                                                */
  153.   /*    The stream cursor must be at the font file's origin.               */
  154.   /*                                                                       */
  155.   /*    This function recognizes fonts embedded in a `TrueType             */
  156.   /*    collection'.                                                       */
  157.   /*                                                                       */
  158.   /*    This function checks that the header is valid by looking at the    */
  159.   /*    values of `search_range', `entry_selector', and `range_shift'.     */
  160.   /*                                                                       */
  161.   typedef FT_Error
  162.   (*TT_Load_SFNT_HeaderRec_Func)( TT_Face      face,
  163.                                   FT_Stream    stream,
  164.                                   FT_Long      face_index,
  165.                                   SFNT_Header  sfnt );
  166.  
  167.  
  168.   /*************************************************************************/
  169.   /*                                                                       */
  170.   /* <FuncType>                                                            */
  171.   /*    TT_Load_Directory_Func                                             */
  172.   /*                                                                       */
  173.   /* <Description>                                                         */
  174.   /*    Loads the table directory into a face object.                      */
  175.   /*                                                                       */
  176.   /* <Input>                                                               */
  177.   /*    face   :: A handle to the target face object.                      */
  178.   /*                                                                       */
  179.   /*    stream :: The input stream.                                        */
  180.   /*                                                                       */
  181.   /*    sfnt   :: The SFNT header.                                         */
  182.   /*                                                                       */
  183.   /* <Return>                                                              */
  184.   /*    FreeType error code.  0 means success.                             */
  185.   /*                                                                       */
  186.   /* <Note>                                                                */
  187.   /*    The stream cursor must be on the first byte after the 4-byte font  */
  188.   /*    format tag.  This is the case just after a call to                 */
  189.   /*    TT_Load_Format_Tag().                                              */
  190.   /*                                                                       */
  191.   typedef FT_Error
  192.   (*TT_Load_Directory_Func)( TT_Face      face,
  193.                              FT_Stream    stream,
  194.                              SFNT_Header  sfnt );
  195.  
  196. #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
  197.  
  198.  
  199.   /*************************************************************************/
  200.   /*                                                                       */
  201.   /* <FuncType>                                                            */
  202.   /*    TT_Load_Any_Func                                                   */
  203.   /*                                                                       */
  204.   /* <Description>                                                         */
  205.   /*    Load any font table into client memory.                            */
  206.   /*                                                                       */
  207.   /* <Input>                                                               */
  208.   /*    face   :: The face object to look for.                             */
  209.   /*                                                                       */
  210.   /*    tag    :: The tag of table to load.  Use the value 0 if you want   */
  211.   /*              to access the whole font file, else set this parameter   */
  212.   /*              to a valid TrueType table tag that you can forge with    */
  213.   /*              the MAKE_TT_TAG macro.                                   */
  214.   /*                                                                       */
  215.   /*    offset :: The starting offset in the table (or the file if         */
  216.   /*              tag == 0).                                               */
  217.   /*                                                                       */
  218.   /*    length :: The address of the decision variable:                    */
  219.   /*                                                                       */
  220.   /*                If length == NULL:                                     */
  221.   /*                  Loads the whole table.  Returns an error if          */
  222.   /*                  `offset' == 0!                                       */
  223.   /*                                                                       */
  224.   /*                If *length == 0:                                       */
  225.   /*                  Exits immediately; returning the length of the given */
  226.   /*                  table or of the font file, depending on the value of */
  227.   /*                  `tag'.                                               */
  228.   /*                                                                       */
  229.   /*                If *length != 0:                                       */
  230.   /*                  Loads the next `length' bytes of table or font,      */
  231.   /*                  starting at offset `offset' (in table or font too).  */
  232.   /*                                                                       */
  233.   /* <Output>                                                              */
  234.   /*    buffer :: The address of target buffer.                            */
  235.   /*                                                                       */
  236.   /* <Return>                                                              */
  237.   /*    TrueType error code.  0 means success.                             */
  238.   /*                                                                       */
  239.   typedef FT_Error
  240.   (*TT_Load_Any_Func)( TT_Face    face,
  241.                        FT_ULong   tag,
  242.                        FT_Long    offset,
  243.                        FT_Byte   *buffer,
  244.                        FT_ULong*  length );
  245.  
  246.  
  247.   /*************************************************************************/
  248.   /*                                                                       */
  249.   /* <FuncType>                                                            */
  250.   /*    TT_Find_SBit_Image_Func                                            */
  251.   /*                                                                       */
  252.   /* <Description>                                                         */
  253.   /*    Check whether an embedded bitmap (an `sbit') exists for a given    */
  254.   /*    glyph, at a given strike.                                          */
  255.   /*                                                                       */
  256.   /* <Input>                                                               */
  257.   /*    face          :: The target face object.                           */
  258.   /*                                                                       */
  259.   /*    glyph_index   :: The glyph index.                                  */
  260.   /*                                                                       */
  261.   /*    strike_index  :: The current strike index.                         */
  262.   /*                                                                       */
  263.   /* <Output>                                                              */
  264.   /*    arange        :: The SBit range containing the glyph index.        */
  265.   /*                                                                       */
  266.   /*    astrike       :: The SBit strike containing the glyph index.       */
  267.   /*                                                                       */
  268.   /*    aglyph_offset :: The offset of the glyph data in `EBDT' table.     */
  269.   /*                                                                       */
  270.   /* <Return>                                                              */
  271.   /*    FreeType error code.  0 means success.  Returns                    */
  272.   /*    SFNT_Err_Invalid_Argument if no sbit exists for the requested      */
  273.   /*    glyph.                                                             */
  274.   /*                                                                       */
  275.   typedef FT_Error
  276.   (*TT_Find_SBit_Image_Func)( TT_Face          face,
  277.                               FT_UInt          glyph_index,
  278.                               FT_ULong         strike_index,
  279.                               TT_SBit_Range   *arange,
  280.                               TT_SBit_Strike  *astrike,
  281.                               FT_ULong        *aglyph_offset );
  282.  
  283.  
  284.   /*************************************************************************/
  285.   /*                                                                       */
  286.   /* <FuncType>                                                            */
  287.   /*    TT_Load_SBit_Metrics_Func                                          */
  288.   /*                                                                       */
  289.   /* <Description>                                                         */
  290.   /*    Get the big metrics for a given embedded bitmap.                   */
  291.   /*                                                                       */
  292.   /* <Input>                                                               */
  293.   /*    stream      :: The input stream.                                   */
  294.   /*                                                                       */
  295.   /*    range       :: The SBit range containing the glyph.                */
  296.   /*                                                                       */
  297.   /* <Output>                                                              */
  298.   /*    big_metrics :: A big SBit metrics structure for the glyph.         */
  299.   /*                                                                       */
  300.   /* <Return>                                                              */
  301.   /*    FreeType error code.  0 means success.                             */
  302.   /*                                                                       */
  303.   /* <Note>                                                                */
  304.   /*    The stream cursor must be positioned at the glyph's offset within  */
  305.   /*    the `EBDT' table before the call.                                  */
  306.   /*                                                                       */
  307.   /*    If the image format uses variable metrics, the stream cursor is    */
  308.   /*    positioned just after the metrics header in the `EBDT' table on    */
  309.   /*    function exit.                                                     */
  310.   /*                                                                       */
  311.   typedef FT_Error
  312.   (*TT_Load_SBit_Metrics_Func)( FT_Stream        stream,
  313.                                 TT_SBit_Range    range,
  314.                                 TT_SBit_Metrics  metrics );
  315.  
  316.  
  317.   /*************************************************************************/
  318.   /*                                                                       */
  319.   /* <FuncType>                                                            */
  320.   /*    TT_Load_SBit_Image_Func                                            */
  321.   /*                                                                       */
  322.   /* <Description>                                                         */
  323.   /*    Load a given glyph sbit image from the font resource.  This also   */
  324.   /*    returns its metrics.                                               */
  325.   /*                                                                       */
  326.   /* <Input>                                                               */
  327.   /*    face ::                                                            */
  328.   /*      The target face object.                                          */
  329.   /*                                                                       */
  330.   /*    strike_index ::                                                    */
  331.   /*      The strike index.                                                */
  332.   /*                                                                       */
  333.   /*    glyph_index ::                                                     */
  334.   /*      The current glyph index.                                         */
  335.   /*                                                                       */
  336.   /*    load_flags ::                                                      */
  337.   /*      The current load flags.                                          */
  338.   /*                                                                       */
  339.   /*    stream ::                                                          */
  340.   /*      The input stream.                                                */
  341.   /*                                                                       */
  342.   /* <Output>                                                              */
  343.   /*    amap ::                                                            */
  344.   /*      The target pixmap.                                               */
  345.   /*                                                                       */
  346.   /*    ametrics ::                                                        */
  347.   /*      A big sbit metrics structure for the glyph image.                */
  348.   /*                                                                       */
  349.   /* <Return>                                                              */
  350.   /*    FreeType error code.  0 means success.  Returns an error if no     */
  351.   /*    glyph sbit exists for the index.                                   */
  352.   /*                                                                       */
  353.   /*  <Note>                                                               */
  354.   /*    The `map.buffer' field is always freed before the glyph is loaded. */
  355.   /*                                                                       */
  356.   typedef FT_Error
  357.   (*TT_Load_SBit_Image_Func)( TT_Face              face,
  358.                               FT_ULong             strike_index,
  359.                               FT_UInt              glyph_index,
  360.                               FT_UInt              load_flags,
  361.                               FT_Stream            stream,
  362.                               FT_Bitmap           *amap,
  363.                               TT_SBit_MetricsRec  *ametrics );
  364.  
  365.  
  366. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  367.  
  368.   /*************************************************************************/
  369.   /*                                                                       */
  370.   /* <FuncType>                                                            */
  371.   /*    TT_Set_SBit_Strike_OldFunc                                         */
  372.   /*                                                                       */
  373.   /* <Description>                                                         */
  374.   /*    Select an sbit strike for a given size request.                    */
  375.   /*                                                                       */
  376.   /* <Input>                                                               */
  377.   /*    face          :: The target face object.                           */
  378.   /*                                                                       */
  379.   /*    req           :: The size request.                                 */
  380.   /*                                                                       */
  381.   /* <Output>                                                              */
  382.   /*    astrike_index :: The index of the sbit strike.                     */
  383.   /*                                                                       */
  384.   /* <Return>                                                              */
  385.   /*    FreeType error code.  0 means success.  Returns an error if no     */
  386.   /*    sbit strike exists for the selected ppem values.                   */
  387.   /*                                                                       */
  388.   typedef FT_Error
  389.   (*TT_Set_SBit_Strike_OldFunc)( TT_Face    face,
  390.                                  FT_UInt    x_ppem,
  391.                                  FT_UInt    y_ppem,
  392.                                  FT_ULong*  astrike_index );
  393.  
  394.  
  395.   /*************************************************************************/
  396.   /*                                                                       */
  397.   /* <FuncType>                                                            */
  398.   /*    TT_CharMap_Load_Func                                               */
  399.   /*                                                                       */
  400.   /* <Description>                                                         */
  401.   /*    Loads a given TrueType character map into memory.                  */
  402.   /*                                                                       */
  403.   /* <Input>                                                               */
  404.   /*    face   :: A handle to the parent face object.                      */
  405.   /*                                                                       */
  406.   /*    stream :: A handle to the current stream object.                   */
  407.   /*                                                                       */
  408.   /* <InOut>                                                               */
  409.   /*    cmap   :: A pointer to a cmap object.                              */
  410.   /*                                                                       */
  411.   /* <Return>                                                              */
  412.   /*    FreeType error code.  0 means success.                             */
  413.   /*                                                                       */
  414.   /* <Note>                                                                */
  415.   /*    The function assumes that the stream is already in use (i.e.,      */
  416.   /*    opened).  In case of error, all partially allocated tables are     */
  417.   /*    released.                                                          */
  418.   /*                                                                       */
  419.   typedef FT_Error
  420.   (*TT_CharMap_Load_Func)( TT_Face    face,
  421.                            void*      cmap,
  422.                            FT_Stream  input );
  423.  
  424.  
  425.   /*************************************************************************/
  426.   /*                                                                       */
  427.   /* <FuncType>                                                            */
  428.   /*    TT_CharMap_Free_Func                                               */
  429.   /*                                                                       */
  430.   /* <Description>                                                         */
  431.   /*    Destroys a character mapping table.                                */
  432.   /*                                                                       */
  433.   /* <Input>                                                               */
  434.   /*    face :: A handle to the parent face object.                        */
  435.   /*                                                                       */
  436.   /*    cmap :: A handle to a cmap object.                                 */
  437.   /*                                                                       */
  438.   /* <Return>                                                              */
  439.   /*    FreeType error code.  0 means success.                             */
  440.   /*                                                                       */
  441.   typedef FT_Error
  442.   (*TT_CharMap_Free_Func)( TT_Face       face,
  443.                            void*         cmap );
  444.  
  445. #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
  446.  
  447.  
  448.   /*************************************************************************/
  449.   /*                                                                       */
  450.   /* <FuncType>                                                            */
  451.   /*    TT_Set_SBit_Strike_Func                                            */
  452.   /*                                                                       */
  453.   /* <Description>                                                         */
  454.   /*    Select an sbit strike for a given size request.                    */
  455.   /*                                                                       */
  456.   /* <Input>                                                               */
  457.   /*    face          :: The target face object.                           */
  458.   /*                                                                       */
  459.   /*    req           :: The size request.                                 */
  460.   /*                                                                       */
  461.   /* <Output>                                                              */
  462.   /*    astrike_index :: The index of the sbit strike.                     */
  463.   /*                                                                       */
  464.   /* <Return>                                                              */
  465.   /*    FreeType error code.  0 means success.  Returns an error if no     */
  466.   /*    sbit strike exists for the selected ppem values.                   */
  467.   /*                                                                       */
  468.   typedef FT_Error
  469.   (*TT_Set_SBit_Strike_Func)( TT_Face          face,
  470.                               FT_Size_Request  req,
  471.                               FT_ULong*        astrike_index );
  472.  
  473.  
  474.   /*************************************************************************/
  475.   /*                                                                       */
  476.   /* <FuncType>                                                            */
  477.   /*    TT_Load_Strike_Metrics_Func                                        */
  478.   /*                                                                       */
  479.   /* <Description>                                                         */
  480.   /*    Load the metrics of a given strike.                                */
  481.   /*                                                                       */
  482.   /* <Input>                                                               */
  483.   /*    face          :: The target face object.                           */
  484.   /*                                                                       */
  485.   /*    strike_index  :: The strike index.                                 */
  486.   /*                                                                       */
  487.   /* <Output>                                                              */
  488.   /*    metrics       :: the metrics of the strike.                        */
  489.   /*                                                                       */
  490.   /* <Return>                                                              */
  491.   /*    FreeType error code.  0 means success.  Returns an error if no     */
  492.   /*    such sbit strike exists.                                           */
  493.   /*                                                                       */
  494.   typedef FT_Error
  495.   (*TT_Load_Strike_Metrics_Func)( TT_Face           face,
  496.                                   FT_ULong          strike_index,
  497.                                   FT_Size_Metrics*  metrics );
  498.  
  499.  
  500.   /*************************************************************************/
  501.   /*                                                                       */
  502.   /* <FuncType>                                                            */
  503.   /*    TT_Get_PS_Name_Func                                                */
  504.   /*                                                                       */
  505.   /* <Description>                                                         */
  506.   /*    Get the PostScript glyph name of a glyph.                          */
  507.   /*                                                                       */
  508.   /* <Input>                                                               */
  509.   /*    idx  :: The glyph index.                                           */
  510.   /*                                                                       */
  511.   /*    PSname :: The address of a string pointer.  Will be NULL in case   */
  512.   /*              of error, otherwise it is a pointer to the glyph name.   */
  513.   /*                                                                       */
  514.   /*              You must not modify the returned string!                 */
  515.   /*                                                                       */
  516.   /* <Output>                                                              */
  517.   /*    FreeType error code.  0 means success.                             */
  518.   /*                                                                       */
  519.   typedef FT_Error
  520.   (*TT_Get_PS_Name_Func)( TT_Face      face,
  521.                           FT_UInt      idx,
  522.                           FT_String**  PSname );
  523.  
  524.  
  525.   /*************************************************************************/
  526.   /*                                                                       */
  527.   /* <FuncType>                                                            */
  528.   /*    TT_Load_Metrics_Func                                               */
  529.   /*                                                                       */
  530.   /* <Description>                                                         */
  531.   /*    Load a metrics table, which is a table with a horizontal and a     */
  532.   /*    vertical version.                                                  */
  533.   /*                                                                       */
  534.   /* <Input>                                                               */
  535.   /*    face     :: A handle to the target face object.                    */
  536.   /*                                                                       */
  537.   /*    stream   :: The input stream.                                      */
  538.   /*                                                                       */
  539.   /*    vertical :: A boolean flag.  If set, load the vertical one.        */
  540.   /*                                                                       */
  541.   /* <Return>                                                              */
  542.   /*    FreeType error code.  0 means success.                             */
  543.   /*                                                                       */
  544.   typedef FT_Error
  545.   (*TT_Load_Metrics_Func)( TT_Face    face,
  546.                            FT_Stream  stream,
  547.                            FT_Bool    vertical );
  548.  
  549.  
  550.   /*************************************************************************/
  551.   /*                                                                       */
  552.   /* <FuncType>                                                            */
  553.   /*    TT_Get_Metrics_Func                                                */
  554.   /*                                                                       */
  555.   /* <Description>                                                         */
  556.   /*    Load the horizontal or vertical header in a face object.           */
  557.   /*                                                                       */
  558.   /* <Input>                                                               */
  559.   /*    face     :: A handle to the target face object.                    */
  560.   /*                                                                       */
  561.   /*    stream   :: The input stream.                                      */
  562.   /*                                                                       */
  563.   /*    vertical :: A boolean flag.  If set, load vertical metrics.        */
  564.   /*                                                                       */
  565.   /* <Return>                                                              */
  566.   /*    FreeType error code.  0 means success.                             */
  567.   /*                                                                       */
  568.   typedef FT_Error
  569.   (*TT_Get_Metrics_Func)( TT_Face     face,
  570.                           FT_Bool     vertical,
  571.                           FT_UInt     gindex,
  572.                           FT_Short*   abearing,
  573.                           FT_UShort*  aadvance );
  574.  
  575.  
  576.   /*************************************************************************/
  577.   /*                                                                       */
  578.   /* <FuncType>                                                            */
  579.   /*    TT_Load_Table_Func                                                 */
  580.   /*                                                                       */
  581.   /* <Description>                                                         */
  582.   /*    Load a given TrueType table.                                       */
  583.   /*                                                                       */
  584.   /* <Input>                                                               */
  585.   /*    face   :: A handle to the target face object.                      */
  586.   /*                                                                       */
  587.   /*    stream :: The input stream.                                        */
  588.   /*                                                                       */
  589.   /* <Return>                                                              */
  590.   /*    FreeType error code.  0 means success.                             */
  591.   /*                                                                       */
  592.   /* <Note>                                                                */
  593.   /*    The function uses `face->goto_table' to seek the stream to the     */
  594.   /*    start of the table, except while loading the font directory.       */
  595.   /*                                                                       */
  596.   typedef FT_Error
  597.   (*TT_Load_Table_Func)( TT_Face    face,
  598.                          FT_Stream  stream );
  599.  
  600.  
  601.   /*************************************************************************/
  602.   /*                                                                       */
  603.   /* <FuncType>                                                            */
  604.   /*    TT_Free_Table_Func                                                 */
  605.   /*                                                                       */
  606.   /* <Description>                                                         */
  607.   /*    Free a given TrueType table.                                       */
  608.   /*                                                                       */
  609.   /* <Input>                                                               */
  610.   /*    face :: A handle to the target face object.                        */
  611.   /*                                                                       */
  612.   typedef void
  613.   (*TT_Free_Table_Func)( TT_Face  face );
  614.  
  615.  
  616.   /*
  617.    * @functype:
  618.    *    TT_Face_GetKerningFunc
  619.    *
  620.    * @description:
  621.    *    Return the horizontal kerning value between two glyphs.
  622.    *
  623.    * @input:
  624.    *    face        :: A handle to the source face object.
  625.    *    left_glyph  :: The left glyph index.
  626.    *    right_glyph :: The right glyph index.
  627.    *
  628.    * @return:
  629.    *    The kerning value in font units.
  630.    */
  631.   typedef FT_Int
  632.   (*TT_Face_GetKerningFunc)( TT_Face  face,
  633.                              FT_UInt  left_glyph,
  634.                              FT_UInt  right_glyph );
  635.  
  636.  
  637.   /*************************************************************************/
  638.   /*                                                                       */
  639.   /* <Struct>                                                              */
  640.   /*    SFNT_Interface                                                     */
  641.   /*                                                                       */
  642.   /* <Description>                                                         */
  643.   /*    This structure holds pointers to the functions used to load and    */
  644.   /*    free the basic tables that are required in a `sfnt' font file.     */
  645.   /*                                                                       */
  646.   /* <Fields>                                                              */
  647.   /*    Check the various xxx_Func() descriptions for details.             */
  648.   /*                                                                       */
  649.   typedef struct  SFNT_Interface_
  650.   {
  651.     TT_Loader_GotoTableFunc      goto_table;
  652.  
  653.     TT_Init_Face_Func            init_face;
  654.     TT_Load_Face_Func            load_face;
  655.     TT_Done_Face_Func            done_face;
  656.     FT_Module_Requester          get_interface;
  657.  
  658.     TT_Load_Any_Func             load_any;
  659.  
  660. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  661.     TT_Load_SFNT_HeaderRec_Func  load_sfnt_header;
  662.     TT_Load_Directory_Func       load_directory;
  663. #endif
  664.  
  665.     /* these functions are called by `load_face' but they can also  */
  666.     /* be called from external modules, if there is a need to do so */
  667.     TT_Load_Table_Func           load_head;
  668.     TT_Load_Metrics_Func         load_hhea;
  669.     TT_Load_Table_Func           load_cmap;
  670.     TT_Load_Table_Func           load_maxp;
  671.     TT_Load_Table_Func           load_os2;
  672.     TT_Load_Table_Func           load_post;
  673.  
  674.     TT_Load_Table_Func           load_name;
  675.     TT_Free_Table_Func           free_name;
  676.  
  677.     /* optional tables */
  678. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  679.     TT_Load_Table_Func           load_hdmx_stub;
  680.     TT_Free_Table_Func           free_hdmx_stub;
  681. #endif
  682.  
  683.     /* this field was called `load_kerning' up to version 2.1.10 */
  684.     TT_Load_Table_Func           load_kern;
  685.  
  686.     TT_Load_Table_Func           load_gasp;
  687.     TT_Load_Table_Func           load_pclt;
  688.  
  689.     /* see `ttload.h'; this field was called `load_bitmap_header' up to */
  690.     /* version 2.1.10                                                   */
  691.     TT_Load_Table_Func           load_bhed;
  692.  
  693. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  694.  
  695.     /* see `ttsbit.h' */
  696.     TT_Set_SBit_Strike_OldFunc   set_sbit_strike_stub;
  697.     TT_Load_Table_Func           load_sbits_stub;
  698.  
  699.     /*
  700.      *  The following two fields appeared in version 2.1.8, and were placed
  701.      *  between `load_sbits' and `load_sbit_image'.  We support them as a
  702.      *  special exception since they are used by Xfont library within the
  703.      *  X.Org xserver, and because the probability that other rogue clients
  704.      *  use the other version 2.1.7 fields below is _extremely_ low.
  705.      *
  706.      *  Note that this forces us to disable an interesting memory-saving
  707.      *  optimization though...
  708.      */
  709.  
  710.     TT_Find_SBit_Image_Func      find_sbit_image;
  711.     TT_Load_SBit_Metrics_Func    load_sbit_metrics;
  712.  
  713. #endif
  714.  
  715.     TT_Load_SBit_Image_Func      load_sbit_image;
  716.  
  717. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  718.     TT_Free_Table_Func           free_sbits_stub;
  719. #endif
  720.  
  721.     /* see `ttpost.h' */
  722.     TT_Get_PS_Name_Func          get_psname;
  723.     TT_Free_Table_Func           free_psnames;
  724.  
  725. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  726.     TT_CharMap_Load_Func         load_charmap_stub;
  727.     TT_CharMap_Free_Func         free_charmap_stub;
  728. #endif
  729.  
  730.     /* starting here, the structure differs from version 2.1.7 */
  731.  
  732.     /* this field was introduced in version 2.1.8, named `get_psname' */
  733.     TT_Face_GetKerningFunc       get_kerning;
  734.  
  735.     /* new elements introduced after version 2.1.10 */
  736.  
  737.     /* load the font directory, i.e., the offset table and */
  738.     /* the table directory                                 */
  739.     TT_Load_Table_Func           load_font_dir;
  740.     TT_Load_Metrics_Func         load_hmtx;
  741.  
  742.     TT_Load_Table_Func           load_eblc;
  743.     TT_Free_Table_Func           free_eblc;
  744.  
  745.     TT_Set_SBit_Strike_Func      set_sbit_strike;
  746.     TT_Load_Strike_Metrics_Func  load_strike_metrics;
  747.  
  748.     TT_Get_Metrics_Func          get_metrics;
  749.  
  750.   } SFNT_Interface;
  751.  
  752.  
  753.   /* transitional */
  754.   typedef SFNT_Interface*   SFNT_Service;
  755.  
  756. #ifndef FT_CONFIG_OPTION_PIC
  757.  
  758. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  759. #define FT_DEFINE_DRIVERS_OLD_INTERNAL(a) \
  760.   a,
  761. #else
  762.   #define FT_DEFINE_DRIVERS_OLD_INTERNAL(a)
  763. #endif
  764. #define FT_INTERNAL(a) \
  765.   a,
  766.  
  767. #define FT_DEFINE_SFNT_INTERFACE(class_,                                     \
  768.     goto_table_, init_face_, load_face_, done_face_, get_interface_,         \
  769.     load_any_, load_sfnt_header_, load_directory_, load_head_,               \
  770.     load_hhea_, load_cmap_, load_maxp_, load_os2_, load_post_,               \
  771.     load_name_, free_name_, load_hdmx_stub_, free_hdmx_stub_,                \
  772.     load_kern_, load_gasp_, load_pclt_, load_bhed_,                          \
  773.     set_sbit_strike_stub_, load_sbits_stub_, find_sbit_image_,               \
  774.     load_sbit_metrics_, load_sbit_image_, free_sbits_stub_,                  \
  775.     get_psname_, free_psnames_, load_charmap_stub_, free_charmap_stub_,      \
  776.     get_kerning_, load_font_dir_, load_hmtx_, load_eblc_, free_eblc_,        \
  777.     set_sbit_strike_, load_strike_metrics_, get_metrics_ )                   \
  778.   static const SFNT_Interface class_ =                                       \
  779.   {                                                                          \
  780.     FT_INTERNAL(goto_table_) \
  781.     FT_INTERNAL(init_face_) \
  782.     FT_INTERNAL(load_face_) \
  783.     FT_INTERNAL(done_face_) \
  784.     FT_INTERNAL(get_interface_) \
  785.     FT_INTERNAL(load_any_) \
  786.     FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sfnt_header_) \
  787.     FT_DEFINE_DRIVERS_OLD_INTERNAL(load_directory_) \
  788.     FT_INTERNAL(load_head_) \
  789.     FT_INTERNAL(load_hhea_) \
  790.     FT_INTERNAL(load_cmap_) \
  791.     FT_INTERNAL(load_maxp_) \
  792.     FT_INTERNAL(load_os2_) \
  793.     FT_INTERNAL(load_post_) \
  794.     FT_INTERNAL(load_name_) \
  795.     FT_INTERNAL(free_name_) \
  796.     FT_DEFINE_DRIVERS_OLD_INTERNAL(load_hdmx_stub_) \
  797.     FT_DEFINE_DRIVERS_OLD_INTERNAL(free_hdmx_stub_) \
  798.     FT_INTERNAL(load_kern_) \
  799.     FT_INTERNAL(load_gasp_) \
  800.     FT_INTERNAL(load_pclt_) \
  801.     FT_INTERNAL(load_bhed_) \
  802.     FT_DEFINE_DRIVERS_OLD_INTERNAL(set_sbit_strike_stub_) \
  803.     FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sbits_stub_) \
  804.     FT_DEFINE_DRIVERS_OLD_INTERNAL(find_sbit_image_) \
  805.     FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sbit_metrics_) \
  806.     FT_INTERNAL(load_sbit_image_) \
  807.     FT_DEFINE_DRIVERS_OLD_INTERNAL(free_sbits_stub_) \
  808.     FT_INTERNAL(get_psname_) \
  809.     FT_INTERNAL(free_psnames_) \
  810.     FT_DEFINE_DRIVERS_OLD_INTERNAL(load_charmap_stub_) \
  811.     FT_DEFINE_DRIVERS_OLD_INTERNAL(free_charmap_stub_) \
  812.     FT_INTERNAL(get_kerning_) \
  813.     FT_INTERNAL(load_font_dir_) \
  814.     FT_INTERNAL(load_hmtx_) \
  815.     FT_INTERNAL(load_eblc_) \
  816.     FT_INTERNAL(free_eblc_) \
  817.     FT_INTERNAL(set_sbit_strike_) \
  818.     FT_INTERNAL(load_strike_metrics_) \
  819.     FT_INTERNAL(get_metrics_) \
  820.   };
  821.  
  822. #else /* FT_CONFIG_OPTION_PIC */
  823.  
  824. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  825. #define FT_DEFINE_DRIVERS_OLD_INTERNAL(a, a_) \
  826.   clazz->a = a_;
  827. #else
  828.   #define FT_DEFINE_DRIVERS_OLD_INTERNAL(a, a_)
  829. #endif
  830. #define FT_INTERNAL(a, a_) \
  831.   clazz->a = a_;
  832.  
  833. #define FT_DEFINE_SFNT_INTERFACE(class_,                                     \
  834.     goto_table_, init_face_, load_face_, done_face_, get_interface_,         \
  835.     load_any_, load_sfnt_header_, load_directory_, load_head_,               \
  836.     load_hhea_, load_cmap_, load_maxp_, load_os2_, load_post_,               \
  837.     load_name_, free_name_, load_hdmx_stub_, free_hdmx_stub_,                \
  838.     load_kern_, load_gasp_, load_pclt_, load_bhed_,                          \
  839.     set_sbit_strike_stub_, load_sbits_stub_, find_sbit_image_,               \
  840.     load_sbit_metrics_, load_sbit_image_, free_sbits_stub_,                  \
  841.     get_psname_, free_psnames_, load_charmap_stub_, free_charmap_stub_,      \
  842.     get_kerning_, load_font_dir_, load_hmtx_, load_eblc_, free_eblc_,        \
  843.     set_sbit_strike_, load_strike_metrics_, get_metrics_ )                   \
  844.   void                                                                       \
  845.   FT_Init_Class_##class_( FT_Library library, SFNT_Interface*  clazz )       \
  846.   {                                                                          \
  847.     FT_UNUSED(library);                                                      \
  848.     FT_INTERNAL(goto_table,goto_table_) \
  849.     FT_INTERNAL(init_face,init_face_) \
  850.     FT_INTERNAL(load_face,load_face_) \
  851.     FT_INTERNAL(done_face,done_face_) \
  852.     FT_INTERNAL(get_interface,get_interface_) \
  853.     FT_INTERNAL(load_any,load_any_) \
  854.     FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sfnt_header,load_sfnt_header_) \
  855.     FT_DEFINE_DRIVERS_OLD_INTERNAL(load_directory,load_directory_) \
  856.     FT_INTERNAL(load_head,load_head_) \
  857.     FT_INTERNAL(load_hhea,load_hhea_) \
  858.     FT_INTERNAL(load_cmap,load_cmap_) \
  859.     FT_INTERNAL(load_maxp,load_maxp_) \
  860.     FT_INTERNAL(load_os2,load_os2_) \
  861.     FT_INTERNAL(load_post,load_post_) \
  862.     FT_INTERNAL(load_name,load_name_) \
  863.     FT_INTERNAL(free_name,free_name_) \
  864.     FT_DEFINE_DRIVERS_OLD_INTERNAL(load_hdmx_stub,load_hdmx_stub_) \
  865.     FT_DEFINE_DRIVERS_OLD_INTERNAL(free_hdmx_stub,free_hdmx_stub_) \
  866.     FT_INTERNAL(load_kern,load_kern_) \
  867.     FT_INTERNAL(load_gasp,load_gasp_) \
  868.     FT_INTERNAL(load_pclt,load_pclt_) \
  869.     FT_INTERNAL(load_bhed,load_bhed_) \
  870.     FT_DEFINE_DRIVERS_OLD_INTERNAL(set_sbit_strike_stub,set_sbit_strike_stub_) \
  871.     FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sbits_stub,load_sbits_stub_) \
  872.     FT_DEFINE_DRIVERS_OLD_INTERNAL(find_sbit_image,find_sbit_image_) \
  873.     FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sbit_metrics,load_sbit_metrics_) \
  874.     FT_INTERNAL(load_sbit_image,load_sbit_image_) \
  875.     FT_DEFINE_DRIVERS_OLD_INTERNAL(free_sbits_stub,free_sbits_stub_) \
  876.     FT_INTERNAL(get_psname,get_psname_) \
  877.     FT_INTERNAL(free_psnames,free_psnames_) \
  878.     FT_DEFINE_DRIVERS_OLD_INTERNAL(load_charmap_stub,load_charmap_stub_) \
  879.     FT_DEFINE_DRIVERS_OLD_INTERNAL(free_charmap_stub,free_charmap_stub_) \
  880.     FT_INTERNAL(get_kerning,get_kerning_) \
  881.     FT_INTERNAL(load_font_dir,load_font_dir_) \
  882.     FT_INTERNAL(load_hmtx,load_hmtx_) \
  883.     FT_INTERNAL(load_eblc,load_eblc_) \
  884.     FT_INTERNAL(free_eblc,free_eblc_) \
  885.     FT_INTERNAL(set_sbit_strike,set_sbit_strike_) \
  886.     FT_INTERNAL(load_strike_metrics,load_strike_metrics_) \
  887.     FT_INTERNAL(get_metrics,get_metrics_) \
  888.   }
  889.  
  890. #endif /* FT_CONFIG_OPTION_PIC */
  891.  
  892. FT_END_HEADER
  893.  
  894. #endif /* __SFNT_H__ */
  895.  
  896.  
  897. /* END */
  898.