Change the message to "available fonts".
[gnus] / lisp / nnheader.el
index d310489..b68ca94 100644 (file)
@@ -1,7 +1,7 @@
 ;;; nnheader.el --- header access macros for Gnus and its backends
 
 ;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996,
-;;        1997, 1998, 2000
+;;        1997, 1998, 2000, 2001
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 
 (eval-when-compile (require 'cl))
 
+;; Requiring `gnus-util' at compile time creates a circular
+;; dependency between nnheader.el and gnus-util.el.
+                            ;(eval-when-compile (require 'gnus-util))
+
 (require 'mail-utils)
 (require 'mm-util)
+(eval-and-compile
+  (autoload 'gnus-sorted-intersection "gnus-range")
+  (autoload 'gnus-intersection "gnus-range")
+  (autoload 'gnus-sorted-complement "gnus-range"))
 
 (defvar nnheader-max-head-length 4096
-  "*Max length of the head of articles.")
+  "*Max length of the head of articles.
+
+Value is an integer, nil, or t.  Nil means read in chunks of a file
+indefinitely until a complete head is found\; t means always read the
+entire file immediately, disregarding `nnheader-head-chop-length'.
+
+Integer values will in effect be rounded up to the nearest multiple of
+`nnheader-head-chop-length'.")
 
 (defvar nnheader-head-chop-length 2048
   "*Length of each read operation when trying to fetch HEAD headers.")
@@ -52,7 +67,7 @@ on your system, you could say something like:
   (autoload 'mail-position-on-field "sendmail")
   (autoload 'message-remove-header "message")
   (autoload 'gnus-point-at-eol "gnus-util")
-  (autoload 'gnus-delete-line "gnus-util")
+  (autoload 'gnus-delete-line "gnus-util" nil nil 'macro)
   (autoload 'gnus-buffer-live-p "gnus-util"))
 
 ;;; Header access macros.
@@ -168,13 +183,14 @@ on your system, you could say something like:
   (concat "fake+none+" (int-to-string (incf nnheader-fake-message-id))))
 
 (defsubst nnheader-fake-message-id-p (id)
-  (save-match-data                     ; regular message-id's are <.*>
+  (save-match-data                    ; regular message-id's are <.*>
     (string-match "\\`fake\\+none\\+[0-9]+\\'" id)))
 
 ;; Parsing headers and NOV lines.
 
 (defsubst nnheader-header-value ()
-  (buffer-substring (match-end 0) (gnus-point-at-eol)))
+  (skip-chars-forward " \t")
+  (buffer-substring (point) (gnus-point-at-eol)))
 
 (defun nnheader-parse-head (&optional naked)
   (let ((case-fold-search t)
@@ -211,18 +227,17 @@ on your system, you could say something like:
           ;; Subject.
           (progn
             (goto-char p)
-            (if (search-forward "\nsubject: " nil t)
+            (if (search-forward "\nsubject:" nil t)
                 (nnheader-header-value) "(none)"))
           ;; From.
           (progn
             (goto-char p)
-            (if (or (search-forward "\nfrom: " nil t)
-                    (search-forward "\nfrom:" nil t))
+            (if (search-forward "\nfrom:" nil t)
                 (nnheader-header-value) "(nobody)"))
           ;; Date.
           (progn
             (goto-char p)
-            (if (search-forward "\ndate: " nil t)
+            (if (search-forward "\ndate:" nil t)
                 (nnheader-header-value) ""))
           ;; Message-ID.
           (progn
@@ -238,12 +253,12 @@ on your system, you could say something like:
           ;; References.
           (progn
             (goto-char p)
-            (if (search-forward "\nreferences: " nil t)
+            (if (search-forward "\nreferences:" nil t)
                 (nnheader-header-value)
-              ;; Get the references from the in-reply-to header if there
+           ;; Get the references from the in-reply-to header if there
               ;; were no references and the in-reply-to header looks
               ;; promising.
-              (if (and (search-forward "\nin-reply-to: " nil t)
+              (if (and (search-forward "\nin-reply-to:" nil t)
                        (setq in-reply-to (nnheader-header-value))
                        (string-match "<[^\n>]+>" in-reply-to))
                   (let (ref2)
@@ -255,7 +270,7 @@ on your system, you could say something like:
                                             (match-end 0)))
                       (when (> (length ref2) (length ref))
                         (setq ref ref2)))
-                     ref)
+                    ref)
                 nil)))
           ;; Chars.
           0
@@ -269,7 +284,7 @@ on your system, you could say something like:
           ;; Xref.
           (progn
             (goto-char p)
-            (and (search-forward "\nxref: " nil t)
+            (and (search-forward "\nxref:" nil t)
                  (nnheader-header-value)))
 
           ;; Extra.
@@ -279,7 +294,7 @@ on your system, you could say something like:
               (while extra
                 (goto-char p)
                 (when (search-forward
-                       (concat "\n" (symbol-name (car extra)) ": ") nil t)
+                       (concat "\n" (symbol-name (car extra)) ":") nil t)
                   (push (cons (car extra) (nnheader-header-value))
                         out))
                 (pop extra))
@@ -467,8 +482,8 @@ the line could be found."
   (save-excursion
     (unless (gnus-buffer-live-p nntp-server-buffer)
       (setq nntp-server-buffer (get-buffer-create " *nntpd*")))
-    (mm-enable-multibyte)
     (set-buffer nntp-server-buffer)
+    (mm-enable-multibyte)
     (erase-buffer)
     (kill-all-local-variables)
     (setq case-fold-search t)          ;Should ignore case.
@@ -591,11 +606,17 @@ the line could be found."
     (string-match nnheader-numerical-short-files file)
     (string-to-int (match-string 0 file))))
 
+(defvar nnheader-directory-files-is-safe
+  (or (eq system-type 'windows-nt)
+      (and (not (featurep 'xemacs))
+          (> emacs-major-version 20)))
+  "If non-nil, Gnus believes `directory-files' is safe.
+It has been reported numerous times that `directory-files' fails with
+an alarming frequency on NFS mounted file systems. If it is nil,
+`nnheader-directory-files-safe' is used.")
+
 (defun nnheader-directory-files-safe (&rest args)
-  ;; It has been reported numerous times that `directory-files'
-  ;; fails with an alarming frequency on NFS mounted file systems.
-  ;; This function executes that function twice and returns
-  ;; the longest result.
+  "Execute `directory-files' twice and returns the longer result."
   (let ((first (apply 'directory-files args))
        (second (apply 'directory-files args)))
     (if (> (length first) (length second))
@@ -605,14 +626,20 @@ the line could be found."
 (defun nnheader-directory-articles (dir)
   "Return a list of all article files in directory DIR."
   (mapcar 'nnheader-file-to-number
-         (nnheader-directory-files-safe
-          dir nil nnheader-numerical-short-files t)))
+         (if nnheader-directory-files-is-safe
+             (directory-files
+              dir nil nnheader-numerical-short-files t)
+           (nnheader-directory-files-safe
+            dir nil nnheader-numerical-short-files t))))
 
 (defun nnheader-article-to-file-alist (dir)
   "Return an alist of article/file pairs in DIR."
   (mapcar (lambda (file) (cons (nnheader-file-to-number file) file))
-         (nnheader-directory-files-safe
-          dir nil nnheader-numerical-short-files t)))
+         (if nnheader-directory-files-is-safe
+             (directory-files
+              dir nil nnheader-numerical-short-files t)
+           (nnheader-directory-files-safe
+            dir nil nnheader-numerical-short-files t))))
 
 (defun nnheader-fold-continuation-lines ()
   "Fold continuation lines in the current buffer."
@@ -632,15 +659,15 @@ If FULL, translate everything."
                path ""
                i (if (and (< 1 (length leaf)) (eq ?: (aref leaf 1)))
                      2 0))
-       ;; We translate -- but only the file name.  We leave the directory
+    ;; We translate -- but only the file name.  We leave the directory
        ;; alone.
        (if (and (featurep 'xemacs)
-                (memq system-type '(win32 w32 mswindows windows-nt)))
+                (memq system-type '(cygwin32 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"
@@ -749,7 +776,7 @@ without formatting."
        ;; If not, we translate dots into slashes.
        (expand-file-name (mm-encode-coding-string
                           (nnheader-replace-chars-in-string group ?. ?/)
-                         nnheader-pathname-coding-system)
+                          nnheader-pathname-coding-system)
                          dir))))
    (cond ((null file) "")
         ((numberp file) (int-to-string file))
@@ -796,8 +823,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))
@@ -824,7 +852,7 @@ find-file-hooks, etc.
        (auto-mode-alist (mm-auto-mode-alist))
        (default-major-mode 'fundamental-mode)
        (enable-local-variables nil)
-        (after-insert-file-functions nil)
+       (after-insert-file-functions nil)
        (enable-local-eval nil)
        (find-file-hooks nil)
        (coding-system-for-read nnheader-file-coding-system))
@@ -885,6 +913,7 @@ find-file-hooks, etc.
 (defalias 'nnheader-run-at-time 'run-at-time)
 (defalias 'nnheader-cancel-timer 'cancel-timer)
 (defalias 'nnheader-cancel-function-timers 'cancel-function-timers)
+(defalias 'nnheader-string-as-multibyte 'string-as-multibyte)
 
 (when (featurep 'xemacs)
   (require 'nnheaderxm))