Files
UnrealEngine/Engine/Source/Runtime/Solaris/uLangJSON/Private/uLang/JSON/JSON.cpp
2025-05-18 13:04:45 +08:00

71 lines
1.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "uLang/JSON/JSON.h"
#include "uLang/Common/Text/UTF8StringBuilder.h"
namespace uLang
{
CUTF8String EscapeJSON(const UTF8Char Ch)
{
switch (Ch)
{
case '\b':
return "\\b";
case '\f':
return "\\f";
case '\n':
return "\\n";
case '\r':
return "\\r";
case '\t':
return "\\t";
case '\"':
return "\\\"";
case '\\':
return "\\\\";
default:
if (Ch < 0x20u)
{
return CUTF8String("\\u%04X", Ch);
}
else
{
CUTF8StringBuilder StringBuilder;
StringBuilder.Append(Ch);
return StringBuilder.MoveToString();
}
}
}
CUTF8String EscapeJSON(const CUTF8StringView& RawText)
{
CUTF8StringBuilder EscapedText;
for (const UTF8Char* Ch = RawText._Begin; Ch < RawText._End; ++Ch)
{
switch (*Ch)
{
case '\b': EscapedText.Append("\\b"); break;
case '\f': EscapedText.Append("\\f"); break;
case '\n': EscapedText.Append("\\n"); break;
case '\r': EscapedText.Append("\\r"); break;
case '\t': EscapedText.Append("\\t"); break;
case '\"': EscapedText.Append("\\\""); break;
case '\\': EscapedText.Append("\\\\"); break;
default:
if (*Ch < 0x20u)
{
EscapedText.AppendFormat("\\u%04X", *Ch);
}
else
{
EscapedText.Append(*Ch);
}
break;
}
}
return EscapedText.MoveToString();
}
} // namespace uLang