Word Wrap
BlitzMax Forums/BlitzMax Beginners Area/Word Wrap
| ||
| Is there any easy way to get word wrapping? |
| ||
| Other than calculating it yourself? |
| ||
SuperStrict
Function wordwrap$(txt$,linelength:Int)
Local words$[]=txt.split(" ")
Local out$=""
Local i:Int=0
Local thisline:Int=0
Local word$
For word$=EachIn words
If thisline+Len(word)>linelength
out:+"~n"
thisline=0
EndIf
If thisline out:+" "
out:+word
thisline:+Len(word)
Next
Return out
End Function
Print wordwrap("Hello there, this is a very long sentence which will be wrapped to make it fit inside a certain sized box. Another sentence on the end.",20)
|
| ||
| Thanks Warpy! I changed it a bit to make fit my needs.
Function WordWrap:String(txt:String, X:Int, Y:Int, Width:Int, Height:Int)
Local words:String[] = txt.split(" ")
Local out:String
Local i:Int
Local word:String
For word = EachIn words
If TextWidth(Out + Word) < Width - 1 Then
Out:+" " + Word
Else
Out = Trim(Out)
DrawText(Out, x, y + i)
i:+TextHeight(Out)
Out = Word
EndIf
If i + TextHeight(Out) >= Height Then Return 0
Next
If Out Then DrawText(Out, x, y + i)
End Function
|
| ||
| Hmm actually, there are still a few problems with this that I can't seem to solve on my own... First of all, if the word is really long it (of course) doesn't cut it off. If TextWidth(word) >= Width - 1 Then For Local N:Int = Len(word) To 0 Step - 1 If TextWidth(Left(word, N)) < Width - 1 Then Print Left(word, N) Exit EndIf Next End If That detects it but I'm not sure how to insert the rest of that into the array... Also, I need a new line character in there that forces a new line. Any help? :3 |