On Wed, 8 Oct 2003, Martin Stecher wrote:
Agreed, regarding the syntax of structures.
Great.
I don't like yet that payload is separated with an empty line from
headers in case of named parameters but starts on a new line if
there are only anonymous params.
Yeah.
And the semicolon should either always or never start on a new line,
I think.
I like being able to write simple messages on one line
CMD 1 2 3 4;
This would look worse, IMO:
CMD 1 2 3 4
;
There is virtually no difference for the parser, I think. This is a
purely visual/presentational effect. One-liners are nice when you brag
about how compact OCP can be.
So, how about this little change?
message = name [SP anonym-parameters] CRLF
[named-parameters CRLF]
[payload CRLF]
";" CRLF
Every element, but anonymous parameters, starts on a new line.
This does not allow for fast separation of "header" and payload using
a unique CRLFCRLF sequence. The latter is useful to make avoid parsing
partial input buffers until they are likely to contain complete
message headers.
I would like to keep simple messages on one line. How about always
separating payload with CRLFCRLF while still allowing for one-liners:
message = name [SP anonym-parameters]
[CRLF named-parameters]
[CRLF CRLF payload]
";" CRLF
Every element, including anonymous parameters, starts with its own
unique sequence: SP, CRLF, and CRLFCRLF, and ;CRLF.
This would result in a very simple logic:
1. Parse name.
2. parse anonym-parameters if the next character is SP
3. parse named-parameters if next characters are CRLF
but not CRLFCRLF
4. parse payload if next characters are CRLFCRLF
5. parse trailer: ;CRLF
while allowing for an optimization:
- Keep buffering until CRLFCRLF or ;CRLF is found
or the buffer is full.
We can go further and replace
[CRLF CRLF payload]
with
[":" CRLF payload]
to avoid the "but not CRLFCRLF" clause above, but let's make MIME
fans comfortable, I guess.
This is probably equivalent to your last proposal except I preserved
one-liners and made payload easier to find without parsing.
Objections or further improvements?
Thanks,
Alex.