In the meanwhile I've made a simple routine to calculate the exact width without these tags, its part of my GFX library, just rename the function name
Code: Select all
Function GFX.Text.GetWidth(txt)
Local real_txt = txt
If FindStr(txt, "[") = -1 Then Return(TextWidth(txt), txt)
; BOLD
real_txt = ReplaceStr(real_txt, "[b]", "")
real_txt = ReplaceStr(real_txt, "[B]", "")
real_txt = ReplaceStr(real_txt, "[/b]", "")
real_txt = ReplaceStr(real_txt, "[/B]", "")
; ITALIC
real_txt = ReplaceStr(real_txt, "[i]", "")
real_txt = ReplaceStr(real_txt, "[I]", "")
real_txt = ReplaceStr(real_txt, "[/i]", "")
real_txt = ReplaceStr(real_txt, "[/I]", "")
; UNDERLINE
real_txt = ReplaceStr(real_txt, "[u]", "")
real_txt = ReplaceStr(real_txt, "[U]", "")
real_txt = ReplaceStr(real_txt, "[/u]", "")
real_txt = ReplaceStr(real_txt, "[/U]", "")
; SHADOW
Local s = 0
While s <> -1
s = FindStr(real_txt, "[shadow", False)
If s <> -1
Local e = FindStr(real_txt, "]", False, s)
If e <> -1
real_txt = UnMidStr(real_txt, s, e-s +1)
EndIf
EndIf
Wend
real_txt = ReplaceStr(real_txt, "[/shadow]", "")
real_txt = ReplaceStr(real_txt, "[/SHADOW]", "")
; EDGE
Local s = 0
While s <> -1
s = FindStr(real_txt, "[edge", False)
If s <> -1
Local e = FindStr(real_txt, "]", False, s)
If e <> -1
real_txt = UnMidStr(real_txt, s, e-s +1)
EndIf
EndIf
Wend
real_txt = ReplaceStr(real_txt, "[/edge]", "")
real_txt = ReplaceStr(real_txt, "[/EDGE]", "")
; COLOR
Local s = 0
While s <> -1
s = FindStr(real_txt, "[color", False)
If s <> -1
Local e = FindStr(real_txt, "]", False, s)
If e <> -1
real_txt = UnMidStr(real_txt, s, e-s +1)
EndIf
EndIf
Wend
real_txt = ReplaceStr(real_txt, "[/color]", "")
real_txt = ReplaceStr(real_txt, "[/COLOR]", "")
Return(TextWidth(real_txt), real_txt)
EndFunction
returns the text width without format tags and the original text without the format tags too