FReply SCodeEditableText::OnKeyChar(const FGeometry& MyGeometry, const FCharacterEvent& InCharacterEvent)
{
	FReply Reply = FReply::Unhandled();

	const TCHAR Character = InCharacterEvent.GetCharacter();
	if(Character == TEXT('\t'))
	{
		if (!GetIsReadOnly())
		{
			FString String;
			String.AppendChar(Character);
			InsertTextAtCursor(String);
			Reply = FReply::Handled();
		}
		else
		{
			Reply = FReply::Unhandled();
		}
	}
	else
	{
		Reply = SMultiLineEditableText::OnKeyChar( MyGeometry, InCharacterEvent );
	}

	return Reply;
}
FReply SPythonEditableText::OnKeyChar(const FGeometry& MyGeometry, const FCharacterEvent& InCharacterEvent)
{
	FReply Reply = FReply::Unhandled();

	const TCHAR Character = InCharacterEvent.GetCharacter();
	if (IsTextReadOnly())
	{
		return Reply;
	}
	Reply = FReply::Handled();
	// substitute tab, with 4 spaces
	if (Character == TEXT('\t'))
	{
		InsertTextAtCursor(FString("    "));
	}
	//else if (Character == TEXT('('))
	//{
	//	FString String=TEXT("()");
	//	InsertTextAtCursor(String);
	//}
	//else if (Character == TEXT('['))
	//{
	//	FString String = TEXT("[]");
	//	InsertTextAtCursor(String);
	//}
	//else if (Character == TEXT('{'))
	//{
	//	FString String = TEXT("{}");
	//	InsertTextAtCursor(String);
	//}
	//else if (Character == TEXT('\''))
	//{
	//	FString String = TEXT("''");
	//	InsertTextAtCursor(String);
	//}
	//else if (Character == TEXT('"'))
	//{
	//	FString String = TEXT("\"\"");
	//	InsertTextAtCursor(String);
	//}
	else
	{
		Reply = SMultiLineEditableText::OnKeyChar(MyGeometry, InCharacterEvent);
	}

	return Reply;
}