added truncate parameter
This commit is contained in:
parent
88d0af40c5
commit
bbee079d2c
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user