diff src/extents.c @ 819:6504113e7c2d

[xemacs-hg @ 2002-04-25 18:03:23 by andyp] sync up windows branch from 21.4
author andyp
date Thu, 25 Apr 2002 18:04:24 +0000
parents 2b676dc88c66
children 6728e641994e
line wrap: on
line diff
--- a/src/extents.c	Thu Apr 25 06:09:18 2002 +0000
+++ b/src/extents.c	Thu Apr 25 18:04:24 2002 +0000
@@ -2754,9 +2754,10 @@
 
 face_index
 extent_fragment_update (struct window *w, struct extent_fragment *ef,
-			Bytebpos pos)
+			Bytebpos pos, Lisp_Object last_glyph)
 {
   int i;
+  int seen_glyph = NILP (last_glyph) ? 1 : 0;
   Extent_List *sel =
     buffer_or_string_stack_of_extents_force (ef->object)->extents;
   EXTENT lhe = 0;
@@ -2797,11 +2798,15 @@
       if (extent_start (e) == mempos && !NILP (extent_begin_glyph (e)))
 	{
 	  Lisp_Object glyph = extent_begin_glyph (e);
-	  struct glyph_block gb;
-
-	  gb.glyph = glyph;
-	  gb.extent = wrap_extent (e);
-	  Dynarr_add (ef->begin_glyphs, gb);
+	  if (seen_glyph) {
+	    struct glyph_block gb;
+	    
+	    gb.glyph = glyph;
+	    gb.extent = wrap_extent (e);
+	    Dynarr_add (ef->begin_glyphs, gb);
+	  }
+	  else if (EQ (glyph, last_glyph))
+	    seen_glyph = 1;
 	}
     }
 
@@ -2812,11 +2817,15 @@
       if (extent_end (e) == mempos && !NILP (extent_end_glyph (e)))
 	{
 	  Lisp_Object glyph = extent_end_glyph (e);
-	  struct glyph_block gb;
-
-	  gb.glyph = glyph;
-	  gb.extent = wrap_extent (e);
-	  Dynarr_add (ef->end_glyphs, gb);
+	  if (seen_glyph) {
+	    struct glyph_block gb;
+
+	    gb.glyph = glyph;
+	    gb.extent = wrap_extent (e);
+	    Dynarr_add (ef->end_glyphs, gb);
+	  }
+	  else if (EQ (glyph, last_glyph))
+	    seen_glyph = 1;
 	}
     }
 
@@ -2951,9 +2960,9 @@
   if (extent_detached_p (ext))
     strcpy (bp, "detached");
   else
-    sprintf (bp, "%ld, %ld",
-	     (long) XINT (Fextent_start_position (obj)),
-	     (long) XINT (Fextent_end_position (obj)));
+    sprintf (bp, "%d, %d",
+	     XINT (Fextent_start_position (obj)),
+	     XINT (Fextent_end_position (obj)));
   bp += strlen (bp);
   *bp++ = (extent_end_open_p (anc) ? ')': ']');
   if (!NILP (extent_end_glyph (anc))) *bp++ = '*';