3.5" Adafruit TFT Shield Zeilenumbruch

Hallo,

wir verwenden einen Arduino inkl. GSM Modul und einem 3.5" TFT LCD Shield von Adafruit.
Wir möchten bei Eingang einer SMS einer bestimmten Nummer mit bestimmten Text einen Alarm und auch den Inhalt der Nachricht auf dem Display wiedergeben.
Der Inhalt der Nachricht ist variabel. (String)
Der Alarm und die Anzeige des Nachrichtentexts am Display funktioniert bereits.

Wir haben jedoch folgendes Problem bei der Darstellung des SMS Nachrichtentexts am Display:
Der Zeilenumbruch am Display erfolgt über eine Funktion der Adafruit Library.
Diese bricht den variablen Text einfach bei Ende einer jeden Zeile um.
Dadurch werden oftmals ganze Wörter unkontrolliert abgeschnitten.

Sobald sich ein Wort in der Zeile nicht mehr ausgeht soll dieses Wort in die nächste Zeile geschoben werden.
Eine ausgiebige Recherche im Internet und auch das “Rückwärts zählen” von Zeichen bis zum letzten Leerzeichen hat uns nicht weitergebracht.
Wie könnte man einen korrekten Zeilenumbruch realisieren?
Vielen Dank schonmal im Voraus für Eure Unterstützung.

Viele Grüße,
Stephan

Vorab gleich mal: richtiger Zeilenumbruch hat Haken und Ösen (Sonderfälle), deren Berücksichtigung die Codierung verkompliziert.

Wollt ihr mit Pointern oder mit Index durch den Text gehen? Ich bevorzuge einen Index, der vereinfacht verschiedene Berechnungen.

Zwei Positionen sind wichtig: Anfang der aktuellen und der nächsten Zeile im Text.

Zuerst hat man einen (aktuellen) Zeilenanfang im Text, und sucht das Zeichen, das ohne Umbruch am Anfang der nächsten Zeile stehen würde. Achtung: Ende des Textes!? Leerzeichen am Anfang!?

Ist dieses Zeichen kein Leerzeichen, schiebt man den Anfang der nächsten Zeile rückwärts bis zu einem Leerzeichen. Achtung: ganz langes Wort!?

Dann kann der Text für die aktuelle Zeile ausgegeben werden, ab Anfang der nächsten Zeile wird weiter umbrochen.

Programmtechnisch kann man den Anfang der nächsten Zeile so suchen, daß bis zur Zeilenlänge nach Textende (’\0’) oder Leerzeichen gesucht wird. Das zuletzt gefundene Leerzeichen ist dann der Anfang der nächsten Zeile.