*** empty log message ***
[gnus] / lisp / gnus-logic.el
index 4756b14..0a6b442 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-logic.el --- advanced scoring code for Gnus
-;; Copyright (C) 1996 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
 ;; Keywords: news
 
 ;;; Code:
 
-(require 'gnus-load)
+(require 'gnus)
 (require 'gnus-score)
-;(require 'parse-time)
 (require 'gnus-util)
 
-;;; Internal variables. 
+;;; Internal variables.
 
 (defvar gnus-advanced-headers nil)
 
-;; To avoid having 8-bit charaters in the source file.
+;; To avoid having 8-bit characters in the source file.
 (defvar gnus-advanced-not (intern (format "%c" 172)))
 
 (defconst gnus-advanced-index
     ("subject" 1 gnus-advanced-string)
     ("from" 2 gnus-advanced-string)
     ("date" 3 gnus-advanced-date)
-    ("message-id" 4 gnus-advanced-string) 
-    ("references" 5 gnus-advanced-string) 
-    ("chars" 6 gnus-advanced-integer) 
-    ("lines" 7 gnus-advanced-integer) 
+    ("message-id" 4 gnus-advanced-string)
+    ("references" 5 gnus-advanced-string)
+    ("chars" 6 gnus-advanced-integer)
+    ("lines" 7 gnus-advanced-integer)
     ("xref" 8 gnus-advanced-string)
     ("head" nil gnus-advanced-body)
     ("body" nil gnus-advanced-body)
     ("all" nil gnus-advanced-body)))
-     
+
+(eval-and-compile
+  (autoload 'parse-time-string "parse-time"))
+
 (defun gnus-score-advanced (rule &optional trace)
   "Apply advanced scoring RULE to all the articles in the current group."
   (let ((headers gnus-newsgroup-headers)
        (if (setq score (assq (mail-header-number gnus-advanced-headers)
                              gnus-newsgroup-scored))
            (setcdr score
-                   (+ (cdr score) 
+                   (+ (cdr score)
                       (or (nth 1 rule)
                           gnus-score-interactive-default-score)))
          (push (cons (mail-header-number gnus-advanced-headers)
-                      (or (nth 1 rule)
-                          gnus-score-interactive-default-score))
+                     (or (nth 1 rule)
+                         gnus-score-interactive-default-score))
                gnus-newsgroup-scored)
          (when trace
            (push (cons "A file" rule)
 (defun gnus-advanced-score-rule (rule)
   "Apply RULE to `gnus-advanced-headers'."
   (let ((type (car rule)))
-    (cond 
+    (cond
      ;; "And" rule.
      ((or (eq type '&) (eq type 'and))
       (pop rule)
       (if (not rule)
          t                             ; Empty rule is true.
        (while (and rule
-                   (gnus-advanced-score-rule (pop rule))))
+                   (gnus-advanced-score-rule (car rule)))
+         (pop rule))
        ;; If all the rules were true, then `rule' should be nil.
        (not rule)))
      ;; "Or" rule.
      ;; This is a `1-'-type redirection rule.
      ((and (symbolp type)
           (string-match "^[0-9]+-$\\|^\\^+$" (symbol-name type)))
-      (let ((gnus-advanced-headers 
+      (let ((gnus-advanced-headers
             (gnus-parent-headers
              gnus-advanced-headers
              (if (string-match "^\\([0-9]+\\)-$" (symbol-name type))
   (let ((date (encode-time (parse-time-string
                            (aref gnus-advanced-headers index))))
        (match (encode-time (parse-time-string match))))
-    (cond 
+    (cond
      ((eq type 'at)
       (equal date match))
      ((eq type 'before)
           ofunc article)
       ;; Not all backends support partial fetching.  In that case,
       ;; we just fetch the entire article.
-      (unless (gnus-check-backend-function 
+      (unless (gnus-check-backend-function
               (intern (concat "request-" header))
               gnus-newsgroup-name)
        (setq ofunc request-func)
        ;; If just parts of the article is to be searched and the
        ;; backend didn't support partial fetching, we just narrow
        ;; to the relevant parts.
-       (if ofunc
-           (if (eq ofunc 'gnus-request-head)
-               (narrow-to-region
-                (point)
-                (or (search-forward "\n\n" nil t) (point-max)))
+       (when ofunc
+         (if (eq ofunc 'gnus-request-head)
              (narrow-to-region
-              (or (search-forward "\n\n" nil t) (point))
-              (point-max))))
+              (point)
+              (or (search-forward "\n\n" nil t) (point-max)))
+           (narrow-to-region
+            (or (search-forward "\n\n" nil t) (point))
+            (point-max))))
        (let* ((case-fold-search (not (eq (downcase (symbol-name type))
                                          (symbol-name type))))
-              (search-func 
+              (search-func
                (cond ((memq type '(r R regexp Regexp))
                       're-search-forward)
                      ((memq type '(s S string String))