1 /**************************************************************************** 2 * 3 * pshrec.h 4 * 5 * Postscript (Type1/Type2) hints recorder (specification). 6 * 7 * Copyright (C) 2001-2020 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 39 FT_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 165 FT_END_HEADER 166 167 168 #endif /* PSHREC_H_ */ 169 170 171 /* END */ 172