]> git.wh0rd.org - fontconfig.git/blame_incremental - doc/fontconfig-devel.sgml
Documentation fixes
[fontconfig.git] / doc / fontconfig-devel.sgml
... / ...
CommitLineData
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 the author(s) not be used in
34 advertising or publicity pertaining to distribution of the software without
35 specific, written prior permission. The authors make 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 the author(s) not be used in
69advertising or publicity pertaining to distribution of the software without
70specific, written prior permission. The authors make 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 amends 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 application's rendering mechanism.
130 </para>
131 <programlisting>
132 Property Definitions
133
134 Property C Preprocessor Symbol Type Description
135 ----------------------------------------------------
136 family FC_FAMILY String Font family names
137 familylang FC_FAMILYLANG String Language corresponding to
138 each family name
139 style FC_STYLE String Font style. Overrides weight
140 and slant
141 stylelang FC_STYLELANG String Language corresponding 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 corresponding 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 data types 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 data types; the FcChar* types hold precisely the number
204of bits stated (if supported by the C implementation). FcBool holds
205one of two C preprocessor 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 particular 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 configuration 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 data type 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
453indicate 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 application-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 configuration files, allowing ongoing
536reading of the old configuration file while locked for writing and ensuring that a
537consistent and complete version of the configuration 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>