summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira TAGOH <akira@tagoh.org>2012-05-21 13:43:20 +0900
committerAkira TAGOH <akira@tagoh.org>2012-05-25 13:11:25 +0900
commit2837c63876b9b1f27d74aad51d45fc18d48f4652 (patch)
treef799bd5322ac2d82accefedbeab12a949986e8be
parent794fb0bd6a3fa91c6e03e51dc080e458b8960a55 (diff)
Bug 33644 - Fontconfig doesn't match correctly in <test>
Warn if the multiple values is set to <test>, including the case of in <alias> because the behavior isn't intuitive since so many users is asking for a help to get things working for their expectation. Use multiple <match>s or <alias>es for OR operator and multiple <test>s for AND operator.
-rw-r--r--doc/fontconfig-user.sgml23
-rw-r--r--src/fcxml.c5
2 files changed, 28 insertions, 0 deletions
diff --git a/doc/fontconfig-user.sgml b/doc/fontconfig-user.sgml
index c6ab856..f29cfe0 100644
--- a/doc/fontconfig-user.sgml
+++ b/doc/fontconfig-user.sgml
@@ -627,6 +627,29 @@ This is an example of a system-wide configuration file
&lt;family&gt;monospace&lt;/family&gt;
&lt;prefer&gt;&lt;family&gt;Andale Mono&lt;/family&gt;&lt;/prefer&gt;
&lt;/alias&gt;
+
+&lt;--
+ The example of the requirements of OR operator;
+ If the 'family' contains 'Courier New' OR 'Courier'
+ add 'monospace' as the alternative
+--&gt;
+&lt;match target="pattern"&gt;
+ &lt;test name="family" mode="eq"&gt;
+ &lt;string&gt;Courier New&lt;/string&gt;
+ &lt;/test&gt;
+ &lt;edit name="family" mode="prepend"&gt;
+ &lt;string&gt;monospace&lt;/string&gt;
+ &lt;/edit&gt;
+&lt;/match&gt;
+&lt;match target="pattern"&gt;
+ &lt;test name="family" mode="eq"&gt;
+ &lt;string&gt;Courier&lt;/string&gt;
+ &lt;/test&gt;
+ &lt;edit name="family" mode="prepend"&gt;
+ &lt;string&gt;monospace&lt;/string&gt;
+ &lt;/edit&gt;
+&lt;/match&gt;
+
&lt;/fontconfig&gt;
</programlisting>
</refsect2>
diff --git a/src/fcxml.c b/src/fcxml.c
index f027270..d92cbcc 100644
--- a/src/fcxml.c
+++ b/src/fcxml.c
@@ -1590,6 +1590,7 @@ FcParseAlias (FcConfigParse *parse)
case FcVStackFamily:
if (family)
{
+ FcConfigMessage (parse, FcSevereWarning, "Having multiple <family> in <alias> isn't supported and may not works as expected");
new = FcExprCreateOp (parse->config, vstack->u.expr, FcOpComma, family);
if (!new)
FcConfigMessage (parse, FcSevereError, "out of memory");
@@ -2204,6 +2205,10 @@ FcParseTest (FcConfigParse *parse)
FcConfigMessage (parse, FcSevereWarning, "missing test expression");
return;
}
+ if (expr->op == FcOpComma)
+ {
+ FcConfigMessage (parse, FcSevereWarning, "Having multiple values in <test> isn't supported and may not works as expected");
+ }
test = FcTestCreate (parse, kind, qual, name, FC_OP (compare, flags), expr);
if (!test)
{