]> git.wh0rd.org - fontconfig.git/commitdiff
Change default set of fonts to include all of /usr/X11R6/lib/X11/fonts (or
authorKeith Packard <keithp@keithp.com>
Sun, 5 Dec 2004 05:03:52 +0000 (05:03 +0000)
committerKeith Packard <keithp@keithp.com>
Sun, 5 Dec 2004 05:03:52 +0000 (05:03 +0000)
    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.

ChangeLog
configure.in
doc/fontconfig-user.sgml
fonts.conf.in
local.conf
src/fcdir.c
src/fcint.h
src/fcxml.c

index a0424d42855be55f43ec5a05531f26bfd14634ec..3f8df2be5fca87ac906185bf3b7886c710b60063 100644 (file)
--- a/ChangeLog
+++ b/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:
index d28c7bf598ad8f3a299df316bc94faac5e37eafb..540abe4c1d57e744c3f6d5f0914995a1102302c2 100644 (file)
@@ -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
index afe1c487d7751a1b650066ae72c4cd2136d226db..edb3d14475433c83e70d41dd68b269537639efd9 100644 (file)
@@ -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
 &lt;!-- 
        Find fonts in these directories
 --&gt;
-&lt;dir&gt;/usr/X11R6/lib/X11/fonts/truetype&lt;/dir&gt;
-&lt;dir&gt;/usr/X11R6/lib/X11/fonts/Type1&lt;/dir&gt;
+&lt;dir&gt;/usr/share/fonts&lt;/dir&gt;
+&lt;dir&gt;/usr/X11R6/lib/X11/fonts&lt;/dir&gt;
 
 &lt;!--
        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
 &lt;!--
        Private font directory
 --&gt;
-&lt;dir&gt;~/misc/fonts&lt;/dir&gt;
+&lt;dir&gt;~/.fonts&lt;/dir&gt;
 
 &lt;!--
        use rgb sub-pixel ordering to improve glyph appearance on
index 32f6a254e4bcdf8dc8a70a459d8bb00a485be367..4ba79acbde7bb31e8920ce7d8d8a21864ce0a962 100644 (file)
 <!--
   Load local system customization file
 -->
+       <include ignore_missing="yes">conf.d</include>
        <include ignore_missing="yes">local.conf</include>
 
 <!--
index 73901e1995540f855482f1795e85ee0027180486..9f8beee66c9e6da2c65fc002e9d2ee0ed326b0dd 100644 (file)
                <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>
index 9ce22daf660884af223ed91df92bac740ea687c0..5c9646f30a80b5029d8818cacdde766437ac9639 100644 (file)
@@ -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'
index cf86ad417a2ab07e24e65e563defe4d4f3e11f22..2261c1cb291d04362dd82da3de9a47478aa267d6 100644 (file)
@@ -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,
index 52172b25dcdb0adf67165144da8672556fd8efbc..bb0da1caf5693548a693401a9db361ba0ba0b799 100644 (file)
@@ -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)