added truncate parameter

This commit is contained in:
Dustin Pianalto 2018-06-08 11:17:08 -08:00
parent 88d0af40c5
commit bbee079d2c

View File

@ -260,38 +260,42 @@ class Paginator:
def add_page_break(self, *, to_beginning: bool=False) -> None: def add_page_break(self, *, to_beginning: bool=False) -> None:
self.add(self._page_break, to_beginning=to_beginning) 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) item = str(item)
i = 0 i = 0
if not keep_intact and not item == self._page_break: if not keep_intact and not item == self._page_break:
item_parts = item.strip('\n').split('\n') item_parts = item.strip('\n').split('\n')
for part in item_parts: for part in item_parts:
if len(part) > self._max_line_length: if len(part) > self._max_line_length:
length = 0 if not truncate:
out_str = '' length = 0
out_str = ''
def close_line(line): def close_line(line):
nonlocal i, out_str, length nonlocal i, out_str, length
self._parts.insert(i, out_str) if to_beginning else self._parts.append(out_str) self._parts.insert(i, out_str) if to_beginning else self._parts.append(out_str)
i += 1 i += 1
out_str = line + ' ' out_str = line + ' '
length = len(out_str) length = len(out_str)
bits = part.split(' ') bits = part.split(' ')
for bit in bits: for bit in bits:
next_len = length + len(bit) + 1 next_len = length + len(bit) + 1
if next_len <= self._max_line_length: if next_len <= self._max_line_length:
out_str += bit + ' ' out_str += bit + ' '
length = next_len length = next_len
elif len(bit) > self._max_line_length: elif len(bit) > self._max_line_length:
if out_str: if out_str:
close_line(line='') close_line(line='')
for out_str in [bit[i:i + self._max_line_length] for out_str in [bit[i:i + self._max_line_length]
for i in range(0, len(bit), self._max_line_length)]: for i in range(0, len(bit), self._max_line_length)]:
close_line('') close_line('')
else: else:
close_line(bit) close_line(bit)
close_line('') 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: else:
self._parts.insert(i, part) if to_beginning else self._parts.append(part) self._parts.insert(i, part) if to_beginning else self._parts.append(part)
i += 1 i += 1