5#include <private/qqmlcontext_p.h>
6#include <QtCore/qnumeric.h>
7#include <QtCore/qdatetime.h>
8#include <QtCore/qtimezone.h>
10#include <private/qlocale_p.h>
11#include <private/qlocale_data_p.h>
13#include <private/qv4dateobject_p.h>
14#include <private/qv4numberobject_p.h>
15#include <private/qv4stringobject_p.h>
16#include <private/qqmlvaluetypewrapper_p.h>
22#define THROW_ERROR(string) \
24 return scope.engine->throwError(QString::fromUtf8(string)); \
28#define GET_LOCALE_DATA_RESOURCE(OBJECT) \
29 QLocale *r = [&]() { \
30 QV4::Scoped<QQmlValueTypeWrapper> r(scope, OBJECT.as<QQmlValueTypeWrapper>()); \
31 return r ? r->cast<QLocale>() : nullptr; \
34 THROW_ERROR("Not a valid Locale object")
39 return wrapper->type() == QMetaType::fromType<QLocale>();
48 engine->datePrototype()->defineDefaultProperty(
engine->id_toLocaleString(), method_toLocaleString);
49 engine->datePrototype()->defineDefaultProperty(
QStringLiteral(
"toLocaleTimeString"), method_toLocaleTimeString);
50 engine->datePrototype()->defineDefaultProperty(
QStringLiteral(
"toLocaleDateString"), method_toLocaleDateString);
51 engine->dateCtor()->defineDefaultProperty(
QStringLiteral(
"fromLocaleString"), method_fromLocaleString);
52 engine->dateCtor()->defineDefaultProperty(
QStringLiteral(
"fromLocaleTimeString"), method_fromLocaleTimeString);
53 engine->dateCtor()->defineDefaultProperty(
QStringLiteral(
"fromLocaleDateString"), method_fromLocaleDateString);
54 engine->dateCtor()->defineDefaultProperty(
QStringLiteral(
"timeZoneUpdated"), method_timeZoneUpdated);
83 if (
String *
s = argv[1].stringValue()) {
85 formattedDt =
r->toString(dt,
format);
89 formattedDt =
r->toString(dt,
format);
91 THROW_ERROR(
"Locale: Date.toLocaleString(): Invalid datetime format");
94 formattedDt =
r->toString(dt, enumFormat);
127 if (
String *
s = argv[1].stringValue()) {
135 THROW_ERROR(
"Locale: Date.toLocaleTimeString(): Invalid time format");
138 formattedTime =
r->toString(
time, enumFormat);
171 if (
String *
s = argv[1].stringValue()) {
179 THROW_ERROR(
"Locale: Date.loLocaleDateString(): Invalid date format");
182 formattedDate =
r->toString(
date, enumFormat);
193 if (
String *
s = argv[0].stringValue()) {
195 QString dateString =
s->toQString();
202 THROW_ERROR(
"Locale: Date.fromLocaleString(): Invalid arguments");
210 if (
String *
s = argv[2].stringValue()) {
212 dt =
r->toDateTime(dateString,
format);
216 dt =
r->toDateTime(dateString,
format);
218 THROW_ERROR(
"Locale: Date.fromLocaleString(): Invalid datetime format");
221 dt =
r->toDateTime(dateString, enumFormat);
233 if (
String *
s = argv[0].stringValue()) {
235 QString timeString =
s->toQString();
244 THROW_ERROR(
"Locale: Date.fromLocaleTimeString(): Invalid arguments");
252 if (
String *
s = argv[2].stringValue()) {
254 tm =
r->toTime(dateString,
format);
258 tm =
r->toTime(dateString,
format);
260 THROW_ERROR(
"Locale: Date.fromLocaleTimeString(): Invalid datetime format");
263 tm =
r->toTime(dateString, enumFormat);
281 if (
String *
s = argv[0].stringValue()) {
283 QString dateString =
s->toQString();
290 THROW_ERROR(
"Locale: Date.fromLocaleDateString(): Invalid arguments");
298 if (
String *
s = argv[2].stringValue()) {
300 dt =
r->toDate(dateString,
format);
304 dt =
r->toDate(dateString,
format);
306 THROW_ERROR(
"Locale: Date.fromLocaleDateString(): Invalid datetime format");
309 dt =
r->toDate(dateString, enumFormat);
319 THROW_ERROR(
"Locale: Date.timeZoneUpdated(): Invalid arguments");
331 engine->numberPrototype()->defineDefaultProperty(
engine->id_toLocaleString(), method_toLocaleString);
332 engine->numberPrototype()->defineDefaultProperty(
QStringLiteral(
"toLocaleCurrencyString"), method_toLocaleCurrencyString);
333 engine->numberCtor()->defineDefaultProperty(
QStringLiteral(
"fromLocaleString"), method_fromLocaleString);
340 THROW_ERROR(
"Locale: Number.toLocaleString(): Invalid arguments");
357 if (!argv[1].isString())
358 THROW_ERROR(
"Locale: Number.toLocaleString(): Invalid arguments");
366 THROW_ERROR(
"Locale: Number.toLocaleString(): Invalid arguments");
377 THROW_ERROR(
"Locale: Number.toLocaleCurrencyString(): Invalid arguments");
388 THROW_ERROR(
"Locale: Number.toLocaleCurrencyString(): Invalid arguments");
394 if (!argv[1].isString())
395 THROW_ERROR(
"Locale: Number.toLocaleString(): Invalid arguments");
405 if (argc < 1 || argc > 2)
406 THROW_ERROR(
"Locale: Number.fromLocaleString(): Invalid arguments");
413 THROW_ERROR(
"Locale: Number.fromLocaleString(): Invalid arguments");
429 THROW_ERROR(
"Locale: Number.fromLocaleString(): Invalid format");
446 if (argc < 1 || argc > 3) {
448 "Locale: formattedDataSize(): Expected 1-3 arguments, but received %1")
454 bool mismatched0 =
false;
455 if (!arg0->isNumber()) {
457 qWarning() <<
"Locale: formattedDataSize(): Invalid argument ('bytes' should be a number)";
459 args->setReturnValue(
472 if (!
arg1->isInteger()) {
474 "Locale: formattedDataSize(): Invalid argument ('precision' must be an int)"));
481 qint64(arg0->toInteger()),
arg1->integerValue());
487 if (
arg2->isNumber()) {
489 qint64(arg0->toInteger()),
arg1->integerValue(),
490 QLocale::DataSizeFormats(
arg2->integerValue()));
500 "Locale: formattedDataSize(): Invalid argument ('format' must be DataSizeFormat)"));
515 const QList<Qt::DayOfWeek> days = locale.weekdays();
516 QList<QQmlLocale::DayOfWeek>
result;
517 result.reserve(days.size());
542 if (arg0->isNumber()) {
549 if (!
arg1->isString()) {
550 doThrow(
QLatin1String(
"Locale: the second argument to the toString overload "
551 "whose first argument is a double should be a char"));
560 doThrow(
QLatin1String(
"Locale: the third argument to the toString overload "
561 "whose first argument is a double should be an int"));
568 "Locale: the toString() overload that takes a Date as its first "
569 "argument expects 1 or 2 arguments, but received %1").
arg(argc));
583 doThrow(
QLatin1String(
"Locale: the second argument to the toString overloads whose "
584 "first argument is a Date should be a string or FormatType"));
588 doThrow(
QLatin1String(
"Locale: toString() expects either an int, double, "
589 "or Date as its first argument"));
686 if (localeName.isEmpty()) {
688 engine,
nullptr, &QQmlLocaleValueType::staticMetaObject,
689 QMetaType::fromType<QLocale>());
694 engine, &qlocale, &QQmlLocaleValueType::staticMetaObject,
695 QMetaType::fromType<QLocale>());
705 if (argc != 1 || (!argv[0].isString() && !argv[0].as<StringObject>()))
1030#include "moc_qqmllocale_p.cpp"
\inmodule QtCore\reentrant
static QDateTime currentDateTime()
This is an overloaded member function, provided for convenience. It differs from the above function o...
\inmodule QtCore \reentrant
QDateTime startOfDay(const QTimeZone &zone) const
qsizetype length() const noexcept
static void registerExtension(QV4::ExecutionEngine *engine)
QList< QQmlLocale::DayOfWeek > weekDays
Q_INVOKABLE void formattedDataSize(QQmlV4FunctionPtr args) const
Q_INVOKABLE QString toString() const
QQmlLocale::DayOfWeek firstDayOfWeek
static void registerExtension(QV4::ExecutionEngine *engine)
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
qsizetype size() const noexcept
Returns the number of characters in this string.
const QChar at(qsizetype i) const
Returns the character at the given index position in the string.
int localeAwareCompare(const QString &s) const
\inmodule QtCore \reentrant
bool isValid() const
Returns true if the time is valid; otherwise returns false.
Q_QML_EXPORT void registerStringLocaleCompare(QV4::ExecutionEngine *engine)
Q_QML_EXPORT QV4::ReturnedValue method_localeCompare(const QV4::FunctionObject *, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
Q_QML_EXPORT QV4::ReturnedValue locale(QV4::ExecutionEngine *engine, const QString &localeName)
Provides locale specific properties and formatted data.
Combined button and popup list for selecting options.
static const void * symbol()
static bool isNumber(char s)
GLboolean GLboolean GLboolean b
GLuint GLsizei const GLchar * message
GLint GLsizei GLsizei GLenum format
GLuint GLuint GLuint GLuint arg1
GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg2
#define GET_LOCALE_DATA_RESOURCE(OBJECT)
static bool isLocaleObject(const QV4::Value &val)
#define THROW_ERROR(string)
static QQmlLocale::DayOfWeek qtDayToQmlDay(Qt::DayOfWeek day)
QLatin1StringView QLatin1String
#define QStringLiteral(str)
#define RETURN_UNDEFINED()
static ReturnedValue method_toLocaleDateString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static ReturnedValue method_toLocaleTimeString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static void timezoneUpdated(ExecutionEngine *e)
static ReturnedValue method_toLocaleString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
ReturnedValue throwError(const Value &value)
Heap::String * newString(char16_t c)
ReturnedValue asReturnedValue() const
static ReturnedValue method_toLocaleString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static ReturnedValue create(ExecutionEngine *engine, const void *data, const QMetaObject *metaObject, QMetaType type, Heap::Object *object, int property, Heap::ReferenceObject::Flags flags)
static ReturnedValue method_localeCompare(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
QString toQString() const
QString toQStringNoThrow() const