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