| @ -0,0 +1,165 @@ | ||||
| #pragma once | ||||
|  | ||||
| class UNREALSHARPRUNTIMEGLUE_API FCSScriptBuilder | ||||
| { | ||||
| public: | ||||
| 	enum class IndentType | ||||
| 	{ | ||||
| 		Spaces, | ||||
| 		Tabs | ||||
| 	}; | ||||
| 	 | ||||
| 	explicit FCSScriptBuilder(IndentType InIndentMode) | ||||
| 	: UnsafeBlockCount(0) | ||||
| 	, IndentCount(0) | ||||
| 	, IndentMode(InIndentMode) | ||||
| 	{ | ||||
| 	} | ||||
|  | ||||
| 	void Indent() | ||||
| 	{ | ||||
| 		++IndentCount; | ||||
| 	} | ||||
|  | ||||
| 	void Unindent() | ||||
| 	{ | ||||
| 		--IndentCount; | ||||
| 	} | ||||
|  | ||||
| 	void AppendLine() | ||||
| 	{ | ||||
| 		if (Report.Len() != 0) | ||||
| 		{ | ||||
| 			Report.Append(LINE_TERMINATOR); | ||||
| 		} | ||||
|  | ||||
| 		if (IndentMode == IndentType::Spaces) | ||||
| 		{ | ||||
| 			for (int32 Index = 0; Index < IndentCount; Index++) | ||||
| 			{ | ||||
| 				Report.Append(TEXT("    ")); | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			for (int32 Index = 0; Index < IndentCount; Index++) | ||||
| 			{ | ||||
| 				Report.Append(TEXT("\t")); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	void Append(FStringView String) | ||||
| 	{ | ||||
| 		Report.Append(String); | ||||
| 	} | ||||
|  | ||||
| 	void Append(const FString& String) | ||||
| 	{ | ||||
| 		Report.Append(String); | ||||
| 	} | ||||
|  | ||||
| 	void Append(const TCHAR* String) | ||||
| 	{ | ||||
| 		Report.Append(String); | ||||
| 	} | ||||
|  | ||||
| 	void Append(const FName& Name) | ||||
| 	{ | ||||
| 		Report.Append(Name.ToString()); | ||||
| 	} | ||||
|  | ||||
| 	void AppendLine(const FText& Text) | ||||
| 	{ | ||||
| 		AppendLine(); | ||||
|  | ||||
| 		if (const FString* SourceString = FTextInspector::GetSourceString(Text)) | ||||
| 		{ | ||||
| 			Report.Append(*SourceString); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			Report.Append(Text.ToString()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	void AppendLine(FStringView String) | ||||
| 	{ | ||||
| 		AppendLine(); | ||||
| 		Report.Append(String); | ||||
| 	} | ||||
|  | ||||
| 	void AppendLine(const FString& String) | ||||
| 	{ | ||||
| 		AppendLine(); | ||||
| 		Report.Append(String); | ||||
| 	} | ||||
|  | ||||
| 	void AppendLine(const ANSICHAR* Line) | ||||
| 	{ | ||||
| 		AppendLine(); | ||||
| 		Report.Append(Line); | ||||
| 	} | ||||
|  | ||||
| 	void AppendLine(const FName& Name) | ||||
| 	{ | ||||
| 		AppendLine(); | ||||
| 		Report.Append(Name.ToString()); | ||||
| 	} | ||||
|  | ||||
| 	void AppendLine(const TCHAR* Line) | ||||
| 	{ | ||||
| 		AppendLine(); | ||||
| 		Report.Append(Line); | ||||
| 	} | ||||
|  | ||||
| 	void OpenBrace() | ||||
| 	{ | ||||
| 		AppendLine(TEXT("{")); | ||||
| 		Indent(); | ||||
| 	} | ||||
|  | ||||
| 	void CloseBrace() | ||||
| 	{ | ||||
| 		Unindent(); | ||||
| 		AppendLine(TEXT("}")); | ||||
| 	} | ||||
|  | ||||
| 	void EndUnsafeBlock() | ||||
| 	{ | ||||
| 		check(UnsafeBlockCount >= 0); | ||||
| 		if (!--UnsafeBlockCount) | ||||
| 		{ | ||||
| 			CloseBrace(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	void Clear() | ||||
| 	{ | ||||
| 		Report.Reset(); | ||||
| 	} | ||||
|  | ||||
| 	FText ToText() const | ||||
| 	{ | ||||
| 		return FText::FromString(ToString()); | ||||
| 	} | ||||
|  | ||||
| 	FString ToString() const | ||||
| 	{ | ||||
| 		return Report.ToString(); | ||||
| 	} | ||||
|  | ||||
| 	bool IsEmpty() const | ||||
| 	{ | ||||
| 		return Report.Len() == 0; | ||||
| 	} | ||||
|  | ||||
| private: | ||||
|  | ||||
| 	TStringBuilder<2048> Report; | ||||
| 	TArray<FString> Directives; | ||||
| 	int32 UnsafeBlockCount; | ||||
| 	int32 IndentCount; | ||||
| 	IndentType IndentMode; | ||||
| 	 | ||||
| }; | ||||
		Reference in New Issue
	
	Block a user