Members of the KDE Community are recommended to subscribe to the kde-community mailing list at https://mail.kde.org/mailman/listinfo/kde-community to allow them to participate in important discussions and receive other important announcements

Commit cead2bbe authored by Andre Heinecke's avatar Andre Heinecke Committed by Albert Astals Cid

Add initial support for built-in javascript functs

Summary:
This starts by adding support for AFSimple_Calculate which
is the standard "calculate" function in Adobe Acrobat Pro.

Reviewers: #okular

Subscribers: aacid

Tags: #okular

Maniphest Tasks: T7805

Differential Revision: https://phabricator.kde.org/D10049
parent d50c06df
......@@ -175,6 +175,10 @@ set(okularcore_SRCS
core/synctex/synctex_parser_utils.c
)
qt5_add_resources(okularcore_SRCS
core/script/builtin.qrc
)
ki18n_wrap_ui(okularcore_SRCS
conf/textdocumentsettings.ui
)
......
/***************************************************************************
* Copyright (C) 2018 Intevation GmbH <intevation@intevation.de> *
* *
* 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 of the License, or *
* (at your option) any later version. *
***************************************************************************/
/* Builtin functions for Okular's PDF JavaScript interpretation. */
/** AFSimple_Calculate
*
* cFunction is a string that identifies the operation.
* It is one of AVG, SUM, PRD, MIN, MAX
* cFields is an array of the names of the fields used to calculate.
*/
function AFSimple_Calculate( cFunction, cFields )
{
var ret = 0;
if ( cFunction === "PRD" )
{
ret = 1;
}
for (i = 0; i < cFields.length; i++)
{
var field = Doc.getField( cFields[i] );
var val = Number( field.value );
if ( cFunction === "SUM" || cFunction === "AVG" )
{
ret += val;
}
else if ( cFunction === "PRD" )
{
ret *= val;
}
else if ( cFunction === "MIN" )
{
if ( i === 0 || val < ret )
{
ret = val;
}
}
else if ( cFunction === "MAX" )
{
if ( i === 0 || val > ret )
{
ret = val;
}
}
}
if ( cFunction === "AVG" )
{
ret /= cFields.length;
}
event.value = ret;
}
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/script">
<file>builtin.js</file>
</qresource>
</RCC>
......@@ -10,6 +10,7 @@
#include "scripter.h"
#include <QtCore/QDebug>
#include <QFile>
#include "debug_p.h"
#include "script/executor_kjs_p.h"
......@@ -53,6 +54,21 @@ QString Scripter::execute( ScriptType type, const QString &script )
else
qDebug() << script.left( 1000 ) << "[...]";
#endif
static QString builtInScript;
if ( builtInScript.isNull() )
{
QFile builtInResource ( ":/script/builtin.js" );
if (!builtInResource.open( QIODevice::ReadOnly ))
{
qCDebug(OkularCoreDebug) << "failed to load builtin script";
}
else
{
builtInScript = QString::fromUtf8( builtInResource.readAll() );
builtInResource.close();
}
}
switch ( type )
{
case JavaScript:
......@@ -60,7 +76,7 @@ QString Scripter::execute( ScriptType type, const QString &script )
{
d->m_kjs = new ExecutorKJS( d->m_doc );
}
d->m_kjs->execute( script, d->m_event );
d->m_kjs->execute( builtInScript + script, d->m_event );
break;
}
return QString();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment