diff options
author | Akira TAGOH <akira@tagoh.org> | 2012-05-21 13:43:20 +0900 |
---|---|---|
committer | Akira TAGOH <akira@tagoh.org> | 2012-05-25 13:11:25 +0900 |
commit | 2837c63876b9b1f27d74aad51d45fc18d48f4652 (patch) | |
tree | f799bd5322ac2d82accefedbeab12a949986e8be | |
parent | 794fb0bd6a3fa91c6e03e51dc080e458b8960a55 (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.sgml | 23 | ||||
-rw-r--r-- | src/fcxml.c | 5 |
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 <family>monospace</family> <prefer><family>Andale Mono</family></prefer> </alias> + +<-- + The example of the requirements of OR operator; + If the 'family' contains 'Courier New' OR 'Courier' + add 'monospace' as the alternative +--> +<match target="pattern"> + <test name="family" mode="eq"> + <string>Courier New</string> + </test> + <edit name="family" mode="prepend"> + <string>monospace</string> + </edit> +</match> +<match target="pattern"> + <test name="family" mode="eq"> + <string>Courier</string> + </test> + <edit name="family" mode="prepend"> + <string>monospace</string> + </edit> +</match> + </fontconfig> </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) { |