diff options
author | Martin Jones <martin.jones@nokia.com> | 2012-02-17 13:08:21 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-22 00:03:53 +0100 |
commit | f60588237b230923c6a27f60669fa0230138f1ca (patch) | |
tree | 7fa24633c22c7aa06dcb395fab499c8abb8f9b6a /src/declarative/qml/qdeclarativelocale.cpp | |
parent | a73ad904c9a4ad188604de6c64a6c91cd514dc1b (diff) |
Implement String.localeCompare() using QString::localeAwareCompare()
v8's localeCompare() implementation is not locale aware, so we use
Qt's locale aware compare.
Change-Id: Ia9092b3d6754545bb797adac26080ac7a29dcd92
Reviewed-by: Glenn Watson <glenn.watson@nokia.com>
Diffstat (limited to 'src/declarative/qml/qdeclarativelocale.cpp')
-rw-r--r-- | src/declarative/qml/qdeclarativelocale.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/declarative/qml/qdeclarativelocale.cpp b/src/declarative/qml/qdeclarativelocale.cpp index 8ec51b058c..39d0f6c378 100644 --- a/src/declarative/qml/qdeclarativelocale.cpp +++ b/src/declarative/qml/qdeclarativelocale.cpp @@ -834,6 +834,36 @@ v8::Handle<v8::Value> QDeclarativeLocale::locale(QV8Engine *v8engine, const QStr return v8Value; } +static const char *localeCompareFunction = + "(function(localeCompareFunc) { " + " var orig_localeCompare;" + " orig_localeCompare = String.prototype.localeCompare;" + " String.prototype.localeCompare = (function() {" + " var val = localeCompareFunc.apply(this, arguments);" + " if (val == undefined) val = orig_localeCompare.call(this);" + " return val;" + " })" + "})"; + +void QDeclarativeLocale::registerStringLocaleCompare(QV8Engine *engine) +{ + registerFunction(engine, localeCompareFunction, localeCompare); +} + +v8::Handle<v8::Value> QDeclarativeLocale::localeCompare(const v8::Arguments &args) +{ + if (args.Length() != 1 || (!args[0]->IsString() && !args[0]->IsStringObject())) + return v8::Undefined(); + + if (!args.This()->IsString() && !args.This()->IsStringObject()) + return v8::Undefined(); + + QString thisString = QJSConverter::toString(args.This()->ToString()); + QString thatString = QJSConverter::toString(args[0]->ToString()); + + return v8::Integer::New(QString::localeAwareCompare(thisString, thatString)); +} + /*! \enum QtQuick2::Locale::FormatType |