Last Line and FormatTextAreaText

BlitzPlus Forums/BlitzPlus Programming/Last Line and FormatTextAreaText

Richard Betson(Posted 2004) [#1]
I'm having trouble with FormatTextAreaText and the last line in a textarea. The last line in a textarea's does not include ASCII-13 (Return) and ASCII-10 (LineFeed). Each line other then the last will include these (hidden).

For some reason this does not allow FormatTextAreaText to work properly.

Any Idea's on how to get around this?

L8r,


Richard Betson(Posted 2004) [#2]
Ok... To me this is looking very much like Bplus has a "BUG" with either passing a var. , or FormatTextAreaText has a problem accepting a var. for it's lentgh.

When you run this code arrow up and insert a quote ("kkk"). You should see blue text from the open point of the quote to the end of the text.

Now look at the status bar in the window. It shows the Quote starting charactor position as well as the length of the quote. They are right! When these vars are passed to FormatTextAreaText the starting charactor position gets through ok but not the length. If you were to replace the length var. in FormatTextAreaText with a litieral number it works.

edit - See the Highlite function.

Try it out for yourself. Let me know if this can be duplicated on other Windows systems other then Win98.




Global Win1
Global TEXTAREA1
Global Tree1
Global Button1
CreateWin1()
Global tcur


;load_command
Global cmd_cnt
Dim my_command_sort$(25,100)
Dim my_command_index(25,1)
Global s_command_flag
Dim my_command$(1000)

;load_commands()




Type element

	Field name$
	Field row 
	
End Type 

Type token

	Field comment
	Field comment_pos
	Field o_quote
	Field o_quote_pos
	Field c_quote
	Field c_quote_pos
	Field quote

End Type 

Type token_data
	Field token$
	Field o_token_pos
	Field c_token_pos
End Type 




Type token_quote

	Field o_quote_pos
	Field c_quote_pos

End Type 


Global seperator$=";"


AddTextAreaText textarea1,"kkkkkkkkkkkkkkkkkkk"+Chr$(10)+"kkkkkkkkkkkkkkkkkkk"+Chr$(10)+"kkkkkkkkkkkkkkkkkkk"+Chr$(10)+"kkkkkkkkkkkkkkkkkkk"+Chr$(10)
HotKeyEvent 28,0,$103,28	;retuen key
Global root=TreeViewRoot( tree1 )
ActivateGadget textarea1

While WaitEvent()<>$803
		id=EventID()

		If id=$401 			;gadget event
				event_gadget()
		EndIf

	
		If id=$103 			;on key event
				event_key()
		EndIf
Wend



Function event_key()
	es=EventData()
	
	Select es


	Case 28
	
	
	End Select

End Function

Function event_gadget()

	Select EventSource() 
	Case textarea1
		row=TextAreaCursor( textarea1,2 )
		syntax_highlite(row)
	End Select 

End Function 




Function syntax_highlite(row)
	total_rows=TextAreaLen( textarea1,2 ) 
	tlength=TextAreaLineLen(textarea1,row);"Curnt Line Length (tlength):"+tlength
	charp=TextAreaChar( textarea1,row ) ;1st char Line (charp)
	ctext$=TextAreaText(textarea1,charp,tlength,1)	;line text
	
	get_token(ctext$)
	highlite(ctext$,charp,tlength)

	
End Function 





Function get_token(ctext$)

	tpos=Len(ctext$)
	t.token=New token
	For i=1 To tpos
	
		;Comment
		tk$=Mid$(ctext$,i,1)
		If tk$="'" And t\comment=0
			t\comment=1
			t\comment_pos=i
		EndIf
		

		;Quote
		If tk$=Chr$(34)And t\comment=0 And q_flag_o=0
			q_flag_o=1
			tq.token_quote=New token_quote
			tq\o_quote_pos=i
			
		EndIf 
		If q_flag_o=1 And tk$<>Chr$(34)
			q_flag=1
		EndIf 
		If tk$=Chr$(34)And t\comment=0 And q_flag=1
			q_flag=0
			tq\c_quote_pos=i
			t\quote=1
			q_flag_o=0
		EndIf 

	Next
End Function 



Function highlite(ctext$,charp,tlength)
	Local otmp ; Open position of quote
	Local ctmp ; Close Position of quote
	
	FormatTextAreaText (textarea1,0,0,0,1,(charp),(tlength),1)
	 t.token=First token
		If t\comment=True 
			FormatTextAreaText (textarea1,0,0,255,1,(charp+t\comment_pos)-1,((tlength)-t\comment_pos)+1,1)
			;FormatTextAreaText (textarea1,0,0,255,1,(charp+t\comment_pos),((tlength)-t\comment_pos),1)

		EndIf 
		
		If t\quote=True 
			For tq.token_quote=Each token_quote
				ctmp=(tq\c_quote_pos - tq\o_quote_pos)
				otmp=(charp + tq\o_quote_pos)				
				SetStatusText win1,"Open Quote Position:"+otmp+"    Close Quote Length:"+ctmp
		
				FormatTextAreaText textarea1,0,0,255,1,otmp,ctmp,1
				Delete tq
			Next
		EndIf
		
		
	Delete t
	;FormatTextAreaText (textarea1,0,0,0,1,charp,tlength,1)	 		

End Function 



Function IsAlpha( i$ )
	t=Asc(i$)

	If ( (t>=65 And t<=(65+26) ) Or (t>=97 And t<=97+26) )
		
		Return True
	Else
		Return False	
	EndIf
	
End Function


; ----Function Begins----
Function CreateWin1()
Win1 = CreateWindow("Window1",203,155,434,439,Desktop(),7+8)
TEXTAREA1 = CreateTextArea(15,39,225,338,Win1,0)
SetGadgetLayout TEXTAREA1,1,0,1,0
Tree1 = CreateTreeView(256,42,150,320,Win1,0)
SetGadgetLayout Tree1,1,0,1,0
;Button1 = CreateButton("Exit",273,323,118,44,Win1,0)
;SetGadgetLayout Button1,1,0,1,0
End Function





Edit - I just edited this so I can copy it to BPlus bug reports..



This is some kind of BUG for sure. If I iterate a sequnce of numbers in a linear fasion into array then use the array to simulate a number it works.

Adding this to the header of the code:

Dim num(1001)

For i=0 To 1000
	num(i)=i
Next


Next to get FormatTextAreaText to work the length has to be done like this:
FormatTextAreaText textarea1,0,0,255,1,pos,num(index),1


or to look at it from the highlite functions "point of view":
Function highlite(ctext$,charp,tlength)
	Local otmp ; Open position of quote
	Local ctmp ; Close Position of quote
	
	FormatTextAreaText (textarea1,0,0,0,1,(charp),(tlength),1)
	 t.token=First token
		If t\comment=True 
			FormatTextAreaText (textarea1,0,0,255,1,(charp+t\comment_pos)-1,((tlength)-t\comment_pos)+1,1)
			;FormatTextAreaText (textarea1,0,0,255,1,(charp+t\comment_pos),((tlength)-t\comment_pos),1)

		EndIf 
		
		If t\quote=True 
			For tq.token_quote=Each token_quote
				
				ctmp=tq\c_quote_pos-tq\o_quote_pos
				
				otmp=(charp + tq\o_quote_pos)				
				SetStatusText win1,"Open Quote Position:"+otmp+"    Close Quote Length:"+ctmp
				
				FormatTextAreaText textarea1,0,0,255,1,otmp-1,num(ctmp+1),1
				Delete tq
			Next
		EndIf
		
		
	Delete t
	;FormatTextAreaText (textarea1,0,0,0,1,charp,tlength,1)	 		

End Function 


This little fricken bug has haunted me for a month or more ... :(

L8r,