1/****************************************************************************
2 *
3 * pshrec.h
4 *
5 * Postscript (Type1/Type2) hints recorder (specification).
6 *
7 * Copyright (C) 2001-2023 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 <freetype/internal/pshints.h>
36#include "pshglob.h"
37
38
39FT_BEGIN_HEADER
40
41
42 /*************************************************************************/
43 /*************************************************************************/
44 /***** *****/
45 /***** GLYPH HINTS RECORDER INTERNALS *****/
46 /***** *****/
47 /*************************************************************************/
48 /*************************************************************************/
49
50 /* handle to hint record */
51 typedef struct PS_HintRec_* PS_Hint;
52
53 /* hint types */
54 typedef enum PS_Hint_Type_
55 {
56 PS_HINT_TYPE_1 = 1,
57 PS_HINT_TYPE_2 = 2
58
59 } PS_Hint_Type;
60
61
62 /* hint flags */
63#define PS_HINT_FLAG_GHOST 1U
64#define PS_HINT_FLAG_BOTTOM 2U
65
66
67 /* hint descriptor */
68 typedef struct PS_HintRec_
69 {
70 FT_Int pos;
71 FT_Int len;
72 FT_UInt flags;
73
74 } PS_HintRec;
75
76
77#define ps_hint_is_active( x ) ( (x)->flags & PS_HINT_FLAG_ACTIVE )
78#define ps_hint_is_ghost( x ) ( (x)->flags & PS_HINT_FLAG_GHOST )
79#define ps_hint_is_bottom( x ) ( (x)->flags & PS_HINT_FLAG_BOTTOM )
80
81
82 /* hints table descriptor */
83 typedef struct PS_Hint_TableRec_
84 {
85 FT_UInt num_hints;
86 FT_UInt max_hints;
87 PS_Hint hints;
88
89 } PS_Hint_TableRec, *PS_Hint_Table;
90
91
92 /* hint and counter mask descriptor */
93 typedef struct PS_MaskRec_
94 {
95 FT_UInt num_bits;
96 FT_UInt max_bits;
97 FT_Byte* bytes;
98 FT_UInt end_point;
99
100 } PS_MaskRec, *PS_Mask;
101
102
103 /* masks and counters table descriptor */
104 typedef struct PS_Mask_TableRec_
105 {
106 FT_UInt num_masks;
107 FT_UInt max_masks;
108 PS_Mask masks;
109
110 } PS_Mask_TableRec, *PS_Mask_Table;
111
112
113 /* dimension-specific hints descriptor */
114 typedef struct PS_DimensionRec_
115 {
116 PS_Hint_TableRec hints;
117 PS_Mask_TableRec masks;
118 PS_Mask_TableRec counters;
119
120 } PS_DimensionRec, *PS_Dimension;
121
122
123 /* glyph hints descriptor */
124 /* dimension 0 => X coordinates + vertical hints/stems */
125 /* dimension 1 => Y coordinates + horizontal hints/stems */
126 typedef struct PS_HintsRec_
127 {
128 FT_Memory memory;
129 FT_Error error;
130 FT_UInt32 magic;
131 PS_Hint_Type hint_type;
132 PS_DimensionRec dimension[2];
133
134 } PS_HintsRec, *PS_Hints;
135
136 /* */
137
138 /* initialize hints recorder */
139 FT_LOCAL( void )
140 ps_hints_init( PS_Hints hints,
141 FT_Memory memory );
142
143 /* finalize hints recorder */
144 FT_LOCAL( void )
145 ps_hints_done( PS_Hints hints );
146
147 /* initialize Type1 hints recorder interface */
148 FT_LOCAL( void )
149 t1_hints_funcs_init( T1_Hints_FuncsRec* funcs );
150
151 /* initialize Type2 hints recorder interface */
152 FT_LOCAL( void )
153 t2_hints_funcs_init( T2_Hints_FuncsRec* funcs );
154
155
156#ifdef DEBUG_HINTER
157 extern PS_Hints ps_debug_hints;
158 extern int ps_debug_no_horz_hints;
159 extern int ps_debug_no_vert_hints;
160#endif
161
162 /* */
163
164
165FT_END_HEADER
166
167
168#endif /* PSHREC_H_ */
169
170
171/* END */
172