From 348343ee0f2983056602cbd468f74b2a4313d306 Mon Sep 17 00:00:00 2001 From: "Aaron J. Seigo" Date: Fri, 3 Sep 2010 22:36:45 +0000 Subject: [PATCH] fix i18np up, avoid fatal errors svn path=/trunk/KDE/kdebase/runtime/; revision=1171475 --- scriptengines/javascript/CMakeLists.txt | 3 + .../javascript/simplebindings/i18n.cpp | 121 ++++++++++++++++++ .../javascript/simplebindings/i18n.h | 90 ++----------- 3 files changed, 132 insertions(+), 82 deletions(-) create mode 100644 scriptengines/javascript/simplebindings/i18n.cpp diff --git a/scriptengines/javascript/CMakeLists.txt b/scriptengines/javascript/CMakeLists.txt index 4c91b2e1a..3ac08570f 100644 --- a/scriptengines/javascript/CMakeLists.txt +++ b/scriptengines/javascript/CMakeLists.txt @@ -18,6 +18,7 @@ set(simple_javascript_engine_SRCS simplebindings/filedialogproxy.cpp simplebindings/graphicsitem.cpp simplebindings/icon.cpp + simplebindings/i18n.cpp simplebindings/linearlayout.cpp simplebindings/gridlayout.cpp simplebindings/painter.cpp @@ -56,6 +57,7 @@ set(javascript_runner_engine_SRCS common/javascriptaddonpackagestructure.cpp common/scriptenv.cpp runner/javascriptrunner.cpp + simplebindings/i18n.cpp ) kde4_add_plugin(plasma_runnerscript_javascript ${javascript_runner_engine_SRCS}) @@ -78,6 +80,7 @@ set(javascript_dataengine_engine_SRCS dataengine/javascriptdataengine.cpp dataengine/javascriptservice.cpp simplebindings/dataengine.cpp + simplebindings/i18n.cpp simplebindings/variant.cpp ) kde4_add_plugin(plasma_dataenginescript_javascript ${javascript_dataengine_engine_SRCS}) diff --git a/scriptengines/javascript/simplebindings/i18n.cpp b/scriptengines/javascript/simplebindings/i18n.cpp new file mode 100644 index 000000000..97502da98 --- /dev/null +++ b/scriptengines/javascript/simplebindings/i18n.cpp @@ -0,0 +1,121 @@ +/* + * Copyright 2009 Aaron Seigo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "i18n.h" + +#include +#include + +#include +#include + +QScriptValue jsi18n(QScriptContext *context, QScriptEngine *engine) +{ + Q_UNUSED(engine) + + if (context->argumentCount() < 1) { + kDebug() << i18n("i18n() takes at least one argument"); + return engine->undefinedValue(); + } + + KLocalizedString message = ki18n(context->argument(0).toString().toUtf8()); + + const int numArgs = context->argumentCount(); + for (int i = 1; i < numArgs; ++i) { + message = message.subs(context->argument(i).toString()); + } + + return message.toString(); +} + +QScriptValue jsi18nc(QScriptContext *context, QScriptEngine *engine) +{ + Q_UNUSED(engine) + + if (context->argumentCount() < 2) { + kDebug() << i18n("i18nc() takes at least two arguments"); + return engine->undefinedValue(); + } + + KLocalizedString message = ki18nc(context->argument(0).toString().toUtf8(), + context->argument(1).toString().toUtf8()); + + const int numArgs = context->argumentCount(); + for (int i = 2; i < numArgs; ++i) { + message = message.subs(context->argument(i).toString()); + } + + return message.toString(); +} + +QScriptValue jsi18np(QScriptContext *context, QScriptEngine *engine) +{ + Q_UNUSED(engine) + + if (context->argumentCount() < 2) { + kDebug() << i18n("i18np() takes at least two arguments"); + return engine->undefinedValue(); + } + + KLocalizedString message = ki18np(context->argument(0).toString().toUtf8(), + context->argument(1).toString().toUtf8()); + + const int numArgs = context->argumentCount(); + for (int i = 2; i < numArgs; ++i) { + QScriptValue v = context->argument(i); + if (v.isNumber()) { + message = message.subs(v.toInt32()); + } else { + message = message.subs(v.toString()); + } + } + + return message.toString(); +} + +QScriptValue jsi18ncp(QScriptContext *context, QScriptEngine *engine) +{ + Q_UNUSED(engine) + + if (context->argumentCount() < 3) { + kDebug() << i18n("i18ncp() takes at least three arguments"); + return engine->undefinedValue(); + } + + KLocalizedString message = ki18ncp(context->argument(0).toString().toUtf8(), + context->argument(1).toString().toUtf8(), + context->argument(2).toString().toUtf8()); + + const int numArgs = context->argumentCount(); + for (int i = 3; i < numArgs; ++i) { + message = message.subs(context->argument(i).toString()); + } + + return message.toString(); +} + +void bindI18N(QScriptEngine *engine) +{ + QScriptValue global = engine->globalObject(); + global.setProperty("i18n", engine->newFunction(jsi18n)); + global.setProperty("i18nc", engine->newFunction(jsi18nc)); + global.setProperty("i18np", engine->newFunction(jsi18np)); + global.setProperty("i18ncp", engine->newFunction(jsi18ncp)); +} + diff --git a/scriptengines/javascript/simplebindings/i18n.h b/scriptengines/javascript/simplebindings/i18n.h index 5f5c52b35..48f9cbba5 100644 --- a/scriptengines/javascript/simplebindings/i18n.h +++ b/scriptengines/javascript/simplebindings/i18n.h @@ -20,90 +20,16 @@ #ifndef JAVASCRIPTBINDI18N_H #define JAVASCRIPTBINDI18N_H -QScriptValue jsi18n(QScriptContext *context, QScriptEngine *engine) -{ - Q_UNUSED(engine) +#include - if (context->argumentCount() < 1) { - return context->throwError(i18n("i18n() takes at least one argument")); - } +class QScriptContext; +class QScriptEngine; - KLocalizedString message = ki18n(context->argument(0).toString().toUtf8()); - - const int numArgs = context->argumentCount(); - for (int i = 1; i < numArgs; ++i) { - message = message.subs(context->argument(i).toString()); - } - - return message.toString(); -} - -QScriptValue jsi18nc(QScriptContext *context, QScriptEngine *engine) -{ - Q_UNUSED(engine) - - if (context->argumentCount() < 2) { - return context->throwError(i18n("i18nc() takes at least two arguments")); - } - - KLocalizedString message = ki18nc(context->argument(0).toString().toUtf8(), - context->argument(1).toString().toUtf8()); - - const int numArgs = context->argumentCount(); - for (int i = 2; i < numArgs; ++i) { - message = message.subs(context->argument(i).toString()); - } - - return message.toString(); -} - -QScriptValue jsi18np(QScriptContext *context, QScriptEngine *engine) -{ - Q_UNUSED(engine) - - if (context->argumentCount() < 2) { - return context->throwError(i18n("i18np() takes at least two arguments")); - } - - KLocalizedString message = ki18np(context->argument(0).toString().toUtf8(), - context->argument(1).toString().toUtf8()); - - const int numArgs = context->argumentCount(); - for (int i = 2; i < numArgs; ++i) { - message = message.subs(context->argument(i).toString()); - } - - return message.toString(); -} - -QScriptValue jsi18ncp(QScriptContext *context, QScriptEngine *engine) -{ - Q_UNUSED(engine) - - if (context->argumentCount() < 3) { - return context->throwError(i18n("i18ncp() takes at least three arguments")); - } - - KLocalizedString message = ki18ncp(context->argument(0).toString().toUtf8(), - context->argument(1).toString().toUtf8(), - context->argument(2).toString().toUtf8()); - - const int numArgs = context->argumentCount(); - for (int i = 3; i < numArgs; ++i) { - message = message.subs(context->argument(i).toString()); - } - - return message.toString(); -} - -void bindI18N(QScriptEngine *engine) -{ - QScriptValue global = engine->globalObject(); - global.setProperty("i18n", engine->newFunction(jsi18n)); - global.setProperty("i18nc", engine->newFunction(jsi18nc)); - global.setProperty("i18np", engine->newFunction(jsi18np)); - global.setProperty("i18ncp", engine->newFunction(jsi18ncp)); -} +QScriptValue jsi18n(QScriptContext *context, QScriptEngine *engine); +QScriptValue jsi18nc(QScriptContext *context, QScriptEngine *engine); +QScriptValue jsi18np(QScriptContext *context, QScriptEngine *engine); +QScriptValue jsi18ncp(QScriptContext *context, QScriptEngine *engine); +void bindI18N(QScriptEngine *engine); #endif