Charles.Forsyth20060303a828770d19 years agoHistory
354 lines · 8.3 KB · C
RawDownload
/***************************************************************************//*                                                                         *//*  pfrtypes.h                                                             *//*                                                                         *//*    FreeType PFR data structures (specification only).                   *//*                                                                         *//*  Copyright 2002 by                                                      *//*  David Turner, Robert Wilhelm, and Werner Lemberg.                      *//*                                                                         *//*  This file is part of the FreeType project, and may only be used,       *//*  modified, and distributed under the terms of the FreeType project      *//*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     *//*  this file you indicate that you have read the license and              *//*  understand and accept it fully.                                        *//*                                                                         *//***************************************************************************/  #ifndef __PFRTYPES_H__#define __PFRTYPES_H__ #include <ft2build.h>#include FT_INTERNAL_OBJECTS_H FT_BEGIN_HEADER   /************************************************************************/   /* the PFR Header structure */  typedef struct  PFR_HeaderRec_  {    FT_UInt32  signature;    FT_UInt    version;    FT_UInt    signature2;    FT_UInt    header_size;     FT_UInt    log_dir_size;    FT_UInt    log_dir_offset;     FT_UInt    log_font_max_size;    FT_UInt32  log_font_section_size;    FT_UInt32  log_font_section_offset;     FT_UInt32  phy_font_max_size;    FT_UInt32  phy_font_section_size;    FT_UInt32  phy_font_section_offset;     FT_UInt    gps_max_size;    FT_UInt32  gps_section_size;    FT_UInt32  gps_section_offset;     FT_UInt    max_blue_values;    FT_UInt    max_x_orus;    FT_UInt    max_y_orus;     FT_UInt    phy_font_max_size_high;    FT_UInt    color_flags;     FT_UInt32  bct_max_size;    FT_UInt32  bct_set_max_size;    FT_UInt32  phy_bct_set_max_size;     FT_UInt    num_phy_fonts;    FT_UInt    max_vert_stem_snap;    FT_UInt    max_horz_stem_snap;    FT_UInt    max_chars;   } PFR_HeaderRec, *PFR_Header;    /* used in `color_flags' field of the PFR_Header */  typedef enum  PFR_HeaderFlags_  {    PFR_FLAG_BLACK_PIXEL   = 1,    PFR_FLAG_INVERT_BITMAP = 2   } PFR_HeaderFlags;    /************************************************************************/   typedef struct  PFR_LogFontRec_  {    FT_UInt32  size;    FT_UInt32  offset;     FT_Int32   matrix[4];    FT_UInt    stroke_flags;    FT_Int     stroke_thickness;    FT_Int     bold_thickness;    FT_Int32   miter_limit;     FT_UInt32  phys_size;    FT_UInt32  phys_offset;   } PFR_LogFontRec, *PFR_LogFont;    typedef enum  PFR_LogFlags_  {    PFR_LOG_EXTRA_ITEMS  = 0x40,    PFR_LOG_2BYTE_BOLD   = 0x20,    PFR_LOG_BOLD         = 0x10,    PFR_LOG_2BYTE_STROKE = 8,    PFR_LOG_STROKE       = 4,    PFR_LINE_JOIN_MASK   = 3   } PFR_LogFlags;    typedef enum  PFR_LineJoinFlags_  {    PFR_LINE_JOIN_MITER = 0,    PFR_LINE_JOIN_ROUND = 1,    PFR_LINE_JOIN_BEVEL = 2   } PFR_LineJoinFlags;    /************************************************************************/   typedef enum  PFR_BitmapFlags_  {    PFR_BITMAP_3BYTE_OFFSET   = 4,    PFR_BITMAP_2BYTE_SIZE     = 2,    PFR_BITMAP_2BYTE_CHARCODE = 1   } PFR_BitmapFlags;    typedef struct  PFR_BitmapCharRec_  {    FT_UInt    char_code;    FT_UInt    gps_size;    FT_UInt32  gps_offset;   } PFR_BitmapCharRec, *PFR_BitmapChar;    typedef enum  PFR_StrikeFlags_  {    PFR_STRIKE_2BYTE_COUNT  = 0x10,    PFR_STRIKE_3BYTE_OFFSET = 0x08,    PFR_STRIKE_3BYTE_SIZE   = 0x04,    PFR_STRIKE_2BYTE_YPPM   = 0x02,    PFR_STRIKE_2BYTE_XPPM   = 0x01   } PFR_StrikeFlags;    typedef struct  PFR_StrikeRec_  {    FT_UInt         x_ppm;    FT_UInt         y_ppm;    FT_UInt         flags;     FT_UInt32       gps_size;    FT_UInt32       gps_offset;     FT_UInt32       bct_size;    FT_UInt32       bct_offset;     /* optional */    FT_UInt         num_bitmaps;    PFR_BitmapChar  bitmaps;   } PFR_StrikeRec, *PFR_Strike;    /************************************************************************/   typedef struct  PFR_CharRec_  {    FT_UInt    char_code;    FT_Int     advance;    FT_UInt    gps_size;    FT_UInt32  gps_offset;   } PFR_CharRec, *PFR_Char;    /************************************************************************/   typedef struct  PFR_DimensionRec_  {    FT_UInt  standard;    FT_UInt  num_stem_snaps;    FT_Int*  stem_snaps;   } PFR_DimensionRec, *PFR_Dimension;   /************************************************************************/   typedef struct PFR_KernItemRec_*  PFR_KernItem;   typedef struct  PFR_KernItemRec_  {    PFR_KernItem  next;    FT_UInt       pair_count;    FT_UInt       pair_size;    FT_Int        base_adj;    FT_UInt       flags;    FT_UInt32     offset;    FT_UInt32     pair1;    FT_UInt32     pair2;   } PFR_KernItemRec; #define PFR_KERN_INDEX( g1, g2 ) \  ( ( (FT_UInt32)(g1) << 16 ) | (FT_UInt16)(g2) )   typedef struct  PFR_KernPairRec_  {    FT_UInt    glyph1;    FT_UInt    glyph2;    FT_Vector  kerning;   } PFR_KernPairRec, *PFR_KernPair;   /************************************************************************/   typedef struct  PFR_PhyFontRec_  {    FT_Memory          memory;    FT_UInt32          offset;     FT_UInt            font_ref_number;    FT_UInt            outline_resolution;    FT_UInt            metrics_resolution;    FT_BBox            bbox;    FT_UInt            flags;    FT_UInt            standard_advance;     PFR_DimensionRec   horizontal;    PFR_DimensionRec   vertical;     FT_String*         font_id;     FT_UInt            num_strikes;    FT_UInt            max_strikes;    PFR_StrikeRec*     strikes;     FT_UInt            num_blue_values;    FT_Int            *blue_values;    FT_UInt            blue_fuzz;    FT_UInt            blue_scale;     FT_UInt            num_chars;    FT_UInt32          chars_offset;    PFR_Char           chars;     FT_UInt            num_kern_pairs;    PFR_KernItem       kern_items;    PFR_KernItem*      kern_items_tail;     /* not part of the spec, but used during load */    FT_UInt32          bct_offset;    FT_Byte*           cursor;   } PFR_PhyFontRec, *PFR_PhyFont;    typedef enum  PFR_PhyFlags_  {    PFR_PHY_EXTRA_ITEMS      = 0x80,    PFR_PHY_3BYTE_GPS_OFFSET = 0x20,    PFR_PHY_2BYTE_GPS_SIZE   = 0x10,    PFR_PHY_ASCII_CODE       = 0x08,    PFR_PHY_PROPORTIONAL     = 0x04,    PFR_PHY_2BYTE_CHARCODE   = 0x02,    PFR_PHY_VERTICAL         = 0x01   } PFR_PhyFlags;    typedef enum PFR_KernFlags_  {    PFR_KERN_2BYTE_ADJ   = 0x01,    PFR_KERN_2BYTE_CHAR  = 0x02   } PFR_KernFlags;    /************************************************************************/   typedef enum  PFR_GlyphFlags_  {    PFR_GLYPH_IS_COMPOUND   = 0x80,    PFR_GLYPH_EXTRA_ITEMS   = 0x08,    PFR_GLYPH_1BYTE_XYCOUNT = 0x04,    PFR_GLYPH_XCOUNT        = 0x02,    PFR_GLYPH_YCOUNT        = 0x01   } PFR_GlyphFlags;    /* controlled coordinate */  typedef struct  PFR_CoordRec_  {    FT_UInt  org;    FT_UInt  cur;   } PFR_CoordRec, *PFR_Coord;    typedef struct  PFR_SubGlyphRec_  {    FT_Fixed   x_scale;    FT_Fixed   y_scale;    FT_Int     x_delta;    FT_Int     y_delta;    FT_UInt32  gps_offset;    FT_UInt    gps_size;   } PFR_SubGlyphRec, *PFR_SubGlyph;    typedef enum  PFR_SubgGlyphFlags_  {    PFR_SUBGLYPH_3BYTE_OFFSET = 0x80,    PFR_SUBGLYPH_2BYTE_SIZE   = 0x40,    PFR_SUBGLYPH_YSCALE       = 0x20,    PFR_SUBGLYPH_XSCALE       = 0x10   } PFR_SubGlyphFlags;    typedef struct  PFR_GlyphRec_  {    FT_Byte           format;     FT_UInt           num_x_control;    FT_UInt           num_y_control;    FT_UInt           max_xy_control;    FT_Pos*           x_control;    FT_Pos*           y_control;      FT_UInt           num_subs;    FT_UInt           max_subs;    PFR_SubGlyphRec*  subs;     FT_GlyphLoader    loader;    FT_Bool           path_begun;   } PFR_GlyphRec, *PFR_Glyph;  FT_END_HEADER #endif /* __PFRTYPES_H__ */  /* END */