3. Datatypes

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

3.1. FcChar8, FcChar16, FcChar32, FcBool

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

3.2. FcMatrix

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;
    

3.3. FcCharSet

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.

3.4. FcType

Tags the kind of data stored in an FcValue.

3.5. 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;
                } u;
        } FcValue;
    
                  FcValue Members

        Type            Union member    Datatype
        --------------------------------
        FcTypeVoid      (none)          (none)
        FcTypeInteger   i               int
        FcTypeDouble    d               double
        FcTypeString    s               char *
        FcTypeBool      b               b
        FcTypeMatrix    m               FcMatrix *
        FcTypeCharSet   c               FcCharSet *
    

3.6. 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.

3.7. FcFontSet

        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.

3.8. 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.

3.9. FcObjectSet

        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.

3.10. FcObjectType

        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.

3.11. FcConstant

        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'.

3.12. FcBlanks

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.

3.13. FcFileCache

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.

3.14. FcConfig

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 particulat set use one of the FcSetName enumerated values.

3.15. FcSetName

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.

3.16. FcResult

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
    

3.17. FcAtomic

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