1 /**************************************************************************** 2 * 3 * t1types.h 4 * 5 * Basic Type1/Type2 type definitions and interface (specification 6 * only). 7 * 8 * Copyright 1996-2018 by 9 * David Turner, Robert Wilhelm, and Werner Lemberg. 10 * 11 * This file is part of the FreeType project, and may only be used, 12 * modified, and distributed under the terms of the FreeType project 13 * license, LICENSE.TXT. By continuing to use, modify, or distribute 14 * this file you indicate that you have read the license and 15 * understand and accept it fully. 16 * 17 */ 18 19 20 #ifndef T1TYPES_H_ 21 #define T1TYPES_H_ 22 23 24 #include <ft2build.h> 25 #include FT_TYPE1_TABLES_H 26 #include FT_INTERNAL_POSTSCRIPT_HINTS_H 27 #include FT_INTERNAL_SERVICE_H 28 #include FT_INTERNAL_HASH_H 29 #include FT_SERVICE_POSTSCRIPT_CMAPS_H 30 31 32 FT_BEGIN_HEADER 33 34 35 /*************************************************************************/ 36 /*************************************************************************/ 37 /*************************************************************************/ 38 /*** ***/ 39 /*** ***/ 40 /*** REQUIRED TYPE1/TYPE2 TABLES DEFINITIONS ***/ 41 /*** ***/ 42 /*** ***/ 43 /*************************************************************************/ 44 /*************************************************************************/ 45 /*************************************************************************/ 46 47 48 /************************************************************************** 49 * 50 * @struct: 51 * T1_EncodingRec 52 * 53 * @description: 54 * A structure modeling a custom encoding. 55 * 56 * @fields: 57 * num_chars :: 58 * The number of character codes in the encoding. 59 * Usually 256. 60 * 61 * code_first :: 62 * The lowest valid character code in the encoding. 63 * 64 * code_last :: 65 * The highest valid character code in the encoding 66 * + 1. When equal to code_first there are no valid 67 * character codes. 68 * 69 * char_index :: 70 * An array of corresponding glyph indices. 71 * 72 * char_name :: 73 * An array of corresponding glyph names. 74 */ 75 typedef struct T1_EncodingRecRec_ 76 { 77 FT_Int num_chars; 78 FT_Int code_first; 79 FT_Int code_last; 80 81 FT_UShort* char_index; 82 FT_String** char_name; 83 84 } T1_EncodingRec, *T1_Encoding; 85 86 87 /* used to hold extra data of PS_FontInfoRec that 88 * cannot be stored in the publicly defined structure. 89 * 90 * Note these can't be blended with multiple-masters. 91 */ 92 typedef struct PS_FontExtraRec_ 93 { 94 FT_UShort fs_type; 95 96 } PS_FontExtraRec; 97 98 99 typedef struct T1_FontRec_ 100 { 101 PS_FontInfoRec font_info; /* font info dictionary */ 102 PS_FontExtraRec font_extra; /* font info extra fields */ 103 PS_PrivateRec private_dict; /* private dictionary */ 104 FT_String* font_name; /* top-level dictionary */ 105 106 T1_EncodingType encoding_type; 107 T1_EncodingRec encoding; 108 109 FT_Byte* subrs_block; 110 FT_Byte* charstrings_block; 111 FT_Byte* glyph_names_block; 112 113 FT_Int num_subrs; 114 FT_Byte** subrs; 115 FT_UInt* subrs_len; 116 FT_Hash subrs_hash; 117 118 FT_Int num_glyphs; 119 FT_String** glyph_names; /* array of glyph names */ 120 FT_Byte** charstrings; /* array of glyph charstrings */ 121 FT_UInt* charstrings_len; 122 123 FT_Byte paint_type; 124 FT_Byte font_type; 125 FT_Matrix font_matrix; 126 FT_Vector font_offset; 127 FT_BBox font_bbox; 128 FT_Long font_id; 129 130 FT_Fixed stroke_width; 131 132 } T1_FontRec, *T1_Font; 133 134 135 typedef struct CID_SubrsRec_ 136 { 137 FT_Int num_subrs; 138 FT_Byte** code; 139 140 } CID_SubrsRec, *CID_Subrs; 141 142 143 /*************************************************************************/ 144 /*************************************************************************/ 145 /*************************************************************************/ 146 /*** ***/ 147 /*** ***/ 148 /*** AFM FONT INFORMATION STRUCTURES ***/ 149 /*** ***/ 150 /*** ***/ 151 /*************************************************************************/ 152 /*************************************************************************/ 153 /*************************************************************************/ 154 155 typedef struct AFM_TrackKernRec_ 156 { 157 FT_Int degree; 158 FT_Fixed min_ptsize; 159 FT_Fixed min_kern; 160 FT_Fixed max_ptsize; 161 FT_Fixed max_kern; 162 163 } AFM_TrackKernRec, *AFM_TrackKern; 164 165 typedef struct AFM_KernPairRec_ 166 { 167 FT_UInt index1; 168 FT_UInt index2; 169 FT_Int x; 170 FT_Int y; 171 172 } AFM_KernPairRec, *AFM_KernPair; 173 174 typedef struct AFM_FontInfoRec_ 175 { 176 FT_Bool IsCIDFont; 177 FT_BBox FontBBox; 178 FT_Fixed Ascender; 179 FT_Fixed Descender; 180 AFM_TrackKern TrackKerns; /* free if non-NULL */ 181 FT_UInt NumTrackKern; 182 AFM_KernPair KernPairs; /* free if non-NULL */ 183 FT_UInt NumKernPair; 184 185 } AFM_FontInfoRec, *AFM_FontInfo; 186 187 188 /*************************************************************************/ 189 /*************************************************************************/ 190 /*************************************************************************/ 191 /*** ***/ 192 /*** ***/ 193 /*** ORIGINAL T1_FACE CLASS DEFINITION ***/ 194 /*** ***/ 195 /*** ***/ 196 /*************************************************************************/ 197 /*************************************************************************/ 198 /*************************************************************************/ 199 200 201 typedef struct T1_FaceRec_* T1_Face; 202 typedef struct CID_FaceRec_* CID_Face; 203 204 205 typedef struct T1_FaceRec_ 206 { 207 FT_FaceRec root; 208 T1_FontRec type1; 209 const void* psnames; 210 const void* psaux; 211 const void* afm_data; 212 FT_CharMapRec charmaprecs[2]; 213 FT_CharMap charmaps[2]; 214 215 /* support for Multiple Masters fonts */ 216 PS_Blend blend; 217 218 /* undocumented, optional: indices of subroutines that express */ 219 /* the NormalizeDesignVector and the ConvertDesignVector procedure, */ 220 /* respectively, as Type 2 charstrings; -1 if keywords not present */ 221 FT_Int ndv_idx; 222 FT_Int cdv_idx; 223 224 /* undocumented, optional: has the same meaning as len_buildchar */ 225 /* for Type 2 fonts; manipulated by othersubrs 19, 24, and 25 */ 226 FT_UInt len_buildchar; 227 FT_Long* buildchar; 228 229 /* since version 2.1 - interface to PostScript hinter */ 230 const void* pshinter; 231 232 } T1_FaceRec; 233 234 235 typedef struct CID_FaceRec_ 236 { 237 FT_FaceRec root; 238 void* psnames; 239 void* psaux; 240 CID_FaceInfoRec cid; 241 PS_FontExtraRec font_extra; 242 #if 0 243 void* afm_data; 244 #endif 245 CID_Subrs subrs; 246 247 /* since version 2.1 - interface to PostScript hinter */ 248 void* pshinter; 249 250 /* since version 2.1.8, but was originally positioned after `afm_data' */ 251 FT_Byte* binary_data; /* used if hex data has been converted */ 252 FT_Stream cid_stream; 253 254 } CID_FaceRec; 255 256 257 FT_END_HEADER 258 259 #endif /* T1TYPES_H_ */ 260 261 262 /* END */ 263