|
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 */ |