Go forward to Emacs/XEmacs Code.
Go backward to Ranges.
Go up to A Programmers Guide to Gnus.

Group Info
----------

   Gnus stores all permanent info on groups in a "group info" list.
This list is from three to six elements (or more) long and exhaustively
describes the group.

   Here are two example group infos; one is a very simple group while
the second is a more complex one:

     ("no.group" 5 (1 . 54324))
     
     ("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
                     ((tick (15 . 19)) (replied 3 6 (19 . 3)))
                     (nnml "")
                     (auto-expire (to-address "ding@ifi.uio.no")))

   The first element is the group name as Gnus knows the group; the
second is the group level; the third is the read articles in range
format; the fourth is a list of article marks lists; the fifth is the
select method; and the sixth contains the group parameters.

   Here's a BNF definition of the group info format:

     info          = "(" group space level space read
                     [ "" / [ space marks-list [ "" / [ space method [ "" /
                     space parameters ] ] ] ] ] ")"
     group         = quote <string> quote
     level         = <integer in the range of 1 to inf>
     read          = range
     marks-lists   = nil / "(" *marks ")"
     marks         = "(" <string> range ")"
     method        = "(" <string> *elisp-forms ")"
     parameters    = "(" *elisp-forms ")"

   Actually that `marks' rule is a fib.  A `marks' is a `<string>'
consed on to a `range', but that's a bitch to say in pseudo-BNF.