changeset 3553:5f9688c0b704

(Fadd_text_properties): Don't treat the initial interval specially, aside from splitting off the part starting where we want to start changing things. (Fremove_text_properties): Likewise. For ending interval, split it left as in Fadd_text_properties. (Fset_text_properties): Don't set starting interval if it goes past END. Instead, split it left and set the left part.
author Richard M. Stallman <rms@gnu.org>
date Mon, 07 Jun 1993 22:17:35 +0000
parents 84fded047f22
children de3a70b61bbe
files src/textprop.c
diffstat 1 files changed, 9 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/src/textprop.c	Mon Jun 07 20:06:34 1993 +0000
+++ b/src/textprop.c	Mon Jun 07 22:17:35 1993 +0000
@@ -649,22 +649,10 @@
 	  unchanged = i;
 	  i = split_interval_right (unchanged, s - unchanged->position + 1);
 	  copy_properties (unchanged, i);
-	  if (LENGTH (i) > len)
-	    {
-	      i = split_interval_left (i, len + 1);
-	      copy_properties (unchanged, i);
-	      add_properties (properties, i, object);
-	      return Qt;
-	    }
-
-	  add_properties (properties, i, object);
-	  modified = 1;
-	  len -= LENGTH (i);
-	  i = next_interval (i);
 	}
     }
 
-  /* We are at the beginning of an interval, with len to scan */
+  /* We are at the beginning of interval I, with LEN chars to scan.  */
   for (;;)
     {
       if (i == 0)
@@ -742,15 +730,17 @@
     {
       unchanged = i;
       i = split_interval_right (unchanged, s - unchanged->position + 1);
-      set_properties (props, i, object);
 
       if (LENGTH (i) > len)
 	{
-	  i = split_interval_right (i, len);
 	  copy_properties (unchanged, i);
+	  i = split_interval_left (i, len + 1);
+	  set_properties (props, i, object);
 	  return Qt;
 	}
 
+      set_properties (props, i, object);
+
       if (LENGTH (i) == len)
 	return Qt;
 
@@ -828,25 +818,13 @@
 	    return Qnil;
 	  len -= got;
 	}
-      /* Remove the properties from this interval.  If it's short
-         enough, return, splitting it if it's too short. */
+      /* Split away the beginning of this interval; what we don't
+	 want to modify.  */
       else
 	{
 	  unchanged = i;
 	  i = split_interval_right (unchanged, s - unchanged->position + 1);
 	  copy_properties (unchanged, i);
-	  if (LENGTH (i) > len)
-	    {
-	      i = split_interval_left (i, len + 1);
-	      copy_properties (unchanged, i);
-	      remove_properties (props, i, object);
-	      return Qt;
-	    }
-
-	  remove_properties (props, i, object);
-	  modified = 1;
-	  len -= LENGTH (i);
-	  i = next_interval (i);
 	}
     }
 
@@ -868,7 +846,8 @@
 	    }
 
 	  /* i has the properties, and goes past the change limit */
-	  unchanged = split_interval_right (i, len + 1);
+	  unchanged = i;
+	  i = split_interval_left (i, len + 1);
 	  copy_properties (unchanged, i);
 	  remove_properties (props, i, object);
 	  return Qt;