Skip to content

FreeType » Docs » Format-Specific API » BDF and PCF Files

# BDF and PCF Files

## Synopsis

This section contains the declaration of functions specific to BDF and PCF fonts. They also work for SFNT bitmap fonts that contain a ‘BDF ’ table like X11's `.otb` fonts.

## BDF_PropertyType

Defined in FT_BDF_H (freetype/ftbdf.h).

      typedef enum  BDF_PropertyType_
      {
        BDF_PROPERTY_TYPE_NONE     = 0,
        BDF_PROPERTY_TYPE_ATOM     = 1,
        BDF_PROPERTY_TYPE_INTEGER  = 2,
        BDF_PROPERTY_TYPE_CARDINAL = 3

      } BDF_PropertyType;

A list of BDF property types.

#### values

BDF_PROPERTY_TYPE_NONE | Value 0 is used to indicate a missing property.
BDF_PROPERTY_TYPE_ATOM | Property is a string atom.
BDF_PROPERTY_TYPE_INTEGER | Property is a 32-bit signed integer.
BDF_PROPERTY_TYPE_CARDINAL | Property is a 32-bit unsigned integer.

## BDF_Property

Defined in FT_BDF_H (freetype/ftbdf.h).

      typedef struct BDF_PropertyRec_*  BDF_Property;

A handle to a `BDF_PropertyRec` structure to model a given BDF/PCF property.

## BDF_PropertyRec

Defined in FT_BDF_H (freetype/ftbdf.h).

      typedef struct  BDF_PropertyRec_
      {
        BDF_PropertyType  type;
        union {
          const char*     atom;
          FT_Int32        integer;
          FT_UInt32       cardinal;

        } u;

      } BDF_PropertyRec;

This structure models a given BDF/PCF property.

#### fields

type | The property type.
u.atom | The atom string, if type is `BDF_PROPERTY_TYPE_ATOM`. May be `NULL`, indicating an empty string.
u.integer | A signed integer, if type is `BDF_PROPERTY_TYPE_INTEGER`.
u.cardinal | An unsigned integer, if type is `BDF_PROPERTY_TYPE_CARDINAL`.

## FT_Get_BDF_Charset_ID

Defined in FT_BDF_H (freetype/ftbdf.h).

      FT_EXPORT( FT_Error )
      FT_Get_BDF_Charset_ID( FT_Face       face,
                             const char*  *acharset_encoding,
                             const char*  *acharset_registry );

Retrieve a BDF font character set identity, according to the BDF specification.

#### input

face | A handle to the input face.

#### output

acharset_encoding | Charset encoding, as a C string, owned by the face.
acharset_registry | Charset registry, as a C string, owned by the face.

#### return

FreeType error code. 0 means success.

#### note

This function only works with BDF faces and SFNT fonts that have a ‘BDF ’ table, returning an error otherwise. For the latter, a bitmap strike size must be selected first.

## FT_Get_BDF_Property

Defined in FT_BDF_H (freetype/ftbdf.h).

      FT_EXPORT( FT_Error )
      FT_Get_BDF_Property( FT_Face           face,
                           const char*       prop_name,
                           BDF_PropertyRec  *aproperty );

Retrieve a BDF property from a BDF or PCF font.

#### input

face | A handle to the input face.
name | The property name.

#### output

aproperty | The property.

#### return

FreeType error code. 0 means success.

#### note

This function works with BDF and PCF fonts. It returns an error otherwise. It also returns an error if the property is not in the font.

A ‘property’ is a either key-value pair within the STARTPROPERTIES … ENDPROPERTIES block of a BDF font or a key-value pair from the `info->props` array within a `FontRec` structure of a PCF font.

Integer properties are always stored as ‘signed’ within PCF fonts; consequently, `BDF_PROPERTY_TYPE_CARDINAL` is a possible return value for BDF fonts only.

In case of error, `aproperty->type` is always set to `BDF_PROPERTY_TYPE_NONE`.

This also works with SFNT fonts that have a ‘BDF ’ table, after a bitmap strike size has been selected.