Improve text wrapping; add indent option.
authorScott Gasch <[email protected]>
Sat, 5 Mar 2022 18:15:03 +0000 (10:15 -0800)
committerScott Gasch <[email protected]>
Sat, 5 Mar 2022 18:15:03 +0000 (10:15 -0800)
math_utils.py
text_utils.py

index 156862a9c1b55eeec5515efef82f8f951d59b416..49ad407a58330144116c7d07976462a521f46d46 100644 (file)
@@ -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
index cc1269c58f292039cae5ecb93b533905020360f9..17ac64472e2c8e944335e656de331f8b60e53862 100644 (file)
@@ -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:]