From ce56df4c08ae3812890583c73d88b67d8ef2883a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Sun, 8 Feb 2009 22:42:31 +0000 Subject: [PATCH] * add tags found in mail tag to a wrapped arround the mail. --- webcit/html2html.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/webcit/html2html.c b/webcit/html2html.c index a91239d0a..12cd1b198 100644 --- a/webcit/html2html.c +++ b/webcit/html2html.c @@ -100,6 +100,7 @@ void output_html(const char *supplied_charset, int treat_as_wiki, int msgnum, St int i; int linklen; char charset[128]; + StrBuf *BodyArea; #ifdef HAVE_ICONV iconv_t ic = (iconv_t)(-1) ; char *ibuf; /**< Buffer of characters to be converted */ @@ -210,8 +211,52 @@ void output_html(const char *supplied_charset, int treat_as_wiki, int msgnum, St ||(!strncasecmp(ptr, "HEAD", 4)) ||(!strncasecmp(ptr, "/HEAD", 5)) ||(!strncasecmp(ptr, "BODY", 4)) ) { + char *pBody = NULL; + + if (!strncasecmp(ptr, "BODY", 4)) { + pBody = ptr; + } ptr = strchr(ptr, '>'); if ((ptr == NULL) || (ptr >= msgend)) break; + if ((pBody != NULL) && (ptr - pBody > 4)) { + char* src; + char *cid_start, *cid_end; + + *ptr = '\0'; + pBody += 4; + while ((isspace(*pBody)) && (pBody < ptr)) + pBody ++; + BodyArea = NewStrBufPlain(NULL, ptr - pBody); + + if (pBody < ptr) { + src = strstr(pBody, "cid:"); + if (src) { + cid_start = src + 4; + cid_end = cid_start; + while ((*cid_end != '"') && + !isspace(*cid_end) && + (cid_end < ptr)) + cid_end ++; + + /* copy tag and attributes up to src="cid: */ + StrBufAppendBufPlain(BodyArea, pBody, src - pBody, 0); + + /* add in /webcit/mimepart//CID/ + trailing / stops dumb URL filters getting excited */ + StrBufAppendPrintf(BodyArea, + "/webcit/mimepart/%d/",msgnum); + StrBufAppendBufPlain(BodyArea, cid_start, cid_end - cid_start, 0); + + if (ptr - cid_end > 0) + StrBufAppendBufPlain(BodyArea, + cid_end + 1, + ptr - cid_end, 0); + } + else + StrBufAppendBufPlain(BodyArea, pBody, ptr - pBody, 0); + } + *ptr = '>'; + } ++ptr; if ((ptr == NULL) || (ptr >= msgend)) break; msgstart = ptr; @@ -292,6 +337,11 @@ void output_html(const char *supplied_charset, int treat_as_wiki, int msgnum, St goto BAIL; } + if (BodyArea != NULL) { + StrBufAppendBufPlain(converted_msg, HKEY("
"), 0); + } ptr = msg; msgend = strchr(msg, 0); while (ptr < msgend) { @@ -464,6 +514,8 @@ void output_html(const char *supplied_charset, int treat_as_wiki, int msgnum, St } if (!strncasecmp(ptr, "", 3)) --alevel; } + if (BodyArea != NULL) + StrBufAppendBufPlain(converted_msg, HKEY("
"), 0); /** uncomment these two lines to override conversion */ /** memcpy(converted_msg, msg, content_length); */ -- 2.30.2