open-src/lib/fontconfig/fontconfig-2.7.1.patch
changeset 779 da249e35ba64
parent 364 8e78f63dd484
--- /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 \