165 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#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;
 | 
						|
	
 | 
						|
}; |