diff -r 03bf0470eca1 -r da249e35ba64 open-src/lib/fontconfig/fontconfig-2.7.1.patch --- /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 \