From 0581af1a4572318b01b12c9c0c3c0165cd58c013 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 5 Nov 2007 22:41:48 +0000 Subject: [PATCH] Monotone-Parent: 633db895fe1d25a8339861d7d55a062abc56205f Monotone-Revision: d62034b3292612b00d95300def78e7bfff8f05eb Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-11-05T22:41:48 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 5 ++ UI/MailPartViewers/UIxMailPartTextViewer.m | 64 ++++++++++++++++++++-- 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4d157a775..54838b558 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2007-11-05 Wolfgang Sourdeau + * UI/MailPartViewers/UIxMailPartTextViewer.m + ([UIxMailPartTextViewer -flatContentAsString]): re-added + conversion of line-break to sequences of HTML "BR", with a fast + algorithm in C. + * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer -flatContentAsString]): simplified method now that we know -[NSString stringWithData:usingEncodingNamed:] has a more robust diff --git a/UI/MailPartViewers/UIxMailPartTextViewer.m b/UI/MailPartViewers/UIxMailPartTextViewer.m index 22d41a386..d4ff0ccdc 100644 --- a/UI/MailPartViewers/UIxMailPartTextViewer.m +++ b/UI/MailPartViewers/UIxMailPartTextViewer.m @@ -34,18 +34,74 @@ #import "UIxMailPartTextViewer.h" +@interface NSString (SOGoMailUIExtension) + +- (NSString *) stringByConvertingCRLNToHTML; + +@end + +@implementation NSString (SOGoMailUIExtension) + +- (NSString *) stringByConvertingCRLNToHTML +{ + NSString *convertedString; + const char *oldString, *currentChar; + char *newString, *destChar; + unsigned int oldLength, length, delta; + + oldString = [self cStringUsingEncoding: NSUTF8StringEncoding]; + oldLength = [self lengthOfBytesUsingEncoding: NSUTF8StringEncoding]; + + length = oldLength; + newString = malloc (length + 500); + destChar = newString; + currentChar = oldString; + while (currentChar < (oldString + oldLength)) + { + if (*currentChar != '\r') + { + if (*currentChar == '\n') + { + strcpy (destChar, "
"); + destChar += 6; + delta = (destChar - newString); + if (delta > length) + { + length += 500; + newString = realloc (newString, length + 500); + destChar = newString + delta; + } + } + else + { + *destChar = *currentChar; + destChar++; + } + } + currentChar++; + } + *destChar = 0; + + convertedString = [[NSString alloc] initWithBytes: newString + length: (destChar + 1 - newString) + encoding: NSUTF8StringEncoding]; + [convertedString autorelease]; + free (newString); + + return convertedString; +} + +@end + @implementation UIxMailPartTextViewer - (NSString *) flatContentAsString { - NSMutableString *content; NSString *superContent; - content = [NSMutableString string]; superContent = [[super flatContentAsString] stringByEscapingHTMLString]; - [content appendString: [superContent stringByDetectingURLs]]; - return content; + return [[superContent stringByDetectingURLs] stringByConvertingCRLNToHTML]; } @end /* UIxMailPartTextViewer */