Home | History | Annotate | Download | only in services
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  svsfnt.h                                                               */
      4 /*                                                                         */
      5 /*    The FreeType SFNT table loading service (specification).             */
      6 /*                                                                         */
      7 /*  Copyright 2003-2018 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 SVSFNT_H_
     20 #define SVSFNT_H_
     21 
     22 #include FT_INTERNAL_SERVICE_H
     23 #include FT_TRUETYPE_TABLES_H
     24 
     25 
     26 FT_BEGIN_HEADER
     27 
     28 
     29   /*
     30    *  SFNT table loading service.
     31    */
     32 
     33 #define FT_SERVICE_ID_SFNT_TABLE  "sfnt-table"
     34 
     35 
     36   /*
     37    * Used to implement FT_Load_Sfnt_Table().
     38    */
     39   typedef FT_Error
     40   (*FT_SFNT_TableLoadFunc)( FT_Face    face,
     41                             FT_ULong   tag,
     42                             FT_Long    offset,
     43                             FT_Byte*   buffer,
     44                             FT_ULong*  length );
     45 
     46   /*
     47    * Used to implement FT_Get_Sfnt_Table().
     48    */
     49   typedef void*
     50   (*FT_SFNT_TableGetFunc)( FT_Face      face,
     51                            FT_Sfnt_Tag  tag );
     52 
     53 
     54   /*
     55    * Used to implement FT_Sfnt_Table_Info().
     56    */
     57   typedef FT_Error
     58   (*FT_SFNT_TableInfoFunc)( FT_Face    face,
     59                             FT_UInt    idx,
     60                             FT_ULong  *tag,
     61                             FT_ULong  *offset,
     62                             FT_ULong  *length );
     63 
     64 
     65   FT_DEFINE_SERVICE( SFNT_Table )
     66   {
     67     FT_SFNT_TableLoadFunc  load_table;
     68     FT_SFNT_TableGetFunc   get_table;
     69     FT_SFNT_TableInfoFunc  table_info;
     70   };
     71 
     72 
     73 #ifndef FT_CONFIG_OPTION_PIC
     74 
     75 #define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ )  \
     76   static const FT_Service_SFNT_TableRec  class_ =                      \
     77   {                                                                    \
     78     load_, get_, info_                                                 \
     79   };
     80 
     81 #else /* FT_CONFIG_OPTION_PIC */
     82 
     83 #define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ ) \
     84   void                                                                \
     85   FT_Init_Class_ ## class_( FT_Service_SFNT_TableRec*  clazz )        \
     86   {                                                                   \
     87     clazz->load_table = load_;                                        \
     88     clazz->get_table  = get_;                                         \
     89     clazz->table_info = info_;                                        \
     90   }
     91 
     92 #endif /* FT_CONFIG_OPTION_PIC */
     93 
     94   /* */
     95 
     96 
     97 FT_END_HEADER
     98 
     99 
    100 #endif /* SVSFNT_H_ */
    101 
    102 
    103 /* END */
    104