changeset 40921:95756d215716

(set_text_properties_1): New subroutine, broken out of set_text_properties. (set_text_properties): Use set_text_properties_1.
author Richard M. Stallman <rms@gnu.org>
date Sun, 11 Nov 2001 20:03:24 +0000
parents eb5f176de735
children 9147103247c9
files src/textprop.c
diffstat 1 files changed, 35 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/src/textprop.c	Sun Nov 11 20:02:58 2001 +0000
+++ b/src/textprop.c	Sun Nov 11 20:03:24 2001 +0000
@@ -1290,11 +1290,36 @@
 	return Qnil;
     }
 
+  if (BUFFERP (object))
+    modify_region (XBUFFER (object), XINT (start), XINT (end));
+
+  set_text_properties_1 (start, end, properties, object, i);
+
+  if (BUFFERP (object) && !NILP (signal_after_change_p))
+    signal_after_change (XINT (start), XINT (end) - XINT (start),
+			 XINT (end) - XINT (start));
+  return Qt;
+}
+
+/* Replace properties of text from START to END with new list of
+   properties PROPERTIES.  BUFFER is the buffer containing
+   the text.  This does not obey any hooks.
+   You can provide the interval that START is located in as I,
+   or pass NULL for I and this function will find it.  */
+
+void
+set_text_properties_1 (start, end, properties, buffer, i)
+     Lisp_Object start, end, properties, buffer;
+     INTERVAL i;
+{
+  register INTERVAL prev_changed = NULL_INTERVAL;
+  register int s, len;
+  INTERVAL unchanged;
+
   s = XINT (start);
   len = XINT (end) - s;
-
-  if (BUFFERP (object))
-    modify_region (XBUFFER (object), XINT (start), XINT (end));
+  if (i == 0)
+    i = find_interval (BUF_INTERVALS (XBUFFER (buffer)), s);
 
   if (i->position != s)
     {
@@ -1305,24 +1330,14 @@
 	{
 	  copy_properties (unchanged, i);
 	  i = split_interval_left (i, len);
-	  set_properties (properties, i, object);
-	  if (BUFFERP (object) && !NILP (signal_after_change_p))
-	    signal_after_change (XINT (start), XINT (end) - XINT (start),
-				 XINT (end) - XINT (start));
-
-	  return Qt;
+	  set_properties (properties, i, buffer);
+	  return;
 	}
 
-      set_properties (properties, i, object);
+      set_properties (properties, i, buffer);
 
       if (LENGTH (i) == len)
-	{
-	  if (BUFFERP (object) && !NILP (signal_after_change_p))
-	    signal_after_change (XINT (start), XINT (end) - XINT (start),
-				 XINT (end) - XINT (start));
-
-	  return Qt;
-	}
+	return;
 
       prev_changed = i;
       len -= LENGTH (i);
@@ -1343,13 +1358,10 @@
 	  /* We have to call set_properties even if we are going to
 	     merge the intervals, so as to make the undo records
 	     and cause redisplay to happen.  */
-	  set_properties (properties, i, object);
+	  set_properties (properties, i, buffer);
 	  if (!NULL_INTERVAL_P (prev_changed))
 	    merge_interval_left (i);
-	  if (BUFFERP (object) && !NILP (signal_after_change_p))
-	    signal_after_change (XINT (start), XINT (end) - XINT (start),
-				 XINT (end) - XINT (start));
-	  return Qt;
+	  return;
 	}
 
       len -= LENGTH (i);
@@ -1357,7 +1369,7 @@
       /* We have to call set_properties even if we are going to
 	 merge the intervals, so as to make the undo records
 	 and cause redisplay to happen.  */
-      set_properties (properties, i, object);
+      set_properties (properties, i, buffer);
       if (NULL_INTERVAL_P (prev_changed))
 	prev_changed = i;
       else
@@ -1365,11 +1377,6 @@
 
       i = next_interval (i);
     }
-
-  if (BUFFERP (object) && !NILP (signal_after_change_p))
-    signal_after_change (XINT (start), XINT (end) - XINT (start),
-			 XINT (end) - XINT (start));
-  return Qt;
 }
 
 DEFUN ("remove-text-properties", Fremove_text_properties,