1 /***************************************************************************/ 2 /* */ 3 /* pshrec.h */ 4 /* */ 5 /* Postscript (Type1/Type2) hints recorder (specification). */ 6 /* */ 7 /* Copyright 2001, 2002, 2003, 2006, 2008, 2014 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( void ) 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 */ 177