Fontconfig contains two essential modules, the configuration module which builds an internal configuration from XML files and the matching module which accepts font patterns and returns the nearest matching font.
The configuration module consists of the FcConfig datatype, libexpat and FcConfigParse which walks over an XML tree and ammends a configuration with data found within. From an external perspective, configuration of the library consists of generating a valid XML tree and feeding that to FcConfigParse. The only other mechanism provided to applications for changing the running configuration is to add fonts and directories to the list of application-provided font files.
The intent is to make font configurations relatively static, and shared by as many applications as possible. It is hoped that this will lead to more stable font selection when passing names from one application to another. XML was chosen as a configuration file format because it provides a format which is easy for external agents to edit while retaining the correct structure and syntax.
Font configuration is separate from font matching; applications needing to do their own matching can access the available fonts from the library and perform private matching. The intent is to permit applications to pick and choose appropriate functionality from the library instead of forcing them to choose between this library and a private configuration mechanism. The hope is that this will ensure that configuration of fonts for all applications can be centralized in one place. Centralizing font configuration will simplify and regularize font installation and customization.
While font patterns may contain essentially any properties, there are some well known properties with associated types. Fontconfig uses some of these properties for font matching and font completion. Others are provided as a convenience for the applications rendering mechanism.
Property Definitions Property CPP Symbol Type Description ---------------------------------------------------- family FC_FAMILY String Font family name style FC_STYLE String Font style. Overrides weight and slant slant FC_SLANT Int Italic, oblique or roman weight FC_WEIGHT Int Light, medium, demibold, bold or black size FC_SIZE Double Point size aspect FC_ASPECT Double Stretches glyphs horizontally before hinting pixelsize FC_PIXEL_SIZE Double Pixel size spacing FC_SPACING Int Proportional, monospace or charcell foundry FC_FOUNDRY String Font foundry name antialias FC_ANTIALIAS Bool Whether glyphs can be antialiased hinting FC_HINTING Bool Whether the rasterizer should use hinting verticallayout FC_VERTICAL_LAYOUT Bool Use vertical layout autohint FC_AUTOHINT Bool Use autohinter instead of normal hinter globaladvance FC_GLOBAL_ADVANCE Bool Use font global advance data file FC_FILE String The filename holding the font index FC_INDEX Int The index of the font within the file ftface FC_FT_FACE FT_Face Use the specified FreeType face object rasterizer FC_RASTERIZER String Which rasterizer is in use outline FC_OUTLINE Bool Whether the glyphs are outlines scalable FC_SCALABLE Bool Whether glyphs can be scaled scale FC_SCALE Double Scale factor for point->pixel conversions dpi FC_DPI Double Target dots per inch rgba FC_RGBA Int unknown, rgb, bgr, vrgb, vbgr, none - subpixel geometry minspace FC_MINSPACE Bool Eliminate leading from line spacing charset FC_CHARSET CharSet Unicode chars encoded by the font lang FC_LANG String List of RFC-3066-style languages this font supports