Function: gnus-advanced-score-rule
gnus-advanced-score-rule is a byte-compiled function defined in
gnus-logic.el.gz.
Signature
(gnus-advanced-score-rule RULE)
Documentation
Apply RULE to gnus-advanced-headers.
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/gnus-logic.el.gz
(defun gnus-advanced-score-rule (rule)
"Apply RULE to `gnus-advanced-headers'."
(let ((type (car rule)))
(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 (car rule)))
(pop rule))
;; If all the rules were true, then `rule' should be nil.
(not rule)))
;; "Or" rule.
((or (eq type '|) (eq type 'or))
(pop rule)
(if (not rule)
nil
(while (and rule
(not (gnus-advanced-score-rule (car rule))))
(pop rule))
;; If one of the rules returned true, then `rule' should be non-nil.
rule))
;; "Not" rule.
((or (eq type '!) (eq type 'not) (eq type gnus-advanced-not))
(not (gnus-advanced-score-rule (nth 1 rule))))
;; This is a `1-'-type redirection rule.
((and (symbolp type)
(string-match "^[0-9]+-$\\|^\\^+$" (symbol-name type)))
(let ((gnus-advanced-headers
(gnus-parent-headers
gnus-advanced-headers
(if (string-match "^\\([0-9]+\\)-$" (symbol-name type))
;; 1- type redirection.
(string-to-number
(substring (symbol-name type)
(match-beginning 1) (match-end 1)))
;; ^^^ type redirection.
(length (symbol-name type))))))
(when gnus-advanced-headers
(gnus-advanced-score-rule (nth 1 rule)))))
;; Plain scoring rule.
((stringp type)
(gnus-advanced-score-article rule))
;; Bug-out time!
(t
(error "Unknown advanced score type: %s" rule)))))