summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@gnome.org>2006-01-23 12:43:36 +0000
committerBehdad Esfahbod <behdad@src.gnome.org>2006-01-23 12:43:36 +0000
commitce22d934fce30c8fce9b660221419f8a0055d565 (patch)
tree09edaacb296170440c05b930a56be06561785836 /modules
parentb96b62b89cadc96e8a1612d7e33db99bfe58d82f (diff)
downloadpango-ce22d934fce30c8fce9b660221419f8a0055d565.tar.gz
Set cluster only on base chars, like the Arabic module does.
2006-01-23 Behdad Esfahbod <behdad@gnome.org> * modules/basic/basic-fc.c: Set cluster only on base chars, like the Arabic module does. * modules/indic/indic-fc.c: Draw an unknown glyph on missing glyphs, like other modules do. (part of bug #326960, LingNing Zhang)
Diffstat (limited to 'modules')
-rw-r--r--modules/basic/basic-fc.c5
-rw-r--r--modules/indic/indic-fc.c23
2 files changed, 18 insertions, 10 deletions
diff --git a/modules/basic/basic-fc.c b/modules/basic/basic-fc.c
index d72d7b72..caa46cf4 100644
--- a/modules/basic/basic-fc.c
+++ b/modules/basic/basic-fc.c
@@ -335,6 +335,7 @@ basic_engine_shape (PangoEngineShape *engine,
int n_chars;
int i;
const char *p;
+ int cluster = 0;
g_return_if_fail (font != NULL);
g_return_if_fail (text != NULL);
@@ -367,7 +368,6 @@ basic_engine_shape (PangoEngineShape *engine,
PangoGlyph index;
char buf[6];
const char *input;
- int cluster = 0;
wc = g_utf8_get_char (p);
input = p;
@@ -395,7 +395,8 @@ basic_engine_shape (PangoEngineShape *engine,
}
else
{
- cluster = p - text;
+ if (g_unichar_type (wc) != G_UNICODE_NON_SPACING_MARK)
+ cluster = p - text;
pango_ot_buffer_add_glyph (buffer, index,
unknown_property, cluster);
diff --git a/modules/indic/indic-fc.c b/modules/indic/indic-fc.c
index 8487a3cd..4e6fdfcc 100644
--- a/modules/indic/indic-fc.c
+++ b/modules/indic/indic-fc.c
@@ -236,7 +236,7 @@ get_gpos_ruleset (FT_Face face, const PangoIndicInfo *indic_info)
ruleset = pango_ot_ruleset_new (info);
- if (1 && pango_ot_info_find_script (info, PANGO_OT_TABLE_GPOS,
+ if (pango_ot_info_find_script (info, PANGO_OT_TABLE_GPOS,
indic_info->scriptTag, &script_index))
{
maybe_add_GPOS_feature (ruleset, info, script_index, FT_MAKE_TAG ('b','l','w','m'), blwm);
@@ -253,7 +253,6 @@ get_gpos_ruleset (FT_Face face, const PangoIndicInfo *indic_info)
static void
set_glyphs (PangoFont *font,
- FT_Face face,
const gunichar *wcs,
gulong *tags,
glong n_glyphs,
@@ -261,8 +260,11 @@ set_glyphs (PangoFont *font,
gboolean process_zwj)
{
gint i;
+ PangoFcFont *fc_font;
+
+ g_assert (font);
- g_assert (face);
+ fc_font = PANGO_FC_FONT (font);
for (i = 0; i < n_glyphs; i += 1)
{
@@ -272,9 +274,14 @@ set_glyphs (PangoFont *font,
(!process_zwj || wcs[i] != 0x200D))
glyph = 0;
else
- glyph = FT_Get_Char_Index (face, wcs[i]);
-
- pango_ot_buffer_add_glyph (buffer, glyph, tags[i], i);
+ {
+ glyph = pango_fc_font_get_glyph (fc_font, wcs[i]);
+
+ if (!glyph)
+ glyph = pango_fc_font_get_unknown_glyph (fc_font, wcs[i]);
+
+ pango_ot_buffer_add_glyph (buffer, glyph, tags[i], i);
+ }
}
}
@@ -295,7 +302,7 @@ expand_text(const gchar *text, glong length, glong **offsets, glong *n_chars)
p = text;
wco = wcs;
oo = *offsets;
- for (i = 0; i < *n_chars; i += 1)
+ for (i = 0; i < *n_chars; i++)
{
*wco++ = g_utf8_get_char (p);
*oo++ = p - text;
@@ -357,7 +364,7 @@ indic_engine_shape (PangoEngineShape *engine,
pango_glyph_string_set_size (glyphs, n_glyphs);
buffer = pango_ot_buffer_new (fc_font);
- set_glyphs(font, face, wc_out, tags, n_glyphs, buffer,
+ set_glyphs(font, wc_out, tags, n_glyphs, buffer,
(indic_info->classTable->scriptFlags & SF_PROCESS_ZWJ) != 0);
/* do gsub processing */