Skip to content

Commit 9bc4d2b

Browse files
authored
Merge pull request #99 from FoamyGuy/wrapping
Wrapping helper function
2 parents f86e1af + 256380c commit 9bc4d2b

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

adafruit_display_text/__init__.py

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
"""
2+
Display Text module helper functions
3+
"""
4+
5+
6+
# The MIT License (MIT)
7+
#
8+
# Copyright (c) 2020 Tim C for Adafruit Industries LLC
9+
#
10+
# Permission is hereby granted, free of charge, to any person obtaining a copy
11+
# of this software and associated documentation files (the "Software"), to deal
12+
# in the Software without restriction, including without limitation the rights
13+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14+
# copies of the Software, and to permit persons to whom the Software is
15+
# furnished to do so, subject to the following conditions:
16+
#
17+
# The above copyright notice and this permission notice shall be included in
18+
# all copies or substantial portions of the Software.
19+
#
20+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
26+
# THE SOFTWARE.
27+
28+
29+
def wrap_text_to_lines(string, max_chars):
30+
"""wrap_text_to_lines function
31+
A helper that will return a list of lines with word-break wrapping
32+
33+
:param str string: The text to be wrapped
34+
:param int max_chars: The maximum number of characters on a line before wrapping
35+
36+
:return list the_lines: A list of lines where each line is separated based on the amount
37+
of max_chars provided
38+
39+
"""
40+
41+
def chunks(lst, n):
42+
"""Yield successive n-sized chunks from lst."""
43+
for i in range(0, len(lst), n):
44+
yield lst[i : i + n]
45+
46+
string = string.replace("\n", "").replace("\r", "") # Strip confusing newlines
47+
words = string.split(" ")
48+
the_lines = []
49+
the_line = ""
50+
for w in words:
51+
if len(w) > max_chars:
52+
parts = []
53+
for part in chunks(w, max_chars - 1):
54+
parts.append("{}-".format(part))
55+
the_lines.extend(parts[:-1])
56+
the_line = parts[-1][:-1]
57+
continue
58+
59+
if len(the_line + " " + w) <= max_chars:
60+
the_line += " " + w
61+
else:
62+
the_lines.append(the_line)
63+
the_line = "" + w
64+
if the_line: # Last line remaining
65+
the_lines.append(the_line)
66+
# Remove first space from first line:
67+
if the_lines[0][0] == " ":
68+
the_lines[0] = the_lines[0][1:]
69+
return the_lines

examples/display_text_wraptest.py

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
"""
2+
This example illustrates how to use the wrap_text_to_lines
3+
helper function.
4+
"""
5+
import board
6+
import terminalio
7+
from adafruit_display_text import label, wrap_text_to_lines
8+
9+
# use built in display (PyPortal, PyGamer, PyBadge, CLUE, etc.)
10+
# see guide for setting up external displays (TFT / OLED breakouts, RGB matrices, etc.)
11+
# https://learn.adafruit.com/circuitpython-display-support-using-displayio/display-and-display-bus
12+
display = board.DISPLAY
13+
14+
text = (
15+
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, "
16+
"sed do eiusmod tempor incididunt ut labore et dolore magna "
17+
"aliqua. Ut enim ad minim veniam, quis nostrud exercitation "
18+
"ullamco laboris nisi ut aliquip ex ea commodo consequat."
19+
)
20+
text = "\n".join(wrap_text_to_lines(text, 28))
21+
text_area = label.Label(terminalio.FONT, text=text)
22+
text_area.x = 10
23+
text_area.y = 10
24+
display.show(text_area)
25+
while True:
26+
pass

0 commit comments

Comments
 (0)