Skip to content

Commit f3c565c

Browse files
committed
add text wrapping helper function and example that uses it.
1 parent aedb89c commit f3c565c

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

adafruit_display_text/__init__.py

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

examples/display_text_wraptest.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, " \
15+
"sed do eiusmod tempor incididunt ut labore et dolore magna " \
16+
"aliqua. Ut enim ad minim veniam, quis nostrud exercitation " \
17+
"ullamco laboris nisi ut aliquip ex ea commodo consequat."
18+
text = "\n".join(wrap_text_to_lines(text, 28))
19+
text_area = label.Label(terminalio.FONT, text=text)
20+
text_area.x = 10
21+
text_area.y = 10
22+
display.show(text_area)
23+
while True:
24+
pass

0 commit comments

Comments
 (0)