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