fontconfig-devel.sgml revision a6844aab
1<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
2<!ENTITY fcatomic SYSTEM "fcatomic.sgml">
3<!ENTITY fcblanks SYSTEM "fcblanks.sgml">
4<!ENTITY fccache SYSTEM "fccache.sgml">
5<!ENTITY fccharset SYSTEM "fccharset.sgml">
6<!ENTITY fcconfig SYSTEM "fcconfig.sgml">
7<!ENTITY fcconstant SYSTEM "fcconstant.sgml">
8<!ENTITY fcdircache SYSTEM "fcdircache.sgml">
9<!ENTITY fcfile SYSTEM "fcfile.sgml">
10<!ENTITY fcfontset SYSTEM "fcfontset.sgml">
11<!ENTITY fcformat SYSTEM "fcformat.sgml">
12<!ENTITY fcfreetype SYSTEM "fcfreetype.sgml">
13<!ENTITY fcinit SYSTEM "fcinit.sgml">
14<!ENTITY fclangset SYSTEM "fclangset.sgml">
15<!ENTITY fcmatrix SYSTEM "fcmatrix.sgml">
16<!ENTITY fcobjectset SYSTEM "fcobjectset.sgml">
17<!ENTITY fcobjecttype SYSTEM "fcobjecttype.sgml">
18<!ENTITY fcpattern SYSTEM "fcpattern.sgml">
19<!ENTITY fcstring SYSTEM "fcstring.sgml">
20<!ENTITY fcstrset SYSTEM "fcstrset.sgml">
21<!ENTITY fcvalue SYSTEM "fcvalue.sgml">
22<!ENTITY version SYSTEM "version.sgml">
23]>
24<!--
25    fontconfig/doc/local-fontconfig-devel.sgml
26   
27    Copyright © 2003 Keith Packard
28   
29    Permission to use, copy, modify, distribute, and sell this software and its
30    documentation for any purpose is hereby granted without fee, provided that
31    the above copyright notice appear in all copies and that both that
32    copyright notice and this permission notice appear in supporting
33    documentation, and that the name of Keith Packard not be used in
34    advertising or publicity pertaining to distribution of the software without
35    specific, written prior permission.  Keith Packard makes no
36    representations about the suitability of this software for any purpose.  It
37    is provided "as is" without express or implied warranty.
38   
39    THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
40    INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
41    EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
42    CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
43    DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
44    TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
45    PERFORMANCE OF THIS SOFTWARE.
46-->
47<article>
48	<title>Fontconfig Developers Reference, Version &version; </title>
49	<artheader>
50		<author>
51			<firstname>Keith</firstname>
52			<surname>Packard</surname>
53			<affiliation><orgname>
54				HP Cambridge Research Lab
55			</orgname></affiliation>
56		</author>
57		<authorinitials>KRP</authorinitials>
58		<productname>Fontconfig</productname>
59		<productnumber>&version;</productnumber>
60		<LegalNotice>
61			<simpara>		
62Copyright © 2002 Keith Packard
63			</simpara><simpara>
64Permission to use, copy, modify, distribute, and sell this software and its
65documentation for any purpose is hereby granted without fee, provided that
66the above copyright notice appear in all copies and that both that
67copyright notice and this permission notice appear in supporting
68documentation, and that the name of Keith Packard not be used in
69advertising or publicity pertaining to distribution of the software without
70specific, written prior permission.  Keith Packard makes no
71representations about the suitability of this software for any purpose.  It
72is provided "as is" without express or implied warranty.
73			</simpara><simpara>
74THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
75INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
76EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
77CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
78DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
79TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
80PERFORMANCE OF THIS SOFTWARE.
81			</simpara>
82		</LegalNotice>
83	</artheader>
84<sect1><title>DESCRIPTION</title>
85  <para>
86Fontconfig is a library designed to provide system-wide font configuration,
87customization and application access.
88  </para>
89</sect1>
90<sect1><title>FUNCTIONAL OVERVIEW</title>
91  <para>
92Fontconfig contains two essential modules, the configuration module which
93builds an internal configuration from XML files and the matching module
94which accepts font patterns and returns the nearest matching font.
95  </para>
96  <sect2><title>FONT CONFIGURATION</title>
97    <para>
98The configuration module consists of the FcConfig datatype, libexpat and
99FcConfigParse which walks over an XML tree and ammends a configuration with
100data found within.  From an external perspective, configuration of the
101library consists of generating a valid XML tree and feeding that to
102FcConfigParse.  The only other mechanism provided to applications for
103changing the running configuration is to add fonts and directories to the
104list of application-provided font files.  
105    </para><para>
106The intent is to make font configurations relatively static, and shared by
107as many applications as possible.  It is hoped that this will lead to more
108stable font selection when passing names from one application to another.
109XML was chosen as a configuration file format because it provides a format
110which is easy for external agents to edit while retaining the correct
111structure and syntax.
112    </para><para>
113Font configuration is separate from font matching; applications needing to
114do their own matching can access the available fonts from the library and
115perform private matching.  The intent is to permit applications to pick and
116choose appropriate functionality from the library instead of forcing them to
117choose between this library and a private configuration mechanism.  The hope
118is that this will ensure that configuration of fonts for all applications
119can be centralized in one place.  Centralizing font configuration will
120simplify and regularize font installation and customization.
121    </para>
122  </sect2>
123  <sect2>
124    <title>FONT PROPERTIES</title>
125    <para>
126While font patterns may contain essentially any properties, there are some
127well known properties with associated types.  Fontconfig uses some of these
128properties for font matching and font completion.  Others are provided as a
129convenience for the applications rendering mechanism.
130    </para>
131    <programlisting>
132                 Property Definitions
133
134    Property       CPP Symbol           Type    Description
135    ----------------------------------------------------
136    family         FC_FAMILY            String  Font family names
137    familylang     FC_FAMILYLANG        String  Language cooresponding to
138                                                each family name
139    style          FC_STYLE             String  Font style. Overrides weight
140                                                and slant
141    stylelang      FC_STYLELANG         String  Language cooresponding to
142                                                each style name
143    fullname       FC_FULLNAME          String  Font face full name where
144                                                different from family and
145                                                family + style
146    fullnamelang   FC_FULLNAMELANG      String  Language cooresponding to
147                                                each fullname
148    slant          FC_SLANT             Int     Italic, oblique or roman
149    weight         FC_WEIGHT            Int     Light, medium, demibold,
150                                                bold or black
151    size           FC_SIZE              Double  Point size
152    width          FC_WIDTH             Int     Condensed, normal or expanded
153    aspect         FC_ASPECT            Double  Stretches glyphs horizontally
154                                                before hinting
155    pixelsize      FC_PIXEL_SIZE        Double  Pixel size
156    spacing        FC_SPACING           Int     Proportional, dual-width,
157                                                monospace or charcell
158    foundry        FC_FOUNDRY           String  Font foundry name
159    antialias      FC_ANTIALIAS         Bool    Whether glyphs can be
160                                                antialiased
161    hinting        FC_HINTING           Bool    Whether the rasterizer should
162                                                use hinting
163    hintstyle      FC_HINT_STYLE        Int     Automatic hinting style
164    verticallayout FC_VERTICAL_LAYOUT   Bool    Use vertical layout
165    autohint       FC_AUTOHINT          Bool    Use autohinter instead of
166                                                normal hinter
167    globaladvance  FC_GLOBAL_ADVANCE    Bool    Use font global advance data
168    file           FC_FILE              String  The filename holding the font
169    index          FC_INDEX             Int     The index of the font within
170                                                the file
171    ftface         FC_FT_FACE           FT_Face Use the specified FreeType
172                                                face object
173    rasterizer     FC_RASTERIZER        String  Which rasterizer is in use
174    outline        FC_OUTLINE           Bool    Whether the glyphs are outlines
175    scalable       FC_SCALABLE          Bool    Whether glyphs can be scaled
176    scale          FC_SCALE             Double  Scale factor for point->pixel
177                                                conversions
178    dpi            FC_DPI               Double  Target dots per inch
179    rgba           FC_RGBA              Int     unknown, rgb, bgr, vrgb,
180                                                vbgr, none - subpixel geometry
181    lcdfilter      FC_LCD_FILTER        Int     Type of LCD filter
182    minspace       FC_MINSPACE          Bool    Eliminate leading from line
183                                                spacing
184    charset        FC_CHARSET           CharSet Unicode chars encoded by
185                                                the font
186    lang           FC_LANG              LangSet Set of RFC-3066-style
187                                                languages this font supports
188    fontversion    FC_FONTVERSION       Int     Version number of the font
189    capability     FC_CAPABILITY        String  List of layout capabilities in
190                                                the font
191    embolden       FC_EMBOLDEN          Bool    Rasterizer should
192                                                synthetically embolden the font
193    </programlisting>
194  </sect2>
195</sect1>
196<sect1><title>Datatypes</title>
197  <para>
198Fontconfig uses abstract datatypes to hide internal implementation details
199for most data structures.  A few structures are exposed where appropriate.
200  </para>
201  <sect2><title>FcChar8, FcChar16, FcChar32, FcBool</title>
202    <para>
203These are primitive datatypes; the FcChar* types hold precisely the number
204of bits stated (if supported by the C implementation).  FcBool holds
205one of two CPP symbols: FcFalse or FcTrue.
206    </para>
207  </sect2>
208  <sect2><title>FcMatrix</title>
209    <para>
210An FcMatrix holds an affine transformation, usually used to reshape glyphs.
211A small set of matrix operations are provided to manipulate these.
212    <programlisting>
213        typedef struct _FcMatrix {
214                double xx, xy, yx, yy;
215        } FcMatrix;
216    </programlisting>
217    </para>
218  </sect2>
219  <sect2><title>FcCharSet</title>
220    <para>
221An FcCharSet is an abstract type that holds the set of encoded unicode chars
222in a font.  Operations to build and compare these sets are provided.
223    </para>
224  </sect2>
225  <sect2><title>FcLangSet</title>
226    <para>
227An FcLangSet is an abstract type that holds the set of languages supported
228by a font.  Operations to build and compare these sets are provided. These
229are computed for a font based on orthographic information built into the
230fontconfig library. Fontconfig has orthographies for all of the ISO 639-1
231languages except for MS, NA, PA, PS, QU, RN, RW, SD, SG, SN, SU and ZA. If
232you have orthographic information for any of these languages, please submit
233them.
234    </para>
235  </sect2>
236  <sect2><title>FcLangResult</title>
237    <para>
238An FcLangResult is an enumeration used to return the results of comparing
239two language strings or FcLangSet objects. FcLangEqual means the
240objects match language and territory. FcLangDifferentTerritory means
241the objects match in language but differ in territory.
242FcLangDifferentLang means the objects differ in language.
243    </para>
244  </sect2>
245  <sect2><title>FcType</title>
246    <para>
247Tags the kind of data stored in an FcValue.
248    </para>
249  </sect2>
250  <sect2><title>FcValue</title>
251    <para>
252An FcValue object holds a single value with one of a number of different
253types.  The 'type' tag indicates which member is valid.
254    <programlisting>
255        typedef struct _FcValue {
256                FcType type;
257                union {
258                        const FcChar8 *s;
259                        int i;
260                        FcBool b;
261                        double d;
262                        const FcMatrix *m;
263                        const FcCharSet *c;
264			void *f;
265			const FcLangSet *l;
266                } u;
267        } FcValue;
268    </programlisting>
269    <programlisting>
270                  FcValue Members
271
272        Type            Union member    Datatype
273        --------------------------------
274        FcTypeVoid      (none)          (none)
275        FcTypeInteger   i               int
276        FcTypeDouble    d               double
277        FcTypeString    s               FcChar8 *
278        FcTypeBool      b               b
279        FcTypeMatrix    m               FcMatrix *
280        FcTypeCharSet   c               FcCharSet *
281	FcTypeFTFace	f		void * (FT_Face)
282	FcTypeLangSet	l		FcLangSet *
283    </programlisting>
284    </para>
285  </sect2>
286  <sect2><title>FcPattern</title>
287    <para>
288holds a set of names with associated value lists; each name refers to a
289property of a font.  FcPatterns are used as inputs to the matching code as
290well as holding information about specific fonts.  Each property can hold
291one or more values; conventionally all of the same type, although the
292interface doesn't demand that.
293    </para>
294  </sect2>
295  <sect2><title>FcFontSet</title>
296    <para>
297    <programlisting>
298        typedef struct _FcFontSet {
299                int nfont;
300                int sfont;
301                FcPattern **fonts;
302        } FcFontSet;
303    </programlisting>
304An FcFontSet contains a list of FcPatterns.  Internally fontconfig uses this
305data structure to hold sets of fonts.  Externally, fontconfig returns the
306results of listing fonts in this format.  'nfont' holds the number of
307patterns in the 'fonts' array; 'sfont' is used to indicate the size of that
308array.
309    </para>
310  </sect2>
311  <sect2><title>FcStrSet, FcStrList</title>
312    <para>
313FcStrSet holds a list of strings that can be appended to and enumerated.
314Its unique characteristic is that the enumeration works even while strings
315are appended during enumeration.  FcStrList is used during enumeration to
316safely and correctly walk the list of strings even while that list is edited
317in the middle of enumeration.
318    </para>
319  </sect2>
320  <sect2><title>FcObjectSet</title>
321    <para>
322      <programlisting>
323        typedef struct _FcObjectSet {
324                int nobject;
325                int sobject;
326                const char **objects;
327        } FcObjectSet;
328      </programlisting>
329holds a set of names and is used to specify which fields from fonts are
330placed in the the list of returned patterns when listing fonts.
331    </para>
332  </sect2>
333  <sect2><title>FcObjectType</title>
334    <para>
335      <programlisting>
336        typedef struct _FcObjectType {
337                const char *object;
338                FcType type;
339        } FcObjectType;
340      </programlisting>
341marks the type of a pattern element generated when parsing font names.
342Applications can add new object types so that font names may contain the new
343elements.
344    </para>
345  </sect2>
346  <sect2><title>FcConstant</title>
347    <para>
348      <programlisting>
349        typedef struct _FcConstant {
350            const FcChar8 *name;
351            const char *object;
352            int value;
353        } FcConstant;
354      </programlisting>
355Provides for symbolic constants for new pattern elements.  When 'name' is
356seen in a font name, an 'object' element is created with value 'value'.
357    </para>
358  </sect2>
359  <sect2><title>FcBlanks</title>
360    <para>
361holds a list of Unicode chars which are expected to be blank; unexpectedly
362blank chars are assumed to be invalid and are elided from the charset
363associated with the font.
364    </para>
365  </sect2>
366  <sect2><title>FcFileCache</title>
367    <para>
368holds the per-user cache information for use while loading the font
369database. This is built automatically for the current configuration when
370that is loaded.  Applications must always pass '0' when one is requested.
371    </para>
372  </sect2>
373  <sect2><title>FcConfig</title>
374    <para>
375holds a complete configuration of the library; there is one default
376configuration, other can be constructed from XML data structures.  All
377public entry points that need global data can take an optional FcConfig*
378argument; passing 0 uses the default configuration.  FcConfig objects hold two
379sets of fonts, the first contains those specified by the configuration, the
380second set holds those added by the application at run-time.  Interfaces
381that need to reference a particulat set use one of the FcSetName enumerated
382values.
383    </para>
384  </sect2>
385  <sect2><title>FcSetName</title>
386    <para>
387Specifies one of the two sets of fonts available in a configuration;
388FcSetSystem for those fonts specified in the configuration and
389FcSetApplication which holds fonts provided by the application.
390    </para>
391  </sect2>
392  <sect2><title>FcResult</title>
393    <para>
394Used as a return type for functions manipulating FcPattern objects.
395    <programlisting>
396      FcResult Values
397        Result Code             Meaning
398        -----------------------------------------------------------
399        FcResultMatch           Object exists with the specified ID
400        FcResultNoMatch         Object doesn't exist at all
401        FcResultTypeMismatch    Object exists, but the type doesn't match
402        FcResultNoId            Object exists, but has fewer values
403                                than specified
404        FcResultOutOfMemory     Malloc failed
405    </programlisting>
406    </para>
407  </sect2>
408  <sect2><title>FcAtomic</title>
409    <para>
410Used for locking access to config files.  Provides a safe way to update
411configuration files.
412    </para>
413  </sect2>
414  <sect2><title>FcCache</title>
415    <para>
416Holds information about the fonts contained in a single directory. Normal
417applications need not worry about this as caches for font access are
418automatically managed by the library. Applications dealing with cache
419management may want to use some of these objects in their work, however the
420included 'fc-cache' program generally suffices for all of that.
421    </para>
422  </sect2>
423</sect1>
424<sect1><title>FUNCTIONS</title>
425  <para>
426These are grouped by functionality, often using the main datatype being
427manipulated.
428  </para>
429  <sect2><title>Initialization</title>
430    <para>
431These functions provide some control over how the library is initialized.
432    </para>
433    &fcinit;
434  </sect2>
435  <sect2><title>FcPattern</title>
436    <para>
437An FcPattern is an opaque type that holds both patterns to match against the
438available fonts, as well as the information about each font.
439    </para>
440    &fcpattern;
441    &fcformat;
442  </sect2>
443  <sect2><title>FcFontSet</title>
444    <para>
445An FcFontSet simply holds a list of patterns; these are used to return the
446results of listing available fonts.
447    </para>
448    &fcfontset;
449  </sect2>
450  <sect2><title>FcObjectSet</title>
451    <para>
452An FcObjectSet holds a list of pattern property names; it is used to
453indiciate which properties are to be returned in the patterns from
454FcFontList.
455    </para>
456    &fcobjectset;
457  </sect2>
458  <sect2><title>FreeType specific functions</title>
459    <para>
460While the fontconfig library doesn't insist that FreeType be used as the
461rasterization mechanism for fonts, it does provide some convenience
462functions.
463    </para>
464    &fcfreetype;
465  </sect2>
466  <sect2><title>FcValue</title>
467    <para>
468FcValue is a structure containing a type tag and a union of all possible
469datatypes.  The tag is an enum of type 
470<emphasis>FcType</emphasis>
471and is intended to provide a measure of run-time
472typechecking, although that depends on careful programming.
473    </para>
474    &fcvalue;
475  </sect2>
476  <sect2><title>FcCharSet</title>
477    <para>
478An FcCharSet is a boolean array indicating a set of unicode chars.  Those
479associated with a font are marked constant and cannot be edited.
480FcCharSets may be reference counted internally to reduce memory consumption;
481this may be visible to applications as the result of FcCharSetCopy may
482return it's argument, and that CharSet may remain unmodifiable.
483    </para>
484    &fccharset;
485  </sect2>
486  <sect2><title>FcLangSet</title>
487    <para>
488An FcLangSet is a set of language names (each of which include language and
489an optional territory). They are used when selecting fonts to indicate which
490languages the fonts need to support. Each font is marked, using language
491orthography information built into fontconfig, with the set of supported
492languages.
493    </para>
494    &fclangset;
495  </sect2>
496  <sect2><title>FcMatrix</title>
497    <para>
498FcMatrix structures hold an affine transformation in matrix form.
499    </para>
500    &fcmatrix;
501  </sect2>
502  <sect2><title>FcConfig</title>
503    <para>
504An FcConfig object holds the internal representation of a configuration.
505There is a default configuration which applications may use by passing 0 to
506any function using the data within an FcConfig.
507    </para>
508    &fcconfig;
509  </sect2>
510  <sect2><title>FcObjectType</title>
511    <para>
512Provides for applcation-specified font name object types so that new
513pattern elements can be generated from font names.
514    </para>
515    &fcobjecttype;
516  </sect2>
517  <sect2><title>FcConstant</title>
518    <para>
519Provides for application-specified symbolic constants for font names.
520    </para>
521    &fcconstant;
522  </sect2>
523  <sect2><title>FcBlanks</title>
524    <para>
525An FcBlanks object holds a list of Unicode chars which are expected to
526be blank when drawn.  When scanning new fonts, any glyphs which are
527empty and not in this list will be assumed to be broken and not placed in
528the FcCharSet associated with the font.  This provides a significantly more
529accurate CharSet for applications.
530    </para>
531    &fcblanks;
532  </sect2>
533  <sect2><title>FcAtomic</title>
534    <para>
535These functions provide a safe way to update config files, allowing ongoing
536reading of the old config file while locked for writing and ensuring that a
537consistent and complete version of the config file is always available.
538    </para>
539    &fcatomic;
540  </sect2>
541  <sect2><title>File and Directory routines</title>
542    <para>
543These routines work with font files and directories, including font
544directory cache files.
545    </para>
546    &fcfile;
547    &fcdircache;
548  </sect2>
549  <sect2><title>FcCache routines</title>
550    <para>
551These routines work with font directory caches, accessing their contents in
552limited ways. It is not expected that normal applications will need to use
553these functions.
554    </para>
555    &fccache;
556  </sect2>
557  <sect2><title>FcStrSet and FcStrList</title>
558    <para>
559A data structure for enumerating strings, used to list directories while
560scanning the configuration as directories are added while scanning.
561    </para>
562    &fcstrset;
563  </sect2>
564  <sect2><title>String utilities</title>
565    <para>
566Fontconfig manipulates many UTF-8 strings represented with the FcChar8 type.
567These functions are exposed to help applications deal with these UTF-8
568strings in a locale-insensitive manner.
569    </para>
570    &fcstring;
571  </sect2>
572</sect1>
573</article>
574