bazarr/libs/click/_textwrap.py

50 lines
1.3 KiB
Python
Raw Normal View History

2018-11-01 00:08:29 +08:00
import textwrap
import typing as t
2018-11-01 00:08:29 +08:00
from contextlib import contextmanager
class TextWrapper(textwrap.TextWrapper):
def _handle_long_word(
self,
reversed_chunks: t.List[str],
cur_line: t.List[str],
cur_len: int,
width: int,
) -> None:
2018-11-01 00:08:29 +08:00
space_left = max(width - cur_len, 1)
if self.break_long_words:
last = reversed_chunks[-1]
cut = last[:space_left]
res = last[space_left:]
cur_line.append(cut)
reversed_chunks[-1] = res
elif not cur_line:
cur_line.append(reversed_chunks.pop())
@contextmanager
def extra_indent(self, indent: str) -> t.Iterator[None]:
2018-11-01 00:08:29 +08:00
old_initial_indent = self.initial_indent
old_subsequent_indent = self.subsequent_indent
self.initial_indent += indent
self.subsequent_indent += indent
2018-11-01 00:08:29 +08:00
try:
yield
finally:
self.initial_indent = old_initial_indent
self.subsequent_indent = old_subsequent_indent
def indent_only(self, text: str) -> str:
2018-11-01 00:08:29 +08:00
rv = []
2018-11-01 00:08:29 +08:00
for idx, line in enumerate(text.splitlines()):
indent = self.initial_indent
2018-11-01 00:08:29 +08:00
if idx > 0:
indent = self.subsequent_indent
rv.append(f"{indent}{line}")
return "\n".join(rv)