From: Scott Gasch Date: Sat, 5 Mar 2022 18:15:03 +0000 (-0800) Subject: Improve text wrapping; add indent option. X-Git-Url: https://wannabe.guru.org/gitweb/?a=commitdiff_plain;h=d2e437a04124fa3c6e3175205f943769ba443393;p=python_utils.git Improve text wrapping; add indent option. --- diff --git a/math_utils.py b/math_utils.py index 156862a..49ad407 100644 --- a/math_utils.py +++ b/math_utils.py @@ -74,6 +74,8 @@ class NumericPopulation(object): return self.aggregate / count def get_mode(self) -> Tuple[float, int]: + """Returns the mode (most common member).""" + count: Dict[float, int] = collections.defaultdict(int) for n in self.lowers: count[-n] += 1 diff --git a/text_utils.py b/text_utils.py index cc1269c..17ac644 100644 --- a/text_utils.py +++ b/text_utils.py @@ -217,17 +217,21 @@ def justify_string( return string -def justify_text(text: str, *, width: int = 80, alignment: str = "c") -> str: +def justify_text(text: str, *, width: int = 80, alignment: str = "c", indent_by: int = 0) -> str: """ - Justifies text. + Justifies text optionally with initial indentation. >>> justify_text('This is a test of the emergency broadcast system. This is only a test.', ... width=40, alignment='j') #doctest: +NORMALIZE_WHITESPACE 'This is a test of the emergency\\nbroadcast system. This is only a test.' """ - retval = "" - line = "" + retval = '' + indent = '' + if indent_by > 0: + indent += ' ' * indent_by + line = indent + for word in text.split(): if ( len(string_utils.strip_ansi_sequences(line)) @@ -235,11 +239,14 @@ def justify_text(text: str, *, width: int = 80, alignment: str = "c") -> str: ) > width: line = line[1:] line = justify_string(line, width=width, alignment=alignment) - retval = retval + "\n" + line - line = "" - line = line + " " + word + retval = retval + '\n' + line + line = indent + line = line + ' ' + word if len(string_utils.strip_ansi_sequences(line)) > 0: - retval += "\n" + line[1:] + if alignment != 'j': + retval += "\n" + justify_string(line[1:], width=width, alignment=alignment) + else: + retval += "\n" + line[1:] return retval[1:]