This commit was generated by cvs2svn to compensate for changes in r355,
[chise/xemacs-chise.git.1] / lisp / subr.el
index e1a2a29..9adf57e 100644 (file)
@@ -294,10 +294,14 @@ Otherwise treat \\ in NEWTEXT string as special:
 If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"."
   (or pattern
       (setq pattern "[ \f\t\n\r\v]+"))
-  ;; The FSF version of this function takes care not to cons in case
-  ;; of infloop.  Maybe we should synch?
-  (let (parts (start 0))
-    (while (string-match pattern string start)
+  (let (parts (start 0) (len (length string)))
+    (if (string-match pattern string)
+       (setq parts (cons (substring string 0 (match-beginning 0)) parts)
+             start (match-end 0)))
+    (while (and (< start len)
+               (string-match pattern string (if (> start (match-beginning 0))
+                                                start
+                                              (1+ start))))
       (setq parts (cons (substring string start (match-beginning 0)) parts)
            start (match-end 0)))
     (nreverse (cons (substring string start) parts))))
@@ -614,6 +618,28 @@ If FUNCTION is not interactive, nil will be returned."
        (t
         (error "Non-funcallable object: %s" function))))
 
+;; This function used to be an alias to `buffer-substring', except
+;; that FSF Emacs 20.4 added a BUFFER argument in an incompatible way.
+;; The new FSF's semantics makes more sense, but we try to support
+;; both for backward compatibility.
+(defun buffer-string (&optional buffer old-end old-buffer)
+  "Return the contents of the current buffer as a string.
+If narrowing is in effect, this function returns only the visible part
+of the buffer.
+
+If BUFFER is specified, the contents of that buffer are returned.
+
+The arguments OLD-END and OLD-BUFFER are supported for backward
+compatibility with pre-21.2 XEmacsen times when arguments to this
+function were (buffer-string &optional START END BUFFER)."
+  (if (or (null buffer)
+         (bufferp buffer)
+         (stringp buffer))
+      ;; The new way
+      (buffer-substring nil nil buffer)
+    ;; The old way
+    (buffer-substring buffer old-end old-buffer)))
+
 ;; This was not present before.  I think Jamie had some objections
 ;; to this, so I'm leaving this undefined for now. --ben
 
@@ -667,6 +693,5 @@ FILE should be the name of a library, with no directory name."
 (define-function 'remove-directory 'delete-directory)
 (define-function 'set-match-data 'store-match-data)
 (define-function 'send-string-to-terminal 'external-debugging-output)
-(define-function 'buffer-string 'buffer-substring)
 
 ;;; subr.el ends here