gnus: Advanced Scoring Syntax

 
 7.15.1 Advanced Scoring Syntax
 ------------------------------
 
 Ordinary scoring rules have a string as the first element in the rule.
 Advanced scoring rules have a list as the first element.  The second
 element is the score to be applied if the first element evaluated to a
 non-‘nil’ value.
 
    These lists may consist of three logical operators, one redirection
 operator, and various match operators.
 
    Logical operators:
 
 ‘&’
 ‘and’
      This logical operator will evaluate each of its arguments until it
      finds one that evaluates to ‘false’, and then it’ll stop.  If all
      arguments evaluate to ‘true’ values, then this operator will return
      ‘true’.
 
 ‘|’
 ‘or’
      This logical operator will evaluate each of its arguments until it
      finds one that evaluates to ‘true’.  If no arguments are ‘true’,
      then this operator will return ‘false’.
 
 ‘!’
 ‘not’
 ‘¬’
      This logical operator only takes a single argument.  It returns the
      logical negation of the value of its argument.
 
    There is an “indirection operator” that will make its arguments apply
 to the ancestors of the current article being scored.  For instance,
 ‘1-’ will make score rules apply to the parent of the current article.
 ‘2-’ will make score rules apply to the grandparent of the current
 article.  Alternatively, you can write ‘^^’, where the number of ‘^’s
 (carets) says how far back into the ancestry you want to go.
 
    Finally, we have the match operators.  These are the ones that do the
 real work.  Match operators are header name strings followed by a match
 and a match type.  A typical match operator looks like ‘("from" "Lars
 Ingebrigtsen" s)’.  The header names are the same as when using simple
 scoring, and the match types are also the same.