comment
[bpt/emacs.git] / lisp / gnus / nnheader.el
index 848d7e4..68f5f4e 100644 (file)
@@ -33,6 +33,9 @@
 
 (require 'mail-utils)
 (require 'mm-util)
+(eval-and-compile
+  (autoload 'gnus-intersection "gnus-range")
+  (autoload 'gnus-sorted-complement "gnus-range"))
 
 (defvar nnheader-max-head-length 4096
   "*Max length of the head of articles.")
@@ -216,7 +219,8 @@ on your system, you could say something like:
           ;; From.
           (progn
             (goto-char p)
-            (if (search-forward "\nfrom: " nil t)
+            (if (or (search-forward "\nfrom: " nil t)
+                    (search-forward "\nfrom:" nil t))
                 (nnheader-header-value) "(nobody)"))
           ;; Date.
           (progn
@@ -633,11 +637,26 @@ If FULL, translate everything."
                      2 0))
        ;; We translate -- but only the file name.  We leave the directory
        ;; alone.
-       (if (string-match "/[^/]+\\'" file)
-           ;; This is needed on NT's and stuff.
-           (setq leaf (substring file (1+ (match-beginning 0)))
-                 path (substring file 0 (1+ (match-beginning 0))))
-         ;; Fall back on this.
+       (if (and (featurep 'xemacs)
+                (memq system-type '(win32 w32 mswindows windows-nt)))
+           ;; This is needed on NT and stuff, because
+           ;; file-name-nondirectory is not enough to split
+           ;; file names, containing ':', e.g.
+           ;; "d:\\Work\\News\\nntp+news.fido7.ru:fido7.ru.gnu.SCORE"
+           ;; 
+           ;; we are trying to correctly split such names:
+           ;; "d:file.name" -> "a:" "file.name"
+           ;; "aaa:bbb.ccc" -> "" "aaa:bbb.ccc"
+           ;; "d:aaa\\bbb:ccc"   -> "d:aaa\\" "bbb:ccc"
+           ;; etc.
+           ;; to translate then only the file name part.
+           (progn
+             (setq leaf file
+                   path "")
+             (if (string-match "\\(^\\w:\\|[/\\]\\)\\([^/\\]+\\)$" file)
+                 (setq leaf (substring file (match-beginning 2))
+                       path (substring file 0 (match-beginning 2)))))
+         ;; Emacs DTRT, says andrewi.
          (setq leaf (file-name-nondirectory file)
                path (file-name-directory file))))
       (setq len (length leaf))
@@ -676,20 +695,21 @@ without formatting."
       (apply 'insert format args))
     t))
 
-(if (fboundp 'subst-char-in-string)
-    (defsubst nnheader-replace-chars-in-string (string from to)
-      (subst-char-in-string from to string))
-  (defun nnheader-replace-chars-in-string (string from to)
-    "Replace characters in STRING from FROM to TO."
-    (let ((string (substring string 0))        ;Copy string.
-         (len (length string))
-         (idx 0))
-      ;; Replace all occurrences of FROM with TO.
-      (while (< idx len)
-       (when (= (aref string idx) from)
-         (aset string idx to))
-       (setq idx (1+ idx)))
-      string)))
+(eval-and-compile
+  (if (fboundp 'subst-char-in-string)
+      (defsubst nnheader-replace-chars-in-string (string from to)
+       (subst-char-in-string from to string))
+    (defun nnheader-replace-chars-in-string (string from to)
+      "Replace characters in STRING from FROM to TO."
+      (let ((string (substring string 0)) ;Copy string.
+           (len (length string))
+           (idx 0))
+       ;; Replace all occurrences of FROM with TO.
+       (while (< idx len)
+         (when (= (aref string idx) from)
+           (aset string idx to))
+         (setq idx (1+ idx)))
+       string))))
 
 (defun nnheader-replace-duplicate-chars-in-string (string from to)
   "Replace characters in STRING from FROM to TO."
@@ -792,8 +812,9 @@ If FILE, find the \".../etc/PACKAGE\" file instead."
        (setq path (cdr path))))
     result))
 
-(defvar ange-ftp-path-format)
-(defvar efs-path-regexp)
+(eval-when-compile
+  (defvar ange-ftp-path-format)
+  (defvar efs-path-regexp))
 (defun nnheader-re-read-dir (path)
   "Re-read directory PATH if PATH is on a remote system."
   (if (and (fboundp 'efs-re-read-dir) (boundp 'efs-path-regexp))
@@ -882,7 +903,7 @@ find-file-hooks, etc.
 (defalias 'nnheader-cancel-timer 'cancel-timer)
 (defalias 'nnheader-cancel-function-timers 'cancel-function-timers)
 
-(when (string-match "XEmacs" emacs-version)
+(when (featurep 'xemacs)
   (require 'nnheaderxm))
 
 (run-hooks 'nnheader-load-hook)