This patch adds a new module with helper functions for colouring
terminal output of LNST to the lnst.Common package.
Signed-off-by: Radek Pazdera <rpazdera(a)redhat.com>
---
lnst/Common/Colours.py | 101 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 101 insertions(+), 0 deletions(-)
create mode 100644 lnst/Common/Colours.py
diff --git a/lnst/Common/Colours.py b/lnst/Common/Colours.py
new file mode 100644
index 0000000..a3321c4
--- /dev/null
+++ b/lnst/Common/Colours.py
@@ -0,0 +1,101 @@
+"""
+Terminal colouring functions
+
+Copyright 2013 Red Hat, Inc.
+Licensed under the GNU General Public License, version 2 as
+published by the Free Software Foundation; see COPYING for details.
+"""
+
+__author__ = """
+rpazdera(a)redhat.com (Radek Pazdera)
+"""
+
+import logging
+import os
+import re
+from lnst.Common.Utils import bool_it
+
+COLOURS = {
+ "black": 0,
+ "red": 1,
+ "green": 2,
+ "yellow": 3,
+ "blue": 4,
+ "magenta": 5,
+ "cyan": 6,
+ "white": 7
+}
+
+PRESETS = {
+ "default": [None, None, False],
+ "faded": ["yellow", None, False],
+ "alert": ["red", None, True],
+ "highlight": ["yellow", None, True],
+
+ "pass": ["green", None, True],
+ "fail": ["red", None, True],
+
+ "info": ["green", None, True],
+ "debug": ["blue", None, True],
+ "warning": ["yellow", None, True],
+ "error": ["red", None, True],
+ "log_header": ["white", None, False]
+}
+
+def name_to_fg_colour(name):
+ """ Convert name to foreground colour code.
+ Returns None if the colour name isn't supported. """
+
+ if not COLOURS.has_key(name):
+ return None
+
+ return COLOURS[name] + 30
+
+def name_to_bg_colour(name):
+ """ Convert name to background color code.
+ Returns None if the colour name isn't supported. """
+
+ if not COLOURS.has_key(name):
+ return None
+
+ return COLOURS[name] + 40
+
+
+def colourize(text, fg_name=None, bg_name=None, bold=False):
+ """ Paint text with foreground/background COLOURS. """
+
+ fg = name_to_fg_colour("white")
+ if fg_name != None:
+ fg = name_to_fg_colour(fg_name)
+
+ if bg_name != None:
+ bg = name_to_bg_colour(bg_name)
+ return "\033[%d;%d;%dm%s\033[0m" % (int(bold), fg, bg, text)
+ else:
+ return "\033[%d;%dm%s\033[0m" % (int(bold), fg, text)
+
+def decorate_string(string, preset):
+ p = PRESETS[preset]
+ return colourize(string, p[0], p[1], p[2])
+
+def strip_colours(text):
+ return re.sub("\033\[[01](;[0-9]{2}(;[0-9]{2})?)?m", "", text)
+
+def load_presets_from_config(config):
+ for preset_name in PRESETS:
+ preset = config.get_option("colours", preset_name)
+ if preset == None:
+ continue
+ fg, bg, bf = preset
+
+ if re.match("[Nn]one", fg):
+ fg = None
+ elif fg not in COLOURS.keys():
+ raise Exception("Colour '%s' not supported" % fg)
+
+ if re.match("[Nn]one", bg):
+ bg = None
+ elif bg not in COLOURS.keys():
+ raise Exception("Colour '%s' not supported" % bg)
+
+ PRESETS[preset_name] = [fg, bg, bool_it(bf)]
--
1.7.7.6