Fontconfig uses abstract data types to hide internal implementation details for most data structures. A few structures are exposed where appropriate.

FcChar8, FcChar16, FcChar32, FcBool

These are primitive data types; the FcChar* types hold precisely the number of bits stated (if supported by the C implementation). FcBool holds one of two C preprocessor symbols: FcFalse or FcTrue.


An FcMatrix holds an affine transformation, usually used to reshape glyphs. A small set of matrix operations are provided to manipulate these.

        typedef struct _FcMatrix {
                double xx, xy, yx, yy;
        } FcMatrix;


An FcCharSet is an abstract type that holds the set of encoded Unicode chars in a font. Operations to build and compare these sets are provided.


An FcLangSet is an abstract type that holds the set of languages supported by a font. Operations to build and compare these sets are provided. These are computed for a font based on orthographic information built into the fontconfig library. Fontconfig has orthographies for all of the ISO 639-1 languages except for MS, NA, PA, PS, QU, RN, RW, SD, SG, SN, SU and ZA. If you have orthographic information for any of these languages, please submit them.


An FcLangResult is an enumeration used to return the results of comparing two language strings or FcLangSet objects. FcLangEqual means the objects match language and territory. FcLangDifferentTerritory means the objects match in language but differ in territory. FcLangDifferentLang means the objects differ in language.


Tags the kind of data stored in an FcValue.


An FcValue object holds a single value with one of a number of different types. The 'type' tag indicates which member is valid.

        typedef struct _FcValue {
                FcType type;
                union {
                        const FcChar8 *s;
                        int i;
                        FcBool b;
                        double d;
                        const FcMatrix *m;
                        const FcCharSet *c;
                        void *f;
                        const FcLangSet *l;
                        const FcRange   *r;
                } u;
        } FcValue;
                  FcValue Members

        Type            Union member    Datatype
        FcTypeVoid      (none)          (none)
        FcTypeInteger   i               int
        FcTypeDouble    d               double
        FcTypeString    s               FcChar8 *
        FcTypeBool      b               b
        FcTypeMatrix    m               FcMatrix *
        FcTypeCharSet   c               FcCharSet *
        FcTypeFTFace    f               void * (FT_Face)
        FcTypeLangSet   l               FcLangSet *
        FcTypeRange     r               FcRange *

FcPattern, FcPatternIter

An FcPattern holds a set of names with associated value lists; each name refers to a property of a font. FcPatterns are used as inputs to the matching code as well as holding information about specific fonts. Each property can hold one or more values; conventionally all of the same type, although the interface doesn't demand that. An FcPatternIter is used during iteration to access properties in FcPattern.


        typedef struct _FcFontSet {
                int nfont;
                int sfont;
                FcPattern **fonts;
        } FcFontSet;
An FcFontSet contains a list of FcPatterns. Internally fontconfig uses this data structure to hold sets of fonts. Externally, fontconfig returns the results of listing fonts in this format. 'nfont' holds the number of patterns in the 'fonts' array; 'sfont' is used to indicate the size of that array.

FcStrSet, FcStrList

FcStrSet holds a list of strings that can be appended to and enumerated. Its unique characteristic is that the enumeration works even while strings are appended during enumeration. FcStrList is used during enumeration to safely and correctly walk the list of strings even while that list is edited in the middle of enumeration.


        typedef struct _FcObjectSet {
                int nobject;
                int sobject;
                const char **objects;
        } FcObjectSet;
holds a set of names and is used to specify which fields from fonts are placed in the the list of returned patterns when listing fonts.


        typedef struct _FcObjectType {
                const char *object;
                FcType type;
        } FcObjectType;
marks the type of a pattern element generated when parsing font names. Applications can add new object types so that font names may contain the new elements.


        typedef struct _FcConstant {
            const FcChar8 *name;
            const char *object;
            int value;
        } FcConstant;
Provides for symbolic constants for new pattern elements. When 'name' is seen in a font name, an 'object' element is created with value 'value'.


holds a list of Unicode chars which are expected to be blank; unexpectedly blank chars are assumed to be invalid and are elided from the charset associated with the font.

FcBlanks is deprecated and should not be used in newly written code. It is still accepted by some functions for compatibility with older code but will be removed in the future.


holds the per-user cache information for use while loading the font database. This is built automatically for the current configuration when that is loaded. Applications must always pass '0' when one is requested.


holds a complete configuration of the library; there is one default configuration, other can be constructed from XML data structures. All public entry points that need global data can take an optional FcConfig* argument; passing 0 uses the default configuration. FcConfig objects hold two sets of fonts, the first contains those specified by the configuration, the second set holds those added by the application at run-time. Interfaces that need to reference a particular set use one of the FcSetName enumerated values.


Specifies one of the two sets of fonts available in a configuration; FcSetSystem for those fonts specified in the configuration and FcSetApplication which holds fonts provided by the application.


Used as a return type for functions manipulating FcPattern objects.

      FcResult Values
        Result Code             Meaning
        FcResultMatch           Object exists with the specified ID
        FcResultNoMatch         Object doesn't exist at all
        FcResultTypeMismatch    Object exists, but the type doesn't match
        FcResultNoId            Object exists, but has fewer values
                                than specified
        FcResultOutOfMemory     malloc failed


Used for locking access to configuration files. Provides a safe way to update configuration files.


Holds information about the fonts contained in a single directory. Normal applications need not worry about this as caches for font access are automatically managed by the library. Applications dealing with cache management may want to use some of these objects in their work, however the included 'fc-cache' program generally suffices for all of that.