Change default set of fonts to include all of /usr/X11R6/lib/X11/fonts (or
wherever the X fonts are located). Document new <include>directory-name</include> semantics add <include ignore_missing="yes">conf.d</include> Add selectfont to ignore bitmap fonts, add comment for selectfont which accepts bitmap fonts. Allow <include> configuration elements to reference directories. Parse and load all files of the form [0-9]* in sorted order.
This commit is contained in:
parent
38e528e776
commit
2d9c79c049
18
ChangeLog
18
ChangeLog
|
@ -1,3 +1,21 @@
|
|||
2004-12-04 Keith Packard <keithp@keithp.com>
|
||||
|
||||
* configure.in:
|
||||
Change default set of fonts to include all of
|
||||
/usr/X11R6/lib/X11/fonts (or wherever the X fonts are located).
|
||||
* doc/fontconfig-user.sgml:
|
||||
Document new <include>directory-name</include> semantics
|
||||
* fonts.conf.in:
|
||||
add <include ignore_missing="yes">conf.d</include>
|
||||
* local.conf:
|
||||
Add selectfont to ignore bitmap fonts, add comment for
|
||||
selectfont which accepts bitmap fonts.
|
||||
* src/fcdir.c:
|
||||
* src/fcint.h:
|
||||
* src/fcxml.c: (FcConfigParseAndLoadDir), (FcConfigParseAndLoad):
|
||||
Allow <include> configuration elements to reference directories.
|
||||
Parse and load all files of the form [0-9]* in sorted order.
|
||||
|
||||
2004-12-04 Keith Packard <keithp@keithp.com>
|
||||
|
||||
* autogen.sh:
|
||||
|
|
23
configure.in
23
configure.in
|
@ -281,19 +281,16 @@ yes)
|
|||
for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
|
||||
case x"$FC_ADD_FONTS" in
|
||||
x)
|
||||
if test -d "$dir/fonts"; then
|
||||
for sub in "$dir"/fonts/*; do
|
||||
if ls "$sub" | grep -q -i '\.pf\|\.tt\|\.ot'; then
|
||||
case x$FC_ADD_FONTS in
|
||||
x)
|
||||
FC_ADD_FONTS="$sub"
|
||||
;;
|
||||
*)
|
||||
FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
sub="$dir/fonts"
|
||||
if test -d "$sub"; then
|
||||
case x$FC_ADD_FONTS in
|
||||
x)
|
||||
FC_ADD_FONTS="$sub"
|
||||
;;
|
||||
*)
|
||||
FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
|
|
@ -264,11 +264,14 @@ is ``~/.fonts.cache-<sgmltag>version</>'', where <sgmltag>version</> is the font
|
|||
file version number (currently 1).
|
||||
</para></refsect2>
|
||||
<refsect2><title><sgmltag>include ignore_missing="no"</></title><para>
|
||||
This element contains the name of an additional configuration file. When
|
||||
the XML datatype is traversed by FcConfigParse, the contents of the file
|
||||
will also be incorporated into the configuration by passing the filename to
|
||||
This element contains the name of an additional configuration file or
|
||||
directory. If a directory, every file within that directory starting with a
|
||||
number will be processed in sorted order. When
|
||||
the XML datatype is traversed by FcConfigParse, the contents of the file(s)
|
||||
will also be incorporated into the configuration by passing the filename(s) to
|
||||
FcConfigLoadAndParse. If 'ignore_missing' is set to "yes" instead of the
|
||||
default "no", a missing file will elicit no warning message from the library.
|
||||
default "no", a missing file or directory will elicit no warning message from
|
||||
the library.
|
||||
</para></refsect2>
|
||||
<refsect2><title><sgmltag>config</></title><para>
|
||||
This element provides a place to consolodate additional configuration
|
||||
|
@ -453,8 +456,8 @@ This is an example of a system-wide configuration file
|
|||
<!--
|
||||
Find fonts in these directories
|
||||
-->
|
||||
<dir>/usr/X11R6/lib/X11/fonts/truetype</dir>
|
||||
<dir>/usr/X11R6/lib/X11/fonts/Type1</dir>
|
||||
<dir>/usr/share/fonts</dir>
|
||||
<dir>/usr/X11R6/lib/X11/fonts</dir>
|
||||
|
||||
<!--
|
||||
Accept deprecated 'mono' alias, replacing it with 'monospace'
|
||||
|
@ -535,7 +538,7 @@ This is an example of a per-user configuration file that lives in
|
|||
<!--
|
||||
Private font directory
|
||||
-->
|
||||
<dir>~/misc/fonts</dir>
|
||||
<dir>~/.fonts</dir>
|
||||
|
||||
<!--
|
||||
use rgb sub-pixel ordering to improve glyph appearance on
|
||||
|
|
|
@ -211,6 +211,7 @@
|
|||
<!--
|
||||
Load local system customization file
|
||||
-->
|
||||
<include ignore_missing="yes">conf.d</include>
|
||||
<include ignore_missing="yes">local.conf</include>
|
||||
|
||||
<!--
|
||||
|
|
23
local.conf
23
local.conf
|
@ -11,4 +11,27 @@
|
|||
<edit name="rgba" mode="assign"><const>rgb</const></edit>
|
||||
</match>
|
||||
-->
|
||||
<!--
|
||||
Reject bitmap fonts
|
||||
-->
|
||||
|
||||
<selectfont>
|
||||
<rejectfont>
|
||||
<pattern>
|
||||
<patelt name="scalable"><bool>false</bool></patelt>
|
||||
</pattern>
|
||||
</rejectfont>
|
||||
</selectfont>
|
||||
|
||||
<!--
|
||||
Accept bitmap fonts. This overrides any rejectfont which matches
|
||||
|
||||
<selectfont>
|
||||
<acceptfont>
|
||||
<pattern>
|
||||
<patelt name="scalable"><bool>false</bool></patelt>
|
||||
</pattern>
|
||||
</acceptfont>
|
||||
</selectfont>
|
||||
-->
|
||||
</fontconfig>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#include "fcint.h"
|
||||
#include <dirent.h>
|
||||
|
||||
static FcBool
|
||||
FcBool
|
||||
FcFileIsDir (const FcChar8 *file)
|
||||
{
|
||||
struct stat statb;
|
||||
|
@ -166,8 +166,6 @@ FcFileScan (FcFontSet *set,
|
|||
return FcFileScanConfig (set, dirs, cache, blanks, file, force, 0);
|
||||
}
|
||||
|
||||
#define FC_MAX_FILE_LEN 4096
|
||||
|
||||
/*
|
||||
* Scan 'dir', adding font files to 'set' and
|
||||
* subdirectories to 'dirs'
|
||||
|
|
|
@ -69,6 +69,7 @@ typedef struct _FcSymbolic {
|
|||
#define FC_DBG_SCAN 128
|
||||
#define FC_DBG_SCANV 256
|
||||
#define FC_DBG_MEMORY 512
|
||||
#define FC_DBG_CONFIG 1024
|
||||
|
||||
#define FC_MEM_CHARSET 0
|
||||
#define FC_MEM_CHARLEAF 1
|
||||
|
@ -229,6 +230,8 @@ typedef struct _FcGlyphName {
|
|||
FcChar8 name[1]; /* name extends beyond struct */
|
||||
} FcGlyphName;
|
||||
|
||||
#define FC_MAX_FILE_LEN 4096
|
||||
|
||||
/*
|
||||
* The per-user ~/.fonts.cache-<version> file is loaded into
|
||||
* this data structure. Each directory gets a substructure
|
||||
|
@ -519,6 +522,9 @@ FcDebug (void);
|
|||
|
||||
/* fcdir.c */
|
||||
|
||||
FcBool
|
||||
FcFileIsDir (const FcChar8 *file);
|
||||
|
||||
FcBool
|
||||
FcFileScanConfig (FcFontSet *set,
|
||||
FcStrSet *dirs,
|
||||
|
|
89
src/fcxml.c
89
src/fcxml.c
|
@ -24,6 +24,7 @@
|
|||
|
||||
#include <stdarg.h>
|
||||
#include "fcint.h"
|
||||
#include <dirent.h>
|
||||
|
||||
#ifndef HAVE_XMLPARSE_H
|
||||
#define HAVE_XMLPARSE_H 0
|
||||
|
@ -2077,6 +2078,84 @@ FcEndDoctypeDecl (void *userData)
|
|||
{
|
||||
}
|
||||
|
||||
static FcBool
|
||||
FcConfigParseAndLoadDir (FcConfig *config,
|
||||
const FcChar8 *name,
|
||||
const FcChar8 *dir,
|
||||
FcBool complain)
|
||||
{
|
||||
DIR *d;
|
||||
struct dirent *e;
|
||||
FcBool ret = FcTrue;
|
||||
FcChar8 *file;
|
||||
FcChar8 *base;
|
||||
FcStrSet *files;
|
||||
|
||||
d = opendir ((char *) dir);
|
||||
if (!d)
|
||||
{
|
||||
if (complain)
|
||||
FcConfigMessage (0, FcSevereError, "Cannot open config dir \"%s\"",
|
||||
name);
|
||||
ret = FcFalse;
|
||||
goto bail0;
|
||||
}
|
||||
/* freed below */
|
||||
file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1);
|
||||
if (!file)
|
||||
{
|
||||
ret = FcFalse;
|
||||
goto bail1;
|
||||
}
|
||||
|
||||
strcpy ((char *) file, (char *) dir);
|
||||
strcat ((char *) file, "/");
|
||||
base = file + strlen ((char *) file);
|
||||
|
||||
files = FcStrSetCreate ();
|
||||
if (!files)
|
||||
{
|
||||
ret = FcFalse;
|
||||
goto bail2;
|
||||
}
|
||||
|
||||
if (FcDebug () & FC_DBG_CONFIG)
|
||||
printf ("\tScanning config dir %s\n", dir);
|
||||
|
||||
while (ret && (e = readdir (d)))
|
||||
{
|
||||
/*
|
||||
* Add all files of the form [0-9]*
|
||||
*/
|
||||
if ('0' <= e->d_name[0] && e->d_name[0] <= '9' &&
|
||||
strlen (e->d_name) < FC_MAX_FILE_LEN)
|
||||
{
|
||||
strcpy ((char *) base, (char *) e->d_name);
|
||||
if (!FcStrSetAdd (files, file))
|
||||
{
|
||||
ret = FcFalse;
|
||||
goto bail3;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ret)
|
||||
{
|
||||
int i;
|
||||
qsort (files->strs, files->num, sizeof (FcChar8 *),
|
||||
(int (*)(const void *, const void *)) FcStrCmp);
|
||||
for (i = 0; ret && i < files->num; i++)
|
||||
ret = FcConfigParseAndLoad (config, files->strs[i], complain);
|
||||
}
|
||||
bail3:
|
||||
FcStrSetDestroy (files);
|
||||
bail2:
|
||||
free (file);
|
||||
bail1:
|
||||
closedir (d);
|
||||
bail0:
|
||||
return ret || !complain;
|
||||
}
|
||||
|
||||
FcBool
|
||||
FcConfigParseAndLoad (FcConfig *config,
|
||||
const FcChar8 *name,
|
||||
|
@ -2101,6 +2180,16 @@ FcConfigParseAndLoad (FcConfig *config,
|
|||
goto bail0;
|
||||
}
|
||||
|
||||
if (FcFileIsDir (filename))
|
||||
{
|
||||
FcBool ret = FcConfigParseAndLoadDir (config, name, filename, complain);
|
||||
FcStrFree (filename);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (FcDebug () & FC_DBG_CONFIG)
|
||||
printf ("\tLoading config file %s\n", filename);
|
||||
|
||||
f = fopen ((char *) filename, "r");
|
||||
FcStrFree (filename);
|
||||
if (!f)
|
||||
|
|
Loading…
Reference in New Issue