summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2005-03-05 23:50:55 +0000
committerKeith Packard <keithp@keithp.com>2005-03-05 23:50:55 +0000
commit76a8dfa3378fc1bd0397a95f2da56d5c6fb2540c (patch)
tree878eee844026f237d10d63a2705edbfc1ac37c8e
parent219f7818dacb5417ab9e481b1fc21a79511e5fe7 (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--ChangeLog8
-rw-r--r--src/fcfreetype.c20
2 files changed, 20 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 12182a3..7faa1e0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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++;