Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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.