1 /***************************************************************************/ 2 /* */ 3 /* pfrtypes.h */ 4 /* */ 5 /* FreeType PFR data structures (specification only). */ 6 /* */ 7 /* Copyright 2002, 2003, 2005, 2007 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 #ifndef __PFRTYPES_H__ 20 #define __PFRTYPES_H__ 21 22 #include <ft2build.h> 23 #include FT_INTERNAL_OBJECTS_H 24 25 FT_BEGIN_HEADER 26 27 /************************************************************************/ 28 29 /* the PFR Header structure */ 30 typedef struct PFR_HeaderRec_ 31 { 32 FT_UInt32 signature; 33 FT_UInt version; 34 FT_UInt signature2; 35 FT_UInt header_size; 36 37 FT_UInt log_dir_size; 38 FT_UInt log_dir_offset; 39 40 FT_UInt log_font_max_size; 41 FT_UInt32 log_font_section_size; 42 FT_UInt32 log_font_section_offset; 43 44 FT_UInt32 phy_font_max_size; 45 FT_UInt32 phy_font_section_size; 46 FT_UInt32 phy_font_section_offset; 47 48 FT_UInt gps_max_size; 49 FT_UInt32 gps_section_size; 50 FT_UInt32 gps_section_offset; 51 52 FT_UInt max_blue_values; 53 FT_UInt max_x_orus; 54 FT_UInt max_y_orus; 55 56 FT_UInt phy_font_max_size_high; 57 FT_UInt color_flags; 58 59 FT_UInt32 bct_max_size; 60 FT_UInt32 bct_set_max_size; 61 FT_UInt32 phy_bct_set_max_size; 62 63 FT_UInt num_phy_fonts; 64 FT_UInt max_vert_stem_snap; 65 FT_UInt max_horz_stem_snap; 66 FT_UInt max_chars; 67 68 } PFR_HeaderRec, *PFR_Header; 69 70 71 /* used in `color_flags' field of the PFR_Header */ 72 typedef enum PFR_HeaderFlags_ 73 { 74 PFR_FLAG_BLACK_PIXEL = 1, 75 PFR_FLAG_INVERT_BITMAP = 2 76 77 } PFR_HeaderFlags; 78 79 80 /************************************************************************/ 81 82 typedef struct PFR_LogFontRec_ 83 { 84 FT_UInt32 size; 85 FT_UInt32 offset; 86 87 FT_Int32 matrix[4]; 88 FT_UInt stroke_flags; 89 FT_Int stroke_thickness; 90 FT_Int bold_thickness; 91 FT_Int32 miter_limit; 92 93 FT_UInt32 phys_size; 94 FT_UInt32 phys_offset; 95 96 } PFR_LogFontRec, *PFR_LogFont; 97 98 99 typedef enum PFR_LogFlags_ 100 { 101 PFR_LOG_EXTRA_ITEMS = 0x40, 102 PFR_LOG_2BYTE_BOLD = 0x20, 103 PFR_LOG_BOLD = 0x10, 104 PFR_LOG_2BYTE_STROKE = 8, 105 PFR_LOG_STROKE = 4, 106 PFR_LINE_JOIN_MASK = 3 107 108 } PFR_LogFlags; 109 110 111 typedef enum PFR_LineJoinFlags_ 112 { 113 PFR_LINE_JOIN_MITER = 0, 114 PFR_LINE_JOIN_ROUND = 1, 115 PFR_LINE_JOIN_BEVEL = 2 116 117 } PFR_LineJoinFlags; 118 119 120 /************************************************************************/ 121 122 typedef enum PFR_BitmapFlags_ 123 { 124 PFR_BITMAP_3BYTE_OFFSET = 4, 125 PFR_BITMAP_2BYTE_SIZE = 2, 126 PFR_BITMAP_2BYTE_CHARCODE = 1 127 128 } PFR_BitmapFlags; 129 130 131 typedef struct PFR_BitmapCharRec_ 132 { 133 FT_UInt char_code; 134 FT_UInt gps_size; 135 FT_UInt32 gps_offset; 136 137 } PFR_BitmapCharRec, *PFR_BitmapChar; 138 139 140 typedef enum PFR_StrikeFlags_ 141 { 142 PFR_STRIKE_2BYTE_COUNT = 0x10, 143 PFR_STRIKE_3BYTE_OFFSET = 0x08, 144 PFR_STRIKE_3BYTE_SIZE = 0x04, 145 PFR_STRIKE_2BYTE_YPPM = 0x02, 146 PFR_STRIKE_2BYTE_XPPM = 0x01 147 148 } PFR_StrikeFlags; 149 150 151 typedef struct PFR_StrikeRec_ 152 { 153 FT_UInt x_ppm; 154 FT_UInt y_ppm; 155 FT_UInt flags; 156 157 FT_UInt32 gps_size; 158 FT_UInt32 gps_offset; 159 160 FT_UInt32 bct_size; 161 FT_UInt32 bct_offset; 162 163 /* optional */ 164 FT_UInt num_bitmaps; 165 PFR_BitmapChar bitmaps; 166 167 } PFR_StrikeRec, *PFR_Strike; 168 169 170 /************************************************************************/ 171 172 typedef struct PFR_CharRec_ 173 { 174 FT_UInt char_code; 175 FT_Int advance; 176 FT_UInt gps_size; 177 FT_UInt32 gps_offset; 178 179 } PFR_CharRec, *PFR_Char; 180 181 182 /************************************************************************/ 183 184 typedef struct PFR_DimensionRec_ 185 { 186 FT_UInt standard; 187 FT_UInt num_stem_snaps; 188 FT_Int* stem_snaps; 189 190 } PFR_DimensionRec, *PFR_Dimension; 191 192 /************************************************************************/ 193 194 typedef struct PFR_KernItemRec_* PFR_KernItem; 195 196 typedef struct PFR_KernItemRec_ 197 { 198 PFR_KernItem next; 199 FT_Byte pair_count; 200 FT_Byte flags; 201 FT_Short base_adj; 202 FT_UInt pair_size; 203 FT_Offset offset; 204 FT_UInt32 pair1; 205 FT_UInt32 pair2; 206 207 } PFR_KernItemRec; 208 209 210 #define PFR_KERN_INDEX( g1, g2 ) \ 211 ( ( (FT_UInt32)(g1) << 16 ) | (FT_UInt16)(g2) ) 212 213 #define PFR_KERN_PAIR_INDEX( pair ) \ 214 PFR_KERN_INDEX( (pair)->glyph1, (pair)->glyph2 ) 215 216 #define PFR_NEXT_KPAIR( p ) ( p += 2, \ 217 ( (FT_UInt32)p[-2] << 16 ) | p[-1] ) 218 219 220 /************************************************************************/ 221 222 typedef struct PFR_PhyFontRec_ 223 { 224 FT_Memory memory; 225 FT_UInt32 offset; 226 227 FT_UInt font_ref_number; 228 FT_UInt outline_resolution; 229 FT_UInt metrics_resolution; 230 FT_BBox bbox; 231 FT_UInt flags; 232 FT_UInt standard_advance; 233 234 FT_Int ascent; /* optional, bbox.yMax if not present */ 235 FT_Int descent; /* optional, bbox.yMin if not present */ 236 FT_Int leading; /* optional, 0 if not present */ 237 238 PFR_DimensionRec horizontal; 239 PFR_DimensionRec vertical; 240 241 FT_String* font_id; 242 FT_String* family_name; 243 FT_String* style_name; 244 245 FT_UInt num_strikes; 246 FT_UInt max_strikes; 247 PFR_StrikeRec* strikes; 248 249 FT_UInt num_blue_values; 250 FT_Int *blue_values; 251 FT_UInt blue_fuzz; 252 FT_UInt blue_scale; 253 254 FT_UInt num_chars; 255 FT_Offset chars_offset; 256 PFR_Char chars; 257 258 FT_UInt num_kern_pairs; 259 PFR_KernItem kern_items; 260 PFR_KernItem* kern_items_tail; 261 262 /* not part of the spec, but used during load */ 263 FT_Long bct_offset; 264 FT_Byte* cursor; 265 266 } PFR_PhyFontRec, *PFR_PhyFont; 267 268 269 typedef enum PFR_PhyFlags_ 270 { 271 PFR_PHY_EXTRA_ITEMS = 0x80, 272 PFR_PHY_3BYTE_GPS_OFFSET = 0x20, 273 PFR_PHY_2BYTE_GPS_SIZE = 0x10, 274 PFR_PHY_ASCII_CODE = 0x08, 275 PFR_PHY_PROPORTIONAL = 0x04, 276 PFR_PHY_2BYTE_CHARCODE = 0x02, 277 PFR_PHY_VERTICAL = 0x01 278 279 } PFR_PhyFlags; 280 281 282 typedef enum PFR_KernFlags_ 283 { 284 PFR_KERN_2BYTE_CHAR = 0x01, 285 PFR_KERN_2BYTE_ADJ = 0x02 286 287 } PFR_KernFlags; 288 289 290 /************************************************************************/ 291 292 typedef enum PFR_GlyphFlags_ 293 { 294 PFR_GLYPH_IS_COMPOUND = 0x80, 295 PFR_GLYPH_EXTRA_ITEMS = 0x08, 296 PFR_GLYPH_1BYTE_XYCOUNT = 0x04, 297 PFR_GLYPH_XCOUNT = 0x02, 298 PFR_GLYPH_YCOUNT = 0x01 299 300 } PFR_GlyphFlags; 301 302 303 /* controlled coordinate */ 304 typedef struct PFR_CoordRec_ 305 { 306 FT_UInt org; 307 FT_UInt cur; 308 309 } PFR_CoordRec, *PFR_Coord; 310 311 312 typedef struct PFR_SubGlyphRec_ 313 { 314 FT_Fixed x_scale; 315 FT_Fixed y_scale; 316 FT_Int x_delta; 317 FT_Int y_delta; 318 FT_UInt32 gps_offset; 319 FT_UInt gps_size; 320 321 } PFR_SubGlyphRec, *PFR_SubGlyph; 322 323 324 typedef enum PFR_SubgGlyphFlags_ 325 { 326 PFR_SUBGLYPH_3BYTE_OFFSET = 0x80, 327 PFR_SUBGLYPH_2BYTE_SIZE = 0x40, 328 PFR_SUBGLYPH_YSCALE = 0x20, 329 PFR_SUBGLYPH_XSCALE = 0x10 330 331 } PFR_SubGlyphFlags; 332 333 334 typedef struct PFR_GlyphRec_ 335 { 336 FT_Byte format; 337 338 #if 0 339 FT_UInt num_x_control; 340 FT_UInt num_y_control; 341 #endif 342 FT_UInt max_xy_control; 343 FT_Pos* x_control; 344 FT_Pos* y_control; 345 346 347 FT_UInt num_subs; 348 FT_UInt max_subs; 349 PFR_SubGlyphRec* subs; 350 351 FT_GlyphLoader loader; 352 FT_Bool path_begun; 353 354 } PFR_GlyphRec, *PFR_Glyph; 355 356 357 FT_END_HEADER 358 359 #endif /* __PFRTYPES_H__ */ 360 361 362 /* END */ 363