• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2  *
3  * ftbdf.h
4  *
5  *   FreeType API for accessing BDF-specific strings (specification).
6  *
7  * Copyright (C) 2002-2023 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 <freetype/freetype.h>
23 
24 #ifdef FREETYPE_H
25 #error "freetype.h of FreeType 1 has been loaded!"
26 #error "Please fix the directory search order for header files"
27 #error "so that freetype.h of FreeType 2 is found first."
28 #endif
29 
30 
31 FT_BEGIN_HEADER
32 
33 
34   /**************************************************************************
35    *
36    * @section:
37    *   bdf_fonts
38    *
39    * @title:
40    *   BDF and PCF Files
41    *
42    * @abstract:
43    *   BDF and PCF specific API.
44    *
45    * @description:
46    *   This section contains the declaration of functions specific to BDF and
47    *   PCF fonts.
48    *
49    */
50 
51 
52   /**************************************************************************
53    *
54    * @enum:
55    *    BDF_PropertyType
56    *
57    * @description:
58    *    A list of BDF property types.
59    *
60    * @values:
61    *    BDF_PROPERTY_TYPE_NONE ::
62    *      Value~0 is used to indicate a missing property.
63    *
64    *    BDF_PROPERTY_TYPE_ATOM ::
65    *      Property is a string atom.
66    *
67    *    BDF_PROPERTY_TYPE_INTEGER ::
68    *      Property is a 32-bit signed integer.
69    *
70    *    BDF_PROPERTY_TYPE_CARDINAL ::
71    *      Property is a 32-bit unsigned integer.
72    */
73   typedef enum  BDF_PropertyType_
74   {
75     BDF_PROPERTY_TYPE_NONE     = 0,
76     BDF_PROPERTY_TYPE_ATOM     = 1,
77     BDF_PROPERTY_TYPE_INTEGER  = 2,
78     BDF_PROPERTY_TYPE_CARDINAL = 3
79 
80   } BDF_PropertyType;
81 
82 
83   /**************************************************************************
84    *
85    * @type:
86    *    BDF_Property
87    *
88    * @description:
89    *    A handle to a @BDF_PropertyRec structure to model a given BDF/PCF
90    *    property.
91    */
92   typedef struct BDF_PropertyRec_*  BDF_Property;
93 
94 
95   /**************************************************************************
96    *
97    * @struct:
98    *    BDF_PropertyRec
99    *
100    * @description:
101    *    This structure models a given BDF/PCF property.
102    *
103    * @fields:
104    *    type ::
105    *      The property type.
106    *
107    *    u.atom ::
108    *      The atom string, if type is @BDF_PROPERTY_TYPE_ATOM.  May be
109    *      `NULL`, indicating an empty string.
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 the BDF
137    *    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 ::
172    *      A handle to the input face.
173    *
174    *    name ::
175    *      The property name.
176    *
177    * @output:
178    *    aproperty ::
179    *      The property.
180    *
181    * @return:
182    *   FreeType error code.  0~means success.
183    *
184    * @note:
185    *   This function works with BDF _and_ PCF fonts.  It returns an error
186    *   otherwise.  It also returns an error if the property is not in the
187    *   font.
188    *
189    *   A 'property' is a either key-value pair within the STARTPROPERTIES
190    *   ... ENDPROPERTIES block of a BDF font or a key-value pair from the
191    *   `info->props` array within a `FontRec` structure of a PCF font.
192    *
193    *   Integer properties are always stored as 'signed' within PCF fonts;
194    *   consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value
195    *   for BDF fonts only.
196    *
197    *   In case of error, `aproperty->type` is always set to
198    *   @BDF_PROPERTY_TYPE_NONE.
199    */
200   FT_EXPORT( FT_Error )
201   FT_Get_BDF_Property( FT_Face           face,
202                        const char*       prop_name,
203                        BDF_PropertyRec  *aproperty );
204 
205   /* */
206 
207 FT_END_HEADER
208 
209 #endif /* FTBDF_H_ */
210 
211 
212 /* END */
213