+2008-09-10 Kenichi Handa <handa@m17n.org>
+
+ * font.c (Ffont_shape_gstring): Make glyphs of non-nil adjustment
+ compose a grapheme cluster with the preceding base glyph.
+
+ * composite.c (composition_compute_stop_pos): Fix previous change.
+
2008-09-10 Glenn Morris <rgm@gnu.org>
* Makefile.in (character.o, chartab.o): Fix config.h typo.
{
struct font *font;
Lisp_Object font_object, n, glyph;
- int i;
+ int i, j, from, to;
if (! composition_gstring_p (gstring))
signal_error ("Invalid glyph-string: ", gstring);
return Qnil;
glyph = LGSTRING_GLYPH (gstring, 0);
- for (i = 1; i < LGSTRING_GLYPH_LEN (gstring); i++)
+ from = LGLYPH_FROM (glyph);
+ to = LGLYPH_TO (glyph);
+ for (i = 1, j = 0; i < LGSTRING_GLYPH_LEN (gstring); i++)
{
Lisp_Object this = LGSTRING_GLYPH (gstring, i);
if (NILP (this))
break;
if (NILP (LGLYPH_ADJUSTMENT (this)))
- glyph = this;
+ {
+ if (j < i - 1)
+ for (; j < i; j++)
+ {
+ glyph = LGSTRING_GLYPH (gstring, j);
+ LGLYPH_SET_FROM (glyph, from);
+ LGLYPH_SET_TO (glyph, to);
+ }
+ from = LGLYPH_FROM (this);
+ to = LGLYPH_TO (this);
+ j = i;
+ }
else
{
- int from = LGLYPH_FROM (glyph);
- int to = LGLYPH_TO (glyph);
-
- LGLYPH_SET_FROM (this, from);
- LGLYPH_SET_TO (this, to);
+ if (from > LGLYPH_FROM (this))
+ from = LGLYPH_FROM (this);
+ if (to < LGLYPH_TO (this))
+ to = LGLYPH_TO (this);
}
}
+ if (j < i - 1)
+ for (; j < i; j++)
+ {
+ glyph = LGSTRING_GLYPH (gstring, j);
+ LGLYPH_SET_FROM (glyph, from);
+ LGLYPH_SET_TO (glyph, to);
+ }
return composition_gstring_put_cache (gstring, XINT (n));
}