]> git.eshelyaron.com Git - emacs.git/commitdiff
* fns.c (Fsubstring, concat): Pass all six arguments to
authorJim Blandy <jimb@redhat.com>
Tue, 6 Jul 1993 14:43:32 +0000 (14:43 +0000)
committerJim Blandy <jimb@redhat.com>
Tue, 6 Jul 1993 14:43:32 +0000 (14:43 +0000)
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.

src/fns.c

index 97f3606bc010f0d6150d5021e122f0b3ed197a9e..18d645dcd17ed86deb16b1283b8306e50c0a69fa 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -30,6 +30,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "buffer.h"
 #include "keyboard.h"
+#include "intervals.h"
 
 Lisp_Object Qstring_lessp, Qprovide, Qrequire;
 
@@ -305,11 +306,19 @@ concat (nargs, args, target_type, last_special)
       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 @@ If FROM or TO is negative, it counts from the end.")
      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 @@ If FROM or TO is negative, it counts from the end.")
         && 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;
 }
 \f
 DEFUN ("nthcdr", Fnthcdr, Snthcdr, 2, 2, 0,