diff options
Diffstat (limited to 'src/3rdparty/masm')
-rw-r--r-- | src/3rdparty/masm/stubs/wtf/unicode/Unicode.h | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/3rdparty/masm/stubs/wtf/unicode/Unicode.h b/src/3rdparty/masm/stubs/wtf/unicode/Unicode.h index 0f7f005c89..34e331f887 100644 --- a/src/3rdparty/masm/stubs/wtf/unicode/Unicode.h +++ b/src/3rdparty/masm/stubs/wtf/unicode/Unicode.h @@ -39,25 +39,28 @@ #ifndef UNICODE_H #define UNICODE_H -#include <QChar> +#include <QtCore/private/qunicodetables_p.h> +#include <QtCore/qchar.h> typedef unsigned char LChar; typedef unsigned short UChar; typedef int32_t UChar32; namespace Unicode { - inline UChar toLower(UChar ch) { - return QChar::toLower(ch); - } - - inline UChar toUpper(UChar ch) { - return QChar::toUpper(ch); - } + // u_tolower applies only Simple_Lowercase_Mapping. This is in contrast to QChar::toLower. inline UChar32 u_tolower(UChar32 ch) { - return QChar::toLower(ch); + if (ch > QChar::LastValidCodePoint) + return ch; + const auto fold = QUnicodeTables::properties(char32_t(ch))->cases[QUnicodeTables::LowerCase]; + return fold.special ? ch : (ch + fold.diff); } + + // u_toupper applies only Simple_Uppercase_Mapping. This is in contrast to QChar::toUpper. inline UChar32 u_toupper(UChar32 ch) { - return QChar::toUpper(ch); + if (ch > QChar::LastValidCodePoint) + return ch; + const auto fold = QUnicodeTables::properties(char32_t(ch))->cases[QUnicodeTables::UpperCase]; + return fold.special ? ch : (ch + fold.diff); } } |