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