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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# -*- coding: UTF-8 -*-
# Copyright 2004-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
import os, sys
class OutputFormatter:
codes = {
'H': '\x1b[01m', # Bold
'U': '\x1b[04m', # Underline
'I': '\x1b[07m', # Inverse
'b': '\x1b[34;01m', # Blue
'B': '\x1b[34;06m', # Dark Blue
'c': '\x1b[36;01m', # Cyan
'C': '\x1b[36;06m', # Dark Cyan
'g': '\x1b[32;01m', # Green
'G': '\x1b[32;06m', # Dark Green
'm': '\x1b[35;01m', # Magenta
'M': '\x1b[35;06m', # Dark Magenta
'r': '\x1b[31;01m', # Red
'R': '\x1b[31;06m', # Dark Red
'y': '\x1b[33;01m', # Yellow
'Y': '\x1b[33;06m', # Dark Yellow
'$': '\x1b[0m', # Reset
'%': '%' # Percent
}
def __init__(self, displayColor=True, displayTitle=True, autoIndent=True):
self.colorOutput = displayColor
self.consoleTitle = displayTitle
self.autoIndent = autoIndent
if displayTitle and os.environ.has_key("TERM"):
if os.environ["TERM"] not in [ "xterm", "Eterm", "aterm", "rxvt" ]:
self.consoleTitle = False
def __call__(self, displayColor=True, displayTitle=True, autoIndent=True):
return self
def setColorOutputStatus(self, status):
self.colorOutput = status
def setDisplayTitleStatus(self, status):
if status and os.environ.has_key("TERM"):
if os.environ["TERM"] in [ "xterm", "Eterm", "aterm", "rxvt" ]:
self.consoleTitle = True
else:
self.consoleTitle = False
else:
self.consoleTitle = False
def isColorOutputEnabled(self):
return self.colorOutput
def isTitleDisplayEnabled(self):
return self.consoleTitle
def __setTitle(self, title):
if self.consoleTitle:
sys.stderr.write("\x1b]1;\x07\x1b]2;" + str(title) + "\x07")
sys.stderr.flush()
def __indent(self, prefix, message):
if self.autoIndent is True:
num = len(prefix)
return prefix + message.replace('\n', '\n'+' '*num)
else:
return prefix + message
def __parseColor(self, message):
colored = ''
striped = ''
replace = 0
for char in str(message):
if replace:
if char == ' ':
colored += self.codes['%'] + ' '
striped += self.codes['%'] + ' '
elif char == '%':
colored += self.codes[char]
striped += self.codes[char]
else:
colored += self.codes[char]
replace = 0
elif char == '%':
replace = 1
else:
colored += char
striped += char
if self.colorOutput:
return colored
else:
return striped
def write(self, message):
print self.__parseColor(message.strip())
def _print(self, message):
print self.__parseColor(message)
def _printError(self, message):
message = "%H%R" + self.__indent("!!! ERROR: ", message) + "%$"
sys.stderr.write(self.__parseColor(message) + '\n')
def _printWarning(self, message):
message = "%H%Y" + self.__indent("!!! WARNING: ", message) + "%$"
sys.stderr.write(self.__parseColor(message) + '\n')
def _printAlert(self, message):
message = "%H%C" + self.__indent("!!! ALERT: ", message) + "%$"
sys.stderr.write(self.__parseColor(message) + '\n')
def setTitle(self, message):
self.__setTitle(self.__parseColor(message))
OutputFormatter = OutputFormatter()
# vim:set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap:
|