ftbdf.h revision ec0bab5697bb31ba980810145f62e3799946ec60
1/***************************************************************************/
2/*                                                                         */
3/*  ftbdf.h                                                                */
4/*                                                                         */
5/*    FreeType API for accessing BDF-specific strings (specification).     */
6/*                                                                         */
7/*  Copyright 2002, 2003, 2004, 2006, 2009 by                              */
8/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9/*                                                                         */
10/*  This file is part of the FreeType project, and may only be used,       */
11/*  modified, and distributed under the terms of the FreeType project      */
12/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13/*  this file you indicate that you have read the license and              */
14/*  understand and accept it fully.                                        */
15/*                                                                         */
16/***************************************************************************/
17
18
19#ifndef __FTBDF_H__
20#define __FTBDF_H__
21
22#include <ft2build.h>
23#include FT_FREETYPE_H
24
25#ifdef FREETYPE_H
26#error "freetype.h of FreeType 1 has been loaded!"
27#error "Please fix the directory search order for header files"
28#error "so that freetype.h of FreeType 2 is found first."
29#endif
30
31
32FT_BEGIN_HEADER
33
34
35  /*************************************************************************/
36  /*                                                                       */
37  /* <Section>                                                             */
38  /*    bdf_fonts                                                          */
39  /*                                                                       */
40  /* <Title>                                                               */
41  /*    BDF and PCF Files                                                  */
42  /*                                                                       */
43  /* <Abstract>                                                            */
44  /*    BDF and PCF specific API.                                          */
45  /*                                                                       */
46  /* <Description>                                                         */
47  /*    This section contains the declaration of functions specific to BDF */
48  /*    and PCF fonts.                                                     */
49  /*                                                                       */
50  /*************************************************************************/
51
52
53  /**********************************************************************
54   *
55   * @enum:
56   *    FT_PropertyType
57   *
58   * @description:
59   *    A list of BDF property types.
60   *
61   * @values:
62   *    BDF_PROPERTY_TYPE_NONE ::
63   *      Value~0 is used to indicate a missing property.
64   *
65   *    BDF_PROPERTY_TYPE_ATOM ::
66   *      Property is a string atom.
67   *
68   *    BDF_PROPERTY_TYPE_INTEGER ::
69   *      Property is a 32-bit signed integer.
70   *
71   *    BDF_PROPERTY_TYPE_CARDINAL ::
72   *      Property is a 32-bit unsigned integer.
73   */
74  typedef enum  BDF_PropertyType_
75  {
76    BDF_PROPERTY_TYPE_NONE     = 0,
77    BDF_PROPERTY_TYPE_ATOM     = 1,
78    BDF_PROPERTY_TYPE_INTEGER  = 2,
79    BDF_PROPERTY_TYPE_CARDINAL = 3
80
81  } BDF_PropertyType;
82
83
84  /**********************************************************************
85   *
86   * @type:
87   *    BDF_Property
88   *
89   * @description:
90   *    A handle to a @BDF_PropertyRec structure to model a given
91   *    BDF/PCF property.
92   */
93  typedef struct BDF_PropertyRec_*  BDF_Property;
94
95
96 /**********************************************************************
97  *
98  * @struct:
99  *    BDF_PropertyRec
100  *
101  * @description:
102  *    This structure models a given BDF/PCF property.
103  *
104  * @fields:
105  *    type ::
106  *      The property type.
107  *
108  *    u.atom ::
109  *      The atom string, if type is @BDF_PROPERTY_TYPE_ATOM.
110  *
111  *    u.integer ::
112  *      A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER.
113  *
114  *    u.cardinal ::
115  *      An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL.
116  */
117  typedef struct  BDF_PropertyRec_
118  {
119    BDF_PropertyType  type;
120    union {
121      const char*     atom;
122      FT_Int32        integer;
123      FT_UInt32       cardinal;
124
125    } u;
126
127  } BDF_PropertyRec;
128
129
130 /**********************************************************************
131  *
132  * @function:
133  *    FT_Get_BDF_Charset_ID
134  *
135  * @description:
136  *    Retrieve a BDF font character set identity, according to
137  *    the BDF specification.
138  *
139  * @input:
140  *    face ::
141  *       A handle to the input face.
142  *
143  * @output:
144  *    acharset_encoding ::
145  *       Charset encoding, as a C~string, owned by the face.
146  *
147  *    acharset_registry ::
148  *       Charset registry, as a C~string, owned by the face.
149  *
150  * @return:
151  *   FreeType error code.  0~means success.
152  *
153  * @note:
154  *   This function only works with BDF faces, returning an error otherwise.
155  */
156  FT_EXPORT( FT_Error )
157  FT_Get_BDF_Charset_ID( FT_Face       face,
158                         const char*  *acharset_encoding,
159                         const char*  *acharset_registry );
160
161
162 /**********************************************************************
163  *
164  * @function:
165  *    FT_Get_BDF_Property
166  *
167  * @description:
168  *    Retrieve a BDF property from a BDF or PCF font file.
169  *
170  * @input:
171  *    face :: A handle to the input face.
172  *
173  *    name :: The property name.
174  *
175  * @output:
176  *    aproperty :: The property.
177  *
178  * @return:
179  *   FreeType error code.  0~means success.
180  *
181  * @note:
182  *   This function works with BDF _and_ PCF fonts.  It returns an error
183  *   otherwise.  It also returns an error if the property is not in the
184  *   font.
185  *
186  *   A `property' is a either key-value pair within the STARTPROPERTIES
187  *   ... ENDPROPERTIES block of a BDF font or a key-value pair from the
188  *   `info->props' array within a `FontRec' structure of a PCF font.
189  *
190  *   Integer properties are always stored as `signed' within PCF fonts;
191  *   consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value
192  *   for BDF fonts only.
193  *
194  *   In case of error, `aproperty->type' is always set to
195  *   @BDF_PROPERTY_TYPE_NONE.
196  */
197  FT_EXPORT( FT_Error )
198  FT_Get_BDF_Property( FT_Face           face,
199                       const char*       prop_name,
200                       BDF_PropertyRec  *aproperty );
201
202 /* */
203
204FT_END_HEADER
205
206#endif /* __FTBDF_H__ */
207
208
209/* END */
210