Code cleanup: unify QRegExp conversion.
Remove duplicated code for QRegExp conversion. Change-Id: Ic0a6b68a317404ac6d1695f0220f257046b4ba80 Reviewed-on: http://codereview.qt.nokia.com/2703 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Simon Hausmann <simon.hausmann@nokia.com>
This commit is contained in:
parent
c9d57b2249
commit
36a225a038
|
@ -276,55 +276,6 @@ static v8::Handle<v8::Object> objectFromVariantMap(QV8Engine *engine, const QVar
|
|||
|
||||
Q_CORE_EXPORT QString qt_regexp_toCanonical(const QString &, QRegExp::PatternSyntax);
|
||||
|
||||
// Converts a QRegExp to a JS RegExp.
|
||||
// The conversion is not 100% exact since ECMA regexp and QRegExp
|
||||
// have different semantics/flags, but we try to do our best.
|
||||
static v8::Handle<v8::RegExp> regexpFromQRegExp(QV8Engine *engine, const QRegExp &re)
|
||||
{
|
||||
// Convert the pattern to a ECMAScript pattern.
|
||||
QString pattern = qt_regexp_toCanonical(re.pattern(), re.patternSyntax());
|
||||
if (re.isMinimal()) {
|
||||
QString ecmaPattern;
|
||||
int len = pattern.length();
|
||||
ecmaPattern.reserve(len);
|
||||
int i = 0;
|
||||
const QChar *wc = pattern.unicode();
|
||||
bool inBracket = false;
|
||||
while (i < len) {
|
||||
QChar c = wc[i++];
|
||||
ecmaPattern += c;
|
||||
switch (c.unicode()) {
|
||||
case '?':
|
||||
case '+':
|
||||
case '*':
|
||||
case '}':
|
||||
if (!inBracket)
|
||||
ecmaPattern += QLatin1Char('?');
|
||||
break;
|
||||
case '\\':
|
||||
if (i < len)
|
||||
ecmaPattern += wc[i++];
|
||||
break;
|
||||
case '[':
|
||||
inBracket = true;
|
||||
break;
|
||||
case ']':
|
||||
inBracket = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
pattern = ecmaPattern;
|
||||
}
|
||||
|
||||
int flags = v8::RegExp::kNone;
|
||||
if (re.caseSensitivity() == Qt::CaseInsensitive)
|
||||
flags |= v8::RegExp::kIgnoreCase;
|
||||
|
||||
return v8::RegExp::New(engine->toString(pattern), static_cast<v8::RegExp::Flags>(flags));
|
||||
}
|
||||
|
||||
v8::Handle<v8::Value> QV8Engine::fromVariant(const QVariant &variant)
|
||||
{
|
||||
int type = variant.userType();
|
||||
|
@ -367,7 +318,7 @@ v8::Handle<v8::Value> QV8Engine::fromVariant(const QVariant &variant)
|
|||
case QMetaType::QTime:
|
||||
return v8::Date::New(qtDateTimeToJsDate(QDateTime(QDate(1970,1,1), *reinterpret_cast<const QTime *>(ptr))));
|
||||
case QMetaType::QRegExp:
|
||||
return regexpFromQRegExp(this, *reinterpret_cast<const QRegExp *>(ptr));
|
||||
return QJSConverter::toRegExp(*reinterpret_cast<const QRegExp *>(ptr));
|
||||
case QMetaType::QObjectStar:
|
||||
case QMetaType::QWidgetStar:
|
||||
return newQObject(*reinterpret_cast<QObject* const *>(ptr));
|
||||
|
|
Loading…
Reference in New Issue