X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Fcolors.py;h=4b8ab2c775366eea73e8a12667cb5760f4fc715e;hp=13ab6372f42c8c6e1f19ad73b41c0431e7081f21;hb=06e7b73e09e8499af751f60acc2f63a065867c5f;hpb=91476ec37e468301d39182aff48936749158e976 diff --git a/rainbowstream/colors.py b/rainbowstream/colors.py index 13ab637..4b8ab2c 100644 --- a/rainbowstream/colors.py +++ b/rainbowstream/colors.py @@ -1,16 +1,83 @@ -def _wrap_with(code): - - def inner(text, bold=False): - c = code - if bold: - c = "1;%s" % c - return "\033[%sm%s\033[0m" % (c, text) - return inner - -red = _wrap_with('31') -green = _wrap_with('32') -yellow = _wrap_with('33') -blue = _wrap_with('34') -magenta = _wrap_with('35') -cyan = _wrap_with('36') -white = _wrap_with('37') \ No newline at end of file +import random +import itertools +from functools import wraps +from termcolor import * +from pyfiglet import figlet_format + +grey = lambda x: colored(x, 'grey', attrs=['bold']) +red = lambda x: colored(x, 'red', attrs=['bold']) +green = lambda x: colored(x, 'green', attrs=['bold']) +yellow = lambda x: colored(x, 'yellow', attrs=['bold']) +blue = lambda x: colored(x, 'blue', attrs=['bold']) +magenta = lambda x: colored(x, 'magenta', attrs=['bold']) +cyan = lambda x: colored(x, 'cyan', attrs=['bold']) +white = lambda x: colored(x, 'white', attrs=['bold']) + +on_grey = lambda x: colored(x, 'white', 'on_grey', attrs=['bold']) +on_red = lambda x: colored(x, 'white', 'on_red', attrs=['bold']) +on_green = lambda x: colored(x, 'white', 'on_green', attrs=['bold']) +on_yellow = lambda x: colored(x, 'white', 'on_yellow', attrs=['bold']) +on_blue = lambda x: colored(x, 'white', 'on_blue', attrs=['bold']) +on_magenta = lambda x: colored(x, 'white', 'on_magenta', attrs=['bold']) +on_cyan = lambda x: colored(x, 'white', 'on_cyan', attrs=['bold']) +on_white = lambda x: colored(x, 'white', 'on_white', attrs=['bold']) + +colors_shuffle = [grey, red, green, yellow, blue, magenta, cyan] +background_shuffle = [ + on_grey, + on_red, + on_green, + on_yellow, + on_blue, + on_magenta, + on_cyan] +cyc = itertools.cycle(colors_shuffle[1:]) + + +def order_rainbow(s): + """ + Print a string with ordered color with each character + """ + c = [colors_shuffle[i % 7](s[i]) for i in xrange(len(s))] + return reduce(lambda x, y: x + y, c) + + +def random_rainbow(s): + """ + Print a string with random color with each character + """ + c = [random.choice(colors_shuffle)(i) for i in s] + return reduce(lambda x, y: x + y, c) + + +def Memoize(func): + """ + Memoize decorator + """ + cache = {} + + @wraps(func) + def wrapper(*args): + if args not in cache: + cache[args] = func(*args) + return cache[args] + return wrapper + + +@Memoize +def cycle_color(s): + """ + Cycle the colors_shuffle + """ + return next(cyc)(s) + + +def ascii_art(text): + """ + Draw the Ascii Art + """ + fi = figlet_format(text, font='doom') + print('\n'.join( + [next(cyc)(i) for i in fi.split('\n')] + ) + )