summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira TAGOH <akira@tagoh.org>2014-07-23 19:17:26 +0900
committerAkira TAGOH <akira@tagoh.org>2014-07-23 19:17:26 +0900
commit107b44f50b6818288ad70608fbe4ec3fd1a7119f (patch)
tree25765fc3d896f02cdc7f7f3f79925e5a61fe139e
parent342b908b9696a3f1cf1a45ddd779f3a17d6f9142 (diff)
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
-rw-r--r--src/fccfg.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/fccfg.c b/src/fccfg.c
index 6d325951..f8ee8d20 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)