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