[Fontconfig] fontconfig: Branch 'master'
Keith Packard
keithp at kemper.freedesktop.org
Thu Oct 25 22:30:51 PDT 2007
fonts.dtd | 2 ++
src/fcxml.c | 58 ++++++++++++++++++++++++++++++++++++----------------------
2 files changed, 38 insertions(+), 22 deletions(-)
New commits:
commit 681bb379de1847cf288ba27cf29243c8395cff17
Author: Keith Packard <keithp at koto.keithp.com>
Date: Thu Oct 25 22:30:49 2007 -0700
Respect "binding" attribute in <alias> entries.
This makes creating "same" aliases for renamed font families far easier.
diff --git a/fonts.dtd b/fonts.dtd
index a5c54f9..cbdfdab 100644
--- a/fonts.dtd
+++ b/fonts.dtd
@@ -114,6 +114,8 @@
name CDATA #REQUIRED>
<!ELEMENT alias (family*, prefer?, accept?, default?)>
+<!ATTLIST alias
+ binding (weak|strong|same) "weak">
<!ELEMENT prefer (family)*>
<!ELEMENT accept (family)*>
<!ELEMENT default (family)*>
diff --git a/src/fcxml.c b/src/fcxml.c
index 3b08fea..e8cfe1f 100644
--- a/src/fcxml.c
+++ b/src/fcxml.c
@@ -1288,6 +1288,33 @@ FcParseBool (FcConfigParse *parse)
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
FcParseFamilies (FcConfigParse *parse, FcVStackTag tag)
{
@@ -1357,7 +1384,10 @@ FcParseAlias (FcConfigParse *parse)
FcEdit *edit = 0, *next;
FcVStack *vstack;
FcTest *test;
+ FcValueBinding binding;
+ if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding))
+ return;
while ((vstack = FcVStackPop (parse)))
{
switch (vstack->tag) {
@@ -1419,7 +1449,7 @@ FcParseAlias (FcConfigParse *parse)
FC_FAMILY_OBJECT,
FcOpPrepend,
prefer,
- FcValueBindingWeak);
+ binding);
if (edit)
edit->next = 0;
else
@@ -1432,7 +1462,7 @@ FcParseAlias (FcConfigParse *parse)
FC_FAMILY_OBJECT,
FcOpAppend,
accept,
- FcValueBindingWeak);
+ binding);
if (edit)
edit->next = next;
else
@@ -1445,7 +1475,7 @@ FcParseAlias (FcConfigParse *parse)
FC_FAMILY_OBJECT,
FcOpAppendLast,
def,
- FcValueBindingWeak);
+ binding);
if (edit)
edit->next = next;
else
@@ -1650,7 +1680,6 @@ FcConfigLexCompare (const FcChar8 *compare)
return FcConfigLexOp (compare, fcCompareOps, NUM_COMPARE_OPS);
}
-
static void
FcParseTest (FcConfigParse *parse)
{
@@ -1757,7 +1786,6 @@ FcParseEdit (FcConfigParse *parse)
{
const FcChar8 *name;
const FcChar8 *mode_string;
- const FcChar8 *binding_string;
FcOp mode;
FcValueBinding binding;
FcExpr *expr;
@@ -1781,23 +1809,9 @@ FcParseEdit (FcConfigParse *parse)
return;
}
}
- binding_string = FcConfigGetAttribute (parse, "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 edit binding \"%s\"", binding_string);
- return;
- }
- }
+ if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding))
+ return;
+
expr = FcPopBinary (parse, FcOpComma);
edit = FcEditCreate (parse, FcObjectFromName ((char *) name),
mode, expr, binding);
More information about the Fontconfig
mailing list