diff --git a/Classes/OMColorHelper.h b/Classes/OMColorHelper.h index 43beb84..f0ad91a 100644 --- a/Classes/OMColorHelper.h +++ b/Classes/OMColorHelper.h @@ -14,10 +14,13 @@ typedef enum OMColorType { OMColorTypeUIRGBA, //[UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0] OMColorTypeUIRGBAInit, //[[UIColor alloc] initWithRed:1.0 green:0.0 blue:0.0 alpha:1.0] + OMColorTypeUIHSVA, //[UIColor colorWithHue:1.0 saturation:0.0 brightness:0.0 alpha:1.0] + OMColorTypeUIHSVAInit, //[[UIColor alloc] initWithHue:1.0 saturation:0.0 brightness:0.0 alpha:1.0] + OMColorTypeUIWhite, //[UIColor colorWithWhite:0.5 alpha:1.0] OMColorTypeUIWhiteInit, //[[UIColor alloc] initWithWhite:0.5 alpha:1.0] OMColorTypeUIConstant, //[UIColor redColor] - + OMColorTypeNSRGBACalibrated, //[NSColor colorWithCalibratedRed:1.0 green:0.0 blue:0.0 alpha:1.0] OMColorTypeNSRGBADevice, //[NSColor colorWithDeviceRed:1.0 green:0.0 blue:0.0 alpha:1.0] OMColorTypeNSWhiteCalibrated, //[NSColor colorWithCalibratedWhite:0.5 alpha:1.0] @@ -42,6 +45,7 @@ BOOL OMColorTypeIsNSColor(OMColorType colorType) { return colorType >= OMColorTy NSDictionary *_constantColorsByName; NSRegularExpression *_rgbaUIColorRegex; + NSRegularExpression *_hsvaUIColorRegex; NSRegularExpression *_rgbaNSColorRegex; NSRegularExpression *_whiteNSColorRegex; NSRegularExpression *_whiteUIColorRegex; diff --git a/Classes/OMColorHelper.m b/Classes/OMColorHelper.m index 713ed68..12b04f1 100755 --- a/Classes/OMColorHelper.m +++ b/Classes/OMColorHelper.m @@ -49,8 +49,9 @@ - (id)init [NSColor purpleColor], @"purple", [NSColor brownColor], @"brown", [[NSColor clearColor] colorUsingColorSpace:[NSColorSpace genericRGBColorSpace]], @"clear", nil]; - _rgbaUIColorRegex = [[NSRegularExpression regularExpressionWithPattern:@"(\\[\\s*UIColor\\s+colorWith|\\[\\s*\\[\\s*UIColor\\s+alloc\\]\\s*initWith)Red:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s+green:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s+blue:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s*alpha:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s*\\]" options:0 error:NULL] retain]; + + _hsvaUIColorRegex = [[NSRegularExpression regularExpressionWithPattern:@"(\\[\\s*UIColor\\s+colorWith|\\[\\s*\\[\\s*UIColor\\s+alloc\\]\\s*initWith)Hue:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s+saturation:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s+brightness:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s*alpha:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s*\\]" options:0 error:NULL] retain]; _whiteUIColorRegex = [[NSRegularExpression regularExpressionWithPattern:@"(\\[\\s*UIColor\\s+colorWith|\\[\\s*\\[\\s*UIColor\\s+alloc\\]\\s*initWith)White:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s+alpha:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s*\\]" options:0 error:NULL] retain]; _rgbaNSColorRegex = [[NSRegularExpression regularExpressionWithPattern:@"\\[\\s*NSColor\\s+colorWith(Calibrated|Device)Red:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s+green:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s+blue:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s+alpha:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s*\\]" options:0 error:NULL] retain]; _whiteNSColorRegex = [[NSRegularExpression regularExpressionWithPattern:@"\\[\\s*NSColor\\s+colorWith(Calibrated|Device)White:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s+alpha:\\s*([0-9]*\\.?[0-9]*f?)\\s*(\\/\\s*[0-9]*\\.?[0-9]*f?)?\\s*\\]" options:0 error:NULL] retain]; @@ -349,7 +350,36 @@ - (NSColor *)colorInText:(NSString *)text selectedRange:(NSRange)selectedRange t } }]; } - + + if (!foundColor) { + [_hsvaUIColorRegex enumerateMatchesInString:text options:0 range:NSMakeRange(0, text.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { + NSRange colorRange = [result range]; + if (selectedRange.location >= colorRange.location && NSMaxRange(selectedRange) <= NSMaxRange(colorRange)) { + NSString *typeIndicator = [text substringWithRange:[result rangeAtIndex:1]]; + if ([typeIndicator rangeOfString:@"init"].location != NSNotFound) { + foundColorType = OMColorTypeUIHSVAInit; + } else { + foundColorType = OMColorTypeUIHSVA; + } + + double hue = [[text substringWithRange:[result rangeAtIndex:2]] doubleValue]; + hue = [self dividedValue:hue withDivisorRange:[result rangeAtIndex:3] inString:text]; + + double saturation = [[text substringWithRange:[result rangeAtIndex:4]] doubleValue]; + saturation = [self dividedValue:saturation withDivisorRange:[result rangeAtIndex:5] inString:text]; + + double brightness = [[text substringWithRange:[result rangeAtIndex:6]] doubleValue]; + brightness = [self dividedValue:brightness withDivisorRange:[result rangeAtIndex:7] inString:text]; + + double alpha = [[text substringWithRange:[result rangeAtIndex:8]] doubleValue]; + alpha = [self dividedValue:alpha withDivisorRange:[result rangeAtIndex:9] inString:text]; + + foundColor = [NSColor colorWithCalibratedHue:hue saturation:saturation brightness:brightness alpha:alpha]; + foundColorRange = colorRange; + *stop = YES; + } + }]; + } if (!foundColor) { [_constantColorRegex enumerateMatchesInString:text options:0 range:NSMakeRange(0, text.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { NSRange colorRange = [result range]; @@ -453,9 +483,11 @@ - (NSString *)colorStringForColor:(NSColor *)color withType:(OMColorType)colorTy { NSString *colorString = nil; CGFloat red = -1.0; CGFloat green = -1.0; CGFloat blue = -1.0; CGFloat alpha = -1.0; + CGFloat hue = -1.0; CGFloat saturation = -1.0; CGFloat brightness = -1.0; color = [color colorUsingColorSpace:[NSColorSpace genericRGBColorSpace]]; [color getRed:&red green:&green blue:&blue alpha:&alpha]; - + [color getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha]; + if (red >= 0) { for (NSString *colorName in _constantColorsByName) { NSColor *constantColor = [_constantColorsByName objectForKey:colorName]; @@ -490,7 +522,11 @@ - (NSString *)colorStringForColor:(NSColor *)color withType:(OMColorType)colorTy colorString = [NSString stringWithFormat:@"[NSColor colorWithCalibratedRed:%.3f green:%.3f blue:%.3f alpha:%.3f]", red, green, blue, alpha]; } else if (colorType == OMColorTypeNSRGBADevice || colorType == OMColorTypeNSWhiteDevice) { colorString = [NSString stringWithFormat:@"[NSColor colorWithDeviceRed:%.3f green:%.3f blue:%.3f alpha:%.3f]", red, green, blue, alpha]; - } + } else if (colorType == OMColorTypeUIHSVA) { + colorString = [NSString stringWithFormat:@"[UIColor colorWithHue:%0.3f saturation:%0.3f brightness:%0.3f alpha:%0.3f]", hue, saturation, brightness, alpha]; + } else if (colorType == OMColorTypeUIHSVAInit) { + colorString = [NSString stringWithFormat:@"[[UIColor alloc] initWithHue:%0.3f saturation:%0.3f brightness:%0.3f alpha:%0.3f]", hue, saturation, brightness, alpha]; + } } } }