shithub: freetype+ttf2subf

ref: 609e28c3be484792936271dacefe9b48c378e7eb
dir: /src/pfr/pfrtypes.h/

View raw version
#ifndef __PFR_TYPES_H__
#define __PFR_TYPES_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_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;
  
  } 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_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 /* __PFR_TYPES_H__ */