--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/open-src/lib/fontconfig/fontconfig-2.7.1.patch Fri Sep 11 10:45:05 2009 -0700
@@ -0,0 +1,214 @@
+--- fontconfig-2.7.1/src/fccfg.c 2009-06-24 13:52:13.000000000 -0400
++++ fontconfig-2.7.1/src/fccfg.c 2009-08-26 13:20:46.489868000 -0400
+@@ -785,12 +785,12 @@
+ switch (op) {
+ case FcOpContains:
+ case FcOpListing:
+- /* left contains right if right is a subset of left */
+- ret = FcCharSetIsSubset (right.u.c, left.u.c);
++ /* right contains left if left is a subset of right */
++ ret = FcCharSetIsSubset (left.u.c, right.u.c);
+ break;
+ case FcOpNotContains:
+- /* left contains right if right is a subset of left */
+- ret = !FcCharSetIsSubset (right.u.c, left.u.c);
++ /* right contains left if left is a subset of right */
++ ret = !FcCharSetIsSubset (left.u.c, right.u.c);
+ break;
+ case FcOpEqual:
+ ret = FcCharSetEqual (left.u.c, right.u.c);
+--- fontconfig-2.7.1/src/fcmatch.c 2009-07-22 19:00:51.000000000 -0400
++++ fontconfig-2.7.1/src/fcmatch.c 2009-08-26 14:25:44.707291000 -0400
+@@ -168,6 +168,15 @@
+ if (v2 == 0)
+ return 0;
+ v = v2 - v1;
++
++ /*
++ * Hack to allow bitmap fonts to equal requested font if it is close
++ */
++ if ( v > -.5 && v <= .5 )
++ {
++ v = 0;
++ }
++
+ if (v < 0)
+ v = -v;
+ return v;
+@@ -430,6 +439,47 @@
+ return new;
+ }
+
++static void
++FcChangeFormat ( FcPattern *p )
++{
++ int i;
++ FcPatternElt *pe = FcPatternElts(p);
++
++ /*
++ * Hack. If user want monochrome mode, then try to pick bitmaps over
++ * outlines.
++ */
++ for ( i = 0; i < p->num; i++ )
++ {
++ if ( !strcmp(&pe[i].object, "antialias" ))
++ {
++ int aa = (int) &pe[i].values->value.u.b;
++ int j;
++ int done = 0;
++ FcValue v;
++
++ v.type = FcTypeBool;
++ v.u.b = aa;
++
++ for ( j = 0; j < p->num; j++ )
++ {
++ if ( !strcmp(&pe[j].object, "outline" ))
++ {
++ done = 1;
++ break;
++ }
++ }
++ if ( !done )
++ {
++ FcPatternObjectAddWithBinding (p, "outline", v,
++ FcValueBindingStrong, 1);
++ }
++ break;
++ }
++ }
++}
++
++
+ static FcPattern *
+ FcFontSetMatchInternal (FcConfig *config,
+ FcFontSet **sets,
+@@ -444,6 +494,8 @@
+ int i;
+ int set;
+
++ FcChangeFormat ( p );
++
+ for (i = 0; i < NUM_MATCH_VALUES; i++)
+ bestscore[i] = 0;
+ best = 0;
+@@ -669,9 +721,11 @@
+ int f;
+ int i;
+ int nPatternLang;
+- FcBool *patternLangSat;
++ int *patternLangSat;
+ FcValue patternLang;
+
++ FcChangeFormat ( p );
++
+ if (FcDebug () & FC_DBG_MATCH)
+ {
+ printf ("Sort ");
+@@ -700,7 +754,7 @@
+ if (!nodes)
+ goto bail0;
+ nodeps = (FcSortNode **) (nodes + nnodes);
+- patternLangSat = (FcBool *) (nodeps + nnodes);
++ patternLangSat = (int *) (nodeps + nnodes);
+
+ new = nodes;
+ nodep = nodeps;
+@@ -740,7 +794,13 @@
+ FcSortCompare);
+
+ for (i = 0; i < nPatternLang; i++)
+- patternLangSat[i] = FcFalse;
++ patternLangSat[i] = 0;
++
++ /*
++ * For Solaris, because of ja_JP, en_US, and such locales, exact matches
++ * with font language support is sporatic. To resolve this, allow close
++ * matches to succeed, but be able to accept exact matches above them.
++ */
+
+ for (f = 0; f < nnodes; f++)
+ {
+@@ -749,18 +809,19 @@
+ * If this node matches any language, go check
+ * which ones and satisfy those entries
+ */
+- if (nodeps[f]->score[MATCH_LANG_INDEX] < 200)
++ if (nodeps[f]->score[MATCH_LANG_INDEX] < 100)
+ {
+ for (i = 0; i < nPatternLang; i++)
+ {
+ FcValue nodeLang;
+
+- if (!patternLangSat[i] &&
++ if (patternLangSat[i] != 1 &&
+ FcPatternGet (p, FC_LANG, i, &patternLang) == FcResultMatch &&
+ FcPatternGet (nodeps[f]->pattern, FC_LANG, 0, &nodeLang) == FcResultMatch)
+ {
+ double compare = FcCompareLang (&patternLang, &nodeLang);
+- if (compare >= 0 && compare < 2)
++ if (compare >= 0 && compare < 2 &&
++ (patternLangSat[i] == 0 || compare + 1 < patternLangSat[i]))
+ {
+ if (FcDebug () & FC_DBG_MATCHV)
+ {
+@@ -771,7 +832,7 @@
+ FcPatternGetString (nodeps[f]->pattern, FC_STYLE, 0, &style) == FcResultMatch)
+ printf ("Font %s:%s matches language %d\n", family, style, i);
+ }
+- patternLangSat[i] = FcTrue;
++ patternLangSat[i] = (int) compare + 1;
+ satisfies = FcTrue;
+ break;
+ }
+--- fontconfig-2.7.1/src/fcxml.c 2009-07-21 15:41:43.000000000 -0400
++++ fontconfig-2.7.1/src/fcxml.c 2009-08-26 14:14:15.692622000 -0400
+@@ -2477,6 +2477,10 @@
+ void *buf;
+ #endif
+
++ char *cur_locale = setlocale (LC_NUMERIC, NULL);
++
++ setlocale (LC_NUMERIC, "C");
++
+ filename = FcConfigFilename (name);
+ if (!filename)
+ goto bail0;
+@@ -2576,6 +2580,7 @@
+ close (fd);
+ fd = -1;
+ bail0:
++ setlocale (LC_NUMERIC, cur_locale);
+ if (error && complain)
+ {
+ if (name)
+--- fontconfig-2.7.1/src/fcfreetype.c 2009-07-25 16:38:20.000000000 -0400
++++ fontconfig-2.7.1/src/fcfreetype.c 2009-08-26 14:16:17.358575000 -0400
+@@ -124,7 +124,7 @@
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_BIG_5, "BIG-5" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_WANSUNG, "Wansung" },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_JOHAB, "Johab" },
+- { TT_PLATFORM_MICROSOFT, TT_MS_ID_UCS_4, "UCS-2BE" },
++ { TT_PLATFORM_MICROSOFT, TT_MS_ID_UCS_4, "UTF-16BE" },
+ { TT_PLATFORM_ISO, TT_ISO_ID_7BIT_ASCII, "ASCII" },
+ { TT_PLATFORM_ISO, TT_ISO_ID_10646, "UCS-2BE" },
+ { TT_PLATFORM_ISO, TT_ISO_ID_8859_1, "ISO-8859-1" },
+--- fontconfig-2.7.1/Makefile.am 2009-06-24 14:43:43.000000000 -0400
++++ fontconfig-2.7.1/Makefile.am 2009-08-26 14:29:39.076444000 -0400
+@@ -104,16 +104,6 @@
+ echo " $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \
+ $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \
+ fi; fi
+- @(if $(RUN_FC_CACHE_TEST); then \
+- echo " $(bindir)/fc-cache -s -f -v"; \
+- $(bindir)/fc-cache -s -f -v; \
+- else \
+- echo "***"; \
+- echo "*** Warning: fonts.cache not built"; \
+- echo "***"; \
+- echo "*** Generate this file manually on host system using fc-cache"; \
+- echo "***"; \
+- fi)
+
+ uninstall-local:
+ if [ -f $(srcdir)/fonts.conf ]; then \