Created
May 30, 2017 00:41
-
-
Save dsandler/84440bd15ea7657107adbc9f831a17f4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Color order: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A700. | |
# Adapted from https://raw.githubusercontent.com/google/material-design-lite/mdl-1.x/src/_color-definitions.scss | |
import re | |
class ColorTint(object): | |
def __init__(self, name, tint, color): | |
self.name = name | |
self.tint = tint | |
self.color = color | |
def __repr__(self): | |
return "<%s %s: %s>" % (self.name, self.tint, self.tohex()) | |
def __str__(self): | |
return self.tohex() | |
def tohex(self): | |
return '#%02x%02x%02x' % self.color | |
class ColorFamily(object): | |
COLOR_ORDER = "50 100 200 300 400 500 600 700 800 900 A100 A200 A400 A700".split() | |
def __init__(self, name, colorlist): | |
self.name=name | |
self.colorlist=[tuple(int(x) for x in rgb.split(',')) for rgb in colorlist] | |
self.tintassoc=zip(self.COLOR_ORDER[0:len(colorlist)], self.colorlist) | |
self.tintobjects=[(key, ColorTint(self.name, key, value)) for (key, value) in self.tintassoc] | |
self.colormap=dict(self.tintobjects) | |
def __getitem__(self, tint): | |
if type(tint) is str and tint in self.colormap: | |
return self.colormap[tint] | |
elif type(tint) is int: | |
if tint < 50: | |
return self.colorlist[tint.upper()] | |
else: | |
if tint > 1000: | |
tint = 'A%d' % (tint-1000) | |
else: | |
tint=str(tint) | |
return self.colormap[tint] | |
raise IndexError('unable to parse tint: "%s"' % tint) | |
def __iter__(self): | |
return (b for (a,b) in self.tintobjects) | |
def __str__(self): | |
return ', '.join(str(x) for x in self) | |
def __repr__(self): | |
return "<ColorFamily '%s' (%d tints)>" % (self.name, len(self.colormap)) | |
class ColorGetter(object): | |
COLORS = { | |
'red': [ | |
"255,235,238", | |
"255,205,210", | |
"239,154,154", | |
"229,115,115", | |
"239,83,80", | |
"244,67,54", | |
"229,57,53", | |
"211,47,47", | |
"198,40,40", | |
"183,28,28", | |
"255,138,128", | |
"255,82,82", | |
"255,23,68", | |
"213,0,0" | |
], | |
'pink': [ | |
"252,228,236", | |
"248,187,208", | |
"244,143,177", | |
"240,98,146", | |
"236,64,122", | |
"233,30,99", | |
"216,27,96", | |
"194,24,91", | |
"173,20,87", | |
"136,14,79", | |
"255,128,171", | |
"255,64,129", | |
"245,0,87", | |
"197,17,98" | |
], | |
'purple': [ | |
"243,229,245", | |
"225,190,231", | |
"206,147,216", | |
"186,104,200", | |
"171,71,188", | |
"156,39,176", | |
"142,36,170", | |
"123,31,162", | |
"106,27,154", | |
"74,20,140", | |
"234,128,252", | |
"224,64,251", | |
"213,0,249", | |
"170,0,255" | |
], | |
'deeppurple': [ | |
"237,231,246", | |
"209,196,233", | |
"179,157,219", | |
"149,117,205", | |
"126,87,194", | |
"103,58,183", | |
"94,53,177", | |
"81,45,168", | |
"69,39,160", | |
"49,27,146", | |
"179,136,255", | |
"124,77,255", | |
"101,31,255", | |
"98,0,234" | |
], | |
'indigo': [ | |
"232,234,246", | |
"197,202,233", | |
"159,168,218", | |
"121,134,203", | |
"92,107,192", | |
"63,81,181", | |
"57,73,171", | |
"48,63,159", | |
"40,53,147", | |
"26,35,126", | |
"140,158,255", | |
"83,109,254", | |
"61,90,254", | |
"48,79,254" | |
], | |
'blue': [ | |
"227,242,253", | |
"187,222,251", | |
"144,202,249", | |
"100,181,246", | |
"66,165,245", | |
"33,150,243", | |
"30,136,229", | |
"25,118,210", | |
"21,101,192", | |
"13,71,161", | |
"130,177,255", | |
"68,138,255", | |
"41,121,255", | |
"41,98,255" | |
], | |
'lightblue': [ | |
"225,245,254", | |
"179,229,252", | |
"129,212,250", | |
"79,195,247", | |
"41,182,246", | |
"3,169,244", | |
"3,155,229", | |
"2,136,209", | |
"2,119,189", | |
"1,87,155", | |
"128,216,255", | |
"64,196,255", | |
"0,176,255", | |
"0,145,234" | |
], | |
'cyan': [ | |
"224,247,250", | |
"178,235,242", | |
"128,222,234", | |
"77,208,225", | |
"38,198,218", | |
"0,188,212", | |
"0,172,193", | |
"0,151,167", | |
"0,131,143", | |
"0,96,100", | |
"132,255,255", | |
"24,255,255", | |
"0,229,255", | |
"0,184,212" | |
], | |
'teal': [ | |
"224,242,241", | |
"178,223,219", | |
"128,203,196", | |
"77,182,172", | |
"38,166,154", | |
"0,150,136", | |
"0,137,123", | |
"0,121,107", | |
"0,105,92", | |
"0,77,64", | |
"167,255,235", | |
"100,255,218", | |
"29,233,182", | |
"0,191,165" | |
], | |
'green': [ | |
"232,245,233", | |
"200,230,201", | |
"165,214,167", | |
"129,199,132", | |
"102,187,106", | |
"76,175,80", | |
"67,160,71", | |
"56,142,60", | |
"46,125,50", | |
"27,94,32", | |
"185,246,202", | |
"105,240,174", | |
"0,230,118", | |
"0,200,83" | |
], | |
'lightgreen': [ | |
"241,248,233", | |
"220,237,200", | |
"197,225,165", | |
"174,213,129", | |
"156,204,101", | |
"139,195,74", | |
"124,179,66", | |
"104,159,56", | |
"85,139,47", | |
"51,105,30", | |
"204,255,144", | |
"178,255,89", | |
"118,255,3", | |
"100,221,23" | |
], | |
'lime': [ | |
"249,251,231", | |
"240,244,195", | |
"230,238,156", | |
"220,231,117", | |
"212,225,87", | |
"205,220,57", | |
"192,202,51", | |
"175,180,43", | |
"158,157,36", | |
"130,119,23", | |
"244,255,129", | |
"238,255,65", | |
"198,255,0", | |
"174,234,0" | |
], | |
'yellow': [ | |
"255,253,231", | |
"255,249,196", | |
"255,245,157", | |
"255,241,118", | |
"255,238,88", | |
"255,235,59", | |
"253,216,53", | |
"251,192,45", | |
"249,168,37", | |
"245,127,23", | |
"255,255,141", | |
"255,255,0", | |
"255,234,0", | |
"255,214,0" | |
], | |
'amber': [ | |
"255,248,225", | |
"255,236,179", | |
"255,224,130", | |
"255,213,79", | |
"255,202,40", | |
"255,193,7", | |
"255,179,0", | |
"255,160,0", | |
"255,143,0", | |
"255,111,0", | |
"255,229,127", | |
"255,215,64", | |
"255,196,0", | |
"255,171,0" | |
], | |
'orange': [ | |
"255,243,224", | |
"255,224,178", | |
"255,204,128", | |
"255,183,77", | |
"255,167,38", | |
"255,152,0", | |
"251,140,0", | |
"245,124,0", | |
"239,108,0", | |
"230,81,0", | |
"255,209,128", | |
"255,171,64", | |
"255,145,0", | |
"255,109,0" | |
], | |
'deeporange': [ | |
"251,233,231", | |
"255,204,188", | |
"255,171,145", | |
"255,138,101", | |
"255,112,67", | |
"255,87,34", | |
"244,81,30", | |
"230,74,25", | |
"216,67,21", | |
"191,54,12", | |
"255,158,128", | |
"255,110,64", | |
"255,61,0", | |
"221,44,0" | |
], | |
# Color order: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900. | |
'brown': [ | |
"239,235,233", | |
"215,204,200", | |
"188,170,164", | |
"161,136,127", | |
"141,110,99", | |
"121,85,72", | |
"109,76,65", | |
"93,64,55", | |
"78,52,46", | |
"62,39,35" | |
], | |
'grey': [ | |
"250,250,250", | |
"245,245,245", | |
"238,238,238", | |
"224,224,224", | |
"189,189,189", | |
"158,158,158", | |
"117,117,117", | |
"97,97,97", | |
"66,66,66", | |
"33,33,33" | |
], | |
'bluegrey': [ | |
"236,239,241", | |
"207,216,220", | |
"176,190,197", | |
"144,164,174", | |
"120,144,156", | |
"96,125,139", | |
"84,110,122", | |
"69,90,100", | |
"55,71,79", | |
"38,50,56" | |
], | |
} | |
ALIASES={ | |
'gray':'grey', | |
'lightred':'pink', | |
'darkorange':'deeporange', | |
'darkpurple':'deeppurple' | |
} | |
def __init__(self): | |
pass | |
def __iter__(self): | |
return iter(self.COLORS) | |
def keys(self): | |
return iter(self) | |
def values(self): | |
return (self[x] for x in self) | |
def items(self): | |
return ((x, self[x]) for x in self) | |
def __getattr__(self, name): | |
return self.getcolor(name) | |
def __getitem__(self, name): | |
return self.getcolor(name) | |
def getcolor(self, name): | |
name = name.lower() | |
if name in self.ALIASES: | |
name = self.ALIASES[name] | |
if name in self.COLORS: | |
return ColorFamily(name, self.COLORS[name]) | |
m = re.match(r'^([-a-z ]+)[- _.]?(a?[0-9]+)$', name) | |
if m: | |
name = re.sub(r'[^a-z]','',m.group(1)) | |
tint = m.group(2) | |
if name in self.ALIASES: | |
name = self.ALIASES[name] | |
if name in self.COLORS: | |
return ColorFamily(name, self.COLORS[name])[tint] | |
raise AttributeError('unable to parse color: "%s"' % name) | |
color=ColorGetter() | |
if __name__ == '__main__': | |
for name, c in color.items(): | |
for x in c: | |
print repr(x) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment