From 19e7c0d2b5a807e194be1d65b16041f48136c9be Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 24 Apr 2020 12:54:20 +0200 Subject: QChar/QString: centralize case folding in qchar.cpp There are (at least) two implementations of the low-level case-folding algorithm, one of which (for QChar::toLower()) seems to be wrong (it doesn't deal with special cases which expand to more than one code point). The algoithm hidden in QString and entangled with the QString detaching code makes reusing the code much harder. At the same time, the dependency of the algorithm on the unicode tables makes exposing a non-allocating result type in the public API hard. std::u16string would be an alternative if we can assure that all implementations use SSO with at least four characters. So, for the time being, leave this as internal API for use in an upcoming QStringView::toLower() as well as case-insensitive hashing. Change-Id: Iabb2611846f6176776aa20e634f44d8464f3305c Reviewed-by: Thiago Macieira --- src/corelib/text/qunicodetables.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/corelib/text/qunicodetables.cpp') diff --git a/src/corelib/text/qunicodetables.cpp b/src/corelib/text/qunicodetables.cpp index e6f6487126..865f93ba52 100644 --- a/src/corelib/text/qunicodetables.cpp +++ b/src/corelib/text/qunicodetables.cpp @@ -9946,6 +9946,8 @@ static const unsigned short specialCaseMap[] = { 0x1, 0xa64b }; +const unsigned int MaxSpecialCaseLength = 3; + static const unsigned short uc_decomposition_trie[] = { // 0 - 0x3400 -- cgit v1.2.3