diff options
author | Akira TAGOH <akira@tagoh.org> | 2012-04-04 14:47:57 +0900 |
---|---|---|
committer | Akira TAGOH <akira@tagoh.org> | 2012-04-06 11:14:42 +0900 |
commit | ddefa5021f7785514f373aab6a8e6191a867278e (patch) | |
tree | 7b55248e73955146790b2bd262c966632102a4ea | |
parent | e181ab4de5d20fe1f70e68f66ef8332553eba206 (diff) |
Bug 22862 - <alias> ignores <match> <test>s
Allow to use the test elements in the alias element.
-rw-r--r-- | fonts.dtd | 2 | ||||
-rw-r--r-- | src/fcxml.c | 27 |
2 files changed, 22 insertions, 7 deletions
@@ -113,7 +113,7 @@ <!ATTLIST patelt name CDATA #REQUIRED> -<!ELEMENT alias (family*, prefer?, accept?, default?)> +<!ELEMENT alias (test?, family*, prefer?, accept?, default?)> <!ATTLIST alias binding (weak|strong|same) "weak"> <!ELEMENT prefer (family)*> diff --git a/src/fcxml.c b/src/fcxml.c index 0fb82b6..79dfc0b 100644 --- a/src/fcxml.c +++ b/src/fcxml.c @@ -1583,7 +1583,7 @@ FcParseAlias (FcConfigParse *parse) FcExpr *family = 0, *accept = 0, *prefer = 0, *def = 0, *new = 0; FcEdit *edit = 0, *next; FcVStack *vstack; - FcTest *test; + FcTest *test = NULL; FcValueBinding binding; if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding)) @@ -1626,6 +1626,11 @@ FcParseAlias (FcConfigParse *parse) def = vstack->u.expr; vstack->tag = FcVStackNone; break; + case FcVStackTest: + vstack->u.test->next = test; + test = vstack->u.test; + vstack->tag = FcVStackNone; + break; default: FcConfigMessage (parse, FcSevereWarning, "bad alias"); break; @@ -1683,11 +1688,21 @@ FcParseAlias (FcConfigParse *parse) } if (edit) { - test = FcTestCreate (parse, FcMatchPattern, - FcQualAny, - (FcChar8 *) FC_FAMILY, - FcOpEqual, - family); + FcTest *t = FcTestCreate (parse, FcMatchPattern, + FcQualAny, + (FcChar8 *) FC_FAMILY, + FcOpEqual, + family); + if (test) + { + FcTest *p = test; + + while (p->next) + p = p->next; + p->next = t; + } + else + test = t; if (test) if (!FcConfigAddEdit (parse->config, test, edit, FcMatchPattern)) FcTestDestroy (test); |