diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-04-20 20:36:24 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-04-20 20:36:24 +0200 |
commit | aced88b09bd918b0ed17b6c5e8a6048788600d9d (patch) | |
tree | 80f699e135bdb890f12be5db99f49caec9e373cb /src/common/Utilities/Util.cpp | |
parent | 7ef9acd765feeecb3752359958f717896bcbe37a (diff) |
Core/AuctionHouse: After taking a break at the start of patch 8.3 auction house is now back in business.
Diffstat (limited to 'src/common/Utilities/Util.cpp')
-rw-r--r-- | src/common/Utilities/Util.cpp | 185 |
1 files changed, 184 insertions, 1 deletions
diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp index 743fb7e4543..1776815a247 100644 --- a/src/common/Utilities/Util.cpp +++ b/src/common/Utilities/Util.cpp @@ -372,7 +372,190 @@ bool WStrToUtf8(std::wstring const& wstr, std::string& utf8str) return true; } -typedef wchar_t const* const* wstrlist; +std::wstring wstrCaseAccentInsensitiveParse(std::wstring const& wstr, LocaleConstant locale) +{ + std::wstring result; + result.reserve(wstr.length() * 2); + + switch (locale) + { + case LOCALE_frFR: + for (wchar_t wchar : wstr) + { + wchar = wcharToLower(wchar); + switch (wchar) + { + case 0x00A0: // NO-BREAK SPACE + result += L' '; + break; + case 0x00AB: // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + case 0x00BB: // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + result += L'"'; + break; + case 0x00E7: // LATIN SMALL LETTER C WITH CEDILLA + result += L'c'; + break; + case 0x00E8: // LATIN SMALL LETTER E WITH GRAVE + case 0x00E9: // LATIN SMALL LETTER E WITH ACUTE + case 0x00EA: // LATIN SMALL LETTER E WITH CIRCUMFLEX + case 0x00EB: // LATIN SMALL LETTER E WITH DIAERESIS + result += L'e'; + break; + case 0x00EE: // LATIN SMALL LETTER I WITH CIRCUMFLEX + case 0x00EF: // LATIN SMALL LETTER I WITH DIAERESIS + result += L'i'; + break; + case 0x00F2: // LATIN SMALL LETTER O WITH GRAVE + case 0x00F3: // LATIN SMALL LETTER O WITH ACUTE + case 0x00F4: // LATIN SMALL LETTER O WITH CIRCUMFLEX + case 0x00F6: // LATIN SMALL LETTER O WITH DIAERESIS + result += L'o'; + break; + case 0x00F9: // LATIN SMALL LETTER U WITH GRAVE + case 0x00FA: // LATIN SMALL LETTER U WITH ACUTE + case 0x00FB: // LATIN SMALL LETTER U WITH CIRCUMFLEX + case 0x00FC: // LATIN SMALL LETTER U WITH DIAERESIS + result += L'u'; + break; + case 0x0153: // LATIN SMALL LIGATURE OE + result += L'o'; + result += L'e'; + break; + case 0x2013: // EN DASH + result += L'-'; + break; + case 0x2018: // LEFT SINGLE QUOTATION MARK + case 0x2019: // RIGHT SINGLE QUOTATION MARK + result += L'\''; + break; + default: + result += wchar; + break; + } + } + break; + case LOCALE_deDE: + for (wchar_t wchar : wstr) + { + wchar = wcharToLower(wchar); + if (wchar == 0x00DF) // LATIN SMALL LETTER SHARP S + { + result += L's'; + result += L's'; + } + else + result += wchar; + } + break; + case LOCALE_esES: + case LOCALE_esMX: + case LOCALE_itIT: + for (wchar_t wchar : wstr) + { + wchar = wcharToLower(wchar); + switch (wchar) + { + case 0x00E1: // LATIN SMALL LETTER A WITH ACUTE + result += L'a'; + break; + case 0x00E9: // LATIN SMALL LETTER E WITH ACUTE + result += L'e'; + break; + case 0x00ED: // LATIN SMALL LETTER I WITH ACUTE + result += L'i'; + break; + case 0x00F1: // LATIN SMALL LETTER N WITH TILDE + result += L'n'; + break; + case 0x00F3: // LATIN SMALL LETTER O WITH ACUTE + result += L'o'; + break; + case 0x00FA: // LATIN SMALL LETTER U WITH ACUTE + case 0x00FC: // LATIN SMALL LETTER U WITH DIAERESIS + result += L'u'; + break; + default: + result += wchar; + break; + } + } + break; + case LOCALE_ruRU: + for (wchar_t wchar : wstr) + { + wchar = wcharToLower(wchar); + switch (wchar) + { + case 0x451: // CYRILLIC SMALL LETTER IO + result += wchar_t(0x435); + break; + case 0x2013: // EN DASH + result += L'-'; + break; + default: + result += wchar; + break; + } + } + break; + case LOCALE_ptBR: + for (wchar_t wchar : wstr) + { + wchar = wcharToLower(wchar); + switch (wchar) + { + case 0x00E0: // LATIN SMALL LETTER A WITH GRAVE + case 0x00E1: // LATIN SMALL LETTER A WITH ACUTE + case 0x00E2: // LATIN SMALL LETTER A WITH CIRCUMFLEX + case 0x00E3: // LATIN SMALL LETTER A WITH TILDE + case 0x00E4: // LATIN SMALL LETTER A WITH DIAERESIS + result += L'a'; + break; + case 0x00E7: // LATIN SMALL LETTER C WITH CEDILLA + result += L'c'; + break; + case 0x00E8: // LATIN SMALL LETTER E WITH GRAVE + case 0x00E9: // LATIN SMALL LETTER E WITH ACUTE + case 0x00EA: // LATIN SMALL LETTER E WITH CIRCUMFLEX + case 0x00EB: // LATIN SMALL LETTER E WITH DIAERESIS + result += L'e'; + break; + case 0x00EC: // LATIN SMALL LETTER I WITH GRAVE + case 0x00ED: // LATIN SMALL LETTER I WITH ACUTE + case 0x00EE: // LATIN SMALL LETTER I WITH CIRCUMFLEX + case 0x00EF: // LATIN SMALL LETTER I WITH DIAERESIS + result += L'i'; + break; + case 0x00F1: // LATIN SMALL LETTER N WITH TILDE + result += L'n'; + break; + case 0x00F2: // LATIN SMALL LETTER O WITH GRAVE + case 0x00F3: // LATIN SMALL LETTER O WITH ACUTE + case 0x00F4: // LATIN SMALL LETTER O WITH CIRCUMFLEX + case 0x00F5: // LATIN SMALL LETTER O WITH TILDE + case 0x00F6: // LATIN SMALL LETTER O WITH DIAERESIS + result += L'o'; + break; + case 0x00F9: // LATIN SMALL LETTER U WITH GRAVE + case 0x00FA: // LATIN SMALL LETTER U WITH ACUTE + case 0x00FB: // LATIN SMALL LETTER U WITH CIRCUMFLEX + case 0x00FC: // LATIN SMALL LETTER U WITH DIAERESIS + result += L'u'; + break; + default: + result += wchar; + break; + } + } + break; + default: + result = wstr; + wstrToLower(result); + break; + } + + return result; +} void wstrToUpper(std::wstring& str) { |