changeset 4004:71541ea16adf

* fns.c (Fsubstring, concat): Pass all six arguments to copy_text_properties. * textprop.c (copy_text_properties): New function, from David Gillespie. * intervals.h: Declare copy_text_properties. * fns.c: #include "intervals.h". (Fsubstring): Copy text properties to result string. (concat): Copy text properties to result string. * ymakefile (fns.o): Note that this depends on INTERVAL_SRC.
author Jim Blandy <jimb@redhat.com>
date Tue, 06 Jul 1993 14:43:32 +0000
parents 49918d6c6dda
children da8962f65741
files src/fns.c
diffstat 1 files changed, 16 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/fns.c	Tue Jul 06 07:44:36 1993 +0000
+++ b/src/fns.c	Tue Jul 06 14:43:32 1993 +0000
@@ -30,6 +30,7 @@
 
 #include "buffer.h"
 #include "keyboard.h"
+#include "intervals.h"
 
 Lisp_Object Qstring_lessp, Qprovide, Qrequire;
 
@@ -305,11 +306,19 @@
       if (!CONSP (this))
 	thislen = Flength (this), thisleni = XINT (thislen);
 
+      if (XTYPE (this) == Lisp_String && XTYPE (val) == Lisp_String
+	  && ! NULL_INTERVAL_P (XSTRING (this)->intervals))
+	{
+	  copy_text_properties (make_number (0), thislen, this,
+				make_number (toindex), val, Qnil);
+	}
+
       while (1)
 	{
 	  register Lisp_Object elt;
 
-	  /* Fetch next element of `this' arg into `elt', or break if `this' is exhausted. */
+	  /* Fetch next element of `this' arg into `elt', or break if
+             `this' is exhausted. */
 	  if (NILP (this)) break;
 	  if (CONSP (this))
 	    elt = Fcar (this), this = Fcdr (this);
@@ -389,6 +398,8 @@
      Lisp_Object string;
      register Lisp_Object from, to;
 {
+  Lisp_Object res;
+
   CHECK_STRING (string, 0);
   CHECK_NUMBER (from, 1);
   if (NILP (to))
@@ -404,8 +415,10 @@
         && XINT (to) <= XSTRING (string)->size))
     args_out_of_range_3 (string, from, to);
 
-  return make_string (XSTRING (string)->data + XINT (from),
-		      XINT (to) - XINT (from));
+  res = make_string (XSTRING (string)->data + XINT (from),
+		     XINT (to) - XINT (from));
+  copy_text_properties (from, to, string, make_number (0), res, Qnil);
+  return res;
 }
 
 DEFUN ("nthcdr", Fnthcdr, Snthcdr, 2, 2, 0,