Preserve the case of the exponent separator CLDR supplies
We have long (since 4.5.1) coerced it to lower-case, for no readily apparent, much less documented, reason. CLDR says most locales use an upper-case E for this - let's actually use what CLDR says we should use. The code that matches the exponent separator was doing so case-insensitively in any case; that needed adaptation now that the separator's case isn't pre-determined; and, in any case, should have been done using case-folding rather than upper-casing. In the process, removed some spurious checks for "'e' or 'E'" in the result, since the exponent separator is always represented by 'e' (and an 'e' might also be present for the separate reason of its use as a beyond-decimal digit representing fourteen). [ChangeLog][QtCore][QLocale] QLocale::exponential() now preserves the case of the CLDR source, where previously it was lower-cased. Change-Id: Ic9ac02136cff79cb9f136d72141b5dbf54d9e0a6 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
parent
ed080c64ae
commit
d5bb8d5150
@ -3885,7 +3885,7 @@ bool QLocaleData::numberToCLocale(QStringView s, QLocale::NumberOptions number_o
|
||||
if (decpt_idx != -1 || exponent_idx != -1)
|
||||
return false;
|
||||
decpt_idx = idx;
|
||||
} else if (out == 'e' || out == 'E') {
|
||||
} else if (out == 'e') {
|
||||
exponent_idx = idx;
|
||||
}
|
||||
|
||||
@ -3932,7 +3932,7 @@ bool QLocaleData::numberToCLocale(QStringView s, QLocale::NumberOptions number_o
|
||||
// don't add the group separator
|
||||
++idx;
|
||||
continue;
|
||||
} else if (out == '.' || out == 'e' || out == 'E') {
|
||||
} else if (out == '.' || idx == exponent_idx) {
|
||||
// check distance from the last separator
|
||||
// ### FIXME: Some locales allow other groupings!
|
||||
// See https://en.wikipedia.org/wiki/Thousands_separator
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -417,7 +417,7 @@ inline char QLocaleData::digitToCLocale(QChar in) const
|
||||
if (in == m_group)
|
||||
return ',';
|
||||
|
||||
if (in == m_exponential || in == QChar(QChar::toUpper(m_exponential)))
|
||||
if (in == m_exponential || in.toCaseFolded().unicode() == QChar::toCaseFolded(m_exponential))
|
||||
return 'e';
|
||||
|
||||
// In several languages group() is a non-breaking space (U+00A0) or its thin
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
@ -2449,8 +2449,8 @@ void tst_QTextStream::generateRealNumbersDataWrite()
|
||||
QTest::newRow("0") << 0.0 << QByteArray("0") << QByteArray("0");
|
||||
QTest::newRow("3.14") << 3.14 << QByteArray("3.14") << QByteArray("3.14");
|
||||
QTest::newRow("-3.14") << -3.14 << QByteArray("-3.14") << QByteArray("-3.14");
|
||||
QTest::newRow("1.2e+10") << 1.2e+10 << QByteArray("1.2e+10") << QByteArray("1.2e+10");
|
||||
QTest::newRow("-1.2e+10") << -1.2e+10 << QByteArray("-1.2e+10") << QByteArray("-1.2e+10");
|
||||
QTest::newRow("1.2e+10") << 1.2e+10 << QByteArray("1.2e+10") << QByteArray("1.2E+10");
|
||||
QTest::newRow("-1.2e+10") << -1.2e+10 << QByteArray("-1.2e+10") << QByteArray("-1.2E+10");
|
||||
QTest::newRow("12345") << 12345. << QByteArray("12345") << QByteArray("12,345");
|
||||
}
|
||||
|
||||
|
@ -1060,8 +1060,8 @@ void tst_QLocale::doubleToString_data()
|
||||
|
||||
QTest::newRow("de_DE 3,4 f 1") << QString("de_DE") << QString("3,4") << 3.4 << 'f' << 1;
|
||||
QTest::newRow("de_DE 3,4 f -") << QString("de_DE") << QString("3,4") << 3.4 << 'f' << shortest;
|
||||
QTest::newRow("de_DE 3,4 e 1") << QString("de_DE") << QString("3,4e+00") << 3.4 << 'e' << 1;
|
||||
QTest::newRow("de_DE 3,4 e -") << QString("de_DE") << QString("3,4e+00") << 3.4 << 'e' << shortest;
|
||||
QTest::newRow("de_DE 3,4 e 1") << QString("de_DE") << QString("3,4E+00") << 3.4 << 'e' << 1;
|
||||
QTest::newRow("de_DE 3,4 e -") << QString("de_DE") << QString("3,4E+00") << 3.4 << 'e' << shortest;
|
||||
QTest::newRow("de_DE 3,4 g 2") << QString("de_DE") << QString("3,4") << 3.4 << 'g' << 2;
|
||||
QTest::newRow("de_DE 3,4 g -") << QString("de_DE") << QString("3,4") << 3.4 << 'g' << shortest;
|
||||
|
||||
@ -1081,8 +1081,8 @@ void tst_QLocale::doubleToString_data()
|
||||
|
||||
QTest::newRow("de_DE 0,035003945 f 9") << QString("de_DE") << QString("0,035003945") << 0.035003945 << 'f' << 9;
|
||||
QTest::newRow("de_DE 0,035003945 f -") << QString("de_DE") << QString("0,035003945") << 0.035003945 << 'f' << shortest;
|
||||
QTest::newRow("de_DE 0,035003945 e 7") << QString("de_DE") << QString("3,5003945e-02") << 0.035003945 << 'e' << 7;
|
||||
QTest::newRow("de_DE 0,035003945 e -") << QString("de_DE") << QString("3,5003945e-02") << 0.035003945 << 'e' << shortest;
|
||||
QTest::newRow("de_DE 0,035003945 e 7") << QString("de_DE") << QString("3,5003945E-02") << 0.035003945 << 'e' << 7;
|
||||
QTest::newRow("de_DE 0,035003945 e -") << QString("de_DE") << QString("3,5003945E-02") << 0.035003945 << 'e' << shortest;
|
||||
QTest::newRow("de_DE 0,035003945 g 8") << QString("de_DE") << QString("0,035003945") << 0.035003945 << 'g' << 8;
|
||||
QTest::newRow("de_DE 0,035003945 g -") << QString("de_DE") << QString("0,035003945") << 0.035003945 << 'g' << shortest;
|
||||
|
||||
@ -1102,10 +1102,10 @@ void tst_QLocale::doubleToString_data()
|
||||
|
||||
QTest::newRow("de_DE 0,000003945 f 9") << QString("de_DE") << QString("0,000003945") << 0.000003945 << 'f' << 9;
|
||||
QTest::newRow("de_DE 0,000003945 f -") << QString("de_DE") << QString("0,000003945") << 0.000003945 << 'f' << shortest;
|
||||
QTest::newRow("de_DE 0,000003945 e 3") << QString("de_DE") << QString("3,945e-06") << 0.000003945 << 'e' << 3;
|
||||
QTest::newRow("de_DE 0,000003945 e -") << QString("de_DE") << QString("3,945e-06") << 0.000003945 << 'e' << shortest;
|
||||
QTest::newRow("de_DE 0,000003945 g 4") << QString("de_DE") << QString("3,945e-06") << 0.000003945 << 'g' << 4;
|
||||
QTest::newRow("de_DE 0,000003945 g -") << QString("de_DE") << QString("3,945e-06") << 0.000003945 << 'g' << shortest;
|
||||
QTest::newRow("de_DE 0,000003945 e 3") << QString("de_DE") << QString("3,945E-06") << 0.000003945 << 'e' << 3;
|
||||
QTest::newRow("de_DE 0,000003945 e -") << QString("de_DE") << QString("3,945E-06") << 0.000003945 << 'e' << shortest;
|
||||
QTest::newRow("de_DE 0,000003945 g 4") << QString("de_DE") << QString("3,945E-06") << 0.000003945 << 'g' << 4;
|
||||
QTest::newRow("de_DE 0,000003945 g -") << QString("de_DE") << QString("3,945E-06") << 0.000003945 << 'g' << shortest;
|
||||
|
||||
QTest::newRow("C 12456789012 f 3") << QString("C") << QString("12456789012.000") << 12456789012.0 << 'f' << 3;
|
||||
QTest::newRow("C 12456789012 e 13") << QString("C") << QString("1.2456789012000e+10") << 12456789012.0 << 'e' << 13;
|
||||
@ -1122,8 +1122,8 @@ void tst_QLocale::doubleToString_data()
|
||||
|
||||
QTest::newRow("de_DE 12456789012 f 0") << QString("de_DE") << QString("12.456.789.012") << 12456789012.0 << 'f' << 0;
|
||||
QTest::newRow("de_DE 12456789012 f -") << QString("de_DE") << QString("12.456.789.012") << 12456789012.0 << 'f' << shortest;
|
||||
QTest::newRow("de_DE 12456789012 e 10") << QString("de_DE") << QString("1,2456789012e+10") << 12456789012.0 << 'e' << 10;
|
||||
QTest::newRow("de_DE 12456789012 e -") << QString("de_DE") << QString("1,2456789012e+10") << 12456789012.0 << 'e' << shortest;
|
||||
QTest::newRow("de_DE 12456789012 e 10") << QString("de_DE") << QString("1,2456789012E+10") << 12456789012.0 << 'e' << 10;
|
||||
QTest::newRow("de_DE 12456789012 e -") << QString("de_DE") << QString("1,2456789012E+10") << 12456789012.0 << 'e' << shortest;
|
||||
QTest::newRow("de_DE 12456789012 g 11") << QString("de_DE") << QString("12.456.789.012") << 12456789012.0 << 'g' << 11;
|
||||
QTest::newRow("de_DE 12456789012 g -") << QString("de_DE") << QString("12.456.789.012") << 12456789012.0 << 'g' << shortest;
|
||||
}
|
||||
|
@ -314,7 +314,7 @@ def _generateLocaleInfo(path, language_code, script_code, country_code, variant_
|
||||
result['zero'] = get_number_in_system(path, "numbers/symbols/nativeZeroDigit", numbering_system)
|
||||
result['minus'] = get_number_in_system(path, "numbers/symbols/minusSign", numbering_system)
|
||||
result['plus'] = get_number_in_system(path, "numbers/symbols/plusSign", numbering_system)
|
||||
result['exp'] = get_number_in_system(path, "numbers/symbols/exponential", numbering_system).lower()
|
||||
result['exp'] = get_number_in_system(path, "numbers/symbols/exponential", numbering_system)
|
||||
result['quotationStart'] = findEntry(path, "delimiters/quotationStart")
|
||||
result['quotationEnd'] = findEntry(path, "delimiters/quotationEnd")
|
||||
result['alternateQuotationStart'] = findEntry(path, "delimiters/alternateQuotationStart")
|
||||
|
Loading…
x
Reference in New Issue
Block a user