diff options
Diffstat (limited to 'src/plugins/script/file')
-rw-r--r-- | src/plugins/script/file/file.cpp | 91 | ||||
-rw-r--r-- | src/plugins/script/file/file.h | 58 | ||||
-rw-r--r-- | src/plugins/script/file/file.pro | 20 | ||||
-rw-r--r-- | src/plugins/script/file/plugin.cpp | 75 | ||||
-rw-r--r-- | src/plugins/script/file/textfile.cpp | 186 | ||||
-rw-r--r-- | src/plugins/script/file/textfile.h | 76 |
6 files changed, 506 insertions, 0 deletions
diff --git a/src/plugins/script/file/file.cpp b/src/plugins/script/file/file.cpp new file mode 100644 index 000000000..247d46056 --- /dev/null +++ b/src/plugins/script/file/file.cpp @@ -0,0 +1,91 @@ +/************************************************************************** +** +** This file is part of the Qt Build Suite +** +** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. +** Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +**************************************************************************/ + +#include "file.h" + +#include <tools/fileinfo.h> + +#include <QtCore/QDebug> +#include <QtScript/QScriptEngine> + +#ifdef Q_OS_UNIX +#include <unistd.h> +#endif + +void File::init(QScriptValue &extensionObject, QScriptEngine *engine) +{ + QScriptValue fileObj = engine->newQObject(new File, QScriptEngine::ScriptOwnership); + fileObj.setProperty("copy", engine->newFunction(File::js_copy)); + fileObj.setProperty("exists", engine->newFunction(File::js_exists)); + fileObj.setProperty("remove", engine->newFunction(File::js_remove)); + extensionObject.setProperty("File", fileObj); +} + +QScriptValue File::js_copy(QScriptContext *context, QScriptEngine *engine) +{ + Q_UNUSED(engine); + if (context->argumentCount() < 2) { + return context->throwError(QScriptContext::SyntaxError, + tr("copy expects 2 arguments")); + } + return QFile::copy(context->argument(0).toString(), context->argument(1).toString()); +} + +QScriptValue File::js_exists(QScriptContext *context, QScriptEngine *engine) +{ + Q_UNUSED(engine); + if (context->argumentCount() < 1) { + return context->throwError(QScriptContext::SyntaxError, + tr("exist expects 1 argument")); + } + return qbs::FileInfo::exists(context->argument(0).toString()); +} + +QScriptValue File::js_remove(QScriptContext *context, QScriptEngine *engine) +{ + Q_UNUSED(engine); + if (context->argumentCount() < 1) { + return context->throwError(QScriptContext::SyntaxError, + tr("remove expects 1 argument")); + } + QString fileName = context->argument(0).toString(); +#ifdef Q_OS_UNIX + return unlink(fileName.toLocal8Bit().data()) == 0; +#else + return QFile::remove(fileName); +#endif +} diff --git a/src/plugins/script/file/file.h b/src/plugins/script/file/file.h new file mode 100644 index 000000000..0e4126718 --- /dev/null +++ b/src/plugins/script/file/file.h @@ -0,0 +1,58 @@ +/************************************************************************** +** +** This file is part of the Qt Build Suite +** +** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. +** Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +**************************************************************************/ +#ifndef FILE_H + +#include <QtCore/QMetaType> +#include <QtCore/QObject> +#include <QtCore/QFile> +#include <QtCore/QTextStream> +#include <QtScript/QScriptable> +#include <QtScript/QScriptValue> + +class File : public QObject, public QScriptable +{ +Q_OBJECT +public: + static void init(QScriptValue &extensionObject, QScriptEngine *engine); + +private: + static QScriptValue js_copy(QScriptContext *context, QScriptEngine *engine); + static QScriptValue js_exists(QScriptContext *context, QScriptEngine *engine); + static QScriptValue js_remove(QScriptContext *context, QScriptEngine *engine); +}; + +#endif // FILE_H diff --git a/src/plugins/script/file/file.pro b/src/plugins/script/file/file.pro new file mode 100644 index 000000000..eded5fdbc --- /dev/null +++ b/src/plugins/script/file/file.pro @@ -0,0 +1,20 @@ +DESTDIR= ../../../../plugins/script/ +TEMPLATE = lib +TARGET = qtscript_fileapi +DEPENDPATH += . +INCLUDEPATH += . ../../../lib/ + +QT = core script + +unix: CONFIG += plugin + +HEADERS += \ + file.h \ + ../../../lib/tools/fileinfo.h \ + textfile.h + +SOURCES += \ + plugin.cpp \ + file.cpp \ + ../../../lib/tools/fileinfo.cpp \ + textfile.cpp diff --git a/src/plugins/script/file/plugin.cpp b/src/plugins/script/file/plugin.cpp new file mode 100644 index 000000000..c493145a3 --- /dev/null +++ b/src/plugins/script/file/plugin.cpp @@ -0,0 +1,75 @@ +/************************************************************************** +** +** This file is part of the Qt Build Suite +** +** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. +** Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +**************************************************************************/ + +#include "file.h" +#include "textfile.h" + +#include <QtScript/QScriptExtensionPlugin> +#include <QtScript/QScriptValue> +#include <QtScript/QScriptEngine> + +void qtscript_initialize_com_nokia_qbs_fileapi_bindings(QScriptValue &); + +class com_nokia_qbs_fileapi_ScriptPlugin : public QScriptExtensionPlugin +{ +public: + QStringList keys() const; + void initialize(const QString &key, QScriptEngine *engine); +}; + +QStringList com_nokia_qbs_fileapi_ScriptPlugin::keys() const +{ + QStringList list; + list << QLatin1String("qbs"); + list << QLatin1String("qbs.fileapi"); + return list; +} + +void com_nokia_qbs_fileapi_ScriptPlugin::initialize(const QString &key, QScriptEngine *engine) +{ + if (key == QLatin1String("qbs")) { + } else if (key == QLatin1String("qbs.fileapi")) { + QScriptValue extensionObject = engine->globalObject(); + File::init(extensionObject, engine); + TextFile::init(extensionObject, engine); + } else { + Q_ASSERT_X(false, "qbs.fileapi::initialize", qPrintable(key)); + } +} + +Q_EXPORT_STATIC_PLUGIN(com_nokia_qbs_fileapi_ScriptPlugin) +Q_EXPORT_PLUGIN2(qtscript_com_nokia_qbs_fileapi, com_nokia_qbs_fileapi_ScriptPlugin) diff --git a/src/plugins/script/file/textfile.cpp b/src/plugins/script/file/textfile.cpp new file mode 100644 index 000000000..91817799e --- /dev/null +++ b/src/plugins/script/file/textfile.cpp @@ -0,0 +1,186 @@ +/************************************************************************** +** +** This file is part of the Qt Build Suite +** +** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. +** Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +**************************************************************************/ + +#include "textfile.h" +#include <QtCore/QFile> +#include <QtCore/QTextStream> +#include <QtScript/QScriptEngine> +#include <QtScript/QScriptValue> + +void TextFile::init(QScriptValue &extensionObject, QScriptEngine *engine) +{ + QScriptValue obj = engine->newQMetaObject(&TextFile::staticMetaObject, engine->newFunction(&TextFile::ctor)); + extensionObject.setProperty("TextFile", obj); +} + +QScriptValue TextFile::ctor(QScriptContext *context, QScriptEngine *engine) +{ + TextFile *t; + switch (context->argumentCount()) { + case 1: + t = new TextFile(context, + context->argument(0).toString()); + break; + case 2: + t = new TextFile(context, + context->argument(0).toString(), + static_cast<OpenMode>(context->argument(1).toInt32()) + ); + break; + case 3: + t = new TextFile(context, + context->argument(0).toString(), + static_cast<OpenMode>(context->argument(1).toInt32()), + context->argument(2).toString() + ); + break; + default: + return context->throwError("TextFile(QString file, OpenMode mode = ReadOnly, QString codec = QLatin1String(\"UTF8\"))"); + } + + QScriptValue obj = engine->newQObject(t, QScriptEngine::ScriptOwnership); +// obj.setProperty("d", engine->newQObject(new FileImplementation(t), +// QScriptEngine::QScriptEngine::QtOwnership)); + return obj; +} + +TextFile::~TextFile() +{ + delete qstream; + delete qfile; +} + +TextFile::TextFile(QScriptContext *context, QString file, OpenMode mode, QString codec) +{ + Q_UNUSED(codec) + Q_ASSERT(thisObject().engine() == engine()); + TextFile *t = this; + + t->qfile = new QFile(file); + QIODevice::OpenMode m = QIODevice::ReadOnly; + if (mode == ReadWrite) { + m = QIODevice::ReadWrite; + } else if (mode == ReadOnly) { + m = QIODevice::ReadOnly; + } else if (mode == WriteOnly) { + m = QIODevice::WriteOnly; + } + if (!t->qfile->open(m)) { + delete t->qfile; + t->qfile = 0; + context->throwError(QString::fromLatin1("unable to open '%1'") + .arg(file) + ); + } + + t->qstream = new QTextStream(t->qfile); +} + +void TextFile::close() +{ + Q_ASSERT(thisObject().engine() == engine()); + TextFile *t = qscriptvalue_cast<TextFile*>(thisObject()); + if (t->qfile) + t->qfile->close(); + delete t->qfile; + t->qfile = 0; + delete t->qstream; + t->qstream = 0; +} + +void TextFile::setCodec(QString codec) +{ + Q_ASSERT(thisObject().engine() == engine()); + TextFile *t = qscriptvalue_cast<TextFile*>(thisObject()); + if (!t->qstream) + return; + t->qstream->setCodec(qPrintable(codec)); +} + +QString TextFile::readLine() +{ + TextFile *t = qscriptvalue_cast<TextFile*>(thisObject()); + if (!t->qfile) + return QString(); + return t->qstream->readLine(); +} + +QString TextFile::readAll() +{ + TextFile *t = qscriptvalue_cast<TextFile*>(thisObject()); + if (!t->qfile) + return QString(); + return t->qstream->readAll(); +} + +bool TextFile::eof() +{ + TextFile *t = qscriptvalue_cast<TextFile*>(thisObject()); + if (!t->qstream) + return true; + return t->qstream->atEnd(); +} + +void TextFile::truncate() +{ + TextFile *t = qscriptvalue_cast<TextFile*>(thisObject()); + if (!t->qstream) + return; + t->qfile->resize(0); + t->qstream->reset(); +} + +void TextFile::write(QString str) +{ + TextFile *t = qscriptvalue_cast<TextFile*>(thisObject()); + if (!t->qstream) + return; + (*t->qstream) << str; +} + +void TextFile::writeLine(QString str) +{ + TextFile *t = qscriptvalue_cast<TextFile*>(thisObject()); + if (!t->qstream) + return; + (*t->qstream) << str; +#ifdef Q_OS_WINDOWS + (*t->qstream) <<"\r\n"; +#else + (*t->qstream) <<"\n"; +#endif +} diff --git a/src/plugins/script/file/textfile.h b/src/plugins/script/file/textfile.h new file mode 100644 index 000000000..3ac722311 --- /dev/null +++ b/src/plugins/script/file/textfile.h @@ -0,0 +1,76 @@ +/************************************************************************** +** +** This file is part of the Qt Build Suite +** +** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. +** Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +**************************************************************************/ + +#ifndef TEXTFILE_H +#define TEXTFILE_H + +#include <QtCore/QObject> +#include <QtCore/QVariant> +#include <QtScript/QScriptable> + +QT_BEGIN_NAMESPACE +class QFile; +class QTextStream; +QT_END_NAMESPACE + +class TextFile : public QObject, public QScriptable +{ + Q_OBJECT + Q_ENUMS(OpenMode) +public: + static void init(QScriptValue &extensionObject, QScriptEngine *engine); + + enum OpenMode { ReadOnly, WriteOnly, ReadWrite }; + static QScriptValue ctor(QScriptContext *context, QScriptEngine *engine); + TextFile(QScriptContext *context, QString file, OpenMode mode = ReadOnly, QString codec = QLatin1String("UTF8")); + ~TextFile(); + Q_INVOKABLE void close(); + Q_INVOKABLE void setCodec(QString codec); + Q_INVOKABLE QString readLine(); + Q_INVOKABLE QString readAll(); + Q_INVOKABLE bool eof(); + Q_INVOKABLE void truncate(); + Q_INVOKABLE void write(QString); + Q_INVOKABLE void writeLine(QString); +private: + QFile *qfile; + QTextStream *qstream; +}; + +Q_DECLARE_METATYPE(TextFile *); + +#endif // TEXTFILE_H |