pshints.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:21k
源码类别:

其他游戏

开发平台:

Visual C++

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