[Fontconfig] fontconfig: Branch 'master'

Akira TAGOH tagoh at kemper.freedesktop.org
Wed Jul 23 03:24:16 PDT 2014


 src/fccfg.c |   28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

New commits:
commit 107b44f50b6818288ad70608fbe4ec3fd1a7119f
Author: Akira TAGOH <akira at tagoh.org>
Date:   Wed Jul 23 19:17:26 2014 +0900

    Don't add duplicate lang
    
    Don't add duplicate lang from FC_LANG if the pattern already has.
    
    https://bugs.freedesktop.org/show_bug.cgi?id=81186

diff --git a/src/fccfg.c b/src/fccfg.c
index 6d32595..f8ee8d2 100644
--- a/src/fccfg.c
+++ b/src/fccfg.c
@@ -1546,10 +1546,38 @@ FcConfigSubstituteWithPat (FcConfig    *config,
 	    FcStrSetDestroy (strs);
 	    while (l && (lang = FcStrListNext (l)))
 	    {
+		FcPatternElt *e = FcPatternObjectFindElt (p, FC_LANG_OBJECT);
+
+		if (e)
+		{
+		    FcValueListPtr ll;
+
+		    for (ll = FcPatternEltValues (e); ll; ll = FcValueListNext (ll))
+		    {
+			FcValue vv = FcValueCanonicalize (&ll->value);
+
+			if (vv.type == FcTypeLangSet)
+			{
+			    FcLangSet *ls = FcLangSetCreate ();
+			    FcBool b;
+
+			    FcLangSetAdd (ls, lang);
+			    b = FcLangSetContains (vv.u.l, ls);
+			    FcLangSetDestroy (ls);
+			    if (b)
+				goto bail_lang;
+			}
+			else
+			    if (FcStrCmpIgnoreCase (vv.u.s, lang) == 0)
+				goto bail_lang;
+		    }
+		}
 		v.type = FcTypeString;
 		v.u.s = lang;
+
 		FcPatternObjectAddWithBinding (p, FC_LANG_OBJECT, v, FcValueBindingWeak, FcTrue);
 	    }
+	bail_lang:
 	    FcStrListDone (l);
 	}
 	if (FcPatternObjectGet (p, FC_PRGNAME_OBJECT, 0, &v) == FcResultNoMatch)


More information about the Fontconfig mailing list