Skip to content
This repository has been archived by the owner on Jul 8, 2019. It is now read-only.

Commit

Permalink
Merge c9cb591 into 92c662f
Browse files Browse the repository at this point in the history
  • Loading branch information
thomasguenzel committed Mar 4, 2018
2 parents 92c662f + c9cb591 commit 944b727
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 38 deletions.
57 changes: 45 additions & 12 deletions FormatterKit/TTTColorFormatter.h
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,19 @@
#import <Foundation/Foundation.h>
#import <Availability.h>

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED

#include "TargetConditionals.h"

#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
#define TTTColor UIColor

#elif TARGET_OS_MAC
#import <Cocoa/Cocoa.h>
#define TTTColor NSColor
#endif



/**
Instances of `TTTColorFormatter` create string representations of `UIColor` objects, and convert textual representations of colors into `UIColor` objects.
Expand All @@ -50,7 +61,7 @@
@return A hexadecimal string representation.
*/
- (NSString *)hexadecimalStringFromColor:(UIColor *)color;
- (NSString *)hexadecimalStringFromColor:(TTTColor *)color;

/**
Returns the color represented by the specified hexadecimal string.
Expand All @@ -59,7 +70,7 @@
@return The color.
*/
- (UIColor *)colorFromHexadecimalString:(NSString *)string;
- (TTTColor *)colorFromHexadecimalString:(NSString *)string;

///----------
/// @name RGB
Expand All @@ -72,7 +83,7 @@
@return An RGB string representation.
*/
- (NSString *)RGBStringFromColor:(UIColor *)color;
- (NSString *)RGBStringFromColor:(TTTColor *)color;

/**
Returns the color represented by the specified RGB string.
Expand All @@ -81,7 +92,7 @@
@return The color.
*/
- (UIColor *)colorFromRGBString:(NSString *)string;
- (TTTColor *)colorFromRGBString:(NSString *)string;

///-----------
/// @name RGBA
Expand All @@ -94,7 +105,7 @@
@return An RGBA string representation.
*/
- (NSString *)RGBAStringFromColor:(UIColor *)color;
- (NSString *)RGBAStringFromColor:(TTTColor *)color;

/**
Returns the color represented by the specified RGBA string.
Expand All @@ -103,7 +114,7 @@
@return The color.
*/
- (UIColor *)colorFromRGBAString:(NSString *)string;
- (TTTColor *)colorFromRGBAString:(NSString *)string;

///-----------
/// @name CMYK
Expand All @@ -116,7 +127,7 @@
@return A CMYK string representation.
*/
- (NSString *)CMYKStringFromColor:(UIColor *)color;
- (NSString *)CMYKStringFromColor:(TTTColor *)color;

/**
Returns the color represented by the specified CMYK string.
Expand All @@ -125,7 +136,7 @@
@return The color.
*/
- (UIColor *)colorFromCMYKString:(NSString *)string;
- (TTTColor *)colorFromCMYKString:(NSString *)string;

///----------
/// @name HSL
Expand All @@ -138,7 +149,7 @@
@return An HSL string representation.
*/
- (NSString *)HSLStringFromColor:(UIColor *)color;
- (NSString *)HSLStringFromColor:(TTTColor *)color;

/**
Returns the color represented by the specified HSL string.
Expand All @@ -147,12 +158,22 @@
@return The color.
*/
- (UIColor *)colorFromHSLString:(NSString *)string;
- (TTTColor *)colorFromHSLString:(NSString *)string;

///--------------------------
/// @name UIColor Declaration
///--------------------------

/**
Returns a `TTTColor` declaration for the specified color.
@param color The color.
@return A `TTTColor` declaration.
*/
- (NSString *)TTTColorDeclarationFromColor:(TTTColor *)color;

#if TARGET_OS_IPHONE
/**
Returns a `UIColor` declaration for the specified color.
Expand All @@ -162,6 +183,18 @@
*/
- (NSString *)UIColorDeclarationFromColor:(UIColor *)color;

@end
#elif TARGET_OS_MAC

/**
Returns a `NSColor` declaration for the specified color.
@param color The color.
@return A `NSColor` declaration.
*/
- (NSString *)NSColorDeclarationFromColor:(NSColor *)color;

#endif

@end

64 changes: 38 additions & 26 deletions FormatterKit/TTTColorFormatter.m
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,13 @@
#import "TTTColorFormatter.h"
#import "NSBundle+FormatterKit.h"

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED

#import <tgmath.h>

static void TTTGetRGBAComponentsFromColor(UIColor *color, CGFloat *red, CGFloat *green, CGFloat *blue, CGFloat *alpha) {
static void TTTGetRGBAComponentsFromColor(TTTColor *color, CGFloat *red, CGFloat *green, CGFloat *blue, CGFloat *alpha) {
[color getRed:red green:green blue:blue alpha:alpha];
}

static void TTTGetCMYKComponentsFromColor(UIColor *color, CGFloat *cyan, CGFloat *magenta, CGFloat *yellow, CGFloat *black) {
static void TTTGetCMYKComponentsFromColor(TTTColor *color, CGFloat *cyan, CGFloat *magenta, CGFloat *yellow, CGFloat *black) {
CGFloat r = 0.0f, g = 0.0f, b = 0.0f;
TTTGetRGBAComponentsFromColor(color, &r, &g, &b, NULL);

Expand All @@ -48,7 +46,7 @@ static void TTTGetCMYKComponentsFromColor(UIColor *color, CGFloat *cyan, CGFloat
if (black) *black = k;
}

static void TTTGetHSLComponentsFromColor(UIColor *color, CGFloat *hue, CGFloat *saturation, CGFloat *lightness) {
static void TTTGetHSLComponentsFromColor(TTTColor *color, CGFloat *hue, CGFloat *saturation, CGFloat *lightness) {
CGFloat r = 0.0f, g = 0.0f, b = 0.0f;
TTTGetRGBAComponentsFromColor(color, &r, &g, &b, NULL);

Expand Down Expand Up @@ -87,14 +85,14 @@ static void TTTGetHSLComponentsFromColor(UIColor *color, CGFloat *hue, CGFloat *

@implementation TTTColorFormatter

- (NSString *)hexadecimalStringFromColor:(UIColor *)color {
- (NSString *)hexadecimalStringFromColor:(TTTColor *)color {
CGFloat r = 0.0f, g = 0.0f, b = 0.0f;
TTTGetRGBAComponentsFromColor(color, &r, &g, &b, NULL);

return [NSString stringWithFormat:@"#%02lX%02lX%02lX", (unsigned long)round(r * 0xFF), (unsigned long)round(g * 0xFF), (unsigned long)round(b * 0xFF)];
}

- (UIColor *)colorFromHexadecimalString:(NSString *)string {
- (TTTColor *)colorFromHexadecimalString:(NSString *)string {
NSScanner *scanner = [NSScanner scannerWithString:string];
scanner.charactersToBeSkipped = [[NSCharacterSet alphanumericCharacterSet] invertedSet];

Expand All @@ -105,33 +103,33 @@ - (UIColor *)colorFromHexadecimalString:(NSString *)string {
CGFloat g = ((value & 0xFF00) >> 8) / 255.0f;
CGFloat b = ((value & 0xFF)) / 255.0f;

return [UIColor colorWithRed:r green:g blue:b alpha:1.0];
return [TTTColor colorWithRed:r green:g blue:b alpha:1.0];
}

#pragma mark -

- (NSString *)RGBStringFromColor:(UIColor *)color {
- (NSString *)RGBStringFromColor:(TTTColor *)color {
CGFloat r = 0.0f, g = 0.0f, b = 0.0f;
TTTGetRGBAComponentsFromColor(color, &r, &g, &b, NULL);

return [NSString stringWithFormat:@"rgb(%lu, %lu, %lu)", (unsigned long)round(r * 0xFF), (unsigned long)round(g * 0xFF), (unsigned long)round(b * 0xFF)];
}

- (UIColor *)colorFromRGBString:(NSString *)string {
- (TTTColor *)colorFromRGBString:(NSString *)string {
return [self colorFromRGBAString:string];
}

#pragma mark -

- (NSString *)RGBAStringFromColor:(UIColor *)color {
- (NSString *)RGBAStringFromColor:(TTTColor *)color {
CGFloat r = 0.0f, g = 0.0f, b = 0.0f, a = 0.0f;
TTTGetRGBAComponentsFromColor(color, &r, &g, &b, &a);

return [NSString stringWithFormat:@"rgb(%lu, %lu, %lu, %g)", (unsigned long)round(r * 0xFF), (unsigned long)round(g * 0xFF), (unsigned long)round(b * 0xFF), a];

}

- (UIColor *)colorFromRGBAString:(NSString *)string {
- (TTTColor *)colorFromRGBAString:(NSString *)string {
NSScanner *scanner = [NSScanner scannerWithString:string];
scanner.charactersToBeSkipped = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];

Expand All @@ -141,23 +139,23 @@ - (UIColor *)colorFromRGBAString:(NSString *)string {
[scanner scanInteger:&b];

if ([scanner scanFloat:&a]) {
return [UIColor colorWithRed:(r / 255.0f) green:(g / 255.0f) blue:(b / 255.0f) alpha:a];
return [TTTColor colorWithRed:(r / 255.0f) green:(g / 255.0f) blue:(b / 255.0f) alpha:a];
} else {
return [UIColor colorWithRed:(r / 255.0f) green:(g / 255.0f) blue:(b / 255.0f) alpha:1.0];
return [TTTColor colorWithRed:(r / 255.0f) green:(g / 255.0f) blue:(b / 255.0f) alpha:1.0];
}

}

#pragma mark -

- (NSString *)CMYKStringFromColor:(UIColor *)color {
- (NSString *)CMYKStringFromColor:(TTTColor *)color {
CGFloat c = 0.0f, m = 0.0f, y = 0.0f, k = 0.0f;
TTTGetCMYKComponentsFromColor(color, &c, &m, &y, &k);

return [NSString stringWithFormat:@"cmyk(%g%%, %g%%, %g%%, %g%%)", c * 100.0f, m * 100.0f, y * 100.0f, k * 100.0f];
}

- (UIColor *)colorFromCMYKString:(NSString *)string {
- (TTTColor *)colorFromCMYKString:(NSString *)string {
NSScanner *scanner = [NSScanner scannerWithString:string];
scanner.charactersToBeSkipped = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];

Expand All @@ -175,19 +173,19 @@ - (UIColor *)colorFromCMYKString:(NSString *)string {

CGFloat dk = 1.0f - k;

return [UIColor colorWithRed:(1.0f - c) * dk green:(1.0f - m) * dk blue:(1.0f - y) * dk alpha:1.0f];
return [TTTColor colorWithRed:(1.0f - c) * dk green:(1.0f - m) * dk blue:(1.0f - y) * dk alpha:1.0f];
}

#pragma mark -

- (NSString *)HSLStringFromColor:(UIColor *)color {
- (NSString *)HSLStringFromColor:(TTTColor *)color {
CGFloat h = 0.0f, s = 0.0f, l = 0.0f;
TTTGetHSLComponentsFromColor(color, &h, &s, &l);

return [NSString stringWithFormat:@"hsl(%0.0lu, %g%%, %g%%)", (unsigned long)round(h * 0xFF), s * 100.0f, l * 100.0f];
}

- (UIColor *)colorFromHSLString:(NSString *)string {
- (TTTColor *)colorFromHSLString:(NSString *)string {
NSScanner *scanner = [NSScanner scannerWithString:string];
scanner.charactersToBeSkipped = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];

Expand All @@ -196,33 +194,48 @@ - (UIColor *)colorFromHSLString:(NSString *)string {
[scanner scanInteger:&s];
[scanner scanInteger:&l];

return [UIColor colorWithHue:(h / 359.0f) saturation:(s / 100.0f) brightness:(l / 100.0f) alpha:1.0f];
return [TTTColor colorWithHue:(h / 359.0f) saturation:(s / 100.0f) brightness:(l / 100.0f) alpha:1.0f];
}

#pragma mark -

- (NSString *)UIColorDeclarationFromColor:(UIColor *)color {
- (NSString *)TTTColorDeclarationFromColor:(TTTColor *)color {
CGFloat r = 0.0f, g = 0.0f, b = 0.0f, a = 0.0f;
[color getRed:&r green:&g blue:&b alpha:&a];

return [NSString stringWithFormat:@"[UIColor colorWithRed:%g green:%g blue:%g alpha:%g]", r, g, b, a];
return [NSString stringWithFormat:@"[TTTColor colorWithRed:%g green:%g blue:%g alpha:%g]", r, g, b, a];
}

#if TARGET_OS_IPHONE

- (NSString *)UIColorDeclarationFromColor:(UIColor *)color {
return [self TTTColorDeclarationFromColor:color];
}

#elif TARGET_OS_MAC

- (NSString *)NSColorDeclarationFromColor:(NSColor *)color {
return [self TTTColorDeclarationFromColor:color];
}

#endif


#pragma mark - NSFormatter

- (NSString *)stringForObjectValue:(id)anObject {
if (![anObject isKindOfClass:[UIColor class]]) {
if (![anObject isKindOfClass:[TTTColor class]]) {
return nil;
}

return [self hexadecimalStringFromColor:(UIColor *)anObject];
return [self hexadecimalStringFromColor:(TTTColor *)anObject];
}

- (BOOL)getObjectValue:(out __autoreleasing id *)obj
forString:(NSString *)string
errorDescription:(out NSString *__autoreleasing *)error
{
UIColor *color = nil;
TTTColor *color = nil;
if ([string hasPrefix:@"#"]) {
color = [self colorFromHexadecimalString:string];
} else if ([string hasPrefix:@"rgb("]) {
Expand All @@ -248,4 +261,3 @@ - (BOOL)getObjectValue:(out __autoreleasing id *)obj

@end

#endif

0 comments on commit 944b727

Please sign in to comment.