import re
from typing import Iterable, List, Tuple
from ._loop import loop_last
from .cells import cell_len, chop_cells
re_word = re.compile(r"\s*\S+\s*")
def words(text: str) -> Iterable[Tuple[int, int, str]]:
position = 0
word_match = re_word.match(text, position)
while word_match is not None:
start, end = word_match.span()
word = word_match.group(0)
yield start, end, word
word_match = re_word.match(text, end)
def divide_line(text: str, width: int, fold: bool = True) -> List[int]:
divides: List[int] = []
append = divides.append
line_position = 0
_cell_len = cell_len
for start, _end, word in words(text):
word_length = _cell_len(word.rstrip())
if line_position + word_length > width:
if word_length > width:
if fold:
chopped_words = chop_cells(word, max_size=width, position=0)
for last, line in loop_last(chopped_words):
if start:
append(start)
if last:
line_position = _cell_len(line)
else:
start += len(line)
else:
if start:
append(start)
line_position = _cell_len(word)
elif line_position and start:
append(start)
line_position = _cell_len(word)
else:
line_position += _cell_len(word)
return divides
if __name__ == "__main__": # pragma: no cover
from .console import Console
console = Console(width=10)
console.print("12345 abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ 12345")
print(chop_cells("abcdefghijklmnopqrstuvwxyz", 10, position=2))
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| __init__.py | File | 5.95 KB | 0644 |
|
| __main__.py | File | 8.28 KB | 0644 |
|
| _cell_widths.py | File | 9.86 KB | 0644 |
|
| _emoji_codes.py | File | 136.95 KB | 0644 |
|
| _emoji_replace.py | File | 1.04 KB | 0644 |
|
| _export_format.py | File | 2.05 KB | 0644 |
|
| _extension.py | File | 265 B | 0644 |
|
| _fileno.py | File | 799 B | 0644 |
|
| _inspect.py | File | 9.47 KB | 0644 |
|
| _log_render.py | File | 3.15 KB | 0644 |
|
| _loop.py | File | 1.21 KB | 0644 |
|
| _null_file.py | File | 1.35 KB | 0644 |
|
| _palettes.py | File | 6.9 KB | 0644 |
|
| _pick.py | File | 423 B | 0644 |
|
| _ratio.py | File | 5.34 KB | 0644 |
|
| _spinners.py | File | 19.45 KB | 0644 |
|
| _stack.py | File | 351 B | 0644 |
|
| _timer.py | File | 417 B | 0644 |
|
| _win32_console.py | File | 22.29 KB | 0644 |
|
| _windows.py | File | 1.88 KB | 0644 |
|
| _windows_renderer.py | File | 2.72 KB | 0644 |
|
| _wrap.py | File | 1.8 KB | 0644 |
|
| abc.py | File | 890 B | 0644 |
|
| align.py | File | 10.13 KB | 0644 |
|
| ansi.py | File | 6.74 KB | 0644 |
|
| bar.py | File | 3.19 KB | 0644 |
|
| box.py | File | 9.61 KB | 0644 |
|
| cells.py | File | 4.4 KB | 0644 |
|
| color.py | File | 17.8 KB | 0644 |
|
| color_triplet.py | File | 1.03 KB | 0644 |
|
| columns.py | File | 6.96 KB | 0644 |
|
| console.py | File | 96.89 KB | 0644 |
|
| constrain.py | File | 1.26 KB | 0644 |
|
| containers.py | File | 5.37 KB | 0644 |
|
| control.py | File | 6.47 KB | 0644 |
|
| default_styles.py | File | 7.89 KB | 0644 |
|
| diagnose.py | File | 972 B | 0644 |
|
| emoji.py | File | 2.44 KB | 0644 |
|
| errors.py | File | 642 B | 0644 |
|
| file_proxy.py | File | 1.64 KB | 0644 |
|
| filesize.py | File | 2.45 KB | 0644 |
|
| highlighter.py | File | 9.36 KB | 0644 |
|
| json.py | File | 4.91 KB | 0644 |
|
| jupyter.py | File | 3.18 KB | 0644 |
|
| layout.py | File | 13.68 KB | 0644 |
|
| live.py | File | 13.94 KB | 0644 |
|
| live_render.py | File | 3.58 KB | 0644 |
|
| logging.py | File | 11.62 KB | 0644 |
|
| markup.py | File | 8.01 KB | 0644 |
|
| measure.py | File | 5.18 KB | 0644 |
|
| padding.py | File | 4.85 KB | 0644 |
|
| pager.py | File | 828 B | 0644 |
|
| palette.py | File | 3.32 KB | 0644 |
|
| panel.py | File | 10.33 KB | 0644 |
|
| pretty.py | File | 35.01 KB | 0644 |
|
| progress.py | File | 58.31 KB | 0644 |
|
| progress_bar.py | File | 7.97 KB | 0644 |
|
| prompt.py | File | 11.04 KB | 0644 |
|
| protocol.py | File | 1.36 KB | 0644 |
|
| py.typed | File | 0 B | 0644 |
|
| region.py | File | 166 B | 0644 |
|
| repr.py | File | 4.33 KB | 0644 |
|
| rule.py | File | 4.49 KB | 0644 |
|
| scope.py | File | 2.78 KB | 0644 |
|
| screen.py | File | 1.55 KB | 0644 |
|
| segment.py | File | 23.68 KB | 0644 |
|
| spinner.py | File | 4.24 KB | 0644 |
|
| status.py | File | 4.32 KB | 0644 |
|
| style.py | File | 26.44 KB | 0644 |
|
| styled.py | File | 1.23 KB | 0644 |
|
| syntax.py | File | 34.35 KB | 0644 |
|
| table.py | File | 38.75 KB | 0644 |
|
| terminal_theme.py | File | 3.29 KB | 0644 |
|
| text.py | File | 44.46 KB | 0644 |
|
| theme.py | File | 3.69 KB | 0644 |
|
| themes.py | File | 102 B | 0644 |
|
| traceback.py | File | 28.91 KB | 0644 |
|
| tree.py | File | 8.95 KB | 0644 |
|