<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
<!ENTITY fcatomic SYSTEM "fcatomic.sgml">
<!ENTITY fcblanks SYSTEM "fcblanks.sgml">
<!ENTITY fccache SYSTEM "fccache.sgml">
<!ENTITY fccharset SYSTEM "fccharset.sgml">
<!ENTITY fcconfig SYSTEM "fcconfig.sgml">
<!ENTITY fcconstant SYSTEM "fcconstant.sgml">
<!ENTITY fcdircache SYSTEM "fcdircache.sgml">
<!ENTITY fcfile SYSTEM "fcfile.sgml">
<!ENTITY fcfontset SYSTEM "fcfontset.sgml">
<!ENTITY fcformat SYSTEM "fcformat.sgml">
<!ENTITY fcfreetype SYSTEM "fcfreetype.sgml">
<!ENTITY fcinit SYSTEM "fcinit.sgml">
<!ENTITY fclangset SYSTEM "fclangset.sgml">
<!ENTITY fcmatrix SYSTEM "fcmatrix.sgml">
<!ENTITY fcobjectset SYSTEM "fcobjectset.sgml">
<!ENTITY fcobjecttype SYSTEM "fcobjecttype.sgml">
<!ENTITY fcpattern SYSTEM "fcpattern.sgml">
<!ENTITY fcrange SYSTEM "fcrange.sgml">
<!ENTITY fcstring SYSTEM "fcstring.sgml">
<!ENTITY fcstrset SYSTEM "fcstrset.sgml">
<!ENTITY fcvalue SYSTEM "fcvalue.sgml">
<!ENTITY fcweight SYSTEM "fcweight.sgml">
<!ENTITY version SYSTEM "version.sgml">
]>
<!--
    fontconfig/doc/local-fontconfig-devel.sgml
   
    Copyright © 2003 Keith Packard
   
    Permission to use, copy, modify, distribute, and sell this software and its
    documentation for any purpose is hereby granted without fee, provided that
    the above copyright notice appear in all copies and that both that
    copyright notice and this permission notice appear in supporting
    documentation, and that the name of the author(s) not be used in
    advertising or publicity pertaining to distribution of the software without
    specific, written prior permission.  The authors make no
    representations about the suitability of this software for any purpose.  It
    is provided "as is" without express or implied warranty.
   
    THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
    DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    PERFORMANCE OF THIS SOFTWARE.
-->
<article>
	<title>Fontconfig Developers Reference, Version &version; </title>
	<artheader>
		<author>
			<firstname>Keith</firstname>
			<surname>Packard</surname>
			<affiliation><orgname>
				HP Cambridge Research Lab
			</orgname></affiliation>
		</author>
		<authorinitials>KRP</authorinitials>
		<productname>Fontconfig</productname>
		<productnumber>&version;</productnumber>
		<LegalNotice>
			<simpara>		
Copyright © 2002 Keith Packard
			</simpara><simpara>
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of the author(s) not be used in
advertising or publicity pertaining to distribution of the software without
specific, written prior permission.  The authors make no
representations about the suitability of this software for any purpose.  It
is provided "as is" without express or implied warranty.
			</simpara><simpara>
THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
			</simpara>
		</LegalNotice>
	</artheader>
<sect1><title>DESCRIPTION</title>
  <para>
Fontconfig is a library designed to provide system-wide font configuration,
customization and application access.
  </para>
</sect1>
<sect1><title>FUNCTIONAL OVERVIEW</title>
  <para>
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.
  </para>
  <sect2><title>FONT CONFIGURATION</title>
    <para>
The configuration module consists of the FcConfig datatype, libexpat and
FcConfigParse which walks over an XML tree and amends 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.  
    </para><para>
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.
    </para><para>
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.
    </para>
  </sect2>
  <sect2>
    <title>FONT PROPERTIES</title>
    <para>
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 application's rendering mechanism.
    </para>
    <programlisting>
                 Property Definitions

    Property       C Preprocessor Symbol  Type    Description
    ----------------------------------------------------
    family         FC_FAMILY              String  Font family names
    familylang     FC_FAMILYLANG          String  Language corresponding to
                                                  each family name
    style          FC_STYLE               String  Font style. Overrides weight
                                                  and slant
    stylelang      FC_STYLELANG           String  Language corresponding to
                                                  each style name
    fullname       FC_FULLNAME            String  Font face full name where
                                                  different from family and
                                                  family + style
    fullnamelang   FC_FULLNAMELANG        String  Language corresponding to
                                                  each fullname
    slant          FC_SLANT               Int     Italic, oblique or roman
    weight         FC_WEIGHT              Int     Light, medium, demibold,
                                                  bold or black
    size           FC_SIZE                Double  Point size
    width          FC_WIDTH               Int     Condensed, normal or expanded
    aspect         FC_ASPECT              Double  Stretches glyphs horizontally
                                                  before hinting
    pixelsize      FC_PIXEL_SIZE          Double  Pixel size
    spacing        FC_SPACING             Int     Proportional, dual-width,
                                                  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
    hintstyle      FC_HINT_STYLE          Int     Automatic hinting style
    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 (deprecated)
    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 (deprecated)
    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 (deprecated)
    symbol         FC_SYMBOL              Bool    Whether font uses MS symbol-font encoding
    color          FC_COLOR               Bool    Whether any glyphs have color
    dpi            FC_DPI                 Double  Target dots per inch
    rgba           FC_RGBA                Int     unknown, rgb, bgr, vrgb,
                                                  vbgr, none - subpixel geometry
    lcdfilter      FC_LCD_FILTER          Int     Type of LCD filter
    minspace       FC_MINSPACE            Bool    Eliminate leading from line
                                                  spacing
    charset        FC_CHARSET             CharSet Unicode chars encoded by
                                                  the font
    lang           FC_LANG                LangSet Set of RFC-3066-style
                                                  languages this font supports
    fontversion    FC_FONTVERSION         Int     Version number of the font
    capability     FC_CAPABILITY          String  List of layout capabilities in
                                                  the font
    fontformat     FC_FONTFORMAT          String  String name of the font format
    embolden       FC_EMBOLDEN            Bool    Rasterizer should
                                                  synthetically embolden the font
    embeddedbitmap FC_EMBEDDED_BITMAP     Bool    Use the embedded bitmap instead
                                                  of the outline
    decorative     FC_DECORATIVE          Bool    Whether the style is a decorative
                                                  variant
    fontfeatures   FC_FONT_FEATURES       String  List of extra feature tags in
                                                  OpenType to be enabled
    namelang       FC_NAMELANG            String  Language name to be used for the
                                                  default value of familylang,
                                                  stylelang and fullnamelang
    prgname        FC_PRGNAME             String  Name of the running program
    hash           FC_HASH                String  SHA256 hash value of the font data
                                                  with "sha256:" prefix (deprecated)
    postscriptname FC_POSTSCRIPT_NAME     String  Font name in PostScript
    </programlisting>
  </sect2>
</sect1>
<sect1><title>Datatypes</title>
  <para>
Fontconfig uses abstract data types to hide internal implementation details
for most data structures.  A few structures are exposed where appropriate.
  </para>
  <sect2><title>FcChar8, FcChar16, FcChar32, FcBool</title>
    <para>
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.
    </para>
  </sect2>
  <sect2><title>FcMatrix</title>
    <para>
An FcMatrix holds an affine transformation, usually used to reshape glyphs.
A small set of matrix operations are provided to manipulate these.
    <programlisting>
        typedef struct _FcMatrix {
                double xx, xy, yx, yy;
        } FcMatrix;
    </programlisting>
    </para>
  </sect2>
  <sect2><title>FcCharSet</title>
    <para>
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.
    </para>
  </sect2>
  <sect2><title>FcLangSet</title>
    <para>
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.
    </para>
  </sect2>
  <sect2><title>FcLangResult</title>
    <para>
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.
    </para>
  </sect2>
  <sect2><title>FcType</title>
    <para>
Tags the kind of data stored in an FcValue.
    </para>
  </sect2>
  <sect2><title>FcValue</title>
    <para>
An FcValue object holds a single value with one of a number of different
types.  The 'type' tag indicates which member is valid.
    <programlisting>
        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;
                } u;
        } FcValue;
    </programlisting>
    <programlisting>
                  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 *
    </programlisting>
    </para>
  </sect2>
  <sect2><title>FcPattern</title>
    <para>
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.
    </para>
  </sect2>
  <sect2><title>FcFontSet</title>
    <para>
    <programlisting>
        typedef struct _FcFontSet {
                int nfont;
                int sfont;
                FcPattern **fonts;
        } FcFontSet;
    </programlisting>
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.
    </para>
  </sect2>
  <sect2><title>FcStrSet, FcStrList</title>
    <para>
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.
    </para>
  </sect2>
  <sect2><title>FcObjectSet</title>
    <para>
      <programlisting>
        typedef struct _FcObjectSet {
                int nobject;
                int sobject;
                const char **objects;
        } FcObjectSet;
      </programlisting>
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.
    </para>
  </sect2>
  <sect2><title>FcObjectType</title>
    <para>
      <programlisting>
        typedef struct _FcObjectType {
                const char *object;
                FcType type;
        } FcObjectType;
      </programlisting>
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.
    </para>
  </sect2>
  <sect2><title>FcConstant</title>
    <para>
      <programlisting>
        typedef struct _FcConstant {
            const FcChar8 *name;
            const char *object;
            int value;
        } FcConstant;
      </programlisting>
Provides for symbolic constants for new pattern elements.  When 'name' is
seen in a font name, an 'object' element is created with value 'value'.
    </para>
  </sect2>
  <sect2><title>FcBlanks</title>
    <para>
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.
    </para>
    <para>
        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.
    </para>
  </sect2>
  <sect2><title>FcFileCache</title>
    <para>
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.
    </para>
  </sect2>
  <sect2><title>FcConfig</title>
    <para>
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.
    </para>
  </sect2>
  <sect2><title>FcSetName</title>
    <para>
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.
    </para>
  </sect2>
  <sect2><title>FcResult</title>
    <para>
Used as a return type for functions manipulating FcPattern objects.
    <programlisting>
      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
    </programlisting>
    </para>
  </sect2>
  <sect2><title>FcAtomic</title>
    <para>
Used for locking access to configuration files.  Provides a safe way to update
configuration files.
    </para>
  </sect2>
  <sect2><title>FcCache</title>
    <para>
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.
    </para>
  </sect2>
</sect1>
<sect1><title>FUNCTIONS</title>
  <para>
These are grouped by functionality, often using the main data type being
manipulated.
  </para>
  <sect2><title>Initialization</title>
    <para>
These functions provide some control over how the library is initialized.
    </para>
    &fcinit;
  </sect2>
  <sect2><title>FcPattern</title>
    <para>
An FcPattern is an opaque type that holds both patterns to match against the
available fonts, as well as the information about each font.
    </para>
    &fcpattern;
    &fcformat;
  </sect2>
  <sect2><title>FcFontSet</title>
    <para>
An FcFontSet simply holds a list of patterns; these are used to return the
results of listing available fonts.
    </para>
    &fcfontset;
  </sect2>
  <sect2><title>FcObjectSet</title>
    <para>
An FcObjectSet holds a list of pattern property names; it is used to
indicate which properties are to be returned in the patterns from
FcFontList.
    </para>
    &fcobjectset;
  </sect2>
  <sect2><title>FreeType specific functions</title>
    <para>
While the fontconfig library doesn't insist that FreeType be used as the
rasterization mechanism for fonts, it does provide some convenience
functions.
    </para>
    &fcfreetype;
  </sect2>
  <sect2><title>FcValue</title>
    <para>
FcValue is a structure containing a type tag and a union of all possible
datatypes.  The tag is an enum of type 
<emphasis>FcType</emphasis>
and is intended to provide a measure of run-time
typechecking, although that depends on careful programming.
    </para>
    &fcvalue;
  </sect2>
  <sect2><title>FcCharSet</title>
    <para>
An FcCharSet is a boolean array indicating a set of Unicode chars.  Those
associated with a font are marked constant and cannot be edited.
FcCharSets may be reference counted internally to reduce memory consumption;
this may be visible to applications as the result of FcCharSetCopy may
return it's argument, and that CharSet may remain unmodifiable.
    </para>
    &fccharset;
  </sect2>
  <sect2><title>FcLangSet</title>
    <para>
An FcLangSet is a set of language names (each of which include language and
an optional territory). They are used when selecting fonts to indicate which
languages the fonts need to support. Each font is marked, using language
orthography information built into fontconfig, with the set of supported
languages.
    </para>
    &fclangset;
  </sect2>
  <sect2><title>FcMatrix</title>
    <para>
FcMatrix structures hold an affine transformation in matrix form.
    </para>
    &fcmatrix;
  </sect2>
  <sect2><title>FcRange</title>
    <para>
An FcRange holds two variables to indicate a range in between.
    </para>
    &fcrange;
  </sect2>
  <sect2><title>FcConfig</title>
    <para>
An FcConfig object holds the internal representation of a configuration.
There is a default configuration which applications may use by passing 0 to
any function using the data within an FcConfig.
    </para>
    &fcconfig;
  </sect2>
  <sect2><title>FcObjectType</title>
    <para>
Provides for application-specified font name object types so that new
pattern elements can be generated from font names.
    </para>
    &fcobjecttype;
  </sect2>
  <sect2><title>FcConstant</title>
    <para>
Provides for application-specified symbolic constants for font names.
    </para>
    &fcconstant;
  </sect2>
  <sect2><title>FcWeight</title>
    <para>
Maps weights to and from OpenType weights.
    </para>
  &fcweight;
  </sect2>
  <sect2><title>FcBlanks</title>
    <para>
An FcBlanks object holds a list of Unicode chars which are expected to
be blank when drawn.  When scanning new fonts, any glyphs which are
empty and not in this list will be assumed to be broken and not placed in
the FcCharSet associated with the font.  This provides a significantly more
accurate CharSet for applications.
    </para>
    <para>
        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.
    </para>
    &fcblanks;
  </sect2>
  <sect2><title>FcAtomic</title>
    <para>
These functions provide a safe way to update configuration files, allowing ongoing
reading of the old configuration file while locked for writing and ensuring that a
consistent and complete version of the configuration file is always available.
    </para>
    &fcatomic;
  </sect2>
  <sect2><title>File and Directory routines</title>
    <para>
These routines work with font files and directories, including font
directory cache files.
    </para>
    &fcfile;
    &fcdircache;
  </sect2>
  <sect2><title>FcCache routines</title>
    <para>
These routines work with font directory caches, accessing their contents in
limited ways. It is not expected that normal applications will need to use
these functions.
    </para>
    &fccache;
  </sect2>
  <sect2><title>FcStrSet and FcStrList</title>
    <para>
A data structure for enumerating strings, used to list directories while
scanning the configuration as directories are added while scanning.
    </para>
    &fcstrset;
  </sect2>
  <sect2><title>String utilities</title>
    <para>
Fontconfig manipulates many UTF-8 strings represented with the FcChar8 type.
These functions are exposed to help applications deal with these UTF-8
strings in a locale-insensitive manner.
    </para>
    &fcstring;
  </sect2>
</sect1>
</article>
