diff options
author | Martin Matusiak <numerodix@gmail.com> | 2018-01-22 21:21:03 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-22 21:21:03 +1100 |
commit | 3291ebfe79c6d0b2252db1be1e56584ec640e3b3 (patch) | |
tree | 52114b40c9c89da7017e9d913f9868fe2667d6d1 | |
parent | 1a6601bc40eb14498bb1a60ca9187939b9eec102 (diff) | |
parent | 4104c0c4756838b881c2045ad1a12057f861dbb8 (diff) | |
download | ansicolor-0.2.6.tar.gz |
Merge pull request #5 from Hypnoes/develop0.2.6
SUPPORT NEW FEATURES:
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | ansicolor/ansicolor.py | 62 | ||||
-rw-r--r-- | ansicolor/demos.py | 44 | ||||
-rw-r--r-- | tests/test_colors.py | 51 |
4 files changed, 159 insertions, 0 deletions
@@ -5,3 +5,5 @@ build/ dist/ docs/_build/ + +.vscode/ diff --git a/ansicolor/ansicolor.py b/ansicolor/ansicolor.py index 5975e65..f84a938 100644 --- a/ansicolor/ansicolor.py +++ b/ansicolor/ansicolor.py @@ -18,8 +18,10 @@ __all__ = [ # noqa 'yellow', 'colorize', + 'colorize_v2', 'wrap_string', 'get_code', + 'get_code_v2', 'highlight_string', 'get_highlighter', @@ -141,6 +143,34 @@ def get_code(color, bold=False, reverse=False): return '\033[' + fmt + color + 'm' +def get_code_v2(color, bold=False, reverse=False, underline=False, blink=False): + """ + Returns the escape code for styling with the given color, + in bold and/or reverse. + :param color: The color to use. + :type color: :class:`Colors` class + :param bool bold: Whether to mark up in bold. + :param bool underline: Whether to mark up in underline. + :param bool blink: Whether to mark up in blink. + :param bool reverse: Whether to mark up in reverse video. + :rtype: string + """ + + if _disabled: + return "" + + fmt = '0' + l = [] + if bold: l.append('1') + if underline: l.append('4') + if blink: l.append('5') + if reverse: l.append('7') + if len(l) != 0: + fmt = ';'.join(l) + + color = (color is not None) and ';3%s' % color.id or '' + + return '\033[' + fmt + color + 'm' def colorize(s, color, bold=False, reverse=False, start=None, end=None): """ @@ -169,6 +199,38 @@ def colorize(s, color, bold=False, reverse=False, start=None, end=None): get_code(None), after)) +def colorize_v2(s, color, bold=False, reverse=False, underline=False, blink=False, + start=None, end=None): + """ + Colorize a string with the color given. + :param string s: The string to colorize. + :param color: The color to use. + :type color: :class:`Colors` class + :param bool bold: Whether to mark up in bold. + :param bool reverse: Whether to mark up in reverse video. + :param bool blink: Whether to mark up in blink. + :param bool reverse: Whether to mark up in reverse video. + :param int start: Index at which to start coloring. + :param int end: Index at which to end coloring. + :rtype: string + """ + + start = start if start else 0 + end = end if end else len(s) + + before = s[:start] + between = s[start:end] + after = s[end:] + + return ("%s%s%s%s%s" % (before, + get_code_v2(color, bold=bold, + underline=underline, + blink=blink, + reverse=reverse), + between, + get_code_v2(None), + after)) + def wrap_string(s, pos, color, bold=False, reverse=False): """ diff --git a/ansicolor/demos.py b/ansicolor/demos.py index 4b65426..d724250 100644 --- a/ansicolor/demos.py +++ b/ansicolor/demos.py @@ -5,6 +5,7 @@ import sys from ansicolor.ansicolor import Colors from ansicolor.ansicolor import colorize +from ansicolor.ansicolor import colorize_v2 from ansicolor.ansicolor import colordiff from ansicolor.ansicolor import get_highlighter from ansicolor.ansicolor import highlight_string @@ -48,6 +49,48 @@ def demo_color(): write_out('%s ' % item) write_out("\n") +def demo_color_v2(): + width = 10 + + lst = [] + + lst.extend([[], ['>>> Without colors'], []]) + line = [] + line.append(colorize_v2("Standard".ljust(width), None)) + line.append(colorize_v2("Bold".ljust(width), None, bold=True)) + line.append(colorize_v2("Underline".ljust(width), None, underline=True)) + line.append(colorize_v2("Blink".ljust(width), None, blink=True)) + line.append(colorize_v2("Reverse".ljust(width), None, reverse=True)) + line.append(colorize_v2("Bold & Rev".ljust(width), None, bold=True, underline=True, reverse=True)) # noqa + lst.append(line) + + lst.extend([[], ['>>> Using colors_v2'], []]) + for color in Colors.iter(): + line = [] + line.append(colorize_v2(color.__name__.ljust(width), color)) + line.append(colorize_v2(color.__name__.ljust(width), color, bold=True)) # noqa + line.append(colorize_v2(color.__name__.ljust(width), color, underline=True)) # noqa + line.append(colorize_v2(color.__name__.ljust(width), color, blink=True)) # noqa + line.append(colorize_v2(color.__name__.ljust(width), color, reverse=True)) # noqa + line.append(colorize_v2(color.__name__.ljust(width), color, bold=True, underline=True, reverse=True)) # noqa + lst.append(line) + + lst.extend([[], ['>>> Using highlighting colors_v2'], []]) + for color in Colors.iter(): + color = get_highlighter(color.id) + line = [] + line.append(colorize_v2(color.__name__.ljust(width), color)) + line.append(colorize_v2(color.__name__.ljust(width), color, bold=True)) # noqa + line.append(colorize_v2(color.__name__.ljust(width), color, underline=True)) # noqa + line.append(colorize_v2(color.__name__.ljust(width), color, blink=True)) # noqa + line.append(colorize_v2(color.__name__.ljust(width), color, reverse=True)) # noqa + line.append(colorize_v2(color.__name__.ljust(width), color, bold=True, underline=True, reverse=True)) # noqa + lst.append(line) + + for line in lst: + for item in line: + write_out('%s ' % item) + write_out("\n") def _demo_highlight(reverse=False): rxs = [ @@ -118,6 +161,7 @@ if __name__ == '__main__': if action == '--color': demo_color() + demo_color_v2() elif action == '--highlight': demo_highlight() elif action == '--highlight-reverse': diff --git a/tests/test_colors.py b/tests/test_colors.py index e586520..ea1fb38 100644 --- a/tests/test_colors.py +++ b/tests/test_colors.py @@ -8,6 +8,8 @@ from ansicolor import justify_formatted from ansicolor import red from ansicolor import strip_escapes from ansicolor import wrap_string +from ansicolor import get_code_v2 +from ansicolor import colorize_v2 def test_codes(): @@ -33,6 +35,40 @@ def test_codes(): # bold + reverse color assert '\033[1;7;31m' == get_code(Colors.Red, bold=True, reverse=True) +def test_codes_v2(): + # reset code + assert '\033[0m' == get_code_v2(None) + + # plain color codes + assert '\033[0;30m' == get_code_v2(Colors.Black) + assert '\033[0;31m' == get_code_v2(Colors.Red) + assert '\033[0;32m' == get_code_v2(Colors.Green) + assert '\033[0;33m' == get_code_v2(Colors.Yellow) + assert '\033[0;34m' == get_code_v2(Colors.Blue) + assert '\033[0;35m' == get_code_v2(Colors.Magenta) + assert '\033[0;36m' == get_code_v2(Colors.Cyan) + assert '\033[0;37m' == get_code_v2(Colors.White) + + # bold, underline, blink, reverse color + assert '\033[1;31m' == get_code_v2(Colors.Red, bold=True) + assert '\033[4;31m' == get_code_v2(Colors.Red, underline=True) + assert '\033[5;31m' == get_code_v2(Colors.Red, blink=True) + assert '\033[7;31m' == get_code_v2(Colors.Red, reverse=True) + + # mixed color + assert '\033[1;4;31m' == get_code_v2(Colors.Red, bold=True, underline=True) + assert '\033[1;5;31m' == get_code_v2(Colors.Red, bold=True, blink=True) + assert '\033[1;7;31m' == get_code_v2(Colors.Red, bold=True, reverse=True) + + assert '\033[4;5;31m' == get_code_v2(Colors.Red, underline=True, blink=True) + assert '\033[4;7;31m' == get_code_v2(Colors.Red, underline=True, reverse=True) + + assert '\033[5;7;31m' == get_code_v2(Colors.Red, blink=True, reverse=True) + + assert '\033[1;4;5;31m' == get_code_v2(Colors.Red, bold=True, underline=True, blink=True) + assert '\033[1;4;7;31m' == get_code_v2(Colors.Red, bold=True, underline=True, reverse=True) + assert '\033[1;5;7;31m' == get_code_v2(Colors.Red, bold=True, blink=True, reverse=True) + assert '\033[1;4;5;7;31m' == get_code_v2(Colors.Red, bold=True, underline=True, blink=True, reverse=True) def test_coloring(): assert '\033[0;0;31m' + 'hi' + '\033[0;0m' == red('hi') @@ -60,6 +96,21 @@ def test_colorize2(): + "e" ) == colorize("Hi there", Colors.Red, start=1, end=7) +def test_colorize_v2(): + assert ( + get_code(Colors.Red) + + "Hi there" + + get_code(None) + ) == colorize("Hi there", Colors.Red) + + assert ( + "H" + + get_code(Colors.Red) + + "i ther" + + get_code(None) + + "e" + ) == colorize("Hi there", Colors.Red, start=1, end=7) + def test_wrap_string(): assert ( |