summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/indic/indic-fc.c13
-rw-r--r--modules/indic/indic-ot.h19
2 files changed, 28 insertions, 4 deletions
diff --git a/modules/indic/indic-fc.c b/modules/indic/indic-fc.c
index 4fab97cc..e8a11070 100644
--- a/modules/indic/indic-fc.c
+++ b/modules/indic/indic-fc.c
@@ -241,6 +241,7 @@ get_gpos_ruleset (FT_Face face, PangoIndicInfo *indic_info)
return ruleset;
}
+
static void
set_glyphs (PangoFont *font, FT_Face face, const gunichar *wcs, gulong *tags, glong n_glyphs, PangoOTBuffer *buffer)
{
@@ -250,10 +251,14 @@ set_glyphs (PangoFont *font, FT_Face face, const gunichar *wcs, gulong *tags, gl
for (i = 0; i < n_glyphs; i += 1)
{
- pango_ot_buffer_add_glyph (buffer,
- FT_Get_Char_Index (face, wcs[i]),
- tags[i],
- i);
+ guint glyph;
+
+ if (ZERO_WIDTH_CHAR (wcs[i]))
+ glyph = 0;
+ else
+ glyph = FT_Get_Char_Index (face, wcs[i]);
+
+ pango_ot_buffer_add_glyph (buffer, glyph, tags[i], i);
}
}
diff --git a/modules/indic/indic-ot.h b/modules/indic/indic-ot.h
index 3337fe0e..9dfe4465 100644
--- a/modules/indic/indic-ot.h
+++ b/modules/indic/indic-ot.h
@@ -175,6 +175,25 @@ enum indic_glyph_property_
#define HAS_BELOW_BASE_FORM(charClass) ((charClass & CF_BELOW_BASE) != 0)
+/* This macro definition is shared with basic-common.h
+ *
+ * Zero Width characters:
+ *
+ * 200B ZERO WIDTH SPACE
+ * 200C ZERO WIDTH NON-JOINER
+ * 200D ZERO WIDTH JOINER
+ * 200E LEFT-TO-RIGHT MARK
+ * 200F RIGHT-TO-LEFT MARK
+ * 202A LEFT-TO-RIGHT EMBEDDING
+ * 202B RIGHT-TO-LEFT EMBEDDING
+ * 202C POP DIRECTIONAL FORMATTING
+ * 202D LEFT-TO-RIGHT OVERRIDE
+ * 202E RIGHT-TO-LEFT OVERRIDE
+ * FEFF ZERO WIDTH NO-BREAK SPACE
+ */
+#define ZERO_WIDTH_CHAR(wc) \
+ (((wc) >= 0x200B && (wc) <= 0x200F) || ((wc) >= 0x202A && (wc) <= 0x202E) || ((wc) == 0xFEFF))
+
struct _IndicOTClassTable
{
gunichar firstChar;