~ubuntu-branches/ubuntu/vivid/emscripten/vivid

« back to all changes in this revision

Viewing changes to tests/freetype/include/freetype/internal/pshints.h

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2013-05-02 13:11:51 UTC
  • Revision ID: package-import@ubuntu.com-20130502131151-q8dvteqr1ef2x7xz
Tags: upstream-1.4.1~20130504~adb56cb
ImportĀ upstreamĀ versionĀ 1.4.1~20130504~adb56cb

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************/
 
2
/*                                                                         */
 
3
/*  pshints.h                                                              */
 
4
/*                                                                         */
 
5
/*    Interface to Postscript-specific (Type 1 and Type 2) hints           */
 
6
/*    recorders (specification only).  These are used to support native    */
 
7
/*    T1/T2 hints in the `type1', `cid', and `cff' font drivers.           */
 
8
/*                                                                         */
 
9
/*  Copyright 2001, 2002, 2003, 2005, 2006, 2007, 2009 by                  */
 
10
/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 
11
/*                                                                         */
 
12
/*  This file is part of the FreeType project, and may only be used,       */
 
13
/*  modified, and distributed under the terms of the FreeType project      */
 
14
/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 
15
/*  this file you indicate that you have read the license and              */
 
16
/*  understand and accept it fully.                                        */
 
17
/*                                                                         */
 
18
/***************************************************************************/
 
19
 
 
20
 
 
21
#ifndef __PSHINTS_H__
 
22
#define __PSHINTS_H__
 
23
 
 
24
 
 
25
#include <ft2build.h>
 
26
#include FT_FREETYPE_H
 
27
#include FT_TYPE1_TABLES_H
 
28
 
 
29
 
 
30
FT_BEGIN_HEADER
 
31
 
 
32
 
 
33
  /*************************************************************************/
 
34
  /*************************************************************************/
 
35
  /*****                                                               *****/
 
36
  /*****               INTERNAL REPRESENTATION OF GLOBALS              *****/
 
37
  /*****                                                               *****/
 
38
  /*************************************************************************/
 
39
  /*************************************************************************/
 
40
 
 
41
  typedef struct PSH_GlobalsRec_*  PSH_Globals;
 
42
 
 
43
  typedef FT_Error
 
44
  (*PSH_Globals_NewFunc)( FT_Memory     memory,
 
45
                          T1_Private*   private_dict,
 
46
                          PSH_Globals*  aglobals );
 
47
 
 
48
  typedef FT_Error
 
49
  (*PSH_Globals_SetScaleFunc)( PSH_Globals  globals,
 
50
                               FT_Fixed     x_scale,
 
51
                               FT_Fixed     y_scale,
 
52
                               FT_Fixed     x_delta,
 
53
                               FT_Fixed     y_delta );
 
54
 
 
55
  typedef void
 
56
  (*PSH_Globals_DestroyFunc)( PSH_Globals  globals );
 
57
 
 
58
 
 
59
  typedef struct  PSH_Globals_FuncsRec_
 
60
  {
 
61
    PSH_Globals_NewFunc       create;
 
62
    PSH_Globals_SetScaleFunc  set_scale;
 
63
    PSH_Globals_DestroyFunc   destroy;
 
64
 
 
65
  } PSH_Globals_FuncsRec, *PSH_Globals_Funcs;
 
66
 
 
67
 
 
68
  /*************************************************************************/
 
69
  /*************************************************************************/
 
70
  /*****                                                               *****/
 
71
  /*****                  PUBLIC TYPE 1 HINTS RECORDER                 *****/
 
72
  /*****                                                               *****/
 
73
  /*************************************************************************/
 
74
  /*************************************************************************/
 
75
 
 
76
  /*************************************************************************
 
77
   *
 
78
   * @type:
 
79
   *   T1_Hints
 
80
   *
 
81
   * @description:
 
82
   *   This is a handle to an opaque structure used to record glyph hints
 
83
   *   from a Type 1 character glyph character string.
 
84
   *
 
85
   *   The methods used to operate on this object are defined by the
 
86
   *   @T1_Hints_FuncsRec structure.  Recording glyph hints is normally
 
87
   *   achieved through the following scheme:
 
88
   *
 
89
   *   - Open a new hint recording session by calling the `open' method.
 
90
   *     This rewinds the recorder and prepare it for new input.
 
91
   *
 
92
   *   - For each hint found in the glyph charstring, call the corresponding
 
93
   *     method (`stem', `stem3', or `reset').  Note that these functions do
 
94
   *     not return an error code.
 
95
   *
 
96
   *   - Close the recording session by calling the `close' method.  It
 
97
   *     returns an error code if the hints were invalid or something
 
98
   *     strange happened (e.g., memory shortage).
 
99
   *
 
100
   *   The hints accumulated in the object can later be used by the
 
101
   *   PostScript hinter.
 
102
   *
 
103
   */
 
104
  typedef struct T1_HintsRec_*  T1_Hints;
 
105
 
 
106
 
 
107
  /*************************************************************************
 
108
   *
 
109
   * @type:
 
110
   *   T1_Hints_Funcs
 
111
   *
 
112
   * @description:
 
113
   *   A pointer to the @T1_Hints_FuncsRec structure that defines the API of
 
114
   *   a given @T1_Hints object.
 
115
   *
 
116
   */
 
117
  typedef const struct T1_Hints_FuncsRec_*  T1_Hints_Funcs;
 
118
 
 
119
 
 
120
  /*************************************************************************
 
121
   *
 
122
   * @functype:
 
123
   *   T1_Hints_OpenFunc
 
124
   *
 
125
   * @description:
 
126
   *   A method of the @T1_Hints class used to prepare it for a new Type 1
 
127
   *   hints recording session.
 
128
   *
 
129
   * @input:
 
130
   *   hints ::
 
131
   *     A handle to the Type 1 hints recorder.
 
132
   *
 
133
   * @note:
 
134
   *   You should always call the @T1_Hints_CloseFunc method in order to
 
135
   *   close an opened recording session.
 
136
   *
 
137
   */
 
138
  typedef void
 
139
  (*T1_Hints_OpenFunc)( T1_Hints  hints );
 
140
 
 
141
 
 
142
  /*************************************************************************
 
143
   *
 
144
   * @functype:
 
145
   *   T1_Hints_SetStemFunc
 
146
   *
 
147
   * @description:
 
148
   *   A method of the @T1_Hints class used to record a new horizontal or
 
149
   *   vertical stem.  This corresponds to the Type 1 `hstem' and `vstem'
 
150
   *   operators.
 
151
   *
 
152
   * @input:
 
153
   *   hints ::
 
154
   *     A handle to the Type 1 hints recorder.
 
155
   *
 
156
   *   dimension ::
 
157
   *     0 for horizontal stems (hstem), 1 for vertical ones (vstem).
 
158
   *
 
159
   *   coords ::
 
160
   *     Array of 2 coordinates in 16.16 format, used as (position,length)
 
161
   *     stem descriptor.
 
162
   *
 
163
   * @note:
 
164
   *   Use vertical coordinates (y) for horizontal stems (dim=0).  Use
 
165
   *   horizontal coordinates (x) for vertical stems (dim=1).
 
166
   *
 
167
   *   `coords[0]' is the absolute stem position (lowest coordinate);
 
168
   *   `coords[1]' is the length.
 
169
   *
 
170
   *   The length can be negative, in which case it must be either -20 or
 
171
   *   -21.  It is interpreted as a `ghost' stem, according to the Type 1
 
172
   *   specification.
 
173
   *
 
174
   *   If the length is -21 (corresponding to a bottom ghost stem), then
 
175
   *   the real stem position is `coords[0]+coords[1]'.
 
176
   *
 
177
   */
 
178
  typedef void
 
179
  (*T1_Hints_SetStemFunc)( T1_Hints   hints,
 
180
                           FT_UInt    dimension,
 
181
                           FT_Fixed*  coords );
 
182
 
 
183
 
 
184
  /*************************************************************************
 
185
   *
 
186
   * @functype:
 
187
   *   T1_Hints_SetStem3Func
 
188
   *
 
189
   * @description:
 
190
   *   A method of the @T1_Hints class used to record three
 
191
   *   counter-controlled horizontal or vertical stems at once.
 
192
   *
 
193
   * @input:
 
194
   *   hints ::
 
195
   *     A handle to the Type 1 hints recorder.
 
196
   *
 
197
   *   dimension ::
 
198
   *     0 for horizontal stems, 1 for vertical ones.
 
199
   *
 
200
   *   coords ::
 
201
   *     An array of 6 values in 16.16 format, holding 3 (position,length)
 
202
   *     pairs for the counter-controlled stems.
 
203
   *
 
204
   * @note:
 
205
   *   Use vertical coordinates (y) for horizontal stems (dim=0).  Use
 
206
   *   horizontal coordinates (x) for vertical stems (dim=1).
 
207
   *
 
208
   *   The lengths cannot be negative (ghost stems are never
 
209
   *   counter-controlled).
 
210
   *
 
211
   */
 
212
  typedef void
 
213
  (*T1_Hints_SetStem3Func)( T1_Hints   hints,
 
214
                            FT_UInt    dimension,
 
215
                            FT_Fixed*  coords );
 
216
 
 
217
 
 
218
  /*************************************************************************
 
219
   *
 
220
   * @functype:
 
221
   *   T1_Hints_ResetFunc
 
222
   *
 
223
   * @description:
 
224
   *   A method of the @T1_Hints class used to reset the stems hints in a
 
225
   *   recording session.
 
226
   *
 
227
   * @input:
 
228
   *   hints ::
 
229
   *     A handle to the Type 1 hints recorder.
 
230
   *
 
231
   *   end_point ::
 
232
   *     The index of the last point in the input glyph in which the
 
233
   *     previously defined hints apply.
 
234
   *
 
235
   */
 
236
  typedef void
 
237
  (*T1_Hints_ResetFunc)( T1_Hints  hints,
 
238
                         FT_UInt   end_point );
 
239
 
 
240
 
 
241
  /*************************************************************************
 
242
   *
 
243
   * @functype:
 
244
   *   T1_Hints_CloseFunc
 
245
   *
 
246
   * @description:
 
247
   *   A method of the @T1_Hints class used to close a hint recording
 
248
   *   session.
 
249
   *
 
250
   * @input:
 
251
   *   hints ::
 
252
   *     A handle to the Type 1 hints recorder.
 
253
   *
 
254
   *   end_point ::
 
255
   *     The index of the last point in the input glyph.
 
256
   *
 
257
   * @return:
 
258
   *   FreeType error code.  0 means success.
 
259
   *
 
260
   * @note:
 
261
   *   The error code is set to indicate that an error occurred during the
 
262
   *   recording session.
 
263
   *
 
264
   */
 
265
  typedef FT_Error
 
266
  (*T1_Hints_CloseFunc)( T1_Hints  hints,
 
267
                         FT_UInt   end_point );
 
268
 
 
269
 
 
270
  /*************************************************************************
 
271
   *
 
272
   * @functype:
 
273
   *   T1_Hints_ApplyFunc
 
274
   *
 
275
   * @description:
 
276
   *   A method of the @T1_Hints class used to apply hints to the
 
277
   *   corresponding glyph outline.  Must be called once all hints have been
 
278
   *   recorded.
 
279
   *
 
280
   * @input:
 
281
   *   hints ::
 
282
   *     A handle to the Type 1 hints recorder.
 
283
   *
 
284
   *   outline ::
 
285
   *     A pointer to the target outline descriptor.
 
286
   *
 
287
   *   globals ::
 
288
   *     The hinter globals for this font.
 
289
   *
 
290
   *   hint_mode ::
 
291
   *     Hinting information.
 
292
   *
 
293
   * @return:
 
294
   *   FreeType error code.  0 means success.
 
295
   *
 
296
   * @note:
 
297
   *   On input, all points within the outline are in font coordinates. On
 
298
   *   output, they are in 1/64th of pixels.
 
299
   *
 
300
   *   The scaling transformation is taken from the `globals' object which
 
301
   *   must correspond to the same font as the glyph.
 
302
   *
 
303
   */
 
304
  typedef FT_Error
 
305
  (*T1_Hints_ApplyFunc)( T1_Hints        hints,
 
306
                         FT_Outline*     outline,
 
307
                         PSH_Globals     globals,
 
308
                         FT_Render_Mode  hint_mode );
 
309
 
 
310
 
 
311
  /*************************************************************************
 
312
   *
 
313
   * @struct:
 
314
   *   T1_Hints_FuncsRec
 
315
   *
 
316
   * @description:
 
317
   *   The structure used to provide the API to @T1_Hints objects.
 
318
   *
 
319
   * @fields:
 
320
   *   hints ::
 
321
   *     A handle to the T1 Hints recorder.
 
322
   *
 
323
   *   open ::
 
324
   *     The function to open a recording session.
 
325
   *
 
326
   *   close ::
 
327
   *     The function to close a recording session.
 
328
   *
 
329
   *   stem ::
 
330
   *     The function to set a simple stem.
 
331
   *
 
332
   *   stem3 ::
 
333
   *     The function to set counter-controlled stems.
 
334
   *
 
335
   *   reset ::
 
336
   *     The function to reset stem hints.
 
337
   *
 
338
   *   apply ::
 
339
   *     The function to apply the hints to the corresponding glyph outline.
 
340
   *
 
341
   */
 
342
  typedef struct  T1_Hints_FuncsRec_
 
343
  {
 
344
    T1_Hints               hints;
 
345
    T1_Hints_OpenFunc      open;
 
346
    T1_Hints_CloseFunc     close;
 
347
    T1_Hints_SetStemFunc   stem;
 
348
    T1_Hints_SetStem3Func  stem3;
 
349
    T1_Hints_ResetFunc     reset;
 
350
    T1_Hints_ApplyFunc     apply;
 
351
 
 
352
  } T1_Hints_FuncsRec;
 
353
 
 
354
 
 
355
  /*************************************************************************/
 
356
  /*************************************************************************/
 
357
  /*****                                                               *****/
 
358
  /*****                  PUBLIC TYPE 2 HINTS RECORDER                 *****/
 
359
  /*****                                                               *****/
 
360
  /*************************************************************************/
 
361
  /*************************************************************************/
 
362
 
 
363
  /*************************************************************************
 
364
   *
 
365
   * @type:
 
366
   *   T2_Hints
 
367
   *
 
368
   * @description:
 
369
   *   This is a handle to an opaque structure used to record glyph hints
 
370
   *   from a Type 2 character glyph character string.
 
371
   *
 
372
   *   The methods used to operate on this object are defined by the
 
373
   *   @T2_Hints_FuncsRec structure.  Recording glyph hints is normally
 
374
   *   achieved through the following scheme:
 
375
   *
 
376
   *   - Open a new hint recording session by calling the `open' method.
 
377
   *     This rewinds the recorder and prepare it for new input.
 
378
   *
 
379
   *   - For each hint found in the glyph charstring, call the corresponding
 
380
   *     method (`stems', `hintmask', `counters').  Note that these
 
381
   *     functions do not return an error code.
 
382
   *
 
383
   *   - Close the recording session by calling the `close' method.  It
 
384
   *     returns an error code if the hints were invalid or something
 
385
   *     strange happened (e.g., memory shortage).
 
386
   *
 
387
   *   The hints accumulated in the object can later be used by the
 
388
   *   Postscript hinter.
 
389
   *
 
390
   */
 
391
  typedef struct T2_HintsRec_*  T2_Hints;
 
392
 
 
393
 
 
394
  /*************************************************************************
 
395
   *
 
396
   * @type:
 
397
   *   T2_Hints_Funcs
 
398
   *
 
399
   * @description:
 
400
   *   A pointer to the @T2_Hints_FuncsRec structure that defines the API of
 
401
   *   a given @T2_Hints object.
 
402
   *
 
403
   */
 
404
  typedef const struct T2_Hints_FuncsRec_*  T2_Hints_Funcs;
 
405
 
 
406
 
 
407
  /*************************************************************************
 
408
   *
 
409
   * @functype:
 
410
   *   T2_Hints_OpenFunc
 
411
   *
 
412
   * @description:
 
413
   *   A method of the @T2_Hints class used to prepare it for a new Type 2
 
414
   *   hints recording session.
 
415
   *
 
416
   * @input:
 
417
   *   hints ::
 
418
   *     A handle to the Type 2 hints recorder.
 
419
   *
 
420
   * @note:
 
421
   *   You should always call the @T2_Hints_CloseFunc method in order to
 
422
   *   close an opened recording session.
 
423
   *
 
424
   */
 
425
  typedef void
 
426
  (*T2_Hints_OpenFunc)( T2_Hints  hints );
 
427
 
 
428
 
 
429
  /*************************************************************************
 
430
   *
 
431
   * @functype:
 
432
   *   T2_Hints_StemsFunc
 
433
   *
 
434
   * @description:
 
435
   *   A method of the @T2_Hints class used to set the table of stems in
 
436
   *   either the vertical or horizontal dimension.  Equivalent to the
 
437
   *   `hstem', `vstem', `hstemhm', and `vstemhm' Type 2 operators.
 
438
   *
 
439
   * @input:
 
440
   *   hints ::
 
441
   *     A handle to the Type 2 hints recorder.
 
442
   *
 
443
   *   dimension ::
 
444
   *     0 for horizontal stems (hstem), 1 for vertical ones (vstem).
 
445
   *
 
446
   *   count ::
 
447
   *     The number of stems.
 
448
   *
 
449
   *   coords ::
 
450
   *     An array of `count' (position,length) pairs in 16.16 format.
 
451
   *
 
452
   * @note:
 
453
   *   Use vertical coordinates (y) for horizontal stems (dim=0).  Use
 
454
   *   horizontal coordinates (x) for vertical stems (dim=1).
 
455
   *
 
456
   *   There are `2*count' elements in the `coords' array.  Each even
 
457
   *   element is an absolute position in font units, each odd element is a
 
458
   *   length in font units.
 
459
   *
 
460
   *   A length can be negative, in which case it must be either -20 or
 
461
   *   -21.  It is interpreted as a `ghost' stem, according to the Type 1
 
462
   *   specification.
 
463
   *
 
464
   */
 
465
  typedef void
 
466
  (*T2_Hints_StemsFunc)( T2_Hints   hints,
 
467
                         FT_UInt    dimension,
 
468
                         FT_UInt    count,
 
469
                         FT_Fixed*  coordinates );
 
470
 
 
471
 
 
472
  /*************************************************************************
 
473
   *
 
474
   * @functype:
 
475
   *   T2_Hints_MaskFunc
 
476
   *
 
477
   * @description:
 
478
   *   A method of the @T2_Hints class used to set a given hintmask (this
 
479
   *   corresponds to the `hintmask' Type 2 operator).
 
480
   *
 
481
   * @input:
 
482
   *   hints ::
 
483
   *     A handle to the Type 2 hints recorder.
 
484
   *
 
485
   *   end_point ::
 
486
   *     The glyph index of the last point to which the previously defined
 
487
   *     or activated hints apply.
 
488
   *
 
489
   *   bit_count ::
 
490
   *     The number of bits in the hint mask.
 
491
   *
 
492
   *   bytes ::
 
493
   *     An array of bytes modelling the hint mask.
 
494
   *
 
495
   * @note:
 
496
   *   If the hintmask starts the charstring (before any glyph point
 
497
   *   definition), the value of `end_point' should be 0.
 
498
   *
 
499
   *   `bit_count' is the number of meaningful bits in the `bytes' array; it
 
500
   *   must be equal to the total number of hints defined so far (i.e.,
 
501
   *   horizontal+verticals).
 
502
   *
 
503
   *   The `bytes' array can come directly from the Type 2 charstring and
 
504
   *   respects the same format.
 
505
   *
 
506
   */
 
507
  typedef void
 
508
  (*T2_Hints_MaskFunc)( T2_Hints        hints,
 
509
                        FT_UInt         end_point,
 
510
                        FT_UInt         bit_count,
 
511
                        const FT_Byte*  bytes );
 
512
 
 
513
 
 
514
  /*************************************************************************
 
515
   *
 
516
   * @functype:
 
517
   *   T2_Hints_CounterFunc
 
518
   *
 
519
   * @description:
 
520
   *   A method of the @T2_Hints class used to set a given counter mask
 
521
   *   (this corresponds to the `hintmask' Type 2 operator).
 
522
   *
 
523
   * @input:
 
524
   *   hints ::
 
525
   *     A handle to the Type 2 hints recorder.
 
526
   *
 
527
   *   end_point ::
 
528
   *     A glyph index of the last point to which the previously defined or
 
529
   *     active hints apply.
 
530
   *
 
531
   *   bit_count ::
 
532
   *     The number of bits in the hint mask.
 
533
   *
 
534
   *   bytes ::
 
535
   *     An array of bytes modelling the hint mask.
 
536
   *
 
537
   * @note:
 
538
   *   If the hintmask starts the charstring (before any glyph point
 
539
   *   definition), the value of `end_point' should be 0.
 
540
   *
 
541
   *   `bit_count' is the number of meaningful bits in the `bytes' array; it
 
542
   *   must be equal to the total number of hints defined so far (i.e.,
 
543
   *   horizontal+verticals).
 
544
   *
 
545
   *    The `bytes' array can come directly from the Type 2 charstring and
 
546
   *    respects the same format.
 
547
   *
 
548
   */
 
549
  typedef void
 
550
  (*T2_Hints_CounterFunc)( T2_Hints        hints,
 
551
                           FT_UInt         bit_count,
 
552
                           const FT_Byte*  bytes );
 
553
 
 
554
 
 
555
  /*************************************************************************
 
556
   *
 
557
   * @functype:
 
558
   *   T2_Hints_CloseFunc
 
559
   *
 
560
   * @description:
 
561
   *   A method of the @T2_Hints class used to close a hint recording
 
562
   *   session.
 
563
   *
 
564
   * @input:
 
565
   *   hints ::
 
566
   *     A handle to the Type 2 hints recorder.
 
567
   *
 
568
   *   end_point ::
 
569
   *     The index of the last point in the input glyph.
 
570
   *
 
571
   * @return:
 
572
   *   FreeType error code.  0 means success.
 
573
   *
 
574
   * @note:
 
575
   *   The error code is set to indicate that an error occurred during the
 
576
   *   recording session.
 
577
   *
 
578
   */
 
579
  typedef FT_Error
 
580
  (*T2_Hints_CloseFunc)( T2_Hints  hints,
 
581
                         FT_UInt   end_point );
 
582
 
 
583
 
 
584
  /*************************************************************************
 
585
   *
 
586
   * @functype:
 
587
   *   T2_Hints_ApplyFunc
 
588
   *
 
589
   * @description:
 
590
   *   A method of the @T2_Hints class used to apply hints to the
 
591
   *   corresponding glyph outline.  Must be called after the `close'
 
592
   *   method.
 
593
   *
 
594
   * @input:
 
595
   *   hints ::
 
596
   *     A handle to the Type 2 hints recorder.
 
597
   *
 
598
   *   outline ::
 
599
   *     A pointer to the target outline descriptor.
 
600
   *
 
601
   *   globals ::
 
602
   *     The hinter globals for this font.
 
603
   *
 
604
   *   hint_mode ::
 
605
   *     Hinting information.
 
606
   *
 
607
   * @return:
 
608
   *   FreeType error code.  0 means success.
 
609
   *
 
610
   * @note:
 
611
   *   On input, all points within the outline are in font coordinates. On
 
612
   *   output, they are in 1/64th of pixels.
 
613
   *
 
614
   *   The scaling transformation is taken from the `globals' object which
 
615
   *   must correspond to the same font than the glyph.
 
616
   *
 
617
   */
 
618
  typedef FT_Error
 
619
  (*T2_Hints_ApplyFunc)( T2_Hints        hints,
 
620
                         FT_Outline*     outline,
 
621
                         PSH_Globals     globals,
 
622
                         FT_Render_Mode  hint_mode );
 
623
 
 
624
 
 
625
  /*************************************************************************
 
626
   *
 
627
   * @struct:
 
628
   *   T2_Hints_FuncsRec
 
629
   *
 
630
   * @description:
 
631
   *   The structure used to provide the API to @T2_Hints objects.
 
632
   *
 
633
   * @fields:
 
634
   *   hints ::
 
635
   *     A handle to the T2 hints recorder object.
 
636
   *
 
637
   *   open ::
 
638
   *     The function to open a recording session.
 
639
   *
 
640
   *   close ::
 
641
   *     The function to close a recording session.
 
642
   *
 
643
   *   stems ::
 
644
   *     The function to set the dimension's stems table.
 
645
   *
 
646
   *   hintmask ::
 
647
   *     The function to set hint masks.
 
648
   *
 
649
   *   counter ::
 
650
   *     The function to set counter masks.
 
651
   *
 
652
   *   apply ::
 
653
   *     The function to apply the hints on the corresponding glyph outline.
 
654
   *
 
655
   */
 
656
  typedef struct  T2_Hints_FuncsRec_
 
657
  {
 
658
    T2_Hints              hints;
 
659
    T2_Hints_OpenFunc     open;
 
660
    T2_Hints_CloseFunc    close;
 
661
    T2_Hints_StemsFunc    stems;
 
662
    T2_Hints_MaskFunc     hintmask;
 
663
    T2_Hints_CounterFunc  counter;
 
664
    T2_Hints_ApplyFunc    apply;
 
665
 
 
666
  } T2_Hints_FuncsRec;
 
667
 
 
668
 
 
669
  /* */
 
670
 
 
671
 
 
672
  typedef struct  PSHinter_Interface_
 
673
  {
 
674
    PSH_Globals_Funcs  (*get_globals_funcs)( FT_Module  module );
 
675
    T1_Hints_Funcs     (*get_t1_funcs)     ( FT_Module  module );
 
676
    T2_Hints_Funcs     (*get_t2_funcs)     ( FT_Module  module );
 
677
 
 
678
  } PSHinter_Interface;
 
679
 
 
680
  typedef PSHinter_Interface*  PSHinter_Service;
 
681
 
 
682
#ifndef FT_CONFIG_OPTION_PIC
 
683
 
 
684
#define FT_DEFINE_PSHINTER_INTERFACE(class_, get_globals_funcs_,             \
 
685
                                     get_t1_funcs_, get_t2_funcs_)           \
 
686
  static const PSHinter_Interface class_ =                                   \
 
687
  {                                                                          \
 
688
    get_globals_funcs_, get_t1_funcs_, get_t2_funcs_                         \
 
689
  };
 
690
 
 
691
#else /* FT_CONFIG_OPTION_PIC */ 
 
692
 
 
693
#define FT_DEFINE_PSHINTER_INTERFACE(class_, get_globals_funcs_,             \
 
694
                                     get_t1_funcs_, get_t2_funcs_)           \
 
695
  void                                                                       \
 
696
  FT_Init_Class_##class_( FT_Library library,                                \
 
697
                          PSHinter_Interface*  clazz)                        \
 
698
  {                                                                          \
 
699
    FT_UNUSED(library);                                                      \
 
700
    clazz->get_globals_funcs = get_globals_funcs_;                           \
 
701
    clazz->get_t1_funcs = get_t1_funcs_;                                     \
 
702
    clazz->get_t2_funcs = get_t2_funcs_;                                     \
 
703
  } 
 
704
 
 
705
#endif /* FT_CONFIG_OPTION_PIC */ 
 
706
 
 
707
FT_END_HEADER
 
708
 
 
709
#endif /* __PSHINTS_H__ */
 
710
 
 
711
 
 
712
/* END */