misc/libfreetype/include/freetype/internal/pshints.h
changeset 9431 0f5961910e27
parent 9357 a501f5ec7b34
parent 9429 7a97a554ac80
child 9433 f0a8ac191839
equal deleted inserted replaced
9357:a501f5ec7b34 9431:0f5961910e27
     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 */