diff options
author | Keith Packard <keithp@keithp.com> | 2005-03-05 23:50:55 +0000 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2005-03-05 23:50:55 +0000 |
commit | 76a8dfa3378fc1bd0397a95f2da56d5c6fb2540c (patch) | |
tree | 878eee844026f237d10d63a2705edbfc1ac37c8e | |
parent | 219f7818dacb5417ab9e481b1fc21a79511e5fe7 (diff) |
Include space and remove numbers from valid script tags. This ensures that
tags like 'lao ' work while rejecting those which have any digits.
Eliminate a spurious debugging variable (len)
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | src/fcfreetype.c | 20 |
2 files changed, 20 insertions, 8 deletions
@@ -1,5 +1,13 @@ 2005-03-05 Keith Packard <keithp@keithp.com> + * src/fcfreetype.c: (addtag), (FcFontCapabilities): + Include space and remove numbers from valid script tags. + This ensures that tags like 'lao ' work while rejecting + those which have any digits. + Eliminate a spurious debugging variable (len) + +2005-03-05 Keith Packard <keithp@keithp.com> + * src/fcfreetype.c: (addtag), (GetScriptTags), (FcFontCapabilities): Rework GSUB/GPOS script parsing to survive broken fonts. diff --git a/src/fcfreetype.c b/src/fcfreetype.c index 7f6ca37..4ca1ba0 100644 --- a/src/fcfreetype.c +++ b/src/fcfreetype.c @@ -2649,8 +2649,13 @@ FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks) /* space + head + id */ #define OTLAYOUT_LEN (1 + OTLAYOUT_HEAD_LEN + OTLAYOUT_ID_LEN) -#define FcIsNumber(x) (060 <= (x) && (x) <= 071) -#define FcIsAlNum(x) (FcIsLower(x) || FcIsUpper (x) || FcIsNumber (x)) +/* + * This is a bit generous; the registry has only lower case and space + * except for 'DFLT'. + */ +#define FcIsSpace(x) (040 == (x)) +#define FcIsValidScript(x) (FcIsLower(x) || FcIsUpper (x) || FcIsSpace(x)) + static void addtag(FcChar8 *complex, FT_ULong tag) { @@ -2662,13 +2667,13 @@ addtag(FcChar8 *complex, FT_ULong tag) tagstring[3] = (FcChar8)(tag); tagstring[4] = '\0'; - /* skip tags which aren't alphanumeric, under the assumption that + /* skip tags which aren't alphabetic, under the assumption that * they're probably broken */ - if (!FcIsAlNum(tagstring[0]) || - !FcIsAlNum(tagstring[1]) || - !FcIsAlNum(tagstring[2]) || - !FcIsAlNum(tagstring[3])) + if (!FcIsValidScript(tagstring[0]) || + !FcIsValidScript(tagstring[1]) || + !FcIsValidScript(tagstring[2]) || + !FcIsValidScript(tagstring[3])) return; if (*complex != '\0') @@ -2806,7 +2811,6 @@ FcFontCapabilities(FT_Face face) strcpy(complex, "ttable:Silf "); while ((indx1 < gsub_count) || (indx2 < gpos_count)) { - int len = strlen (complex); if (indx1 == gsub_count) { addtag(complex, gpostags[indx2]); indx2++; |