|
|
1.1 root 1: >From [email protected] (Robert Krawitz) Mon Nov 30 10:56:46 1987
2:
3: Let's see if I remember my BNF for babyl files; this corresponds to
4: version 5:
5:
6:
7: File := <header>
8: <message>* ; Some say there must be at least one message.
9:
10: Header := Babyl Options:\n
11: <header-option>*
12: |^_
13:
14: Header-option := <header-token> ; See note [5]
15: : *
16: <value>
17:
18: header-token := [^\000-\017:\177-\377]* ; Not these characters [tab is OK]
19: header-value := ditto, if a list, each element separated by a comma and
20: a space.
21:
22: message := \^L\n
23: [01], ; See note [1] below
24: ( <attribute>,)* ; Note space before and comma after token
25: ,
26: ( <label>,)* ; ditto, see note [4] below
27: \n
28: <header>* ; See note [1] and [2] below
29: *** EOOH ***\n
30: <header>* ; See note [2] below
31: \n
32: <body>
33: \^_
34:
35: attribute := unseen |
36: last | ; Not all programs implement this. It
37: ; generally only gets used internally, and
38: ; isn't written out to a file.
39: >last | ; Babyl uses this for a deleted message at the
40: ; end. It shouldn't be written out to a file.
41: deleted |
42: recent | ; Not all programs implement this. It refers
43: ; to a message in the last batch of new mail;
44: ; thus it probably shouldn't be written out to
45: ; a file during a normal save although it
46: ; makes sense to write it out in an emergency save.
47: filed |
48: answered |
49: forwarded |
50: redistributed |
51: badheader | ; Not all programs implement this
52: filed ; Not all programs implement this
53:
54: label := [^\000-\020,\177-\377]* ; No control chars,
55: ; whitespace, commas, rubout, or high bit set
56:
57: header := [^\000-\020:\177-\377]*:
58: <header-line>
59: <header-line>*
60:
61: header-line := [ \t][^\n]*\n ; Continuation lines must be indented
62:
63: body := (.*\n)* ; See note [3] below
64:
65:
66: [1] A zero means that the headers have not been cleaned up,
67: reprocessed, toggled, or whatever. In this case there should be no
68: headers before the EOOH line. A one means that the headers have been
69: reprocessed. In this case, the original headers will typically be
70: before the EOOH line and the reformatted or whatever subset of headers
71: that the user should see will be after it. Note that in this case
72: it's permissible to garbage collect all headers before the EOOH line.
73: No one's defined what it means to garbage collect SOME of the headers
74: before this line, or what that means.
75:
76: [2] It's apparently permissible to add headers of the program's own
77: choosing before the EOOH line. Or at least, Rmail does so (it caches
78: a summary line) and nothing seems to object. There's no particular
79: guarantee that something else won't step all over it, though. Headers
80: after the EOOH line can be reformatted as the program wishes (e. g.
81: indent the header lines to the same distance, canonicalize machine
82: names) for display to the user. It's generally best for programs that
83: read a babyl file to look at the headers before the EOOH line if they
84: exist, since these should be untouched by the user. Remember, the
85: user can edit anything after the EOOH line.
86:
87: [3] A \^_ at the beginning of a line should be quoted somehow. The
88: normal way seems to be to decompose it into 2 characters: a ^ and a _.
89: Strictly speaking, it doesn't always have to be, since the following
90: text would have to be parsable as a message, but some programs don't
91: try to use that much intelligence. Oh well.
92:
93: [4] Labels, or keywords as they are often called, are generally
94: defined by the user, although it's not entirely impermissible for a
95: program to use these for its own purpose (e. g. a keyword named
96: RemindMe might be used to automatically find important messages).
97: Some people also want these used to cache other state implemented by
98: certain programs; this use is undefined. Note that all keywords used
99: should be inserted in a header-option named Keywords:. Can a keyword
100: have the same name as an attribute? Who knows? It's probably not a
101: good idea, since some programs use the concept of <labels> =
102: <keywords> + <attributes>. Sigh.
103:
104: [5] Some tokens are standardized in meaning. Common tokens are Mail
105: inboxes, babyl file version number, which is currently 5, labels used
106: in messages, window format for Zmail, anything else you want to be
107: associated with a file. Be warned that labels should be a complete
108: list of all user-defined keywords used in the file, so if you add a
109: new label to a message, you should add it to this list. You should
110: also have a Babyl version: 5 file attribute (look in a babyl file for
111: details).
112:
113: Anyone know if there actually is a "formal" standard? This was done
114: quickly from memory and a Zmail manual, but there are at least three
115: programs around that use Babyl files (zmail, babyl, and emacs/rmail)
116: and someone at SIPB was going to write a command-based mail reader
117: similar to Unix Mail but operating on babyl files, and someone (of
118: course not me :-)) should probably write xbabyl :-)
119:
120: References:
121:
122: ITS/Tops-20 INFO file on babyl (who wrote it? ECC? GZ?)
123:
124: Zmail manual (the MIT version was written by RMS; ECC wrote the
125: section on Babyl file format)
126: --
127:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.