diff --git a/src/imports/utils.py b/src/imports/utils.py index 5387f4c..2de8735 100644 --- a/src/imports/utils.py +++ b/src/imports/utils.py @@ -260,38 +260,42 @@ class Paginator: def add_page_break(self, *, to_beginning: bool=False) -> None: self.add(self._page_break, to_beginning=to_beginning) - def add(self, item: typing.Any, *, to_beginning: bool=False, keep_intact: bool=False) -> None: + def add(self, item: typing.Any, *, to_beginning: bool=False, keep_intact: bool=False, truncate=False) -> None: item = str(item) i = 0 if not keep_intact and not item == self._page_break: item_parts = item.strip('\n').split('\n') for part in item_parts: if len(part) > self._max_line_length: - length = 0 - out_str = '' + if not truncate: + length = 0 + out_str = '' - def close_line(line): - nonlocal i, out_str, length - self._parts.insert(i, out_str) if to_beginning else self._parts.append(out_str) - i += 1 - out_str = line + ' ' - length = len(out_str) + def close_line(line): + nonlocal i, out_str, length + self._parts.insert(i, out_str) if to_beginning else self._parts.append(out_str) + i += 1 + out_str = line + ' ' + length = len(out_str) - bits = part.split(' ') - for bit in bits: - next_len = length + len(bit) + 1 - if next_len <= self._max_line_length: - out_str += bit + ' ' - length = next_len - elif len(bit) > self._max_line_length: - if out_str: - close_line(line='') - for out_str in [bit[i:i + self._max_line_length] - for i in range(0, len(bit), self._max_line_length)]: - close_line('') - else: - close_line(bit) - close_line('') + bits = part.split(' ') + for bit in bits: + next_len = length + len(bit) + 1 + if next_len <= self._max_line_length: + out_str += bit + ' ' + length = next_len + elif len(bit) > self._max_line_length: + if out_str: + close_line(line='') + for out_str in [bit[i:i + self._max_line_length] + for i in range(0, len(bit), self._max_line_length)]: + close_line('') + else: + close_line(bit) + close_line('') + else: + line = f'{part:.{self._max_line_length-3}}...' + self._parts.insert(i, line) if to_beginning else self._parts.append(line) else: self._parts.insert(i, part) if to_beginning else self._parts.append(part) i += 1