UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TextFilterExpressionEvaluator.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Containers/Array.h"
5#include "Containers/Map.h"
7#include "CoreTypes.h"
12#include "Misc/Optional.h"
15#include "UObject/NameTypes.h"
16
17class FTextToken;
18
21{
22 Invalid,
23 Empty,
25 Complex,
26};
27
34
48
49// A simple basic string expression context for FString
51{
52public:
54 : TestString(InTestString)
55 {
56 }
58 : TestString(InTestString)
59 {
60 }
61
63 {
64 return TextFilterUtils::TestBasicStringExpression(TestString, InValue, InTextComparisonMode);
65 }
66
71
72private:
73 const FString TestString;
74};
75
77{
78 class FTextToken
79 {
80 public:
81 enum class EInvertResult : uint8
82 {
83 No,
84 Yes,
85 };
86
89 , TextComparisonMode(MoveTemp(InTextComparisonMode))
90 , InvertResult(InInvertResult)
91 {
92 }
93
96 , TextComparisonMode(Other.TextComparisonMode)
97 , InvertResult(Other.InvertResult)
98 {
99 }
100
103 , TextComparisonMode(Other.TextComparisonMode)
104 , InvertResult(Other.InvertResult)
105 {
106 }
107
108 FTextToken& operator=(const FTextToken& Other)
109 {
110 String = Other.String;
111 TextComparisonMode = Other.TextComparisonMode;
112 InvertResult = Other.InvertResult;
113 return *this;
114 }
115
116 FTextToken& operator=(FTextToken&& Other)
117 {
118 String = MoveTemp(Other.String);
119 TextComparisonMode = Other.TextComparisonMode;
120 InvertResult = Other.InvertResult;
121 return *this;
122 }
123
124 const FTextFilterString& GetString() const
125 {
126 return String;
127 }
128
129 bool EvaluateAsBasicStringExpression(const ITextFilterExpressionContext* InContext) const
130 {
131 if (String.IsEmpty())
132 {
133 // An empty string is always considered to be true
134 return true;
135 }
136
137 const bool bMatched = InContext->TestBasicStringExpression(String, TextComparisonMode);
138 return (InvertResult == EInvertResult::No) ? bMatched : !bMatched;
139 }
140
142 {
143 const bool bMatched = InContext->TestComplexExpression(InKey.AsName(), String, InComparisonOperation, TextComparisonMode);
144 return (InvertResult == EInvertResult::No) ? bMatched : !bMatched;
145 }
146
147 ETextFilterTextComparisonMode GetTextComparisonMode() const
148 {
149 return TextComparisonMode;
150 }
151
152 private:
154 ETextFilterTextComparisonMode TextComparisonMode;
155 EInvertResult InvertResult;
156 };
157
158 class FFunction
159 {
160
161 };
162} // namespace TextFilterExpressionParser
163
164#define DEFINE_TEXT_EXPRESSION_OPERATOR_NODE(TYPE, MONIKER_COUNT, ...) \
165 namespace TextFilterExpressionParser \
166 { \
167 struct TYPE \
168 { \
169 static constexpr int32 MonikerCount = MONIKER_COUNT; \
170 static const TCHAR* Monikers[MonikerCount]; \
171 }; \
172 } \
173DEFINE_EXPRESSION_NODE_TYPE(TextFilterExpressionParser::TYPE, __VA_ARGS__)
174
175DEFINE_TEXT_EXPRESSION_OPERATOR_NODE(FSubExpressionStart, 1, 0x0E7E1BC9, 0xF0B94D5D, 0x80F44D45, 0x85A082AA)
177
184
188
191
192#undef DEFINE_TEXT_EXPRESSION_OPERATOR_NODE
193
195
198{
199public:
205
208
211
214
217
220
223
226
227protected:
229 CORE_API void SetupGrammar();
230
232 CORE_API virtual void ConstructExpressionParser();
233
236
239
242
245
248
251
254
257
260
265};
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_DELEGATE_RetVal_OneParam(ReturnValueType, DelegateName, Param1Type)
Definition DelegateCombinations.h:54
#define DEFINE_EXPRESSION_NODE_TYPE(TYPE,...)
Definition ExpressionParserTypes.h:196
ETextFilterExpressionType
Definition TextFilterExpressionEvaluator.h:21
ETextFilterExpressionEvaluatorMode
Definition TextFilterExpressionEvaluator.h:30
#define DEFINE_TEXT_EXPRESSION_OPERATOR_NODE(TYPE, MONIKER_COUNT,...)
Definition TextFilterExpressionEvaluator.h:164
ETextFilterTextComparisonMode
Definition TextFilterUtils.h:24
ETextFilterComparisonOperation
Definition TextFilterUtils.h:13
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition TextFilterExpressionEvaluator.h:51
FBasicStringFilterExpressionContext(const FString &InTestString)
Definition TextFilterExpressionEvaluator.h:57
FBasicStringFilterExpressionContext(FString &&InTestString)
Definition TextFilterExpressionEvaluator.h:53
virtual bool TestComplexExpression(const FName &InKey, const FTextFilterString &InValue, const ETextFilterComparisonOperation InComparisonOperation, const ETextFilterTextComparisonMode InTextComparisonMode) const override
Definition TextFilterExpressionEvaluator.h:67
virtual bool TestBasicStringExpression(const FTextFilterString &InValue, const ETextFilterTextComparisonMode InTextComparisonMode) const override
Definition TextFilterExpressionEvaluator.h:62
Definition ExpressionParserTypes.h:557
Definition NameTypes.h:617
Definition TextFilterExpressionEvaluator.h:198
TArray< FExpressionToken > ExpressionTokens
Definition TextFilterExpressionEvaluator.h:250
CORE_API FText GetFilterErrorText() const
Definition TextFilterExpressionEvaluator.cpp:476
CORE_API FTextFilterExpressionEvaluator & operator=(const FTextFilterExpressionEvaluator &Other)
Definition TextFilterExpressionEvaluator.cpp:262
virtual CORE_API ~FTextFilterExpressionEvaluator()
CORE_API const TArray< FExpressionToken > & GetFilterExpressionTokens() const
Definition TextFilterExpressionEvaluator.cpp:481
CORE_API void SetupGrammar()
Definition TextFilterExpressionEvaluator.cpp:506
CORE_API bool SetFilterText(const FText &InFilterText)
Definition TextFilterExpressionEvaluator.cpp:298
FExpressionGrammar Grammar
Definition TextFilterExpressionEvaluator.h:263
virtual CORE_API void ConstructExpressionParser()
Definition TextFilterExpressionEvaluator.cpp:546
FText FilterErrorText
Definition TextFilterExpressionEvaluator.h:247
TMap< FString, FTokenFunctionHandler > TokenFunctionHandlers
Definition TextFilterExpressionEvaluator.h:259
CORE_API FText GetFilterText() const
Definition TextFilterExpressionEvaluator.cpp:293
ETextFilterExpressionEvaluatorMode ExpressionEvaluatorMode
Definition TextFilterExpressionEvaluator.h:238
TOptional< ExpressionParser::CompileResultType > CompiledFilter
Definition TextFilterExpressionEvaluator.h:253
CORE_API ETextFilterExpressionType GetFilterType() const
Definition TextFilterExpressionEvaluator.cpp:288
ETextFilterExpressionType FilterType
Definition TextFilterExpressionEvaluator.h:241
TOptional< TextFilterExpressionParser::FTextToken > CompiledFilterSingleBasicStringTextToken
Definition TextFilterExpressionEvaluator.h:256
TOperatorJumpTable< ITextFilterExpressionContext > JumpTable
Definition TextFilterExpressionEvaluator.h:264
CORE_API void AddFunctionTokenCallback(FString InFunctionName, FTokenFunctionHandler InCallback)
Definition TextFilterExpressionEvaluator.cpp:501
FTokenDefinitions TokenDefinitions
Definition TextFilterExpressionEvaluator.h:262
CORE_API bool TestTextFilter(const ITextFilterExpressionContext &InContext) const
Definition TextFilterExpressionEvaluator.cpp:486
FText FilterText
Definition TextFilterExpressionEvaluator.h:244
virtual CORE_API bool EvaluateCompiledExpression(const ExpressionParser::CompileResultType &InCompiledResult, const ITextFilterExpressionContext &InContext, FText *OutErrorText) const
Definition TextFilterExpressionEvaluator.cpp:584
Definition TextFilterUtils.h:38
Definition TokenizedMessage.h:254
Definition Text.h:385
Definition TextFilterExpressionEvaluator.h:37
virtual bool TestBasicStringExpression(const FTextFilterString &InValue, const ETextFilterTextComparisonMode InTextComparisonMode) const =0
virtual ~ITextFilterExpressionContext()
Definition TextFilterExpressionEvaluator.h:46
virtual bool TestComplexExpression(const FName &InKey, const FTextFilterString &InValue, const ETextFilterComparisonOperation InComparisonOperation, const ETextFilterTextComparisonMode InTextComparisonMode) const =0
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition ValueOrError.h:58
@ No
Definition GenericPlatformMisc.h:326
@ Yes
Definition GenericPlatformMisc.h:327
Definition TextFilterExpressionEvaluator.cpp:14
Definition ExpressionParserTypes.h:317
Definition Optional.h:131