PageRenderTime 20ms CodeModel.GetById 2ms app.highlight 14ms RepoModel.GetById 1ms app.codeStats 1ms

/src/freetype/src/bdf/bdf.h

https://bitbucket.org/cabalistic/ogredeps/
C++ Header | 297 lines | 153 code | 84 blank | 60 comment | 0 complexity | 4fda9dc48e154749c6dd5f55aab81f9b MD5 | raw file
  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 <ft2build.h>
 34#include FT_INTERNAL_OBJECTS_H
 35#include FT_INTERNAL_STREAM_H
 36
 37
 38FT_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    /* The size of the next two arrays must be in sync with the */
230    /* size of the `have' array in the `bdf_parse_t' structure. */
231    unsigned long    nmod[34816];    /* Bitmap indicating modified glyphs.  */
232    unsigned long    umod[34816];    /* Bitmap indicating modified          */
233                                     /* unencoded glyphs.                   */
234    unsigned short   modified;       /* Boolean indicating font modified.   */
235    unsigned short   bpp;            /* Bits per pixel.                     */
236
237    FT_Memory        memory;
238
239    bdf_property_t*  user_props;
240    unsigned long    nuser_props;
241    hashtable        proptbl;
242
243  } bdf_font_t;
244
245
246  /*************************************************************************/
247  /*                                                                       */
248  /* Types for load/save callbacks.                                        */
249  /*                                                                       */
250  /*************************************************************************/
251
252
253  /* Error codes. */
254#define BDF_MISSING_START       -1
255#define BDF_MISSING_FONTNAME    -2
256#define BDF_MISSING_SIZE        -3
257#define BDF_MISSING_CHARS       -4
258#define BDF_MISSING_STARTCHAR   -5
259#define BDF_MISSING_ENCODING    -6
260#define BDF_MISSING_BBX         -7
261
262#define BDF_OUT_OF_MEMORY      -20
263
264#define BDF_INVALID_LINE      -100
265
266
267  /*************************************************************************/
268  /*                                                                       */
269  /* BDF font API.                                                         */
270  /*                                                                       */
271  /*************************************************************************/
272
273  FT_LOCAL( FT_Error )
274  bdf_load_font( FT_Stream       stream,
275                 FT_Memory       memory,
276                 bdf_options_t*  opts,
277                 bdf_font_t*    *font );
278
279  FT_LOCAL( void )
280  bdf_free_font( bdf_font_t*  font );
281
282  FT_LOCAL( bdf_property_t * )
283  bdf_get_property( char*        name,
284                    bdf_font_t*  font );
285
286  FT_LOCAL( bdf_property_t * )
287  bdf_get_font_property( bdf_font_t*  font,
288                         const char*  name );
289
290
291FT_END_HEADER
292
293
294#endif /* __BDF_H__ */
295
296
297/* END */