RichText [TextScaled Support Added]

This is possible by using string patterns:

local text = '<b>Test</b> <font size="14" color="rgb(255,0,255)">String</font>'
print(text:gsub("</?%s*[bius]%s*>", ""):gsub("</?font%s*[%w%s='\"\(\),]*>", ""))
-- Output: Test String

Unless this isnt what you mean

5 Likes

Wow! I’m loving these new UI updates. This’ll be huge for UI Designers.

This is really cool, but the way it’s formatted is kinda redundant.
It’s not a very good user experience (go to around 14 seconds)

Have you guys considered doing it in a similar way to how Minecraft does it?

A lot of modded minecraft servers have it like this:
https://www.spigotmc.org/resources/colorcodes.32415/
image

In vanilla minecraft, you use this symbol: §
to add color to book and quills

The main thing that would be nice is a “reset” indicator instead of closing HTML brackets.


Maybe the format could be something like:

image

\<b> Bold Text here → Bold Text here

\<i> Italicized Text here → Italicized Text here

\<s> strikes through Text here → strikes through Text here

and then \<r> to reset


you could do something like this:

\<b>\<255,0,0>Hello \<r>\<i>\<0,0,255>world!

and it would become

image
Hello world!

(The coloring isn’t perfect, but you get the point)

This would save memory in the long run as well since this is shorter than HTML:

<b><font color= "rgb(255, 0, 0)">Hello </font><\b> <i><font color= "rgb(0, 0, 255)">world</font></i>

On the other hand, it wouldn’t be too hard to create a system like this using HTML formatting.
Either way, this is a really cool feature

6 Likes

I’d prefer the current format over that, in my opinion the current one is more easily readable.

2 Likes

I’d tend to disagree, but maybe it’s because I’ve spent an exorbitant amount of time on Minecraft.

1 Like

Having the exact same issue. Made my syntax highlighter and it was working perfectly.

Tried it on a large script and RichText just didn’t bother rendering…

I thought it was something being escaped incorrectly so I wasted 20 minutes trying to narrow it down to something before realizing that setting the source to string.rep("print('hi');",200,"\n") caused it to break.

20 Lines of syntax highlighted text:

200 Lines of exactly the same thing, simply more RichText tags:

I don’t know what the current limit is but it clearly stops working after a certain number of tags. (Limit seems to change based on how many unique tags there are, but always exists at some cutoff.)

@0xabcdef1234 How many tags does it take before it reverts to being a regular TextObject?

6 Likes

I’ve been waiting for this for a long time, and I’m really excited for the release! This would be perfect for in-game dialog.

Perfect, I was trying to make a luau syntax color thing and this will help me a lot!

ROBLOX IS SPOILING US! I’VE BEEN WAITING FOR HTML IN TEXT FOR YEARS!!!

but what about css in text too?

1 Like

I don’t think there is a limit to the amount of tags, however there is a limit to the length of text stored in a text object.

local t = Instance.new"TextLabel"
t.RichText = true
t.Text = string.rep("A",100000)
print(#t.Text) --> 16384

The rest of the string just gets cut off.
Presumably at the point it gets cut off it makes something invalid which causes it to not render using rich text (removing a closing tag, removing half of a tag and getting something like </font, etc).

You can somewhat alleviate the problem by using a hex color code instead of rgb(...).
<font color= "rgb(131, 206, 255)"> is 34 characters, while <font color="#83CEFF"> is 22 characters.

6 Likes

Ohhhhhh good catch. That’s a shame.

4 Likes

Changing text positions would be cool, and so would being able to change text rotations!

We can give the words a little spin :dizzy:

1 Like

RedText gt BlueText

Love it. Now all we need is custom fonts and I’ll have a field day(or week…or month) with that.

1 Like

After literal hours (around 8 because I’m terrible at string manipulation) of trying to figure out a good string pattern for this (I still didn’t get a flawless one [Edit: I think I fixed all the issues the old pattern had]), I added markdown to my custom chat!

custom

I achieved this by converting the markdown text to rich text, which was a pain, to say the least.
I also had to come up with a solution to remove the rich text before filtering and adding it back afterward, which was painful as well. It’s a pretty hacky solution so a :FilterRichTextAsync() function would be handy.

Here is the same message with the RichText property off. (It got cut off as the TextBounds are calculated on the same string but with the RichTags removed)
1

It even shows up in the chat bubble.

28 Likes

This Is So Helpful When Making GUI’s And Other Things :grinning:

Here’s what I’ve been using RichText for… @PoliceFighter761 great minds think alike, eh?
Also, the GetTextSize(RichText) function would really help in accurately positioning the caret since certain tags (<i>) change the size of the text. Other than that, this feature makes chat so much more fun to use!

24 Likes

hoo boy this is gonna be fun to mess w/

This changes everything/ I’ve been waiting so long for this to come out (Since I started as developer) and it is finally here. Thank you! :smile:

Wait did you script it or was it built-in?

You have to script it yourself, its not too hard actually.