fontconfig-user.sgml revision 6fc018e4
1<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [ 2<!ENTITY version SYSTEM "version.sgml"> 3<!ENTITY confdir SYSTEM "confdir.sgml"> 4]> 5<!-- 6 Copyright © 2003 Keith Packard 7 8 Permission to use, copy, modify, distribute, and sell this software and its 9 documentation for any purpose is hereby granted without fee, provided that 10 the above copyright notice appear in all copies and that both that 11 copyright notice and this permission notice appear in supporting 12 documentation, and that the name of the author(s) not be used in 13 advertising or publicity pertaining to distribution of the software without 14 specific, written prior permission. The authors make no 15 representations about the suitability of this software for any purpose. It 16 is provided "as is" without express or implied warranty. 17 18 THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 19 INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 20 EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR 21 CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 22 DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 23 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 24 PERFORMANCE OF THIS SOFTWARE. 25--> 26<refentry> 27<refmeta> 28 <refentrytitle>fonts-conf</refentrytitle> 29 <manvolnum>5</manvolnum> 30</refmeta> 31<refnamediv> 32 <refname>fonts.conf</refname> 33 <refpurpose>Font configuration files</refpurpose> 34</refnamediv> 35<refsynopsisdiv> 36<synopsis> 37 &confdir;/fonts.conf 38 &confdir;/fonts.dtd 39 &confdir;/conf.d 40 $XDG_CONFIG_HOME/fontconfig/conf.d 41 $XDG_CONFIG_HOME/fontconfig/fonts.conf 42 ~/.fonts.conf.d 43 ~/.fonts.conf 44</synopsis> 45</refsynopsisdiv> 46<refsect1><title>Description</title> 47 <para> 48Fontconfig is a library designed to provide system-wide font configuration, 49customization and application access. 50 </para> 51</refsect1> 52<refsect1><title>Functional Overview</title> 53 <para> 54Fontconfig contains two essential modules, the configuration module which 55builds an internal configuration from XML files and the matching module 56which accepts font patterns and returns the nearest matching font. 57 </para> 58 <refsect2><title>Font Configuration</title> 59 <para> 60The configuration module consists of the FcConfig datatype, libexpat and 61FcConfigParse which walks over an XML tree and amends a configuration with 62data found within. From an external perspective, configuration of the 63library consists of generating a valid XML tree and feeding that to 64FcConfigParse. The only other mechanism provided to applications for 65changing the running configuration is to add fonts and directories to the 66list of application-provided font files. 67 </para><para> 68The intent is to make font configurations relatively static, and shared by 69as many applications as possible. It is hoped that this will lead to more 70stable font selection when passing names from one application to another. 71XML was chosen as a configuration file format because it provides a format 72which is easy for external agents to edit while retaining the correct 73structure and syntax. 74 </para><para> 75Font configuration is separate from font matching; applications needing to 76do their own matching can access the available fonts from the library and 77perform private matching. The intent is to permit applications to pick and 78choose appropriate functionality from the library instead of forcing them to 79choose between this library and a private configuration mechanism. The hope 80is that this will ensure that configuration of fonts for all applications 81can be centralized in one place. Centralizing font configuration will 82simplify and regularize font installation and customization. 83 </para> 84 </refsect2> 85 <refsect2> 86 <title>Font Properties</title> 87 <para> 88While font patterns may contain essentially any properties, there are some 89well known properties with associated types. Fontconfig uses some of these 90properties for font matching and font completion. Others are provided as a 91convenience for the applications' rendering mechanism. 92 </para> 93 <programlisting> 94 Property Type Description 95 -------------------------------------------------------------- 96 family String Font family names 97 familylang String Languages corresponding to each family 98 style String Font style. Overrides weight and slant 99 stylelang String Languages corresponding to each style 100 fullname String Font full names (often includes style) 101 fullnamelang String Languages corresponding to each fullname 102 slant Int Italic, oblique or roman 103 weight Int Light, medium, demibold, bold or black 104 size Double Point size 105 width Int Condensed, normal or expanded 106 aspect Double Stretches glyphs horizontally before hinting 107 pixelsize Double Pixel size 108 spacing Int Proportional, dual-width, monospace or charcell 109 foundry String Font foundry name 110 antialias Bool Whether glyphs can be antialiased 111 hinting Bool Whether the rasterizer should use hinting 112 hintstyle Int Automatic hinting style 113 verticallayout Bool Use vertical layout 114 autohint Bool Use autohinter instead of normal hinter 115 globaladvance Bool Use font global advance data (deprecated) 116 file String The filename holding the font 117 index Int The index of the font within the file 118 ftface FT_Face Use the specified FreeType face object 119 rasterizer String Which rasterizer is in use (deprecated) 120 outline Bool Whether the glyphs are outlines 121 scalable Bool Whether glyphs can be scaled 122 scale Double Scale factor for point->pixel conversions 123 dpi Double Target dots per inch 124 rgba Int unknown, rgb, bgr, vrgb, vbgr, 125 none - subpixel geometry 126 lcdfilter Int Type of LCD filter 127 minspace Bool Eliminate leading from line spacing 128 charset CharSet Unicode chars encoded by the font 129 lang String List of RFC-3066-style languages this 130 font supports 131 fontversion Int Version number of the font 132 capability String List of layout capabilities in the font 133 embolden Bool Rasterizer should synthetically embolden the font 134 fontfeatures String List of the feature tags in OpenType to be enabled 135 prgname String String Name of the running program 136 </programlisting> 137 </refsect2> 138 <refsect2> 139 <title>Font Matching</title> 140 <para> 141Fontconfig performs matching by measuring the distance from a provided 142pattern to all of the available fonts in the system. The closest matching 143font is selected. This ensures that a font will always be returned, but 144doesn't ensure that it is anything like the requested pattern. 145 </para><para> 146Font matching starts with an application constructed pattern. The desired 147attributes of the resulting font are collected together in a pattern. Each 148property of the pattern can contain one or more values; these are listed in 149priority order; matches earlier in the list are considered "closer" than 150matches later in the list. 151 </para><para> 152The initial pattern is modified by applying the list of editing instructions 153specific to patterns found in the configuration; each consists of a match 154predicate and a set of editing operations. They are executed in the order 155they appeared in the configuration. Each match causes the associated 156sequence of editing operations to be applied. 157 </para><para> 158After the pattern has been edited, a sequence of default substitutions are 159performed to canonicalize the set of available properties; this avoids the 160need for the lower layers to constantly provide default values for various 161font properties during rendering. 162 </para><para> 163The canonical font pattern is finally matched against all available fonts. 164The distance from the pattern to the font is measured for each of several 165properties: foundry, charset, family, lang, spacing, pixelsize, style, 166slant, weight, antialias, rasterizer and outline. This list is in priority 167order -- results of comparing earlier elements of this list weigh more 168heavily than later elements. 169 </para><para> 170There is one special case to this rule; family names are split into two 171bindings; strong and weak. Strong family names are given greater precedence 172in the match than lang elements while weak family names are given lower 173precedence than lang elements. This permits the document language to drive 174font selection when any document specified font is unavailable. 175 </para><para> 176The pattern representing that font is augmented to include any properties 177found in the pattern but not found in the font itself; this permits the 178application to pass rendering instructions or any other data through the 179matching system. Finally, the list of editing instructions specific to 180fonts found in the configuration are applied to the pattern. This modified 181pattern is returned to the application. 182 </para><para> 183The return value contains sufficient information to locate and rasterize the 184font, including the file name, pixel size and other rendering data. As 185none of the information involved pertains to the FreeType library, 186applications are free to use any rasterization engine or even to take 187the identified font file and access it directly. 188 </para><para> 189The match/edit sequences in the configuration are performed in two passes 190because there are essentially two different operations necessary -- the 191first is to modify how fonts are selected; aliasing families and adding 192suitable defaults. The second is to modify how the selected fonts are 193rasterized. Those must apply to the selected font, not the original pattern 194as false matches will often occur. 195 </para> 196 </refsect2> 197 <refsect2><title>Font Names</title> 198 <para> 199Fontconfig provides a textual representation for patterns that the library 200can both accept and generate. The representation is in three parts, first a 201list of family names, second a list of point sizes and finally a list of 202additional properties: 203 </para> 204 <programlisting> 205 <families>-<point sizes>:<name1>=<values1>:<name2>=<values2>... 206 </programlisting> 207 <para> 208Values in a list are separated with commas. The name needn't include either 209families or point sizes; they can be elided. In addition, there are 210symbolic constants that simultaneously indicate both a name and a value. 211Here are some examples: 212 </para> 213 <programlisting> 214 Name Meaning 215 ---------------------------------------------------------- 216 Times-12 12 point Times Roman 217 Times-12:bold 12 point Times Bold 218 Courier:italic Courier Italic in the default size 219 Monospace:matrix=1 .1 0 1 The users preferred monospace font 220 with artificial obliquing 221 </programlisting> 222 <para> 223The '\', '-', ':' and ',' characters in family names must be preceded by a 224'\' character to avoid having them misinterpreted. Similarly, values 225containing '\', '=', '_', ':' and ',' must also have them preceded by a 226'\' character. The '\' characters are stripped out of the family name and 227values as the font name is read. 228 </para> 229 </refsect2> 230</refsect1> 231<refsect1 id="debug"><title>Debugging Applications</title> 232 <para> 233To help diagnose font and applications problems, fontconfig is built with a 234large amount of internal debugging left enabled. It is controlled by means 235of the FC_DEBUG environment variable. The value of this variable is 236interpreted as a number, and each bit within that value controls different 237debugging messages. 238 </para> 239 <programlisting> 240 Name Value Meaning 241 --------------------------------------------------------- 242 MATCH 1 Brief information about font matching 243 MATCHV 2 Extensive font matching information 244 EDIT 4 Monitor match/test/edit execution 245 FONTSET 8 Track loading of font information at startup 246 CACHE 16 Watch cache files being written 247 CACHEV 32 Extensive cache file writing information 248 PARSE 64 (no longer in use) 249 SCAN 128 Watch font files being scanned to build caches 250 SCANV 256 Verbose font file scanning information 251 MEMORY 512 Monitor fontconfig memory usage 252 CONFIG 1024 Monitor which config files are loaded 253 LANGSET 2048 Dump char sets used to construct lang values 254 OBJTYPES 4096 Display message when value typechecks fail 255 </programlisting> 256 <para> 257Add the value of the desired debug levels together and assign that (in 258base 10) to the FC_DEBUG environment variable before running the 259application. Output from these statements is sent to stdout. 260 </para> 261</refsect1> 262<refsect1><title>Lang Tags</title> 263 <para> 264Each font in the database contains a list of languages it supports. This is 265computed by comparing the Unicode coverage of the font with the orthography 266of each language. Languages are tagged using an RFC-3066 compatible naming 267and occur in two parts -- the ISO 639 language tag followed a hyphen and then 268by the ISO 3166 country code. The hyphen and country code may be elided. 269 </para><para> 270Fontconfig has orthographies for several languages built into the library. 271No provision has been made for adding new ones aside from rebuilding the 272library. It currently supports 122 of the 139 languages named in ISO 639-1, 273141 of the languages with two-letter codes from ISO 639-2 and another 30 274languages with only three-letter codes. Languages with both two and three 275letter codes are provided with only the two letter code. 276 </para><para> 277For languages used in multiple territories with radically different 278character sets, fontconfig includes per-territory orthographies. This 279includes Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese. 280 </para> 281</refsect1> 282<refsect1><title>Configuration File Format</title> 283 <para> 284Configuration files for fontconfig are stored in XML format; this 285format makes external configuration tools easier to write and ensures that 286they will generate syntactically correct configuration files. As XML 287files are plain text, they can also be manipulated by the expert user using 288a text editor. 289 </para><para> 290The fontconfig document type definition resides in the external entity 291"fonts.dtd"; this is normally stored in the default font configuration 292directory (&confdir;). Each configuration file should contain the 293following structure: 294 <programlisting> 295 <?xml version="1.0"?> 296 <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> 297 <fontconfig> 298 ... 299 </fontconfig> 300 </programlisting> 301 </para> 302<refsect2><title><literal><fontconfig></literal></title><para> 303This is the top level element for a font configuration and can contain 304<literal><dir></literal>, <literal><cachedir></literal>, <literal><include></literal>, <literal><match></literal> and <literal><alias></literal> elements in any order. 305 </para></refsect2> 306 <refsect2><title><literal><dir prefix="default"></literal></title><para> 307This element contains a directory name which will be scanned for font files 308to include in the set of available fonts. If 'prefix' is set to "xdg", the value in the XDG_DATA_HOME environment variable will be added as the path prefix. please see XDG Base Directory Specification for more details. 309 </para></refsect2> 310 <refsect2><title><literal><cachedir prefix="default"></literal></title><para> 311This element contains a directory name that is supposed to be stored or read 312the cache of font information. If multiple elements are specified in 313the configuration file, the directory that can be accessed first in the list 314will be used to store the cache files. If it starts with '~', it refers to 315a directory in the users home directory. If 'prefix' is set to "xdg", the value in the XDG_CACHE_HOME environment variable will be added as the path prefix. please see XDG Base Directory Specification for more details. 316The default directory is ``$XDG_CACHE_HOME/fontconfig'' and it contains the cache files 317named ``<literal><hash value></literal>-<literal><architecture></literal>.cache-<literal><version</literal>'', 318where <literal><version></literal> is the font configureation file 319version number (currently 3). 320 </para></refsect2> 321 <refsect2><title><literal><include ignore_missing="no" prefix="default"></literal></title><para> 322This element contains the name of an additional configuration file or 323directory. If a directory, every file within that directory starting with an 324ASCII digit (U+0030 - U+0039) and ending with the string ``.conf'' will be processed in sorted order. When 325the XML datatype is traversed by FcConfigParse, the contents of the file(s) 326will also be incorporated into the configuration by passing the filename(s) to 327FcConfigLoadAndParse. If 'ignore_missing' is set to "yes" instead of the 328default "no", a missing file or directory will elicit no warning message from 329the library. If 'prefix' is set to "xdg", the value in the XDG_CONFIG_HOME environment variable will be added as the path prefix. please see XDG Base Directory Specification for more details. 330 </para></refsect2> 331 <refsect2><title><literal><config></literal></title><para> 332This element provides a place to consolidate additional configuration 333information. <literal><config></literal> can contain <literal><blank></literal> and <literal><rescan></literal> elements in any 334order. 335 </para></refsect2> 336 <refsect2><title><literal><blank></literal></title><para> 337Fonts often include "broken" glyphs which appear in the encoding but are 338drawn as blanks on the screen. Within the <literal><blank></literal> element, place each 339Unicode characters which is supposed to be blank in an <literal><int></literal> element. 340Characters outside of this set which are drawn as blank will be elided from 341the set of characters supported by the font. 342 </para></refsect2> 343 <refsect2><title><literal><rescan></literal></title><para> 344The <literal><rescan></literal> element holds an <literal><int></literal> element which indicates the default 345interval between automatic checks for font configuration changes. 346Fontconfig will validate all of the configuration files and directories and 347automatically rebuild the internal datastructures when this interval passes. 348 </para></refsect2> 349 <refsect2><title><literal><selectfont></literal></title><para> 350This element is used to black/white list fonts from being listed or matched 351against. It holds acceptfont and rejectfont elements. 352 </para></refsect2> 353 <refsect2><title><literal><acceptfont></literal></title><para> 354Fonts matched by an acceptfont element are "whitelisted"; such fonts are 355explicitly included in the set of fonts used to resolve list and match 356requests; including them in this list protects them from being "blacklisted" 357by a rejectfont element. Acceptfont elements include glob and pattern 358elements which are used to match fonts. 359 </para></refsect2> 360 <refsect2><title><literal><rejectfont></literal></title><para> 361Fonts matched by an rejectfont element are "blacklisted"; such fonts are 362excluded from the set of fonts used to resolve list and match requests as if 363they didn't exist in the system. Rejectfont elements include glob and 364pattern elements which are used to match fonts. 365 </para></refsect2> 366 <refsect2><title><literal><glob></literal></title><para> 367Glob elements hold shell-style filename matching patterns (including ? and 368*) which match fonts based on their complete pathnames. This can be used to 369exclude a set of directories (/usr/share/fonts/uglyfont*), or particular 370font file types (*.pcf.gz), but the latter mechanism relies rather heavily 371on filenaming conventions which can't be relied upon. Note that globs 372only apply to directories, not to individual fonts. 373 </para></refsect2> 374 <refsect2><title><literal><pattern></literal></title><para> 375Pattern elements perform list-style matching on incoming fonts; that is, 376they hold a list of elements and associated values. If all of those 377elements have a matching value, then the pattern matches the font. This can 378be used to select fonts based on attributes of the font (scalable, bold, 379etc), which is a more reliable mechanism than using file extensions. 380Pattern elements include patelt elements. 381 </para></refsect2> 382 <refsect2><title><literal><patelt name="property"></literal></title><para> 383Patelt elements hold a single pattern element and list of values. They must 384have a 'name' attribute which indicates the pattern element name. Patelt 385elements include int, double, string, matrix, bool, charset and const 386elements. 387 </para></refsect2> 388 <refsect2><title><literal><match target="pattern"></literal></title><para> 389This element holds first a (possibly empty) list of <literal><test></literal> elements and then 390a (possibly empty) list of <literal><edit></literal> elements. Patterns which match all of the 391tests are subjected to all the edits. If 'target' is set to "font" instead 392of the default "pattern", then this element applies to the font name 393resulting from a match rather than a font pattern to be matched. If 'target' 394is set to "scan", then this element applies when the font is scanned to 395build the fontconfig database. 396 </para></refsect2> 397 <refsect2><title><literal><test qual="any" name="property" target="default" compare="eq"></literal></title><para> 398This element contains a single value which is compared with the target 399('pattern', 'font', 'scan' or 'default') property "property" (substitute any of the property names seen 400above). 'compare' can be one of "eq", "not_eq", "less", "less_eq", "more", "more_eq", "contains" or 401"not_contains". 'qual' may either be the default, "any", in which case the match 402succeeds if any value associated with the property matches the test value, or 403"all", in which case all of the values associated with the property must 404match the test value. 'ignore-blanks' takes a boolean value. if 'ignore-blanks' is set "true", any blanks in the string will be ignored on its comparison. this takes effects only when compare="eq" or compare="not_eq". 405When used in a <match target="font"> element, 406the target= attribute in the <test> element selects between matching 407the original pattern or the font. "default" selects whichever target the 408outer <match> element has selected. 409 </para></refsect2> 410 <refsect2><title><literal><edit name="property" mode="assign" binding="weak"></literal></title><para> 411This element contains a list of expression elements (any of the value or 412operator elements). The expression elements are evaluated at run-time and 413modify the property "property". The modification depends on whether 414"property" was matched by one of the associated <literal><test></literal> elements, if so, the 415modification may affect the first matched value. Any values inserted into 416the property are given the indicated binding ("strong", "weak" or "same") 417with "same" binding using the value from the matched pattern element. 418'mode' is one of: 419 <programlisting> 420 Mode With Match Without Match 421 --------------------------------------------------------------------- 422 "assign" Replace matching value Replace all values 423 "assign_replace" Replace all values Replace all values 424 "prepend" Insert before matching Insert at head of list 425 "prepend_first" Insert at head of list Insert at head of list 426 "append" Append after matching Append at end of list 427 "append_last" Append at end of list Append at end of list 428 "delete" Delete matching value Delete all values 429 "delete_all" Delete all values Delete all values 430 </programlisting> 431 </para></refsect2> 432 <refsect2><title><literal><int></literal>, <literal><double></literal>, <literal><string></literal>, <literal><bool></literal></title><para> 433These elements hold a single value of the indicated type. <literal><bool></literal> 434elements hold either true or false. An important limitation exists in 435the parsing of floating point numbers -- fontconfig requires that 436the mantissa start with a digit, not a decimal point, so insert a leading 437zero for purely fractional values (e.g. use 0.5 instead of .5 and -0.5 438instead of -.5). 439 </para></refsect2> 440 <refsect2><title><literal><matrix></literal></title><para> 441This element holds four numerical expressions of an affine transformation. 442At their simplest these will be four <literal><double></literal> elements 443but they can also be more involved expressions. 444 </para></refsect2> 445 <refsect2><title><literal><range></literal></title><para> 446This element holds the two <literal><int></literal> elements of a range 447representation. 448 </para></refsect2> 449 <refsect2><title><literal><charset></literal></title><para> 450This element holds at least one <literal><int></literal> element of 451an Unicode code point or more. 452 </para></refsect2> 453 <refsect2><title><literal><langset></literal></title><para> 454This element holds at least one <literal><string></literal> element of 455a RFC-3066-style languages or more. 456 </para></refsect2> 457 <refsect2><title><literal><name></literal></title><para> 458Holds a property name. Evaluates to the first value from the property of 459the pattern. If the 'target' attribute is not present, it will default to 460'default', in which case the property is returned from the font pattern 461during a target="font" match, and to the pattern during a target="pattern" 462match. The attribute can also take the values 'font' or 'pattern' to 463explicitly choose which pattern to use. It is an error to use a target 464of 'font' in a match that has target="pattern". 465 </para></refsect2> 466 <refsect2><title><literal><const></literal></title><para> 467Holds the name of a constant; these are always integers and serve as 468symbolic names for common font values: 469 <programlisting> 470 Constant Property Value 471 ------------------------------------- 472 thin weight 0 473 extralight weight 40 474 ultralight weight 40 475 light weight 50 476 book weight 75 477 regular weight 80 478 normal weight 80 479 medium weight 100 480 demibold weight 180 481 semibold weight 180 482 bold weight 200 483 extrabold weight 205 484 black weight 210 485 heavy weight 210 486 roman slant 0 487 italic slant 100 488 oblique slant 110 489 ultracondensed width 50 490 extracondensed width 63 491 condensed width 75 492 semicondensed width 87 493 normal width 100 494 semiexpanded width 113 495 expanded width 125 496 extraexpanded width 150 497 ultraexpanded width 200 498 proportional spacing 0 499 dual spacing 90 500 mono spacing 100 501 charcell spacing 110 502 unknown rgba 0 503 rgb rgba 1 504 bgr rgba 2 505 vrgb rgba 3 506 vbgr rgba 4 507 none rgba 5 508 lcdnone lcdfilter 0 509 lcddefault lcdfilter 1 510 lcdlight lcdfilter 2 511 lcdlegacy lcdfilter 3 512 hintnone hintstyle 0 513 hintslight hintstyle 1 514 hintmedium hintstyle 2 515 hintfull hintstyle 3 516 </programlisting> 517 </para> 518 </refsect2> 519 <refsect2> 520 <title><literal><or></literal>, <literal><and></literal>, <literal><plus></literal>, <literal><minus></literal>, <literal><times></literal>, <literal><divide></literal></title> 521 <para> 522These elements perform the specified operation on a list of expression 523elements. <literal><or></literal> and <literal><and></literal> are boolean, not bitwise. 524 </para> 525 </refsect2> 526 <refsect2> 527 <title><literal><eq></literal>, <literal><not_eq></literal>, <literal><less></literal>, <literal><less_eq></literal>, <literal><more></literal>, <literal><more_eq></literal>, <literal><contains></literal>, <literal><not_contains</literal></title> 528 <para> 529These elements compare two values, producing a boolean result. 530 </para></refsect2> 531 <refsect2><title><literal><not></literal></title><para> 532Inverts the boolean sense of its one expression element 533 </para></refsect2> 534 <refsect2><title><literal><if></literal></title><para> 535This element takes three expression elements; if the value of the first is 536true, it produces the value of the second, otherwise it produces the value 537of the third. 538 </para></refsect2> 539 <refsect2><title><literal><alias></literal></title><para> 540Alias elements provide a shorthand notation for the set of common match 541operations needed to substitute one font family for another. They contain a 542<literal><family></literal> element followed by optional <literal><prefer></literal>, <literal><accept></literal> and <literal><default></literal> 543elements. Fonts matching the <literal><family></literal> element are edited to prepend the 544list of <literal><prefer></literal>ed families before the matching <literal><family></literal>, append the 545<literal><accept></literal>able families after the matching <literal><family></literal> and append the <literal><default></literal> 546families to the end of the family list. 547 </para></refsect2> 548 <refsect2><title><literal><family></literal></title><para> 549Holds a single font family name 550 </para></refsect2> 551 <refsect2><title><literal><prefer></literal>, <literal><accept></literal>, <literal><default></literal></title><para> 552These hold a list of <literal><family></literal> elements to be used by the <literal><alias></literal> element. 553 </para></refsect2> 554</refsect1> 555<refsect1><title>EXAMPLE CONFIGURATION FILE</title> 556 <refsect2><title>System configuration file</title> 557 <para> 558This is an example of a system-wide configuration file 559 </para> 560 <programlisting> 561<?xml version="1.0"?> 562<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> 563<!-- &confdir;/fonts.conf file to configure system font access --> 564<fontconfig> 565<!-- 566 Find fonts in these directories 567--> 568<dir>/usr/share/fonts</dir> 569<dir>/usr/X11R6/lib/X11/fonts</dir> 570 571<!-- 572 Accept deprecated 'mono' alias, replacing it with 'monospace' 573--> 574<match target="pattern"> 575 <test qual="any" name="family"><string>mono</string></test> 576 <edit name="family" mode="assign"><string>monospace</string></edit> 577</match> 578 579<!-- 580 Names not including any well known alias are given 'sans-serif' 581--> 582<match target="pattern"> 583 <test qual="all" name="family" mode="not_eq"><string>sans-serif</string></test> 584 <test qual="all" name="family" mode="not_eq"><string>serif</string></test> 585 <test qual="all" name="family" mode="not_eq"><string>monospace</string></test> 586 <edit name="family" mode="append_last"><string>sans-serif</string></edit> 587</match> 588 589<!-- 590 Load per-user customization file, but don't complain 591 if it doesn't exist 592--> 593<include ignore_missing="yes" prefix="xdg">fontconfig/fonts.conf</include> 594 595<!-- 596 Load local customization files, but don't complain 597 if there aren't any 598--> 599<include ignore_missing="yes">conf.d</include> 600<include ignore_missing="yes">local.conf</include> 601 602<!-- 603 Alias well known font names to available TrueType fonts. 604 These substitute TrueType faces for similar Type1 605 faces to improve screen appearance. 606--> 607<alias> 608 <family>Times</family> 609 <prefer><family>Times New Roman</family></prefer> 610 <default><family>serif</family></default> 611</alias> 612<alias> 613 <family>Helvetica</family> 614 <prefer><family>Arial</family></prefer> 615 <default><family>sans</family></default> 616</alias> 617<alias> 618 <family>Courier</family> 619 <prefer><family>Courier New</family></prefer> 620 <default><family>monospace</family></default> 621</alias> 622 623<!-- 624 Provide required aliases for standard names 625 Do these after the users configuration file so that 626 any aliases there are used preferentially 627--> 628<alias> 629 <family>serif</family> 630 <prefer><family>Times New Roman</family></prefer> 631</alias> 632<alias> 633 <family>sans</family> 634 <prefer><family>Arial</family></prefer> 635</alias> 636<alias> 637 <family>monospace</family> 638 <prefer><family>Andale Mono</family></prefer> 639</alias> 640 641<-- 642 The example of the requirements of OR operator; 643 If the 'family' contains 'Courier New' OR 'Courier' 644 add 'monospace' as the alternative 645--> 646<match target="pattern"> 647 <test name="family" mode="eq"> 648 <string>Courier New</string> 649 </test> 650 <edit name="family" mode="prepend"> 651 <string>monospace</string> 652 </edit> 653</match> 654<match target="pattern"> 655 <test name="family" mode="eq"> 656 <string>Courier</string> 657 </test> 658 <edit name="family" mode="prepend"> 659 <string>monospace</string> 660 </edit> 661</match> 662 663</fontconfig> 664 </programlisting> 665 </refsect2> 666 <refsect2><title>User configuration file</title> 667 <para> 668This is an example of a per-user configuration file that lives in 669$XDG_CONFIG_HOME/fontconfig/fonts.conf 670 </para> 671 <programlisting> 672<?xml version="1.0"?> 673<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> 674<!-- $XDG_CONFIG_HOME/fontconfig/fonts.conf for per-user font configuration --> 675<fontconfig> 676 677<!-- 678 Private font directory 679--> 680<dir prefix="xdg">fonts</dir> 681 682<!-- 683 use rgb sub-pixel ordering to improve glyph appearance on 684 LCD screens. Changes affecting rendering, but not matching 685 should always use target="font". 686--> 687<match target="font"> 688 <edit name="rgba" mode="assign"><const>rgb</const></edit> 689</match> 690<!-- 691 use WenQuanYi Zen Hei font when serif is requested for Chinese 692--> 693<match> 694 <!-- 695 If you don't want to use WenQuanYi Zen Hei font for zh-tw etc, 696 you can use zh-cn instead of zh. 697 Please note, even if you set zh-cn, it still matches zh. 698 if you don't like it, you can use compare="eq" 699 instead of compare="contains". 700 --> 701 <test name="lang" compare="contains"> 702 <string>zh</string> 703 </test> 704 <test name="family"> 705 <string>serif</string> 706 </test> 707 <edit name="family" mode="prepend"> 708 <string>WenQuanYi Zen Hei</string> 709 </edit> 710</match> 711<!-- 712 use VL Gothic font when sans-serif is requested for Japanese 713--> 714<match> 715 <test name="lang" compare="contains"> 716 <string>ja</string> 717 </test> 718 <test name="family"> 719 <string>sans-serif</string> 720 </test> 721 <edit name="family" mode="prepend"> 722 <string>VL Gothic</string> 723 </edit> 724</match> 725</fontconfig> 726 </programlisting> 727 </refsect2> 728</refsect1> 729<refsect1><title>Files</title> 730 <para> 731<emphasis>fonts.conf</emphasis> 732contains configuration information for the fontconfig library 733consisting of directories to look at for font information as well as 734instructions on editing program specified font patterns before attempting to 735match the available fonts. It is in XML format. 736 </para> 737 <para> 738<emphasis>conf.d</emphasis> 739is the conventional name for a directory of additional configuration files 740managed by external applications or the local administrator. The 741filenames starting with decimal digits are sorted in lexicographic order 742and used as additional configuration files. All of these files are in XML 743format. The master fonts.conf file references this directory in an 744<include> directive. 745 </para> 746 <para> 747<emphasis>fonts.dtd</emphasis> 748is a DTD that describes the format of the configuration files. 749 </para> 750 <para> 751<emphasis>$XDG_CONFIG_HOME/fontconfig/conf.d</emphasis> and <emphasis>~/.fonts.conf.d</emphasis> 752is the conventional name for a per-user directory of (typically 753auto-generated) configuration files, although the 754actual location is specified in the global fonts.conf file. please note that ~/.fonts.conf.d is deprecated now. it will not be read by default in the future version. 755 </para> 756 <para> 757<emphasis>$XDG_CONFIG_HOME/fontconfig/fonts.conf</emphasis> and <emphasis>~/.fonts.conf</emphasis> 758is the conventional location for per-user font configuration, although the 759actual location is specified in the global fonts.conf file. please note that ~/.fonts.conf is deprecated now. it will not be read by default in the future version. 760 </para> 761 <para> 762<emphasis>$XDG_CACHE_HOME/fontconfig/*.cache-*</emphasis> and <emphasis> ~/.fontconfig/*.cache-*</emphasis> 763is the conventional repository of font information that isn't found in the 764per-directory caches. This file is automatically maintained by fontconfig. please note that ~/.fontconfig/*.cache-* is deprecated now. it will not be read by default in the future version. 765 </para> 766</refsect1> 767<refsect1><title>Environment variables</title> 768 <para> 769<emphasis>FONTCONFIG_FILE</emphasis> 770is used to override the default configuration file. 771 </para> 772 <para> 773<emphasis>FONTCONFIG_PATH</emphasis> 774is used to override the default configuration directory. 775 </para> 776 <para> 777<emphasis>FC_DEBUG</emphasis> 778is used to output the detailed debugging messages. see <link linkend="debug">Debugging Applications</link> section for more details. 779 </para> 780 <para> 781<emphasis>FONTCONFIG_USE_MMAP</emphasis> 782is used to control the use of mmap(2) for the cache files if available. this take a boolean value. fontconfig will checks if the cache files are stored on the filesystem that is safe to use mmap(2). explicitly setting this environment variable will causes skipping this check and enforce to use or not use mmap(2) anyway. 783 </para> 784</refsect1> 785<refsect1><title>See Also</title> 786 <para> 787fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1) 788 </para> 789</refsect1> 790<refsect1><title>Version</title> 791 <para> 792Fontconfig version &version; 793 </para> 794</refsect1> 795</refentry> 796