"""Terminal color codes (:mod:`fluiddyn.util.terminal_colors`)
==============================================================
Defines string variables useful to print in color in a terminal.
Provides:
.. autoclass:: CPrint
:members:
:undoc-members:
"""
import sys
FAIL = "\033[91m"
# OKGREEN and OKBLUE kept for background compatibility
OKGREEN = LIGHTGREEN = "\033[92m"
WARNING = "\033[93m"
OKBLUE = LIGHTBLUE = "\033[94m"
HEADER = "\033[95m"
LIGHTCYAN = "\033[96m"
WHITE = "\033[97m"
BLACK = "\033[30m"
RED = "\033[31m"
GREEN = "\033[32m"
YELLOW = "\033[33m"
BLUE = "\033[34m"
MAGENTA = "\033[35m"
CYAN = "\033[36m"
LIGHTGRAY = "\033[37m"
ENDC = "\033[0m"
BOLD = "\033[1m"
UNDERLINE = "\033[4m"
_color_dict = vars()
def print_fail(*args, **kwargs):
"""Print in bold with "FAIL" font color."""
args, kwargs = _colorize(color="FAIL", bold=True, *args, **kwargs)
print(*args, **kwargs)
def print_warning(*args, **kwargs):
"""Print with "WARNING" font colour."""
args, kwargs = _colorize(color="WARNING", *args, **kwargs)
print(*args, **kwargs)
def _colorize(*args, **kwargs):
"""Wrap the args with a specified terminal font color."""
try:
color = kwargs.pop("color")
try:
bold = kwargs.pop("bold")
except KeyError:
bold = False
color = _color_dict[color]
if len(args) > 0:
args = list(args)
if bold:
color += BOLD
args[0] = "{}{}".format(color, args[0])
args[-1] = "{}{}".format(args[-1], ENDC)
finally:
return args, kwargs
def cstring(*args, **kwargs):
"""Return a colored string.
Parameters
----------
args : iterable of str
bold : bool
color : str, {'HEADER', 'LIGHTBLUE', 'LIGHTGREEN', 'WARNING', 'FAIL',
'ENDC', 'BOLD', 'UNDERLINE' 'BLACK', 'RED', 'GREEN',
'YELLOW', 'BLUE', 'MAGENTA', 'CYAN', 'WHITE'}
Terminal color to use.
"""
args, kwargs = _colorize(*args, **kwargs)
cstr = " ".join(args)
return cstr
[docs]
class CPrint:
"""Print colored text
>>> cprint = CPrint()
>>> cprint("vorticity", color="RED")
>>> cprint.red("divergence")
"""
def __call__(
self,
*args,
color=None,
bold=False,
sep=" ",
end="\n",
file=sys.stdout,
flush=False,
):
"""Print with a specified terminal font color.
Parameters
----------
args : iterable
To be passed into print_function.
bold : bool
color : str, {'HEADER', 'LIGHTBLUE', 'LIGHTGREEN', 'WARNING', 'FAIL',
'ENDC', 'BOLD', 'UNDERLINE' 'BLACK', 'RED', 'GREEN',
'YELLOW', 'BLUE', 'MAGENTA', 'CYAN', 'WHITE'}
Terminal color to use.
"""
args, kwargs = _colorize(
*args,
color=color,
bold=bold,
sep=sep,
end=end,
file=file,
flush=flush,
)
print(*args, **kwargs)
[docs]
def light_blue(self, *args, **kwargs):
kwargs["color"] = "LIGHTBLUE"
self.__call__(*args, **kwargs)
[docs]
def light_green(self, *args, **kwargs):
kwargs["color"] = "LIGHTGREEN"
self.__call__(*args, **kwargs)
[docs]
def light_gray(self, *args, **kwargs):
kwargs["color"] = "LIGHTGRAY"
self.__call__(*args, **kwargs)
[docs]
def warning(self, *args, **kwargs):
kwargs["color"] = "WARNING"
self.__call__(*args, **kwargs)
[docs]
def fail(self, *args, **kwargs):
kwargs["color"] = "FAIL"
self.__call__(*args, **kwargs)
[docs]
def black(self, *args, **kwargs):
kwargs["color"] = "BLACK"
self.__call__(*args, **kwargs)
[docs]
def red(self, *args, **kwargs):
kwargs["color"] = "RED"
self.__call__(*args, **kwargs)
[docs]
def green(self, *args, **kwargs):
kwargs["color"] = "GREEN"
self.__call__(*args, **kwargs)
[docs]
def yellow(self, *args, **kwargs):
kwargs["color"] = "YELLOW"
self.__call__(*args, **kwargs)
[docs]
def blue(self, *args, **kwargs):
kwargs["color"] = "BLUE"
self.__call__(*args, **kwargs)
[docs]
def magenta(self, *args, **kwargs):
kwargs["color"] = "MAGENTA"
self.__call__(*args, **kwargs)
[docs]
def cyan(self, *args, **kwargs):
kwargs["color"] = "CYAN"
self.__call__(*args, **kwargs)
[docs]
def white(self, *args, **kwargs):
kwargs["color"] = "WHITE"
self.__call__(*args, **kwargs)
cprint = CPrint()