Allow surrogate pairs for various "single character" locale data
Extract the character in its proper unicode form and encode it in a new single_character_data table of locale data. Record each entry as the range within that table that encodes it. Also added an assertion in the generator script to check that the digits CLDR gives us are a contiguous sequence in increasing order, as has been assumed by the C++ code for some time. Lots of number-formatting code now has to take account of how wide the digits are. This leaves nowhere for updateSystemPrivate() to record values read from sys_locale->query(), so we must always consult that function when accessing these members of the systemData() object. Various internal users of these single-character fields need the system-or-CLDR value rather than the raw CLDR value, so move QLocalePrivate's methods to supply them down to QLocaleData and ensure they check for system values, where appropriate first. This allows us to finally support the Chakma language and script, for whose number system UTF-16 needs surrogate pairs. Costs 10.8 kB in added data, much of it due to adding two new locales that need surrogates to represent digits. [ChangeLog][QtCore][QLocale] Various QLocale methods that returned single QChar values now return QString values to accommodate those locales which need a surrogate pair to represent the (single character) return value. Fixes: QTBUG-69324 Fixes: QTBUG-81053 Change-Id: I481722d6f5ee266164f09031679a851dfa6e7839 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
1b4dd753ed
commit
ed2b110b6a
@ -47,7 +47,7 @@ namespace QIPAddressUtils {
|
||||
|
||||
static QString number(quint8 val, int base = 10)
|
||||
{
|
||||
QChar zero(0x30);
|
||||
QString zero = QStringLiteral("0");
|
||||
return val ? qulltoa(val, base, zero) : zero;
|
||||
}
|
||||
|
||||
|
@ -661,9 +661,8 @@ static QLocalePrivate *c_private()
|
||||
}
|
||||
|
||||
static const QLocaleData *systemData();
|
||||
static QLocale::NumberOptions system_number_options = QLocale::DefaultNumberOptions;
|
||||
Q_GLOBAL_STATIC_WITH_ARGS(QExplicitlySharedDataPointer<QLocalePrivate>, systemLocalePrivate,
|
||||
(QLocalePrivate::create(systemData(), system_number_options)))
|
||||
(QLocalePrivate::create(systemData())))
|
||||
|
||||
#ifndef QT_NO_SYSTEMLOCALE
|
||||
/******************************************************************************
|
||||
@ -724,14 +723,11 @@ static void updateSystemPrivate()
|
||||
|
||||
// Populate global with fallback as basis:
|
||||
globalLocaleData = *sys_locale->fallbackUiLocaleData();
|
||||
system_number_options = QLocale::DefaultNumberOptions;
|
||||
|
||||
QVariant res = sys_locale->query(QSystemLocale::LanguageId, QVariant());
|
||||
if (!res.isNull()) {
|
||||
globalLocaleData.m_language_id = res.toInt();
|
||||
globalLocaleData.m_script_id = QLocale::AnyScript; // default for compatibility
|
||||
if (globalLocaleData.m_language_id == QLocale::C)
|
||||
system_number_options = QLocale::OmitGroupSeparator;
|
||||
}
|
||||
res = sys_locale->query(QSystemLocale::CountryId, QVariant());
|
||||
if (!res.isNull()) {
|
||||
@ -742,46 +738,7 @@ static void updateSystemPrivate()
|
||||
if (!res.isNull())
|
||||
globalLocaleData.m_script_id = res.toInt();
|
||||
|
||||
res = sys_locale->query(QSystemLocale::DecimalPoint, QVariant());
|
||||
if (!res.isNull() && !res.toString().isEmpty())
|
||||
globalLocaleData.m_decimal = res.toString().at(0).unicode();
|
||||
|
||||
// System may supply empty group separator to say we should omit grouping;
|
||||
// and it makes no sense to use the same separator for decimal and grouping
|
||||
// (which might happen by system supplying, as decimal, what CLDR has given
|
||||
// us for grouping; or the other way round). Assume, at least, that each of
|
||||
// system and CLDR has decimal != group, all the same.
|
||||
res = sys_locale->query(QSystemLocale::GroupSeparator, QVariant());
|
||||
if (res.isNull()) {
|
||||
// The case where system over-rides decimal but not group, and its
|
||||
// decimal clashes with CLDR's group.
|
||||
if (globalLocaleData.m_group == globalLocaleData.m_decimal)
|
||||
system_number_options |= QLocale::OmitGroupSeparator;
|
||||
} else if (res.toString().isEmpty()) {
|
||||
system_number_options |= QLocale::OmitGroupSeparator;
|
||||
} else {
|
||||
const ushort group = res.toString().at(0).unicode();
|
||||
if (group != globalLocaleData.m_decimal)
|
||||
globalLocaleData.m_group = group;
|
||||
else if (group == globalLocaleData.m_group)
|
||||
qWarning("System-supplied decimal and grouping character are both 0x%hx", group);
|
||||
}
|
||||
|
||||
res = sys_locale->query(QSystemLocale::ZeroDigit, QVariant());
|
||||
if (!res.isNull() && !res.toString().isEmpty())
|
||||
globalLocaleData.m_zero = res.toString().at(0).unicode();
|
||||
|
||||
res = sys_locale->query(QSystemLocale::NegativeSign, QVariant());
|
||||
if (!res.isNull() && !res.toString().isEmpty())
|
||||
globalLocaleData.m_minus = res.toString().at(0).unicode();
|
||||
|
||||
res = sys_locale->query(QSystemLocale::PositiveSign, QVariant());
|
||||
if (!res.isNull() && !res.toString().isEmpty())
|
||||
globalLocaleData.m_plus = res.toString().at(0).unicode();
|
||||
|
||||
if (systemLocalePrivate.exists())
|
||||
systemLocalePrivate->data()->m_numberOptions = system_number_options;
|
||||
// else: system_number_options will be passed to create() when constructing.
|
||||
// Should we replace Any values based on likely sub-tags ?
|
||||
}
|
||||
#endif // !QT_NO_SYSTEMLOCALE
|
||||
|
||||
@ -875,6 +832,97 @@ static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Sc
|
||||
return QLocalePrivate::create(data, offset, numberOptions);
|
||||
}
|
||||
|
||||
QString QLocaleData::decimalPoint() const
|
||||
{
|
||||
#ifndef QT_NO_SYSTEMLOCALE
|
||||
if (this == systemData()) {
|
||||
QVariant res = systemLocale()->query(QSystemLocale::DecimalPoint, QVariant());
|
||||
if (!res.isNull())
|
||||
return res.toString();
|
||||
}
|
||||
#endif
|
||||
return decimalSeparator().getData(single_character_data);
|
||||
}
|
||||
|
||||
QString QLocaleData::groupSeparator() const
|
||||
{
|
||||
#ifndef QT_NO_SYSTEMLOCALE
|
||||
if (this == systemData()) {
|
||||
QVariant res = systemLocale()->query(QSystemLocale::GroupSeparator, QVariant());
|
||||
if (!res.isNull())
|
||||
return res.toString();
|
||||
}
|
||||
#endif
|
||||
return groupDelim().getData(single_character_data);
|
||||
}
|
||||
|
||||
QString QLocaleData::percentSign() const
|
||||
{
|
||||
return percent().getData(single_character_data);
|
||||
}
|
||||
|
||||
QString QLocaleData::listSeparator() const
|
||||
{
|
||||
return listDelimit().getData(single_character_data);
|
||||
}
|
||||
|
||||
QString QLocaleData::zeroDigit() const
|
||||
{
|
||||
#ifndef QT_NO_SYSTEMLOCALE
|
||||
if (this == systemData()) {
|
||||
QVariant res = systemLocale()->query(QSystemLocale::ZeroDigit, QVariant());
|
||||
if (!res.isNull())
|
||||
return res.toString();
|
||||
}
|
||||
#endif
|
||||
return zero().getData(single_character_data);
|
||||
}
|
||||
|
||||
uint QLocaleData::zeroUcs() const
|
||||
{
|
||||
#ifndef QT_NO_SYSTEMLOCALE
|
||||
if (this == systemData()) {
|
||||
QVariant res = systemLocale()->query(QSystemLocale::ZeroDigit, QVariant());
|
||||
if (!res.isNull()) {
|
||||
const QString text = res.toString();
|
||||
if (text.size() == 1 && !text.at(0).isSurrogate())
|
||||
return text.at(0).unicode();
|
||||
if (text.size() == 2 && text.at(0).isHighSurrogate())
|
||||
return QChar::surrogateToUcs4(text.at(0), text.at(1));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return zero().ucsFirst(single_character_data);
|
||||
}
|
||||
|
||||
QString QLocaleData::negativeSign() const
|
||||
{
|
||||
#ifndef QT_NO_SYSTEMLOCALE
|
||||
if (this == systemData()) {
|
||||
QVariant res = systemLocale()->query(QSystemLocale::NegativeSign, QVariant());
|
||||
if (!res.isNull())
|
||||
return res.toString();
|
||||
}
|
||||
#endif
|
||||
return minus().getData(single_character_data);
|
||||
}
|
||||
|
||||
QString QLocaleData::positiveSign() const
|
||||
{
|
||||
#ifndef QT_NO_SYSTEMLOCALE
|
||||
if (this == systemData()) {
|
||||
QVariant res = systemLocale()->query(QSystemLocale::PositiveSign, QVariant());
|
||||
if (!res.isNull())
|
||||
return res.toString();
|
||||
}
|
||||
#endif
|
||||
return plus().getData(single_character_data);
|
||||
}
|
||||
|
||||
QString QLocaleData::exponentSeparator() const
|
||||
{
|
||||
return exponential().getData(single_character_data);
|
||||
}
|
||||
|
||||
/*!
|
||||
\internal
|
||||
@ -1110,11 +1158,16 @@ QString QLocale::quoteString(const QStringRef &str, QuotationStyle style) const
|
||||
}
|
||||
#endif
|
||||
|
||||
if (style == QLocale::StandardQuotation)
|
||||
return QChar(d->m_data->m_quotation_start) % str % QChar(d->m_data->m_quotation_end);
|
||||
QLocaleData::DataRange start, end;
|
||||
if (style == QLocale::StandardQuotation) {
|
||||
start = d->m_data->quoteStart();
|
||||
end = d->m_data->quoteEnd();
|
||||
} else {
|
||||
start = d->m_data->quoteStartAlternate();
|
||||
end = d->m_data->quoteEndAlternate();
|
||||
}
|
||||
|
||||
return QChar(d->m_data->m_alternate_quotation_start)
|
||||
% str % QChar(d->m_data->m_alternate_quotation_end);
|
||||
return start.viewData(single_character_data) % str % end.viewData(single_character_data);
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -2535,15 +2588,11 @@ QDateTime QLocale::toDateTime(const QString &string, const QString &format, QCal
|
||||
|
||||
Returns the decimal point character of this locale.
|
||||
|
||||
\note This function shall change to return a QString instead of QChar in
|
||||
Qt6. Callers are encouraged to exploit the QString(QChar) constructor to
|
||||
convert early in preparation for this.
|
||||
|
||||
\sa groupSeparator(), toString()
|
||||
*/
|
||||
QChar QLocale::decimalPoint() const
|
||||
QString QLocale::decimalPoint() const
|
||||
{
|
||||
return d->decimal();
|
||||
return d->m_data->decimalPoint();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -2551,15 +2600,11 @@ QChar QLocale::decimalPoint() const
|
||||
|
||||
Returns the group separator character of this locale.
|
||||
|
||||
\note This function shall change to return a QString instead of QChar in
|
||||
Qt6. Callers are encouraged to exploit the QString(QChar) constructor to
|
||||
convert early in preparation for this.
|
||||
|
||||
\sa decimalPoint(), toString()
|
||||
*/
|
||||
QChar QLocale::groupSeparator() const
|
||||
QString QLocale::groupSeparator() const
|
||||
{
|
||||
return d->group();
|
||||
return d->m_data->groupSeparator();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -2567,15 +2612,11 @@ QChar QLocale::groupSeparator() const
|
||||
|
||||
Returns the percent character of this locale.
|
||||
|
||||
\note This function shall change to return a QString instead of QChar in
|
||||
Qt6. Callers are encouraged to exploit the QString(QChar) constructor to
|
||||
convert early in preparation for this.
|
||||
|
||||
\sa toString()
|
||||
*/
|
||||
QChar QLocale::percent() const
|
||||
QString QLocale::percent() const
|
||||
{
|
||||
return d->percent();
|
||||
return d->m_data->percentSign();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -2583,15 +2624,11 @@ QChar QLocale::percent() const
|
||||
|
||||
Returns the zero digit character of this locale.
|
||||
|
||||
\note This function shall change to return a QString instead of QChar in
|
||||
Qt6. Callers are encouraged to exploit the QString(QChar) constructor to
|
||||
convert early in preparation for this.
|
||||
|
||||
\sa toString()
|
||||
*/
|
||||
QChar QLocale::zeroDigit() const
|
||||
QString QLocale::zeroDigit() const
|
||||
{
|
||||
return d->zero();
|
||||
return d->m_data->zeroDigit();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -2599,15 +2636,11 @@ QChar QLocale::zeroDigit() const
|
||||
|
||||
Returns the negative sign character of this locale.
|
||||
|
||||
\note This function shall change to return a QString instead of QChar in
|
||||
Qt6. Callers are encouraged to exploit the QString(QChar) constructor to
|
||||
convert early in preparation for this.
|
||||
|
||||
\sa positiveSign(), toString()
|
||||
*/
|
||||
QChar QLocale::negativeSign() const
|
||||
QString QLocale::negativeSign() const
|
||||
{
|
||||
return d->minus();
|
||||
return d->m_data->negativeSign();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -2615,15 +2648,11 @@ QChar QLocale::negativeSign() const
|
||||
|
||||
Returns the positive sign character of this locale.
|
||||
|
||||
\note This function shall change to return a QString instead of QChar in
|
||||
Qt6. Callers are encouraged to exploit the QString(QChar) constructor to
|
||||
convert early in preparation for this.
|
||||
|
||||
\sa negativeSign(), toString()
|
||||
*/
|
||||
QChar QLocale::positiveSign() const
|
||||
QString QLocale::positiveSign() const
|
||||
{
|
||||
return d->plus();
|
||||
return d->m_data->positiveSign();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -2632,15 +2661,11 @@ QChar QLocale::positiveSign() const
|
||||
Returns the exponential character of this locale, used to separate exponent
|
||||
from mantissa in some floating-point numeric representations.
|
||||
|
||||
\note This function shall change to return a QString instead of QChar in
|
||||
Qt6. Callers are encouraged to exploit the QString(QChar) constructor to
|
||||
convert early in preparation for this.
|
||||
|
||||
\sa toString(double, char, int)
|
||||
*/
|
||||
QChar QLocale::exponential() const
|
||||
QString QLocale::exponential() const
|
||||
{
|
||||
return d->exponential();
|
||||
return d->m_data->exponentSeparator();
|
||||
}
|
||||
|
||||
static bool qIsUpper(char c)
|
||||
@ -3479,9 +3504,9 @@ QString QCalendarBackend::dateTimeToString(QStringView format, const QDateTime &
|
||||
result.append(locale.d->m_data->longLongToString(time.msec(), -1, 10, 3,
|
||||
QLocaleData::ZeroPadded));
|
||||
if (repeat == 1) {
|
||||
if (result.endsWith(locale.d->zero()))
|
||||
if (result.endsWith(locale.zeroDigit()))
|
||||
result.chop(1);
|
||||
if (result.endsWith(locale.d->zero()))
|
||||
if (result.endsWith(locale.zeroDigit()))
|
||||
result.chop(1);
|
||||
}
|
||||
break;
|
||||
@ -3511,12 +3536,14 @@ QString QCalendarBackend::dateTimeToString(QStringView format, const QDateTime &
|
||||
QString QLocaleData::doubleToString(double d, int precision, DoubleForm form,
|
||||
int width, unsigned flags) const
|
||||
{
|
||||
return doubleToString(m_zero, m_plus, m_minus, m_exponential, m_group, m_decimal,
|
||||
return doubleToString(zeroDigit(), positiveSign(), negativeSign(),
|
||||
exponentSeparator(), groupSeparator(), decimalPoint(),
|
||||
d, precision, form, width, flags);
|
||||
}
|
||||
|
||||
QString QLocaleData::doubleToString(const QChar _zero, const QChar plus, const QChar minus,
|
||||
const QChar exponential, const QChar group, const QChar decimal,
|
||||
QString QLocaleData::doubleToString(const QString &zero, const QString &plus, const QString &minus,
|
||||
const QString &exponential,
|
||||
const QString &group, const QString &decimal,
|
||||
double d, int precision, DoubleForm form, int width,
|
||||
unsigned flags)
|
||||
{
|
||||
@ -3548,8 +3575,23 @@ QString QLocaleData::doubleToString(const QChar _zero, const QChar plus, const Q
|
||||
} else { // Handle normal numbers
|
||||
QString digits = QString::fromLatin1(buf.data(), length);
|
||||
|
||||
if (_zero.unicode() != '0') {
|
||||
ushort z = _zero.unicode() - '0';
|
||||
if (zero == u"0") {
|
||||
// No need to convert digits.
|
||||
} else if (zero.size() == 2 && zero.at(0).isHighSurrogate()) {
|
||||
const uint zeroUcs4 = QChar::surrogateToUcs4(zero.at(0), zero.at(1));
|
||||
QString converted;
|
||||
converted.reserve(2 * digits.size());
|
||||
for (int i = 0; i < digits.length(); ++i) {
|
||||
const uint digit = zeroUcs4 - '0' + digits.at(i).unicode();
|
||||
Q_ASSERT(QChar::requiresSurrogates(digit));
|
||||
converted.append(QChar::highSurrogate(digit));
|
||||
converted.append(QChar::lowSurrogate(digit));
|
||||
}
|
||||
digits = converted;
|
||||
} else {
|
||||
Q_ASSERT(zero.size() == 1);
|
||||
Q_ASSERT(!zero.at(0).isSurrogate());
|
||||
ushort z = zero.at(0).unicode() - '0';
|
||||
for (int i = 0; i < digits.length(); ++i)
|
||||
reinterpret_cast<ushort *>(digits.data())[i] += z;
|
||||
}
|
||||
@ -3557,13 +3599,13 @@ QString QLocaleData::doubleToString(const QChar _zero, const QChar plus, const Q
|
||||
bool always_show_decpt = (flags & ForcePoint);
|
||||
switch (form) {
|
||||
case DFExponent: {
|
||||
num_str = exponentForm(_zero, decimal, exponential, group, plus, minus,
|
||||
num_str = exponentForm(zero, decimal, exponential, group, plus, minus,
|
||||
digits, decpt, precision, PMDecimalDigits,
|
||||
always_show_decpt, flags & ZeroPadExponent);
|
||||
break;
|
||||
}
|
||||
case DFDecimal: {
|
||||
num_str = decimalForm(_zero, decimal, group,
|
||||
num_str = decimalForm(zero, decimal, group,
|
||||
digits, decpt, precision, PMDecimalDigits,
|
||||
always_show_decpt, flags & ThousandsGroup);
|
||||
break;
|
||||
@ -3572,25 +3614,25 @@ QString QLocaleData::doubleToString(const QChar _zero, const QChar plus, const Q
|
||||
PrecisionMode mode = (flags & AddTrailingZeroes) ?
|
||||
PMSignificantDigits : PMChopTrailingZeros;
|
||||
|
||||
const auto digitWidth = zero.size();
|
||||
int cutoff = precision < 0 ? 6 : precision;
|
||||
// Find out which representation is shorter
|
||||
if (precision == QLocale::FloatingPointShortest && decpt > 0) {
|
||||
cutoff = digits.length() + 4; // 'e', '+'/'-', one digit exponent
|
||||
if (decpt <= 10) {
|
||||
cutoff = digits.length() / digitWidth + 4; // 'e', '+'/'-', one digit exponent
|
||||
if (decpt <= 10)
|
||||
++cutoff;
|
||||
} else {
|
||||
else
|
||||
cutoff += decpt > 100 ? 2 : 1;
|
||||
}
|
||||
if (!always_show_decpt && digits.length() > decpt)
|
||||
if (!always_show_decpt && digits.length() / digitWidth > decpt)
|
||||
++cutoff; // decpt shown in exponent form, but not in decimal form
|
||||
}
|
||||
|
||||
if (decpt != digits.length() && (decpt <= -4 || decpt > cutoff))
|
||||
num_str = exponentForm(_zero, decimal, exponential, group, plus, minus,
|
||||
if (decpt != digits.length() / digitWidth && (decpt <= -4 || decpt > cutoff))
|
||||
num_str = exponentForm(zero, decimal, exponential, group, plus, minus,
|
||||
digits, decpt, precision, mode,
|
||||
always_show_decpt, flags & ZeroPadExponent);
|
||||
else
|
||||
num_str = decimalForm(_zero, decimal, group,
|
||||
num_str = decimalForm(zero, decimal, group,
|
||||
digits, decpt, precision, mode,
|
||||
always_show_decpt, flags & ThousandsGroup);
|
||||
break;
|
||||
@ -3600,10 +3642,10 @@ QString QLocaleData::doubleToString(const QChar _zero, const QChar plus, const Q
|
||||
if (isZero(d))
|
||||
negative = false;
|
||||
|
||||
// pad with zeros. LeftAdjusted overrides this flag). Also, we don't
|
||||
// pad with zeros. LeftAdjusted overrides this flag. Also, we don't
|
||||
// pad special numbers
|
||||
if (flags & QLocaleData::ZeroPadded && !(flags & QLocaleData::LeftAdjusted)) {
|
||||
int num_pad_chars = width - num_str.length();
|
||||
int num_pad_chars = width - num_str.length() / zero.length();
|
||||
// leave space for the sign
|
||||
if (negative
|
||||
|| flags & QLocaleData::AlwaysShowSign
|
||||
@ -3611,7 +3653,7 @@ QString QLocaleData::doubleToString(const QChar _zero, const QChar plus, const Q
|
||||
--num_pad_chars;
|
||||
|
||||
for (int i = 0; i < num_pad_chars; ++i)
|
||||
num_str.prepend(_zero);
|
||||
num_str.prepend(zero);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3630,18 +3672,16 @@ QString QLocaleData::doubleToString(const QChar _zero, const QChar plus, const Q
|
||||
}
|
||||
|
||||
QString QLocaleData::longLongToString(qlonglong l, int precision,
|
||||
int base, int width,
|
||||
unsigned flags) const
|
||||
int base, int width, unsigned flags) const
|
||||
{
|
||||
return longLongToString(m_zero, m_group, m_plus, m_minus,
|
||||
l, precision, base, width, flags);
|
||||
return longLongToString(zeroDigit(), groupSeparator(), positiveSign(), negativeSign(),
|
||||
l, precision, base, width, flags);
|
||||
}
|
||||
|
||||
QString QLocaleData::longLongToString(const QChar zero, const QChar group,
|
||||
const QChar plus, const QChar minus,
|
||||
qlonglong l, int precision,
|
||||
int base, int width,
|
||||
unsigned flags)
|
||||
QString QLocaleData::longLongToString(const QString &zero, const QString &group,
|
||||
const QString &plus, const QString &minus,
|
||||
qlonglong l, int precision,
|
||||
int base, int width, unsigned flags)
|
||||
{
|
||||
bool precision_not_specified = false;
|
||||
if (precision == -1) {
|
||||
@ -3667,17 +3707,19 @@ QT_WARNING_DISABLE_MSVC(4146)
|
||||
QString num_str = qulltoa(negative ? -qulonglong(l) : qulonglong(l), base, zero);
|
||||
QT_WARNING_POP
|
||||
|
||||
const QString resultZero = base == 10 ? zero : QStringLiteral("0");
|
||||
const auto digitWidth = resultZero.size();
|
||||
uint cnt_thousand_sep = 0;
|
||||
if (base == 10){
|
||||
if (base == 10) {
|
||||
if (flags & ThousandsGroup) {
|
||||
for (int i = num_str.length() - 3; i > 0; i -= 3) {
|
||||
for (int i = num_str.length() / digitWidth - 3; i > 0; i -= 3 * digitWidth) {
|
||||
num_str.insert(i, group);
|
||||
++cnt_thousand_sep;
|
||||
}
|
||||
} else if (flags & IndianNumberGrouping) {
|
||||
if (num_str.length() > 3)
|
||||
num_str.insert(num_str.length() - 3 , group);
|
||||
for (int i = num_str.length() - 6; i > 0; i -= 2) {
|
||||
if (num_str.length() > 3 * digitWidth)
|
||||
num_str.insert(num_str.length() - 3 * digitWidth , group);
|
||||
for (int i = num_str.length() - 6 * digitWidth; i > 0; i -= 2 * digitWidth) {
|
||||
num_str.insert(i, group);
|
||||
++cnt_thousand_sep;
|
||||
}
|
||||
@ -3685,7 +3727,7 @@ QT_WARNING_POP
|
||||
}
|
||||
|
||||
for (int i = num_str.length()/* - cnt_thousand_sep*/; i < precision; ++i)
|
||||
num_str.prepend(base == 10 ? zero : QChar::fromLatin1('0'));
|
||||
num_str.prepend(resultZero);
|
||||
|
||||
if ((flags & ShowBase)
|
||||
&& base == 8
|
||||
@ -3699,7 +3741,7 @@ QT_WARNING_POP
|
||||
&& precision_not_specified;
|
||||
|
||||
if (zero_padded) {
|
||||
int num_pad_chars = width - num_str.length();
|
||||
int num_pad_chars = width - num_str.length() / digitWidth;
|
||||
|
||||
// leave space for the sign
|
||||
if (negative
|
||||
@ -3714,8 +3756,8 @@ QT_WARNING_POP
|
||||
else if (base == 2 && (flags & ShowBase))
|
||||
num_pad_chars -= 2;
|
||||
|
||||
for (int i = 0; i < num_pad_chars; ++i)
|
||||
num_str.prepend(base == 10 ? zero : QChar::fromLatin1('0'));
|
||||
while (num_pad_chars-- > 0)
|
||||
num_str.prepend(resultZero);
|
||||
}
|
||||
|
||||
if (flags & CapitalEorX)
|
||||
@ -3738,21 +3780,19 @@ QT_WARNING_POP
|
||||
}
|
||||
|
||||
QString QLocaleData::unsLongLongToString(qulonglong l, int precision,
|
||||
int base, int width,
|
||||
unsigned flags) const
|
||||
int base, int width, unsigned flags) const
|
||||
{
|
||||
return unsLongLongToString(m_zero, m_group, m_plus,
|
||||
l, precision, base, width, flags);
|
||||
return unsLongLongToString(zeroDigit(), groupSeparator(), positiveSign(),
|
||||
l, precision, base, width, flags);
|
||||
}
|
||||
|
||||
QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group,
|
||||
const QChar plus,
|
||||
qulonglong l, int precision,
|
||||
int base, int width,
|
||||
unsigned flags)
|
||||
QString QLocaleData::unsLongLongToString(const QString &zero, const QString &group,
|
||||
const QString &plus,
|
||||
qulonglong l, int precision,
|
||||
int base, int width, unsigned flags)
|
||||
{
|
||||
const QChar resultZero = base == 10 ? zero : QChar(QLatin1Char('0'));
|
||||
QString num_str = l ? qulltoa(l, base, zero) : QString(resultZero);
|
||||
const QString resultZero = base == 10 ? zero : QStringLiteral("0");
|
||||
QString num_str = l ? qulltoa(l, base, zero) : resultZero;
|
||||
|
||||
bool precision_not_specified = false;
|
||||
if (precision == -1) {
|
||||
@ -3763,26 +3803,27 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group,
|
||||
precision = 1;
|
||||
}
|
||||
|
||||
const auto digitWidth = resultZero.size();
|
||||
uint cnt_thousand_sep = 0;
|
||||
if (base == 10) {
|
||||
if (flags & ThousandsGroup) {
|
||||
for (int i = num_str.length() - 3; i > 0; i -=3) {
|
||||
for (int i = num_str.length() - 3 * digitWidth; i > 0; i -= 3 * digitWidth) {
|
||||
num_str.insert(i, group);
|
||||
++cnt_thousand_sep;
|
||||
}
|
||||
} else if (flags & IndianNumberGrouping) {
|
||||
if (num_str.length() > 3)
|
||||
num_str.insert(num_str.length() - 3 , group);
|
||||
for (int i = num_str.length() - 6; i > 0; i -= 2) {
|
||||
if (num_str.length() > 3 * digitWidth)
|
||||
num_str.insert(num_str.length() - 3 * digitWidth , group);
|
||||
for (int i = num_str.length() - 6 * digitWidth; i > 0; i -= 2 * digitWidth) {
|
||||
num_str.insert(i, group);
|
||||
++cnt_thousand_sep;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const int zeroPadding = precision - num_str.length()/* + cnt_thousand_sep*/;
|
||||
if (zeroPadding > 0)
|
||||
num_str.prepend(QString(zeroPadding, resultZero));
|
||||
int zeroPadding = precision - num_str.length() / digitWidth /* + cnt_thousand_sep*/;
|
||||
while (zeroPadding-- > 0)
|
||||
num_str.prepend(resultZero);
|
||||
|
||||
if ((flags & ShowBase)
|
||||
&& base == 8
|
||||
@ -3796,7 +3837,7 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group,
|
||||
&& precision_not_specified;
|
||||
|
||||
if (zero_padded) {
|
||||
int num_pad_chars = width - num_str.length();
|
||||
int num_pad_chars = width - num_str.length() / digitWidth;
|
||||
|
||||
// leave space for optional '0x' in hex form
|
||||
if (base == 16 && flags & ShowBase)
|
||||
@ -3805,8 +3846,8 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group,
|
||||
else if (base == 2 && flags & ShowBase)
|
||||
num_pad_chars -= 2;
|
||||
|
||||
if (num_pad_chars > 0)
|
||||
num_str.prepend(QString(num_pad_chars, resultZero));
|
||||
while (num_pad_chars-- > 0)
|
||||
num_str.prepend(resultZero);
|
||||
}
|
||||
|
||||
if (flags & CapitalEorX)
|
||||
@ -3837,21 +3878,13 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group,
|
||||
bool QLocaleData::numberToCLocale(QStringView s, QLocale::NumberOptions number_options,
|
||||
CharBuff *result) const
|
||||
{
|
||||
const QChar *uc = s.data();
|
||||
auto l = s.size();
|
||||
decltype(l) idx = 0;
|
||||
|
||||
// Skip whitespace
|
||||
while (idx < l && uc[idx].isSpace())
|
||||
++idx;
|
||||
if (idx == l)
|
||||
s = s.trimmed();
|
||||
if (s.size() < 1)
|
||||
return false;
|
||||
|
||||
// Check trailing whitespace
|
||||
for (; idx < l; --l) {
|
||||
if (!uc[l - 1].isSpace())
|
||||
break;
|
||||
}
|
||||
const QChar *uc = s.data();
|
||||
auto length = s.size();
|
||||
decltype(length) idx = 0;
|
||||
|
||||
int group_cnt = 0; // counts number of group chars
|
||||
int decpt_idx = -1;
|
||||
@ -3859,20 +3892,21 @@ bool QLocaleData::numberToCLocale(QStringView s, QLocale::NumberOptions number_o
|
||||
int start_of_digits_idx = -1;
|
||||
int exponent_idx = -1;
|
||||
|
||||
while (idx < l) {
|
||||
const QChar in = uc[idx];
|
||||
while (idx < length) {
|
||||
const QStringView in = QStringView(uc + idx, uc[idx].isHighSurrogate() ? 2 : 1);
|
||||
|
||||
char out = digitToCLocale(in);
|
||||
char out = numericToCLocale(in);
|
||||
if (out == 0) {
|
||||
if (in == m_list)
|
||||
const QChar simple(in.size() == 1 ? in.front() : QChar(0));
|
||||
if (in == listSeparator())
|
||||
out = ';';
|
||||
else if (in == m_percent)
|
||||
else if (in == percentSign())
|
||||
out = '%';
|
||||
// for handling base-x numbers
|
||||
else if (in.unicode() >= 'A' && in.unicode() <= 'Z')
|
||||
out = in.toLower().toLatin1();
|
||||
else if (in.unicode() >= 'a' && in.unicode() <= 'z')
|
||||
out = in.toLatin1();
|
||||
else if (simple.toLatin1() >= 'A' && simple.toLatin1() <= 'Z')
|
||||
out = simple.toLower().toLatin1();
|
||||
else if (simple.toLatin1() >= 'a' && simple.toLatin1() <= 'z')
|
||||
out = simple.toLatin1();
|
||||
else
|
||||
break;
|
||||
} else if (out == '.') {
|
||||
@ -3885,7 +3919,7 @@ bool QLocaleData::numberToCLocale(QStringView s, QLocale::NumberOptions number_o
|
||||
}
|
||||
|
||||
if (number_options & QLocale::RejectLeadingZeroInExponent) {
|
||||
if (exponent_idx != -1 && out == '0' && idx < l - 1) {
|
||||
if (exponent_idx != -1 && out == '0' && idx < length - 1) {
|
||||
// After the exponent there can only be '+', '-' or digits.
|
||||
// If we find a '0' directly after some non-digit, then that is a leading zero.
|
||||
if (result->last() < '0' || result->last() > '9')
|
||||
@ -3925,7 +3959,7 @@ bool QLocaleData::numberToCLocale(QStringView s, QLocale::NumberOptions number_o
|
||||
++group_cnt;
|
||||
|
||||
// don't add the group separator
|
||||
++idx;
|
||||
idx += in.size();
|
||||
continue;
|
||||
} else if (out == '.' || idx == exponent_idx) {
|
||||
// check distance from the last separator
|
||||
@ -3940,8 +3974,7 @@ bool QLocaleData::numberToCLocale(QStringView s, QLocale::NumberOptions number_o
|
||||
}
|
||||
|
||||
result->append(out);
|
||||
|
||||
++idx;
|
||||
idx += in.size();
|
||||
}
|
||||
|
||||
if (!(number_options & QLocale::RejectGroupSeparator)) {
|
||||
@ -3961,7 +3994,7 @@ bool QLocaleData::numberToCLocale(QStringView s, QLocale::NumberOptions number_o
|
||||
}
|
||||
|
||||
result->append('\0');
|
||||
return idx == l;
|
||||
return idx == length;
|
||||
}
|
||||
|
||||
bool QLocaleData::validateChars(QStringView str, NumberMode numMode, QByteArray *buff,
|
||||
@ -3978,8 +4011,9 @@ bool QLocaleData::validateChars(QStringView str, NumberMode numMode, QByteArray
|
||||
bool dec = false;
|
||||
int decDigitCnt = 0;
|
||||
|
||||
for (qsizetype i = 0; i < str.size(); ++i) {
|
||||
char c = digitToCLocale(str.at(i));
|
||||
for (qsizetype i = 0; i < str.size();) {
|
||||
const QStringView in = str.mid(i, str.at(i).isHighSurrogate() ? 2 : 1);
|
||||
char c = numericToCLocale(in);
|
||||
|
||||
if (c >= '0' && c <= '9') {
|
||||
if (numMode != IntegerMode) {
|
||||
@ -4061,6 +4095,8 @@ bool QLocaleData::validateChars(QStringView str, NumberMode numMode, QByteArray
|
||||
lastWasE = c == 'e';
|
||||
if (c != ',')
|
||||
buff->append(c);
|
||||
|
||||
i += in.size();
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -4244,7 +4280,6 @@ QString QLocale::toCurrencyString(qlonglong value, const QString &symbol) const
|
||||
return res.toString();
|
||||
}
|
||||
#endif
|
||||
const QLocalePrivate *d = this->d;
|
||||
QLocaleData::DataRange range = d->m_data->currencyFormatNegative();
|
||||
if (!range.size || value >= 0)
|
||||
range = d->m_data->currencyFormat();
|
||||
|
@ -1049,15 +1049,13 @@ public:
|
||||
# endif // 5.15
|
||||
#endif
|
||||
|
||||
// ### Qt 6: We need to return QString from these function since
|
||||
// UTF-16 may need surrogate pairs to represent these fields.
|
||||
QChar decimalPoint() const;
|
||||
QChar groupSeparator() const;
|
||||
QChar percent() const;
|
||||
QChar zeroDigit() const;
|
||||
QChar negativeSign() const;
|
||||
QChar positiveSign() const;
|
||||
QChar exponential() const;
|
||||
QString decimalPoint() const;
|
||||
QString groupSeparator() const;
|
||||
QString percent() const;
|
||||
QString zeroDigit() const;
|
||||
QString negativeSign() const;
|
||||
QString positiveSign() const;
|
||||
QString exponential() const;
|
||||
|
||||
QString monthName(int, FormatType format = LongFormat) const;
|
||||
QString standaloneMonthName(int, FormatType format = LongFormat) const;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -221,21 +221,19 @@ public:
|
||||
|
||||
typedef QVarLengthArray<char, 256> CharBuff;
|
||||
|
||||
static QString doubleToString(const QChar zero, const QChar plus,
|
||||
const QChar minus, const QChar exponent,
|
||||
const QChar group, const QChar decimal,
|
||||
double d, int precision,
|
||||
DoubleForm form,
|
||||
static QString doubleToString(const QString &zero, const QString &plus,
|
||||
const QString &minus, const QString &exponent,
|
||||
const QString &group, const QString &decimal,
|
||||
double d, int precision, DoubleForm form,
|
||||
int width, unsigned flags);
|
||||
static QString longLongToString(const QChar zero, const QChar group,
|
||||
const QChar plus, const QChar minus,
|
||||
static QString longLongToString(const QString &zero, const QString &group,
|
||||
const QString &plus, const QString &minus,
|
||||
qint64 l, int precision, int base,
|
||||
int width, unsigned flags);
|
||||
static QString unsLongLongToString(const QChar zero, const QChar group,
|
||||
const QChar plus,
|
||||
static QString unsLongLongToString(const QString &zero, const QString &group,
|
||||
const QString &plus,
|
||||
quint64 l, int precision,
|
||||
int base, int width,
|
||||
unsigned flags);
|
||||
int base, int width, unsigned flags);
|
||||
|
||||
QString doubleToString(double d,
|
||||
int precision = -1,
|
||||
@ -282,12 +280,22 @@ public:
|
||||
|
||||
bool numberToCLocale(QStringView s, QLocale::NumberOptions number_options,
|
||||
CharBuff *result) const;
|
||||
inline char digitToCLocale(QChar c) const;
|
||||
inline char numericToCLocale(QStringView in) const;
|
||||
|
||||
// this function is used in QIntValidator (QtGui)
|
||||
Q_CORE_EXPORT bool validateChars(QStringView str, NumberMode numMode, QByteArray *buff, int decDigits = -1,
|
||||
QLocale::NumberOptions number_options = QLocale::DefaultNumberOptions) const;
|
||||
|
||||
QString decimalPoint() const;
|
||||
QString groupSeparator() const;
|
||||
QString listSeparator() const;
|
||||
QString percentSign() const;
|
||||
QString zeroDigit() const;
|
||||
uint zeroUcs() const;
|
||||
QString positiveSign() const;
|
||||
QString negativeSign() const;
|
||||
QString exponentSeparator() const;
|
||||
|
||||
struct DataRange
|
||||
{
|
||||
quint16 offset;
|
||||
@ -310,6 +318,14 @@ public:
|
||||
{
|
||||
return listEntry(table, index).viewData(table);
|
||||
}
|
||||
uint ucsFirst(const ushort *table) const
|
||||
{
|
||||
if (size && !QChar::isSurrogate(table[offset]))
|
||||
return table[offset];
|
||||
if (size > 1 && QChar::isHighSurrogate(table[offset]))
|
||||
return QChar::surrogateToUcs4(table[offset], table[offset + 1]);
|
||||
return 0;
|
||||
}
|
||||
private:
|
||||
DataRange listEntry(const ushort *table, int index) const
|
||||
{
|
||||
@ -328,7 +344,9 @@ public:
|
||||
};
|
||||
|
||||
#define ForEachQLocaleRange(X) \
|
||||
X(startListPattern) X(midListPattern) X(endListPattern) X(pairListPattern) \
|
||||
X(startListPattern) X(midListPattern) X(endListPattern) X(pairListPattern) X(listDelimit) \
|
||||
X(decimalSeparator) X(groupDelim) X(percent) X(zero) X(minus) X(plus) X(exponential) \
|
||||
X(quoteStart) X(quoteEnd) X(quoteStartAlternate) X(quoteEndAlternate) \
|
||||
X(longDateFormat) X(shortDateFormat) X(longTimeFormat) X(shortTimeFormat) \
|
||||
X(longDayNamesStandalone) X(longDayNames) \
|
||||
X(shortDayNamesStandalone) X(shortDayNames) \
|
||||
@ -347,11 +365,6 @@ public:
|
||||
public:
|
||||
quint16 m_language_id, m_script_id, m_country_id;
|
||||
|
||||
// FIXME QTBUG-69324: not all unicode code-points map to single-token UTF-16 :-(
|
||||
char16_t m_decimal, m_group, m_list, m_percent, m_zero, m_minus, m_plus, m_exponential;
|
||||
char16_t m_quotation_start, m_quotation_end;
|
||||
char16_t m_alternate_quotation_start, m_alternate_quotation_end;
|
||||
|
||||
// Offsets, then sizes, for each range:
|
||||
#define rangeIndex(name) quint16 m_ ## name ## _idx;
|
||||
ForEachQLocaleRange(rangeIndex)
|
||||
@ -389,15 +402,6 @@ public:
|
||||
static QLocalePrivate *get(QLocale &l) { return l.d; }
|
||||
static const QLocalePrivate *get(const QLocale &l) { return l.d; }
|
||||
|
||||
QChar decimal() const { return QChar(m_data->m_decimal); }
|
||||
QChar group() const { return QChar(m_data->m_group); }
|
||||
QChar list() const { return QChar(m_data->m_list); }
|
||||
QChar percent() const { return QChar(m_data->m_percent); }
|
||||
QChar zero() const { return QChar(m_data->m_zero); }
|
||||
QChar plus() const { return QChar(m_data->m_plus); }
|
||||
QChar minus() const { return QChar(m_data->m_minus); }
|
||||
QChar exponential() const { return QChar(m_data->m_exponential); }
|
||||
|
||||
quint16 languageId() const { return m_data->m_language_id; }
|
||||
quint16 countryId() const { return m_data->m_country_id; }
|
||||
|
||||
@ -437,37 +441,44 @@ inline QLocalePrivate *QSharedDataPointer<QLocalePrivate>::clone()
|
||||
return QLocalePrivate::create(d->m_data, d->m_data_offset, d->m_numberOptions);
|
||||
}
|
||||
|
||||
inline char QLocaleData::digitToCLocale(QChar in) const
|
||||
inline char QLocaleData::numericToCLocale(QStringView in) const
|
||||
{
|
||||
const ushort tenUnicode = m_zero + 10;
|
||||
Q_ASSERT(in.size() == 1 || (in.size() == 2 && in.at(0).isHighSurrogate()));
|
||||
|
||||
if (in.unicode() >= m_zero && in.unicode() < tenUnicode)
|
||||
return '0' + in.unicode() - m_zero;
|
||||
|
||||
if (in.unicode() >= '0' && in.unicode() <= '9')
|
||||
return in.toLatin1();
|
||||
|
||||
if (in == m_plus || in == QLatin1Char('+'))
|
||||
if (in == positiveSign() || in == u"+")
|
||||
return '+';
|
||||
|
||||
if (in == m_minus || in == QLatin1Char('-') || in == QChar(0x2212))
|
||||
if (in == negativeSign() || in == u"-" || in == u"\x2212")
|
||||
return '-';
|
||||
|
||||
if (in == m_decimal)
|
||||
if (in == decimalPoint())
|
||||
return '.';
|
||||
|
||||
if (in == m_group)
|
||||
return ',';
|
||||
|
||||
if (in == m_exponential || in.toCaseFolded().unicode() == QChar::toCaseFolded(m_exponential))
|
||||
if (in.compare(exponentSeparator(), Qt::CaseInsensitive) == 0)
|
||||
return 'e';
|
||||
|
||||
const QString group = groupSeparator();
|
||||
if (in == group)
|
||||
return ',';
|
||||
|
||||
// In several languages group() is a non-breaking space (U+00A0) or its thin
|
||||
// version (U+202f), which look like spaces. People (and thus some of our
|
||||
// tests) use a regular space instead and complain if it doesn't work.
|
||||
if ((m_group == 0xA0 || m_group == 0x202f) && in.unicode() == ' ')
|
||||
// Should this be extended generally to any case where group is a space ?
|
||||
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;
|
||||
|
||||
if ('0' <= inUcs4 && inUcs4 <= '9')
|
||||
return inUcs4;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -428,72 +428,85 @@ qstrtoll(const char * nptr, const char **endptr, int base, bool *ok)
|
||||
return result;
|
||||
}
|
||||
|
||||
QString qulltoa(qulonglong l, int base, const QChar _zero)
|
||||
QString qulltoa(qulonglong number, int base, const QStringView zero)
|
||||
{
|
||||
ushort buff[65]; // length of MAX_ULLONG in base 2
|
||||
ushort *p = buff + 65;
|
||||
// Length of MAX_ULLONG in base 2 is 64; and we may need a surrogate pair
|
||||
// per digit. We do not need a terminator.
|
||||
const unsigned maxlen = 128;
|
||||
Q_STATIC_ASSERT(CHAR_BIT * sizeof(number) <= maxlen);
|
||||
ushort buff[maxlen];
|
||||
ushort *const end = buff + maxlen, *p = end;
|
||||
|
||||
if (base != 10 || _zero.unicode() == '0') {
|
||||
while (l != 0) {
|
||||
int c = l % base;
|
||||
|
||||
--p;
|
||||
|
||||
if (c < 10)
|
||||
*p = '0' + c;
|
||||
else
|
||||
*p = c - 10 + 'a';
|
||||
|
||||
l /= base;
|
||||
if (base != 10 || zero == u"0") {
|
||||
while (number != 0) {
|
||||
int c = number % base;
|
||||
*--p = c < 10 ? '0' + c : c - 10 + 'a';
|
||||
number /= base;
|
||||
}
|
||||
}
|
||||
else {
|
||||
while (l != 0) {
|
||||
int c = l % base;
|
||||
} else if (zero.size() && !zero.at(0).isSurrogate()) {
|
||||
const ushort zeroUcs4 = zero.at(0).unicode();
|
||||
while (number != 0) {
|
||||
*(--p) = zeroUcs4 + number % base;
|
||||
|
||||
*(--p) = _zero.unicode() + c;
|
||||
|
||||
l /= base;
|
||||
number /= base;
|
||||
}
|
||||
} else if (zero.size() == 2 && zero.at(0).isHighSurrogate()) {
|
||||
const uint zeroUcs4 = QChar::surrogateToUcs4(zero.at(0), zero.at(1));
|
||||
while (number != 0) {
|
||||
const uint digit = zeroUcs4 + number % base;
|
||||
|
||||
*(--p) = QChar::lowSurrogate(digit);
|
||||
*(--p) = QChar::highSurrogate(digit);
|
||||
|
||||
number /= base;
|
||||
}
|
||||
} else {
|
||||
return QString();
|
||||
}
|
||||
|
||||
return QString(reinterpret_cast<QChar *>(p), 65 - (p - buff));
|
||||
return QString(reinterpret_cast<QChar *>(p), end - p);
|
||||
}
|
||||
|
||||
QString &decimalForm(QChar zero, QChar decimal, QChar group,
|
||||
QString &decimalForm(const QString &zero, const QString &decimal, const QString &group,
|
||||
QString &digits, int decpt, int precision,
|
||||
PrecisionMode pm,
|
||||
bool always_show_decpt,
|
||||
bool thousands_group)
|
||||
{
|
||||
const auto digitWidth = zero.size();
|
||||
Q_ASSERT(digitWidth == 1 || digitWidth == 2);
|
||||
Q_ASSERT(digits.size() % digitWidth == 0);
|
||||
|
||||
if (decpt < 0) {
|
||||
for (int i = 0; i < -decpt; ++i)
|
||||
digits.prepend(zero);
|
||||
decpt = 0;
|
||||
}
|
||||
else if (decpt > digits.length()) {
|
||||
for (int i = digits.length(); i < decpt; ++i)
|
||||
} else {
|
||||
for (int i = digits.length() / digitWidth; i < decpt; ++i)
|
||||
digits.append(zero);
|
||||
}
|
||||
|
||||
if (pm == PMDecimalDigits) {
|
||||
uint decimal_digits = digits.length() - decpt;
|
||||
for (int i = decimal_digits; i < precision; ++i)
|
||||
switch (pm) {
|
||||
case PMDecimalDigits:
|
||||
for (int i = digits.length() / digitWidth - decpt; i < precision; ++i)
|
||||
digits.append(zero);
|
||||
}
|
||||
else if (pm == PMSignificantDigits) {
|
||||
for (int i = digits.length(); i < precision; ++i)
|
||||
break;
|
||||
case PMSignificantDigits:
|
||||
for (int i = digits.length() / digitWidth; i < precision; ++i)
|
||||
digits.append(zero);
|
||||
}
|
||||
else { // pm == PMChopTrailingZeros
|
||||
break;
|
||||
case PMChopTrailingZeros:
|
||||
break;
|
||||
}
|
||||
|
||||
if (always_show_decpt || decpt < digits.length())
|
||||
digits.insert(decpt, decimal);
|
||||
if (always_show_decpt || decpt < digits.length() / digitWidth)
|
||||
digits.insert(decpt * digitWidth, decimal);
|
||||
|
||||
// FIXME: they're not simply thousands separators !
|
||||
// Need to mirror IndianNumberGrouping code in QLocaleData::longLongToString()
|
||||
if (thousands_group) {
|
||||
for (int i = decpt - 3; i > 0; i -= 3)
|
||||
digits.insert(i, group);
|
||||
digits.insert(i * digitWidth, group);
|
||||
}
|
||||
|
||||
if (decpt == 0)
|
||||
@ -502,32 +515,37 @@ QString &decimalForm(QChar zero, QChar decimal, QChar group,
|
||||
return digits;
|
||||
}
|
||||
|
||||
QString &exponentForm(QChar zero, QChar decimal, QChar exponential,
|
||||
QChar group, QChar plus, QChar minus,
|
||||
QString &exponentForm(const QString &zero, const QString &decimal, const QString &exponential,
|
||||
const QString &group, const QString &plus, const QString &minus,
|
||||
QString &digits, int decpt, int precision,
|
||||
PrecisionMode pm,
|
||||
bool always_show_decpt,
|
||||
bool leading_zero_in_exponent)
|
||||
{
|
||||
int exp = decpt - 1;
|
||||
const auto digitWidth = zero.size();
|
||||
Q_ASSERT(digitWidth == 1 || digitWidth == 2);
|
||||
Q_ASSERT(digits.size() % digitWidth == 0);
|
||||
|
||||
if (pm == PMDecimalDigits) {
|
||||
for (int i = digits.length(); i < precision + 1; ++i)
|
||||
switch (pm) {
|
||||
case PMDecimalDigits:
|
||||
for (int i = digits.length() / digitWidth; i < precision + 1; ++i)
|
||||
digits.append(zero);
|
||||
}
|
||||
else if (pm == PMSignificantDigits) {
|
||||
for (int i = digits.length(); i < precision; ++i)
|
||||
break;
|
||||
case PMSignificantDigits:
|
||||
for (int i = digits.length() / digitWidth; i < precision; ++i)
|
||||
digits.append(zero);
|
||||
}
|
||||
else { // pm == PMChopTrailingZeros
|
||||
break;
|
||||
case PMChopTrailingZeros:
|
||||
break;
|
||||
}
|
||||
|
||||
if (always_show_decpt || digits.length() > 1)
|
||||
digits.insert(1, decimal);
|
||||
if (always_show_decpt || digits.length() > digitWidth)
|
||||
digits.insert(digitWidth, decimal);
|
||||
|
||||
digits.append(exponential);
|
||||
digits.append(QLocaleData::longLongToString(zero, group, plus, minus,
|
||||
exp, leading_zero_in_exponent ? 2 : 1, 10, -1, QLocaleData::AlwaysShowSign));
|
||||
digits.append(QLocaleData::longLongToString(zero, group, plus, minus, decpt - 1,
|
||||
leading_zero_in_exponent ? 2 : 1,
|
||||
10, -1, QLocaleData::AlwaysShowSign));
|
||||
|
||||
return digits;
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ double qt_asciiToDouble(const char *num, int numLen, bool &ok, int &processed,
|
||||
void qt_doubleToAscii(double d, QLocaleData::DoubleForm form, int precision, char *buf, int bufSize,
|
||||
bool &sign, int &length, int &decpt);
|
||||
|
||||
QString qulltoa(qulonglong l, int base, const QChar _zero);
|
||||
QString qulltoa(qulonglong l, int base, const QStringView zero);
|
||||
Q_CORE_EXPORT QString qdtoa(qreal d, int *decpt, int *sign);
|
||||
|
||||
enum PrecisionMode {
|
||||
@ -76,13 +76,13 @@ enum PrecisionMode {
|
||||
PMChopTrailingZeros = 0x03
|
||||
};
|
||||
|
||||
QString &decimalForm(QChar zero, QChar decimal, QChar group,
|
||||
QString &decimalForm(const QString &zero, const QString &decimal, const QString &group,
|
||||
QString &digits, int decpt, int precision,
|
||||
PrecisionMode pm,
|
||||
bool always_show_decpt,
|
||||
bool thousands_group);
|
||||
QString &exponentForm(QChar zero, QChar decimal, QChar exponential,
|
||||
QChar group, QChar plus, QChar minus,
|
||||
QString &exponentForm(const QString &zero, const QString &decimal, const QString &exponential,
|
||||
const QString &group, const QString &plus, const QString &minus,
|
||||
QString &digits, int decpt, int precision,
|
||||
PrecisionMode pm,
|
||||
bool always_show_decpt,
|
||||
|
@ -567,25 +567,30 @@ QVariant QSystemLocalePrivate::toCurrencyString(const QSystemLocale::CurrencyToS
|
||||
QString value;
|
||||
switch (arg.value.type()) {
|
||||
case QVariant::Int:
|
||||
value = QLocaleData::longLongToString(QLatin1Char('0'), QLatin1Char(','), QLatin1Char('+'), QLatin1Char('-'),
|
||||
arg.value.toInt(), -1, 10, -1, QLocale::OmitGroupSeparator);
|
||||
value = QLocaleData::longLongToString(
|
||||
QStringLiteral("0"), QStringLiteral(","), QStringLiteral("+"), QStringLiteral("-"),
|
||||
arg.value.toInt(), -1, 10, -1, QLocale::OmitGroupSeparator);
|
||||
break;
|
||||
case QVariant::UInt:
|
||||
value = QLocaleData::unsLongLongToString(QLatin1Char('0'), QLatin1Char(','), QLatin1Char('+'),
|
||||
arg.value.toUInt(), -1, 10, -1, QLocale::OmitGroupSeparator);
|
||||
value = QLocaleData::unsLongLongToString(
|
||||
QStringLiteral("0"), QStringLiteral(","), QStringLiteral("+"),
|
||||
arg.value.toUInt(), -1, 10, -1, QLocale::OmitGroupSeparator);
|
||||
break;
|
||||
case QVariant::Double:
|
||||
value = QLocaleData::doubleToString(QLatin1Char('0'), QLatin1Char('+'), QLatin1Char('-'),
|
||||
QLatin1Char(' '), QLatin1Char(','), QLatin1Char('.'),
|
||||
arg.value.toDouble(), -1, QLocaleData::DFDecimal, -1, QLocale::OmitGroupSeparator);
|
||||
value = QLocaleData::doubleToString(
|
||||
QStringLiteral("0"), QStringLiteral("+"), QStringLiteral("-"),
|
||||
QStringLiteral(" "), QStringLiteral(","), QStringLiteral("."),
|
||||
arg.value.toDouble(), -1, QLocaleData::DFDecimal, -1, QLocale::OmitGroupSeparator);
|
||||
break;
|
||||
case QVariant::LongLong:
|
||||
value = QLocaleData::longLongToString(QLatin1Char('0'), QLatin1Char(','), QLatin1Char('+'), QLatin1Char('-'),
|
||||
arg.value.toLongLong(), -1, 10, -1, QLocale::OmitGroupSeparator);
|
||||
value = QLocaleData::longLongToString(
|
||||
QStringLiteral("0"), QStringLiteral(","), QStringLiteral("+"), QStringLiteral("-"),
|
||||
arg.value.toLongLong(), -1, 10, -1, QLocale::OmitGroupSeparator);
|
||||
break;
|
||||
case QVariant::ULongLong:
|
||||
value = QLocaleData::unsLongLongToString(QLatin1Char('0'), QLatin1Char(','), QLatin1Char('+'),
|
||||
arg.value.toULongLong(), -1, 10, -1, QLocale::OmitGroupSeparator);
|
||||
value = QLocaleData::unsLongLongToString(
|
||||
QStringLiteral("0"), QStringLiteral(","), QStringLiteral("+"),
|
||||
arg.value.toULongLong(), -1, 10, -1, QLocale::OmitGroupSeparator);
|
||||
break;
|
||||
default:
|
||||
return QVariant();
|
||||
|
@ -409,12 +409,12 @@ static const QCalendarLocale locale_data[] = {
|
||||
{ 98, 7, 41, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Sango/Latin/Central African Republic
|
||||
{ 99, 13, 100, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Sanskrit/Devanagari/India
|
||||
{ 100, 2, 243, 6533, 6623, 6720, 6720, 184, 184, 90, 97, 69, 69, 26, 26 },// Serbian/Cyrillic/Serbia
|
||||
{ 100, 2, 27, 6533, 6623, 6720, 6720, 184, 184, 90, 97, 69, 69, 26, 26 },// Serbian/Cyrillic/Bosnia And Herzegowina
|
||||
{ 100, 2, 242, 6533, 6623, 6720, 6720, 184, 184, 90, 97, 69, 69, 26, 26 },// Serbian/Cyrillic/Montenegro
|
||||
{ 100, 2, 257, 6533, 6623, 6720, 6720, 184, 184, 90, 97, 69, 69, 26, 26 },// Serbian/Cyrillic/Kosovo
|
||||
{ 100, 7, 27, 6789, 6883, 6980, 6980, 184, 184, 94, 97, 72, 72, 26, 26 },// Serbian/Latin/Bosnia And Herzegowina
|
||||
{ 100, 7, 242, 6789, 6883, 6980, 6980, 184, 184, 94, 97, 72, 72, 26, 26 },// Serbian/Latin/Montenegro
|
||||
{ 100, 7, 243, 6789, 6883, 6980, 6980, 184, 184, 94, 97, 72, 72, 26, 26 },// Serbian/Latin/Serbia
|
||||
{ 100, 2, 27, 6533, 6623, 6720, 6720, 184, 184, 90, 97, 69, 69, 26, 26 },// Serbian/Cyrillic/Bosnia And Herzegowina
|
||||
{ 100, 2, 242, 6533, 6623, 6720, 6720, 184, 184, 90, 97, 69, 69, 26, 26 },// Serbian/Cyrillic/Montenegro
|
||||
{ 100, 2, 257, 6533, 6623, 6720, 6720, 184, 184, 90, 97, 69, 69, 26, 26 },// Serbian/Cyrillic/Kosovo
|
||||
{ 100, 7, 257, 6789, 6883, 6980, 6980, 184, 184, 94, 97, 72, 72, 26, 26 },// Serbian/Latin/Kosovo
|
||||
{ 101, 2, 81, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Ossetic/Cyrillic/Georgia
|
||||
{ 101, 2, 178, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Ossetic/Cyrillic/Russia
|
||||
@ -627,6 +627,8 @@ static const QCalendarLocale locale_data[] = {
|
||||
{ 259, 7, 37, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Meta/Latin/Cameroon
|
||||
{ 260, 7, 37, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Ngiemboon/Latin/Cameroon
|
||||
{ 261, 7, 197, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Aragonese/Latin/Spain
|
||||
{ 272, 46, 18,10380,10380, 106, 106,10601,10601,221,221, 78, 78, 41, 41 },// Chakma/Chakma/Bangladesh
|
||||
{ 272, 46, 100,10380,10380, 106, 106,10601,10601,221,221, 78, 78, 41, 41 },// Chakma/Chakma/India
|
||||
{ 290, 11, 100, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Manipuri/Bengali/India
|
||||
{ 309, 100, 232, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Tai Dam/Tai Viet/Vietnam
|
||||
{ 312, 7, 37, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Akoose/Latin/Cameroon
|
||||
@ -651,7 +653,7 @@ static const QCalendarLocale locale_data[] = {
|
||||
{ 349, 1, 102, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Northern Luri/Arabic/Iran
|
||||
{ 349, 1, 103, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Northern Luri/Arabic/Iraq
|
||||
{ 357, 6, 97, 888, 888, 888, 888, 184, 184, 71, 71, 71, 71, 26, 26 },// Cantonese/Traditional Han/Hong Kong
|
||||
{ 357, 5, 44,10380,10380,10380,10380, 184, 184, 71, 71, 71, 71, 26, 26 },// Cantonese/Simplified Han/China
|
||||
{ 357, 5, 44,10642,10642,10642,10642, 184, 184, 71, 71, 71, 71, 26, 26 },// Cantonese/Simplified Han/China
|
||||
{ 358, 138, 225, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Osage/Osage/United States
|
||||
{ 360, 7, 260, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Ido/Latin/World
|
||||
{ 361, 7, 260, 0, 0, 106, 106, 184, 184,106,106, 78, 78, 26, 26 },// Lojban/Latin/World
|
||||
@ -1186,10 +1188,23 @@ static const ushort months_data[] = {
|
||||
0x68, 0x61, 0x2bb, 0x62, 0x61, 0x6e, 0x3b, 0x64, 0x65, 0x20, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x3b, 0x64, 0x65,
|
||||
0x20, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x3b, 0x64, 0x65, 0x20, 0x44, 0x68, 0x75, 0x2bb, 0x6c, 0x2d, 0x51, 0x69,
|
||||
0x2bb, 0x64, 0x61, 0x68, 0x3b, 0x64, 0x65, 0x20, 0x44, 0x68, 0x75, 0x2bb, 0x6c, 0x2d, 0x48, 0x69, 0x6a, 0x6a, 0x61, 0x68,
|
||||
0x7a46, 0x54c8, 0x5170, 0x59c6, 0x6708, 0x3b, 0x8272, 0x6cd5, 0x5c14, 0x6708, 0x3b, 0x8d56, 0x6bd4, 0x6708, 0x20, 0x49, 0x3b, 0x8d56, 0x6bd4, 0x6708,
|
||||
0x20, 0x49, 0x49, 0x3b, 0x4e3b, 0x9a6c, 0x8fbe, 0x6708, 0x20, 0x49, 0x3b, 0x4e3b, 0x9a6c, 0x8fbe, 0x6708, 0x20, 0x49, 0x49, 0x3b, 0x8d56,
|
||||
0x54f2, 0x535c, 0x6708, 0x3b, 0x820d, 0x5c14, 0x90a6, 0x6708, 0x3b, 0x8d56, 0x4e70, 0x4e39, 0x6708, 0x3b, 0x95ea, 0x74e6, 0x9c81, 0x6708, 0x3b, 0x90fd,
|
||||
0x5c14, 0x5580, 0x5c14, 0x5fb7, 0x6708, 0x3b, 0x90fd, 0x5c14, 0x9ed1, 0x54f2, 0x6708
|
||||
0xd804, 0xdd1f, 0xd804, 0xdd27, 0xd804, 0xdd26, 0xd804, 0xdd27, 0xd804, 0xdd22, 0xd804, 0xdd27, 0xd804, 0xdd1f, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25, 0xd804,
|
||||
0xdd27, 0xd804, 0xdd1c, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd22, 0xd804, 0xdd27, 0xd804, 0xdd1d, 0xd804, 0xdd28, 0xd804, 0xdd05, 0xd804, 0xdd23,
|
||||
0xd804, 0xdd34, 0x20, 0xd804, 0xdd03, 0xd804, 0xdd03, 0xd804, 0xdd2a, 0xd804, 0xdd20, 0xd804, 0xdd23, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd22, 0xd804, 0xdd27,
|
||||
0xd804, 0xdd1d, 0xd804, 0xdd28, 0xd804, 0xdd05, 0xd804, 0xdd25, 0xd804, 0xdd34, 0x20, 0xd804, 0xdd25, 0xd804, 0xdd1a, 0xd804, 0xdd28, 0x3b, 0xd804, 0xdd0e,
|
||||
0xd804, 0xdd27, 0xd804, 0xdd1f, 0xd804, 0xdd18, 0xd804, 0xdd28, 0xd804, 0xdd05, 0xd804, 0xdd23, 0xd804, 0xdd34, 0x20, 0xd804, 0xdd03, 0xd804, 0xdd03, 0xd804,
|
||||
0xdd2a, 0xd804, 0xdd20, 0xd804, 0xdd23, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd0e, 0xd804, 0xdd27, 0xd804, 0xdd1f, 0xd804, 0xdd18, 0xd804, 0xdd28, 0xd804, 0xdd05,
|
||||
0xd804, 0xdd0c, 0xd804, 0xdd34, 0x20, 0xd804, 0xdd25, 0xd804, 0xdd1a, 0xd804, 0xdd28, 0x3b, 0xd804, 0xdd22, 0xd804, 0xdd27, 0xd804, 0xdd0e, 0xd804, 0xdd27,
|
||||
0xd804, 0xdd1d, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd33, 0xd804, 0xdd03, 0xd804, 0xdd1d, 0xd804, 0xdd27, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0x3b,
|
||||
0xd804, 0xdd22, 0xd804, 0xdd27, 0xd804, 0xdd1f, 0xd804, 0xdd34, 0xd804, 0xdd0e, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd24, 0xd804,
|
||||
0xdd23, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd0e, 0xd804, 0xdd28, 0xd804, 0xdd23, 0xd804, 0xdd34, 0xd804, 0xdd07, 0xd804, 0xdd27, 0xd804, 0xdd18, 0xd804, 0xdd34,
|
||||
0x3b, 0xd804, 0xdd0e, 0xd804, 0xdd28, 0xd804, 0xdd23, 0xd804, 0xdd34, 0xd804, 0xdd26, 0xd804, 0xdd27, 0xd804, 0xdd0e, 0xd804, 0xdd34, 0xd804, 0xdd0e, 0xd804,
|
||||
0xdd27, 0xd804, 0xdd37, 0x3b, 0xd804, 0xdd38, 0x3b, 0xd804, 0xdd39, 0x3b, 0xd804, 0xdd3a, 0x3b, 0xd804, 0xdd3b, 0x3b, 0xd804, 0xdd3c, 0x3b, 0xd804,
|
||||
0xdd3d, 0x3b, 0xd804, 0xdd3e, 0x3b, 0xd804, 0xdd3f, 0x3b, 0xd804, 0xdd37, 0xd804, 0xdd36, 0x3b, 0xd804, 0xdd37, 0xd804, 0xdd37, 0x3b, 0xd804, 0xdd37,
|
||||
0xd804, 0xdd38, 0x7a46, 0x54c8, 0x5170, 0x59c6, 0x6708, 0x3b, 0x8272, 0x6cd5, 0x5c14, 0x6708, 0x3b, 0x8d56, 0x6bd4, 0x6708, 0x20, 0x49, 0x3b, 0x8d56,
|
||||
0x6bd4, 0x6708, 0x20, 0x49, 0x49, 0x3b, 0x4e3b, 0x9a6c, 0x8fbe, 0x6708, 0x20, 0x49, 0x3b, 0x4e3b, 0x9a6c, 0x8fbe, 0x6708, 0x20, 0x49, 0x49,
|
||||
0x3b, 0x8d56, 0x54f2, 0x535c, 0x6708, 0x3b, 0x820d, 0x5c14, 0x90a6, 0x6708, 0x3b, 0x8d56, 0x4e70, 0x4e39, 0x6708, 0x3b, 0x95ea, 0x74e6, 0x9c81, 0x6708,
|
||||
0x3b, 0x90fd, 0x5c14, 0x5580, 0x5c14, 0x5fb7, 0x6708, 0x3b, 0x90fd, 0x5c14, 0x9ed1, 0x54f2, 0x6708
|
||||
};
|
||||
// GENERATED PART ENDS HERE
|
||||
|
||||
|
@ -409,12 +409,12 @@ static const QCalendarLocale locale_data[] = {
|
||||
{ 98, 7, 41, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Sango/Latin/Central African Republic
|
||||
{ 99, 13, 100, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Sanskrit/Devanagari/India
|
||||
{ 100, 2, 243, 3199, 3199, 3199, 3199, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Cyrillic/Serbia
|
||||
{ 100, 2, 27, 3199, 3199, 3199, 3199, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Cyrillic/Bosnia And Herzegowina
|
||||
{ 100, 2, 242, 3199, 3199, 3199, 3199, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Cyrillic/Montenegro
|
||||
{ 100, 2, 257, 3199, 3199, 3199, 3199, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Cyrillic/Kosovo
|
||||
{ 100, 7, 27, 3279, 3279, 3279, 3279, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Latin/Bosnia And Herzegowina
|
||||
{ 100, 7, 242, 3279, 3279, 3279, 3279, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Latin/Montenegro
|
||||
{ 100, 7, 243, 3279, 3279, 3279, 3279, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Latin/Serbia
|
||||
{ 100, 2, 27, 3199, 3199, 3199, 3199, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Cyrillic/Bosnia And Herzegowina
|
||||
{ 100, 2, 242, 3199, 3199, 3199, 3199, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Cyrillic/Montenegro
|
||||
{ 100, 2, 257, 3199, 3199, 3199, 3199, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Cyrillic/Kosovo
|
||||
{ 100, 7, 257, 3279, 3279, 3279, 3279, 153, 153, 80, 80, 80, 80, 26, 26 },// Serbian/Latin/Kosovo
|
||||
{ 101, 2, 81, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Ossetic/Cyrillic/Georgia
|
||||
{ 101, 2, 178, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Ossetic/Cyrillic/Russia
|
||||
@ -627,6 +627,8 @@ static const QCalendarLocale locale_data[] = {
|
||||
{ 259, 7, 37, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Meta/Latin/Cameroon
|
||||
{ 260, 7, 37, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Ngiemboon/Latin/Cameroon
|
||||
{ 261, 7, 197, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Aragonese/Latin/Spain
|
||||
{ 272, 46, 18, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Chakma/Chakma/Bangladesh
|
||||
{ 272, 46, 100, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Chakma/Chakma/India
|
||||
{ 290, 11, 100, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Manipuri/Bengali/India
|
||||
{ 309, 100, 232, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Tai Dam/Tai Viet/Vietnam
|
||||
{ 312, 7, 37, 0, 0, 0, 0, 153, 153, 83, 83, 83, 83, 26, 26 },// Akoose/Latin/Cameroon
|
||||
|
@ -409,13 +409,13 @@ static const QCalendarLocale locale_data[] = {
|
||||
{ 98, 7, 41,16574,16574,16664,16664,16711,16711, 90, 90, 47, 47, 23, 23 },// Sango/Latin/Central African Republic
|
||||
{ 99, 13, 100, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Sanskrit/Devanagari/India
|
||||
{ 100, 2, 243,16734,16734,16814,16814,12615,12615, 80, 80, 47, 47, 23, 23 },// Serbian/Cyrillic/Serbia
|
||||
{ 100, 7, 27,16861,16861,16941,16941, 9704, 9704, 80, 80, 47, 47, 23, 23 },// Serbian/Latin/Bosnia And Herzegowina
|
||||
{ 100, 7, 242,16861,16861,16988,16988, 9704, 9704, 80, 80, 49, 49, 23, 23 },// Serbian/Latin/Montenegro
|
||||
{ 100, 7, 243,16861,16861,16941,16941, 9704, 9704, 80, 80, 47, 47, 23, 23 },// Serbian/Latin/Serbia
|
||||
{ 100, 2, 27,16734,16734,16814,16814,12615,12615, 80, 80, 47, 47, 23, 23 },// Serbian/Cyrillic/Bosnia And Herzegowina
|
||||
{ 100, 2, 242,16734,16734,16861,16861,12615,12615, 80, 80, 49, 49, 23, 23 },// Serbian/Cyrillic/Montenegro
|
||||
{ 100, 2, 257,16734,16734,16861,16861,12615,12615, 80, 80, 49, 49, 23, 23 },// Serbian/Cyrillic/Kosovo
|
||||
{ 100, 7, 27,16910,16910,16990,16990, 9704, 9704, 80, 80, 47, 47, 23, 23 },// Serbian/Latin/Bosnia And Herzegowina
|
||||
{ 100, 7, 242,16910,16910,17037,17037, 9704, 9704, 80, 80, 49, 49, 23, 23 },// Serbian/Latin/Montenegro
|
||||
{ 100, 7, 243,16910,16910,16990,16990, 9704, 9704, 80, 80, 47, 47, 23, 23 },// Serbian/Latin/Serbia
|
||||
{ 100, 7, 257,16910,16910,17037,17037, 9704, 9704, 80, 80, 49, 49, 23, 23 },// Serbian/Latin/Kosovo
|
||||
{ 100, 2, 242,16734,16734,17037,17037,12615,12615, 80, 80, 49, 49, 23, 23 },// Serbian/Cyrillic/Montenegro
|
||||
{ 100, 2, 257,16734,16734,17037,17037,12615,12615, 80, 80, 49, 49, 23, 23 },// Serbian/Cyrillic/Kosovo
|
||||
{ 100, 7, 257,16861,16861,16988,16988, 9704, 9704, 80, 80, 49, 49, 23, 23 },// Serbian/Latin/Kosovo
|
||||
{ 101, 2, 81,17086,17167,17252,17314,11135,11135, 81, 85, 62, 59, 23, 23 },// Ossetic/Cyrillic/Georgia
|
||||
{ 101, 2, 178,17086,17167,17252,17314,11135,11135, 81, 85, 62, 59, 23, 23 },// Ossetic/Cyrillic/Russia
|
||||
{ 102, 7, 195, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Southern Sotho/Latin/South Africa
|
||||
@ -627,29 +627,31 @@ static const QCalendarLocale locale_data[] = {
|
||||
{ 259, 7, 37,37197,37197,37338,37338,37474,37474,141,141,136,136, 35, 35 },// Meta/Latin/Cameroon
|
||||
{ 260, 7, 37,37509,37509,37509,37509, 155, 155,164,164,164,164, 26, 26 },// Ngiemboon/Latin/Cameroon
|
||||
{ 261, 7, 197, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Aragonese/Latin/Spain
|
||||
{ 272, 46, 18,37673,37862,37673,38051,38218,38218,189,189,189,167, 57, 57 },// Chakma/Chakma/Bangladesh
|
||||
{ 272, 46, 100,37673,37862,37673,38051,38218,38218,189,189,189,167, 57, 57 },// Chakma/Chakma/India
|
||||
{ 290, 11, 100, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Manipuri/Bengali/India
|
||||
{ 309, 100, 232, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Tai Dam/Tai Viet/Vietnam
|
||||
{ 312, 7, 37, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Akoose/Latin/Cameroon
|
||||
{ 313, 7, 225,37673,37673,37673,37673, 155, 155,179,179,179,179, 26, 26 },// Lakota/Latin/United States
|
||||
{ 313, 7, 225,38275,38275,38275,38275, 155, 155,179,179,179,179, 26, 26 },// Lakota/Latin/United States
|
||||
{ 314, 9, 145,28167,28167,28247,28247,28294,28294, 80, 80, 47, 47, 23, 23 },// Standard Moroccan Tamazight/Tifinagh/Morocco
|
||||
{ 315, 7, 43, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Mapuche/Latin/Chile
|
||||
{ 316, 1, 103,37852,37852,37852,37852,37956,37956,104,104,104,104, 23, 23 },// Central Kurdish/Arabic/Iraq
|
||||
{ 316, 1, 102,37852,37852,37852,37852,37956,37956,104,104,104,104, 23, 23 },// Central Kurdish/Arabic/Iran
|
||||
{ 317, 7, 82,37979,38063,38155,38202, 9704, 9704, 84, 92, 47, 59, 23, 23 },// Lower Sorbian/Latin/Germany
|
||||
{ 318, 7, 82,38261,38346,38438,38485, 9704, 9704, 85, 92, 47, 59, 23, 23 },// Upper Sorbian/Latin/Germany
|
||||
{ 316, 1, 103,38454,38454,38454,38454,38558,38558,104,104,104,104, 23, 23 },// Central Kurdish/Arabic/Iraq
|
||||
{ 316, 1, 102,38454,38454,38454,38454,38558,38558,104,104,104,104, 23, 23 },// Central Kurdish/Arabic/Iran
|
||||
{ 317, 7, 82,38581,38665,38757,38804, 9704, 9704, 84, 92, 47, 59, 23, 23 },// Lower Sorbian/Latin/Germany
|
||||
{ 318, 7, 82,38863,38948,39040,39087, 9704, 9704, 85, 92, 47, 59, 23, 23 },// Upper Sorbian/Latin/Germany
|
||||
{ 319, 7, 37, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Kenyang/Latin/Cameroon
|
||||
{ 320, 7, 38, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Mohawk/Latin/Canada
|
||||
{ 321, 75, 91, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Nko/Nko/Guinea
|
||||
{ 322, 7, 260,38544,38544,38634,38634,38681,38681, 90, 90, 47, 47, 23, 23 },// Prussian/Latin/World
|
||||
{ 322, 7, 260,39146,39146,39236,39236,39283,39283, 90, 90, 47, 47, 23, 23 },// Prussian/Latin/World
|
||||
{ 323, 7, 90, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Kiche/Latin/Guatemala
|
||||
{ 324, 7, 205, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Southern Sami/Latin/Sweden
|
||||
{ 325, 7, 205, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Lule Sami/Latin/Sweden
|
||||
{ 326, 7, 73,38704,38704,38843,38843,38919,38919,139,139, 76, 76, 24, 24 },// Inari Sami/Latin/Finland
|
||||
{ 326, 7, 73,39306,39306,39445,39445,39521,39521,139,139, 76, 76, 24, 24 },// Inari Sami/Latin/Finland
|
||||
{ 327, 7, 73, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Skolt Sami/Latin/Finland
|
||||
{ 328, 7, 13, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Warlpiri/Latin/Australia
|
||||
{ 346, 1, 102,14818,14818,14818,14818, 155, 155, 69, 69, 69, 69, 26, 26 },// Mazanderani/Arabic/Iran
|
||||
{ 349, 1, 102,38943,38943,38943,38943, 155, 155, 76, 76, 76, 76, 26, 26 },// Northern Luri/Arabic/Iran
|
||||
{ 349, 1, 103,38943,38943,38943,38943, 155, 155, 76, 76, 76, 76, 26, 26 },// Northern Luri/Arabic/Iraq
|
||||
{ 349, 1, 102,39545,39545,39545,39545, 155, 155, 76, 76, 76, 76, 26, 26 },// Northern Luri/Arabic/Iran
|
||||
{ 349, 1, 103,39545,39545,39545,39545, 155, 155, 76, 76, 76, 76, 26, 26 },// Northern Luri/Arabic/Iraq
|
||||
{ 357, 6, 97, 4387, 4387, 4387, 4387, 155, 155, 38, 38, 38, 38, 26, 26 },// Cantonese/Traditional Han/Hong Kong
|
||||
{ 357, 5, 44, 4350, 4350, 4387, 4387, 155, 155, 37, 37, 38, 38, 26, 26 },// Cantonese/Simplified Han/China
|
||||
{ 358, 138, 225, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Osage/Osage/United States
|
||||
@ -658,7 +660,7 @@ static const QCalendarLocale locale_data[] = {
|
||||
{ 362, 7, 106, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Sicilian/Latin/Italy
|
||||
{ 363, 1, 102, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Southern Kurdish/Arabic/Iran
|
||||
{ 364, 1, 163, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Western Balochi/Arabic/Pakistan
|
||||
{ 365, 7, 170,25786,25786,39019,39019,39064,39064, 87, 87, 45, 45, 23, 23 },// Cebuano/Latin/Philippines
|
||||
{ 365, 7, 170,25786,25786,39621,39621,39666,39666, 87, 87, 45, 45, 23, 23 },// Cebuano/Latin/Philippines
|
||||
{ 366, 2, 178, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Erzya/Cyrillic/Russia
|
||||
{ 367, 7, 225, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Chickasaw/Latin/United States
|
||||
{ 368, 7, 225, 361, 361, 361, 361, 155, 155, 47, 47, 47, 47, 26, 26 },// Muscogee/Latin/United States
|
||||
@ -1510,18 +1512,18 @@ static const ushort months_data[] = {
|
||||
0x435, 0x43c, 0x431, 0x430, 0x440, 0x3b, 0x434, 0x435, 0x446, 0x435, 0x43c, 0x431, 0x430, 0x440, 0x458, 0x430, 0x43d, 0x3b, 0x444, 0x435,
|
||||
0x431, 0x3b, 0x43c, 0x430, 0x440, 0x3b, 0x430, 0x43f, 0x440, 0x3b, 0x43c, 0x430, 0x458, 0x3b, 0x458, 0x443, 0x43d, 0x3b, 0x458, 0x443,
|
||||
0x43b, 0x3b, 0x430, 0x432, 0x433, 0x3b, 0x441, 0x435, 0x43f, 0x3b, 0x43e, 0x43a, 0x442, 0x3b, 0x43d, 0x43e, 0x432, 0x3b, 0x434, 0x435,
|
||||
0x446, 0x458, 0x430, 0x43d, 0x3b, 0x444, 0x435, 0x431, 0x3b, 0x43c, 0x430, 0x440, 0x442, 0x3b, 0x430, 0x43f, 0x440, 0x3b, 0x43c, 0x430,
|
||||
0x458, 0x3b, 0x458, 0x443, 0x43d, 0x3b, 0x458, 0x443, 0x43b, 0x3b, 0x430, 0x432, 0x433, 0x3b, 0x441, 0x435, 0x43f, 0x442, 0x3b, 0x43e,
|
||||
0x43a, 0x442, 0x3b, 0x43d, 0x43e, 0x432, 0x3b, 0x434, 0x435, 0x446, 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x3b, 0x66, 0x65, 0x62,
|
||||
0x72, 0x75, 0x61, 0x72, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x3b, 0x61, 0x70, 0x72, 0x69, 0x6c, 0x3b, 0x6d, 0x61, 0x6a, 0x3b,
|
||||
0x6a, 0x75, 0x6e, 0x3b, 0x6a, 0x75, 0x6c, 0x3b, 0x61, 0x76, 0x67, 0x75, 0x73, 0x74, 0x3b, 0x73, 0x65, 0x70, 0x74, 0x65,
|
||||
0x6d, 0x62, 0x61, 0x72, 0x3b, 0x6f, 0x6b, 0x74, 0x6f, 0x62, 0x61, 0x72, 0x3b, 0x6e, 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x61,
|
||||
0x72, 0x3b, 0x64, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x61, 0x72, 0x6a, 0x61, 0x6e, 0x3b, 0x66, 0x65, 0x62, 0x3b, 0x6d, 0x61,
|
||||
0x72, 0x3b, 0x61, 0x70, 0x72, 0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6a, 0x75, 0x6e, 0x3b, 0x6a, 0x75, 0x6c, 0x3b, 0x61, 0x76,
|
||||
0x67, 0x3b, 0x73, 0x65, 0x70, 0x3b, 0x6f, 0x6b, 0x74, 0x3b, 0x6e, 0x6f, 0x76, 0x3b, 0x64, 0x65, 0x63, 0x6a, 0x61, 0x6e,
|
||||
0x3b, 0x66, 0x65, 0x62, 0x3b, 0x6d, 0x61, 0x72, 0x74, 0x3b, 0x61, 0x70, 0x72, 0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6a, 0x75,
|
||||
0x6e, 0x3b, 0x6a, 0x75, 0x6c, 0x3b, 0x61, 0x76, 0x67, 0x3b, 0x73, 0x65, 0x70, 0x74, 0x3b, 0x6f, 0x6b, 0x74, 0x3b, 0x6e,
|
||||
0x6f, 0x76, 0x3b, 0x64, 0x65, 0x63, 0x42f, 0x43d, 0x432, 0x430, 0x440, 0x44c, 0x3b, 0x424, 0x435, 0x432, 0x440, 0x430, 0x43b, 0x44c,
|
||||
0x446, 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x3b, 0x66, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x3b, 0x6d, 0x61, 0x72, 0x74,
|
||||
0x3b, 0x61, 0x70, 0x72, 0x69, 0x6c, 0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6a, 0x75, 0x6e, 0x3b, 0x6a, 0x75, 0x6c, 0x3b, 0x61,
|
||||
0x76, 0x67, 0x75, 0x73, 0x74, 0x3b, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x61, 0x72, 0x3b, 0x6f, 0x6b, 0x74, 0x6f,
|
||||
0x62, 0x61, 0x72, 0x3b, 0x6e, 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x61, 0x72, 0x3b, 0x64, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x61,
|
||||
0x72, 0x6a, 0x61, 0x6e, 0x3b, 0x66, 0x65, 0x62, 0x3b, 0x6d, 0x61, 0x72, 0x3b, 0x61, 0x70, 0x72, 0x3b, 0x6d, 0x61, 0x6a,
|
||||
0x3b, 0x6a, 0x75, 0x6e, 0x3b, 0x6a, 0x75, 0x6c, 0x3b, 0x61, 0x76, 0x67, 0x3b, 0x73, 0x65, 0x70, 0x3b, 0x6f, 0x6b, 0x74,
|
||||
0x3b, 0x6e, 0x6f, 0x76, 0x3b, 0x64, 0x65, 0x63, 0x6a, 0x61, 0x6e, 0x3b, 0x66, 0x65, 0x62, 0x3b, 0x6d, 0x61, 0x72, 0x74,
|
||||
0x3b, 0x61, 0x70, 0x72, 0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6a, 0x75, 0x6e, 0x3b, 0x6a, 0x75, 0x6c, 0x3b, 0x61, 0x76, 0x67,
|
||||
0x3b, 0x73, 0x65, 0x70, 0x74, 0x3b, 0x6f, 0x6b, 0x74, 0x3b, 0x6e, 0x6f, 0x76, 0x3b, 0x64, 0x65, 0x63, 0x458, 0x430, 0x43d,
|
||||
0x3b, 0x444, 0x435, 0x431, 0x3b, 0x43c, 0x430, 0x440, 0x442, 0x3b, 0x430, 0x43f, 0x440, 0x3b, 0x43c, 0x430, 0x458, 0x3b, 0x458, 0x443,
|
||||
0x43d, 0x3b, 0x458, 0x443, 0x43b, 0x3b, 0x430, 0x432, 0x433, 0x3b, 0x441, 0x435, 0x43f, 0x442, 0x3b, 0x43e, 0x43a, 0x442, 0x3b, 0x43d,
|
||||
0x43e, 0x432, 0x3b, 0x434, 0x435, 0x446, 0x42f, 0x43d, 0x432, 0x430, 0x440, 0x44c, 0x3b, 0x424, 0x435, 0x432, 0x440, 0x430, 0x43b, 0x44c,
|
||||
0x3b, 0x41c, 0x430, 0x440, 0x442, 0x44a, 0x438, 0x3b, 0x410, 0x43f, 0x440, 0x435, 0x43b, 0x44c, 0x3b, 0x41c, 0x430, 0x439, 0x3b, 0x418,
|
||||
0x44e, 0x43d, 0x44c, 0x3b, 0x418, 0x44e, 0x43b, 0x44c, 0x3b, 0x410, 0x432, 0x433, 0x443, 0x441, 0x442, 0x3b, 0x421, 0x435, 0x43d, 0x442,
|
||||
0x44f, 0x431, 0x440, 0x44c, 0x3b, 0x41e, 0x43a, 0x442, 0x44f, 0x431, 0x440, 0x44c, 0x3b, 0x41d, 0x43e, 0x44f, 0x431, 0x440, 0x44c, 0x3b,
|
||||
@ -2550,78 +2552,108 @@ static const ushort months_data[] = {
|
||||
0x79, 0x25b, 0x300, 0x62, 0x20, 0x6d, 0x62, 0x289, 0x300, 0x14b, 0x3b, 0x73, 0x61, 0x14b, 0x20, 0x6d, 0x62, 0x289, 0x300, 0x14b,
|
||||
0x3b, 0x73, 0x61, 0x14b, 0x20, 0x6e, 0x67, 0x77, 0x254, 0x300, 0x2bc, 0x20, 0x6d, 0x62, 0xff, 0x25b, 0x3b, 0x73, 0x61, 0x14b,
|
||||
0x20, 0x74, 0xe0, 0x14b, 0x61, 0x20, 0x74, 0x73, 0x65, 0x74, 0x73, 0xe1, 0x2bc, 0x3b, 0x73, 0x61, 0x14b, 0x20, 0x6d, 0x65,
|
||||
0x6a, 0x77, 0x6f, 0x14b, 0xf3, 0x3b, 0x73, 0x61, 0x14b, 0x20, 0x6c, 0xf9, 0x6d, 0x57, 0x69, 0xf3, 0x74, 0x68, 0x65, 0x21f,
|
||||
0x69, 0x6b, 0x61, 0x20, 0x57, 0xed, 0x3b, 0x54, 0x68, 0x69, 0x79, 0xf3, 0x21f, 0x65, 0x79, 0x75, 0x14b, 0x6b, 0x61, 0x20,
|
||||
0x57, 0xed, 0x3b, 0x49, 0x161, 0x74, 0xe1, 0x77, 0x69, 0x10d, 0x68, 0x61, 0x79, 0x61, 0x7a, 0x61, 0x14b, 0x20, 0x57, 0xed,
|
||||
0x3b, 0x50, 0x21f, 0x65, 0x17e, 0xed, 0x74, 0x21f, 0x6f, 0x20, 0x57, 0xed, 0x3b, 0x10c, 0x68, 0x61, 0x14b, 0x77, 0xe1, 0x70,
|
||||
0x65, 0x74, 0x21f, 0x6f, 0x20, 0x57, 0xed, 0x3b, 0x57, 0xed, 0x70, 0x61, 0x7a, 0x75, 0x6b, 0x21f, 0x61, 0x2d, 0x77, 0x61,
|
||||
0x161, 0x74, 0xe9, 0x20, 0x57, 0xed, 0x3b, 0x10c, 0x68, 0x61, 0x14b, 0x70, 0x21f, 0xe1, 0x73, 0x61, 0x70, 0x61, 0x20, 0x57,
|
||||
0xed, 0x3b, 0x57, 0x61, 0x73, 0xfa, 0x74, 0x21f, 0x75, 0x14b, 0x20, 0x57, 0xed, 0x3b, 0x10c, 0x68, 0x61, 0x14b, 0x77, 0xe1,
|
||||
0x70, 0x65, 0x1e7, 0x69, 0x20, 0x57, 0xed, 0x3b, 0x10c, 0x68, 0x61, 0x14b, 0x77, 0xe1, 0x70, 0x65, 0x2d, 0x6b, 0x61, 0x73,
|
||||
0x6e, 0xe1, 0x20, 0x57, 0xed, 0x3b, 0x57, 0x61, 0x6e, 0xed, 0x79, 0x65, 0x74, 0x75, 0x20, 0x57, 0xed, 0x3b, 0x54, 0x21f,
|
||||
0x61, 0x68, 0xe9, 0x6b, 0x61, 0x70, 0x161, 0x75, 0x14b, 0x20, 0x57, 0xed, 0x6a9, 0x627, 0x646, 0x648, 0x648, 0x646, 0x6cc, 0x20,
|
||||
0x62f, 0x648, 0x648, 0x6d5, 0x645, 0x3b, 0x634, 0x648, 0x628, 0x627, 0x62a, 0x3b, 0x626, 0x627, 0x632, 0x627, 0x631, 0x3b, 0x646, 0x6cc,
|
||||
0x633, 0x627, 0x646, 0x3b, 0x626, 0x627, 0x6cc, 0x627, 0x631, 0x3b, 0x62d, 0x648, 0x632, 0x6d5, 0x6cc, 0x631, 0x627, 0x646, 0x3b, 0x62a,
|
||||
0x6d5, 0x645, 0x648, 0x648, 0x632, 0x3b, 0x626, 0x627, 0x628, 0x3b, 0x626, 0x6d5, 0x6cc, 0x644, 0x648, 0x648, 0x644, 0x3b, 0x62a, 0x634,
|
||||
0x631, 0x6cc, 0x646, 0x6cc, 0x20, 0x6cc, 0x6d5, 0x6a9, 0x6d5, 0x645, 0x3b, 0x62a, 0x634, 0x631, 0x6cc, 0x646, 0x6cc, 0x20, 0x62f, 0x648,
|
||||
0x648, 0x6d5, 0x645, 0x3b, 0x6a9, 0x627, 0x646, 0x648, 0x646, 0x6cc, 0x20, 0x6cc, 0x6d5, 0x6a9, 0x6d5, 0x645, 0x6a9, 0x3b, 0x634, 0x3b,
|
||||
0x626, 0x3b, 0x646, 0x3b, 0x626, 0x3b, 0x62d, 0x3b, 0x62a, 0x3b, 0x626, 0x3b, 0x626, 0x3b, 0x62a, 0x3b, 0x62a, 0x3b, 0x6a9, 0x6a,
|
||||
0x61, 0x6e, 0x75, 0x61, 0x72, 0x3b, 0x66, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x3b, 0x6d, 0x11b, 0x72, 0x63, 0x3b, 0x61,
|
||||
0x70, 0x72, 0x79, 0x6c, 0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6a, 0x75, 0x6e, 0x69, 0x6a, 0x3b, 0x6a, 0x75, 0x6c, 0x69, 0x6a,
|
||||
0x3b, 0x61, 0x77, 0x67, 0x75, 0x73, 0x74, 0x3b, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0x6f, 0x6b,
|
||||
0x74, 0x6f, 0x62, 0x65, 0x72, 0x3b, 0x6e, 0x6f, 0x77, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0x64, 0x65, 0x63, 0x65, 0x6d,
|
||||
0x62, 0x65, 0x72, 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x61, 0x3b, 0x66, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x61, 0x3b,
|
||||
0x6d, 0x11b, 0x72, 0x63, 0x61, 0x3b, 0x61, 0x70, 0x72, 0x79, 0x6c, 0x61, 0x3b, 0x6d, 0x61, 0x6a, 0x61, 0x3b, 0x6a, 0x75,
|
||||
0x6e, 0x69, 0x6a, 0x61, 0x3b, 0x6a, 0x75, 0x6c, 0x69, 0x6a, 0x61, 0x3b, 0x61, 0x77, 0x67, 0x75, 0x73, 0x74, 0x61, 0x3b,
|
||||
0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x72, 0x61, 0x3b, 0x6f, 0x6b, 0x74, 0x6f, 0x62, 0x72, 0x61, 0x3b, 0x6e, 0x6f,
|
||||
0x77, 0x65, 0x6d, 0x62, 0x72, 0x61, 0x3b, 0x64, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x72, 0x61, 0x6a, 0x61, 0x6e, 0x3b, 0x66,
|
||||
0x65, 0x62, 0x3b, 0x6d, 0x11b, 0x72, 0x3b, 0x61, 0x70, 0x72, 0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6a, 0x75, 0x6e, 0x3b, 0x6a,
|
||||
0x75, 0x6c, 0x3b, 0x61, 0x77, 0x67, 0x3b, 0x73, 0x65, 0x70, 0x3b, 0x6f, 0x6b, 0x74, 0x3b, 0x6e, 0x6f, 0x77, 0x3b, 0x64,
|
||||
0x65, 0x63, 0x6a, 0x61, 0x6e, 0x2e, 0x3b, 0x66, 0x65, 0x62, 0x2e, 0x3b, 0x6d, 0x11b, 0x72, 0x2e, 0x3b, 0x61, 0x70, 0x72,
|
||||
0x2e, 0x3b, 0x6d, 0x61, 0x6a, 0x2e, 0x3b, 0x6a, 0x75, 0x6e, 0x2e, 0x3b, 0x6a, 0x75, 0x6c, 0x2e, 0x3b, 0x61, 0x77, 0x67,
|
||||
0x2e, 0x3b, 0x73, 0x65, 0x70, 0x2e, 0x3b, 0x6f, 0x6b, 0x74, 0x2e, 0x3b, 0x6e, 0x6f, 0x77, 0x2e, 0x3b, 0x64, 0x65, 0x63,
|
||||
0x2e, 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x3b, 0x66, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x3b, 0x6d, 0x11b, 0x72, 0x63,
|
||||
0x3b, 0x61, 0x70, 0x72, 0x79, 0x6c, 0x3b, 0x6d, 0x65, 0x6a, 0x61, 0x3b, 0x6a, 0x75, 0x6e, 0x69, 0x6a, 0x3b, 0x6a, 0x75,
|
||||
0x6c, 0x69, 0x6a, 0x3b, 0x61, 0x77, 0x67, 0x75, 0x73, 0x74, 0x3b, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, 0x72,
|
||||
0x3b, 0x6f, 0x6b, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x3b, 0x6e, 0x6f, 0x77, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0x64, 0x65,
|
||||
0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x61, 0x3b, 0x66, 0x65, 0x62, 0x72, 0x75, 0x61,
|
||||
0x72, 0x61, 0x3b, 0x6d, 0x11b, 0x72, 0x63, 0x61, 0x3b, 0x61, 0x70, 0x72, 0x79, 0x6c, 0x61, 0x3b, 0x6d, 0x65, 0x6a, 0x65,
|
||||
0x3b, 0x6a, 0x75, 0x6e, 0x69, 0x6a, 0x61, 0x3b, 0x6a, 0x75, 0x6c, 0x69, 0x6a, 0x61, 0x3b, 0x61, 0x77, 0x67, 0x75, 0x73,
|
||||
0x74, 0x61, 0x3b, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x72, 0x61, 0x3b, 0x6f, 0x6b, 0x74, 0x6f, 0x62, 0x72, 0x61,
|
||||
0x3b, 0x6e, 0x6f, 0x77, 0x65, 0x6d, 0x62, 0x72, 0x61, 0x3b, 0x64, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x72, 0x61, 0x6a, 0x61,
|
||||
0x6e, 0x3b, 0x66, 0x65, 0x62, 0x3b, 0x6d, 0x11b, 0x72, 0x3b, 0x61, 0x70, 0x72, 0x3b, 0x6d, 0x65, 0x6a, 0x3b, 0x6a, 0x75,
|
||||
0x6e, 0x3b, 0x6a, 0x75, 0x6c, 0x3b, 0x61, 0x77, 0x67, 0x3b, 0x73, 0x65, 0x70, 0x3b, 0x6f, 0x6b, 0x74, 0x3b, 0x6e, 0x6f,
|
||||
0x77, 0x3b, 0x64, 0x65, 0x63, 0x6a, 0x61, 0x6e, 0x2e, 0x3b, 0x66, 0x65, 0x62, 0x2e, 0x3b, 0x6d, 0x11b, 0x72, 0x2e, 0x3b,
|
||||
0x61, 0x70, 0x72, 0x2e, 0x3b, 0x6d, 0x65, 0x6a, 0x2e, 0x3b, 0x6a, 0x75, 0x6e, 0x2e, 0x3b, 0x6a, 0x75, 0x6c, 0x2e, 0x3b,
|
||||
0x61, 0x77, 0x67, 0x2e, 0x3b, 0x73, 0x65, 0x70, 0x2e, 0x3b, 0x6f, 0x6b, 0x74, 0x2e, 0x3b, 0x6e, 0x6f, 0x77, 0x2e, 0x3b,
|
||||
0x64, 0x65, 0x63, 0x2e, 0x72, 0x61, 0x67, 0x73, 0x3b, 0x77, 0x61, 0x73, 0x73, 0x61, 0x72, 0x69, 0x6e, 0x73, 0x3b, 0x70,
|
||||
0x16b, 0x6c, 0x69, 0x73, 0x3b, 0x73, 0x61, 0x6b, 0x6b, 0x69, 0x73, 0x3b, 0x7a, 0x61, 0x6c, 0x6c, 0x61, 0x77, 0x73, 0x3b,
|
||||
0x73, 0x12b, 0x6d, 0x65, 0x6e, 0x69, 0x73, 0x3b, 0x6c, 0x12b, 0x70, 0x61, 0x3b, 0x64, 0x61, 0x67, 0x67, 0x69, 0x73, 0x3b,
|
||||
0x73, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x73, 0x3b, 0x73, 0x70, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x73, 0x3b, 0x6c, 0x61, 0x70,
|
||||
0x6b, 0x72, 0x16b, 0x74, 0x69, 0x73, 0x3b, 0x73, 0x61, 0x6c, 0x6c, 0x61, 0x77, 0x73, 0x72, 0x61, 0x67, 0x3b, 0x77, 0x61,
|
||||
0x73, 0x3b, 0x70, 0x16b, 0x6c, 0x3b, 0x73, 0x61, 0x6b, 0x3b, 0x7a, 0x61, 0x6c, 0x3b, 0x73, 0x12b, 0x6d, 0x3b, 0x6c, 0x12b,
|
||||
0x70, 0x3b, 0x64, 0x61, 0x67, 0x3b, 0x73, 0x69, 0x6c, 0x3b, 0x73, 0x70, 0x61, 0x3b, 0x6c, 0x61, 0x70, 0x3b, 0x73, 0x61,
|
||||
0x6c, 0x52, 0x3b, 0x57, 0x3b, 0x50, 0x3b, 0x53, 0x3b, 0x5a, 0x3b, 0x53, 0x3b, 0x4c, 0x3b, 0x44, 0x3b, 0x53, 0x3b, 0x53,
|
||||
0x3b, 0x4c, 0x3b, 0x53, 0x75, 0x111, 0x111, 0xe2, 0x69, 0x76, 0x65, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x6b, 0x75, 0x6f,
|
||||
0x76, 0xe2, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x6e, 0x6a, 0x75, 0x68, 0x10d, 0xe2, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b,
|
||||
0x63, 0x75, 0xe1, 0x14b, 0x75, 0x69, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x76, 0x79, 0x65, 0x73, 0x69, 0x6d, 0xe1, 0xe1,
|
||||
0x6e, 0x75, 0x3b, 0x6b, 0x65, 0x73, 0x69, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x73, 0x79, 0x65, 0x69, 0x6e, 0x69, 0x6d,
|
||||
0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x70, 0x6f, 0x72, 0x67, 0x65, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x10d, 0x6f, 0x68, 0x10d,
|
||||
0xe2, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x72, 0x6f, 0x6f, 0x76, 0x76, 0xe2, 0x64, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b,
|
||||
0x73, 0x6b, 0x61, 0x6d, 0x6d, 0xe2, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x6a, 0x75, 0x6f, 0x76, 0x6c, 0xe2, 0x6d, 0xe1,
|
||||
0xe1, 0x6e, 0x75, 0x75, 0x111, 0x69, 0x76, 0x3b, 0x6b, 0x75, 0x6f, 0x76, 0xe2, 0x3b, 0x6e, 0x6a, 0x75, 0x68, 0x10d, 0xe2,
|
||||
0x3b, 0x63, 0x75, 0xe1, 0x14b, 0x75, 0x69, 0x3b, 0x76, 0x79, 0x65, 0x73, 0x69, 0x3b, 0x6b, 0x65, 0x73, 0x69, 0x3b, 0x73,
|
||||
0x79, 0x65, 0x69, 0x6e, 0x69, 0x3b, 0x70, 0x6f, 0x72, 0x67, 0x65, 0x3b, 0x10d, 0x6f, 0x68, 0x10d, 0xe2, 0x3b, 0x72, 0x6f,
|
||||
0x6f, 0x76, 0x76, 0xe2, 0x64, 0x3b, 0x73, 0x6b, 0x61, 0x6d, 0x6d, 0xe2, 0x3b, 0x6a, 0x75, 0x6f, 0x76, 0x6c, 0xe2, 0x55,
|
||||
0x3b, 0x4b, 0x3b, 0x4e, 0x4a, 0x3b, 0x43, 0x3b, 0x56, 0x3b, 0x4b, 0x3b, 0x53, 0x3b, 0x50, 0x3b, 0x10c, 0x3b, 0x52, 0x3b,
|
||||
0x53, 0x3b, 0x4a, 0x62c, 0x627, 0x646, 0x6a4, 0x6cc, 0x6d5, 0x3b, 0x641, 0x626, 0x6a4, 0x631, 0x6cc, 0x6d5, 0x3b, 0x645, 0x627, 0x631,
|
||||
0x633, 0x3b, 0x622, 0x6a4, 0x631, 0x6cc, 0x644, 0x3b, 0x645, 0x626, 0x6cc, 0x3b, 0x62c, 0x648, 0x659, 0x623, 0x646, 0x3b, 0x62c, 0x648,
|
||||
0x659, 0x644, 0x627, 0x3b, 0x622, 0x6af, 0x648, 0x633, 0x62a, 0x3b, 0x633, 0x626, 0x67e, 0x62a, 0x627, 0x645, 0x631, 0x3b, 0x626, 0x648,
|
||||
0x6a9, 0x62a, 0x648, 0x6a4, 0x631, 0x3b, 0x646, 0x648, 0x6a4, 0x627, 0x645, 0x631, 0x3b, 0x62f, 0x626, 0x633, 0x627, 0x645, 0x631, 0x45,
|
||||
0x6e, 0x3b, 0x50, 0x65, 0x62, 0x3b, 0x4d, 0x61, 0x72, 0x3b, 0x41, 0x70, 0x72, 0x3b, 0x4d, 0x61, 0x79, 0x3b, 0x48, 0x75,
|
||||
0x6e, 0x3b, 0x48, 0x75, 0x6c, 0x3b, 0x41, 0x67, 0x3b, 0x53, 0x65, 0x74, 0x3b, 0x4f, 0x6b, 0x74, 0x3b, 0x4e, 0x6f, 0x62,
|
||||
0x3b, 0x44, 0x69, 0x73, 0x45, 0x3b, 0x50, 0x3b, 0x4d, 0x3b, 0x41, 0x3b, 0x4d, 0x3b, 0x48, 0x3b, 0x48, 0x3b, 0x41, 0x3b,
|
||||
0x53, 0x3b, 0x4f, 0x3b, 0x4e, 0x3b, 0x44
|
||||
0x6a, 0x77, 0x6f, 0x14b, 0xf3, 0x3b, 0x73, 0x61, 0x14b, 0x20, 0x6c, 0xf9, 0x6d, 0xd804, 0xdd0e, 0xd804, 0xdd1a, 0xd804, 0xdd2a, 0xd804,
|
||||
0xdd20, 0xd804, 0xdd22, 0xd804, 0xdd28, 0x3b, 0xd804, 0xdd1c, 0xd804, 0xdd2c, 0xd804, 0xdd1b, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd33, 0xd804, 0xdd22,
|
||||
0xd804, 0xdd2a, 0xd804, 0xdd20, 0xd804, 0xdd22, 0xd804, 0xdd28, 0x3b, 0xd804, 0xdd1f, 0xd804, 0xdd22, 0xd804, 0xdd34, 0xd804, 0xdd0c, 0xd804, 0xdd27, 0x3b,
|
||||
0xd804, 0xdd03, 0xd804, 0xdd2c, 0xd804, 0xdd1b, 0xd804, 0xdd33, 0xd804, 0xdd22, 0xd804, 0xdd28, 0xd804, 0xdd23, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1f, 0xd804,
|
||||
0xdd2c, 0x3b, 0xd804, 0xdd0e, 0xd804, 0xdd2a, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd0e, 0xd804, 0xdd2a, 0xd804, 0xdd23, 0xd804, 0xdd2d, 0x3b,
|
||||
0xd804, 0xdd03, 0xd804, 0xdd09, 0xd804, 0xdd27, 0xd804, 0xdd0c, 0xd804, 0xdd34, 0xd804, 0xdd11, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd2c, 0xd804,
|
||||
0xdd1b, 0xd804, 0xdd34, 0xd804, 0xdd11, 0xd804, 0xdd2c, 0xd804, 0xdd1f, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd27, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b,
|
||||
0xd804, 0xdd03, 0xd804, 0xdd27, 0xd804, 0xdd07, 0xd804, 0xdd34, 0xd804, 0xdd11, 0xd804, 0xdd2e, 0xd804, 0xdd1d, 0xd804, 0xdd27, 0xd804, 0xdd22, 0xd804, 0xdd34,
|
||||
0x3b, 0xd804, 0xdd1a, 0xd804, 0xdd27, 0xd804, 0xdd1e, 0xd804, 0xdd2c, 0xd804, 0xdd1f, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd27, 0xd804, 0xdd22, 0xd804,
|
||||
0xdd34, 0x3b, 0xd804, 0xdd13, 0xd804, 0xdd28, 0xd804, 0xdd25, 0xd804, 0xdd2c, 0xd804, 0xdd1f, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd27, 0xd804, 0xdd22,
|
||||
0xd804, 0xdd34, 0xd804, 0xdd0e, 0xd804, 0xdd1a, 0xd804, 0xdd2a, 0xd804, 0xdd20, 0xd804, 0xdd22, 0xd804, 0xdd28, 0x3b, 0xd804, 0xdd1c, 0xd804, 0xdd2c, 0xd804,
|
||||
0xdd1b, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd33, 0xd804, 0xdd22, 0xd804, 0xdd2a, 0xd804, 0xdd20, 0xd804, 0xdd22, 0xd804, 0xdd28, 0x3b, 0xd804, 0xdd1f,
|
||||
0xd804, 0xdd22, 0xd804, 0xdd34, 0xd804, 0xdd0c, 0xd804, 0xdd27, 0x3b, 0xd804, 0xdd03, 0xd804, 0xdd2c, 0xd804, 0xdd1b, 0xd804, 0xdd33, 0xd804, 0xdd22, 0xd804,
|
||||
0xdd28, 0xd804, 0xdd23, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1f, 0xd804, 0xdd2c, 0x3b, 0xd804, 0xdd0e, 0xd804, 0xdd2a, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0x3b,
|
||||
0xd804, 0xdd0e, 0xd804, 0xdd2a, 0xd804, 0xdd23, 0xd804, 0xdd2d, 0x3b, 0xd804, 0xdd03, 0xd804, 0xdd09, 0xd804, 0xdd27, 0xd804, 0xdd0c, 0xd804, 0xdd34, 0xd804,
|
||||
0xdd11, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd2c, 0xd804, 0xdd1b, 0xd804, 0xdd34, 0xd804, 0xdd11, 0xd804, 0xdd2c, 0xd804, 0xdd1f, 0xd804, 0xdd34,
|
||||
0xd804, 0xdd1d, 0xd804, 0xdd27, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd03, 0xd804, 0xdd27, 0xd804, 0xdd07, 0xd804, 0xdd34, 0xd804, 0xdd11, 0xd804,
|
||||
0xdd2c, 0xd804, 0xdd1d, 0xd804, 0xdd27, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1a, 0xd804, 0xdd27, 0xd804, 0xdd1e, 0xd804, 0xdd2c, 0xd804, 0xdd1f,
|
||||
0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd27, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd13, 0xd804, 0xdd28, 0xd804, 0xdd25, 0xd804, 0xdd2c, 0xd804,
|
||||
0xdd1f, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd27, 0xd804, 0xdd22, 0xd804, 0xdd34, 0xd804, 0xdd0e, 0xd804, 0xdd1a, 0xd804, 0xdd2a, 0x3b, 0xd804, 0xdd1c,
|
||||
0xd804, 0xdd2c, 0xd804, 0xdd1b, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1f, 0xd804, 0xdd22, 0xd804, 0xdd34, 0xd804, 0xdd0c, 0xd804, 0xdd27, 0x3b, 0xd804, 0xdd03,
|
||||
0xd804, 0xdd2c, 0xd804, 0xdd1b, 0xd804, 0xdd33, 0xd804, 0xdd22, 0xd804, 0xdd28, 0xd804, 0xdd23, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd1f, 0xd804, 0xdd2c, 0x3b,
|
||||
0xd804, 0xdd0e, 0xd804, 0xdd2a, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd0e, 0xd804, 0xdd2a, 0xd804, 0xdd23, 0xd804, 0xdd2d, 0x3b, 0xd804, 0xdd03,
|
||||
0xd804, 0xdd09, 0xd804, 0xdd27, 0xd804, 0xdd0c, 0xd804, 0xdd34, 0xd804, 0xdd11, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd2c, 0xd804, 0xdd1b, 0xd804,
|
||||
0xdd34, 0xd804, 0xdd11, 0xd804, 0xdd2c, 0xd804, 0xdd1f, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd27, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd03,
|
||||
0xd804, 0xdd27, 0xd804, 0xdd07, 0xd804, 0xdd34, 0xd804, 0xdd11, 0xd804, 0xdd2e, 0xd804, 0xdd1d, 0xd804, 0xdd27, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b, 0xd804,
|
||||
0xdd1a, 0xd804, 0xdd27, 0xd804, 0xdd1e, 0xd804, 0xdd2c, 0xd804, 0xdd1f, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd27, 0xd804, 0xdd22, 0xd804, 0xdd34, 0x3b,
|
||||
0xd804, 0xdd13, 0xd804, 0xdd28, 0xd804, 0xdd25, 0xd804, 0xdd2c, 0xd804, 0xdd1f, 0xd804, 0xdd34, 0xd804, 0xdd1d, 0xd804, 0xdd22, 0xd804, 0xdd34, 0xd804, 0xdd0e,
|
||||
0x3b, 0xd804, 0xdd1c, 0xd804, 0xdd2c, 0x3b, 0xd804, 0xdd1f, 0x3b, 0xd804, 0xdd03, 0xd804, 0xdd2c, 0x3b, 0xd804, 0xdd1f, 0xd804, 0xdd2c, 0x3b, 0xd804,
|
||||
0xdd0e, 0xd804, 0xdd2a, 0xd804, 0xdd1a, 0xd804, 0xdd34, 0x3b, 0xd804, 0xdd0e, 0xd804, 0xdd2a, 0x3b, 0xd804, 0xdd03, 0x3b, 0xd804, 0xdd25, 0xd804, 0xdd2c,
|
||||
0x3b, 0xd804, 0xdd03, 0xd804, 0xdd27, 0x3b, 0xd804, 0xdd1a, 0xd804, 0xdd27, 0x3b, 0xd804, 0xdd13, 0xd804, 0xdd28, 0x57, 0x69, 0xf3, 0x74, 0x68,
|
||||
0x65, 0x21f, 0x69, 0x6b, 0x61, 0x20, 0x57, 0xed, 0x3b, 0x54, 0x68, 0x69, 0x79, 0xf3, 0x21f, 0x65, 0x79, 0x75, 0x14b, 0x6b,
|
||||
0x61, 0x20, 0x57, 0xed, 0x3b, 0x49, 0x161, 0x74, 0xe1, 0x77, 0x69, 0x10d, 0x68, 0x61, 0x79, 0x61, 0x7a, 0x61, 0x14b, 0x20,
|
||||
0x57, 0xed, 0x3b, 0x50, 0x21f, 0x65, 0x17e, 0xed, 0x74, 0x21f, 0x6f, 0x20, 0x57, 0xed, 0x3b, 0x10c, 0x68, 0x61, 0x14b, 0x77,
|
||||
0xe1, 0x70, 0x65, 0x74, 0x21f, 0x6f, 0x20, 0x57, 0xed, 0x3b, 0x57, 0xed, 0x70, 0x61, 0x7a, 0x75, 0x6b, 0x21f, 0x61, 0x2d,
|
||||
0x77, 0x61, 0x161, 0x74, 0xe9, 0x20, 0x57, 0xed, 0x3b, 0x10c, 0x68, 0x61, 0x14b, 0x70, 0x21f, 0xe1, 0x73, 0x61, 0x70, 0x61,
|
||||
0x20, 0x57, 0xed, 0x3b, 0x57, 0x61, 0x73, 0xfa, 0x74, 0x21f, 0x75, 0x14b, 0x20, 0x57, 0xed, 0x3b, 0x10c, 0x68, 0x61, 0x14b,
|
||||
0x77, 0xe1, 0x70, 0x65, 0x1e7, 0x69, 0x20, 0x57, 0xed, 0x3b, 0x10c, 0x68, 0x61, 0x14b, 0x77, 0xe1, 0x70, 0x65, 0x2d, 0x6b,
|
||||
0x61, 0x73, 0x6e, 0xe1, 0x20, 0x57, 0xed, 0x3b, 0x57, 0x61, 0x6e, 0xed, 0x79, 0x65, 0x74, 0x75, 0x20, 0x57, 0xed, 0x3b,
|
||||
0x54, 0x21f, 0x61, 0x68, 0xe9, 0x6b, 0x61, 0x70, 0x161, 0x75, 0x14b, 0x20, 0x57, 0xed, 0x6a9, 0x627, 0x646, 0x648, 0x648, 0x646,
|
||||
0x6cc, 0x20, 0x62f, 0x648, 0x648, 0x6d5, 0x645, 0x3b, 0x634, 0x648, 0x628, 0x627, 0x62a, 0x3b, 0x626, 0x627, 0x632, 0x627, 0x631, 0x3b,
|
||||
0x646, 0x6cc, 0x633, 0x627, 0x646, 0x3b, 0x626, 0x627, 0x6cc, 0x627, 0x631, 0x3b, 0x62d, 0x648, 0x632, 0x6d5, 0x6cc, 0x631, 0x627, 0x646,
|
||||
0x3b, 0x62a, 0x6d5, 0x645, 0x648, 0x648, 0x632, 0x3b, 0x626, 0x627, 0x628, 0x3b, 0x626, 0x6d5, 0x6cc, 0x644, 0x648, 0x648, 0x644, 0x3b,
|
||||
0x62a, 0x634, 0x631, 0x6cc, 0x646, 0x6cc, 0x20, 0x6cc, 0x6d5, 0x6a9, 0x6d5, 0x645, 0x3b, 0x62a, 0x634, 0x631, 0x6cc, 0x646, 0x6cc, 0x20,
|
||||
0x62f, 0x648, 0x648, 0x6d5, 0x645, 0x3b, 0x6a9, 0x627, 0x646, 0x648, 0x646, 0x6cc, 0x20, 0x6cc, 0x6d5, 0x6a9, 0x6d5, 0x645, 0x6a9, 0x3b,
|
||||
0x634, 0x3b, 0x626, 0x3b, 0x646, 0x3b, 0x626, 0x3b, 0x62d, 0x3b, 0x62a, 0x3b, 0x626, 0x3b, 0x626, 0x3b, 0x62a, 0x3b, 0x62a, 0x3b,
|
||||
0x6a9, 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x3b, 0x66, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x3b, 0x6d, 0x11b, 0x72, 0x63,
|
||||
0x3b, 0x61, 0x70, 0x72, 0x79, 0x6c, 0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6a, 0x75, 0x6e, 0x69, 0x6a, 0x3b, 0x6a, 0x75, 0x6c,
|
||||
0x69, 0x6a, 0x3b, 0x61, 0x77, 0x67, 0x75, 0x73, 0x74, 0x3b, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3b,
|
||||
0x6f, 0x6b, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x3b, 0x6e, 0x6f, 0x77, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3b, 0x64, 0x65, 0x63,
|
||||
0x65, 0x6d, 0x62, 0x65, 0x72, 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x61, 0x3b, 0x66, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72,
|
||||
0x61, 0x3b, 0x6d, 0x11b, 0x72, 0x63, 0x61, 0x3b, 0x61, 0x70, 0x72, 0x79, 0x6c, 0x61, 0x3b, 0x6d, 0x61, 0x6a, 0x61, 0x3b,
|
||||
0x6a, 0x75, 0x6e, 0x69, 0x6a, 0x61, 0x3b, 0x6a, 0x75, 0x6c, 0x69, 0x6a, 0x61, 0x3b, 0x61, 0x77, 0x67, 0x75, 0x73, 0x74,
|
||||
0x61, 0x3b, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x72, 0x61, 0x3b, 0x6f, 0x6b, 0x74, 0x6f, 0x62, 0x72, 0x61, 0x3b,
|
||||
0x6e, 0x6f, 0x77, 0x65, 0x6d, 0x62, 0x72, 0x61, 0x3b, 0x64, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x72, 0x61, 0x6a, 0x61, 0x6e,
|
||||
0x3b, 0x66, 0x65, 0x62, 0x3b, 0x6d, 0x11b, 0x72, 0x3b, 0x61, 0x70, 0x72, 0x3b, 0x6d, 0x61, 0x6a, 0x3b, 0x6a, 0x75, 0x6e,
|
||||
0x3b, 0x6a, 0x75, 0x6c, 0x3b, 0x61, 0x77, 0x67, 0x3b, 0x73, 0x65, 0x70, 0x3b, 0x6f, 0x6b, 0x74, 0x3b, 0x6e, 0x6f, 0x77,
|
||||
0x3b, 0x64, 0x65, 0x63, 0x6a, 0x61, 0x6e, 0x2e, 0x3b, 0x66, 0x65, 0x62, 0x2e, 0x3b, 0x6d, 0x11b, 0x72, 0x2e, 0x3b, 0x61,
|
||||
0x70, 0x72, 0x2e, 0x3b, 0x6d, 0x61, 0x6a, 0x2e, 0x3b, 0x6a, 0x75, 0x6e, 0x2e, 0x3b, 0x6a, 0x75, 0x6c, 0x2e, 0x3b, 0x61,
|
||||
0x77, 0x67, 0x2e, 0x3b, 0x73, 0x65, 0x70, 0x2e, 0x3b, 0x6f, 0x6b, 0x74, 0x2e, 0x3b, 0x6e, 0x6f, 0x77, 0x2e, 0x3b, 0x64,
|
||||
0x65, 0x63, 0x2e, 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x3b, 0x66, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x3b, 0x6d, 0x11b,
|
||||
0x72, 0x63, 0x3b, 0x61, 0x70, 0x72, 0x79, 0x6c, 0x3b, 0x6d, 0x65, 0x6a, 0x61, 0x3b, 0x6a, 0x75, 0x6e, 0x69, 0x6a, 0x3b,
|
||||
0x6a, 0x75, 0x6c, 0x69, 0x6a, 0x3b, 0x61, 0x77, 0x67, 0x75, 0x73, 0x74, 0x3b, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62,
|
||||
0x65, 0x72, 0x3b, 0x6f, 0x6b, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x3b, 0x6e, 0x6f, 0x77, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3b,
|
||||
0x64, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x61, 0x3b, 0x66, 0x65, 0x62, 0x72,
|
||||
0x75, 0x61, 0x72, 0x61, 0x3b, 0x6d, 0x11b, 0x72, 0x63, 0x61, 0x3b, 0x61, 0x70, 0x72, 0x79, 0x6c, 0x61, 0x3b, 0x6d, 0x65,
|
||||
0x6a, 0x65, 0x3b, 0x6a, 0x75, 0x6e, 0x69, 0x6a, 0x61, 0x3b, 0x6a, 0x75, 0x6c, 0x69, 0x6a, 0x61, 0x3b, 0x61, 0x77, 0x67,
|
||||
0x75, 0x73, 0x74, 0x61, 0x3b, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x72, 0x61, 0x3b, 0x6f, 0x6b, 0x74, 0x6f, 0x62,
|
||||
0x72, 0x61, 0x3b, 0x6e, 0x6f, 0x77, 0x65, 0x6d, 0x62, 0x72, 0x61, 0x3b, 0x64, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x72, 0x61,
|
||||
0x6a, 0x61, 0x6e, 0x3b, 0x66, 0x65, 0x62, 0x3b, 0x6d, 0x11b, 0x72, 0x3b, 0x61, 0x70, 0x72, 0x3b, 0x6d, 0x65, 0x6a, 0x3b,
|
||||
0x6a, 0x75, 0x6e, 0x3b, 0x6a, 0x75, 0x6c, 0x3b, 0x61, 0x77, 0x67, 0x3b, 0x73, 0x65, 0x70, 0x3b, 0x6f, 0x6b, 0x74, 0x3b,
|
||||
0x6e, 0x6f, 0x77, 0x3b, 0x64, 0x65, 0x63, 0x6a, 0x61, 0x6e, 0x2e, 0x3b, 0x66, 0x65, 0x62, 0x2e, 0x3b, 0x6d, 0x11b, 0x72,
|
||||
0x2e, 0x3b, 0x61, 0x70, 0x72, 0x2e, 0x3b, 0x6d, 0x65, 0x6a, 0x2e, 0x3b, 0x6a, 0x75, 0x6e, 0x2e, 0x3b, 0x6a, 0x75, 0x6c,
|
||||
0x2e, 0x3b, 0x61, 0x77, 0x67, 0x2e, 0x3b, 0x73, 0x65, 0x70, 0x2e, 0x3b, 0x6f, 0x6b, 0x74, 0x2e, 0x3b, 0x6e, 0x6f, 0x77,
|
||||
0x2e, 0x3b, 0x64, 0x65, 0x63, 0x2e, 0x72, 0x61, 0x67, 0x73, 0x3b, 0x77, 0x61, 0x73, 0x73, 0x61, 0x72, 0x69, 0x6e, 0x73,
|
||||
0x3b, 0x70, 0x16b, 0x6c, 0x69, 0x73, 0x3b, 0x73, 0x61, 0x6b, 0x6b, 0x69, 0x73, 0x3b, 0x7a, 0x61, 0x6c, 0x6c, 0x61, 0x77,
|
||||
0x73, 0x3b, 0x73, 0x12b, 0x6d, 0x65, 0x6e, 0x69, 0x73, 0x3b, 0x6c, 0x12b, 0x70, 0x61, 0x3b, 0x64, 0x61, 0x67, 0x67, 0x69,
|
||||
0x73, 0x3b, 0x73, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x73, 0x3b, 0x73, 0x70, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x73, 0x3b, 0x6c,
|
||||
0x61, 0x70, 0x6b, 0x72, 0x16b, 0x74, 0x69, 0x73, 0x3b, 0x73, 0x61, 0x6c, 0x6c, 0x61, 0x77, 0x73, 0x72, 0x61, 0x67, 0x3b,
|
||||
0x77, 0x61, 0x73, 0x3b, 0x70, 0x16b, 0x6c, 0x3b, 0x73, 0x61, 0x6b, 0x3b, 0x7a, 0x61, 0x6c, 0x3b, 0x73, 0x12b, 0x6d, 0x3b,
|
||||
0x6c, 0x12b, 0x70, 0x3b, 0x64, 0x61, 0x67, 0x3b, 0x73, 0x69, 0x6c, 0x3b, 0x73, 0x70, 0x61, 0x3b, 0x6c, 0x61, 0x70, 0x3b,
|
||||
0x73, 0x61, 0x6c, 0x52, 0x3b, 0x57, 0x3b, 0x50, 0x3b, 0x53, 0x3b, 0x5a, 0x3b, 0x53, 0x3b, 0x4c, 0x3b, 0x44, 0x3b, 0x53,
|
||||
0x3b, 0x53, 0x3b, 0x4c, 0x3b, 0x53, 0x75, 0x111, 0x111, 0xe2, 0x69, 0x76, 0x65, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x6b,
|
||||
0x75, 0x6f, 0x76, 0xe2, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x6e, 0x6a, 0x75, 0x68, 0x10d, 0xe2, 0x6d, 0xe1, 0xe1, 0x6e,
|
||||
0x75, 0x3b, 0x63, 0x75, 0xe1, 0x14b, 0x75, 0x69, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x76, 0x79, 0x65, 0x73, 0x69, 0x6d,
|
||||
0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x6b, 0x65, 0x73, 0x69, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x73, 0x79, 0x65, 0x69, 0x6e,
|
||||
0x69, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x70, 0x6f, 0x72, 0x67, 0x65, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x10d, 0x6f,
|
||||
0x68, 0x10d, 0xe2, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x72, 0x6f, 0x6f, 0x76, 0x76, 0xe2, 0x64, 0x6d, 0xe1, 0xe1, 0x6e,
|
||||
0x75, 0x3b, 0x73, 0x6b, 0x61, 0x6d, 0x6d, 0xe2, 0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x3b, 0x6a, 0x75, 0x6f, 0x76, 0x6c, 0xe2,
|
||||
0x6d, 0xe1, 0xe1, 0x6e, 0x75, 0x75, 0x111, 0x69, 0x76, 0x3b, 0x6b, 0x75, 0x6f, 0x76, 0xe2, 0x3b, 0x6e, 0x6a, 0x75, 0x68,
|
||||
0x10d, 0xe2, 0x3b, 0x63, 0x75, 0xe1, 0x14b, 0x75, 0x69, 0x3b, 0x76, 0x79, 0x65, 0x73, 0x69, 0x3b, 0x6b, 0x65, 0x73, 0x69,
|
||||
0x3b, 0x73, 0x79, 0x65, 0x69, 0x6e, 0x69, 0x3b, 0x70, 0x6f, 0x72, 0x67, 0x65, 0x3b, 0x10d, 0x6f, 0x68, 0x10d, 0xe2, 0x3b,
|
||||
0x72, 0x6f, 0x6f, 0x76, 0x76, 0xe2, 0x64, 0x3b, 0x73, 0x6b, 0x61, 0x6d, 0x6d, 0xe2, 0x3b, 0x6a, 0x75, 0x6f, 0x76, 0x6c,
|
||||
0xe2, 0x55, 0x3b, 0x4b, 0x3b, 0x4e, 0x4a, 0x3b, 0x43, 0x3b, 0x56, 0x3b, 0x4b, 0x3b, 0x53, 0x3b, 0x50, 0x3b, 0x10c, 0x3b,
|
||||
0x52, 0x3b, 0x53, 0x3b, 0x4a, 0x62c, 0x627, 0x646, 0x6a4, 0x6cc, 0x6d5, 0x3b, 0x641, 0x626, 0x6a4, 0x631, 0x6cc, 0x6d5, 0x3b, 0x645,
|
||||
0x627, 0x631, 0x633, 0x3b, 0x622, 0x6a4, 0x631, 0x6cc, 0x644, 0x3b, 0x645, 0x626, 0x6cc, 0x3b, 0x62c, 0x648, 0x659, 0x623, 0x646, 0x3b,
|
||||
0x62c, 0x648, 0x659, 0x644, 0x627, 0x3b, 0x622, 0x6af, 0x648, 0x633, 0x62a, 0x3b, 0x633, 0x626, 0x67e, 0x62a, 0x627, 0x645, 0x631, 0x3b,
|
||||
0x626, 0x648, 0x6a9, 0x62a, 0x648, 0x6a4, 0x631, 0x3b, 0x646, 0x648, 0x6a4, 0x627, 0x645, 0x631, 0x3b, 0x62f, 0x626, 0x633, 0x627, 0x645,
|
||||
0x631, 0x45, 0x6e, 0x3b, 0x50, 0x65, 0x62, 0x3b, 0x4d, 0x61, 0x72, 0x3b, 0x41, 0x70, 0x72, 0x3b, 0x4d, 0x61, 0x79, 0x3b,
|
||||
0x48, 0x75, 0x6e, 0x3b, 0x48, 0x75, 0x6c, 0x3b, 0x41, 0x67, 0x3b, 0x53, 0x65, 0x74, 0x3b, 0x4f, 0x6b, 0x74, 0x3b, 0x4e,
|
||||
0x6f, 0x62, 0x3b, 0x44, 0x69, 0x73, 0x45, 0x3b, 0x50, 0x3b, 0x4d, 0x3b, 0x41, 0x3b, 0x4d, 0x3b, 0x48, 0x3b, 0x48, 0x3b,
|
||||
0x41, 0x3b, 0x53, 0x3b, 0x4f, 0x3b, 0x4e, 0x3b, 0x44
|
||||
};
|
||||
// GENERATED PART ENDS HERE
|
||||
|
||||
|
@ -1437,6 +1437,9 @@ void tst_QLocale::negativeZero_data()
|
||||
QTest::newRow("Arabic")
|
||||
<< QLocale::Arabic << QLocale::ArabicScript << QLocale::AnyCountry
|
||||
<< QStringView(u"\u0660");
|
||||
QTest::newRow("Chakma")
|
||||
<< QLocale::Chakma << QLocale::ChakmaScript << QLocale::AnyCountry
|
||||
<< QStringView(u"\xD804\xDD36"); // A surrogate pair.
|
||||
}
|
||||
|
||||
void tst_QLocale::negativeZero()
|
||||
@ -1918,15 +1921,14 @@ void tst_QLocale::macDefaultLocale()
|
||||
// On OS X the decimal point and group separator are configurable
|
||||
// independently of the locale. Verify that they have one of the
|
||||
// allowed values and are not the same.
|
||||
QVERIFY(locale.decimalPoint() == QChar('.') || locale.decimalPoint() == QChar(','));
|
||||
if (!(locale.numberOptions() & QLocale::OmitGroupSeparator)) {
|
||||
QVERIFY(locale.groupSeparator() == QChar(',')
|
||||
|| locale.groupSeparator() == QChar('.')
|
||||
|| locale.groupSeparator() == QChar('\xA0') // no-breaking space
|
||||
|| locale.groupSeparator() == QChar('\'')
|
||||
|| locale.groupSeparator() == QChar());
|
||||
QVERIFY(locale.decimalPoint() != locale.groupSeparator());
|
||||
}
|
||||
QVERIFY(locale.decimalPoint() == QStringView(u".")
|
||||
|| locale.decimalPoint() == QStringView(u","));
|
||||
QVERIFY(locale.groupSeparator() == QStringView(u",")
|
||||
|| locale.groupSeparator() == QStringView(u".")
|
||||
|| locale.groupSeparator() == QStringView(u"\xA0") // no-breaking space
|
||||
|| locale.groupSeparator() == QStringView(u"'")
|
||||
|| locale.groupSeparator().isEmpty());
|
||||
QVERIFY(locale.decimalPoint() != locale.groupSeparator());
|
||||
|
||||
// make sure we are using the system to parse them
|
||||
QCOMPARE(locale.toString(1234.56), systemLocaleFormatNumber(QString("1,234.56")));
|
||||
@ -2067,8 +2069,8 @@ void tst_QLocale::windowsDefaultLocale()
|
||||
QLocale locale = QLocale::system();
|
||||
|
||||
// make sure we are seeing the system's format strings
|
||||
QCOMPARE(locale.decimalPoint(), QChar('@'));
|
||||
QCOMPARE(locale.groupSeparator(), QChar('?'));
|
||||
QCOMPARE(locale.decimalPoint(), QStringView(u"@"));
|
||||
QCOMPARE(locale.groupSeparator(), QStringView(u"?"));
|
||||
QCOMPARE(locale.dateFormat(QLocale::ShortFormat), shortDateFormat);
|
||||
QCOMPARE(locale.dateFormat(QLocale::LongFormat), longDateFormat);
|
||||
QCOMPARE(locale.timeFormat(QLocale::ShortFormat), shortTimeFormat);
|
||||
|
@ -201,14 +201,7 @@ def getNumberSystems(cache={}):
|
||||
'numberingSystems'):
|
||||
# ns has form: [u'numberingSystem', [(u'digits', u'0123456789'), (u'type', u'numeric'), (u'id', u'latn')]]
|
||||
entry = dict(ns[1])
|
||||
name = entry[u'id']
|
||||
if u'digits' in entry and ord(entry[u'digits'][0]) > 0xffff:
|
||||
# FIXME, QTBUG-69324: make this redundant:
|
||||
# omit number system if zero doesn't fit in single-char16 UTF-16 :-(
|
||||
sys.stderr.write('skipping number system "%s" [can\'t represent its zero, U+%X]\n'
|
||||
% (name, ord(entry[u'digits'][0])))
|
||||
else:
|
||||
cache[name] = entry
|
||||
cache[entry[u'id']] = entry
|
||||
return cache
|
||||
|
||||
def _generateLocaleInfo(path, language_code, script_code, country_code, variant_code=""):
|
||||
@ -309,7 +302,9 @@ def _generateLocaleInfo(path, language_code, script_code, country_code, variant_
|
||||
result['list'] = get_number_in_system(path, "numbers/symbols/list", numbering_system)
|
||||
result['percent'] = get_number_in_system(path, "numbers/symbols/percentSign", numbering_system)
|
||||
try:
|
||||
result['zero'] = getNumberSystems()[numbering_system][u"digits"][0]
|
||||
digits = getNumberSystems()[numbering_system][u"digits"];
|
||||
assert len(digits) == 10 and all(ord(d) - i == ord(digits[0]) for i, d in enumerate(digits))
|
||||
result['zero'] = digits[0]
|
||||
except Exception as e:
|
||||
sys.stderr.write("Native zero detection problem: %s\n" % repr(e))
|
||||
result['zero'] = get_number_in_system(path, "numbers/symbols/nativeZeroDigit", numbering_system)
|
||||
|
@ -43,17 +43,6 @@ def camel(seq):
|
||||
def camelCase(words):
|
||||
return ''.join(camel(iter(words)))
|
||||
|
||||
def ordStr(c):
|
||||
if len(c) == 1:
|
||||
return str(ord(c))
|
||||
raise xpathlite.Error('Unable to handle value "%s"' % addEscapes(c))
|
||||
|
||||
# Fix for a problem with QLocale returning a character instead of
|
||||
# strings for QLocale::exponential() and others. So we fallback to
|
||||
# default values in these cases.
|
||||
def fixOrdStr(c, d):
|
||||
return str(ord(c if len(c) == 1 else d))
|
||||
|
||||
def startCount(c, text): # strspn
|
||||
"""First index in text where it doesn't have a character in c"""
|
||||
assert text and text[0] in c
|
||||
@ -121,18 +110,17 @@ class Locale:
|
||||
yield camelCase(('standalone', L, scale))
|
||||
|
||||
# Expected to be numbers, read with int():
|
||||
__asint = ("decimal", "group", "zero",
|
||||
"list", "percent", "minus", "plus", "exp",
|
||||
"currencyDigits", "currencyRounding")
|
||||
# Single character; use the code-point number for each:
|
||||
__asord = ("quotationStart", "quotationEnd",
|
||||
"alternateQuotationStart", "alternateQuotationEnd")
|
||||
__asint = ("currencyDigits", "currencyRounding")
|
||||
# Convert day-name to Qt day-of-week number:
|
||||
__asdow = ("firstDayOfWeek", "weekendStart", "weekendEnd")
|
||||
# Convert from CLDR format-strings to QDateTimeParser ones:
|
||||
__asfmt = ("longDateFormat", "shortDateFormat", "longTimeFormat", "shortTimeFormat")
|
||||
# Just use the raw text:
|
||||
__astxt = ("language", "languageEndonym", "script", "country", "countryEndonym",
|
||||
"decimal", "group", "zero",
|
||||
"list", "percent", "minus", "plus", "exp",
|
||||
"quotationStart", "quotationEnd",
|
||||
"alternateQuotationStart", "alternateQuotationEnd",
|
||||
"listPatternPartStart", "listPatternPartMiddle",
|
||||
"listPatternPartEnd", "listPatternPartTwo", "am", "pm",
|
||||
'byte_unit', 'byte_si_quantified', 'byte_iec_quantified',
|
||||
@ -154,13 +142,7 @@ class Locale:
|
||||
texts.\n"""
|
||||
data = {}
|
||||
for k in cls.__asint:
|
||||
data['listDelim' if k == 'list' else k] = int(lookup(k))
|
||||
|
||||
for k in cls.__asord:
|
||||
value = lookup(k)
|
||||
assert len(value) == 1, \
|
||||
(k, value, 'value should be exactly one character')
|
||||
data[k] = ord(value)
|
||||
data[k] = int(lookup(k))
|
||||
|
||||
for k in cls.__asdow:
|
||||
data[k] = cls.__qDoW[lookup(k)]
|
||||
@ -169,7 +151,7 @@ class Locale:
|
||||
data[k] = convertFormat(lookup(k))
|
||||
|
||||
for k in cls.__astxt + tuple(cls.propsMonthDay('days')):
|
||||
data[k] = lookup(k)
|
||||
data['listDelim' if k == 'list' else k] = lookup(k)
|
||||
|
||||
for k in cls.propsMonthDay('months'):
|
||||
data[k] = dict((cal, lookup('_'.join((k, cal)))) for cal in calendars)
|
||||
@ -184,11 +166,8 @@ class Locale:
|
||||
print inner + "<%s>" % key + get(key) + "</%s>" % key
|
||||
print inner + "<%scode>" % key + get(key + '_code') + "</%scode>" % key
|
||||
|
||||
for key in ('decimal', 'group', 'zero'):
|
||||
print inner + "<%s>" % key + ordStr(get(key)) + "</%s>" % key
|
||||
for key, std in (('list', ';'), ('percent', '%'),
|
||||
('minus', '-'), ('plus', '+'), ('exp', 'e')):
|
||||
print inner + "<%s>" % key + fixOrdStr(get(key), std) + "</%s>" % key
|
||||
for key in ('decimal', 'group', 'zero', 'list', 'percent', 'minus', 'plus', 'exp'):
|
||||
print inner + "<%s>" % key + get(key) + "</%s>" % key
|
||||
|
||||
for key in ('language_endonym', 'country_endonym',
|
||||
'quotationStart', 'quotationEnd',
|
||||
|
@ -472,6 +472,7 @@ def main():
|
||||
data_temp_file.write("};\n\n")
|
||||
|
||||
list_pattern_part_data = StringData('list_pattern_part_data')
|
||||
single_character_data = StringData('single_character_data')
|
||||
date_format_data = StringData('date_format_data')
|
||||
time_format_data = StringData('time_format_data')
|
||||
days_data = StringData('days_data')
|
||||
@ -491,19 +492,6 @@ def main():
|
||||
+ ' lang ' # IDs
|
||||
+ 'script '
|
||||
+ ' terr '
|
||||
+ ' dec ' # Numeric punctuation:
|
||||
+ ' group '
|
||||
+ ' list ' # List delimiter
|
||||
+ ' prcnt ' # Arithmetic symbols:
|
||||
+ ' zero '
|
||||
+ ' minus '
|
||||
+ ' plus '
|
||||
+ ' exp '
|
||||
# Width 8 + comma - to make space for these wide labels !
|
||||
+ ' quotOpn ' # Quotation marks
|
||||
+ ' quotEnd '
|
||||
+ 'altQtOpn '
|
||||
+ 'altQtEnd '
|
||||
|
||||
# Range entries (all start-indices, then all sizes):
|
||||
# Width 5 + comma:
|
||||
@ -511,6 +499,20 @@ def main():
|
||||
+ 'lpMid '
|
||||
+ 'lpEnd '
|
||||
+ 'lPair '
|
||||
+ 'lDelm ' # List delimiter
|
||||
# Representing numbers:
|
||||
+ ' dec '
|
||||
+ 'group '
|
||||
+ 'prcnt '
|
||||
+ ' zero '
|
||||
+ 'minus '
|
||||
+ 'plus '
|
||||
+ ' exp '
|
||||
# Quotation marks
|
||||
+ 'qtOpn '
|
||||
+ 'qtEnd '
|
||||
+ 'altQO '
|
||||
+ 'altQE '
|
||||
+ 'lDFmt ' # Date format
|
||||
+ 'sDFmt '
|
||||
+ 'lTFmt ' # Time format
|
||||
@ -533,7 +535,7 @@ def main():
|
||||
+ 'ntLng ' # Name of language in itself, and of territory:
|
||||
+ 'ntTer '
|
||||
# Width 3 + comma for each size; no header
|
||||
+ ' ' * 25
|
||||
+ ' ' * 37
|
||||
|
||||
# Strays (char array, bit-fields):
|
||||
# Width 8+4 + comma
|
||||
@ -556,17 +558,10 @@ def main():
|
||||
line_format = (' { '
|
||||
# Locale-identifier:
|
||||
+ '%6d,' * 3
|
||||
# Numeric formats, list delimiter:
|
||||
+ '%6d,' * 8
|
||||
# Quotation marks:
|
||||
+ '%8d,' * 4
|
||||
|
||||
# List patterns, date/time formats, month/day names, am/pm:
|
||||
# SI/IEC byte-unit abbreviations:
|
||||
# Currency and endonyms
|
||||
+ '%5d,' * 25
|
||||
# Offsets for starts of ranges:
|
||||
+ '%5d,' * 37
|
||||
# Sizes for the same:
|
||||
+ '%3d,' * 25
|
||||
+ '%3d,' * 37
|
||||
|
||||
# Currency ISO code:
|
||||
+ ' %10s, '
|
||||
@ -578,9 +573,13 @@ def main():
|
||||
for key in locale_keys:
|
||||
l = locale_map[key]
|
||||
# Sequence of StringDataToken:
|
||||
ranges = (tuple(list_pattern_part_data.append(p) for p in # 4 entries:
|
||||
ranges = (tuple(list_pattern_part_data.append(p) for p in # 5 entries:
|
||||
(l.listPatternPartStart, l.listPatternPartMiddle,
|
||||
l.listPatternPartEnd, l.listPatternPartTwo)) +
|
||||
l.listPatternPartEnd, l.listPatternPartTwo, l.listDelim)) +
|
||||
tuple(single_character_data.append(p) for p in # 11 entries
|
||||
(l.decimal, l.group, l.percent, l.zero, l.minus, l.plus, l.exp,
|
||||
l.quotationStart, l.quotationEnd,
|
||||
l.alternateQuotationStart, l.alternateQuotationEnd)) +
|
||||
tuple (date_format_data.append(f) for f in # 2 entries:
|
||||
(l.longDateFormat, l.shortDateFormat)) +
|
||||
tuple(time_format_data.append(f) for f in # 2 entries:
|
||||
@ -598,23 +597,11 @@ def main():
|
||||
currency_format_data.append(l.currencyNegativeFormat),
|
||||
endonyms_data.append(l.languageEndonym),
|
||||
endonyms_data.append(l.countryEndonym)) # 6 entries
|
||||
) # Total: 25 entries
|
||||
assert len(ranges) == 25
|
||||
) # Total: 37 entries
|
||||
assert len(ranges) == 37
|
||||
|
||||
data_temp_file.write(line_format
|
||||
% ((key[0], key[1], key[2],
|
||||
l.decimal,
|
||||
l.group,
|
||||
l.listDelim,
|
||||
l.percent,
|
||||
l.zero,
|
||||
l.minus,
|
||||
l.plus,
|
||||
l.exp,
|
||||
l.quotationStart,
|
||||
l.quotationEnd,
|
||||
l.alternateQuotationStart,
|
||||
l.alternateQuotationEnd) +
|
||||
% ((key[0], key[1], key[2]) +
|
||||
tuple(r.index for r in ranges) +
|
||||
tuple(r.length for r in ranges) +
|
||||
(currencyIsoCodeData(l.currencyIsoCode),
|
||||
@ -625,7 +612,7 @@ def main():
|
||||
l.weekendEnd))
|
||||
+ ", // %s/%s/%s\n" % (l.language, l.script, l.country))
|
||||
data_temp_file.write(line_format # All zeros, matching the format:
|
||||
% ( (0,) * (3 + 8 + 4) + (0,) * 25 * 2
|
||||
% ( (0,) * 3 + (0,) * 37 * 2
|
||||
+ (currencyIsoCodeData(0),)
|
||||
+ (0,) * 2
|
||||
+ (0,) * 3)
|
||||
@ -633,8 +620,8 @@ def main():
|
||||
data_temp_file.write("};\n")
|
||||
|
||||
# StringData tables:
|
||||
for data in (list_pattern_part_data, date_format_data,
|
||||
time_format_data, days_data,
|
||||
for data in (list_pattern_part_data, single_character_data,
|
||||
date_format_data, time_format_data, days_data,
|
||||
byte_unit_data, am_data, pm_data, currency_symbol_data,
|
||||
currency_display_name_data, currency_format_data,
|
||||
endonyms_data):
|
||||
|
Loading…
x
Reference in New Issue
Block a user