diff --git a/Core/Source/DTCSSStylesheet.m b/Core/Source/DTCSSStylesheet.m index f7ecd03d0..7a0fa91a8 100644 --- a/Core/Source/DTCSSStylesheet.m +++ b/Core/Source/DTCSSStylesheet.m @@ -410,6 +410,24 @@ - (void)_uncompressShorthands:(NSMutableDictionary *)styles // remove the shorthand [styles removeObjectForKey:@"padding"]; } + + shortHand = [styles objectForKey:@"background"]; + + if (shortHand) + { + [styles removeObjectForKey:@"background"]; + NSString *trimmedString = [shortHand stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + NSScanner *scanner = [NSScanner scannerWithString:trimmedString]; + NSCharacterSet *tokenEndSet = [NSCharacterSet whitespaceAndNewlineCharacterSet]; + while (![scanner isAtEnd]) { + NSString *colorName; + if ([scanner scanHTMLColor:NULL HTMLName:&colorName]) { + [styles setObject:colorName forKey:@"background-color"]; + break; + } + [scanner scanUpToCharactersFromSet:tokenEndSet intoString:NULL]; + } + } } - (void)_addStyleRule:(NSString *)rule withSelector:(NSString*)selectors diff --git a/Core/Source/NSScanner+HTML.h b/Core/Source/NSScanner+HTML.h index 6c3c78c2f..10ae8c3f3 100644 --- a/Core/Source/NSScanner+HTML.h +++ b/Core/Source/NSScanner+HTML.h @@ -41,6 +41,13 @@ */ - (BOOL)scanHTMLColor:(DTColor **)color; +/** + Scans for a typical HTML color, typically either #FFFFFF, rgb(255,255,255) or a HTML color name. + @param color An optional output parameter that will contain the scanned color if successful + @param name An optional output parameter that will contain the HTML color string + @returns `YES` if a color could be scanned + */ +- (BOOL)scanHTMLColor:(DTColor **)color HTMLName:(NSString **)name; @end diff --git a/Core/Source/NSScanner+HTML.m b/Core/Source/NSScanner+HTML.m index e76c46bda..d5c1aae4f 100644 --- a/Core/Source/NSScanner+HTML.m +++ b/Core/Source/NSScanner+HTML.m @@ -220,6 +220,11 @@ - (BOOL)scanCSSURL:(NSString **)urlString } - (BOOL)scanHTMLColor:(DTColor **)color +{ + return [self scanHTMLColor:color HTMLName:NULL]; +} + +- (BOOL)scanHTMLColor:(DTColor **)color HTMLName:(NSString **)name { NSUInteger indexBefore = [self scanLocation]; @@ -262,12 +267,16 @@ - (BOOL)scanHTMLColor:(DTColor **)color self.scanLocation = indexBefore; return NO; } - + if (color) { *color = foundColor; } - + + if (name) { + *name = colorName; + } + return YES; } diff --git a/Test/Source/DTCSSStylesheetTest.m b/Test/Source/DTCSSStylesheetTest.m index 1042f4ebe..626cac3a4 100644 --- a/Test/Source/DTCSSStylesheetTest.m +++ b/Test/Source/DTCSSStylesheetTest.m @@ -495,4 +495,16 @@ - (void)testUncompressPaddingShorthandFour STAssertTrue([paddingRight isEqualToString:@"20px"], @"margin-right should be 20px"); } +- (void)testUncompressBackgroundShorthand +{ + DTCSSStylesheet *stylesheet = [DTCSSStylesheet defaultStyleSheet]; + NSMutableDictionary *styles = [NSMutableDictionary dictionary]; + + [styles setObject:@"url(\"topbanner.png\") #00D repeat-y fixed" forKey:@"background"]; + [stylesheet _uncompressShorthands:styles]; + + NSString *backgroundColor = [styles objectForKey:@"background-color"]; + STAssertTrue([backgroundColor isEqualToString:@"#00D"], @"background-color should be #00D"); +} + @end