1/***************************************************************************/
2/*                                                                         */
3/*  svsfnt.h                                                               */
4/*                                                                         */
5/*    The FreeType SFNT table loading service (specification).             */
6/*                                                                         */
7/*  Copyright 2003, 2004, 2009, 2012 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 "../ftserv.h"
23#include "../../tttables.h"
24
25
26FT_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
97FT_END_HEADER
98
99
100#endif /* __SVSFNT_H__ */
101
102
103/* END */
104