]> err.no Git - sope/commitdiff
improved handling of text content
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Mon, 28 May 2007 13:08:17 +0000 (13:08 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Mon, 28 May 2007 13:08:17 +0000 (13:08 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@1487 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-mime/ChangeLog
sope-mime/NGMime/ChangeLog
sope-mime/NGMime/GNUmakefile
sope-mime/NGMime/NGMimeBodyGenerator.m
sope-mime/NGMime/NGMimeRfc822BodyGenerator.m [new file with mode: 0644]
sope-mime/NGMime/NGMimeTextBodyGenerator.m [new file with mode: 0644]
sope-mime/Version

index 9cc785d15c5d01af88d98f1f7ad36a699d0c696d..38a9085e596d95e1edd99658c271beabecad647e 100644 (file)
@@ -1,3 +1,7 @@
+2007-05-28  Helge Hess  <helge.hess@opengroupware.org>
+
+       * NGMime: improved text body encoding (v4.7.246)
+
 2007-05-15  Wolfgang Sourdeau  <WSourdeau@Inverse.CA>
 
        * NGMime.m: encode string body contents using the charset
index e255405eb86151585d9cfb335c7554b2cd38f4be..64724089314de2db7224ea59e90bb1ce1b9233d0 100644 (file)
@@ -1,3 +1,10 @@
+2007-05-28  Helge Hess  <helge.hess@opengroupware.org>
+
+       * NGMimeTextBodyGenerator.m: reworked body contents encoding using the
+         character encoding support in NGExtension/NSString+Encoding
+
+       * NGMimeBodyGenerator.m: moved contained classes to own .m files
+
 2007-05-15  Wolfgang Sourdeau  <WSourdeau@Inverse.CA>
 
        * NGMimeBodyGenerator.m: encode string body contents using the charset
index ca97ee830f5251aa11f4c26a5325aabec75fdfb4..65b1a3f566712bb9f585701e60bc6d16f59bc655 100644 (file)
@@ -72,6 +72,8 @@ NGMime_OBJC_FILES = \
        NGMimeStringHeaderFieldGenerator.m              \
        \
        NGMimeMultipartBodyGenerator.m                  \
+       NGMimeTextBodyGenerator.m                       \
+       NGMimeRfc822BodyGenerator.m                     \
 
 -include GNUmakefile.preamble
 include $(GNUSTEP_MAKEFILES)/subproject.make
index 39fc4020dd8cb88d47eb10220bd00cce6d07a2d8..2d5ebd4cedfcfedfbcfebaa2785e7d4714a2b4a5 100644 (file)
@@ -85,102 +85,3 @@ static BOOL debugOn = NO;
 }
 
 @end /* NGMimeBodyGenerator */
-
-
-@implementation NGMimeTextBodyGenerator
-
-+ (int)version {
-  return 2;
-}
-+ (void)initialize {
-  NSAssert2([super version] == 2,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-}
-
-- (NSStringEncoding)_encodingFromContentType:(NGMimeType *)_type {
-  NSStringEncoding encoding;
-  NSString *charset;
-
-  encoding = [NSString defaultCStringEncoding];
-  if (_type != nil) {
-    charset = [_type valueOfParameter: @"charset"];
-    if ([charset length] > 0) {
-      if ([charset isEqualToString: @"utf-8"])
-       encoding = NSUTF8StringEncoding;
-      else if ([charset isEqualToString: @"iso-8859-1"])
-       encoding = NSISOLatin1StringEncoding;
-      /* more should be handled here */
-    }
-  }
-    
-  return encoding;
-}
-
-- (NSData *)generateBodyOfPart:(id<NGMimePart>)_part
-  additionalHeaders:(NGMutableHashMap *)_addHeaders
-  delegate:(id)_delegate
-{
-  NSStringEncoding encoding;
-  NSData           *data;
-  id               body;
-  
-  encoding = [self _encodingFromContentType: [_part contentType]];
-  body     = [_part body];
-  data     = nil;
-  
-  if ([body isKindOfClass:[NSString class]])
-    data = [body dataUsingEncoding:encoding];
-  else if ([body respondsToSelector:@selector(bytes)])
-    data = body;
-  else if ([body respondsToSelector:@selector(dataUsingEncoding:)])
-    data = [body dataUsingEncoding:encoding];
-  else if (body != nil) {
-    [self logWithFormat:@"ERROR: unexpected part body: %@", body];
-    return nil;
-  }
-  
-  if (data == nil) {
-    [self logWithFormat:@"WARNING(%s): generate empty body",
-           __PRETTY_FUNCTION__];
-    data = [NSData data];
-  }
-  return [self encodeData:data forPart:_part additionalHeaders:_addHeaders];
-}
-
-@end /* NGMimeTextBodyGenerator */
-
-
-@implementation NGMimeRfc822BodyGenerator
-
-+ (int)version {
-  return 2;
-}
-+ (void)initialize {
-  NSAssert2([super version] == 2,
-            @"invalid superclass (%@) version %i !",
-            NSStringFromClass([self superclass]), [super version]);
-}
-
-- (id<NGMimePartGenerator>)generatorForPart:(id<NGMimePart>)_part {
-  id g;
-  
-  g = [[[NGMimePartGenerator alloc] init] autorelease];
-  [g setUseMimeData:self->useMimeData];
-  return g;
-}
-
-- (NSData *)generateBodyOfPart:(id<NGMimePart>)_part
-  additionalHeaders:(NGMutableHashMap *)_addHeaders
-  delegate:(id)_delegate
-{
-  NSData              *data;
-  NGMimePartGenerator *gen;
-  
-  gen = (NGMimePartGenerator *)[self generatorForPart:_part];
-  [gen setDelegate:_delegate];
-  data = [gen generateMimeFromPart:[_part body]];
-  return data;
-}
-
-@end /* NGMimeRfc822BodyGenerator */
diff --git a/sope-mime/NGMime/NGMimeRfc822BodyGenerator.m b/sope-mime/NGMime/NGMimeRfc822BodyGenerator.m
new file mode 100644 (file)
index 0000000..30064e1
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+  Copyright (C) 2000-2007 SKYRIX Software AG
+  Copyright (C) 2007      Helge Hess
+
+  This file is part of SOPE.
+
+  SOPE is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with SOPE; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
+
+#include "NGMimeBodyGenerator.h"
+#include "NGMimePartGenerator.h"
+#include "common.h"
+
+@implementation NGMimeRfc822BodyGenerator
+
++ (int)version {
+  return 2;
+}
++ (void)initialize {
+  NSAssert2([super version] == 2,
+            @"invalid superclass (%@) version %i !",
+            NSStringFromClass([self superclass]), [super version]);
+}
+
+- (id<NGMimePartGenerator>)generatorForPart:(id<NGMimePart>)_part {
+  id g;
+  
+  g = [[[NGMimePartGenerator alloc] init] autorelease];
+  [g setUseMimeData:self->useMimeData];
+  return g;
+}
+
+- (NSData *)generateBodyOfPart:(id<NGMimePart>)_part
+  additionalHeaders:(NGMutableHashMap *)_addHeaders
+  delegate:(id)_delegate
+{
+  NSData              *data;
+  NGMimePartGenerator *gen;
+  
+  gen = (NGMimePartGenerator *)[self generatorForPart:_part];
+  [gen setDelegate:_delegate];
+  data = [gen generateMimeFromPart:[_part body]];
+  return data;
+}
+
+@end /* NGMimeRfc822BodyGenerator */
diff --git a/sope-mime/NGMime/NGMimeTextBodyGenerator.m b/sope-mime/NGMime/NGMimeTextBodyGenerator.m
new file mode 100644 (file)
index 0000000..2369ae9
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+  Copyright (C) 2000-2007 SKYRIX Software AG
+  Copyright (C) 2007      Helge Hess
+
+  This file is part of SOPE.
+
+  SOPE is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with SOPE; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
+
+#include "NGMimeBodyGenerator.h"
+#include "NGMimePartGenerator.h"
+#include "common.h"
+
+@implementation NGMimeTextBodyGenerator
+
++ (int)version {
+  return 2;
+}
++ (void)initialize {
+  NSAssert2([super version] == 2,
+            @"invalid superclass (%@) version %i !",
+            NSStringFromClass([self superclass]), [super version]);
+}
+
+- (NSStringEncoding)_encodingFromContentType:(NGMimeType *)_type {
+  NSStringEncoding encoding;
+  NSString *charset;
+
+  encoding = [NSString defaultCStringEncoding];
+  if (_type != nil) {
+    charset = [_type valueOfParameter: @"charset"];
+    if ([charset length] > 0) {
+      if ([charset isEqualToString: @"utf-8"])
+       encoding = NSUTF8StringEncoding;
+      else if ([charset isEqualToString: @"iso-8859-1"])
+       encoding = NSISOLatin1StringEncoding;
+      /* more should be handled here */
+    }
+  }
+    
+  return encoding;
+}
+
+- (NSData *)generateBodyOfPart:(id<NGMimePart>)_part
+  additionalHeaders:(NGMutableHashMap *)_addHeaders
+  delegate:(id)_delegate
+{
+  NSData *data;
+  id     body;
+  
+  body = [_part body];
+  data = nil;
+  
+  if ([body isKindOfClass:[NSString class]]) {
+    NSString *charset = [[_part contentType] valueOfParameter:@"charset"];
+    if ([charset isNotEmpty])
+      data = [body dataUsingEncodingNamed:charset];
+    
+    if (data == nil) /* either no charset given or the charset failed */
+      data = [body dataUsingEncoding:[NSString defaultCStringEncoding]];
+  }
+  else if ([body respondsToSelector:@selector(bytes)]) {
+    /* an NSData, but why not check the class?!, we can't just cast it */
+    data = body;
+  }
+  else if ([body respondsToSelector:@selector(dataUsingEncoding:)]) {
+    /* hm, whats that?, NSString is covered before */
+    NSStringEncoding encoding = 0;
+    NSString *charset = [[_part contentType] valueOfParameter:@"charset"];
+    
+    if ([charset isNotEmpty])
+      encoding = [NSString stringEncodingForEncodingNamed:charset];
+    
+    data = [body dataUsingEncoding:
+                  (encoding != 0 ? encoding : NSISOLatin1StringEncoding)];
+  }
+  else if (body != nil) {
+    [self errorWithFormat:@"unexpected part body %@: %@", [body class], body];
+    return nil;
+  }
+  
+  if (data == nil) {
+    [self warnWithFormat:@"%s: generate empty body", __PRETTY_FUNCTION__];
+    data = [NSData data];
+  }
+  return [self encodeData:data forPart:_part additionalHeaders:_addHeaders];
+}
+
+@end /* NGMimeTextBodyGenerator */
index e00a62276ca4a058c4a56af5dfbf66b768671a36..160886bc33cabd1ac468fa17a60de4b961892745 100644 (file)
@@ -2,7 +2,7 @@
 
 MAJOR_VERSION:=4
 MINOR_VERSION:=7
-SUBMINOR_VERSION:=245
+SUBMINOR_VERSION:=246
 
 # v4.5.214 requires libNGExtensions v4.5.146
 # v4.2.149 requires libNGStreams    v4.2.34