summaryrefslogtreecommitdiffstats
path: root/src/corelib/text/qlocale_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/text/qlocale_p.h')
-rw-r--r--src/corelib/text/qlocale_p.h20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/corelib/text/qlocale_p.h b/src/corelib/text/qlocale_p.h
index 818fdf27a1..d822f86b72 100644
--- a/src/corelib/text/qlocale_p.h
+++ b/src/corelib/text/qlocale_p.h
@@ -463,14 +463,22 @@ inline char QLocaleData::numericToCLocale(QStringView in) const
if ((group == u"\xa0" || group == u"\x202f") && in == u" ")
return ',';
- const uint zeroUcs4 = zeroUcs();
- const uint tenUcs4 = zeroUcs4 + 10;
const uint inUcs4 = in.size() == 2
? QChar::surrogateToUcs4(in.at(0), in.at(1)) : in.at(0).unicode();
-
- if (zeroUcs4 <= inUcs4 && inUcs4 < tenUcs4)
- return '0' + inUcs4 - zeroUcs4;
-
+ const uint zeroUcs4 = zeroUcs();
+ // Must match qlocale_tools.h's unicodeForDigit()
+ if (zeroUcs4 == 0x3007u) {
+ // QTBUG-85409: Suzhou's digits aren't contiguous !
+ if (inUcs4 == zeroUcs4)
+ return '0';
+ if (inUcs4 > 0x3020u && inUcs4 <= 0x3029u)
+ return inUcs4 - 0x3020u;
+ } else {
+ const uint tenUcs4 = zeroUcs4 + 10;
+
+ if (zeroUcs4 <= inUcs4 && inUcs4 < tenUcs4)
+ return '0' + inUcs4 - zeroUcs4;
+ }
if ('0' <= inUcs4 && inUcs4 <= '9')
return inUcs4;