mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-14 09:39:42 +00:00
180 lines
5.2 KiB
Plaintext
180 lines
5.2 KiB
Plaintext
Format of Version 5 Babyl Files:
|
||
|
||
(Babyl was the storage format used by Rmail before Emacs 23.1.
|
||
Since then it uses mbox format.)
|
||
|
||
Warning:
|
||
|
||
This was written Tuesday, 12 April 1983 (by Eugene Ciccarelli),
|
||
based on looking at a particular Babyl file and recalling various
|
||
issues. Therefore it is not guaranteed to be complete, but it is a
|
||
start, and I will try to point the reader to various Babyl functions
|
||
that will serve to clarify certain format questions.
|
||
|
||
Also note that this file will not contain control-characters,
|
||
but instead have two-character sequences starting with Uparrow.
|
||
Unless otherwise stated, an Uparrow <character> is to be read as
|
||
Control-<character>, e.g. ^L is a Control-L.
|
||
|
||
Versions:
|
||
|
||
First, note that each Babyl file contains in its BABYL OPTIONS
|
||
section the version for the Babyl file format. In principle, the
|
||
format can be changed in any way as long as we increment the format
|
||
version number; then programs can support both old and new formats.
|
||
|
||
In practice, version 5 is the only format version used, and the
|
||
previous versions have been obsolete for so long that Emacs does not
|
||
support them.
|
||
|
||
|
||
Overall Babyl File Structure:
|
||
|
||
A Babyl file consists of a BABYL OPTIONS section followed by
|
||
0 or more message sections. The BABYL OPTIONS section starts
|
||
with the line "BABYL OPTIONS:". Message sections start with
|
||
Control-Underscore Control-L Newline. Each section ends
|
||
with a Control-Underscore. (That is also the first character
|
||
of the starter for the next section, if any.) Thus, a three
|
||
message Babyl file looks like:
|
||
|
||
BABYL OPTIONS:
|
||
...the stuff within the Babyl Options section...
|
||
^_^L
|
||
...the stuff within the 1st message section...
|
||
^_^L
|
||
...the stuff within the 2nd message section...
|
||
^_^L
|
||
...the stuff within the last message section...
|
||
^_
|
||
|
||
Babyl is tolerant about some whitespace at the end of the
|
||
file -- the file may end with the final ^_ or it may have some
|
||
whitespace, e.g. a newline, after it.
|
||
|
||
|
||
The BABYL OPTIONS Section:
|
||
|
||
Each Babyl option is specified on one line (thus restricting
|
||
string values these options can currently have). Values are
|
||
either numbers or strings. The format is name, colon, and the
|
||
value, with whitespace after the colon ignored, e.g.:
|
||
|
||
Mail: ~/special-inbox
|
||
|
||
Unrecognized options are ignored.
|
||
|
||
Here are those options and the kind of values currently expected:
|
||
|
||
MAIL Filename, the input mail file for this
|
||
Babyl file. You may also use several file names
|
||
separated by commas.
|
||
Version Number. This should always be 5.
|
||
Labels String, list of labels, separated by commas.
|
||
|
||
|
||
Message Sections:
|
||
|
||
A message section contains one message and information
|
||
associated with it. The first line is the "status line", which
|
||
contains a bit (0 or 1 character) saying whether the message has
|
||
been reformed yet, and a list of the labels attached to this
|
||
message. Certain labels, called basic labels, are built into
|
||
Babyl in a fundamental way, and are separated in the status line
|
||
for convenience of operation. For example, consider the status
|
||
line:
|
||
|
||
1, answered,, zval, bug,
|
||
|
||
The 1 means this message has been reformed. This message is
|
||
labeled "answered", "zval", and "bug". The first, "answered", is
|
||
a basic label, and the other two are user labels. The basic
|
||
labels come before the double-comma in the line. Each label is
|
||
preceded by ", " and followed by ",". (The last basic label is
|
||
in fact followed by ",,".) If this message had no labels at all,
|
||
it would look like:
|
||
|
||
1,,
|
||
|
||
Or, if it had two basic labels, "answered" and "deleted", it
|
||
would look like:
|
||
|
||
1, answered, deleted,, zval, bug,
|
||
|
||
The & Label Babyl Message knows which are the basic labels.
|
||
Currently they are: deleted, unseen, recent, and answered.
|
||
|
||
After the status line comes the original header if any.
|
||
Following that is the EOOH line, which contains exactly the
|
||
characters "*** EOOH ***" (which stands for "end of original
|
||
header"). Note that the original header, if a network format
|
||
header, includes the trailing newline. And finally, following the
|
||
EOOH line is the visible message, header and text. For example,
|
||
here is a complete message section, starting with the message
|
||
starter, and ending with the terminator:
|
||
|
||
^_^L
|
||
1,, wordab, eccmacs,
|
||
Date: 11 May 1982 21:40-EDT
|
||
From: Eugene C. Ciccarelli <ECC at MIT-AI>
|
||
Subject: notes
|
||
To: ECC at MIT-AI
|
||
|
||
*** EOOH ***
|
||
Date: Tuesday, 11 May 1982 21:40-EDT
|
||
From: Eugene C. Ciccarelli <ECC>
|
||
To: ECC
|
||
Re: notes
|
||
|
||
Remember to pickup check at cashier's office, and deposit it
|
||
soon. Pay rent.
|
||
^_
|
||
|
||
;;; Babyl File BNF:
|
||
|
||
;;; Overall Babyl file structure:
|
||
|
||
|
||
Babyl-File ::= Babyl-Options-Section (Message-Section)*
|
||
|
||
|
||
;;; Babyl Options section:
|
||
|
||
|
||
Babyl-Options-Section
|
||
::= "BABYL OPTIONS:" newline (Babyl-Option)* Terminator
|
||
|
||
Babyl-Option ::= Option-Name ":" Horiz-Whitespace BOptValue newline
|
||
|
||
BOptValue ::= Number | 1-Line-String
|
||
|
||
|
||
|
||
;;; Message section:
|
||
|
||
|
||
Message-Section ::= Message-Starter Status-Line Orig-Header
|
||
EOOH-Line Message Terminator
|
||
|
||
Message-Starter ::= "^L" newline
|
||
|
||
Status-Line ::= Bit-Char "," (Basic-Label)* "," (User-Label)* newline
|
||
|
||
Basic-Label ::= Space BLabel-Name ","
|
||
|
||
User-Label ::= Space ULabel-Name ","
|
||
|
||
EOOH-Line ::= "*** EOOH ***" newline
|
||
|
||
Message ::= Visible-Header Message-Text
|
||
|
||
|
||
;;; Utilities:
|
||
|
||
Terminator ::= "^_"
|
||
|
||
Horiz-Whitespace
|
||
::= (Space | Tab)*
|
||
|
||
Bit-Char ::= "0" | "1"
|