It is possible using C++, you need to:
- extend
FRichTextDecorator - override
Supports&CreateDecoratorText - extend
URichTextBlockDecorator - override
CreateDecorator - Add your created class to Decorator Classes property of the RichText
Example for coloring text green with tag <profit>200€</>.
// header.h
#pragma once
#include "CoreMinimal.h"
#include "Components/RichTextBlockDecorator.h"
#include "ProfitMoneyAmountRichTextDecorator.generated.h"
UCLASS()
class DUKES_API UProfitMoneyAmountRichTextDecorator : public URichTextBlockDecorator
{
GENERATED_BODY()
public:
UProfitMoneyAmountRichTextDecorator(const FObjectInitializer& ObjectInitializer);
virtual TSharedPtr<ITextDecorator> CreateDecorator(URichTextBlock* InOwner) override;
};
// content.cpp
#include "ProfitMoneyAmountRichTextDecorator.h"
class FProfitMoneyAmountRichTextDecorator : public FRichTextDecorator
{
private:
UProfitMoneyAmountRichTextDecorator* Decorator;
public:
FProfitMoneyAmountRichTextDecorator(URichTextBlock* InOwner, UProfitMoneyAmountRichTextDecorator* InDecorator)
: FRichTextDecorator(InOwner)
, Decorator(InDecorator)
{
}
virtual bool Supports(const FTextRunParseResults& RunInfo, const FString& Text) const override
{
if (RunInfo.Name == TEXT("profit"))
{
return true;
}
return false;
}
virtual void CreateDecoratorText(const FTextRunInfo& RunInfo, FTextBlockStyle& InOutTextStyle, FString& InOutString) const override
{
InOutTextStyle.SetColorAndOpacity(FSlateColor(FLinearColor(0.0f, 0.7f, 0.0f)));
InOutString += *RunInfo.Content.ToString();
}
};
UProfitMoneyAmountRichTextDecorator::UProfitMoneyAmountRichTextDecorator(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
}
TSharedPtr<ITextDecorator> UProfitMoneyAmountRichTextDecorator::CreateDecorator(URichTextBlock* InOwner)
{
return MakeShareable(new FProfitMoneyAmountRichTextDecorator(InOwner, this));
}
It probably makes sense to only create one of these, then you could even build your own “class” system using tag metadata.
For reference see: Unreals Example FRichInlineImage class
More info here: https://www.unrealengine.com/de/tech-blog/advanced-text-styling-with-rich-text-block