[Gambas-user] Text-Wrapping
Bruce
adamnt42 at gmail.com
Wed Nov 11 14:25:39 CET 2020
On 11/11/20 11:00 pm, Hans Lehmann wrote:
> Hello,
>
> since there are true string artists among the readers, I just ask: I'm
> looking for a function like LikeWrap(arg1Text, arg2Length) with which
> you can wrap a text. At most arg2Length characters should be in one line.
> Line breaks in the original text should be preserved. A hyphenation is
> not used. The text must be separated by a hyphen in the last word. The
> length rule also applies in this case.
>
> Does anybody have a finished function in his source code box?
>
8<
Hans,
Let's clarify a few things before assumptions are made.
You want to break up a long string by inserting "\n" at the nearest
right hand word boundary to position arg2Length. At face value that is
reasonably fairly simple, but there are "twisty little passages".
A simple algorithm COULD be something like:
While there are any charactes in arg1Text...
set index to arg2Length
while arg1Text[index] is not a space decrement index
excise the substring [1..index] and add it to a working string array,
say "wkLines".
Join the wkLines into an output string with "\n"'s
Now here's the twisty bits.
a) Do you want the function to keep or remove the trailing space(s)?
b) What is to happen if the arg1Text contains a string of arg2Length spaces?
c) What is to happen if arg1Text (at any point) contains a "word" that
is longer than arg2Length?
d) That algorithm is (deliberately) silent as to what happens with the
final sub-string.
e) What is to happen if the arg1Text string is empty?
f) Fullstops (periods), commas, colons, semi-colons, question marks,
exclamation marks - in fact any unpaired punctuation at the break
position can be tricky.
g) We are talking about ASCII strings here aren't we?
h) Paired punctuation () [] {} '' "" <> can be tricky.
i) (advanced students only) Other delimiters like | \ and / can be
tricky and lets not forget "doubled" delimiters like #! $$...$$ /*...*/ etc.
z) I presume that the output string would be sent to a fixed width
target e.g. stdout as chopping a string this way to put in a textual
control is near n useless.
regards
bruce (the lower case one)
More information about the User
mailing list