884aa5c5df4f97e0c216c18bdb35f9d7bde349a3
[reactos.git] / lib / freetype / src / pshinter / pshrec.h
1 /***************************************************************************/
2 /*                                                                         */
3 /*  pshrec.h                                                               */
4 /*                                                                         */
5 /*    Postscript (Type1/Type2) hints recorder (specification).             */
6 /*                                                                         */
7 /*  Copyright 2001, 2002 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
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
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   /* magic value used within PS_HintsRec */
129 #define PS_HINTS_MAGIC  0x68696e74   /* "hint" */
130
131
132   /* glyph hints descriptor                                */
133   /* dimension 0 => X coordinates + vertical hints/stems   */
134   /* dimension 1 => Y coordinates + horizontal hints/stems */
135   typedef struct  PS_HintsRec_
136   {
137     FT_Memory        memory;
138     FT_Error         error;
139     FT_UInt32        magic;
140     PS_Hint_Type     hint_type;
141     PS_DimensionRec  dimension[2];
142
143   } PS_HintsRec, *PS_Hints;
144
145   /* */
146
147   /* initialize hints recorder */
148   FT_LOCAL( FT_Error )
149   ps_hints_init( PS_Hints   hints,
150                  FT_Memory  memory );
151
152   /* finalize hints recorder */
153   FT_LOCAL( void )
154   ps_hints_done( PS_Hints  hints );
155
156   /* initialize Type1 hints recorder interface */
157   FT_LOCAL( void )
158   t1_hints_funcs_init( T1_Hints_FuncsRec*  funcs );
159
160   /* initialize Type2 hints recorder interface */
161   FT_LOCAL( void )
162   t2_hints_funcs_init( T2_Hints_FuncsRec*  funcs );
163
164
165 #ifdef DEBUG_HINTER
166   extern PS_Hints  ps_debug_hints;
167   extern  int      ps_debug_no_horz_hints;
168   extern  int      ps_debug_no_vert_hints;
169 #endif
170
171  /* */
172
173
174 FT_END_HEADER
175
176
177 #endif /* __PS_HINTER_RECORD_H__ */
178
179
180 /* END */