FUNKTION:
string break_string(string str, int width, mixed indent, int flag)
DEFINIERT IN:
<defines.h> // fuer die Flags etc.
ARGUMENTE:
str - umzubrechender String
width - optional: maximal erlaubte Zeilenlaenge
indent - optional: vor jede Zeile zu setzender Text bzw
Leerzeichenzahl
flag - optional: Bearbeitungsoptionen
BESCHREIBUNG:
In den String str werden so '\n' eingefuegt, dass keine Zeile laenger
als width ist. Ist width nicht angegeben, so wird als Laenge
BS_STDLEN genommen.
Ein mit indent gegebener String wird dabei vor die erste Zeile
gesetzt, folgende Zeilen werden entsprechend eingerueckt. Wenn
indent eine Integerzahl ist, wird diese Anzahl von Leerzeichen vor
jede - ausser der ersten - Zeile gesetzt.
Der zurueckgegebene String endet immer mit '\n'; es sei denn str ist
leer, dann wird "" zurueckgeliefert.
flag kann folgende Werte annehmen:
BS_ERASE_LFS: Vorhandene Zeilenumbrueche werden zuerst entfernt.
BS_BLOCK: Der Text wird zu einem Block mit der Breite width geformt.
Das letzte Zeichen jeder Zeile befindet sich also an Position
width. Dies wird durch Einfuegen von mehreren Leerzeichen
erreicht. Ausserdem wird bei jedem Absatzanfang der Text um
eine Stelle eingerueckt. In str enthaltene und nicht
entfernte '\n' markieren jeweils den Beginn eines Absatzes.
BS_NO_PARINDENT: Absaetze werden nicht mehr eingerueckt.
BS_IND_FIRST: Beim Einruecken um eine Anzahl, wird auch die aller-
erste Zeile eingerueckt. Dies ist automatisch so, wenn ein
Einrueckstring angegeben ist, sonst wuerde man ihn ja nicht
sehen.
BS_FOR_COMM: Dieses Flag kennzeichnet Umbrueche fuer Kommunikation
(wird von der Lib benutzt): Die Umbruchbreite wird BS_STDLEN,
die Einrueckung BS_STDINDLEN. Die erste Zeile wird nicht
eingerueckt. Andere angegebene Flags oder Werte werden ignoriert.
BS_CONVERT_COLOR: Mit use_color(L) erzeugte Farben werden beim Um-
bruch in Ansi-Sequenzen verwandelt.
RÜCKGABEWERT:
Der umgebrochene Text als string.
BEISPIELE:
break_string("Dies ist ein sehr langer Text.", 20)
=> Dies ist ein sehr
langer Text.
break_string("Mit indent sieht das so aus.", 30, "Kapitel 1: ")
=> Kapitel 1: Mit indent sieht
das so aus.
break_string("Und so mit vielen Leerzeichen.", 20, 5)
=> Und so mit vielen
Leerzeichen.
break_string("Hm.\nJetzt will ich das so.", 15, 0, BS_ERASE_LFS
=> Hm. Jetzt will
ich das so.
break_string("Jetzt wollen wir mal einen tollen Block setzen.", 17,
0, BS_BLOCK)
=> Jetzt wollen wir
mal einen tollen
Block setzen.
break_string("Aber jetzt will ich keine Einrueckung mehr!", 19,
0, BS_BLOCK|BS_NO_PARINDENT)
=> Aber jetzt will ich
keine Einrueckung
mehr!
break_string("Wargon sagt: So, noch fragen oder wie?", 25, 5,
BS_IND_FIRST)
=> Wargon sagt: So, noch
fragen, oder wie?
break_string("Mhm, was ist denn das? Es gehoert mir nicht.", BS_STDLEN,
"Charlie schaut erstaunt und sagt: ", BS_FOR_COMM)
=> Charlie schaut erstaunt und sagt: Mhm, was ist denn das? Es gehoert mir
nicht.
BEMERKUNGEN:
Bei uns werden Texte standardmaessig auf BS_STDLEN Zeichen
umgebrochen. Einrueckungen sind meistens BS_STDINDLEN lang.
Moechte man Terminal-Steuercodes in den Text einfuegen, zB um ein
Wort farblich hervorzuheben, so darf dieses ausschliesslich mit
use_color(L) erzeugt werden. Ansonsten kommt die Einrueckung, da sie
die Steuerzeichen als normale Buchstaben mitzaehlt, durcheinander.
Die Ersetzung findet nur bei gesetztem BS_CONVERT_COLOR statt.
SIEHE AUCH:
countup(S), use_color(L)
|