Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qlocale_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// Copyright (C) 2016 Intel Corporation.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4// Qt-Security score:critical reason:data-parser
5
6#ifndef QLOCALE_P_H
7#define QLOCALE_P_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists for the convenience
14// of internal files. This header file may change from version to version
15// without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include "qlocale.h"
21
22#include <QtCore/qcalendar.h>
23#include <QtCore/qlist.h>
24#include <QtCore/qnumeric.h>
25#include <QtCore/private/qnumeric_p.h>
26#include <QtCore/qstring.h>
27#include <QtCore/qvariant.h>
28#include <QtCore/qvarlengtharray.h>
29#ifdef Q_OS_WASM
30#include <private/qstdweb_p.h>
31#endif
32
33#include <limits>
34#include <cmath>
35#include <string_view>
36
37QT_BEGIN_NAMESPACE
38
39template <typename T> struct QSimpleParsedNumber
40{
41 T result;
42 // When used < 0, -used is how much was used, but it was an error.
43 qsizetype used;
44 bool ok() const { return used > 0; }
45};
46
47template <typename MaskType, uchar Lowest> struct QCharacterSetMatch
48{
49 static constexpr int MaxRange = std::numeric_limits<MaskType>::digits;
50 MaskType mask;
51
52 constexpr QCharacterSetMatch(std::string_view set) noexcept
53 : mask(0)
54 {
55 for (char c : set) {
56 int idx = uchar(c) - Lowest;
57 mask |= MaskType(1) << idx;
58 }
59 }
60
61 constexpr bool matches(uchar c) const noexcept
62 {
63 unsigned idx = c - Lowest;
64 if (idx >= MaxRange)
65 return false;
66 return (mask >> idx) & 1;
67 }
68};
69
70namespace QtPrivate {
71inline constexpr char ascii_space_chars[] =
72 "\t" // 9: HT - horizontal tab
73 "\n" // 10: LF - line feed
74 "\v" // 11: VT - vertical tab
75 "\f" // 12: FF - form feed
76 "\r" // 13: CR - carriage return
77 " "; // 32: space
78
79template <const char *Set, int ForcedLowest = -1>
80inline constexpr auto makeCharacterSetMatch() noexcept
81{
82 constexpr auto view = std::string_view(Set);
83 constexpr uchar MinElement = *std::min_element(view.begin(), view.end());
84 constexpr uchar MaxElement = *std::max_element(view.begin(), view.end());
85 constexpr int Range = MaxElement - MinElement;
86 static_assert(Range < 64, "Characters in the set are 64 or more values apart");
87
88 if constexpr (ForcedLowest >= 0) {
89 // use the force
90 static_assert(ForcedLowest <= int(MinElement), "The force is not with you");
91 using MaskType = std::conditional_t<MaxElement - ForcedLowest < 32, quint32, quint64>;
92 return QCharacterSetMatch<MaskType, ForcedLowest>(view);
93 } else if constexpr (MaxElement < std::numeric_limits<qregisteruint>::digits) {
94 // if we can use a Lowest of zero, we can remove a subtraction
95 // from the matches() code at runtime
96 using MaskType = std::conditional_t<(MaxElement < 32), quint32, qregisteruint>;
97 return QCharacterSetMatch<MaskType, 0>(view);
98 } else {
99 using MaskType = std::conditional_t<(Range < 32), quint32, quint64>;
100 return QCharacterSetMatch<MaskType, MinElement>(view);
101 }
102}
103} // QtPrivate
104
105struct QLocaleData;
106// Subclassed by Android platform plugin:
107class Q_CORE_EXPORT QSystemLocale
108{
109 Q_DISABLE_COPY_MOVE(QSystemLocale)
110 QSystemLocale *next = nullptr; // Maintains a stack.
111
112public:
113 QSystemLocale();
114 virtual ~QSystemLocale();
115
117 {
119 CurrencyToStringArgument(const QVariant &v, const QString &s)
120 : value(v), symbol(s) { }
121 QVariant value;
122 QString symbol;
123 };
124
126 LanguageId, // uint
127 TerritoryId, // uint
128 DecimalPoint, // QString
129 Grouping, // QLocaleData::GroupSizes
130 GroupSeparator, // QString (empty QString means: don't group digits)
131 ZeroDigit, // QString
132 NegativeSign, // QString
133 DateFormatLong, // QString
134 DateFormatShort, // QString
135 TimeFormatLong, // QString
136 TimeFormatShort, // QString
137 DayNameLong, // QString, in: int
138 DayNameShort, // QString, in: int
139 DayNameNarrow, // QString, in: int
140 MonthNameLong, // QString, in: int
141 MonthNameShort, // QString, in: int
142 MonthNameNarrow, // QString, in: int
143 DateToStringLong, // QString, in: QDate
144 DateToStringShort, // QString in: QDate
145 TimeToStringLong, // QString in: QTime
146 TimeToStringShort, // QString in: QTime
149 DateTimeToStringLong, // QString in: QDateTime
150 DateTimeToStringShort, // QString in: QDateTime
152 PositiveSign, // QString
153 AMText, // QString
154 PMText, // QString
155 FirstDayOfWeek, // Qt::DayOfWeek
156 Weekdays, // QList<Qt::DayOfWeek>
157 CurrencySymbol, // QString in: CurrencyToStringArgument
158 CurrencyToString, // QString in: qlonglong, qulonglong or double
159 Collation, // QString
160 UILanguages, // QStringList
161 StringToStandardQuotation, // QString in: QStringView to quote
162 StringToAlternateQuotation, // QString in: QStringView to quote
163 ScriptId, // uint
165 LocaleChanged, // system locale changed
168 StandaloneMonthNameLong, // QString, in: int
169 StandaloneMonthNameShort, // QString, in: int
170 StandaloneMonthNameNarrow, // QString, in: int
171 StandaloneDayNameLong, // QString, in: int
172 StandaloneDayNameShort, // QString, in: int
173 StandaloneDayNameNarrow // QString, in: int
174 };
175 virtual QVariant query(QueryType type, QVariant &&in = QVariant()) const;
176
177 virtual QLocale fallbackLocale() const;
178 inline qsizetype fallbackLocaleIndex() const;
179
180protected:
181 inline const QSharedDataPointer<QLocalePrivate> localeData(const QLocale &locale) const
182 {
183 return locale.d;
184 }
185};
186Q_DECLARE_TYPEINFO(QSystemLocale::QueryType, Q_PRIMITIVE_TYPE);
187Q_DECLARE_TYPEINFO(QSystemLocale::CurrencyToStringArgument, Q_RELOCATABLE_TYPE);
188
190{
191 [[nodiscard]] Q_AUTOTEST_EXPORT static QLocaleId fromName(QStringView name) noexcept;
192 [[nodiscard]] inline bool operator==(QLocaleId other) const noexcept
193 { return language_id == other.language_id && script_id == other.script_id && territory_id == other.territory_id; }
194 [[nodiscard]] inline bool operator!=(QLocaleId other) const noexcept
195 { return !operator==(other); }
196 [[nodiscard]] inline bool isValid() const noexcept
197 {
198 return language_id <= QLocale::LastLanguage && script_id <= QLocale::LastScript
199 && territory_id <= QLocale::LastTerritory;
200 }
201 [[nodiscard]] inline bool matchesAll() const noexcept
202 {
203 return !language_id && !script_id && !territory_id;
204 }
205 // Use as: filter.accept...(candidate)
206 [[nodiscard]] inline bool acceptLanguage(quint16 lang) const noexcept
207 {
208 // Always reject AnyLanguage (only used for last entry in locale_data array).
209 // So, when searching for AnyLanguage, accept everything *but* AnyLanguage.
210 return language_id ? lang == language_id : lang;
211 }
212 [[nodiscard]] inline bool acceptScriptTerritory(QLocaleId other) const noexcept
213 {
214 return (!territory_id || other.territory_id == territory_id)
215 && (!script_id || other.script_id == script_id);
216 }
217
218 [[nodiscard]] QLocaleId withLikelySubtagsAdded() const noexcept;
219 [[nodiscard]] QLocaleId withLikelySubtagsRemoved() const noexcept;
220
221 [[nodiscard]] QByteArray name(char separator = '-') const;
222
223 ushort language_id = 0, script_id = 0, territory_id = 0;
224};
226
227
228using CharBuff = QVarLengthArray<char, 256>;
229
231{
232 enum State { // A duplicate of QValidator::State
236 };
237
240};
241
243{
244public:
245 // Having an index for each locale enables us to have diverse sources of
246 // data, e.g. calendar locales, as well as the main CLDR-derived data.
247 [[nodiscard]] static qsizetype findLocaleIndex(QLocaleId localeId) noexcept;
248 [[nodiscard]] static const QLocaleData *c() noexcept;
250 static bool allLocaleDataRows(bool (*check)(qsizetype, const QLocaleData &));
251
258
274
276
278 {
279 int first = 0;
280 int higher = 0;
281 int least = 0;
282 bool isValid() const { return least > 0 && higher > first && first > 0; }
283 };
284
285private:
286 enum PrecisionMode {
287 PMDecimalDigits = 0x01,
288 PMSignificantDigits = 0x02,
289 PMChopTrailingZeros = 0x03
290 };
291
292 [[nodiscard]] QString decimalForm(QString &&digits, int decpt, int precision,
293 PrecisionMode pm, bool mustMarkDecimal,
294 bool groupDigits) const;
295 [[nodiscard]] QString exponentForm(QString &&digits, int decpt, int precision,
296 PrecisionMode pm, bool mustMarkDecimal,
297 int minExponentDigits) const;
298 [[nodiscard]] QString signPrefix(bool negative, unsigned flags) const;
299 [[nodiscard]] QString applyIntegerFormatting(QString &&numStr, bool negative, int precision,
300 int base, int width, unsigned flags) const;
301
302public:
303 [[nodiscard]] QString doubleToString(double d,
304 int precision = -1,
306 int width = -1,
307 unsigned flags = NoFlags) const;
308 [[nodiscard]] QString longLongToString(qint64 l, int precision = -1,
309 int base = 10,
310 int width = -1,
311 unsigned flags = NoFlags) const;
312 [[nodiscard]] QString unsLongLongToString(quint64 l, int precision = -1,
313 int base = 10,
314 int width = -1,
315 unsigned flags = NoFlags) const;
316
317 // this function is meant to be called with the result of stringToDouble or bytearrayToDouble
318 // so *ok must have been properly set (if not null)
319 [[nodiscard]] static float convertDoubleToFloat(double d, bool *ok)
320 {
321 float result;
322 bool b = convertDoubleTo<float>(d, &result);
323 if (ok && *ok)
324 *ok = b;
325 return result;
326 }
327
328 [[nodiscard]] double stringToDouble(QStringView str, bool *ok,
329 QLocale::NumberOptions options) const;
331 stringToLongLong(QStringView str, int base, QLocale::NumberOptions options) const;
333 stringToUnsLongLong(QStringView str, int base, QLocale::NumberOptions options) const;
334
335 // this function is used in QIntValidator (QtGui)
339 bytearrayToUnsLongLong(QByteArrayView num, int base);
340
341 [[nodiscard]] bool numberToCLocale(QStringView s, QLocale::NumberOptions number_options,
342 NumberMode mode, CharBuff *result) const;
343
345 {
346#ifndef QT_NO_SYSTEMLOCALE
347 // Only used for the system locale, to store data for the view to look at:
349#endif
351 char32_t zeroUcs = 0;
353 bool isC = false; // C locale sets this and nothing else.
354 bool exponentCyrillic = false; // True only for floating-point parsing of Cyrillic.
355 void setZero(QStringView zero)
356 {
357 // No known locale has digits that are more than one Unicode
358 // code-point, so we can safely deal with digits as plain char32_t.
359 switch (zero.size()) {
360 case 1:
361 Q_ASSERT(!zero.at(0).isSurrogate());
362 zeroUcs = zero.at(0).unicode();
363 zeroLen = 1;
364 break;
365 case 2:
366 Q_ASSERT(zero.at(0).isHighSurrogate());
367 zeroUcs = QChar::surrogateToUcs4(zero.at(0), zero.at(1));
368 zeroLen = 2;
369 break;
370 default:
371 Q_ASSERT(zero.size() == 0); // i.e. we got no value to use
372 break;
373 }
374 }
375 [[nodiscard]] bool isValid(NumberMode mode) const // Asserted as a sanity check.
376 {
377 if (isC)
378 return true;
379 if (exponentCyrillic && exponent != u"E" && exponent != u"\u0415")
380 return false;
381 return (zeroLen == 1 || zeroLen == 2) && zeroUcs > 0
382 && (mode == IntegerMode || !decimal.isEmpty())
383 // group may be empty (user config in system locale)
384 && !minus.isEmpty() && !plus.isEmpty()
385 && (mode != DoubleScientificMode || !exponent.isEmpty());
386 }
387 };
388 [[nodiscard]] inline NumericData numericData(NumberMode mode) const;
389
390 // this function is used in QIntValidator (QtGui)
391 [[nodiscard]] Q_CORE_EXPORT ParsingResult
394
395 // Access to assorted data members:
397 { return QLocaleId { m_language_id, m_script_id, m_territory_id }; }
398
399 [[nodiscard]] QString decimalPoint() const;
400 [[nodiscard]] QString groupSeparator() const;
401 [[nodiscard]] QString listSeparator() const;
402 [[nodiscard]] QString percentSign() const;
403 [[nodiscard]] QString zeroDigit() const;
404 [[nodiscard]] char32_t zeroUcs() const;
405 [[nodiscard]] QString positiveSign() const;
406 [[nodiscard]] QString negativeSign() const;
407 [[nodiscard]] QString exponentSeparator() const;
409
411 {
412 using Index = quint32;
413 Index offset; // Some zone data tables are big.
414 Index size; // (for consistency and to avoid struct-padding)
415 [[nodiscard]] QString getData(const char16_t *table) const
416 {
417 return size > 0
418 ? QString::fromRawData(stringStart(table), stringSize())
419 : QString();
420 }
421 [[nodiscard]] QStringView viewData(const char16_t *table) const
422 {
423 return { stringStart(table), stringSize() };
424 }
425 [[nodiscard]] QString getListEntry(const char16_t *table, qsizetype index) const
426 {
427 return listEntry(table, index).getData(table);
428 }
429 [[nodiscard]] QStringView viewListEntry(const char16_t *table, qsizetype index) const
430 {
431 return listEntry(table, index).viewData(table);
432 }
433 [[nodiscard]] char32_t ucsFirst(const char16_t *table) const
434 {
435 if (size && !QChar::isSurrogate(table[offset]))
436 return table[offset];
437 if (size > 1 && QChar::isHighSurrogate(table[offset]))
438 return QChar::surrogateToUcs4(table[offset], table[offset + 1]);
439 return 0;
440 }
441 private:
442 [[nodiscard]] const QChar *stringStart(const char16_t *table) const
443 {
444 return reinterpret_cast<const QChar *>(table + offset);
445 }
446 [[nodiscard]] qsizetype stringSize() const
447 {
448 // On 32-bit platforms, this is a narrowing cast, but the size has
449 // always come from an 8-bit or 16-bit table value so can't actually
450 // have a problem with that.
451 qsizetype result = static_cast<qsizetype>(size);
452 Q_ASSERT(result >= 0);
453 return result;
454 }
455 [[nodiscard]] DataRange listEntry(const char16_t *table, qsizetype index) const
456 {
457 const char16_t separator = ';';
458 Index i = 0;
459 while (index > 0 && i < size) {
460 if (table[offset + i] == separator)
461 index--;
462 i++;
463 }
464 Index end = i;
465 while (end < size && table[offset + end] != separator)
466 end++;
467 return { offset + i, end - i };
468 }
469 };
470
471#define ForEachQLocaleRange(X)
472 X(startListPattern) X(midListPattern) X(endListPattern) X(pairListPattern) X(listDelimit)
473 X(decimalSeparator) X(groupDelim) X(percent) X(zero) X(minus) X(plus) X(exponential)
474 X(quoteStart) X(quoteEnd) X(quoteStartAlternate) X(quoteEndAlternate)
475 X(longDateFormat) X(shortDateFormat) X(longTimeFormat) X(shortTimeFormat)
476 X(longDayNamesStandalone) X(longDayNames)
477 X(shortDayNamesStandalone) X(shortDayNames)
478 X(narrowDayNamesStandalone) X(narrowDayNames)
479 X(anteMeridiem) X(postMeridiem)
480 X(byteCount) X(byteAmountSI) X(byteAmountIEC)
481 X(currencySymbol) X(currencyDisplayName)
482 X(currencyFormat) X(currencyFormatNegative)
483 X(endonymLanguage) X(endonymTerritory)
484
485#define rangeGetter(name)
486 [[nodiscard]] DataRange name() const { return { m_ ## name ## _idx, m_ ## name ## _size }; }
488#undef rangeGetter
489
490public:
491 quint16 m_language_id, m_script_id, m_territory_id;
492
493 // Offsets, then sizes, for each range:
494#define rangeIndex(name) quint16 m_ ## name ## _idx;
496#undef rangeIndex
497#define Size(name) quint8 m_ ## name ## _size;
499#undef Size
500
501#undef ForEachQLocaleRange
502
503 // Strays:
504 char m_currency_iso_code[3];
506 quint8 m_currency_rounding : 3; // (not yet used !)
510 quint8 m_grouping_first : 2; // Don't group until more significant group has this many digits.
511 quint8 m_grouping_higher : 3; // Number of digits between grouping separators
512 quint8 m_grouping_least : 3; // Number of digits after last grouping separator (before decimal).
513};
514
516
518{
519public:
520 constexpr QLocalePrivate(const QLocaleData *data, qsizetype index,
521 QLocale::NumberOptions numberOptions = QLocale::DefaultNumberOptions,
522 int refs = 0)
525
526 [[nodiscard]] quint16 languageId() const { return m_data->m_language_id; }
527 [[nodiscard]] quint16 territoryId() const { return m_data->m_territory_id; }
528
529 [[nodiscard]] QByteArray bcp47Name(char separator = '-') const;
530
531 [[nodiscard]] inline std::array<char, 4>
532 languageCode(QLocale::LanguageCodeTypes codeTypes = QLocale::AnyLanguageCode) const
533 {
534 return languageToCode(QLocale::Language(m_data->m_language_id), codeTypes);
535 }
537 { return scriptToCode(QLocale::Script(m_data->m_script_id)); }
539 { return territoryToCode(QLocale::Territory(m_data->m_territory_id)); }
540
541 [[nodiscard]] static const QLocalePrivate *get(const QLocale &l) { return l.d; }
542 [[nodiscard]] static std::array<char, 4>
543 languageToCode(QLocale::Language language,
544 QLocale::LanguageCodeTypes codeTypes = QLocale::AnyLanguageCode);
545 [[nodiscard]] static QLatin1StringView scriptToCode(QLocale::Script script);
546 [[nodiscard]] static QLatin1StringView territoryToCode(QLocale::Territory territory);
547 [[nodiscard]] static QLocale::Language
548 codeToLanguage(QStringView code,
549 QLocale::LanguageCodeTypes codeTypes = QLocale::AnyLanguageCode) noexcept;
550 [[nodiscard]] static QLocale::Script codeToScript(QStringView code) noexcept;
551 [[nodiscard]] static QLocale::Territory codeToTerritory(QStringView code) noexcept;
552
554
555 [[nodiscard]] QString toUpper(const QString &str, bool *ok) const;
556 [[nodiscard]] QString toLower(const QString &str, bool *ok) const;
557
558 // System locale has an m_data all its own; all others have m_data = locale_data + m_index
559 const QLocaleData *const m_data;
561 qsizetype m_index; // System locale needs this updated when m_data->id() changes.
563
565};
566
567#ifndef QT_NO_SYSTEMLOCALE
568qsizetype QSystemLocale::fallbackLocaleIndex() const { return fallbackLocale().d->m_index; }
569#endif
570
571template <>
572inline QLocalePrivate *QSharedDataPointer<QLocalePrivate>::clone()
573{
574 // cannot use QLocalePrivate's copy constructor
575 // since it is deleted in C++11
576 return new QLocalePrivate(d->m_data, d->m_index, d->m_numberOptions);
577}
578
579// Also used to merely skip over an escape in a format string, advancint idx to
580// point after it (so not [[nodiscard]]):
581QString qt_readEscapedFormatString(QStringView format, qsizetype *idx);
582[[nodiscard]] bool qt_splitLocaleName(QStringView name, QStringView *lang = nullptr,
583 QStringView *script = nullptr,
584 QStringView *cntry = nullptr) noexcept;
585[[nodiscard]] qsizetype qt_repeatCount(QStringView s) noexcept;
586
587[[nodiscard]] constexpr inline bool ascii_isspace(uchar c) noexcept
588{
589 constexpr auto matcher = QtPrivate::makeCharacterSetMatch<QtPrivate::ascii_space_chars>();
590 return matcher.matches(c);
591}
592
593QT_END_NAMESPACE
594
595// ### move to qnamespace.h
596QT_DECL_METATYPE_EXTERN_TAGGED(QList<Qt::DayOfWeek>, QList_Qt__DayOfWeek, Q_CORE_EXPORT)
597#ifndef QT_NO_SYSTEMLOCALE
598QT_DECL_METATYPE_EXTERN_TAGGED(QSystemLocale::CurrencyToStringArgument,
599 QSystemLocale__CurrencyToStringArgument, Q_CORE_EXPORT)
600#endif
601
602#endif // QLOCALE_P_H
\inmodule QtCore
QDataStream & operator>>(QDataStream &in, QByteArray &ba)
Reads a byte array into ba from the stream in and returns a reference to the stream.
quint16 qChecksum(QByteArrayView data, Qt::ChecksumType standard)
Definition qlist.h:80
static QLatin1StringView scriptToCode(QLocale::Script script)
Definition qlocale.cpp:254
QString toUpper(const QString &str, bool *ok) const
static const QLocalePrivate * get(const QLocale &l)
Definition qlocale_p.h:541
QString toLower(const QString &str, bool *ok) const
quint16 languageId() const
Definition qlocale_p.h:526
static QLocale::Language codeToLanguage(QStringView code, QLocale::LanguageCodeTypes codeTypes=QLocale::AnyLanguageCode) noexcept
Definition qlocale.cpp:109
const QLocaleData *const m_data
Definition qlocale_p.h:559
QLatin1StringView scriptCode() const
Definition qlocale_p.h:536
QLocale::MeasurementSystem measurementSystem() const
Definition qlocale.cpp:3556
quint16 territoryId() const
Definition qlocale_p.h:527
static QLatin1StringView territoryToCode(QLocale::Territory territory)
Definition qlocale.cpp:262
qsizetype m_index
Definition qlocale_p.h:561
static QLocale::Territory codeToTerritory(QStringView code) noexcept
Definition qlocale.cpp:210
static std::array< char, 4 > languageToCode(QLocale::Language language, QLocale::LanguageCodeTypes codeTypes=QLocale::AnyLanguageCode)
Definition qlocale.cpp:229
static QLocale::Script codeToScript(QStringView code) noexcept
Definition qlocale.cpp:204
QLocale::NumberOptions m_numberOptions
Definition qlocale_p.h:562
QLatin1StringView territoryCode() const
Definition qlocale_p.h:538
constexpr QLocalePrivate(const QLocaleData *data, qsizetype index, QLocale::NumberOptions numberOptions=QLocale::DefaultNumberOptions, int refs=0)
Definition qlocale_p.h:520
std::array< char, 4 > languageCode(QLocale::LanguageCodeTypes codeTypes=QLocale::AnyLanguageCode) const
Definition qlocale_p.h:532
static QBasicAtomicInt s_generation
Definition qlocale_p.h:564
QByteArray bcp47Name(char separator='-') const
Definition qlocale.cpp:489
QBasicAtomicInt ref
Definition qlocale_p.h:560
qsizetype fallbackLocaleIndex() const
Definition qlocale_p.h:568
@ StringToAlternateQuotation
Definition qlocale_p.h:162
@ DateTimeToStringShort
Definition qlocale_p.h:150
@ StandaloneMonthNameLong
Definition qlocale_p.h:168
@ ListToSeparatedString
Definition qlocale_p.h:164
@ StandaloneDayNameNarrow
Definition qlocale_p.h:173
@ StandaloneMonthNameNarrow
Definition qlocale_p.h:170
@ StringToStandardQuotation
Definition qlocale_p.h:161
@ StandaloneDayNameShort
Definition qlocale_p.h:172
@ StandaloneDayNameLong
Definition qlocale_p.h:171
@ StandaloneMonthNameShort
Definition qlocale_p.h:169
virtual QLocale fallbackLocale() const
virtual QVariant query(QueryType type, QVariant &&in=QVariant()) const
constexpr char ascii_space_chars[]
Definition qlocale_p.h:71
constexpr auto makeCharacterSetMatch() noexcept
Definition qlocale_p.h:80
static constexpr bool isLowerCaseAscii(char c)
static const quint16 crc_tbl[16]
QByteArray qCompress(const uchar *data, qsizetype nbytes, int compressionLevel)
ZLibOp
@ Decompression
static Q_DECL_COLD_FUNCTION const char * zlibOpAsString(ZLibOp op)
static QByteArray toCase_template(T &input, uchar(*lookup)(uchar))
static void q_fromPercentEncoding(QByteArray *ba, char percent)
int qstrnicmp(const char *str1, qsizetype len1, const char *str2, qsizetype len2)
static qsizetype lastIndexOfHelper(const char *haystack, qsizetype l, const char *needle, qsizetype ol, qsizetype from)
static constexpr bool isUpperCaseAscii(char c)
static QByteArray xxflate(ZLibOp op, QArrayDataPointer< char > out, QByteArrayView input, qxp::function_ref< int(z_stream *) const > init, qxp::function_ref< int(z_stream *, size_t) const > processChunk, qxp::function_ref< void(z_stream *) const > deinit)
static constexpr uchar asciiLower(uchar c)
static qsizetype countCharHelper(QByteArrayView haystack, char needle) noexcept
static constexpr uchar asciiUpper(uchar c)
Q_CORE_EXPORT char * qstrncpy(char *dst, const char *src, size_t len)
Q_CORE_EXPORT int qstrnicmp(const char *, const char *, size_t len)
Q_CORE_EXPORT int qstricmp(const char *, const char *)
Q_CORE_EXPORT char * qstrdup(const char *)
Q_CORE_EXPORT char * qstrcpy(char *dst, const char *src)
Q_DECL_PURE_FUNCTION Q_CORE_EXPORT const void * qmemrchr(const void *s, int needle, size_t n) noexcept
Q_CORE_EXPORT int qstrcmp(const char *str1, const char *str2)
#define __has_feature(x)
bool qt_splitLocaleName(QStringView name, QStringView *lang=nullptr, QStringView *script=nullptr, QStringView *cntry=nullptr) noexcept
Definition qlocale.cpp:649
Q_DECLARE_TYPEINFO(QLocaleData::GroupSizes, Q_PRIMITIVE_TYPE)
Q_DECLARE_TYPEINFO(QLocaleId, Q_PRIMITIVE_TYPE)
qsizetype qt_repeatCount(QStringView s) noexcept
Definition qlocale.cpp:762
constexpr bool ascii_isspace(uchar c) noexcept
Definition qlocale_p.h:587
#define ForEachQLocaleRange(X)
Definition qlocale_p.h:471
QString qt_readEscapedFormatString(QStringView format, qsizetype *idx)
Definition qlocale.cpp:712
QByteArray qdtoAscii(double d, QLocaleData::DoubleForm form, int precision, bool uppercase)
constexpr size_t qHash(const QSize &s, size_t seed=0) noexcept
Definition qsize.h:191
CharBuff buff
Definition qlocale_p.h:239
static constexpr int MaxRange
Definition qlocale_p.h:49
constexpr bool matches(uchar c) const noexcept
Definition qlocale_p.h:61
constexpr QCharacterSetMatch(std::string_view set) noexcept
Definition qlocale_p.h:52
QStringView viewListEntry(const char16_t *table, qsizetype index) const
Definition qlocale_p.h:429
char32_t ucsFirst(const char16_t *table) const
Definition qlocale_p.h:433
QString getData(const char16_t *table) const
Definition qlocale_p.h:415
QString getListEntry(const char16_t *table, qsizetype index) const
Definition qlocale_p.h:425
QStringView viewData(const char16_t *table) const
Definition qlocale_p.h:421
void setZero(QStringView zero)
Definition qlocale_p.h:355
bool isValid(NumberMode mode) const
Definition qlocale_p.h:375
QString positiveSign() const
Definition qlocale.cpp:1110
static float convertDoubleToFloat(double d, bool *ok)
Definition qlocale_p.h:319
QString groupSeparator() const
Definition qlocale.cpp:1069
QSimpleParsedNumber< qint64 > stringToLongLong(QStringView str, int base, QLocale::NumberOptions options) const
Definition qlocale.cpp:4831
char32_t zeroUcs() const
Definition qlocale.cpp:1089
quint8 m_grouping_least
Definition qlocale_p.h:512
QString zeroDigit() const
Definition qlocale.cpp:1084
bool numberToCLocale(QStringView s, QLocale::NumberOptions number_options, NumberMode mode, CharBuff *result) const
Definition qlocale.cpp:4609
quint8 m_grouping_higher
Definition qlocale_p.h:511
QString decimalPoint() const
Definition qlocale.cpp:1064
QString doubleToString(double d, int precision=-1, DoubleForm form=DFSignificantDigits, int width=-1, unsigned flags=NoFlags) const
Definition qlocale.cpp:4056
static Q_AUTOTEST_EXPORT bool allLocaleDataRows(bool(*check)(qsizetype, const QLocaleData &))
Definition qlocale.cpp:519
quint8 m_weekend_start
Definition qlocale_p.h:508
quint8 m_currency_digits
Definition qlocale_p.h:505
QLocaleId id() const
Definition qlocale_p.h:396
QString listSeparator() const
Definition qlocale.cpp:1079
static QSimpleParsedNumber< quint64 > bytearrayToUnsLongLong(QByteArrayView num, int base)
Definition qlocale.cpp:4878
QString percentSign() const
Definition qlocale.cpp:1074
@ BlankBeforePositive
Definition qlocale_p.h:264
@ AddTrailingZeroes
Definition qlocale_p.h:261
double stringToDouble(QStringView str, bool *ok, QLocale::NumberOptions options) const
Definition qlocale.cpp:4815
QString longLongToString(qint64 l, int precision=-1, int base=10, int width=-1, unsigned flags=NoFlags) const
Definition qlocale.cpp:4297
@ DoubleScientificMode
Definition qlocale_p.h:275
@ DoubleStandardMode
Definition qlocale_p.h:275
@ DFSignificantDigits
Definition qlocale_p.h:255
quint8 m_first_day_of_week
Definition qlocale_p.h:507
quint8 m_weekend_end
Definition qlocale_p.h:509
NumericData numericData(NumberMode mode) const
Definition qlocale.cpp:4382
quint8 m_currency_rounding
Definition qlocale_p.h:506
QString exponentSeparator() const
Definition qlocale.cpp:1115
static qsizetype findLocaleIndex(QLocaleId localeId) noexcept
Definition qlocale.cpp:579
QString negativeSign() const
Definition qlocale.cpp:1105
static const QLocaleData * c() noexcept
Definition qlocale.cpp:953
QSimpleParsedNumber< quint64 > stringToUnsLongLong(QStringView str, int base, QLocale::NumberOptions options) const
Definition qlocale.cpp:4842
QString unsLongLongToString(quint64 l, int precision=-1, int base=10, int width=-1, unsigned flags=NoFlags) const
Definition qlocale.cpp:4312
quint8 m_grouping_first
Definition qlocale_p.h:510
QLocaleId withLikelySubtagsAdded() const noexcept
Fill in blank fields of a locale ID.
Definition qlocale.cpp:321
QLocaleId withLikelySubtagsRemoved() const noexcept
Definition qlocale.cpp:410
ushort script_id
Definition qlocale_p.h:223
bool operator==(QLocaleId other) const noexcept
Definition qlocale_p.h:192
bool matchesAll() const noexcept
Definition qlocale_p.h:201
bool isValid() const noexcept
Definition qlocale_p.h:196
bool operator!=(QLocaleId other) const noexcept
Definition qlocale_p.h:194
bool acceptScriptTerritory(QLocaleId other) const noexcept
Definition qlocale_p.h:212
ushort territory_id
Definition qlocale_p.h:223
bool acceptLanguage(quint16 lang) const noexcept
Definition qlocale_p.h:206
QByteArray name(char separator='-') const
Definition qlocale.cpp:434
ushort language_id
Definition qlocale_p.h:223
CurrencyToStringArgument(const QVariant &v, const QString &s)
Definition qlocale_p.h:119