What is the best way to wrap text?

Monkey Forums/Monkey Programming/What is the best way to wrap text?

ondesic(Posted 2012) [#1]
Hi monkey community. I was wondering if there was an easy way to wrap text to a certain width with CreateText?

Thanks


Shinkiro1(Posted 2012) [#2]
Split your text into words, after that you loop all words and increase the x-position that changes with the TextWidth() of the word.
[monkeycode]
splittedText:String[] = yourText.Split (" ")
Local xpos:Float
Local line:Int
For Local i:Int = 0 Until splittedText.Length
xpos += TextWidth (splittedText[i])
If xpos > YOUR_SPECIFIED_LINE_WIDTH
xpos = 0 'Reset the xpos to 0
line += 1 'Go to next line
End
DrawText (splittedText[i], xpos, line*YOUR_LINE_HEIGHT)
Next
[/monkeycode]

That's untested but I hope you get the idea.


Xaron(Posted 2012) [#3]
Or use Fontmachine.


ondesic(Posted 2012) [#4]
I downloaded fontmachine but I don't see any properties or funtions to wrap text.


ondesic(Posted 2012) [#5]
I have looked for about a day trying to find an easy way to wrap text with fontmachine. Do I need to calculate things myself, and insert a new line, or is there an easiesr way?


therevills(Posted 2012) [#6]
For word wrapping when using FontMachine, Taiphoz added an overloaded method here to do it:

http://www.monkeycoder.co.nz/Community/posts.php?topic=3207#33908

Also check out his extended BitMap class here:

http://code.google.com/p/monkey-touch/source/browse/trunk/main.monkey

[monkeycode]#Rem
summary: Extension of Font Machine's BitmapFont
Created so that others dont need to hack their font machine module.
Should be removed soon once Ziggy writes his own more efficiant version.

#END
Class BitmapFont2 extends BitmapFont[/monkeycode]


ondesic(Posted 2012) [#7]
Thanks, I'll try it out


ondesic(Posted 2013) [#8]
Coming back to this, I realized that if you add a new line, it breaks the code and the text backs up on itself. Any solutions (besides not using ~n :)?


ondesic(Posted 2013) [#9]
Hey, I figured out a nice solution to make wrapping work with "~n".

My change to the code adds two small lines. Just replace the SplitLines Method with below. Hope this helps someone:

Method SplitLines:String[] (_text:String, _width:Int)
	'new addition
	_text = _text.Replace("~n", "~n ")
		
	Local Tai_textdata:String[] = _text.Split(" ")
		
	'temp vars for building lines.
	Local Tai_tmptext:String=""
	Local Tai_words:Int=Tai_textdata.Length()
	Local Tai_textlines:String[Tai_words] 'its a fudge. but number of lines will possibly match number of words.
		
	Local Tai_line:Int = 0
		
	For Local Tai_word:Int = 0 To Tai_words-1
		
		Tai_tmptext+=Tai_textdata[Tai_word]+" "
			
		If Self.GetTxtWidth(Tai_tmptext) < _width And Tai_tmptext.Contains("~n") = False 'added new condition
			Tai_textlines[Tai_line]=Tai_tmptext
		Else
			Tai_line+=1
			Tai_tmptext=(Tai_textdata[Tai_word]+" ")
		End If
			
	Next
		
	Return Tai_textlines
End Method



MikeHart(Posted 2013) [#10]
ondesic, you mentioned "CreateText". Are you talking about fantomEngine here? Mojo does not have a CreateText command. If it is about fE, then look at the MultilineText example.


ondesic(Posted 2013) [#11]
My original post started that way a while ago, but I am using FontMachine in the example above.


MikeHart(Posted 2013) [#12]
Sorry, i should have paid more attention to the timestamp.


ondesic(Posted 2013) [#13]
Darn, what I would really like is to be able to use AngelFont with it's DrawHTML() method BUT alow the text to have "~n" in it.

Right now even if I use the SimpleTextBox(), if I have a newline anywhere,the text is just drawn on one line over and over again overlapping itself and making the text a muttle.

Any help would sure be appreciated.


MikeHart(Posted 2013) [#14]
Maybe contact Ziggy directly regarding Fontmachine.


Beaker(Posted 2013) [#15]
ondesic - have you tried the latest version of AngelFont?
http://www.monkeycoder.co.nz/Community/posts.php?topic=141


ondesic(Posted 2013) [#16]
Thank you. I saw that the first post was a year ago so I thought it was older. It seems to work now. Perfect!!!