-
Notifications
You must be signed in to change notification settings - Fork 40
/
colors.py
54 lines (39 loc) · 1.34 KB
/
colors.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# -*- encoding: utf-8 -*-
#
# Copyright 2012 Martin Zimmermann <info@posativ.org>. All rights reserved.
# License: BSD Style, 2 clauses -- see LICENSE.
import sys
class ANSIString(object):
style = 0
color = 30
def __init__(self, obj, style=None, color=None):
if isinstance(obj, ANSIString):
if style is None:
style = obj.style
if color is None:
color = obj.color
obj = obj.obj
elif not isinstance(obj, basestring):
obj = unicode(obj)
self.obj = obj
if style:
self.style = style
if color:
self.color = color
def __unicode__(self):
return '\033[%i;%im' % (self.style, self.color) + self.obj + '\033[0m'
def __str__(self):
if sys.version_info < (3, 0):
return unicode(self).encode('utf-8')
return self.__unicode__()
def __add__(self, other):
return unicode.__add__(unicode(self), other)
def __radd__(self, other):
return other + unicode(self)
def encode(self, encoding):
return unicode(self).encode(encoding)
normal, bold, underline = [lambda obj, x=x: ANSIString(obj, style=x)
for x in 0, 1, 4]
black, red, green, yellow, blue, \
magenta, cyan, white = [lambda obj, y=y: ANSIString(obj, color=y)
for y in range(30, 38)]