• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /***************************************************************************/
2 /*                                                                         */
3 /*  pshrec.h                                                               */
4 /*                                                                         */
5 /*    Postscript (Type1/Type2) hints recorder (specification).             */
6 /*                                                                         */
7 /*  Copyright 2001, 2002, 2003, 2006, 2008 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   /**************************************************************************/
20   /*                                                                        */
21   /*  The functions defined here are called from the Type 1, CID and CFF    */
22   /*  font drivers to record the hints of a given character/glyph.          */
23   /*                                                                        */
24   /*  The hints are recorded in a unified format, and are later processed   */
25   /*  by the `optimizer' and `fitter' to adjust the outlines to the pixel   */
26   /*  grid.                                                                 */
27   /*                                                                        */
28   /**************************************************************************/
29 
30 
31 #ifndef __PSHREC_H__
32 #define __PSHREC_H__
33 
34 
35 #include <ft2build.h>
36 #include FT_INTERNAL_POSTSCRIPT_HINTS_H
37 #include "pshglob.h"
38 
39 
40 FT_BEGIN_HEADER
41 
42 
43   /*************************************************************************/
44   /*************************************************************************/
45   /*****                                                               *****/
46   /*****                 GLYPH HINTS RECORDER INTERNALS                *****/
47   /*****                                                               *****/
48   /*************************************************************************/
49   /*************************************************************************/
50 
51   /* handle to hint record */
52   typedef struct PS_HintRec_*  PS_Hint;
53 
54   /* hint types */
55   typedef enum  PS_Hint_Type_
56   {
57     PS_HINT_TYPE_1 = 1,
58     PS_HINT_TYPE_2 = 2
59 
60   } PS_Hint_Type;
61 
62 
63   /* hint flags */
64   typedef enum  PS_Hint_Flags_
65   {
66     PS_HINT_FLAG_GHOST  = 1,
67     PS_HINT_FLAG_BOTTOM = 2
68 
69   } PS_Hint_Flags;
70 
71 
72   /* hint descriptor */
73   typedef struct  PS_HintRec_
74   {
75     FT_Int   pos;
76     FT_Int   len;
77     FT_UInt  flags;
78 
79   } PS_HintRec;
80 
81 
82 #define ps_hint_is_active( x )  ( (x)->flags & PS_HINT_FLAG_ACTIVE )
83 #define ps_hint_is_ghost( x )   ( (x)->flags & PS_HINT_FLAG_GHOST  )
84 #define ps_hint_is_bottom( x )  ( (x)->flags & PS_HINT_FLAG_BOTTOM )
85 
86 
87   /* hints table descriptor */
88   typedef struct  PS_Hint_TableRec_
89   {
90     FT_UInt  num_hints;
91     FT_UInt  max_hints;
92     PS_Hint  hints;
93 
94   } PS_Hint_TableRec, *PS_Hint_Table;
95 
96 
97   /* hint and counter mask descriptor */
98   typedef struct  PS_MaskRec_
99   {
100     FT_UInt   num_bits;
101     FT_UInt   max_bits;
102     FT_Byte*  bytes;
103     FT_UInt   end_point;
104 
105   } PS_MaskRec, *PS_Mask;
106 
107 
108   /* masks and counters table descriptor */
109   typedef struct  PS_Mask_TableRec_
110   {
111     FT_UInt  num_masks;
112     FT_UInt  max_masks;
113     PS_Mask  masks;
114 
115   } PS_Mask_TableRec, *PS_Mask_Table;
116 
117 
118  /* dimension-specific hints descriptor */
119   typedef struct  PS_DimensionRec_
120   {
121     PS_Hint_TableRec  hints;
122     PS_Mask_TableRec  masks;
123     PS_Mask_TableRec  counters;
124 
125   } PS_DimensionRec, *PS_Dimension;
126 
127 
128   /* glyph hints descriptor                                */
129   /* dimension 0 => X coordinates + vertical hints/stems   */
130   /* dimension 1 => Y coordinates + horizontal hints/stems */
131   typedef struct  PS_HintsRec_
132   {
133     FT_Memory        memory;
134     FT_Error         error;
135     FT_UInt32        magic;
136     PS_Hint_Type     hint_type;
137     PS_DimensionRec  dimension[2];
138 
139   } PS_HintsRec, *PS_Hints;
140 
141   /* */
142 
143   /* initialize hints recorder */
144   FT_LOCAL( FT_Error )
145   ps_hints_init( PS_Hints   hints,
146                  FT_Memory  memory );
147 
148   /* finalize hints recorder */
149   FT_LOCAL( void )
150   ps_hints_done( PS_Hints  hints );
151 
152   /* initialize Type1 hints recorder interface */
153   FT_LOCAL( void )
154   t1_hints_funcs_init( T1_Hints_FuncsRec*  funcs );
155 
156   /* initialize Type2 hints recorder interface */
157   FT_LOCAL( void )
158   t2_hints_funcs_init( T2_Hints_FuncsRec*  funcs );
159 
160 
161 #ifdef DEBUG_HINTER
162   extern PS_Hints  ps_debug_hints;
163   extern  int      ps_debug_no_horz_hints;
164   extern  int      ps_debug_no_vert_hints;
165 #endif
166 
167  /* */
168 
169 
170 FT_END_HEADER
171 
172 
173 #endif /* __PS_HINTER_RECORD_H__ */
174 
175 
176 /* END */
177