Preformatted box that doesn't wrap the contents.
authorScott Gasch <[email protected]>
Sun, 17 Apr 2022 18:23:13 +0000 (11:23 -0700)
committerScott Gasch <[email protected]>
Sun, 17 Apr 2022 18:23:13 +0000 (11:23 -0700)
text_utils.py

index f04c61813ef227c4bfe356f42d08c59f2234132c..b42661959021c42180986f1f4e6dbaa93592a516 100644 (file)
@@ -371,6 +371,15 @@ def header(
 
 def box(
     title: Optional[str] = None, text: Optional[str] = None, *, width: int = 80, color: str = ''
+) -> str:
+    assert width > 4
+    if text is not None:
+        text = justify_text(text, width=width - 4, alignment='l')
+    return preformatted_box(title, text, width=width, color=color)
+
+
+def preformatted_box(
+    title: Optional[str] = None, text: Optional[str] = None, *, width=80, color: str = ''
 ) -> str:
     assert width > 4
     ret = ''
@@ -393,9 +402,9 @@ def box(
         )
         ret += color + '│' + ' ' * w + '│' + rset + '\n'
     if text is not None:
-        for line in justify_text(text, width=w - 2, alignment='l').split('\n'):
+        for line in text.split('\n'):
             tw = len(string_utils.strip_ansi_sequences(line))
-            assert tw < w
+            assert tw <= w
             ret += color + '│ ' + rset + line + ' ' * (w - tw - 2) + color + ' │' + rset + '\n'
     ret += color + '╰' + '─' * w + '╯' + rset + '\n'
     return ret