From 52488ace364e2a394ee3d2a7ae49509b68c5c2f7 Mon Sep 17 00:00:00 2001 From: "star:Kenneth Reitz" Date: Tue, 22 Mar 2011 08:03:24 -0400 Subject: [PATCH] ColoredString support for width formatters --- clint/textui/formatters.py | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/clint/textui/formatters.py b/clint/textui/formatters.py index e9511e9..4bc2f10 100644 --- a/clint/textui/formatters.py +++ b/clint/textui/formatters.py @@ -10,28 +10,40 @@ Core TextUI functionality for text formatting. from __future__ import absolute_import +from .colored import ColoredString, clean from ..utils import tsplit, schunk NEWLINES = ('\n', '\r', '\r\n') - - def min_width(string, cols, padding=' '): """Returns given string with right padding.""" - stack = tsplit(string, NEWLINES) + is_color = isinstance(string, ColoredString) + + stack = tsplit(str(string), NEWLINES) for i, substring in enumerate(stack): - stack[i] = substring.ljust(cols, padding) + _sub = clean(substring).ljust((cols + 0), padding) + if is_color: + _sub = (_sub.replace(clean(substring), substring)) + stack[i] = _sub return '\n'.join(stack) def max_width(string, cols, separator='\n'): """Returns a freshly formatted """ - + + is_color = isinstance(string, ColoredString) + + if is_color: + offset = 10 + string_copy = string._new('') + else: + offset = 0 + stack = tsplit(string, NEWLINES) for i, substring in enumerate(stack): @@ -44,18 +56,18 @@ def max_width(string, cols, separator='\n'): _row_i = 0 for word in row: - if (len(_row[_row_i]) + len(word)) < cols: + if (len(_row[_row_i]) + len(word)) < (cols + offset): _row[_row_i] += word _row[_row_i] += ' ' - elif len(word) > cols: + elif len(word) > (cols - offset): # ensure empty row if len(_row[_row_i]): _row.append('') _row_i += 1 - chunks = schunk(word, cols) + chunks = schunk(word, (cols + offset)) for i, chunk in enumerate(chunks): if not (i + 1) == len(chunks): _row[_row_i] += chunk @@ -69,7 +81,11 @@ def max_width(string, cols, separator='\n'): _row_i += 1 _row[_row_i] += word _row[_row_i] += ' ' + + _row = map(str, _row) _stack.append(separator.join(_row)) - - return '\n'.join(_stack) + _s = '\n'.join(_stack) + if is_color: + _s = string_copy._new(_s) + return _s