86 lines
2.6 KiB
C++
86 lines
2.6 KiB
C++
/*
|
|
* Tencent is pleased to support the open source community by making Puerts available.
|
|
* Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
|
|
* Puerts is licensed under the BSD 3-Clause License, except for the third-party components listed in the file 'LICENSE' which may
|
|
* be subject to their corresponding license terms. This file is subject to the terms and conditions defined in file 'LICENSE',
|
|
* which is part of this source code package.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "PuertsNamespaceDef.h"
|
|
|
|
namespace PUERTS_NAMESPACE
|
|
{
|
|
FORCEINLINE FString FilenameToTypeScriptVariableName(const FString& Filename)
|
|
{
|
|
FString TypeScriptVariable;
|
|
if (FChar::IsDigit(Filename[0]))
|
|
{
|
|
TypeScriptVariable.AppendChar('_');
|
|
}
|
|
for (TCHAR c : Filename)
|
|
{
|
|
if (FChar::IsAlnum(c) || c == '_' || c == '$' || FChar::IsAlpha(c))
|
|
{
|
|
if (c == '$')
|
|
{
|
|
TypeScriptVariable.AppendChar('$');
|
|
}
|
|
TypeScriptVariable.AppendChar(c);
|
|
}
|
|
else
|
|
{
|
|
TypeScriptVariable.AppendChar('$');
|
|
TypeScriptVariable.Append(FString::Printf(TEXT("%d"), (int) c));
|
|
TypeScriptVariable.AppendChar('$');
|
|
}
|
|
}
|
|
return TypeScriptVariable;
|
|
}
|
|
|
|
FORCEINLINE FString TypeScriptVariableNameToFilename(const FString& TypeScriptVariable)
|
|
{
|
|
FString Filename;
|
|
int32 i = 0;
|
|
if (TypeScriptVariable.StartsWith("_") && TypeScriptVariable.Len() > 1 && FChar::IsDigit(TypeScriptVariable[1]))
|
|
{
|
|
i = 1;
|
|
}
|
|
while (i < TypeScriptVariable.Len())
|
|
{
|
|
if (TypeScriptVariable[i] != '$')
|
|
{
|
|
Filename.AppendChar(TypeScriptVariable[i]);
|
|
++i;
|
|
}
|
|
else
|
|
{
|
|
if (i + 1 < TypeScriptVariable.Len() && TypeScriptVariable[i + 1] == '$')
|
|
{
|
|
Filename.AppendChar('$');
|
|
i += 2;
|
|
}
|
|
else
|
|
{
|
|
FString ascii_str;
|
|
++i;
|
|
while (i < TypeScriptVariable.Len() && FChar::IsDigit(TypeScriptVariable[i]))
|
|
{
|
|
ascii_str.AppendChar(TypeScriptVariable[i]);
|
|
++i;
|
|
}
|
|
if (i < TypeScriptVariable.Len() && TypeScriptVariable[i] == '$')
|
|
{
|
|
++i;
|
|
}
|
|
TCHAR original_char = static_cast<TCHAR>(FCString::Atoi(*ascii_str));
|
|
Filename.AppendChar(original_char);
|
|
}
|
|
}
|
|
}
|
|
return Filename;
|
|
}
|
|
|
|
} // namespace PUERTS_NAMESPACE
|