Draft 18 is already at the Internet-drafts editor, although it doesn't
seem to be on the FTP server yet. I've been beating my head over the
alleged ambiguities and contradictions in the definition of sequence
sets all day with considerable frustration.
Here's what I've come up with, which I propose to do in a draft 19. Not
only does this emphasize order independence in ranges, but it also gives
the example (twice) of why a client needs such a thing (and why there are
existing clients which depend upon it).
Please let me know if this on the right track, before I submit draft 19.
Change 1:
All occurances of "message set" are renamed to "sequence set"
Change 2:
After:
Note: in the above example, the UID set range 443:557
appears. The same comment about a non-existent unique
identifier being ignored without any error message also
applies here.
add the following new text:
[...] Hence, even if neither UID 443 or 557
exist, this range is valid and would include an existing
UID 495.
Also, since the contents of a range are independent of
the order of the range endpoints, note that a UID set
range of 559:* always includes the UID of the last
message in the mailbox, even if 559 is higher than any
assigned UID value. Thus, a UID range of 559:* always
indicates at least one message, unless the mailbox is
empty.
Change 3:
Replace old grammar:
sequence-num = nz-number / "*"
; * is the largest number in use. For message
; sequence numbers, it is the number of messages
; in the mailbox. For unique identifiers, it is
; the unique identifier of the last message in
; the mailbox.
set = sequence-num / (sequence-num ":" sequence-num) /
(set "," set)
; Identifies a set of messages. For message
; sequence numbers, these are consecutive
; numbers from 1 to the number of messages in
; the mailbox
; Comma delimits individual numbers, colon
; delimits between two numbers inclusive. Note
; that n:m and m:n are equivalent.
; Example: 2,4:7,9,12:* is 2,4,5,6,7,9,12,13,
; 14,15 for a mailbox with 15 messages.
with the following:
seq-number = nz-number / "*"
; message sequence number (COPY, FETCH, STORE
; commands) or unique identifier (UID COPY,
; UID FETCH, UID STORE commands).
; * is the largest number in use. For message
; sequence numbers, it is the number of messages
; in the mailbox. For unique identifiers, it is
; the unique identifier of the last message in
; the mailbox.
seq-range = seq-number ":" seq-number
; two seq-number values and all values between
; these two regardless of order.
; Example: 2:4 and 4:2 are equivalent and indicate
; values 2, 3, and 4.
; Example: a unique identifer sequence range of
; 3291:* includes the UID of the last message in
; the mailbox, even if that value is less than 3291.
sequence-set = (seq-number / seq-range) / *("," sequence-set)
; set of seq-number values
; Example: a message sequence number set of 2,4:7,9,12:*
; for a mailbox with 15 messages is equivalent to
; 2,4,5,6,7,9,12,13,14,15
--
-----------------------------------------------------------------
For information about this mailing list, and its archives, see:
http://www.washington.edu/imap/imap-list.html
-----------------------------------------------------------------