Localize text wrapping - toot - Unnamed repository; edit this file 'description' to name the repository.
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
(DIR) commit 431475161052bc6d368ad5566f42ce8f7ebf1e0d
(DIR) parent fba3b78ff6d5f1fc9f8f8304e7ef1f4a100282d9
(HTM) Author: Ivan Habunek <ivan@habunek.com>
Date: Sat, 20 Jan 2018 13:43:21 +0100
Localize text wrapping
Diffstat:
toot/ui/app.py | 24 +++++++-----------------
toot/ui/utils.py | 49 +++++++++++++++++++++----------
2 files changed, 40 insertions(+), 33 deletions(-)
---
(DIR) diff --git a/toot/ui/app.py b/toot/ui/app.py
@@ -2,8 +2,6 @@
import webbrowser
-from textwrap import wrap
-
from toot.exceptions import ConsoleError
from toot.ui.utils import draw_horizontal_divider, draw_lines
from toot.utils import format_content, trunc
@@ -181,8 +179,7 @@ class StatusDetailWindow:
if status['sensitive']:
for line in status['spoiler_text']:
- for wrapped in wrap(line, text_width):
- yield wrapped
+ yield line
yield
if status['sensitive'] and not status['show_sensitive']:
@@ -190,28 +187,21 @@ class StatusDetailWindow:
return
for line in status['content']:
- wrapped_lines = wrap(line, text_width) if line else ['']
- for wrapped_line in wrapped_lines:
- yield wrapped_line.ljust(text_width)
+ yield line
if status['media_attachments']:
yield
yield "Media:"
for attachment in status['media_attachments']:
- url = attachment['text_url'] or attachment['url']
- for line in wrap(url, text_width):
- yield line
+ yield attachment['text_url'] or attachment['url']
def footer_lines(self, status):
- text_width = self.width - 4
-
if status['url'] is not None:
- for line in wrap(status['url'], text_width):
- yield line
+ yield status['url']
if status['boosted_by']:
acct = status['boosted_by']['acct']
- yield "Boosted by @{}".format(acct), Color.BLUE
+ yield "Boosted by @{}".format(acct), Color.GREEN
def draw(self, status):
self.window.erase()
@@ -223,9 +213,9 @@ class StatusDetailWindow:
content = self.content_lines(status)
footer = self.footer_lines(status)
- y = draw_lines(self.window, content, 2, 1, Color.WHITE)
+ y = draw_lines(self.window, content, 1, 2, Color.WHITE)
draw_horizontal_divider(self.window, y)
- draw_lines(self.window, footer, 2, y + 1, Color.WHITE)
+ draw_lines(self.window, footer, y + 1, 2, Color.WHITE)
self.window.refresh()
(DIR) diff --git a/toot/ui/utils.py b/toot/ui/utils.py
@@ -1,3 +1,6 @@
+from textwrap import wrap
+
+
def draw_horizontal_divider(window, y):
height, width = window.getmaxyx()
@@ -7,22 +10,36 @@ def draw_horizontal_divider(window, y):
window.addstr(y, 0, line)
-def enumerate_lines(generator, default_color):
- for y, item in enumerate(generator):
- if isinstance(item, tuple) and len(item) == 2:
- yield y, item[0], item[1]
- elif isinstance(item, str):
- yield y, item, default_color
- elif item is None:
- yield y, "", default_color
- else:
- raise ValueError("Wrong yield in generator")
+def enumerate_lines(lines, text_width, default_color):
+ def parse_line(line):
+ if isinstance(line, tuple) and len(line) == 2:
+ return line[0], line[1]
+ elif isinstance(line, str):
+ return line, default_color
+ elif line is None:
+ return "", default_color
+
+ raise ValueError("Wrong yield in generator")
+
+ def wrap_lines(lines):
+ for line in lines:
+ line, color = parse_line(line)
+ if line:
+ for wrapped in wrap(line, text_width):
+ yield wrapped, color
+ else:
+ yield "", color
+ return enumerate(wrap_lines(lines))
+
+
+def draw_lines(window, lines, start_y, padding, default_color):
+ height, width = window.getmaxyx()
+ text_width = width - 2 * padding
-def draw_lines(window, lines, x, y, default_color):
- height, _ = window.getmaxyx()
- for dy, line, color in enumerate_lines(lines, default_color):
- if y + dy < height - 1:
- window.addstr(y + dy, x, line, color)
+ for dy, (line, color) in enumerate_lines(lines, text_width, default_color):
+ y = start_y + dy
+ if y < height - 1:
+ window.addstr(y, padding, line.ljust(text_width), color)
- return y + dy + 1
+ return y + 1