Commit | Line | Data |
---|---|---|
2a6238f5 O |
1 | import random |
2 | import itertools | |
8c840a83 | 3 | from functools import wraps |
8c840a83 | 4 | from pyfiglet import figlet_format |
632c6fa5 | 5 | from .config import * |
c075e6dc | 6 | from functools import reduce |
8c840a83 | 7 | |
6fa09c14 VNM |
8 | |
9 | def basic_color(code): | |
10 | """ | |
11 | 16 colors supported | |
12 | """ | |
13 | def inner(text, bold=True): | |
533edcdb VNM |
14 | c = code |
15 | if bold: | |
16 | c = "1;%s" % c | |
17 | return "\033[%sm%s\033[0m" % (c, text) | |
18 | return inner | |
8c840a83 | 19 | |
6fa09c14 VNM |
20 | |
21 | def RGB(code): | |
22 | """ | |
23 | 256 colors supported | |
24 | """ | |
93384849 | 25 | def inner(text): |
6fa09c14 | 26 | c = code |
6fa09c14 VNM |
27 | return "\033[38;5;%sm%s\033[0m" % (c, text) |
28 | return inner | |
29 | ||
30 | ||
c075e6dc O |
31 | default = basic_color('39') |
32 | black = basic_color('30') | |
33 | red = basic_color('31') | |
34 | green = basic_color('32') | |
35 | yellow = basic_color('33') | |
36 | blue = basic_color('34') | |
37 | magenta = basic_color('35') | |
38 | cyan = basic_color('36') | |
39 | grey = basic_color('90') | |
40 | light_red = basic_color('91') | |
41 | light_green = basic_color('92') | |
42 | light_yellow = basic_color('93') | |
43 | light_blue = basic_color('94') | |
44 | light_magenta = basic_color('95') | |
45 | light_cyan = basic_color('96') | |
46 | white = basic_color('97') | |
6fa09c14 | 47 | |
c075e6dc O |
48 | on_default = basic_color('49') |
49 | on_black = basic_color('40') | |
50 | on_red = basic_color('41') | |
51 | on_green = basic_color('42') | |
52 | on_yellow = basic_color('43') | |
53 | on_blue = basic_color('44') | |
54 | on_magenta = basic_color('45') | |
55 | on_cyan = basic_color('46') | |
56 | on_grey = basic_color('100') | |
57 | on_light_red = basic_color('101') | |
58 | on_light_green = basic_color('102') | |
59 | on_light_yellow = basic_color('103') | |
60 | on_light_blue = basic_color('104') | |
6fa09c14 | 61 | on_light_magenta = basic_color('105') |
c075e6dc O |
62 | on_light_cyan = basic_color('106') |
63 | on_white = basic_color('107') | |
533edcdb | 64 | |
c075e6dc O |
65 | colors_shuffle = [locals()[i.encode('utf8')] if not i.startswith( |
66 | 'RGB_') else RGB(int(i[4:])) for i in c['CYCLE_COLOR']] | |
632c6fa5 | 67 | |
2a6238f5 O |
68 | background_shuffle = [ |
69 | on_grey, | |
533edcdb VNM |
70 | on_light_red, |
71 | on_light_green, | |
72 | on_light_yellow, | |
73 | on_light_blue, | |
74 | on_light_magenta, | |
75 | on_light_cyan] | |
668db21c | 76 | cyc = itertools.cycle(colors_shuffle[1:]) |
8c840a83 O |
77 | |
78 | ||
79 | def order_rainbow(s): | |
80 | """ | |
81 | Print a string with ordered color with each character | |
82 | """ | |
2a6238f5 O |
83 | c = [colors_shuffle[i % 7](s[i]) for i in xrange(len(s))] |
84 | return reduce(lambda x, y: x + y, c) | |
85 | ||
8c840a83 O |
86 | |
87 | def random_rainbow(s): | |
88 | """ | |
89 | Print a string with random color with each character | |
90 | """ | |
668db21c | 91 | c = [random.choice(colors_shuffle)(i) for i in s] |
2a6238f5 O |
92 | return reduce(lambda x, y: x + y, c) |
93 | ||
8c840a83 O |
94 | |
95 | def Memoize(func): | |
96 | """ | |
97 | Memoize decorator | |
98 | """ | |
99 | cache = {} | |
2a6238f5 | 100 | |
8c840a83 O |
101 | @wraps(func) |
102 | def wrapper(*args): | |
103 | if args not in cache: | |
104 | cache[args] = func(*args) | |
105 | return cache[args] | |
106 | return wrapper | |
107 | ||
2a6238f5 | 108 | |
8c840a83 O |
109 | @Memoize |
110 | def cycle_color(s): | |
111 | """ | |
668db21c | 112 | Cycle the colors_shuffle |
8c840a83 O |
113 | """ |
114 | return next(cyc)(s) | |
115 | ||
2a6238f5 | 116 | |
42fde775 | 117 | def ascii_art(text): |
8c840a83 O |
118 | """ |
119 | Draw the Ascii Art | |
120 | """ | |
42fde775 | 121 | fi = figlet_format(text, font='doom') |
8c840a83 | 122 | print('\n'.join( |
2a6238f5 O |
123 | [next(cyc)(i) for i in fi.split('\n')] |
124 | ) | |
8c840a83 | 125 | ) |