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;
|
|
|
|
}; |