diff options
Diffstat (limited to 'fontconfig')
-rw-r--r-- | fontconfig/conf.d/30-metric-aliases.conf | 11 | ||||
-rw-r--r-- | fontconfig/conf.d/45-latin.conf | 16 | ||||
-rw-r--r-- | fontconfig/src/fcarch.c | 2 | ||||
-rw-r--r-- | fontconfig/src/fcarch.h | 2 | ||||
-rw-r--r-- | fontconfig/src/fccfg.c | 52 | ||||
-rw-r--r-- | fontconfig/src/fcint.h | 5 | ||||
-rw-r--r-- | fontconfig/src/fcxml.c | 7 |
7 files changed, 63 insertions, 32 deletions
diff --git a/fontconfig/conf.d/30-metric-aliases.conf b/fontconfig/conf.d/30-metric-aliases.conf index f25052a29..0fd0b8a0c 100644 --- a/fontconfig/conf.d/30-metric-aliases.conf +++ b/fontconfig/conf.d/30-metric-aliases.conf @@ -230,6 +230,7 @@ <alias binding="same"> <family>Helvetica</family> <accept> + <family>TeX Gyre Heros</family> <family>Nimbus Sans L</family> </accept> </alias> @@ -237,6 +238,7 @@ <alias binding="same"> <family>Times</family> <accept> + <family>TeX Gyre Termes</family> <family>Nimbus Roman No9 L</family> </accept> </alias> @@ -253,6 +255,7 @@ <alias binding="same"> <family>Arial</family> <accept> + <family>TeX Gyre Heros</family> <family>Arimo</family> <family>Liberation Sans</family> <family>Albany</family> @@ -270,6 +273,7 @@ <alias binding="same"> <family>Times New Roman</family> <accept> + <family>TeX Gyre Termes</family> <family>Tinos</family> <family>Liberation Serif</family> <family>Thorndale</family> @@ -278,6 +282,13 @@ </alias> <alias binding="same"> + <family>Georgia</family> + <accept> + <family>Gelasio</family> + </accept> + </alias> + + <alias binding="same"> <family>Courier New</family> <accept> <family>Cousine</family> diff --git a/fontconfig/conf.d/45-latin.conf b/fontconfig/conf.d/45-latin.conf index 09fd52652..aa62ed42e 100644 --- a/fontconfig/conf.d/45-latin.conf +++ b/fontconfig/conf.d/45-latin.conf @@ -45,6 +45,22 @@ <family>Thorndale</family> <default><family>serif</family></default> </alias> + <alias> + <family>Georgia</family> + <default><family>serif</family></default> + </alias> + <alias> + <family>Garamond</family> + <default><family>serif</family></default> + </alias> + <alias> + <family>Palatino Linotype</family> + <default><family>serif</family></default> + </alias> + <alias> + <family>Trebuchet MS</family> + <default><family>serif</family></default> + </alias> <!-- Sans-serif faces --> diff --git a/fontconfig/src/fcarch.c b/fontconfig/src/fcarch.c index 35734c021..21516ff05 100644 --- a/fontconfig/src/fcarch.c +++ b/fontconfig/src/fcarch.c @@ -49,7 +49,7 @@ FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcStrSet *)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcCharLeaf **)); FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcChar16 *)); -FC_ASSERT_STATIC (0x08 + 1*FC_MAX(4,ALIGNOF_DOUBLE) == sizeof (FcValue)); +FC_ASSERT_STATIC (0x08 + 1*FC_MAX(SIZEOF_VOID_P,ALIGNOF_DOUBLE) == sizeof (FcValue)); FC_ASSERT_STATIC (0x00 + 2*SIZEOF_VOID_P == sizeof (FcPatternElt)); FC_ASSERT_STATIC (0x08 + 2*SIZEOF_VOID_P == sizeof (FcPattern)); FC_ASSERT_STATIC (0x08 + 2*SIZEOF_VOID_P == sizeof (FcCharSet)); diff --git a/fontconfig/src/fcarch.h b/fontconfig/src/fcarch.h index cf7fd3c9f..049a5b02b 100644 --- a/fontconfig/src/fcarch.h +++ b/fontconfig/src/fcarch.h @@ -33,7 +33,7 @@ * and on 32bit ones, whether double is aligned to one word or two words. * Those result in the 6 formats listed below. * - * If any of the assertion errors in fccache.c fail, you need to add a new + * If any of the assertion errors in fcarch.c fail, you need to add a new * architecture. Contact the fontconfig mailing list in that case. * * name endianness pointer-size double-alignment diff --git a/fontconfig/src/fccfg.c b/fontconfig/src/fccfg.c index be738d53d..b88095bc6 100644 --- a/fontconfig/src/fccfg.c +++ b/fontconfig/src/fccfg.c @@ -649,8 +649,10 @@ FcConfigAddRule (FcConfig *config, { FcSubst *subst, **prev; FcRule *r; - int num; + int n = 0; + if (!rule) + return FcFalse; switch (kind) { case FcMatchPattern: prev = &config->substPattern; @@ -671,7 +673,6 @@ FcConfigAddRule (FcConfig *config, *prev = subst; subst->next = NULL; subst->rule = rule; - num = 0; for (r = rule; r; r = r->next) { switch (r->type) @@ -680,19 +681,21 @@ FcConfigAddRule (FcConfig *config, if (r->u.test && r->u.test->kind == FcMatchDefault) r->u.test->kind = kind; - if (r->u.test->object > FC_MAX_BASE_OBJECT) - num++; + + if (n < r->u.test->object) + n = r->u.test->object; break; case FcRuleEdit: - if (r->u.edit->object > FC_MAX_BASE_OBJECT) - num++; + if (n < r->u.edit->object) + n = r->u.edit->object; break; default: break; } } - if (config->maxObjects < num) - config->maxObjects = num; + n = FC_OBJ_ID (n) - FC_MAX_BASE_OBJECT; + if (config->maxObjects < n) + config->maxObjects = n; if (FcDebug () & FC_DBG_EDIT) { printf ("Add Subst "); @@ -701,11 +704,6 @@ FcConfigAddRule (FcConfig *config, return FcTrue; } -typedef struct _FcSubState { - FcPatternElt *elt; - FcValueList *value; -} FcSubState; - static FcValue FcConfigPromote (FcValue v, FcValue u, FcValuePromotionBuffer *buf) { @@ -1495,16 +1493,14 @@ FcConfigSubstituteWithPat (FcConfig *config, FcValue v; FcSubst *s; FcRule *r; - FcValueList *l, **value = NULL; + FcValueList *l, **value = NULL, *vl; FcPattern *m; FcStrSet *strs; FcObject object = FC_INVALID_OBJECT; - FcPatternElt **elt = NULL; + FcPatternElt **elt = NULL, *e; int i, nobjs; FcBool retval = FcTrue; -#define FC_OBJ_ID(_n_) ((_n_) > FC_MAX_BASE_OBJECT ? ((_n_) - FC_EXT_OBJ_INDEX) : (_n_)) - if (!config) { config = FcConfigGetCurrent (); @@ -1597,12 +1593,17 @@ FcConfigSubstituteWithPat (FcConfig *config, else m = p; if (m) - elt[object] = FcPatternObjectFindElt (m, r->u.test->object); + e = FcPatternObjectFindElt (m, r->u.test->object); + else + e = NULL; + /* different 'kind' won't be the target of edit */ + if (!elt[object] && kind == r->u.test->kind) + elt[object] = e; /* * If there's no such field in the font, * then FcQualAll matches while FcQualAny does not */ - if (!elt[object]) + if (!e) { if (r->u.test->qual == FcQualAll) { @@ -1620,10 +1621,13 @@ FcConfigSubstituteWithPat (FcConfig *config, * Check to see if there is a match, mark the location * to apply match-relative edits */ - value[object] = FcConfigMatchValueList (m, p_pat, kind, r->u.test, elt[object]->values); - if (!value[object] || - (r->u.test->qual == FcQualFirst && value[object] != elt[object]->values) || - (r->u.test->qual == FcQualNotFirst && value[object] == elt[object]->values)) + vl = FcConfigMatchValueList (m, p_pat, kind, r->u.test, e->values); + /* different 'kind' won't be the target of edit */ + if (!value[object] && kind == r->u.test->kind) + value[object] = vl; + if (!vl || + (r->u.test->qual == FcQualFirst && vl != e->values) || + (r->u.test->qual == FcQualNotFirst && vl == e->values)) { if (FcDebug () & FC_DBG_EDIT) printf ("No match\n"); @@ -1745,8 +1749,6 @@ bail1: if (value) free (value); -#undef FC_OBJ_ID - return retval; } diff --git a/fontconfig/src/fcint.h b/fontconfig/src/fcint.h index ec0c67470..362ea6f99 100644 --- a/fontconfig/src/fcint.h +++ b/fontconfig/src/fcint.h @@ -174,10 +174,11 @@ typedef struct _FcValueList { typedef int FcObject; -/* The 1000 is to leave some room for future added internal objects, such +/* The 1024 is to leave some room for future added internal objects, such * that caches from newer fontconfig can still be used with older fontconfig * without getting confused. */ -#define FC_EXT_OBJ_INDEX 1000 +#define FC_EXT_OBJ_INDEX 1024 +#define FC_OBJ_ID(_n_) ((_n_) & (~FC_EXT_OBJ_INDEX)) typedef struct _FcPatternElt *FcPatternEltPtr; diff --git a/fontconfig/src/fcxml.c b/fontconfig/src/fcxml.c index 2cdf0ad0a..b464b4ede 100644 --- a/fontconfig/src/fcxml.c +++ b/fontconfig/src/fcxml.c @@ -2509,7 +2509,6 @@ FcParseMatch (FcConfigParse *parse) { const FcChar8 *kind_name; FcMatchKind kind; - FcEdit *edit = 0; FcVStack *vstack; FcRule *rule = NULL, *r; @@ -2545,8 +2544,10 @@ FcParseMatch (FcConfigParse *parse) { FcConfigMessage (parse, FcSevereError, "<match target=\"scan\"> cannot edit user-defined object \"%s\"", - FcObjectName(edit->object)); - break; + FcObjectName(vstack->u.edit->object)); + if (rule) + FcRuleDestroy (rule); + return; } r = FcRuleCreate (FcRuleEdit, vstack->u.edit); if (rule) |