misc/libfreetype/src/bdf/bdf.h
changeset 9372 915436ff64ab
parent 9371 f3840de881bd
child 9373 b769a8e38cbd
equal deleted inserted replaced
9371:f3840de881bd 9372:915436ff64ab
     1 /*
       
     2  * Copyright 2000 Computing Research Labs, New Mexico State University
       
     3  * Copyright 2001, 2002, 2003, 2004 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 <ft2build.h>
       
    34 #include FT_INTERNAL_OBJECTS_H
       
    35 #include FT_INTERNAL_STREAM_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] & ( 1 << ( (e) & 31 ) ) )
       
    45 #define _bdf_set_glyph_modified( map, e )              \
       
    46           ( (map)[(e) >> 5] |= ( 1 << ( (e) & 31 ) ) )
       
    47 #define _bdf_clear_glyph_modified( map, e )             \
       
    48           ( (map)[(e) >> 5] &= ~( 1 << ( (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     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     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  _hashnode_
       
   161   {
       
   162     const char*  key;
       
   163     size_t       data;
       
   164 
       
   165   } _hashnode, *hashnode;
       
   166 
       
   167 
       
   168   typedef struct  hashtable_
       
   169   {
       
   170     int        limit;
       
   171     int        size;
       
   172     int        used;
       
   173     hashnode*  table;
       
   174 
       
   175   } hashtable;
       
   176 
       
   177 
       
   178   typedef struct  bdf_glyphlist_t_
       
   179   {
       
   180     unsigned short  pad;          /* Pad to 4-byte boundary.              */
       
   181     unsigned short  bpp;          /* Bits per pixel.                      */
       
   182     long            start;        /* Beginning encoding value of glyphs.  */
       
   183     long            end;          /* Ending encoding value of glyphs.     */
       
   184     bdf_glyph_t*    glyphs;       /* Glyphs themselves.                   */
       
   185     unsigned long   glyphs_size;  /* Glyph structures allocated.          */
       
   186     unsigned long   glyphs_used;  /* Glyph structures used.               */
       
   187     bdf_bbx_t       bbx;          /* Overall bounding box of glyphs.      */
       
   188 
       
   189   } bdf_glyphlist_t;
       
   190 
       
   191 
       
   192   typedef struct  bdf_font_t_
       
   193   {
       
   194     char*            name;           /* Name of the font.                   */
       
   195     bdf_bbx_t        bbx;            /* Font bounding box.                  */
       
   196 
       
   197     long             point_size;     /* Point size of the font.             */
       
   198     unsigned long    resolution_x;   /* Font horizontal resolution.         */
       
   199     unsigned long    resolution_y;   /* Font vertical resolution.           */
       
   200 
       
   201     int              spacing;        /* Font spacing value.                 */
       
   202 
       
   203     unsigned short   monowidth;      /* Logical width for monowidth font.   */
       
   204 
       
   205     long             default_char;   /* Encoding of the default glyph.      */
       
   206 
       
   207     long             font_ascent;    /* Font ascent.                        */
       
   208     long             font_descent;   /* Font descent.                       */
       
   209 
       
   210     unsigned long    glyphs_size;    /* Glyph structures allocated.         */
       
   211     unsigned long    glyphs_used;    /* Glyph structures used.              */
       
   212     bdf_glyph_t*     glyphs;         /* Glyphs themselves.                  */
       
   213 
       
   214     unsigned long    unencoded_size; /* Unencoded glyph struct. allocated.  */
       
   215     unsigned long    unencoded_used; /* Unencoded glyph struct. used.       */
       
   216     bdf_glyph_t*     unencoded;      /* Unencoded glyphs themselves.        */
       
   217 
       
   218     unsigned long    props_size;     /* Font properties allocated.          */
       
   219     unsigned long    props_used;     /* Font properties used.               */
       
   220     bdf_property_t*  props;          /* Font properties themselves.         */
       
   221 
       
   222     char*            comments;       /* Font comments.                      */
       
   223     unsigned long    comments_len;   /* Length of comment string.           */
       
   224 
       
   225     bdf_glyphlist_t  overflow;       /* Storage used for glyph insertion.   */
       
   226 
       
   227     void*            internal;       /* Internal data for the font.         */
       
   228 
       
   229     unsigned long    nmod[2048];     /* Bitmap indicating modified glyphs.  */
       
   230     unsigned long    umod[2048];     /* Bitmap indicating modified          */
       
   231                                      /* unencoded glyphs.                   */
       
   232     unsigned short   modified;       /* Boolean indicating font modified.   */
       
   233     unsigned short   bpp;            /* Bits per pixel.                     */
       
   234 
       
   235     FT_Memory        memory;
       
   236 
       
   237     bdf_property_t*  user_props;
       
   238     unsigned long    nuser_props;
       
   239     hashtable        proptbl;
       
   240 
       
   241   } bdf_font_t;
       
   242 
       
   243 
       
   244   /*************************************************************************/
       
   245   /*                                                                       */
       
   246   /* Types for load/save callbacks.                                        */
       
   247   /*                                                                       */
       
   248   /*************************************************************************/
       
   249 
       
   250 
       
   251   /* Error codes. */
       
   252 #define BDF_MISSING_START       -1
       
   253 #define BDF_MISSING_FONTNAME    -2
       
   254 #define BDF_MISSING_SIZE        -3
       
   255 #define BDF_MISSING_CHARS       -4
       
   256 #define BDF_MISSING_STARTCHAR   -5
       
   257 #define BDF_MISSING_ENCODING    -6
       
   258 #define BDF_MISSING_BBX         -7
       
   259 
       
   260 #define BDF_OUT_OF_MEMORY      -20
       
   261 
       
   262 #define BDF_INVALID_LINE      -100
       
   263 
       
   264 
       
   265   /*************************************************************************/
       
   266   /*                                                                       */
       
   267   /* BDF font API.                                                         */
       
   268   /*                                                                       */
       
   269   /*************************************************************************/
       
   270 
       
   271   FT_LOCAL( FT_Error )
       
   272   bdf_load_font( FT_Stream       stream,
       
   273                  FT_Memory       memory,
       
   274                  bdf_options_t*  opts,
       
   275                  bdf_font_t*    *font );
       
   276 
       
   277   FT_LOCAL( void )
       
   278   bdf_free_font( bdf_font_t*  font );
       
   279 
       
   280   FT_LOCAL( bdf_property_t * )
       
   281   bdf_get_property( char*        name,
       
   282                     bdf_font_t*  font );
       
   283 
       
   284   FT_LOCAL( bdf_property_t * )
       
   285   bdf_get_font_property( bdf_font_t*  font,
       
   286                          const char*  name );
       
   287 
       
   288 
       
   289 FT_END_HEADER
       
   290 
       
   291 
       
   292 #endif /* __BDF_H__ */
       
   293 
       
   294 
       
   295 /* END */