]> git.eshelyaron.com Git - emacs.git/commitdiff
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
authorKenichi Handa <handa@m17n.org>
Wed, 10 Sep 2008 05:54:23 +0000 (05:54 +0000)
committerKenichi Handa <handa@m17n.org>
Wed, 10 Sep 2008 05:54:23 +0000 (05:54 +0000)
compose a grapheme cluster with the preceding base glyph.

src/ChangeLog
src/font.c

index 5fbadba60602279f774359ccdcbd524c2aed3533..b8333c6bb25248639d3278663ec16d3d9bde91c8 100644 (file)
@@ -1,3 +1,10 @@
+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.
index 340b69869a1e932e56571e43cd2766785af94325..ba05b57a00137379566b52f80657fbad48de9940 100644 (file)
@@ -4224,7 +4224,7 @@ created glyph-string.  Otherwise, the value is nil.  */)
 {
   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);
@@ -4250,23 +4250,42 @@ created glyph-string.  Otherwise, the value is nil.  */)
     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));
 }