Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
4680 right-hear 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 
24
#include FT_INTERNAL_DRIVER_H
25
#include FT_INTERNAL_TRUETYPE_TYPES_H
26
 
27
 
28
FT_BEGIN_HEADER
29
 
30
 
31
  /*************************************************************************/
32
  /*                                                                       */
33
  /*                                                             */
34
  /*    TT_Init_Face_Func                                                  */
35
  /*                                                                       */
36
  /*                                                          */
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
  /*                                                                */
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
  /*                                                               */
54
  /*    FreeType error code.  0 means success.                             */
55
  /*                                                                       */
56
  /*                                                                 */
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
  /*                                                             */
77
  /*    TT_Load_Face_Func                                                  */
78
  /*                                                                       */
79
  /*                                                          */
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
  /*                                                                */
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
  /*                                                               */
97
  /*    FreeType error code.  0 means success.                             */
98
  /*                                                                       */
99
  /*                                                                 */
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
  /*                                                             */
113
  /*    TT_Done_Face_Func                                                  */
114
  /*                                                                       */
115
  /*                                                          */
116
  /*    A callback used to delete the common SFNT data from a face.        */
117
  /*                                                                       */
118
  /*                                                                */
119
  /*    face :: A handle to the target face object.                        */
120
  /*                                                                       */
121
  /*                                                                 */
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
  /*                                                             */
133
  /*    TT_Load_SFNT_HeaderRec_Func                                        */
134
  /*                                                                       */
135
  /*                                                          */
136
  /*    Loads the header of a SFNT font file.  Supports collections.       */
137
  /*                                                                       */
138
  /*                                                                */
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
  /*                                                               */
147
  /*    sfnt       :: The SFNT header.                                     */
148
  /*                                                                       */
149
  /*                                                               */
150
  /*    FreeType error code.  0 means success.                             */
151
  /*                                                                       */
152
  /*                                                                 */
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
  /*                                                             */
171
  /*    TT_Load_Directory_Func                                             */
172
  /*                                                                       */
173
  /*                                                          */
174
  /*    Loads the table directory into a face object.                      */
175
  /*                                                                       */
176
  /*                                                                */
177
  /*    face   :: A handle to the target face object.                      */
178
  /*                                                                       */
179
  /*    stream :: The input stream.                                        */
180
  /*                                                                       */
181
  /*    sfnt   :: The SFNT header.                                         */
182
  /*                                                                       */
183
  /*                                                               */
184
  /*    FreeType error code.  0 means success.                             */
185
  /*                                                                       */
186
  /*                                                                 */
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
  /*                                                             */
202
  /*    TT_Load_Any_Func                                                   */
203
  /*                                                                       */
204
  /*                                                          */
205
  /*    Load any font table into client memory.                            */
206
  /*                                                                       */
207
  /*                                                                */
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
  /*                                                               */
234
  /*    buffer :: The address of target buffer.                            */
235
  /*                                                                       */
236
  /*                                                               */
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
  /*                                                             */
250
  /*    TT_Find_SBit_Image_Func                                            */
251
  /*                                                                       */
252
  /*                                                          */
253
  /*    Check whether an embedded bitmap (an `sbit') exists for a given    */
254
  /*    glyph, at a given strike.                                          */
255
  /*                                                                       */
256
  /*                                                                */
257
  /*    face          :: The target face object.                           */
258
  /*                                                                       */
259
  /*    glyph_index   :: The glyph index.                                  */
260
  /*                                                                       */
261
  /*    strike_index  :: The current strike index.                         */
262
  /*                                                                       */
263
  /*                                                               */
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
  /*                                                               */
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
  /*                                                             */
287
  /*    TT_Load_SBit_Metrics_Func                                          */
288
  /*                                                                       */
289
  /*                                                          */
290
  /*    Get the big metrics for a given embedded bitmap.                   */
291
  /*                                                                       */
292
  /*                                                                */
293
  /*    stream      :: The input stream.                                   */
294
  /*                                                                       */
295
  /*    range       :: The SBit range containing the glyph.                */
296
  /*                                                                       */
297
  /*                                                               */
298
  /*    big_metrics :: A big SBit metrics structure for the glyph.         */
299
  /*                                                                       */
300
  /*                                                               */
301
  /*    FreeType error code.  0 means success.                             */
302
  /*                                                                       */
303
  /*                                                                 */
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
  /*                                                             */
320
  /*    TT_Load_SBit_Image_Func                                            */
321
  /*                                                                       */
322
  /*                                                          */
323
  /*    Load a given glyph sbit image from the font resource.  This also   */
324
  /*    returns its metrics.                                               */
325
  /*                                                                       */
326
  /*                                                                */
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
  /*                                                               */
343
  /*    amap ::                                                            */
344
  /*      The target pixmap.                                               */
345
  /*                                                                       */
346
  /*    ametrics ::                                                        */
347
  /*      A big sbit metrics structure for the glyph image.                */
348
  /*                                                                       */
349
  /*                                                               */
350
  /*    FreeType error code.  0 means success.  Returns an error if no     */
351
  /*    glyph sbit exists for the index.                                   */
352
  /*                                                                       */
353
  /*                                                                 */
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
  /*                                                             */
371
  /*    TT_Set_SBit_Strike_OldFunc                                         */
372
  /*                                                                       */
373
  /*                                                          */
374
  /*    Select an sbit strike for a given size request.                    */
375
  /*                                                                       */
376
  /*                                                                */
377
  /*    face          :: The target face object.                           */
378
  /*                                                                       */
379
  /*    req           :: The size request.                                 */
380
  /*                                                                       */
381
  /*                                                               */
382
  /*    astrike_index :: The index of the sbit strike.                     */
383
  /*                                                                       */
384
  /*                                                               */
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
  /*                                                             */
398
  /*    TT_CharMap_Load_Func                                               */
399
  /*                                                                       */
400
  /*                                                          */
401
  /*    Loads a given TrueType character map into memory.                  */
402
  /*                                                                       */
403
  /*                                                                */
404
  /*    face   :: A handle to the parent face object.                      */
405
  /*                                                                       */
406
  /*    stream :: A handle to the current stream object.                   */
407
  /*                                                                       */
408
  /*                                                                */
409
  /*    cmap   :: A pointer to a cmap object.                              */
410
  /*                                                                       */
411
  /*                                                               */
412
  /*    FreeType error code.  0 means success.                             */
413
  /*                                                                       */
414
  /*                                                                 */
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
  /*                                                             */
428
  /*    TT_CharMap_Free_Func                                               */
429
  /*                                                                       */
430
  /*                                                          */
431
  /*    Destroys a character mapping table.                                */
432
  /*                                                                       */
433
  /*                                                                */
434
  /*    face :: A handle to the parent face object.                        */
435
  /*                                                                       */
436
  /*    cmap :: A handle to a cmap object.                                 */
437
  /*                                                                       */
438
  /*                                                               */
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
  /*                                                             */
451
  /*    TT_Set_SBit_Strike_Func                                            */
452
  /*                                                                       */
453
  /*                                                          */
454
  /*    Select an sbit strike for a given size request.                    */
455
  /*                                                                       */
456
  /*                                                                */
457
  /*    face          :: The target face object.                           */
458
  /*                                                                       */
459
  /*    req           :: The size request.                                 */
460
  /*                                                                       */
461
  /*                                                               */
462
  /*    astrike_index :: The index of the sbit strike.                     */
463
  /*                                                                       */
464
  /*                                                               */
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
  /*                                                             */
477
  /*    TT_Load_Strike_Metrics_Func                                        */
478
  /*                                                                       */
479
  /*                                                          */
480
  /*    Load the metrics of a given strike.                                */
481
  /*                                                                       */
482
  /*                                                                */
483
  /*    face          :: The target face object.                           */
484
  /*                                                                       */
485
  /*    strike_index  :: The strike index.                                 */
486
  /*                                                                       */
487
  /*                                                               */
488
  /*    metrics       :: the metrics of the strike.                        */
489
  /*                                                                       */
490
  /*                                                               */
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
  /*                                                             */
503
  /*    TT_Get_PS_Name_Func                                                */
504
  /*                                                                       */
505
  /*                                                          */
506
  /*    Get the PostScript glyph name of a glyph.                          */
507
  /*                                                                       */
508
  /*                                                                */
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
  /*                                                               */
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
  /*                                                             */
528
  /*    TT_Load_Metrics_Func                                               */
529
  /*                                                                       */
530
  /*                                                          */
531
  /*    Load a metrics table, which is a table with a horizontal and a     */
532
  /*    vertical version.                                                  */
533
  /*                                                                       */
534
  /*                                                                */
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
  /*                                                               */
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
  /*                                                             */
553
  /*    TT_Get_Metrics_Func                                                */
554
  /*                                                                       */
555
  /*                                                          */
556
  /*    Load the horizontal or vertical header in a face object.           */
557
  /*                                                                       */
558
  /*                                                                */
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
  /*                                                               */
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
  /*                                                             */
579
  /*    TT_Load_Table_Func                                                 */
580
  /*                                                                       */
581
  /*                                                          */
582
  /*    Load a given TrueType table.                                       */
583
  /*                                                                       */
584
  /*                                                                */
585
  /*    face   :: A handle to the target face object.                      */
586
  /*                                                                       */
587
  /*    stream :: The input stream.                                        */
588
  /*                                                                       */
589
  /*                                                               */
590
  /*    FreeType error code.  0 means success.                             */
591
  /*                                                                       */
592
  /*                                                                 */
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
  /*                                                             */
604
  /*    TT_Free_Table_Func                                                 */
605
  /*                                                                       */
606
  /*                                                          */
607
  /*    Free a given TrueType table.                                       */
608
  /*                                                                       */
609
  /*                                                                */
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
  /*                                                               */
640
  /*    SFNT_Interface                                                     */
641
  /*                                                                       */
642
  /*                                                          */
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
  /*                                                               */
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 */