(root)/
freetype-2.13.2/
src/
bdf/
bdf.h
       1  /*
       2   * Copyright 2000 Computing Research Labs, New Mexico State University
       3   * Copyright 2001-2004, 2011 Francesco Zappa Nardelli
       4   *
       5   * Permission is hereby granted, free of charge, to any person obtaining a
       6   * copy of this software and associated documentation files (the "Software"),
       7   * to deal in the Software without restriction, including without limitation
       8   * the rights to use, copy, modify, merge, publish, distribute, sublicense,
       9   * and/or sell copies of the Software, and to permit persons to whom the
      10   * Software is furnished to do so, subject to the following conditions:
      11   *
      12   * The above copyright notice and this permission notice shall be included in
      13   * all copies or substantial portions of the Software.
      14   *
      15   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      16   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      17   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
      18   * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
      19   * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
      20   * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
      21   * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
      22   */
      23  
      24  
      25  #ifndef BDF_H_
      26  #define BDF_H_
      27  
      28  
      29  /*
      30   * Based on bdf.h,v 1.16 2000/03/16 20:08:51 mleisher
      31   */
      32  
      33  #include <freetype/internal/ftobjs.h>
      34  #include <freetype/internal/ftstream.h>
      35  #include <freetype/internal/fthash.h>
      36  
      37  
      38  FT_BEGIN_HEADER
      39  
      40  
      41  /* Imported from bdfP.h */
      42  
      43  #define _bdf_glyph_modified( map, e )                     \
      44            ( (map)[(e) >> 5] & ( 1UL << ( (e) & 31 ) ) )
      45  #define _bdf_set_glyph_modified( map, e )                 \
      46            ( (map)[(e) >> 5] |= ( 1UL << ( (e) & 31 ) ) )
      47  #define _bdf_clear_glyph_modified( map, e )               \
      48            ( (map)[(e) >> 5] &= ~( 1UL << ( (e) & 31 ) ) )
      49  
      50  /* end of bdfP.h */
      51  
      52  
      53    /**************************************************************************
      54     *
      55     * BDF font options macros and types.
      56     *
      57     */
      58  
      59  
      60  #define BDF_CORRECT_METRICS  0x01 /* Correct invalid metrics when loading. */
      61  #define BDF_KEEP_COMMENTS    0x02 /* Preserve the font comments.           */
      62  #define BDF_KEEP_UNENCODED   0x04 /* Keep the unencoded glyphs.            */
      63  #define BDF_PROPORTIONAL     0x08 /* Font has proportional spacing.        */
      64  #define BDF_MONOWIDTH        0x10 /* Font has mono width.                  */
      65  #define BDF_CHARCELL         0x20 /* Font has charcell spacing.            */
      66  
      67  #define BDF_ALL_SPACING  ( BDF_PROPORTIONAL | \
      68                             BDF_MONOWIDTH    | \
      69                             BDF_CHARCELL     )
      70  
      71  #define BDF_DEFAULT_LOAD_OPTIONS  ( BDF_CORRECT_METRICS | \
      72                                      BDF_KEEP_COMMENTS   | \
      73                                      BDF_KEEP_UNENCODED  | \
      74                                      BDF_PROPORTIONAL    )
      75  
      76  
      77    typedef struct  bdf_options_t_
      78    {
      79      int            correct_metrics;
      80      int            keep_unencoded;
      81      int            keep_comments;
      82      int            font_spacing;
      83  
      84    } bdf_options_t;
      85  
      86  
      87    /* Callback function type for unknown configuration options. */
      88    typedef int
      89    (*bdf_options_callback_t)( bdf_options_t*  opts,
      90                               char**          params,
      91                               unsigned long   nparams,
      92                               void*           client_data );
      93  
      94  
      95    /**************************************************************************
      96     *
      97     * BDF font property macros and types.
      98     *
      99     */
     100  
     101  
     102  #define BDF_ATOM      1
     103  #define BDF_INTEGER   2
     104  #define BDF_CARDINAL  3
     105  
     106  
     107    /* This structure represents a particular property of a font. */
     108    /* There are a set of defaults and each font has their own.   */
     109    typedef struct  bdf_property_t_
     110    {
     111      const char*  name;         /* Name of the property.   */
     112      int          format;       /* Format of the property. */
     113      int          builtin;      /* A builtin property.     */
     114      union
     115      {
     116        char*          atom;
     117        long           l;
     118        unsigned long  ul;
     119  
     120      } value;             /* Value of the property.  */
     121  
     122    } bdf_property_t;
     123  
     124  
     125    /**************************************************************************
     126     *
     127     * BDF font metric and glyph types.
     128     *
     129     */
     130  
     131  
     132    typedef struct  bdf_bbx_t_
     133    {
     134      unsigned short  width;
     135      unsigned short  height;
     136  
     137      short           x_offset;
     138      short           y_offset;
     139  
     140      short           ascent;
     141      short           descent;
     142  
     143    } bdf_bbx_t;
     144  
     145  
     146    typedef struct  bdf_glyph_t_
     147    {
     148      char*           name;        /* Glyph name.                          */
     149      unsigned long   encoding;    /* Glyph encoding.                      */
     150      unsigned short  swidth;      /* Scalable width.                      */
     151      unsigned short  dwidth;      /* Device width.                        */
     152      bdf_bbx_t       bbx;         /* Glyph bounding box.                  */
     153      unsigned char*  bitmap;      /* Glyph bitmap.                        */
     154      unsigned long   bpr;         /* Number of bytes used per row.        */
     155      unsigned short  bytes;       /* Number of bytes used for the bitmap. */
     156  
     157    } bdf_glyph_t;
     158  
     159  
     160    typedef struct  bdf_font_t_
     161    {
     162      char*            name;           /* Name of the font.                   */
     163      bdf_bbx_t        bbx;            /* Font bounding box.                  */
     164  
     165      unsigned long    point_size;     /* Point size of the font.             */
     166      unsigned long    resolution_x;   /* Font horizontal resolution.         */
     167      unsigned long    resolution_y;   /* Font vertical resolution.           */
     168  
     169      int              spacing;        /* Font spacing value.                 */
     170  
     171      unsigned short   monowidth;      /* Logical width for monowidth font.   */
     172  
     173      unsigned long    default_char;   /* Encoding of the default glyph.      */
     174  
     175      long             font_ascent;    /* Font ascent.                        */
     176      long             font_descent;   /* Font descent.                       */
     177  
     178      unsigned long    glyphs_size;    /* Glyph structures allocated.         */
     179      unsigned long    glyphs_used;    /* Glyph structures used.              */
     180      bdf_glyph_t*     glyphs;         /* Glyphs themselves.                  */
     181  
     182      unsigned long    unencoded_size; /* Unencoded glyph struct. allocated.  */
     183      unsigned long    unencoded_used; /* Unencoded glyph struct. used.       */
     184      bdf_glyph_t*     unencoded;      /* Unencoded glyphs themselves.        */
     185  
     186      unsigned long    props_size;     /* Font properties allocated.          */
     187      unsigned long    props_used;     /* Font properties used.               */
     188      bdf_property_t*  props;          /* Font properties themselves.         */
     189  
     190      char*            comments;       /* Font comments.                      */
     191      unsigned long    comments_len;   /* Length of comment string.           */
     192  
     193      void*            internal;       /* Internal data for the font.         */
     194  
     195      unsigned short   bpp;            /* Bits per pixel.                     */
     196  
     197      FT_Memory        memory;
     198  
     199      bdf_property_t*  user_props;
     200      unsigned long    nuser_props;
     201      FT_HashRec       proptbl;
     202  
     203    } bdf_font_t;
     204  
     205  
     206    /**************************************************************************
     207     *
     208     * Types for load/save callbacks.
     209     *
     210     */
     211  
     212  
     213    /* Error codes. */
     214  #define BDF_MISSING_START       -1
     215  #define BDF_MISSING_FONTNAME    -2
     216  #define BDF_MISSING_SIZE        -3
     217  #define BDF_MISSING_CHARS       -4
     218  #define BDF_MISSING_STARTCHAR   -5
     219  #define BDF_MISSING_ENCODING    -6
     220  #define BDF_MISSING_BBX         -7
     221  
     222  #define BDF_OUT_OF_MEMORY      -20
     223  
     224  #define BDF_INVALID_LINE      -100
     225  
     226  
     227    /**************************************************************************
     228     *
     229     * BDF font API.
     230     *
     231     */
     232  
     233    FT_LOCAL( FT_Error )
     234    bdf_load_font( FT_Stream       stream,
     235                   FT_Memory       memory,
     236                   bdf_options_t*  opts,
     237                   bdf_font_t*    *font );
     238  
     239    FT_LOCAL( void )
     240    bdf_free_font( bdf_font_t*  font );
     241  
     242    FT_LOCAL( bdf_property_t * )
     243    bdf_get_font_property( bdf_font_t*  font,
     244                           const char*  name );
     245  
     246  
     247  FT_END_HEADER
     248  
     249  
     250  #endif /* BDF_H_ */
     251  
     252  
     253  /* END */