--- /dev/null
+--- fontconfig/src/fcdir.c.blacklist Mon Aug 26 15:57:40 2002
++++ fontconfig/src/fcdir.c Fri Aug 30 14:59:05 2002
+@@ -150,6 +150,40 @@
+ return ret;
+ }
+
++static FcBool
++FcBlackListed (const char *name)
++{
++ static const char * const black_listed_names[] = {
++ "hrger.pfa",
++ "hrgrr.pfa",
++ "hritr.pfa",
++ "hrpld.pfa",
++ "hrpldi.pfa",
++ "hrplt.pfa",
++ "hrplti.pfa",
++ "hrscc.pfa",
++ "hrscs.pfa",
++ "u003043t.gsf",
++ "u004006t.gsf"
++ };
++
++ int low = 0;
++ int high = sizeof(black_listed_names) / sizeof(black_listed_names[0]) - 1;
++
++ while (low <= high) {
++ int mid = (low + high) / 2;
++ int res = strcmp (name, black_listed_names[mid]);
++ if (res == 0)
++ return FcTrue;
++ else if (res < 0)
++ high = mid - 1;
++ else
++ low = mid + 1;
++ }
++
++ return FcFalse;
++}
++
+ #define FC_MAX_FILE_LEN 4096
+
+ FcBool
+@@ -201,7 +235,8 @@
+ }
+ while (ret && (e = readdir (d)))
+ {
+- if (e->d_name[0] != '.' && strlen (e->d_name) < FC_MAX_FILE_LEN)
++ if (e->d_name[0] != '.' && strlen (e->d_name) < FC_MAX_FILE_LEN &&
++ !FcBlackListed (e->d_name))
+ {
+ strcpy ((char *) base, (char *) e->d_name);
+ ret = FcFileScan (set, dirs, cache, blanks, file, force);
--- /dev/null
+--- fontconfig/fonts.conf.in.defaultconfig Mon Aug 19 15:31:59 2002
++++ fontconfig/fonts.conf.in Mon Sep 2 23:32:37 2002
+@@ -170,45 +170,86 @@
+ <alias>
+ <family>serif</family>
+ <prefer>
+- <family>Times New Roman</family>
+ <family>Nimbus Roman No9 L</family>
+ <family>Luxi Serif</family>
+- <family>Times</family>
+ <family>Kochi Mincho</family>
++ <family>ZYSong18030</family>
+ <family>AR PL SungtiL GB</family>
+ <family>AR PL Mingti2L Big5</family>
+ <family>Baekmuk Batang</family>
++ <family>Times New Roman</family>
++ <family>Times</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+- <family>Verdana</family>
+- <family>Nimbus Sans L</family>
+ <family>Luxi Sans</family>
+- <family>Arial</family>
++ <family>Nimbus Sans L</family>
+ <family>Helvetica</family>
+ <family>Kochi Gothic</family>
+- <family>AR PL KaitiM GB</family>
+- <family>AR PL KaitiM Big5</family>
+- <family>Baekmuk Dotum</family>
++ <family>ZYSong18030</family>
++ <family>AR PL SungtiL GB</family>
++ <family>AR PL Mingti2L Big5</family>
++ <family>Baekmuk Gulim</family>
++ <family>Verdana</family>
++ <family>Arial</family>
+ <family>SimSun</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>monospace</family>
+ <prefer>
+- <family>Andale Mono</family>
+- <family>Courier New</family>
+ <family>Luxi Mono</family>
+ <family>Nimbus Mono L</family>
+ <family>Kochi Gothic</family>
+- <family>AR PL KaitiM GB</family>
+- <family>Baekmuk Dotum</family>
++ <family>ZYSong18030</family>
++ <family>AR PL SungtiL GB</family>
++ <family>AR PL Mingti2L Big5</family>
++ <family>Baekmuk Gulim</family>
++ <family>Andale Mono</family>
++ <family>Courier New</family>
+ </prefer>
+ </alias>
+
+ <!--
++ We can't hint CJK fonts well, so turn off hinting for CJK fonts.
++ -->
++
++ <match target="font">
++ <test name="lang" compare="contains">
++ <string>ja</string>
++ </test>
++ <edit name="hinting" mode="assign">
++ <bool>false</bool>
++ </edit>
++ <!-- the rh_prefer_bitmaps options (a nonstandard
++ Red Hat extension), controls whether embedded
++ bitmaps, when available are preferred
++ to antialiased rendering. For Japanese,
++ we prefer antialiased rendering -->
++ <edit name="rh_prefer_bitmaps" mode="assign">
++ <bool>false</bool>
++ </edit>
++ </match>
++ <match target="font">
++ <test name="lang" compare="contains">
++ <string>ko</string>
++ </test>
++ <edit name="hinting" mode="assign">
++ <bool>false</bool>
++ </edit>
++ </match>
++ <match target="font">
++ <test name="lang" compare="contains">
++ <string>zh</string>
++ </test>
++ <edit name="hinting" mode="assign">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++<!--
+ Artificial oblique for fonts without an italic or oblique version
+ -->
+
--- /dev/null
+--- fontconfig/Makefile.in.fontdir Wed Jul 24 01:32:42 2002
++++ fontconfig/Makefile.in Wed Jul 24 01:33:04 2002
+@@ -38,7 +38,7 @@
+
+ fonts.conf: fonts.conf.in
+ rm -f $@
+- sh ./setfontdirs $(FC_DEFAULT_FONTS) $(X_FONT_DIR)
++ sh ./setfontdirs $(FC_DEFAULT_FONTS) $(X_FONT_DIR)/Type1
+
+ clean::
+ rm -f fonts.conf
--- /dev/null
+--- fontconfig/src/fcint.h.subdir Sat Aug 31 18:17:32 2002
++++ fontconfig/src/fcint.h Mon Sep 9 15:09:41 2002
+@@ -238,18 +238,20 @@
+ FcChar8 *name;
+ } FcGlobalCacheFile;
+
++typedef struct _FcGlobalCacheDir FcGlobalCacheDir;
++
+ typedef struct _FcGlobalCacheSubdir {
+ struct _FcGlobalCacheSubdir *next;
+- FcChar8 *file;
++ FcGlobalCacheDir *ent;
+ } FcGlobalCacheSubdir;
+
+-typedef struct _FcGlobalCacheDir {
++struct _FcGlobalCacheDir {
+ struct _FcGlobalCacheDir *next;
+ FcGlobalCacheInfo info;
+ int len;
+ FcGlobalCacheFile *ents[FC_GLOBAL_CACHE_FILE_HASH_SIZE];
+ FcGlobalCacheSubdir *subdirs;
+-} FcGlobalCacheDir;
++};
+
+ typedef struct _FcGlobalCache {
+ FcGlobalCacheDir *ents[FC_GLOBAL_CACHE_DIR_HASH_SIZE];
+--- fontconfig/src/fcdir.c.subdir Mon Sep 9 13:04:09 2002
++++ fontconfig/src/fcdir.c Mon Sep 9 15:09:41 2002
+@@ -117,6 +117,8 @@
+ {
+ isDir = FcTrue;
+ ret = FcStrSetAdd (dirs, file);
++ if (cache && ret)
++ FcGlobalCacheUpdate (cache, file, 0, FC_FONT_FILE_DIR);
+ }
+ /*
+ * Update the cache
+--- fontconfig/src/fccache.c.subdir Sat Aug 31 18:17:31 2002
++++ fontconfig/src/fccache.c Mon Sep 9 15:09:41 2002
+@@ -448,14 +448,11 @@
+ parent = FcGlobalCacheDirGet (cache, i.dir, i.dir_len, FcTrue);
+ if (!parent)
+ return 0;
+- subdir = malloc (sizeof (FcGlobalCacheSubdir) +
+- strlen ((const char *) i.base) + 1);
++ subdir = malloc (sizeof (FcGlobalCacheSubdir));
+ if (!subdir)
+ return 0;
+- FcMemAlloc (FC_MEM_CACHE, sizeof (FcGlobalCacheSubdir) +
+- strlen ((const char *) i.base) + 1);
+- subdir->file = (FcChar8 *) (subdir + 1);
+- strcpy ((char *) subdir->file, (const char *) i.base);
++ FcMemAlloc (FC_MEM_CACHE, sizeof (FcGlobalCacheSubdir));
++ subdir->ent = d;
+ subdir->next = parent->subdirs;
+ parent->subdirs = subdir;
+ return &d->info;
+@@ -480,8 +477,7 @@
+ for (s = d->subdirs; s; s = nexts)
+ {
+ nexts = s->next;
+- FcMemFree (FC_MEM_CACHE, sizeof (FcGlobalCacheSubdir) +
+- strlen ((char *) s->file) + 1);
++ FcMemFree (FC_MEM_CACHE, sizeof (FcGlobalCacheSubdir));
+ free (s);
+ }
+ FcMemFree (FC_MEM_CACHE, sizeof (FcGlobalCacheDir) + d->len + 1);
+@@ -535,12 +531,15 @@
+ }
+ for (subdir = d->subdirs; subdir; subdir = subdir->next)
+ {
++ FcFilePathInfo info = FcFilePathInfoGet (subdir->ent->info.file);
++
+ if (!FcCacheFontSetAdd (set, dirs, dir, dir_len,
+- subdir->file, FC_FONT_FILE_DIR))
++ info.base, FC_FONT_FILE_DIR))
+ {
+ cache->broken = FcTrue;
+ return FcFalse;
+ }
++ FcGlobalCacheReferenced (cache, &subdir->ent->info);
+ }
+
+ FcGlobalCacheReferenced (cache, &d->info);