Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4349 | Serge | 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 |
||
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 */ |