From e11d9b0958b2874bd67360552e9214d965fe0d12 Mon Sep 17 00:00:00 2001 From: Scott Gasch Date: Sun, 17 Apr 2022 11:23:13 -0700 Subject: [PATCH] Preformatted box that doesn't wrap the contents. --- text_utils.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/text_utils.py b/text_utils.py index f04c618..b426619 100644 --- a/text_utils.py +++ b/text_utils.py @@ -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 -- 2.47.1