(root)/
freetype-2.13.2/
src/
pfr/
pfrtypes.h
       1  /****************************************************************************
       2   *
       3   * pfrtypes.h
       4   *
       5   *   FreeType PFR data structures (specification only).
       6   *
       7   * Copyright (C) 2002-2023 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 <freetype/internal/ftobjs.h>
      23  
      24  FT_BEGIN_HEADER
      25  
      26    /************************************************************************/
      27  
      28    /* the PFR Header structure */
      29    typedef struct  PFR_HeaderRec_
      30    {
      31      FT_UInt32  signature;
      32      FT_UInt    version;
      33      FT_UInt    signature2;
      34      FT_UInt    header_size;
      35  
      36      FT_UInt    log_dir_size;
      37      FT_UInt    log_dir_offset;
      38  
      39      FT_UInt    log_font_max_size;
      40      FT_UInt32  log_font_section_size;
      41      FT_UInt32  log_font_section_offset;
      42  
      43      FT_UInt32  phy_font_max_size;
      44      FT_UInt32  phy_font_section_size;
      45      FT_UInt32  phy_font_section_offset;
      46  
      47      FT_UInt    gps_max_size;
      48      FT_UInt32  gps_section_size;
      49      FT_UInt32  gps_section_offset;
      50  
      51      FT_UInt    max_blue_values;
      52      FT_UInt    max_x_orus;
      53      FT_UInt    max_y_orus;
      54  
      55      FT_UInt    phy_font_max_size_high;
      56      FT_UInt    color_flags;
      57  
      58      FT_UInt32  bct_max_size;
      59      FT_UInt32  bct_set_max_size;
      60      FT_UInt32  phy_bct_set_max_size;
      61  
      62      FT_UInt    num_phy_fonts;
      63      FT_UInt    max_vert_stem_snap;
      64      FT_UInt    max_horz_stem_snap;
      65      FT_UInt    max_chars;
      66  
      67    } PFR_HeaderRec, *PFR_Header;
      68  
      69  
      70    /* used in `color_flags' field of the PFR_Header */
      71  #define PFR_FLAG_BLACK_PIXEL    0x01U
      72  #define PFR_FLAG_INVERT_BITMAP  0x02U
      73  
      74  
      75    /************************************************************************/
      76  
      77    typedef struct  PFR_LogFontRec_
      78    {
      79      FT_UInt32  size;
      80      FT_UInt32  offset;
      81  
      82      FT_Int32   matrix[4];
      83      FT_UInt    stroke_flags;
      84      FT_Int     stroke_thickness;
      85      FT_Int     bold_thickness;
      86      FT_Int32   miter_limit;
      87  
      88      FT_UInt32  phys_size;
      89      FT_UInt32  phys_offset;
      90  
      91    } PFR_LogFontRec, *PFR_LogFont;
      92  
      93  
      94  #define PFR_LINE_JOIN_MITER   0x00U
      95  #define PFR_LINE_JOIN_ROUND   0x01U
      96  #define PFR_LINE_JOIN_BEVEL   0x02U
      97  #define PFR_LINE_JOIN_MASK    ( PFR_LINE_JOIN_ROUND | PFR_LINE_JOIN_BEVEL )
      98  
      99  #define PFR_LOG_STROKE        0x04U
     100  #define PFR_LOG_2BYTE_STROKE  0x08U
     101  #define PFR_LOG_BOLD          0x10U
     102  #define PFR_LOG_2BYTE_BOLD    0x20U
     103  #define PFR_LOG_EXTRA_ITEMS   0x40U
     104  
     105  
     106    /************************************************************************/
     107  
     108  #define PFR_BITMAP_2BYTE_CHARCODE  0x01U
     109  #define PFR_BITMAP_2BYTE_SIZE      0x02U
     110  #define PFR_BITMAP_3BYTE_OFFSET    0x04U
     111  
     112    /* not part of the specification but used for implementation */
     113  #define PFR_BITMAP_CHARCODES_VALIDATED  0x40U
     114  #define PFR_BITMAP_VALID_CHARCODES      0x80U
     115  
     116  
     117    typedef struct  PFR_BitmapCharRec_
     118    {
     119      FT_UInt    char_code;
     120      FT_UInt    gps_size;
     121      FT_UInt32  gps_offset;
     122  
     123    } PFR_BitmapCharRec, *PFR_BitmapChar;
     124  
     125  
     126  #define PFR_STRIKE_2BYTE_XPPM    0x01U
     127  #define PFR_STRIKE_2BYTE_YPPM    0x02U
     128  #define PFR_STRIKE_3BYTE_SIZE    0x04U
     129  #define PFR_STRIKE_3BYTE_OFFSET  0x08U
     130  #define PFR_STRIKE_2BYTE_COUNT   0x10U
     131  
     132  
     133    typedef struct  PFR_StrikeRec_
     134    {
     135      FT_UInt         x_ppm;
     136      FT_UInt         y_ppm;
     137      FT_UInt         flags;
     138  
     139      FT_UInt32       gps_size;
     140      FT_UInt32       gps_offset;
     141  
     142      FT_UInt32       bct_size;
     143      FT_UInt32       bct_offset;
     144  
     145      /* optional */
     146      FT_UInt         num_bitmaps;
     147      PFR_BitmapChar  bitmaps;
     148  
     149    } PFR_StrikeRec, *PFR_Strike;
     150  
     151  
     152    /************************************************************************/
     153  
     154    typedef struct  PFR_CharRec_
     155    {
     156      FT_UInt    char_code;
     157      FT_Int     advance;
     158      FT_UInt    gps_size;
     159      FT_UInt32  gps_offset;
     160  
     161    } PFR_CharRec, *PFR_Char;
     162  
     163  
     164    /************************************************************************/
     165  
     166    typedef struct  PFR_DimensionRec_
     167    {
     168      FT_UInt  standard;
     169      FT_UInt  num_stem_snaps;
     170      FT_Int*  stem_snaps;
     171  
     172    } PFR_DimensionRec, *PFR_Dimension;
     173  
     174    /************************************************************************/
     175  
     176    typedef struct PFR_KernItemRec_*  PFR_KernItem;
     177  
     178    typedef struct  PFR_KernItemRec_
     179    {
     180      PFR_KernItem  next;
     181      FT_Byte       pair_count;
     182      FT_Byte       flags;
     183      FT_Short      base_adj;
     184      FT_UInt       pair_size;
     185      FT_Offset     offset;
     186      FT_UInt32     pair1;
     187      FT_UInt32     pair2;
     188  
     189    } PFR_KernItemRec;
     190  
     191  
     192  #define PFR_KERN_INDEX( g1, g2 )                          \
     193            ( ( (FT_UInt32)(g1) << 16 ) | (FT_UInt16)(g2) )
     194  
     195  #define PFR_KERN_PAIR_INDEX( pair )                        \
     196            PFR_KERN_INDEX( (pair)->glyph1, (pair)->glyph2 )
     197  
     198  #define PFR_NEXT_KPAIR( p )  ( p += 2,                              \
     199                                 ( (FT_UInt32)p[-2] << 16 ) | p[-1] )
     200  
     201  
     202    /************************************************************************/
     203  
     204    typedef struct  PFR_PhyFontRec_
     205    {
     206      FT_Memory          memory;
     207      FT_UInt32          offset;
     208  
     209      FT_UInt            font_ref_number;
     210      FT_UInt            outline_resolution;
     211      FT_UInt            metrics_resolution;
     212      FT_BBox            bbox;
     213      FT_UInt            flags;
     214      FT_Int             standard_advance;
     215  
     216      FT_Int             ascent;   /* optional, bbox.yMax if not present */
     217      FT_Int             descent;  /* optional, bbox.yMin if not present */
     218      FT_Int             leading;  /* optional, 0 if not present         */
     219  
     220      PFR_DimensionRec   horizontal;
     221      PFR_DimensionRec   vertical;
     222  
     223      FT_String*         font_id;
     224      FT_String*         family_name;
     225      FT_String*         style_name;
     226  
     227      FT_UInt            num_strikes;
     228      FT_UInt            max_strikes;
     229      PFR_StrikeRec*     strikes;
     230  
     231      FT_UInt            num_blue_values;
     232      FT_Int            *blue_values;
     233      FT_UInt            blue_fuzz;
     234      FT_UInt            blue_scale;
     235  
     236      FT_UInt            num_chars;
     237      FT_Offset          chars_offset;
     238      PFR_Char           chars;
     239  
     240      FT_UInt            num_kern_pairs;
     241      PFR_KernItem       kern_items;
     242      PFR_KernItem*      kern_items_tail;
     243  
     244      /* not part of the spec, but used during load */
     245      FT_ULong           bct_offset;
     246      FT_Byte*           cursor;
     247  
     248    } PFR_PhyFontRec, *PFR_PhyFont;
     249  
     250  
     251  #define PFR_PHY_VERTICAL          0x01U
     252  #define PFR_PHY_2BYTE_CHARCODE    0x02U
     253  #define PFR_PHY_PROPORTIONAL      0x04U
     254  #define PFR_PHY_ASCII_CODE        0x08U
     255  #define PFR_PHY_2BYTE_GPS_SIZE    0x10U
     256  #define PFR_PHY_3BYTE_GPS_OFFSET  0x20U
     257  #define PFR_PHY_EXTRA_ITEMS       0x80U
     258  
     259  
     260  #define PFR_KERN_2BYTE_CHAR  0x01U
     261  #define PFR_KERN_2BYTE_ADJ   0x02U
     262  
     263  
     264    /************************************************************************/
     265  
     266  #define PFR_GLYPH_YCOUNT         0x01U
     267  #define PFR_GLYPH_XCOUNT         0x02U
     268  #define PFR_GLYPH_1BYTE_XYCOUNT  0x04U
     269  
     270  #define PFR_GLYPH_SINGLE_EXTRA_ITEMS    0x08U
     271  #define PFR_GLYPH_COMPOUND_EXTRA_ITEMS  0x40U
     272  
     273  #define PFR_GLYPH_IS_COMPOUND  0x80U
     274  
     275  
     276    /* controlled coordinate */
     277    typedef struct  PFR_CoordRec_
     278    {
     279      FT_UInt  org;
     280      FT_UInt  cur;
     281  
     282    } PFR_CoordRec, *PFR_Coord;
     283  
     284  
     285    typedef struct  PFR_SubGlyphRec_
     286    {
     287      FT_Fixed   x_scale;
     288      FT_Fixed   y_scale;
     289      FT_Int     x_delta;
     290      FT_Int     y_delta;
     291      FT_UInt32  gps_offset;
     292      FT_UInt    gps_size;
     293  
     294    } PFR_SubGlyphRec, *PFR_SubGlyph;
     295  
     296  
     297  #define PFR_SUBGLYPH_XSCALE        0x10U
     298  #define PFR_SUBGLYPH_YSCALE        0x20U
     299  #define PFR_SUBGLYPH_2BYTE_SIZE    0x40U
     300  #define PFR_SUBGLYPH_3BYTE_OFFSET  0x80U
     301  
     302  
     303    typedef struct  PFR_GlyphRec_
     304    {
     305      FT_Byte           format;
     306  
     307  #if 0
     308      FT_UInt           num_x_control;
     309      FT_UInt           num_y_control;
     310  #endif
     311      FT_UInt           max_xy_control;
     312      FT_Pos*           x_control;
     313      FT_Pos*           y_control;
     314  
     315  
     316      FT_UInt           num_subs;
     317      FT_UInt           max_subs;
     318      PFR_SubGlyphRec*  subs;
     319  
     320      FT_GlyphLoader    loader;
     321      FT_Bool           path_begun;
     322  
     323    } PFR_GlyphRec, *PFR_Glyph;
     324  
     325  
     326  FT_END_HEADER
     327  
     328  #endif /* PFRTYPES_H_ */
     329  
     330  
     331  /* END */