Revision: 2859
          http://skim-app.svn.sourceforge.net/skim-app/?rev=2859&view=rev
Author:   hofman
Date:     2007-09-09 07:31:30 -0700 (Sun, 09 Sep 2007)

Log Message:
-----------
Fix more parsing bugs in FDF parser.

Modified Paths:
--------------
    trunk/SKFDFParser.m

Modified: trunk/SKFDFParser.m
===================================================================
--- trunk/SKFDFParser.m 2007-09-09 14:11:13 UTC (rev 2858)
+++ trunk/SKFDFParser.m 2007-09-09 14:31:30 UTC (rev 2859)
@@ -86,8 +86,9 @@
         
         if ([key isEqualToString:@"Type"]) {
             if (value = [self value:value ofClass:[NSString class] 
lookup:lookup]) {
-                if ([value isEqualToString:@"Annot"] == NO)
+                if ([value isEqualToString:@"Annot"] == NO) {
                     success = NO;
+                }
             } else {
                 success = NO;
             }
@@ -95,62 +96,64 @@
             if (value = [self value:value ofClass:[NSString class] 
lookup:lookup]) {
                 if ([value isEqualToString:@"Text"])
                     value = @"Note";
-                if ([validTypes containsObject:value])
+                if ([validTypes containsObject:value]) {
                     [dictionary setObject:value forKey:@"type"];
-                else
+                } else {
                     success = NO;
+                }
             } else {
                 success = NO;
             }
         } else if ([key isEqualToString:@"Contents"]) {
-            if (value = [self value:value ofClass:[NSString class] 
lookup:lookup])
+            if (value = [self value:value ofClass:[NSString class] 
lookup:lookup]) {
                 [dictionary setObject:value forKey:@"contents"];
-            else
+            } else {
                 success = NO;
+            }
         } else if ([key isEqualToString:@"Rect"]) {
             if ((value = [self value:value ofClass:[NSArray class] 
lookup:lookup]) && [value count] == 4) {
-                NSRect rect;
-                rect.origin.x = [[value objectAtIndex:0] floatValue];
-                rect.origin.y = [[value objectAtIndex:1] floatValue];
-                rect.size.width = [[value objectAtIndex:2] floatValue] - 
NSMinX(rect);
-                rect.size.height = [[value objectAtIndex:3] floatValue] - 
NSMinY(rect);
-                [dictionary setObject:NSStringFromRect(rect) forKey:@"bounds"];
+                NSNumber *l = [self value:[value objectAtIndex:0] 
ofClass:[NSNumber class] lookup:lookup];
+                NSNumber *b = [self value:[value objectAtIndex:1] 
ofClass:[NSNumber class] lookup:lookup];
+                NSNumber *r = [self value:[value objectAtIndex:2] 
ofClass:[NSNumber class] lookup:lookup];
+                NSNumber *t = [self value:[value objectAtIndex:3] 
ofClass:[NSNumber class] lookup:lookup];
+                if (l && b && r && t) {
+                    NSRect rect;
+                    rect.origin.x = [l floatValue];
+                    rect.origin.y = [b floatValue];
+                    rect.size.width = [r floatValue] - NSMinX(rect);
+                    rect.size.height = [t floatValue] - NSMinY(rect);
+                    [dictionary setObject:NSStringFromRect(rect) 
forKey:@"bounds"];
+                } else {
+                    success = NO;
+                }
             } else {
                 success = NO;
             }
         } else if ([key isEqualToString:@"Page"]) {
-            if (value = [self value:value ofClass:[NSNumber class] 
lookup:lookup])
+            if (value = [self value:value ofClass:[NSNumber class] 
lookup:lookup]) {
                 [dictionary setObject:value forKey:@"pageIndex"];
-            else{
-                success = NO;}
+            } else {
+                success = NO;
+            }
         } else if ([key isEqualToString:@"C"]) {
             if ((value = [self value:value ofClass:[NSArray class] 
lookup:lookup]) && [value count] == 3) {
-                float r, g, b;
-                r = [[value objectAtIndex:0] floatValue];
-                g = [[value objectAtIndex:1] floatValue];
-                b = [[value objectAtIndex:2] floatValue];
-                [dictionary setObject:[NSColor colorWithCalibratedRed:r 
green:g blue:b alpha:1.0] forKey:@"color"];
+                NSNumber *r = [self value:[value objectAtIndex:0] 
ofClass:[NSNumber class] lookup:lookup];
+                NSNumber *g = [self value:[value objectAtIndex:1] 
ofClass:[NSNumber class] lookup:lookup];
+                NSNumber *b = [self value:[value objectAtIndex:2] 
ofClass:[NSNumber class] lookup:lookup];
+                if (r && g && b) {
+                    [dictionary setObject:[NSColor colorWithCalibratedRed:[r 
floatValue] green:[g floatValue] blue:[b floatValue] alpha:1.0] 
forKey:@"color"];
+                } else {
+                    success = NO;
+                }
             } else {
                 success = NO;
             }
         } else if ([key isEqualToString:@"BS"]) {
             if (value = [self value:value ofClass:[NSDictionary class] 
lookup:lookup]) {
-                NSNumber *width = [value objectForKey:@"W"];
-                NSString *s = [value objectForKey:@"S"];
-                NSArray *dashPattern = [value objectForKey:@"D"];
+                NSNumber *width = [self value:[value objectForKey:@"W"] 
ofClass:[NSNumber class] lookup:lookup];
+                NSString *s = [self value:[value objectForKey:@"S"] 
ofClass:[NSString class] lookup:lookup];
+                NSArray *dashPattern = [self value:[value objectForKey:@"D"] 
ofClass:[NSArray class] lookup:lookup];
                 int style = kPDFBorderStyleSolid;
-                if (s && [s isKindOfClass:[NSString class]]) {
-                    success = NO;
-                    break;
-                }
-                if (dashPattern && [dashPattern isKindOfClass:[NSArray class]] 
== NO) {
-                    success = NO;
-                    break;
-                }
-                if (width && [width isKindOfClass:[NSNumber class]] == NO) {
-                    success = NO;
-                    break;
-                }
                 if ([s isEqualToString:@"S"])
                     style = kPDFBorderStyleSolid;
                 else if ([s isEqualToString:@"D"])
@@ -175,16 +178,8 @@
                 success = NO;
                 break;
             }
-            NSNumber *width = [value count] > 2 ? [value objectAtIndex:2] : 
nil;
-            NSArray *dashPattern = [value count] > 3 ? [value objectAtIndex:3] 
: nil;
-            if (dashPattern && [dashPattern isKindOfClass:[NSArray class]] == 
NO) {
-                success = NO;
-                break;
-            }
-            if (width && [width isKindOfClass:[NSNumber class]] == NO) {
-                success = NO;
-                break;
-            }
+            NSNumber *width = [value count] > 2 ?  [self value:[value 
objectAtIndex:2] ofClass:[NSNumber class] lookup:lookup] : nil;
+            NSArray *dashPattern = [value count] > 3 ? [self value:[value 
objectAtIndex:2] ofClass:[NSArray class] lookup:lookup] : nil;
             if (width && [width floatValue] > 0.0) {
                 [dictionary setObject:width forKey:@"lineWidth"];
                 [dictionary setObject:[NSNumber numberWithInt:dashPattern ? 
kPDFBorderStyleDashed : kPDFBorderStyleSolid] forKey:@"borderStyle"];
@@ -212,40 +207,47 @@
             }
         } else if ([key isEqualToString:@"IC"]) {
             if ((value = [self value:value ofClass:[NSArray class] 
lookup:lookup]) && [value count] == 3) {
-                float r, g, b;
-                r = [[value objectAtIndex:0] floatValue];
-                g = [[value objectAtIndex:1] floatValue];
-                b = [[value objectAtIndex:2] floatValue];
-                [dictionary setObject:[NSColor colorWithCalibratedRed:r 
green:g blue:b alpha:1.0] forKey:@"interiorColor"];
+                NSNumber *r = [self value:[value objectAtIndex:0] 
ofClass:[NSNumber class] lookup:lookup];
+                NSNumber *g = [self value:[value objectAtIndex:1] 
ofClass:[NSNumber class] lookup:lookup];
+                NSNumber *b = [self value:[value objectAtIndex:2] 
ofClass:[NSNumber class] lookup:lookup];
+                if (r && g && b) {
+                    [dictionary setObject:[NSColor colorWithCalibratedRed:[r 
floatValue] green:[g floatValue] blue:[b floatValue] alpha:1.0] 
forKey:@"interiorColor"];
+                } else {
+                    success = NO;
+                }
             } else {
                 success = NO;
             }
         } else if ([key isEqualToString:@"LE"]) {
             if ((value = [self value:value ofClass:[NSArray class] 
lookup:lookup]) && [value count] == 2) {
-                NSString *start = [value objectAtIndex:0];
-                NSString *end = [value objectAtIndex:1];
+                NSString *start = [self value:[value objectAtIndex:0] 
ofClass:[NSNumber class] lookup:lookup];
+                NSString *end = [self value:[value objectAtIndex:1] 
ofClass:[NSNumber class] lookup:lookup];
                 int startStyle = kPDFLineStyleNone;
                 int endStyle = kPDFLineStyleNone;
-                if (start && [start isKindOfClass:[NSNumber class]] == NO) {
-                    success = NO;
-                    break;
-                }
-                if (end && [end isKindOfClass:[NSNumber class]] == NO) {
-                    success = NO;
-                    break;
-                }
+                if ([start isEqualToString:@"None"])
+                    startStyle = kPDFLineStyleNone;
+                else if ([start isEqualToString:@"Square"])
+                    startStyle = kPDFLineStyleSquare;
+                else if ([start isEqualToString:@"Circle"])
+                    startStyle = kPDFLineStyleCircle;
+                else if ([start isEqualToString:@"Diamond"])
+                    startStyle = kPDFLineStyleDiamond;
+                else if ([start isEqualToString:@"OpenArrow"])
+                    startStyle = kPDFLineStyleOpenArrow;
+                else if ([start isEqualToString:@"ClosedArrow"])
+                    startStyle = kPDFLineStyleClosedArrow;
                 if ([end isEqualToString:@"None"])
                     startStyle = kPDFLineStyleNone;
                 else if ([end isEqualToString:@"Square"])
-                    startStyle = kPDFLineStyleSquare;
+                    endStyle = kPDFLineStyleSquare;
                 else if ([end isEqualToString:@"Circle"])
-                    startStyle = kPDFLineStyleCircle;
+                    endStyle = kPDFLineStyleCircle;
                 else if ([end isEqualToString:@"Diamond"])
-                    startStyle = kPDFLineStyleDiamond;
+                    endStyle = kPDFLineStyleDiamond;
                 else if ([end isEqualToString:@"OpenArrow"])
-                    startStyle = kPDFLineStyleOpenArrow;
+                    endStyle = kPDFLineStyleOpenArrow;
                 else if ([end isEqualToString:@"ClosedArrow"])
-                    startStyle = kPDFLineStyleClosedArrow;
+                    endStyle = kPDFLineStyleClosedArrow;
                 [dictionary setObject:[NSNumber numberWithInt:startStyle] 
forKey:@"startLineStyle"];
                 [dictionary setObject:[NSNumber numberWithInt:endStyle] 
forKey:@"endLineStyle"];
             } else {


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to