diff --git a/autotests/calculatetexttest.cpp b/autotests/calculatetexttest.cpp --- a/autotests/calculatetexttest.cpp +++ b/autotests/calculatetexttest.cpp @@ -45,6 +45,14 @@ void CalculateTextTest::testSimpleCalculate() { + // Force consistent locale + QLocale locale(QStringLiteral("en_US.UTF-8")); + if (locale == QLocale::c()) + { + locale = QLocale(QLocale::English, QLocale::UnitedStates); + } + + QLocale::setDefault(locale); const QString testFile = QStringLiteral( KDESRCDIR "data/simpleCalculate.pdf" ); QMimeDatabase db; const QMimeType mime = db.mimeTypeForFile( testFile ); @@ -78,7 +86,7 @@ // Verify the results QCOMPARE (fields[QStringLiteral ("Sum")]->text(), QStringLiteral( "60" )); QCOMPARE (fields[QStringLiteral ("AVG")]->text(), QStringLiteral( "20" )); - QCOMPARE (fields[QStringLiteral ("Prod")]->text(), QStringLiteral( "6000" )); + QCOMPARE (fields[QStringLiteral ("Prod")]->text(), QStringLiteral( "6,000" )); QCOMPARE (fields[QStringLiteral ("Min")]->text(), QStringLiteral( "10" )); QCOMPARE (fields[QStringLiteral ("Max")]->text(), QStringLiteral( "30" )); diff --git a/autotests/data/simpleCalculate.pdf b/autotests/data/simpleCalculate.pdf index bf0a1c686a2e5ba16fc41fd723b72abf65743874..cb1c1c8dcc27b1c06eece94277b84618a9ce4a19 GIT binary patch literal 39797 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 diff --git a/core/script/builtin.js b/core/script/builtin.js --- a/core/script/builtin.js +++ b/core/script/builtin.js @@ -27,7 +27,7 @@ for (i = 0; i < cFields.length; i++) { var field = Doc.getField( cFields[i] ); - var val = Number( field.value ); + var val = util.stringToNumber( field.value ); if ( cFunction === "SUM" || cFunction === "AVG" ) { @@ -58,5 +58,74 @@ ret /= cFields.length; } + event.value = util.numberToString( ret, "g", 32 ); +} + + +/** AFNumber_Format + * + * Formats event.value based on parameters. + * + * Parameter description based on Acrobat Help: + * + * nDec is the number of places after the decimal point. + * + * sepStyle is an integer denoting whether to use a separator + * If it is 1 comma should be used. + * If it is 2 a dot should be used. + * The decimal seperator is changed accordingly. + * + * nexStyle is the formatting used for negative numbers: - not implemented. + * 0 = MinusBlack + * 1 = Red + * 2 = ParensBlack + * 3 = ParensRed + * + * currStyle is the currency style - not used. + * + * strCurrency is the currency symbol. + * + * bCurrencyPrepend is true to prepend the currency symbol; + * false to display on the end of the number. + */ +function AFNumber_Format( nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend ) +{ + if ( !event.value ) + { + return; + } + + var ret; + var localized = util.stringToNumber( event.value ); + + if ( sepStyle === 2 ) + { + // Use de_DE as the locale for the dot seperator format + ret = util.numberToString( localized, "f", nDec, 'de_DE' ); + } + else + { + // Otherwise US + ret = util.numberToString( localized, "f", nDec, 'en_US' ); + } + + if ( sepStyle === 0 ) + { + // No seperators. Remove all commas from the US format. + ret.replace( /,/g, '' ); + } + + if ( strCurrency ) + { + if ( bCurrencyPrepend ) + { + ret = strCurrency + ret; + } + else + { + ret = ret + strCurrency; + } + } + event.value = ret; } diff --git a/core/script/kjs_util.cpp b/core/script/kjs_util.cpp --- a/core/script/kjs_util.cpp +++ b/core/script/kjs_util.cpp @@ -15,6 +15,9 @@ #include #include +#include + +#include using namespace Okular; @@ -56,15 +59,95 @@ return obj; } +/** Converts a Number to a String using l10n + * + * String numberToString( Number number, String format = 'g', int precision = 6, + * String LocaleName = system ) + */ +static KJSObject numberToString ( KJSContext *context, void *, + const KJSArguments &arguments ) +{ + if ( arguments.count() < 1 ) + { + return context->throwException( QStringLiteral( "Invalid arguments" ) ); + } + + double number = arguments.at( 0 ).toNumber( context ); + if ( std::isnan( number ) ) + { + return KJSString( "NaN" ); + } + + QChar format = QLatin1Char( 'g' ); + if ( arguments.count() >= 2 ) + { + const QString fmt = arguments.at( 1 ).toString( context ); + if ( fmt.size() ) + { + format = fmt[0]; + } + } + + int precision = 6; + if ( arguments.count() >= 3 ) + { + precision = arguments.at( 2 ).toInt32( context ); + } + + QLocale locale; + if ( arguments.count() == 4 ) + { + locale = QLocale( arguments.at( 3 ).toString( context ) ); + } + + return KJSString( locale.toString( number, format.toLatin1(), precision ) ); +} + +/** Converts a String to a Number using l10n. + * + * Number stringToNumber( String number, String LocaleName = system ) */ +static KJSObject stringToNumber ( KJSContext *context, void *, + const KJSArguments &arguments ) +{ + if ( arguments.count() < 1 ) + { + return context->throwException( QStringLiteral( "Invalid arguments" ) ); + } + + QString number = arguments.at( 0 ).toString( context ); + if ( number.isEmpty() ) + { + return KJSNumber( 0 ); + } + + QLocale locale; + if ( arguments.count() == 2 ) + { + locale = QLocale( arguments.at( 1 ).toString( context ) ); + } + + bool ok; + double converted = locale.toDouble( number, &ok ); + + if ( !ok ) + { + return KJSNumber( std::nan( "" ) ); + } + + return KJSNumber( converted ); +} + void JSUtil::initType( KJSContext *ctx ) { static bool initialized = false; if ( initialized ) return; initialized = true; g_utilProto = new KJSPrototype(); - g_utilProto->defineFunction( ctx, QStringLiteral("crackURL"), crackURL ); + g_utilProto->defineFunction( ctx, QStringLiteral( "crackURL" ), crackURL ); + g_utilProto->defineFunction( ctx, QStringLiteral( "stringToNumber" ), stringToNumber ); + g_utilProto->defineFunction( ctx, QStringLiteral( "numberToString" ), numberToString ); } KJSObject JSUtil::object( KJSContext *ctx )