Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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.  
  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.     /* 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.  
  291. FT_END_HEADER
  292.  
  293.  
  294. #endif /* __BDF_H__ */
  295.  
  296.  
  297. /* END */
  298.