misc/libfreetype/src/pfr/pfrtypes.h
changeset 5172 88f2e05288ba
equal deleted inserted replaced
5171:f9283dc4860d 5172:88f2e05288ba
       
     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 */