1993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner/*
2993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * Copyright 2000 Computing Research Labs, New Mexico State University
3ed54e43aed19f6078a254a6293e7686c489bff8dWerner Lemberg * Copyright 2001-2004, 2011 Francesco Zappa Nardelli
4993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner *
5993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * Permission is hereby granted, free of charge, to any person obtaining a
6993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * copy of this software and associated documentation files (the "Software"),
7993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * to deal in the Software without restriction, including without limitation
8993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * and/or sell copies of the Software, and to permit persons to whom the
10993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * Software is furnished to do so, subject to the following conditions:
11993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner *
12993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * The above copyright notice and this permission notice shall be included in
13993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * all copies or substantial portions of the Software.
14993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner *
15993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
19993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
20993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
21993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner */
237cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
247cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2537412ff9f42212bcf4dd29d9762f3c35b5735768Werner Lemberg#ifndef BDF_H_
2637412ff9f42212bcf4dd29d9762f3c35b5735768Werner Lemberg#define BDF_H_
27993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
287cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
29993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner/*
307cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg * Based on bdf.h,v 1.16 2000/03/16 20:08:51 mleisher
31993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner */
32993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
33993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner#include <ft2build.h>
34993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner#include FT_INTERNAL_OBJECTS_H
35993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner#include FT_INTERNAL_STREAM_H
36313435657d664b30c82bf2162ba776a48ef2bb21Werner Lemberg#include FT_INTERNAL_HASH_H
37993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
38993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
39993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid TurnerFT_BEGIN_HEADER
40993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
41993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
427cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg/* Imported from bdfP.h */
437cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
446343ba22a36ab264fa061cab3b87662d5b7b7114Werner Lemberg#define _bdf_glyph_modified( map, e )                     \
456343ba22a36ab264fa061cab3b87662d5b7b7114Werner Lemberg          ( (map)[(e) >> 5] & ( 1UL << ( (e) & 31 ) ) )
466343ba22a36ab264fa061cab3b87662d5b7b7114Werner Lemberg#define _bdf_set_glyph_modified( map, e )                 \
476343ba22a36ab264fa061cab3b87662d5b7b7114Werner Lemberg          ( (map)[(e) >> 5] |= ( 1UL << ( (e) & 31 ) ) )
486343ba22a36ab264fa061cab3b87662d5b7b7114Werner Lemberg#define _bdf_clear_glyph_modified( map, e )               \
496343ba22a36ab264fa061cab3b87662d5b7b7114Werner Lemberg          ( (map)[(e) >> 5] &= ~( 1UL << ( (e) & 31 ) ) )
50993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
51993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner/* end of bdfP.h */
52993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
53993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
547cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*************************************************************************/
557cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*                                                                       */
567cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /* BDF font options macros and types.                                    */
577cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*                                                                       */
587cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*************************************************************************/
59993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
60993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
617cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_CORRECT_METRICS  0x01 /* Correct invalid metrics when loading. */
627cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_KEEP_COMMENTS    0x02 /* Preserve the font comments.           */
637cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_KEEP_UNENCODED   0x04 /* Keep the unencoded glyphs.            */
647cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_PROPORTIONAL     0x08 /* Font has proportional spacing.        */
657cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_MONOWIDTH        0x10 /* Font has mono width.                  */
667cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_CHARCELL         0x20 /* Font has charcell spacing.            */
67993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
687cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_ALL_SPACING  ( BDF_PROPORTIONAL | \
697cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                           BDF_MONOWIDTH    | \
707cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                           BDF_CHARCELL     )
71993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
727cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_DEFAULT_LOAD_OPTIONS  ( BDF_CORRECT_METRICS | \
737cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                                    BDF_KEEP_COMMENTS   | \
747cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                                    BDF_KEEP_UNENCODED  | \
757cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                                    BDF_PROPORTIONAL    )
76993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
77993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
787cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  typedef struct  bdf_options_t_
797cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  {
807cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    int            correct_metrics;
817cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    int            keep_unencoded;
827cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    int            keep_comments;
837cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    int            font_spacing;
84993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
857cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  } bdf_options_t;
86993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
87993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
887cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /* Callback function type for unknown configuration options. */
897cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  typedef int
907cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  (*bdf_options_callback_t)( bdf_options_t*  opts,
917cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                             char**          params,
927cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                             unsigned long   nparams,
937cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                             void*           client_data );
94993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
95993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
967cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*************************************************************************/
977cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*                                                                       */
987cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /* BDF font property macros and types.                                   */
997cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*                                                                       */
1007cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*************************************************************************/
101993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
102993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
1037cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_ATOM      1
1047cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_INTEGER   2
1057cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_CARDINAL  3
106993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
107993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
1087cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /* This structure represents a particular property of a font. */
1097cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /* There are a set of defaults and each font has their own.   */
1107cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  typedef struct  bdf_property_t_
1117cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  {
1127cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    char*  name;         /* Name of the property.   */
1137cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    int    format;       /* Format of the property. */
1147cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    int    builtin;      /* A builtin property.     */
1157cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    union
1167cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    {
1177cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg      char*          atom;
118be41d3e718f2537497ac1a2415ce7a31611b0246Suzuki, Toshiya (鈴木俊哉)      long           l;
119be41d3e718f2537497ac1a2415ce7a31611b0246Suzuki, Toshiya (鈴木俊哉)      unsigned long  ul;
120993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
1217cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    } value;             /* Value of the property.  */
122993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
1237cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  } bdf_property_t;
124993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
125993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
1267cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*************************************************************************/
1277cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*                                                                       */
1287cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /* BDF font metric and glyph types.                                      */
1297cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*                                                                       */
1307cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*************************************************************************/
131993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
132993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
1337cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  typedef struct  bdf_bbx_t_
1347cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  {
1357cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned short  width;
1367cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned short  height;
1377cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1387cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    short           x_offset;
1397cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    short           y_offset;
1407cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1417cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    short           ascent;
1427cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    short           descent;
1437cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1447cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  } bdf_bbx_t;
145993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
146993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
1477cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  typedef struct  bdf_glyph_t_
1487cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  {
1497cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    char*           name;        /* Glyph name.                          */
1507cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    long            encoding;    /* Glyph encoding.                      */
1517cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned short  swidth;      /* Scalable width.                      */
1527cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned short  dwidth;      /* Device width.                        */
1537cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    bdf_bbx_t       bbx;         /* Glyph bounding box.                  */
1547cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned char*  bitmap;      /* Glyph bitmap.                        */
1557cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long   bpr;         /* Number of bytes used per row.        */
1567cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned short  bytes;       /* Number of bytes used for the bitmap. */
1577cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1587cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  } bdf_glyph_t;
1597cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1607cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1617cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  typedef struct  bdf_glyphlist_t_
1627cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  {
1637cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned short  pad;          /* Pad to 4-byte boundary.              */
1647cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned short  bpp;          /* Bits per pixel.                      */
1657cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    long            start;        /* Beginning encoding value of glyphs.  */
1667cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    long            end;          /* Ending encoding value of glyphs.     */
1677cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    bdf_glyph_t*    glyphs;       /* Glyphs themselves.                   */
1687cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long   glyphs_size;  /* Glyph structures allocated.          */
1697cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long   glyphs_used;  /* Glyph structures used.               */
1707cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    bdf_bbx_t       bbx;          /* Overall bounding box of glyphs.      */
1717cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1727cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  } bdf_glyphlist_t;
1737cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1747cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1757cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  typedef struct  bdf_font_t_
1767cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  {
1777cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    char*            name;           /* Name of the font.                   */
1787cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    bdf_bbx_t        bbx;            /* Font bounding box.                  */
1797cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1803c374c8cdaae303d0b8d91cd54c909924eb0dfbeWerner Lemberg    unsigned long    point_size;     /* Point size of the font.             */
1817cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long    resolution_x;   /* Font horizontal resolution.         */
1827cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long    resolution_y;   /* Font vertical resolution.           */
1837cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1847cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    int              spacing;        /* Font spacing value.                 */
1857cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1867cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned short   monowidth;      /* Logical width for monowidth font.   */
1877cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1888ef4183690ab7a8f5fef0eb9ae64b0958aecc6b8Werner Lemberg    long             default_char;   /* Encoding of the default glyph.      */
1897cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1907cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    long             font_ascent;    /* Font ascent.                        */
1917cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    long             font_descent;   /* Font descent.                       */
1927cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1937cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long    glyphs_size;    /* Glyph structures allocated.         */
1947cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long    glyphs_used;    /* Glyph structures used.              */
1957cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    bdf_glyph_t*     glyphs;         /* Glyphs themselves.                  */
1967cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
1977cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long    unencoded_size; /* Unencoded glyph struct. allocated.  */
1987cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long    unencoded_used; /* Unencoded glyph struct. used.       */
1997cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    bdf_glyph_t*     unencoded;      /* Unencoded glyphs themselves.        */
2007cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2017cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long    props_size;     /* Font properties allocated.          */
2027cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long    props_used;     /* Font properties used.               */
2037cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    bdf_property_t*  props;          /* Font properties themselves.         */
2047cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2057cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    char*            comments;       /* Font comments.                      */
2067cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long    comments_len;   /* Length of comment string.           */
2077cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2087cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    bdf_glyphlist_t  overflow;       /* Storage used for glyph insertion.   */
2097cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2107cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    void*            internal;       /* Internal data for the font.         */
2117cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
212ed54e43aed19f6078a254a6293e7686c489bff8dWerner Lemberg    /* The size of the next two arrays must be in sync with the */
213ed54e43aed19f6078a254a6293e7686c489bff8dWerner Lemberg    /* size of the `have' array in the `bdf_parse_t' structure. */
214ed54e43aed19f6078a254a6293e7686c489bff8dWerner Lemberg    unsigned long    nmod[34816];    /* Bitmap indicating modified glyphs.  */
215ed54e43aed19f6078a254a6293e7686c489bff8dWerner Lemberg    unsigned long    umod[34816];    /* Bitmap indicating modified          */
2167cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                                     /* unencoded glyphs.                   */
2177cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned short   modified;       /* Boolean indicating font modified.   */
2187cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned short   bpp;            /* Bits per pixel.                     */
2197cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2207cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    FT_Memory        memory;
2217cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2227cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    bdf_property_t*  user_props;
2237cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg    unsigned long    nuser_props;
224313435657d664b30c82bf2162ba776a48ef2bb21Werner Lemberg    FT_HashRec       proptbl;
2257cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2267cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  } bdf_font_t;
2277cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2287cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2297cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*************************************************************************/
2307cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*                                                                       */
2317cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /* Types for load/save callbacks.                                        */
2327cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*                                                                       */
2337cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*************************************************************************/
2347cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2357cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2367cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /* Error codes. */
2377cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_MISSING_START       -1
2387cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_MISSING_FONTNAME    -2
2397cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_MISSING_SIZE        -3
2407cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_MISSING_CHARS       -4
2417cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_MISSING_STARTCHAR   -5
2427cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_MISSING_ENCODING    -6
2437cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_MISSING_BBX         -7
2447cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2457cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_OUT_OF_MEMORY      -20
2467cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2477cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg#define BDF_INVALID_LINE      -100
2487cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2497cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2507cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*************************************************************************/
2517cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*                                                                       */
2527cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /* BDF font API.                                                         */
2537cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*                                                                       */
2547cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  /*************************************************************************/
2557cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2567cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  FT_LOCAL( FT_Error )
2577cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  bdf_load_font( FT_Stream       stream,
2587cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                 FT_Memory       memory,
2597cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                 bdf_options_t*  opts,
2607cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                 bdf_font_t*    *font );
2617cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2627cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  FT_LOCAL( void )
2637cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  bdf_free_font( bdf_font_t*  font );
2647cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2657cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  FT_LOCAL( bdf_property_t * )
2667cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  bdf_get_property( char*        name,
2677cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg                    bdf_font_t*  font );
2687cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2697cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  FT_LOCAL( bdf_property_t * )
2707cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg  bdf_get_font_property( bdf_font_t*  font,
271428c2e4f62abb2c7f158f7f0da43d82f848db30dWerner Lemberg                         const char*  name );
2727cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
273993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
274993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid TurnerFT_END_HEADER
275993a8d044538e59ebaffe27d4d04f8efb979fd7cDavid Turner
2767cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
27737412ff9f42212bcf4dd29d9762f3c35b5735768Werner Lemberg#endif /* BDF_H_ */
2787cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2797cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg
2807cf4d377f4a2b545ab2bd876dabd8df5a00376acWerner Lemberg/* END */
281