summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorVitaly Kogogin <33424304+obergodmar@users.noreply.github.com>2024-06-29 16:56:06 +0300
committerGitHub <noreply@github.com>2024-06-29 10:56:06 -0300
commit02b58ff02ee0dc5c5db93c279cf299431a3242ac (patch)
tree293c552e43da5dce05ebd0a3db0cd160b58f4fb1 /src/common
parent0f7060fad4baddcce5b0e0554158df18d7a0974a (diff)
fix(core/character-creation): get main part of cyrillic name (#18971)
fix(character/creation): get main part of cyrillic name
Diffstat (limited to 'src/common')
-rw-r--r--src/common/Utilities/Util.cpp45
1 files changed, 25 insertions, 20 deletions
diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp
index 6ad08152f3..ee397dd4dd 100644
--- a/src/common/Utilities/Util.cpp
+++ b/src/common/Utilities/Util.cpp
@@ -383,7 +383,7 @@ void wstrToLower(std::wstring& str) { std::transform(std::begin(str), std::end(s
void strToUpper(std::string& str) { std::transform(std::begin(str), std::end(str), std::begin(str), charToUpper); }
void strToLower(std::string& str) { std::transform(std::begin(str), std::end(str), std::begin(str), charToLower); }
-std::wstring GetMainPartOfName(std::wstring const& wname, uint32 declension)
+std::wstring GetMainPartOfName(std::wstring const& wname, uint32_t declension)
{
// supported only Cyrillic cases
if (wname.empty() || !isCyrillicCharacter(wname[0]) || declension > 5)
@@ -392,22 +392,22 @@ std::wstring GetMainPartOfName(std::wstring const& wname, uint32 declension)
}
// Important: end length must be <= MAX_INTERNAL_PLAYER_NAME-MAX_PLAYER_NAME (3 currently)
- static std::wstring const a_End = { wchar_t(0x0430), wchar_t(0x0000) };
- static std::wstring const o_End = { wchar_t(0x043E), wchar_t(0x0000) };
- static std::wstring const ya_End = { wchar_t(0x044F), wchar_t(0x0000) };
- static std::wstring const ie_End = { wchar_t(0x0435), wchar_t(0x0000) };
- static std::wstring const i_End = { wchar_t(0x0438), wchar_t(0x0000) };
- static std::wstring const yeru_End = { wchar_t(0x044B), wchar_t(0x0000) };
- static std::wstring const u_End = { wchar_t(0x0443), wchar_t(0x0000) };
- static std::wstring const yu_End = { wchar_t(0x044E), wchar_t(0x0000) };
- static std::wstring const oj_End = { wchar_t(0x043E), wchar_t(0x0439), wchar_t(0x0000) };
- static std::wstring const ie_j_End = { wchar_t(0x0435), wchar_t(0x0439), wchar_t(0x0000) };
- static std::wstring const io_j_End = { wchar_t(0x0451), wchar_t(0x0439), wchar_t(0x0000) };
- static std::wstring const o_m_End = { wchar_t(0x043E), wchar_t(0x043C), wchar_t(0x0000) };
- static std::wstring const io_m_End = { wchar_t(0x0451), wchar_t(0x043C), wchar_t(0x0000) };
- static std::wstring const ie_m_End = { wchar_t(0x0435), wchar_t(0x043C), wchar_t(0x0000) };
- static std::wstring const soft_End = { wchar_t(0x044C), wchar_t(0x0000) };
- static std::wstring const j_End = { wchar_t(0x0439), wchar_t(0x0000) };
+ static std::wstring const a_End = L"\u0430";
+ static std::wstring const o_End = L"\u043E";
+ static std::wstring const ya_End = L"\u044F";
+ static std::wstring const ie_End = L"\u0435";
+ static std::wstring const i_End = L"\u0438";
+ static std::wstring const yeru_End = L"\u044B";
+ static std::wstring const u_End = L"\u0443";
+ static std::wstring const yu_End = L"\u044E";
+ static std::wstring const oj_End = L"\u043E\u0439";
+ static std::wstring const ie_j_End = L"\u0435\u0439";
+ static std::wstring const io_j_End = L"\u0451\u0439";
+ static std::wstring const o_m_End = L"\u043E\u043C";
+ static std::wstring const io_m_End = L"\u0451\u043C";
+ static std::wstring const ie_m_End = L"\u0435\u043C";
+ static std::wstring const soft_End = L"\u044C";
+ static std::wstring const j_End = L"\u0439";
static std::array<std::array<std::wstring const*, 7>, 6> const dropEnds = {{
{ &a_End, &o_End, &ya_End, &ie_End, &soft_End, &j_End, nullptr },
@@ -421,16 +421,21 @@ std::wstring GetMainPartOfName(std::wstring const& wname, uint32 declension)
std::size_t const thisLen = wname.length();
std::array<std::wstring const*, 7> const& endings = dropEnds[declension];
- for (auto itr = endings.begin(), end = endings.end(); (itr != end) && *itr; ++itr)
+ for (const std::wstring* endingPtr : endings)
{
- std::wstring const& ending = **itr;
+ if (endingPtr == nullptr)
+ {
+ break;
+ }
+
+ std::wstring const& ending = *endingPtr;
std::size_t const endLen = ending.length();
if (endLen > thisLen)
{
continue;
}
- if (wname.substr(thisLen - endLen, thisLen) == ending)
+ if (wname.compare(thisLen - endLen, endLen, ending) == 0)
{
return wname.substr(0, thisLen - endLen);
}