Synch to No Gnus 200510111141.
[elisp/gnus.git-] / lisp / gnus-range.el
index ffe47c1..641fead 100644 (file)
@@ -1,7 +1,7 @@
 ;;; gnus-range.el --- range and sequence functions for Gnus
 
 ;;; gnus-range.el --- range and sequence functions for Gnus
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004
-;;        Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -20,8 +20,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
 
 ;;; Commentary:
 
@@ -189,9 +189,19 @@ LIST1 and LIST2 have to be sorted over <."
 RANGE1 and RANGE2 have to be sorted over <."
   (let* (out
          (min1 (car range1))
 RANGE1 and RANGE2 have to be sorted over <."
   (let* (out
          (min1 (car range1))
-         (max1 (if (numberp min1) min1 (prog1 (cdr min1) (setq min1 (car min1)))))
+         (max1 (if (numberp min1) 
+                   (if (numberp (cdr range1))
+                       (prog1 (cdr range1)
+                         (setq range1 nil)) min1)
+                 (prog1 (cdr min1)
+                   (setq min1 (car min1)))))
          (min2 (car range2))
          (min2 (car range2))
-         (max2 (if (numberp min2) min2 (prog1 (cdr min2) (setq min2 (car min2))))))
+         (max2 (if (numberp min2)
+                   (if (numberp (cdr range2))
+                       (prog1 (cdr range2) 
+                         (setq range2 nil)) min2) 
+                 (prog1 (cdr min2)
+                   (setq min2 (car min2))))))
     (setq range1 (cdr range1)
           range2 (cdr range2))
     (while (and min1 min2)
     (setq range1 (cdr range1)
           range2 (cdr range2))
     (while (and min1 min2)
@@ -218,7 +228,12 @@ RANGE1 and RANGE2 have to be sorted over <."
         (setq min2 (car range2)
               max2 (if (numberp min2) min2 (prog1 (cdr min2) (setq min2 (car min2))))
               range2 (cdr range2))))
         (setq min2 (car range2)
               max2 (if (numberp min2) min2 (prog1 (cdr min2) (setq min2 (car min2))))
               range2 (cdr range2))))
-    (nreverse out)))
+    (cond ((cdr out)
+        (nreverse out))
+          ((numberp (car out))
+           out)
+          (t
+           (car out)))))
 
 ;;;###autoload
 (defalias 'gnus-set-sorted-intersection 'gnus-sorted-nintersection)
 
 ;;;###autoload
 (defalias 'gnus-set-sorted-intersection 'gnus-sorted-nintersection)
@@ -628,6 +643,7 @@ LIST is a sorted list."
 
 (defun gnus-range-map (func range)
   "Apply FUNC to each value contained by RANGE."
 
 (defun gnus-range-map (func range)
   "Apply FUNC to each value contained by RANGE."
+  (setq range (gnus-range-normalize range))
   (while range
     (let ((span (pop range)))
       (if (numberp span)
   (while range
     (let ((span (pop range)))
       (if (numberp span)