]> err.no Git - scalable-opengroupware.org/blobdiff - UI/MailPartViewers/UIxMailPartHTMLViewer.m
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1043 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / UI / MailPartViewers / UIxMailPartHTMLViewer.m
index 4b926e1e18ec1f35eaee1521fd59fbe23819834c..4226e64000bd1218d05103d5679c913b7fc3ad58 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 #import <Foundation/NSArray.h>
+#import <Foundation/NSDictionary.h>
 #import <SaxObjC/SaxAttributes.h>
 #import <SaxObjC/SaxContentHandler.h>
 #import <SaxObjC/SaxLexicalHandler.h>
@@ -42,6 +43,7 @@
   BOOL inStyle;
   BOOL inScript;
   BOOL inCSSDeclaration;
+  BOOL hasEmbeddedCSS;
   NSMutableArray *crumb;
 }
 
   inStyle = NO;
   inScript = NO;
   inCSSDeclaration = NO;
+  hasEmbeddedCSS = NO;
 }
 
 - (void) endDocument
   showWhoWeAre();
 }
 
-- (NSString *) _valueForCSSIdentifier: (NSString *) primaryValue
-{
-  NSMutableString *value;
-  NSEnumerator *classes;
-  NSString *currentValue;
-
-  value = [NSMutableString new];
-  [value autorelease];
-
-  classes = [[primaryValue componentsSeparatedByString: @" "] objectEnumerator];
-  currentValue = [classes nextObject];
-  while (currentValue)
-    {
-      [value appendFormat: @"SOGoHTMLMail-%@ ", currentValue];
-      currentValue = [classes nextObject];
-    }
-
-  return value;
-}
-
 - (void) _appendStyle: (unichar *) _chars
                length: (int) _len
 {
       if (inCSSDeclaration)
         {
           if (*(char *) currentChar == '}')
-            inCSSDeclaration = NO;
+            {
+              inCSSDeclaration = NO;
+              hasEmbeddedCSS = NO;
+            }
         }
       else
         {
           if (*(char *) currentChar == '{')
             inCSSDeclaration = YES;
-          else if (*(char *) currentChar == '.'
-                   || *(char *) currentChar == '#')
+          if (*(char *) currentChar == ',')
+            hasEmbeddedCSS = NO;
+          else if (!hasEmbeddedCSS)
             {
-              [css appendString: [NSString stringWithCharacters: start
-                                           length: (currentChar - start + 1)]];
-              [css appendString: @"SOGoHTMLMail-"];
-              start = currentChar + 1;
+              if (*(char *) currentChar == '@')
+                hasEmbeddedCSS = YES;
+              else
+                if (*(char *) currentChar > 32)
+                  {
+                    [css appendString: [NSString stringWithCharacters: start
+                                                 length: (currentChar - start)]];
+                    [css appendString: @".SOGoHTMLMail-CSS-Delimiter "];
+                    hasEmbeddedCSS = YES;
+                    start = currentChar;
+                  }
             }
         }
     }
   [css appendString: [NSString stringWithCharacters: start
-                               length: (currentChar - start + 1)]];
+                               length: (currentChar - start)]];
 }
 
 - (void) startElement: (NSString *) _localName
         {
           skipAttribute = NO;
           name = [_attributes nameAtIndex: count];
-          if ([name caseInsensitiveCompare: @"class"] == NSOrderedSame
-              || [name caseInsensitiveCompare: @"id"] == NSOrderedSame)
-            value = [self _valueForCSSIdentifier: [_attributes valueAtIndex: count]];
-          else if ([[name lowercaseString] hasPrefix: @"on"])
+          if ([[name lowercaseString] hasPrefix: @"on"])
             skipAttribute = YES;
           else if ([name caseInsensitiveCompare: @"src"] == NSOrderedSame)
             {
   NSMutableDictionary *attachmentIds;
   UIxMailPartViewer *parent;
   unsigned int count, max;
+  NSMutableString *url;
   NSString *baseURL;
   NSArray *parts;
 
                          isEqualToString: @"UIxMailPartAlternativeViewer"])
     {
       baseURL = [[self clientObject] baseURLInContext: context];
+      url = [NSMutableString new];
+      [url appendString: baseURL];
+      [url appendFormat: @"/%@", [partPath componentsJoinedByString: @"/"]];
+      [url deleteCharactersInRange: NSMakeRange([url length] - 3, 2)];
       parts = [[parent bodyInfo] objectForKey: @"parts"];
       max = [parts count];
       for (count = 0; count < max; count++)
         [self _convertReferencesForPart: [parts objectAtIndex: count]
               withCount: count + 1
-              andBaseURL: baseURL
+              andBaseURL: url
               intoDictionary: attachmentIds];
+      [url release];
     }
 
-  NSLog(@"attc: '%@'", attachmentIds);
   return attachmentIds;
 }