From: Jay Soffian <jaysoffian@gmail.com>
To: git@vger.kernel.org
Cc: Jay Soffian <jaysoffian@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>
Subject: [PATCH 2/3] mailinfo: support rfc3676 (format=flowed) text/plain messages
Date: Fri, 15 Feb 2008 16:53:37 -0500 [thread overview]
Message-ID: <1203112418-25199-2-git-send-email-jaysoffian@gmail.com> (raw)
In-Reply-To: <1203112418-25199-1-git-send-email-jaysoffian@gmail.com>
RFC 3676 establishes two parameters (Format and DelSP) to be used with
the Text/Plain media type. In the presence of these parameters, trailing
whitespace is used to indicate flowed lines and a canonical quote
indicator is used to indicate quoted lines.
mailinfo now unfolds, unquotes, and un-space-stuffs such messages.
Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
---
This is a bit simpler than the previous patch and incorporates most of
Johannes' feedback. I also switched from enum's to int's since enum's
were really overkill.
builtin-mailinfo.c | 31 +++++++++++++++++++++++++++++++
1 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/builtin-mailinfo.c b/builtin-mailinfo.c
index 11f154b..0492baf 100644
--- a/builtin-mailinfo.c
+++ b/builtin-mailinfo.c
@@ -21,6 +21,10 @@ static enum {
TYPE_TEXT, TYPE_OTHER,
} message_type;
+/* RFC 3676 Text/Plain Format and DelSp Parameters */
+static int message_format_is_flowed;
+static int message_delsp_is_yes;
+
static char charset[256];
static int patch_lines;
static char **p_hdr_data, **s_hdr_data;
@@ -193,6 +197,15 @@ static int handle_content_type(char *line)
if (strcasestr(line, "text/") == NULL)
message_type = TYPE_OTHER;
+ else if (strcasestr(line, "text/plain")) {
+ char attr[256];
+ if ((message_format_is_flowed = (
+ slurp_attr(line, "format=", attr) &&
+ !strcasecmp(attr, "flowed"))))
+ message_delsp_is_yes = (
+ slurp_attr(line, "delsp=", attr) &&
+ !strcasecmp(attr, "yes"));
+ }
if (slurp_attr(line, "boundary=", boundary + 2)) {
memcpy(boundary, "--", 2);
if (content_top++ >= &content[MAX_BOUNDARIES]) {
@@ -681,6 +694,8 @@ again:
transfer_encoding = TE_DONTCARE;
charset[0] = 0;
message_type = TYPE_TEXT;
+ message_format_is_flowed = 0;
+ message_delsp_is_yes = 0;
/* slurp in this section's info */
while (read_one_header_line(line, sizeof(line), fin))
@@ -770,6 +785,22 @@ static int handle_filter(char *line, unsigned linesize)
{
static int filter = 0;
+ if (message_format_is_flowed && strcmp(line, "-- \n")) {
+ /* strip quote markers */
+ while (*line && *line == '>')
+ line++;
+ /* undo space-stuffing */
+ if (*line == ' ')
+ line++;
+ if (strcmp(line, "-- \n")) {
+ char *cp = strchrnul(line, '\n');
+ if (cp > line && *(cp-1) == ' ' && *cp == '\n')
+ /* line is flowed (wrapped); remove
+ * the \n or <space>\n if delsp is yes
+ */
+ *(cp-(message_delsp_is_yes?1:0)) = '\0';
+ }
+ }
/* filter tells us which part we left off on
* a non-zero return indicates we hit a filter point
*/
--
1.5.4.1.1281.g75df
next prev parent reply other threads:[~2008-02-15 21:54 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-15 21:53 [PATCH 1/3] mailinfo: ensure handle_filter gets only one line at a time Jay Soffian
2008-02-15 21:53 ` Jay Soffian [this message]
2008-02-15 21:53 ` [PATCH 3/3] test mailinfo rfc3676 support Jay Soffian
2008-02-15 23:24 ` [PATCH 1/3] mailinfo: ensure handle_filter gets only one line at a time Junio C Hamano
2008-02-15 23:37 ` Jay Soffian
2008-02-16 6:17 ` Junio C Hamano
2008-02-16 6:22 ` Junio C Hamano
2008-02-16 6:51 ` Jay Soffian
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1203112418-25199-2-git-send-email-jaysoffian@gmail.com \
--to=jaysoffian@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.