aboutsummaryrefslogtreecommitdiffstats
path: root/src/ftfont.c
diff options
context:
space:
mode:
authorKenichi Handa <[email protected]>2010-09-17 13:57:58 +0900
committerKenichi Handa <[email protected]>2010-09-17 13:57:58 +0900
commit78a217725f91bce7f3981c1ba1fdbdedab9cc96a (patch)
tree7f018cec53615425631d676bf3b24b9233a8b8ac /src/ftfont.c
parent38d50547c2a8195bed0aaeafbbc4c0f277d4e416 (diff)
ftfont.c (ftfont_check_otf): Fix previous change.
Diffstat (limited to 'src/ftfont.c')
-rw-r--r--src/ftfont.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/ftfont.c b/src/ftfont.c
index 9eb7af2765..97bf265a84 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -1632,13 +1632,18 @@ ftfont_get_metrics (MFLTFont *font, MFLTGlyphString *gstring,
static int
ftfont_check_otf (MFLTFont *font, MFLTOtfSpec *spec)
{
+#define FEATURE_NONE(IDX) (! spec->features[IDX])
+
+#define FEATURE_ANY(IDX) \
+ (spec->features[IDX] \
+ && spec->features[IDX][0] == 0xFFFFFFFF && spec->features[IDX][1] == 0)
+
struct MFLTFontFT *flt_font_ft = (struct MFLTFontFT *) font;
OTF *otf = flt_font_ft->otf;
OTF_Tag *tags;
int i, n, negative;
- if (spec->features[0] && spec->features[0][0] ==0
- && spec->features[1] && spec->features[1][0] ==0)
+ if (FEATURE_ANY (0) && FEATURE_ANY (1))
/* Return 1 iff any of GSUB or GPOS support the script (and language). */
return (otf
&& (OTF_check_features (otf, 0, spec->script, spec->langsys,
@@ -1647,23 +1652,25 @@ ftfont_check_otf (MFLTFont *font, MFLTOtfSpec *spec)
NULL, 0) > 0));
for (i = 0; i < 2; i++)
- if (! spec->features[i] || spec->features[i][0] != 0)
+ if (! FEATURE_ANY (i))
{
- int no_feature = ! otf || OTF_get_features (otf, i == 0) < 0;
- if (! spec->features[i])
+ if (FEATURE_NONE (i))
{
- if (no_feature)
- continue;
- return 0;
+ if (otf
+ && OTF_check_features (otf, i == 0, spec->script, spec->langsys,
+ NULL, 0) > 0)
+ return 0;
+ continue;
}
if (spec->features[i][0] == 0xFFFFFFFF)
{
- if (no_feature)
+ if (! otf
+ || OTF_check_features (otf, i == 0, spec->script, spec->langsys,
+ NULL, 0) <= 0)
continue;
}
- else if (no_feature)
+ else if (! otf)
return 0;
- /* Now (! no_feature) */
for (n = 1; spec->features[i][n]; n++);
tags = alloca (sizeof (OTF_Tag) * n);
for (n = 0, negative = 0; spec->features[i][n]; n++)
@@ -1687,6 +1694,8 @@ ftfont_check_otf (MFLTFont *font, MFLTOtfSpec *spec)
#endif /* not M17N_FLT_USE_NEW_FEATURE */
}
return 1;
+#undef FEATURE_NONE
+#undef FEATURE_ANY
}
#define DEVICE_DELTA(table, size) \