You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
+Created a custom syntax tokenizer for Hlsl Highlighter. The vanilla tokenizer does a greedy match, which can lead to cases like "FloatA" to be tokenized as "Float" and "A". The new tokenizer is more specific about when to check for a match +Added ISyntaxTokenizer to be used as a based class for all syntax tokenizers #jira UE-144112 #rb Halfdan.Ingvarsson #fyi Jamie.Dale #preflight skip [CL 19380707 by jack cai in ue5-main branch]
98 lines
3.4 KiB
C++
98 lines
3.4 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "SlateGlobals.h"
|
|
#include "Styling/SlateTypes.h"
|
|
#include "Styling/CoreStyle.h"
|
|
|
|
#if WITH_FANCY_TEXT
|
|
#include "Framework/Text/PlainTextLayoutMarshaller.h"
|
|
#include "Framework/Text/SyntaxTokenizer.h"
|
|
#endif
|
|
|
|
class FTextLayout;
|
|
|
|
#if WITH_FANCY_TEXT
|
|
|
|
/**
|
|
* Get/set the raw text to/from a text layout, and also inject syntax highlighting
|
|
*/
|
|
class SLATE_API FSyntaxHighlighterTextLayoutMarshaller : public FPlainTextLayoutMarshaller
|
|
{
|
|
public:
|
|
|
|
virtual ~FSyntaxHighlighterTextLayoutMarshaller();
|
|
|
|
// ITextLayoutMarshaller
|
|
virtual void SetText(const FString& SourceString, FTextLayout& TargetTextLayout) override;
|
|
virtual bool RequiresLiveUpdate() const override;
|
|
|
|
void EnableSyntaxHighlighting(const bool bEnable);
|
|
bool IsSyntaxHighlightingEnabled() const;
|
|
|
|
protected:
|
|
|
|
virtual void ParseTokens(const FString& SourceString, FTextLayout& TargetTextLayout, TArray<ISyntaxTokenizer::FTokenizedLine> TokenizedLines) = 0;
|
|
|
|
FSyntaxHighlighterTextLayoutMarshaller(TSharedPtr< ISyntaxTokenizer > InTokenizer);
|
|
|
|
/** Tokenizer used to style the text */
|
|
TSharedPtr< ISyntaxTokenizer > Tokenizer;
|
|
|
|
/** True if syntax highlighting is enabled, false to fallback to plain text */
|
|
bool bSyntaxHighlightingEnabled;
|
|
|
|
};
|
|
|
|
/**
|
|
* Get/set the raw text to/from a text layout, and also inject syntax highlighting for our rich-text markup
|
|
*/
|
|
class SLATE_API FRichTextSyntaxHighlighterTextLayoutMarshaller : public FSyntaxHighlighterTextLayoutMarshaller
|
|
{
|
|
public:
|
|
|
|
struct FSyntaxTextStyle
|
|
{
|
|
FSyntaxTextStyle()
|
|
: NormalTextStyle(FCoreStyle::Get().GetWidgetStyle<FTextBlockStyle>("SyntaxHighlight.Normal"))
|
|
, NodeTextStyle(FCoreStyle::Get().GetWidgetStyle<FTextBlockStyle>("SyntaxHighlight.Node"))
|
|
, NodeAttributeKeyTextStyle(FCoreStyle::Get().GetWidgetStyle<FTextBlockStyle>("SyntaxHighlight.NodeAttributeKey"))
|
|
, NodeAttribueAssignmentTextStyle(FCoreStyle::Get().GetWidgetStyle<FTextBlockStyle>("SyntaxHighlight.NodeAttribueAssignment"))
|
|
, NodeAttributeValueTextStyle(FCoreStyle::Get().GetWidgetStyle<FTextBlockStyle>("SyntaxHighlight.NodeAttributeValue"))
|
|
{
|
|
}
|
|
|
|
FSyntaxTextStyle(const FTextBlockStyle& InNormalTextStyle, const FTextBlockStyle& InNodeTextStyle, const FTextBlockStyle& InNodeAttributeKeyTextStyle, const FTextBlockStyle& InNodeAttribueAssignmentTextStyle, const FTextBlockStyle& InNodeAttributeValueTextStyle)
|
|
: NormalTextStyle(InNormalTextStyle)
|
|
, NodeTextStyle(InNodeTextStyle)
|
|
, NodeAttributeKeyTextStyle(InNodeAttributeKeyTextStyle)
|
|
, NodeAttribueAssignmentTextStyle(InNodeAttribueAssignmentTextStyle)
|
|
, NodeAttributeValueTextStyle(InNodeAttributeValueTextStyle)
|
|
{
|
|
}
|
|
|
|
FTextBlockStyle NormalTextStyle;
|
|
FTextBlockStyle NodeTextStyle;
|
|
FTextBlockStyle NodeAttributeKeyTextStyle;
|
|
FTextBlockStyle NodeAttribueAssignmentTextStyle;
|
|
FTextBlockStyle NodeAttributeValueTextStyle;
|
|
};
|
|
|
|
static TSharedRef< FRichTextSyntaxHighlighterTextLayoutMarshaller > Create(const FSyntaxTextStyle& InSyntaxTextStyle);
|
|
|
|
virtual ~FRichTextSyntaxHighlighterTextLayoutMarshaller();
|
|
|
|
protected:
|
|
|
|
virtual void ParseTokens(const FString& SourceString, FTextLayout& TargetTextLayout, TArray<ISyntaxTokenizer::FTokenizedLine> TokenizedLines) override;
|
|
|
|
FRichTextSyntaxHighlighterTextLayoutMarshaller(TSharedPtr< ISyntaxTokenizer > InTokenizer, const FSyntaxTextStyle& InSyntaxTextStyle);
|
|
|
|
/** Styles used to display the text */
|
|
FSyntaxTextStyle SyntaxTextStyle;
|
|
|
|
};
|
|
|
|
#endif //WITH_FANCY_TEXT
|