diff options
author | Keith Packard <keithp@keithp.com> | 2004-12-05 05:03:52 +0000 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2004-12-05 05:03:52 +0000 |
commit | 2d9c79c049d084c82fdda9a71c5a65502ae94cee (patch) | |
tree | ca4b7072a4d590541f00da42b7a0ae2891d870d6 | |
parent | 38e528e77673f0395ab802cd1040947e307f0c6c (diff) |
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.
-rw-r--r-- | ChangeLog | 18 | ||||
-rw-r--r-- | configure.in | 23 | ||||
-rw-r--r-- | doc/fontconfig-user.sgml | 17 | ||||
-rw-r--r-- | fonts.conf.in | 1 | ||||
-rw-r--r-- | local.conf | 23 | ||||
-rw-r--r-- | src/fcdir.c | 4 | ||||
-rw-r--r-- | src/fcint.h | 6 | ||||
-rw-r--r-- | src/fcxml.c | 89 |
8 files changed, 158 insertions, 23 deletions
@@ -1,5 +1,23 @@ 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: Report command line for $srcdir/configure accurately. Bug #212. diff --git a/configure.in b/configure.in index d28c7bf..540abe4 100644 --- a/configure.in +++ b/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 diff --git a/doc/fontconfig-user.sgml b/doc/fontconfig-user.sgml index afe1c48..edb3d14 100644 --- a/doc/fontconfig-user.sgml +++ b/doc/fontconfig-user.sgml @@ -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 diff --git a/fonts.conf.in b/fonts.conf.in index 32f6a25..4ba79ac 100644 --- a/fonts.conf.in +++ b/fonts.conf.in @@ -211,6 +211,7 @@ <!-- Load local system customization file --> + <include ignore_missing="yes">conf.d</include> <include ignore_missing="yes">local.conf</include> <!-- @@ -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> diff --git a/src/fcdir.c b/src/fcdir.c index 9ce22da..5c9646f 100644 --- a/src/fcdir.c +++ b/src/fcdir.c @@ -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' diff --git a/src/fcint.h b/src/fcint.h index cf86ad4..2261c1c 100644 --- a/src/fcint.h +++ b/src/fcint.h @@ -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 @@ -520,6 +523,9 @@ FcDebug (void); /* fcdir.c */ FcBool +FcFileIsDir (const FcChar8 *file); + +FcBool FcFileScanConfig (FcFontSet *set, FcStrSet *dirs, FcFileCache *cache, diff --git a/src/fcxml.c b/src/fcxml.c index 52172b2..bb0da1c 100644 --- a/src/fcxml.c +++ b/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) |