Respect "binding" attribute in <alias> entries.
This makes creating "same" aliases for renamed font families far easier.
This commit is contained in:
parent
0602c605af
commit
681bb379de
|
@ -114,6 +114,8 @@
|
||||||
name CDATA #REQUIRED>
|
name CDATA #REQUIRED>
|
||||||
|
|
||||||
<!ELEMENT alias (family*, prefer?, accept?, default?)>
|
<!ELEMENT alias (family*, prefer?, accept?, default?)>
|
||||||
|
<!ATTLIST alias
|
||||||
|
binding (weak|strong|same) "weak">
|
||||||
<!ELEMENT prefer (family)*>
|
<!ELEMENT prefer (family)*>
|
||||||
<!ELEMENT accept (family)*>
|
<!ELEMENT accept (family)*>
|
||||||
<!ELEMENT default (family)*>
|
<!ELEMENT default (family)*>
|
||||||
|
|
58
src/fcxml.c
58
src/fcxml.c
|
@ -1288,6 +1288,33 @@ FcParseBool (FcConfigParse *parse)
|
||||||
FcStrFree (s);
|
FcStrFree (s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static FcBool
|
||||||
|
FcConfigLexBinding (FcConfigParse *parse,
|
||||||
|
const FcChar8 *binding_string,
|
||||||
|
FcValueBinding *binding_ret)
|
||||||
|
{
|
||||||
|
FcValueBinding binding;
|
||||||
|
|
||||||
|
if (!binding_string)
|
||||||
|
binding = FcValueBindingWeak;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!strcmp ((char *) binding_string, "weak"))
|
||||||
|
binding = FcValueBindingWeak;
|
||||||
|
else if (!strcmp ((char *) binding_string, "strong"))
|
||||||
|
binding = FcValueBindingStrong;
|
||||||
|
else if (!strcmp ((char *) binding_string, "same"))
|
||||||
|
binding = FcValueBindingSame;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FcConfigMessage (parse, FcSevereWarning, "invalid binding \"%s\"", binding_string);
|
||||||
|
return FcFalse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*binding_ret = binding;
|
||||||
|
return FcTrue;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
FcParseFamilies (FcConfigParse *parse, FcVStackTag tag)
|
FcParseFamilies (FcConfigParse *parse, FcVStackTag tag)
|
||||||
{
|
{
|
||||||
|
@ -1357,7 +1384,10 @@ FcParseAlias (FcConfigParse *parse)
|
||||||
FcEdit *edit = 0, *next;
|
FcEdit *edit = 0, *next;
|
||||||
FcVStack *vstack;
|
FcVStack *vstack;
|
||||||
FcTest *test;
|
FcTest *test;
|
||||||
|
FcValueBinding binding;
|
||||||
|
|
||||||
|
if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding))
|
||||||
|
return;
|
||||||
while ((vstack = FcVStackPop (parse)))
|
while ((vstack = FcVStackPop (parse)))
|
||||||
{
|
{
|
||||||
switch (vstack->tag) {
|
switch (vstack->tag) {
|
||||||
|
@ -1419,7 +1449,7 @@ FcParseAlias (FcConfigParse *parse)
|
||||||
FC_FAMILY_OBJECT,
|
FC_FAMILY_OBJECT,
|
||||||
FcOpPrepend,
|
FcOpPrepend,
|
||||||
prefer,
|
prefer,
|
||||||
FcValueBindingWeak);
|
binding);
|
||||||
if (edit)
|
if (edit)
|
||||||
edit->next = 0;
|
edit->next = 0;
|
||||||
else
|
else
|
||||||
|
@ -1432,7 +1462,7 @@ FcParseAlias (FcConfigParse *parse)
|
||||||
FC_FAMILY_OBJECT,
|
FC_FAMILY_OBJECT,
|
||||||
FcOpAppend,
|
FcOpAppend,
|
||||||
accept,
|
accept,
|
||||||
FcValueBindingWeak);
|
binding);
|
||||||
if (edit)
|
if (edit)
|
||||||
edit->next = next;
|
edit->next = next;
|
||||||
else
|
else
|
||||||
|
@ -1445,7 +1475,7 @@ FcParseAlias (FcConfigParse *parse)
|
||||||
FC_FAMILY_OBJECT,
|
FC_FAMILY_OBJECT,
|
||||||
FcOpAppendLast,
|
FcOpAppendLast,
|
||||||
def,
|
def,
|
||||||
FcValueBindingWeak);
|
binding);
|
||||||
if (edit)
|
if (edit)
|
||||||
edit->next = next;
|
edit->next = next;
|
||||||
else
|
else
|
||||||
|
@ -1650,7 +1680,6 @@ FcConfigLexCompare (const FcChar8 *compare)
|
||||||
return FcConfigLexOp (compare, fcCompareOps, NUM_COMPARE_OPS);
|
return FcConfigLexOp (compare, fcCompareOps, NUM_COMPARE_OPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
FcParseTest (FcConfigParse *parse)
|
FcParseTest (FcConfigParse *parse)
|
||||||
{
|
{
|
||||||
|
@ -1757,7 +1786,6 @@ FcParseEdit (FcConfigParse *parse)
|
||||||
{
|
{
|
||||||
const FcChar8 *name;
|
const FcChar8 *name;
|
||||||
const FcChar8 *mode_string;
|
const FcChar8 *mode_string;
|
||||||
const FcChar8 *binding_string;
|
|
||||||
FcOp mode;
|
FcOp mode;
|
||||||
FcValueBinding binding;
|
FcValueBinding binding;
|
||||||
FcExpr *expr;
|
FcExpr *expr;
|
||||||
|
@ -1781,23 +1809,9 @@ FcParseEdit (FcConfigParse *parse)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding_string = FcConfigGetAttribute (parse, "binding");
|
if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding))
|
||||||
if (!binding_string)
|
return;
|
||||||
binding = FcValueBindingWeak;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!strcmp ((char *) binding_string, "weak"))
|
|
||||||
binding = FcValueBindingWeak;
|
|
||||||
else if (!strcmp ((char *) binding_string, "strong"))
|
|
||||||
binding = FcValueBindingStrong;
|
|
||||||
else if (!strcmp ((char *) binding_string, "same"))
|
|
||||||
binding = FcValueBindingSame;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FcConfigMessage (parse, FcSevereWarning, "invalid edit binding \"%s\"", binding_string);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
expr = FcPopBinary (parse, FcOpComma);
|
expr = FcPopBinary (parse, FcOpComma);
|
||||||
edit = FcEditCreate (parse, FcObjectFromName ((char *) name),
|
edit = FcEditCreate (parse, FcObjectFromName ((char *) name),
|
||||||
mode, expr, binding);
|
mode, expr, binding);
|
||||||
|
|
Loading…
Reference in New Issue