Subversion Repositories Scribus

Rev

Rev 17686 | Rev 18194 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4430 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
82 Franz 7
/***************************************************************************
8
                          scriptplugin.cpp  -  description
9
                             -------------------
10
    begin                : Thu Oct 3 08:00:00 CEST 2002
11
    copyright            : (C) 2002 by Franz Schmid
12
    email                : Franz.Schmid@altmuehlnet.de
13
 ***************************************************************************/
14
 
15
/***************************************************************************
16
 *                                                                         *
17
 *   This program is free software; you can redistribute it and/or modify  *
18
 *   it under the terms of the GNU General Public License as published by  *
19
 *   the Free Software Foundation; either version 2 of the License, or     *
20
 *   (at your option) any later version.                                   *
21
 *                                                                         *
22
 ***************************************************************************/
792 subik 23
 
24
// include cmdvar.h first, as it pulls in <Python.h>
25
#include "cmdvar.h"
16856 craig 26
#include "cmdcell.h"
10862 cbradney 27
#include "cmdcolor.h"
103 Franz 28
#include "cmddialog.h"
29
#include "cmddoc.h"
10862 cbradney 30
#include "cmdgetprop.h"
31
#include "cmdgetsetprop.h"
32
#include "cmdmani.h"
33
#include "cmdmisc.h"
34
#include "cmdobj.h"
103 Franz 35
#include "cmdpage.h"
36
#include "cmdsetprop.h"
16856 craig 37
#include "cmdtable.h"
103 Franz 38
#include "cmdtext.h"
39
#include "cmdutil.h"
11384 subik 40
#include "cmdstyle.h"
13552 cbradney 41
#include "ui/customfdialog.h"
203 Franz 42
#include "guiapp.h"
13576 cbradney 43
#include "ui/helpbrowser.h"
14509 cbradney 44
#include "ui/scmwmenumanager.h"
10862 cbradney 45
#include "objimageexport.h"
46
#include "objpdffile.h"
47
#include "objprinter.h"
14629 cbradney 48
#include "prefs_scripter.h"
13551 cbradney 49
#include "ui/propertiespalette.h"
10862 cbradney 50
#include "scconfig.h"
1693 craig 51
#include "scpaths.h"
10862 cbradney 52
#include "scribuscore.h"
3071 subik 53
#include "scribusstructs.h"
10862 cbradney 54
#include "scriptercore.h"
3216 craig 55
#include "scripterprefsgui.h"
10862 cbradney 56
#include "scriptplugin.h"
57
#include "svgimport.h"
58
#include "units.h"
10200 cbradney 59
#include "util_icon.h"
60
 
10223 cbradney 61
#include <QApplication>
62
#include <QMessageBox>
63
#include <QTextCodec>
64
#include <QRegExp>
65
#include <QPixmap>
66
#include <QWidget>
67
#include <QString>
8501 cbradney 68
//Added by qt3to4:
9535 fschmid 69
#include <QByteArray>
82 Franz 70
#include <cstdlib>
853 subik 71
#include <iostream>
72
 
3216 craig 73
 
4119 craig 74
#ifdef HAVE_SCRIPTER2
75
extern void scripter2_init();
76
#endif
77
 
647 fschmid 78
// Exceptions; visible from cmdvar.h, set up in initscribus()
79
PyObject* ScribusException;
80
PyObject* NoDocOpenError;
853 subik 81
PyObject* WrongFrameTypeError;
82
PyObject* NoValidObjectError;
899 cbradney 83
PyObject* NotFoundError;
84
PyObject* NameExistsError;
647 fschmid 85
 
1425 subik 86
// Other extern variables defined in cmdvar.h
87
PyObject* wrappedMainWindow;
88
PyObject* wrappedQApp;
1718 craig 89
ScripterCore* scripterCore;
1425 subik 90
 
1718 craig 91
 
3207 craig 92
int scriptplugin_getPluginAPIVersion()
82 Franz 93
{
3207 craig 94
        return PLUGIN_API_VERSION;
82 Franz 95
}
96
 
3207 craig 97
ScPlugin* scriptplugin_getPlugin()
82 Franz 98
{
5310 cbradney 99
        scripterCore=0;
3207 craig 100
        ScriptPlugin* plug = new ScriptPlugin();
101
        Q_CHECK_PTR(plug);
102
        return plug;
82 Franz 103
}
104
 
3207 craig 105
void scriptplugin_freePlugin(ScPlugin* plugin)
660 fschmid 106
{
3207 craig 107
        ScriptPlugin* plug = dynamic_cast<ScriptPlugin*>(plugin);
108
        Q_ASSERT(plug);
109
        delete plug;
660 fschmid 110
}
111
 
3207 craig 112
ScriptPlugin::ScriptPlugin() : ScPersistentPlugin()
1269 cbradney 113
{
3207 craig 114
        // Set action info in languageChange, so we only have to do
115
        // it in one place.
116
        languageChange();
1269 cbradney 117
}
118
 
3207 craig 119
ScriptPlugin::~ScriptPlugin() {};
1269 cbradney 120
 
3207 craig 121
void ScriptPlugin::languageChange()
1269 cbradney 122
{
3207 craig 123
        if (scripterCore)
124
                scripterCore->languageChange();
1269 cbradney 125
}
126
 
5243 cbradney 127
void ScriptPlugin::addToMainWindowMenu(ScribusMainWindow* mw)
128
{
129
        if (scripterCore)
130
                scripterCore->addToMainWindowMenu(mw);
131
}
132
 
3207 craig 133
const QString ScriptPlugin::fullTrName() const
1269 cbradney 134
{
3207 craig 135
        return QObject::tr("Scripter");
1269 cbradney 136
}
137
 
3207 craig 138
const ScActionPlugin::AboutData* ScriptPlugin::getAboutData() const
1269 cbradney 139
{
3241 craig 140
        AboutData* about = new AboutData;
141
        Q_CHECK_PTR(about);
142
        about->authors = QString::fromUtf8(
143
                        "Petr Van\xc4\x9bk <petr@scribus.info>, "
144
                        "Franz Schmid <franz@scribus.info>, "
145
                        "Craig Ringer <craig@scribus.info>");
146
        about->shortDescription = tr("Embedded Python scripting support.");
147
        // about->description = tr("Write me!")
3439 subik 148
        // about->version
3241 craig 149
        // about->releaseDate
150
        // about->copyright
151
        // about->license
152
        return about;
1269 cbradney 153
}
154
 
3207 craig 155
void ScriptPlugin::deleteAboutData(const AboutData* about) const
2223 cbradney 156
{
3241 craig 157
        Q_ASSERT(about);
158
        delete about;
2223 cbradney 159
}
160
 
3207 craig 161
bool ScriptPlugin::initPlugin()
82 Franz 162
{
163
        QString cm;
14171 jghali 164
#if defined(Q_OS_WIN)
165
        QString pyHome = qApp->applicationDirPath() + "/python";
166
        if (QDir(pyHome).exists())
167
        {
168
                QString ph = QDir::toNativeSeparators(pyHome);
169
                pythonHome = ph.toLocal8Bit();
170
                Py_SetPythonHome(pythonHome.data());
171
        }
172
#endif
82 Franz 173
        Py_Initialize();
899 cbradney 174
        if (PyUnicode_SetDefaultEncoding("utf-8"))
175
        {
176
                qDebug("Failed to set default encoding to utf-8.\n");
177
                PyErr_Clear();
178
        }
1269 cbradney 179
 
5781 cbradney 180
        scripterCore = new ScripterCore(ScCore->primaryMainWindow());
3207 craig 181
        Q_CHECK_PTR(scripterCore);
5781 cbradney 182
        initscribus(ScCore->primaryMainWindow());
4119 craig 183
#ifdef HAVE_SCRIPTER2
184
        scripter2_init();
185
#endif
2706 craig 186
        scripterCore->setupMainInterpreter();
1752 craig 187
        scripterCore->initExtensionScripts();
188
        scripterCore->runStartupScript();
3207 craig 189
        return true;
1269 cbradney 190
}
191
 
3207 craig 192
bool ScriptPlugin::cleanupPlugin()
1269 cbradney 193
{
1718 craig 194
        if (scripterCore)
10222 jghali 195
        {
1718 craig 196
                delete scripterCore;
10222 jghali 197
                scripterCore = NULL;
198
        }
1269 cbradney 199
        Py_Finalize();
3207 craig 200
        return true;
1269 cbradney 201
}
202
 
14657 cbradney 203
bool ScriptPlugin::newPrefsPanelWidget(QWidget* parent, PrefsPanel*& panel, QString& caption, QPixmap& icon)
3216 craig 204
{
205
        panel = new ScripterPrefsGui(parent);
206
        Q_CHECK_PTR(panel);
16728 jghali 207
        connect(panel, SIGNAL(prefsChanged()), scripterCore, SLOT(updateSyntaxHighlighter()));
3216 craig 208
        caption = tr("Scripter");
209
        icon = loadIcon("python.png");
210
        return true;
211
}
212
 
14629 cbradney 213
 
14657 cbradney 214
bool ScriptPlugin::newPrefsPanelWidget(QWidget* parent, Prefs_Pane*& panel, QString& caption, QPixmap& icon)
14629 cbradney 215
{
216
        panel = new Prefs_Scripter(parent);
217
        Q_CHECK_PTR(panel);
16728 jghali 218
        connect(panel, SIGNAL(prefsChanged()), scripterCore, SLOT(updateSyntaxHighlighter()));
14629 cbradney 219
        caption = tr("Scripter");
15426 craig 220
        icon = loadIcon("python_16.png");
14629 cbradney 221
        return true;
222
}
223
 
3207 craig 224
/*  TEMPORARILY DISABLED
225
void run()
1269 cbradney 226
{
1693 craig 227
        QString pfad = ScPaths::instance().docDir();
1269 cbradney 228
        QString pfad2;
16577 craig 229
        pfad2 = QDir::toNativeSeparators(pfad + "en/Scripter/index.html");
5781 cbradney 230
        HelpBrowser *dia = new HelpBrowser(0, QObject::tr("Online Reference"), ScCore->primaryMainWindow()->getGuiLanguage(), "scripter");
1269 cbradney 231
        dia->show();
232
}
3207 craig 233
*/
1269 cbradney 234
 
235
 
82 Franz 236
/****************************************************************************************/
237
/*                                                                                      */
650 fschmid 238
/*   Definitions of the Python commands                                                 */
82 Franz 239
/*                                                                                      */
240
/****************************************************************************************/
241
 
11955 subik 242
/*static */PyObject *scribus_retval(PyObject* /*self*/, PyObject* args)
82 Franz 243
{
899 cbradney 244
        char *Name = NULL;
5051 subik 245
        if (!PyArg_ParseTuple(args, (char*)"s", &Name))
82 Franz 246
                return NULL;
899 cbradney 247
        // Because sysdefaultencoding is not utf-8, Python is returning utf-8 encoded
248
        // 8-bit char* strings. Make sure Qt understands that the input is utf-8 not
249
        // the default local encoding (usually latin-1) by using QString::fromUtf8()
5051 subik 250
        /*RetString = QString::fromUtf8(Name);
251
        RetVal = retV;*/
252
        scripterCore->returnString = QString::fromUtf8(Name);
82 Franz 253
        return PyInt_FromLong(0L);
254
}
255
 
11955 subik 256
/*static */PyObject *scribus_getval(PyObject* /*self*/)
82 Franz 257
{
10493 fschmid 258
        return PyString_FromString(scripterCore->inValue.toUtf8().data());
82 Franz 259
}
260
 
5051 subik 261
/*! \brief Translate a docstring. Small helper function for use with the
853 subik 262
 * PyMethodDef struct.
263
 */
264
char* tr(const char* docstringConstant)
265
{
899 cbradney 266
        // Alas, there's a lot of wasteful string copying going on
267
        // here.
268
        QString translated = QObject::tr(docstringConstant, "scripter docstring");
2071 subik 269
        // pv - hack for ugly formating in console removing
270
        translated.replace("\n\n", "<P>");
271
        translated.replace('\n', " ");
272
        translated.replace("<P>", "\n\n");
899 cbradney 273
        /*
274
         * Python doesn't support 'unicode' object docstrings in the PyMethodDef,
275
         * and has no way to specify what encoding docstrings are in. The passed C
276
         * strings passed are made into 'str' objects as-is. These are interpreted
277
         * as being in the Python sysdefaultencoding, usually 'ascii', when used.
278
         * We now set systemdefaultencoding to 'utf-8' ...  so we're going to pass
279
         * Python an 8-bit utf-8 encoded string in a char* .  With
280
         * sysdefaultencoding set correctly, Python will interpret it correctly and
281
         * we'll have our unicode docstrings. It's not as ugly a hack as it sounds,
282
         * you just have to remember that C and Python strings can both be
283
         * considered 8-bit strings of binary data that can be later interpreted as
284
         * a text string in a particular text encoding.
285
         */
286
        //QCString utfTranslated = translated.utf8();
9535 fschmid 287
        QByteArray trch = translated.toUtf8();
1559 craig 288
        char* utfstr = strdup(trch.data());
289
        if (!utfstr)
290
                // Complain, but then return NULL anyway. Python will treat NULL as
291
                // "no value" so that's fine.
292
                qDebug("scriptplugin.cpp:tr() - strdup() failure");
293
        return utfstr;
853 subik 294
}
295
 
899 cbradney 296
/* Now we're using the more pythonic convention for names:
297
 * class - ClassName
298
 * procedure/function/method - procedureName
299
 * etc. */
853 subik 300
PyMethodDef scribus_methods[] = {
421 Franz 301
        // 2004/10/03 pv - aliases with common Python syntax - ClassName methodName
655 fschmid 302
        // 2004-11-06 cr - move aliasing to dynamically generated wrapper functions, sort methoddef
934 subik 303
        {const_cast<char*>("changeColor"), scribus_setcolor, METH_VARARGS, tr(scribus_setcolor__doc__)},
14804 jghali 304
        {const_cast<char*>("changeColorRGB"), scribus_setcolorrgb, METH_VARARGS, tr(scribus_setcolorrgb__doc__)},
305
        {const_cast<char*>("changeColorCMYK"), scribus_setcolorcmyk, METH_VARARGS, tr(scribus_setcolorcmyk__doc__)},
934 subik 306
        {const_cast<char*>("closeDoc"), (PyCFunction)scribus_closedoc, METH_NOARGS, tr(scribus_closedoc__doc__)},
4062 craig 307
        {const_cast<char*>("closeMasterPage"), (PyCFunction)scribus_closemasterpage, METH_NOARGS, tr(scribus_closemasterpage__doc__)},
934 subik 308
        {const_cast<char*>("createBezierLine"), scribus_bezierline, METH_VARARGS, tr(scribus_bezierline__doc__)},
309
        {const_cast<char*>("createEllipse"), scribus_newellipse, METH_VARARGS, tr(scribus_newellipse__doc__)},
310
        {const_cast<char*>("createImage"), scribus_newimage, METH_VARARGS, tr(scribus_newimage__doc__)},
311
        {const_cast<char*>("createLayer"), scribus_createlayer, METH_VARARGS, tr(scribus_createlayer__doc__)},
312
        {const_cast<char*>("createLine"), scribus_newline, METH_VARARGS, tr(scribus_newline__doc__)},
4062 craig 313
        {const_cast<char*>("createMasterPage"), scribus_createmasterpage, METH_VARARGS, tr(scribus_createmasterpage__doc__)},
934 subik 314
        {const_cast<char*>("createPathText"), scribus_pathtext, METH_VARARGS, tr(scribus_pathtext__doc__)},
315
        {const_cast<char*>("createPolygon"), scribus_polygon, METH_VARARGS, tr(scribus_polygon__doc__)},
316
        {const_cast<char*>("createPolyLine"), scribus_polyline, METH_VARARGS, tr(scribus_polyline__doc__)},
317
        {const_cast<char*>("createRect"), scribus_newrect, METH_VARARGS, tr(scribus_newrect__doc__)},
318
        {const_cast<char*>("createText"), scribus_newtext, METH_VARARGS, tr(scribus_newtext__doc__)},
16856 craig 319
        {const_cast<char*>("createTable"), scribus_newtable, METH_VARARGS, tr(scribus_newtable__doc__)},
11384 subik 320
        {const_cast<char*>("createParagraphStyle"), (PyCFunction)scribus_createparagraphstyle, METH_KEYWORDS, tr(scribus_createparagraphstyle__doc__)},
321
        {const_cast<char*>("createCharStyle"), (PyCFunction)scribus_createcharstyle, METH_KEYWORDS, tr(scribus_createcharstyle__doc__)},
934 subik 322
        {const_cast<char*>("currentPage"), (PyCFunction)scribus_actualpage, METH_NOARGS, tr(scribus_actualpage__doc__)},
323
        {const_cast<char*>("defineColor"), scribus_newcolor, METH_VARARGS, tr(scribus_newcolor__doc__)},
14804 jghali 324
        {const_cast<char*>("defineColorRGB"), scribus_newcolorrgb, METH_VARARGS, tr(scribus_newcolorrgb__doc__)},
325
        {const_cast<char*>("defineColorCMYK"), scribus_newcolorcmyk, METH_VARARGS, tr(scribus_newcolorcmyk__doc__)},
934 subik 326
        {const_cast<char*>("deleteColor"), scribus_delcolor, METH_VARARGS, tr(scribus_delcolor__doc__)},
327
        {const_cast<char*>("deleteLayer"), scribus_removelayer, METH_VARARGS, tr(scribus_removelayer__doc__)},
4064 craig 328
        {const_cast<char*>("deleteMasterPage"), scribus_deletemasterpage, METH_VARARGS, tr(scribus_deletemasterpage__doc__)},
934 subik 329
        {const_cast<char*>("deleteObject"), scribus_deleteobj, METH_VARARGS, tr(scribus_deleteobj__doc__)},
330
        {const_cast<char*>("deletePage"), scribus_deletepage, METH_VARARGS, tr(scribus_deletepage__doc__)},
331
        {const_cast<char*>("deleteText"), scribus_deletetext, METH_VARARGS, tr(scribus_deletetext__doc__)},
332
        {const_cast<char*>("deselectAll"), (PyCFunction)scribus_deselect, METH_NOARGS, tr(scribus_deselect__doc__)},
333
        {const_cast<char*>("docChanged"), scribus_docchanged, METH_VARARGS, tr(scribus_docchanged__doc__)},
4062 craig 334
        {const_cast<char*>("editMasterPage"), scribus_editmasterpage, METH_VARARGS, tr(scribus_editmasterpage__doc__)},
934 subik 335
        {const_cast<char*>("fileDialog"), (PyCFunction)scribus_filedia, METH_VARARGS|METH_KEYWORDS, tr(scribus_filedia__doc__)},
14947 jghali 336
        {const_cast<char*>("fileQuit"), scribus_filequit, METH_VARARGS, tr(scribus_filequit__doc__)},
15528 craig 337
        {const_cast<char*>("flipObject"), scribus_flipobject, METH_VARARGS, tr(scribus_flipobject__doc__)},
934 subik 338
        {const_cast<char*>("getActiveLayer"), (PyCFunction)scribus_getactlayer, METH_NOARGS, tr(scribus_getactlayer__doc__)},
339
        {const_cast<char*>("getAllObjects"), scribus_getallobj, METH_VARARGS, tr(scribus_getallobj__doc__)},
340
        {const_cast<char*>("getAllStyles"), (PyCFunction)scribus_getstylenames, METH_NOARGS, tr(scribus_getstylenames__doc__)},
341
        {const_cast<char*>("getAllText"), scribus_gettext, METH_VARARGS, tr(scribus_gettext__doc__)},
16856 craig 342
        {const_cast<char*>("getCellStyle"), scribus_getcellstyle, METH_VARARGS, tr(scribus_getcellstyle__doc__)},
343
        {const_cast<char*>("getCellColumnSpan"), scribus_getcellcolumnspan, METH_VARARGS, tr(scribus_getcellcolumnspan__doc__)},
344
        {const_cast<char*>("getCellRowSpan"), scribus_getcellrowspan, METH_VARARGS, tr(scribus_getcellrowspan__doc__)},
345
        {const_cast<char*>("getCellFillColor"), scribus_getcellfillcolor, METH_VARARGS, tr(scribus_getcellfillcolor__doc__)},
934 subik 346
        {const_cast<char*>("getColorNames"), (PyCFunction)scribus_colornames, METH_NOARGS, tr(scribus_colornames__doc__)},
347
        {const_cast<char*>("getColor"), scribus_getcolor, METH_VARARGS, tr(scribus_getcolor__doc__)},
1517 craig 348
        {const_cast<char*>("getColorAsRGB"), scribus_getcolorasrgb, METH_VARARGS, tr(scribus_getcolorasrgb__doc__)},
13057 subik 349
        {const_cast<char*>("isSpotColor"), scribus_isspotcolor, METH_VARARGS, tr(scribus_isspotcolor__doc__)},
350
        {const_cast<char*>("setSpotColor"), scribus_setspotcolor, METH_VARARGS, tr(scribus_setspotcolor__doc__)},
12332 jghali 351
        {const_cast<char*>("getTextDistances"), scribus_gettextdistances, METH_VARARGS, tr(scribus_gettextdistances__doc__)},
934 subik 352
        {const_cast<char*>("getColumnGap"), scribus_getcolumngap, METH_VARARGS, tr(scribus_getcolumngap__doc__)},
353
        {const_cast<char*>("getColumns"), scribus_getcolumns, METH_VARARGS, tr(scribus_getcolumns__doc__)},
354
        {const_cast<char*>("getCornerRadius"), scribus_getcornerrad, METH_VARARGS, tr(scribus_getcornerrad__doc__)},
355
        {const_cast<char*>("getFillColor"), scribus_getfillcolor, METH_VARARGS, tr(scribus_getfillcolor__doc__)},
356
        {const_cast<char*>("getFillShade"), scribus_getfillshade, METH_VARARGS, tr(scribus_getfillshade__doc__)},
5887 fschmid 357
        {const_cast<char*>("getFillBlendmode"), scribus_getfillblend, METH_VARARGS, tr(scribus_getfillblend__doc__)},
358
        {const_cast<char*>("getFillTransparency"), scribus_getfilltrans, METH_VARARGS, tr(scribus_getfilltrans__doc__)},
934 subik 359
        {const_cast<char*>("getFontNames"), (PyCFunction)scribus_fontnames, METH_NOARGS, tr(scribus_fontnames__doc__)},
360
        {const_cast<char*>("getFont"), scribus_getfont, METH_VARARGS, tr(scribus_getfont__doc__)},
361
        {const_cast<char*>("getFontSize"), scribus_getfontsize, METH_VARARGS, tr(scribus_getfontsize__doc__)},
362
        {const_cast<char*>("getGuiLanguage"), (PyCFunction)scribus_getlanguage, METH_NOARGS, tr(scribus_getlanguage__doc__)},
363
        {const_cast<char*>("getHGuides"), (PyCFunction)scribus_getHguides, METH_NOARGS, tr(scribus_getHguides__doc__)},
364
        {const_cast<char*>("getImageFile"), scribus_getimgname, METH_VARARGS, tr(scribus_getimgname__doc__)},
365
        {const_cast<char*>("getImageScale"), scribus_getimgscale, METH_VARARGS, tr(scribus_getimgscale__doc__)},
366
        {const_cast<char*>("getLayers"), (PyCFunction)scribus_getlayers, METH_NOARGS, tr(scribus_getlayers__doc__)},
5887 fschmid 367
        {const_cast<char*>("getLayerBlendmode"), scribus_glayerblend, METH_VARARGS, tr(scribus_glayerblend__doc__)},
368
        {const_cast<char*>("getLayerTransparency"), scribus_glayertrans, METH_VARARGS, tr(scribus_glayertrans__doc__)},
15494 craig 369
        {const_cast<char*>("getLineCap"), scribus_getlinecap, METH_VARARGS, tr(scribus_getlinecap__doc__)},
934 subik 370
        {const_cast<char*>("getLineColor"), scribus_getlinecolor, METH_VARARGS, tr(scribus_getlinecolor__doc__)},
11528 jghali 371
        {const_cast<char*>("getLineShade"), scribus_getlineshade, METH_VARARGS, tr(scribus_getlineshade__doc__)},
372
        {const_cast<char*>("getLineBlendmode"), scribus_getlineblend, METH_VARARGS, tr(scribus_getlineblend__doc__)},
373
        {const_cast<char*>("getLineTransparency"), scribus_getlinetrans, METH_VARARGS, tr(scribus_getlinetrans__doc__)},
934 subik 374
        {const_cast<char*>("getLineJoin"), scribus_getlinejoin, METH_VARARGS, tr(scribus_getlinejoin__doc__)},
375
        {const_cast<char*>("getLineSpacing"), scribus_getlinespace, METH_VARARGS, tr(scribus_getlinespace__doc__)},
376
        {const_cast<char*>("getLineStyle"), scribus_getlinestyle, METH_VARARGS, tr(scribus_getlinestyle__doc__)},
377
        {const_cast<char*>("getLineWidth"), scribus_getlinewidth, METH_VARARGS, tr(scribus_getlinewidth__doc__)},
378
        {const_cast<char*>("getPageItems"), (PyCFunction)scribus_getpageitems, METH_NOARGS, tr(scribus_getpageitems__doc__)},
379
        {const_cast<char*>("getPageMargins"), (PyCFunction)scribus_getpagemargins, METH_NOARGS, tr(scribus_getpagemargins__doc__)},
6299 fschmid 380
        {const_cast<char*>("getPageType"), (PyCFunction)scribus_pageposition, METH_VARARGS, tr(scribus_pageposition__doc__)},
14142 cbradney 381
        {const_cast<char*>("getPageSize"), (PyCFunction)scribus_pagedimension, METH_NOARGS, tr(scribus_pagedimension__doc__)},
382
        {const_cast<char*>("getPageNSize"), scribus_pagensize, METH_VARARGS, tr(scribus_pagensize__doc__)},
383
        {const_cast<char*>("getPageNMargins"), scribus_pagenmargins, METH_VARARGS, tr(scribus_pagenmargins__doc__)},
11048 jghali 384
        {const_cast<char*>("importPage"), scribus_importpage, METH_VARARGS, tr(scribus_importpage__doc__)},
934 subik 385
        {const_cast<char*>("getPosition"), scribus_getposi, METH_VARARGS, tr(scribus_getposi__doc__)},
386
        {const_cast<char*>("getRotation"), scribus_getrotation, METH_VARARGS, tr(scribus_getrotation__doc__)},
14940 jghali 387
        {const_cast<char*>("getObjectType"), scribus_getobjecttype, METH_VARARGS, tr(scribus_getobjecttype__doc__)},
934 subik 388
        {const_cast<char*>("getSelectedObject"), scribus_getselobjnam, METH_VARARGS, tr(scribus_getselobjnam__doc__)},
389
        {const_cast<char*>("getSize"), scribus_getsize, METH_VARARGS, tr(scribus_getsize__doc__)},
16856 craig 390
        {const_cast<char*>("getTableRows"), scribus_gettablerows, METH_VARARGS, tr(scribus_gettablerows__doc__)},
391
        {const_cast<char*>("getTableRowHeight"), scribus_gettablerowheight, METH_VARARGS, tr(scribus_gettablerowheight__doc__)},
392
        {const_cast<char*>("getTableColumns"), scribus_gettablecolumns, METH_VARARGS, tr(scribus_gettablecolumns__doc__)},
393
        {const_cast<char*>("getTableColumnWidth"), scribus_gettablecolumnwidth, METH_VARARGS, tr(scribus_gettablecolumnwidth__doc__)},
394
        {const_cast<char*>("getTableStyle"), scribus_gettablestyle, METH_VARARGS, tr(scribus_gettablestyle__doc__)},
395
        {const_cast<char*>("getTableFillColor"), scribus_gettablefillcolor, METH_VARARGS, tr(scribus_gettablefillcolor__doc__)},
934 subik 396
        {const_cast<char*>("getTextColor"), scribus_getlinecolor, METH_VARARGS, tr(scribus_getlinecolor__doc__)},
397
        {const_cast<char*>("getTextLength"), scribus_gettextsize, METH_VARARGS, tr(scribus_gettextsize__doc__)},
6298 fschmid 398
        {const_cast<char*>("getTextLines"), scribus_gettextlines, METH_VARARGS, tr(scribus_gettextlines__doc__)},
934 subik 399
        {const_cast<char*>("getText"), scribus_getframetext, METH_VARARGS, tr(scribus_getframetext__doc__)},
400
        {const_cast<char*>("getTextShade"), scribus_getlineshade, METH_VARARGS, tr(scribus_getlineshade__doc__)},
401
        {const_cast<char*>("getUnit"), (PyCFunction)scribus_getunit, METH_NOARGS, tr(scribus_getunit__doc__)},
402
        {const_cast<char*>("getVGuides"), (PyCFunction)scribus_getVguides, METH_NOARGS, tr(scribus_getVguides__doc__)},
403
        {const_cast<char*>("getXFontNames"), (PyCFunction)scribus_xfontnames, METH_NOARGS, tr(scribus_xfontnames__doc__)},
404
        {const_cast<char*>("gotoPage"), scribus_gotopage, METH_VARARGS, tr(scribus_gotopage__doc__)},
14714 jghali 405
        {const_cast<char*>("groupObjects"), (PyCFunction)scribus_groupobj, METH_VARARGS, tr(scribus_groupobj__doc__)},
934 subik 406
        {const_cast<char*>("haveDoc"), (PyCFunction)scribus_havedoc, METH_NOARGS, tr(scribus_havedoc__doc__)},
14758 fschmid 407
        {const_cast<char*>("placeVectorFile"), scribus_placevec, METH_VARARGS, tr(scribus_placevec__doc__)},
408
        {const_cast<char*>("placeSVG"), scribus_placevec, METH_VARARGS, tr(scribus_placesvg__doc__)},
409
        {const_cast<char*>("placeEPS"), scribus_placevec, METH_VARARGS, tr(scribus_placeeps__doc__)},
410
        {const_cast<char*>("placeSXD"), scribus_placevec, METH_VARARGS, tr(scribus_placesxd__doc__)},
411
        {const_cast<char*>("placeODG"), scribus_placevec, METH_VARARGS, tr(scribus_placeodg__doc__)},
16856 craig 412
        {const_cast<char*>("insertTableRows"), scribus_inserttablerows, METH_VARARGS, tr(scribus_inserttablerows__doc__)},
413
        {const_cast<char*>("insertTableColumns"), scribus_inserttablecolumns, METH_VARARGS, tr(scribus_inserttablecolumns__doc__)},
934 subik 414
        {const_cast<char*>("insertText"), scribus_inserttext, METH_VARARGS, tr(scribus_inserttext__doc__)},
17795 jghali 415
        {const_cast<char*>("insertHtmlText"), scribus_inserthtmltext, METH_VARARGS, tr(scribus_inserthtmltext__doc__)},
934 subik 416
        {const_cast<char*>("isLayerPrintable"), scribus_glayerprint, METH_VARARGS, tr(scribus_glayerprint__doc__)},
417
        {const_cast<char*>("isLayerVisible"), scribus_glayervisib, METH_VARARGS, tr(scribus_glayervisib__doc__)},
5887 fschmid 418
        {const_cast<char*>("isLayerLocked"), scribus_glayerlock, METH_VARARGS, tr(scribus_glayerlock__doc__)},
419
        {const_cast<char*>("isLayerOutlined"), scribus_glayeroutline, METH_VARARGS, tr(scribus_glayeroutline__doc__)},
420
        {const_cast<char*>("isLayerFlow"), scribus_glayerflow, METH_VARARGS, tr(scribus_glayerflow__doc__)},
934 subik 421
        {const_cast<char*>("isLocked"), scribus_islocked, METH_VARARGS, tr(scribus_islocked__doc__)},
422
        {const_cast<char*>("linkTextFrames"), scribus_linktextframes, METH_VARARGS, tr(scribus_linktextframes__doc__)},
423
        {const_cast<char*>("loadImage"), scribus_loadimage, METH_VARARGS, tr(scribus_loadimage__doc__)},
424
        {const_cast<char*>("loadStylesFromFile"), scribus_loadstylesfromfile, METH_VARARGS, tr(scribus_loadstylesfromfile__doc__)},
425
        {const_cast<char*>("lockObject"), scribus_lockobject, METH_VARARGS, tr(scribus_lockobject__doc__)},
4062 craig 426
        {const_cast<char*>("masterPageNames"), (PyCFunction)scribus_masterpagenames, METH_NOARGS, tr(scribus_masterpagenames__doc__)},
16856 craig 427
        {const_cast<char*>("mergeTableCells"), scribus_mergetablecells, METH_VARARGS, tr(scribus_mergetablecells__doc__)},
934 subik 428
        {const_cast<char*>("messagebarText"), scribus_messagebartext, METH_VARARGS, tr(scribus_messagebartext__doc__)},
429
        {const_cast<char*>("messageBox"), (PyCFunction)scribus_messdia, METH_VARARGS|METH_KEYWORDS, tr(scribus_messdia__doc__)},
430
        {const_cast<char*>("moveObjectAbs"), scribus_moveobjabs, METH_VARARGS, tr(scribus_moveobjabs__doc__)},
431
        {const_cast<char*>("moveObject"), scribus_moveobjrel, METH_VARARGS, tr(scribus_moveobjrel__doc__)},
432
        {const_cast<char*>("newDocDialog"), (PyCFunction)scribus_newdocdia, METH_NOARGS, tr(scribus_newdocdia__doc__)},
433
        {const_cast<char*>("newDoc"), scribus_newdoc, METH_VARARGS, tr(scribus_newdoc__doc__)},
3647 subik 434
        {const_cast<char*>("newDocument"), scribus_newdocument, METH_VARARGS, tr(scribus_newdocument__doc__)},
934 subik 435
        {const_cast<char*>("newPage"), scribus_newpage, METH_VARARGS, tr(scribus_newpage__doc__)},
3017 subik 436
        {const_cast<char*>("newStyleDialog"), scribus_newstyledialog, METH_NOARGS, tr(scribus_newstyledialog__doc__)},
934 subik 437
        {const_cast<char*>("objectExists"),scribus_objectexists, METH_VARARGS, tr(scribus_objectexists__doc__)},
438
        {const_cast<char*>("openDoc"), scribus_opendoc, METH_VARARGS, tr(scribus_opendoc__doc__)},
439
        {const_cast<char*>("pageCount"), (PyCFunction)scribus_pagecount, METH_NOARGS, tr(scribus_pagecount__doc__)},
7440 subik 440
        {const_cast<char*>("pageDimension"), (PyCFunction)scribus_pagedimension, METH_NOARGS, "Obsolete function. Don't use it."},
934 subik 441
        {const_cast<char*>("progressReset"), (PyCFunction)scribus_progressreset, METH_NOARGS, tr(scribus_progressreset__doc__)},
442
        {const_cast<char*>("progressSet"), scribus_progresssetprogress, METH_VARARGS, tr(scribus_progresssetprogress__doc__)},
443
        {const_cast<char*>("progressTotal"), scribus_progresssettotalsteps, METH_VARARGS, tr(scribus_progresssettotalsteps__doc__)},
444
        {const_cast<char*>("redrawAll"), (PyCFunction)scribus_redraw, METH_NOARGS, tr(scribus_redraw__doc__)},
16856 craig 445
        {const_cast<char*>("removeTableRows"), scribus_removetablerows, METH_VARARGS, tr(scribus_removetablerows__doc__)},
446
        {const_cast<char*>("removeTableColumns"), scribus_removetablecolumns, METH_VARARGS, tr(scribus_removetablecolumns__doc__)},
1514 craig 447
        {const_cast<char*>("renderFont"), (PyCFunction)scribus_renderfont, METH_KEYWORDS, tr(scribus_renderfont__doc__)},
934 subik 448
        {const_cast<char*>("replaceColor"), scribus_replcolor, METH_VARARGS, tr(scribus_replcolor__doc__)},
16856 craig 449
        {const_cast<char*>("resizeTableColumn"), scribus_resizetablecolumn, METH_VARARGS, tr(scribus_resizetablecolumn__doc__)},
450
        {const_cast<char*>("resizeTableRow"), scribus_resizetablerow, METH_VARARGS, tr(scribus_resizetablerow__doc__)},
934 subik 451
        {const_cast<char*>("rotateObjectAbs"), scribus_rotobjabs, METH_VARARGS, tr(scribus_rotobjabs__doc__)},
452
        {const_cast<char*>("rotateObject"), scribus_rotobjrel, METH_VARARGS, tr(scribus_rotobjrel__doc__)},
14342 cbradney 453
        {const_cast<char*>("getDocName"), (PyCFunction)scribus_getdocname, METH_NOARGS, tr(scribus_getdocname__doc__)},
934 subik 454
        {const_cast<char*>("saveDocAs"), scribus_savedocas, METH_VARARGS, tr(scribus_savedocas__doc__)},
455
        {const_cast<char*>("saveDoc"), (PyCFunction)scribus_savedoc, METH_NOARGS, tr(scribus_savedoc__doc__)},
456
        {const_cast<char*>("savePageAsEPS"), scribus_savepageeps, METH_VARARGS, tr(scribus_savepageeps__doc__)},
457
        {const_cast<char*>("scaleGroup"), scribus_scalegroup, METH_VARARGS, tr(scribus_scalegroup__doc__)},
458
        {const_cast<char*>("scaleImage"), scribus_scaleimage, METH_VARARGS, tr(scribus_scaleimage__doc__)},
14822 cbradney 459
        {const_cast<char*>("setImageBrightness"), scribus_setimagebrightness, METH_VARARGS, tr(scribus_setimagebrightness__doc__)},
460
        {const_cast<char*>("setImageGrayscale"), scribus_setimagegrayscale, METH_VARARGS, tr(scribus_setimagegrayscale__doc__)},
13077 jghali 461
        {const_cast<char*>("setImageScale"), scribus_setimagescale, METH_VARARGS, tr(scribus_setimagescale__doc__)},
14822 cbradney 462
        {const_cast<char*>("setImageOffset"), scribus_setimageoffset, METH_VARARGS, tr(scribus_setimageoffset__doc__)},
934 subik 463
        {const_cast<char*>("selectionCount"), (PyCFunction)scribus_selcount, METH_NOARGS, tr(scribus_selcount__doc__)},
464
        {const_cast<char*>("selectObject"), scribus_selectobj, METH_VARARGS, tr(scribus_selectobj__doc__)},
465
        {const_cast<char*>("selectText"), scribus_selecttext, METH_VARARGS, tr(scribus_selecttext__doc__)},
466
        {const_cast<char*>("sentToLayer"), scribus_senttolayer, METH_VARARGS, tr(scribus_senttolayer__doc__)},
467
        {const_cast<char*>("setActiveLayer"), scribus_setactlayer, METH_VARARGS, tr(scribus_setactlayer__doc__)},
1534 subik 468
        {const_cast<char*>("setPDFBookmark"), scribus_setpdfbookmark, METH_VARARGS, tr(scribus_setpdfbookmark__doc__)},
469
        {const_cast<char*>("isPDFBookmark"), scribus_ispdfbookmark, METH_VARARGS, tr(scribus_ispdfbookmark__doc__)},
12332 jghali 470
        {const_cast<char*>("setTextDistances"), scribus_settextdistances, METH_VARARGS, tr(scribus_settextdistances__doc__)},
16856 craig 471
        {const_cast<char*>("setCellStyle"), scribus_setcellstyle, METH_VARARGS, tr(scribus_setcellstyle__doc__)},
472
        {const_cast<char*>("setCellText"), scribus_setcelltext, METH_VARARGS, tr(scribus_setcelltext__doc__)},
473
        {const_cast<char*>("setCellFillColor"), scribus_setcellfillcolor, METH_VARARGS, tr(scribus_setcellfillcolor__doc__)},
474
        {const_cast<char*>("setCellLeftBorder"), scribus_setcellleftborder, METH_VARARGS, tr(scribus_setcellleftborder__doc__)},
475
        {const_cast<char*>("setCellLeftPadding"), scribus_setcellleftpadding, METH_VARARGS, tr(scribus_setcellleftpadding__doc__)},
476
        {const_cast<char*>("setCellRightBorder"), scribus_setcellrightborder, METH_VARARGS, tr(scribus_setcellrightborder__doc__)},
477
        {const_cast<char*>("setCellRightPadding"), scribus_setcellrightpadding, METH_VARARGS, tr(scribus_setcellrightpadding__doc__)},
478
        {const_cast<char*>("setCellTopBorder"), scribus_setcelltopborder, METH_VARARGS, tr(scribus_setcelltopborder__doc__)},
479
        {const_cast<char*>("setCellTopPadding"), scribus_setcelltoppadding, METH_VARARGS, tr(scribus_setcelltoppadding__doc__)},
480
        {const_cast<char*>("setCellBottomBorder"), scribus_setcellbottomborder, METH_VARARGS, tr(scribus_setcellbottomborder__doc__)},
481
        {const_cast<char*>("setCellBottomPadding"), scribus_setcellbottompadding, METH_VARARGS, tr(scribus_setcellbottompadding__doc__)},
934 subik 482
        {const_cast<char*>("setColumnGap"), scribus_setcolumngap, METH_VARARGS, tr(scribus_setcolumngap__doc__)},
483
        {const_cast<char*>("setColumns"), scribus_setcolumns, METH_VARARGS, tr(scribus_setcolumns__doc__)},
484
        {const_cast<char*>("setCornerRadius"), scribus_setcornerrad, METH_VARARGS, tr(scribus_setcornerrad__doc__)},
485
        {const_cast<char*>("setCursor"), scribus_setcursor, METH_VARARGS, tr(scribus_setcursor__doc__)},
486
        {const_cast<char*>("setDocType"), scribus_setdoctype, METH_VARARGS, tr(scribus_setdoctype__doc__)},
487
        {const_cast<char*>("setFillColor"), scribus_setfillcolor, METH_VARARGS, tr(scribus_setfillcolor__doc__)},
5887 fschmid 488
        {const_cast<char*>("setFillTransparency"), scribus_setfilltrans, METH_VARARGS, tr(scribus_setfilltrans__doc__)},
489
        {const_cast<char*>("setFillBlendmode"), scribus_setfillblend, METH_VARARGS, tr(scribus_setfillblend__doc__)},
934 subik 490
        {const_cast<char*>("setFillShade"), scribus_setfillshade, METH_VARARGS, tr(scribus_setfillshade__doc__)},
491
        {const_cast<char*>("setFont"), scribus_setfont, METH_VARARGS, tr(scribus_setfont__doc__)},
492
        {const_cast<char*>("setFontSize"), scribus_setfontsize, METH_VARARGS, tr(scribus_setfontsize__doc__)},
493
        {const_cast<char*>("setGradientFill"), scribus_setgradfill, METH_VARARGS, tr(scribus_setgradfill__doc__)},
13182 jghali 494
        {const_cast<char*>("setGradientStop"), scribus_setgradstop, METH_VARARGS, tr(scribus_setgradstop__doc__)},
934 subik 495
        {const_cast<char*>("setHGuides"), scribus_setHguides, METH_VARARGS, tr(scribus_setHguides__doc__)},
496
        {const_cast<char*>("setInfo"), scribus_setinfo, METH_VARARGS, tr(scribus_setinfo__doc__)},
497
        {const_cast<char*>("setLayerPrintable"), scribus_layerprint, METH_VARARGS, tr(scribus_layerprint__doc__)},
498
        {const_cast<char*>("setLayerVisible"), scribus_layervisible, METH_VARARGS, tr(scribus_layervisible__doc__)},
5887 fschmid 499
        {const_cast<char*>("setLayerLocked"), scribus_layerlock, METH_VARARGS, tr(scribus_layerlock__doc__)},
500
        {const_cast<char*>("setLayerOutlined"), scribus_layeroutline, METH_VARARGS, tr(scribus_layeroutline__doc__)},
501
        {const_cast<char*>("setLayerFlow"), scribus_layerflow, METH_VARARGS, tr(scribus_layerflow__doc__)},
502
        {const_cast<char*>("setLayerBlendmode"), scribus_layerblend, METH_VARARGS, tr(scribus_layerblend__doc__)},
503
        {const_cast<char*>("setLayerTransparency"), scribus_layertrans, METH_VARARGS, tr(scribus_layertrans__doc__)},
15494 craig 504
        {const_cast<char*>("setLineCap"), scribus_setlinecap, METH_VARARGS, tr(scribus_setlinecap__doc__)},
934 subik 505
        {const_cast<char*>("setLineColor"), scribus_setlinecolor, METH_VARARGS, tr(scribus_setlinecolor__doc__)},
5887 fschmid 506
        {const_cast<char*>("setLineTransparency"), scribus_setlinetrans, METH_VARARGS, tr(scribus_setlinetrans__doc__)},
507
        {const_cast<char*>("setLineBlendmode"), scribus_setlineblend, METH_VARARGS, tr(scribus_setlineblend__doc__)},
934 subik 508
        {const_cast<char*>("setLineJoin"), scribus_setlinejoin, METH_VARARGS, tr(scribus_setlinejoin__doc__)},
509
        {const_cast<char*>("setLineShade"), scribus_setlineshade, METH_VARARGS, tr(scribus_setlineshade__doc__)},
510
        {const_cast<char*>("setLineSpacing"), scribus_setlinespace, METH_VARARGS, tr(scribus_setlinespace__doc__)},
14427 jghali 511
        {const_cast<char*>("setLineSpacingMode"), scribus_setlinespacemode, METH_VARARGS, tr(scribus_setlinespacemode__doc__)},
934 subik 512
        {const_cast<char*>("setLineStyle"), scribus_setlinestyle, METH_VARARGS, tr(scribus_setlinestyle__doc__)},
513
        {const_cast<char*>("setLineWidth"), scribus_setlinewidth, METH_VARARGS, tr(scribus_setlinewidth__doc__)},
514
        {const_cast<char*>("setMargins"), scribus_setmargins, METH_VARARGS, tr(scribus_setmargins__doc__)},
14427 jghali 515
        {const_cast<char*>("setBaseLine"), scribus_setbaseline, METH_VARARGS, tr(scribus_setbaseline__doc__)},
934 subik 516
        {const_cast<char*>("setMultiLine"), scribus_setmultiline, METH_VARARGS, tr(scribus_setmultiline__doc__)},
17621 craig 517
        {const_cast<char*>("setNewName"), scribus_setnewname, METH_VARARGS, tr(scribus_setnewname__doc__)},
733 subik 518
        // duplicity? {"setMultiLine", scribus_setmultiline, METH_VARARGS, "TODO: docstring"},
934 subik 519
        {const_cast<char*>("setRedraw"), scribus_setredraw, METH_VARARGS, tr(scribus_setredraw__doc__)},
733 subik 520
        // missing? {"setSelectedObject", scribus_setselobjnam, METH_VARARGS, "Returns the Name of the selecteted Object. \"nr\" if given indicates the Number of the selected Object, e.g. 0 means the first selected Object, 1 means the second selected Object and so on."},
11227 subik 521
        {const_cast<char*>("hyphenateText"), scribus_hyphenatetext, METH_VARARGS, tr(scribus_hyphenatetext__doc__)},
522
        {const_cast<char*>("dehyphenateText"), scribus_dehyphenatetext, METH_VARARGS, tr(scribus_dehyphenatetext__doc__)},
1381 cbradney 523
        {const_cast<char*>("setScaleImageToFrame"), (PyCFunction)scribus_setscaleimagetoframe, METH_KEYWORDS, tr(scribus_setscaleimagetoframe__doc__)},
934 subik 524
        {const_cast<char*>("setStyle"), scribus_setstyle, METH_VARARGS, tr(scribus_setstyle__doc__)},
16856 craig 525
        {const_cast<char*>("setTableStyle"), scribus_settablestyle, METH_VARARGS, tr(scribus_settablestyle__doc__)},
526
        {const_cast<char*>("setTableLeftBorder"), scribus_settableleftborder, METH_VARARGS, tr(scribus_settableleftborder__doc__)},
527
        {const_cast<char*>("setTableRightBorder"), scribus_settablerightborder, METH_VARARGS, tr(scribus_settablerightborder__doc__)},
528
        {const_cast<char*>("setTableTopBorder"), scribus_settabletopborder, METH_VARARGS, tr(scribus_settabletopborder__doc__)},
529
        {const_cast<char*>("setTableBottomBorder"), scribus_settablebottomborder, METH_VARARGS, tr(scribus_settablebottomborder__doc__)},
530
        {const_cast<char*>("setTableFillColor"), scribus_settablefillcolor, METH_VARARGS, tr(scribus_settablefillcolor__doc__)},
934 subik 531
        {const_cast<char*>("setTextAlignment"), scribus_setalign, METH_VARARGS, tr(scribus_setalign__doc__)},
532
        {const_cast<char*>("setTextColor"), scribus_settextfill, METH_VARARGS, tr(scribus_settextfill__doc__)},
533
        {const_cast<char*>("setText"), scribus_setboxtext, METH_VARARGS, tr(scribus_setboxtext__doc__)},
13199 jghali 534
        {const_cast<char*>("setTextScalingH"), scribus_settextscalingh, METH_VARARGS, tr(scribus_settextscalingh__doc__)},
535
        {const_cast<char*>("setTextScalingV"), scribus_settextscalingv, METH_VARARGS, tr(scribus_settextscalingv__doc__)},
934 subik 536
        {const_cast<char*>("setTextShade"), scribus_settextshade, METH_VARARGS, tr(scribus_settextshade__doc__)},
537
        {const_cast<char*>("setTextStroke"), scribus_settextstroke, METH_VARARGS, tr(scribus_settextstroke__doc__)},
538
        {const_cast<char*>("setUnit"), scribus_setunit, METH_VARARGS, tr(scribus_setunit__doc__)},
539
        {const_cast<char*>("setVGuides"), scribus_setVguides, METH_VARARGS, tr(scribus_setVguides__doc__)},
540
        {const_cast<char*>("sizeObject"), scribus_sizeobjabs, METH_VARARGS, tr(scribus_sizeobjabs__doc__)},
541
        {const_cast<char*>("statusMessage"), scribus_messagebartext, METH_VARARGS, tr(scribus_messagebartext__doc__)},
5620 jghali 542
        {const_cast<char*>("textFlowMode"), scribus_textflow, METH_VARARGS, tr(scribus_textflow__doc__)},
934 subik 543
        {const_cast<char*>("traceText"), scribus_tracetext, METH_VARARGS, tr(scribus_tracetext__doc__)},
544
        {const_cast<char*>("unGroupObject"), scribus_ungroupobj, METH_VARARGS, tr(scribus_ungroupobj__doc__)},
545
        {const_cast<char*>("unlinkTextFrames"), scribus_unlinktextframes, METH_VARARGS, tr(scribus_unlinktextframes__doc__)},
546
        {const_cast<char*>("valueDialog"), scribus_valdialog, METH_VARARGS, tr(scribus_valdialog__doc__)},
1607 subik 547
        {const_cast<char*>("textOverflows"), (PyCFunction)scribus_istextoverflowing, METH_KEYWORDS, tr(scribus_istextoverflowing__doc__)},
3926 subik 548
        {const_cast<char*>("zoomDocument"), scribus_zoomdocument, METH_VARARGS, tr(scribus_zoomdocument__doc__)},
11281 subik 549
        {const_cast<char*>("scrollDocument"), scribus_scrolldocument, METH_VARARGS, tr(scribus_scrolldocument__doc__)},
11384 subik 550
        {const_cast<char*>("moveSelectionToBack"), (PyCFunction)scribus_moveselectiontoback, METH_NOARGS, tr(scribus_moveselectiontoback__doc__)},
551
        {const_cast<char*>("moveSelectionToFront"), (PyCFunction)scribus_moveselectiontofront, METH_NOARGS, tr(scribus_moveselectiontofront__doc__)},
1425 subik 552
        // Property magic
553
        {const_cast<char*>("getPropertyCType"), (PyCFunction)scribus_propertyctype, METH_KEYWORDS, tr(scribus_propertyctype__doc__)},
554
        {const_cast<char*>("getPropertyNames"), (PyCFunction)scribus_getpropertynames, METH_KEYWORDS, tr(scribus_getpropertynames__doc__)},
555
        {const_cast<char*>("getProperty"), (PyCFunction)scribus_getproperty, METH_KEYWORDS, tr(scribus_getproperty__doc__)},
556
        {const_cast<char*>("setProperty"), (PyCFunction)scribus_setproperty, METH_KEYWORDS, tr(scribus_setproperty__doc__)},
10624 cbradney 557
//      {const_cast<char*>("getChildren"), (PyCFunction)scribus_getchildren, METH_KEYWORDS, tr(scribus_getchildren__doc__)},
558
//      {const_cast<char*>("getChild"), (PyCFunction)scribus_getchild, METH_KEYWORDS, tr(scribus_getchild__doc__)},
5997 subik 559
        // by Christian Hausknecht
560
        {const_cast<char*>("duplicateObject"), scribus_duplicateobject, METH_VARARGS, tr(scribus_duplicateobject__doc__)},
1425 subik 561
        // Internal methods - Not for public use
5051 subik 562
        {const_cast<char*>("retval"), (PyCFunction)scribus_retval, METH_VARARGS, const_cast<char*>("Scribus internal.")},
934 subik 563
        {const_cast<char*>("getval"), (PyCFunction)scribus_getval, METH_NOARGS, const_cast<char*>("Scribus internal.")},
1043 subik 564
        {NULL, (PyCFunction)(0), 0, NULL} /* sentinel */
82 Franz 565
};
566
 
2428 craig 567
void initscribus_failed(const char* fileName, int lineNo)
568
{
569
        qDebug("Scripter setup failed (%s:%i)", fileName, lineNo);
570
        if (PyErr_Occurred())
571
                PyErr_Print();
572
        return;
573
}
574
 
4026 craig 575
void initscribus(ScribusMainWindow *pl)
82 Franz 576
{
1747 craig 577
        if (!scripterCore)
578
        {
579
                qWarning("scriptplugin: Tried to init scribus module, but no scripter core. Aborting.");
580
                return;
581
        }
82 Franz 582
        PyObject *m, *d;
934 subik 583
        PyImport_AddModule((char*)"scribus");
11955 subik 584
 
411 Franz 585
        PyType_Ready(&Printer_Type);
418 Franz 586
        PyType_Ready(&PDFfile_Type);
1407 subik 587
        PyType_Ready(&ImageExport_Type);
934 subik 588
        m = Py_InitModule((char*)"scribus", scribus_methods);
411 Franz 589
        Py_INCREF(&Printer_Type);
934 subik 590
        PyModule_AddObject(m, (char*)"Printer", (PyObject *) &Printer_Type);
418 Franz 591
        Py_INCREF(&PDFfile_Type);
934 subik 592
        PyModule_AddObject(m, (char*)"PDFfile", (PyObject *) &PDFfile_Type);
1407 subik 593
        Py_INCREF(&ImageExport_Type);
594
        PyModule_AddObject(m, (char*)"ImageExport", (PyObject *) &ImageExport_Type);
82 Franz 595
        d = PyModule_GetDict(m);
647 fschmid 596
 
597
        // Set up the module exceptions
598
        // common exc.
934 subik 599
        ScribusException = PyErr_NewException((char*)"scribus.ScribusException", NULL, NULL);
647 fschmid 600
        Py_INCREF(ScribusException);
934 subik 601
        PyModule_AddObject(m, (char*)"ScribusException", ScribusException);
647 fschmid 602
        // no doc open
934 subik 603
        NoDocOpenError = PyErr_NewException((char*)"scribus.NoDocOpenError", ScribusException, NULL);
647 fschmid 604
        Py_INCREF(NoDocOpenError);
934 subik 605
        PyModule_AddObject(m, (char*)"NoDocOpenError", NoDocOpenError);
853 subik 606
        // wrong type of frame for operation
607
        WrongFrameTypeError = PyErr_NewException((char*)"scribus.WrongFrameTypeError", ScribusException, NULL);
608
        Py_INCREF(WrongFrameTypeError);
609
        PyModule_AddObject(m, (char*)"WrongFrameTypeError", WrongFrameTypeError);
610
        // Couldn't find named object, or no named object and no selection
611
        NoValidObjectError = PyErr_NewException((char*)"scribus.NoValidObjectError", ScribusException, NULL);
612
        Py_INCREF(NoValidObjectError);
613
        PyModule_AddObject(m, (char*)"NoValidObjectError", NoValidObjectError);
899 cbradney 614
        // Couldn't find the specified resource - font, color, etc.
615
        NotFoundError = PyErr_NewException((char*)"scribus.NotFoundError", ScribusException, NULL);
616
        Py_INCREF(NotFoundError);
617
        PyModule_AddObject(m, (char*)"NotFoundError", NotFoundError);
618
        // Tried to create an object with the same name as one that already exists
619
        NameExistsError = PyErr_NewException((char*)"scribus.NameExistsError", ScribusException, NULL);
620
        Py_INCREF(NameExistsError);
621
        PyModule_AddObject(m, (char*)"NameExistsError", NameExistsError);
647 fschmid 622
        // Done with exception setup
623
 
421 Franz 624
        // CONSTANTS
2435 craig 625
        PyDict_SetItemString(d, const_cast<char*>("UNIT_POINTS"), PyInt_FromLong(unitIndexFromString("pt")));
626
        PyDict_SetItemString(d, const_cast<char*>("UNIT_MILLIMETERS"), PyInt_FromLong(unitIndexFromString("mm")));
627
        PyDict_SetItemString(d, const_cast<char*>("UNIT_INCHES"), PyInt_FromLong(unitIndexFromString("in")));
628
        PyDict_SetItemString(d, const_cast<char*>("UNIT_PICAS"), PyInt_FromLong(unitIndexFromString("p")));
629
        PyDict_SetItemString(d, const_cast<char*>("UNIT_CENTIMETRES"), PyInt_FromLong(unitIndexFromString("cm")));
2581 cbradney 630
        PyDict_SetItemString(d, const_cast<char*>("UNIT_CICERO"), PyInt_FromLong(unitIndexFromString("c")));
15121 cbradney 631
        PyDict_SetItemString(d, const_cast<char*>("UNIT_PT"), PyInt_FromLong(unitIndexFromString("pt")));
632
        PyDict_SetItemString(d, const_cast<char*>("UNIT_MM"), PyInt_FromLong(unitIndexFromString("mm")));
633
        PyDict_SetItemString(d, const_cast<char*>("UNIT_IN"), PyInt_FromLong(unitIndexFromString("in")));
634
        PyDict_SetItemString(d, const_cast<char*>("UNIT_P"), PyInt_FromLong(unitIndexFromString("p")));
635
        PyDict_SetItemString(d, const_cast<char*>("UNIT_CM"), PyInt_FromLong(unitIndexFromString("cm")));
636
        PyDict_SetItemString(d, const_cast<char*>("UNIT_C"), PyInt_FromLong(unitIndexFromString("c")));
3071 subik 637
        PyDict_SetItemString(d, const_cast<char*>("PORTRAIT"), Py_BuildValue(const_cast<char*>("i"), portraitPage));
638
        PyDict_SetItemString(d, const_cast<char*>("LANDSCAPE"), Py_BuildValue(const_cast<char*>("i"), landscapePage));
934 subik 639
        PyDict_SetItemString(d, const_cast<char*>("NOFACINGPAGES"), Py_BuildValue(const_cast<char*>("i"), 0));
640
        PyDict_SetItemString(d, const_cast<char*>("FACINGPAGES"),  Py_BuildValue(const_cast<char*>("i"), 1));
3439 subik 641
        PyDict_SetItemString(d, const_cast<char*>("FIRSTPAGERIGHT"), Py_BuildValue(const_cast<char*>("i"), 1));
642
        PyDict_SetItemString(d, const_cast<char*>("FIRSTPAGELEFT"), Py_BuildValue(const_cast<char*>("i"), 0));
934 subik 643
        PyDict_SetItemString(d, const_cast<char*>("ALIGN_LEFT"), Py_BuildValue(const_cast<char*>("i"), 0));
644
        PyDict_SetItemString(d, const_cast<char*>("ALIGN_RIGHT"), Py_BuildValue(const_cast<char*>("i"), 2));
645
        PyDict_SetItemString(d, const_cast<char*>("ALIGN_CENTERED"), Py_BuildValue(const_cast<char*>("i"), 1));
17686 jghali 646
        PyDict_SetItemString(d, const_cast<char*>("ALIGN_BLOCK"), Py_BuildValue(const_cast<char*>("i"), 3));
934 subik 647
        PyDict_SetItemString(d, const_cast<char*>("ALIGN_FORCED"), Py_BuildValue(const_cast<char*>("i"), 4));
648
        PyDict_SetItemString(d, const_cast<char*>("FILL_NOG"), Py_BuildValue(const_cast<char*>("i"), 0));
649
        PyDict_SetItemString(d, const_cast<char*>("FILL_HORIZONTALG"), Py_BuildValue(const_cast<char*>("i"), 1));
650
        PyDict_SetItemString(d, const_cast<char*>("FILL_VERTICALG"), Py_BuildValue(const_cast<char*>("i"), 2));
651
        PyDict_SetItemString(d, const_cast<char*>("FILL_DIAGONALG"), Py_BuildValue(const_cast<char*>("i"), 3));
652
        PyDict_SetItemString(d, const_cast<char*>("FILL_CROSSDIAGONALG"), Py_BuildValue(const_cast<char*>("i"), 4));
653
        PyDict_SetItemString(d, const_cast<char*>("FILL_RADIALG"), Py_BuildValue(const_cast<char*>("i"), 5));
654
        PyDict_SetItemString(d, const_cast<char*>("LINE_SOLID"), Py_BuildValue(const_cast<char*>("i"), Qt::SolidLine));
655
        PyDict_SetItemString(d, const_cast<char*>("LINE_DASH"), Py_BuildValue(const_cast<char*>("i"), Qt::DashLine));
656
        PyDict_SetItemString(d, const_cast<char*>("LINE_DOT"), Py_BuildValue(const_cast<char*>("i"), Qt::DotLine));
657
        PyDict_SetItemString(d, const_cast<char*>("LINE_DASHDOT"), Py_BuildValue(const_cast<char*>("i"), Qt::DashDotLine));
658
        PyDict_SetItemString(d, const_cast<char*>("LINE_DASHDOTDOT"), Py_BuildValue(const_cast<char*>("i"), Qt::DashDotDotLine));
659
        PyDict_SetItemString(d, const_cast<char*>("JOIN_MITTER"), Py_BuildValue(const_cast<char*>("i"), Qt::MiterJoin));
660
        PyDict_SetItemString(d, const_cast<char*>("JOIN_BEVEL"), Py_BuildValue(const_cast<char*>("i"), Qt::BevelJoin));
661
        PyDict_SetItemString(d, const_cast<char*>("JOIN_ROUND"), Py_BuildValue(const_cast<char*>("i"), Qt::RoundJoin));
662
        PyDict_SetItemString(d, const_cast<char*>("CAP_FLAT"), Py_BuildValue(const_cast<char*>("i"), Qt::FlatCap));
663
        PyDict_SetItemString(d, const_cast<char*>("CAP_SQUARE"), Py_BuildValue(const_cast<char*>("i"), Qt::SquareCap));
664
        PyDict_SetItemString(d, const_cast<char*>("CAP_ROUND"), Py_BuildValue(const_cast<char*>("i"), Qt::RoundCap));
665
        PyDict_SetItemString(d, const_cast<char*>("BUTTON_NONE"), Py_BuildValue(const_cast<char*>("i"), QMessageBox::NoButton));
666
        PyDict_SetItemString(d, const_cast<char*>("BUTTON_OK"), Py_BuildValue(const_cast<char*>("i"), QMessageBox::Ok));
667
        PyDict_SetItemString(d, const_cast<char*>("BUTTON_CANCEL"), Py_BuildValue(const_cast<char*>("i"), QMessageBox::Cancel));
668
        PyDict_SetItemString(d, const_cast<char*>("BUTTON_YES"), Py_BuildValue(const_cast<char*>("i"), QMessageBox::Yes));
669
        PyDict_SetItemString(d, const_cast<char*>("BUTTON_NO"), Py_BuildValue(const_cast<char*>("i"), QMessageBox::No));
670
        PyDict_SetItemString(d, const_cast<char*>("BUTTON_ABORT"), Py_BuildValue(const_cast<char*>("i"), QMessageBox::Abort));
671
        PyDict_SetItemString(d, const_cast<char*>("BUTTON_RETRY"), Py_BuildValue(const_cast<char*>("i"), QMessageBox::Retry));
672
        PyDict_SetItemString(d, const_cast<char*>("BUTTON_IGNORE"), Py_BuildValue(const_cast<char*>("i"), QMessageBox::Ignore));
673
        PyDict_SetItemString(d, const_cast<char*>("ICON_NONE"), Py_BuildValue(const_cast<char*>("i"), QMessageBox::NoIcon));
674
        PyDict_SetItemString(d, const_cast<char*>("ICON_INFORMATION"), Py_BuildValue(const_cast<char*>("i"), QMessageBox::Information));
675
        PyDict_SetItemString(d, const_cast<char*>("ICON_WARNING"), Py_BuildValue(const_cast<char*>("i"), QMessageBox::Warning));
676
        PyDict_SetItemString(d, const_cast<char*>("ICON_CRITICAL"), Py_BuildValue(const_cast<char*>("i"), QMessageBox::Critical));
677
        PyDict_SetItemString(d, const_cast<char*>("PAPER_A0"), Py_BuildValue(const_cast<char*>("(ff)"), 2380.0, 3368.0));
678
        PyDict_SetItemString(d, const_cast<char*>("PAPER_A1"), Py_BuildValue(const_cast<char*>("(ff)"), 1684.0, 2380.0));
679
        PyDict_SetItemString(d, const_cast<char*>("PAPER_A2"), Py_BuildValue(const_cast<char*>("(ff)"), 1190.0, 1684.0));
680
        PyDict_SetItemString(d, const_cast<char*>("PAPER_A3"), Py_BuildValue(const_cast<char*>("(ff)"), 842.0, 1190.0));
681
        PyDict_SetItemString(d, const_cast<char*>("PAPER_A4"), Py_BuildValue(const_cast<char*>("(ff)"), 595.0, 842.0));
682
        PyDict_SetItemString(d, const_cast<char*>("PAPER_A5"), Py_BuildValue(const_cast<char*>("(ff)"), 421.0, 595.0));
683
        PyDict_SetItemString(d, const_cast<char*>("PAPER_A6"), Py_BuildValue(const_cast<char*>("(ff)"), 297.0, 421.0));
684
        PyDict_SetItemString(d, const_cast<char*>("PAPER_A7"), Py_BuildValue(const_cast<char*>("(ff)"), 210.0, 297.0));
685
        PyDict_SetItemString(d, const_cast<char*>("PAPER_A8"), Py_BuildValue(const_cast<char*>("(ff)"), 148.0, 210.0));
686
        PyDict_SetItemString(d, const_cast<char*>("PAPER_A9"), Py_BuildValue(const_cast<char*>("(ff)"), 105.0, 148.0));
687
        PyDict_SetItemString(d, const_cast<char*>("PAPER_B0"), Py_BuildValue(const_cast<char*>("(ff)"), 2836.0, 4008.0));
688
        PyDict_SetItemString(d, const_cast<char*>("PAPER_B1"), Py_BuildValue(const_cast<char*>("(ff)"), 2004.0, 2836.0));
689
        PyDict_SetItemString(d, const_cast<char*>("PAPER_B2"), Py_BuildValue(const_cast<char*>("(ff)"), 1418.0, 2004.0));
690
        PyDict_SetItemString(d, const_cast<char*>("PAPER_B3"), Py_BuildValue(const_cast<char*>("(ff)"), 1002.0, 1418.0));
691
        PyDict_SetItemString(d, const_cast<char*>("PAPER_B4"), Py_BuildValue(const_cast<char*>("(ff)"), 709.0, 1002.0));
692
        PyDict_SetItemString(d, const_cast<char*>("PAPER_B5"), Py_BuildValue(const_cast<char*>("(ff)"), 501.0, 709.0));
693
        PyDict_SetItemString(d, const_cast<char*>("PAPER_B6"), Py_BuildValue(const_cast<char*>("(ff)"), 355.0, 501.0));
694
        PyDict_SetItemString(d, const_cast<char*>("PAPER_B7"), Py_BuildValue(const_cast<char*>("(ff)"), 250.0, 355.0));
695
        PyDict_SetItemString(d, const_cast<char*>("PAPER_B8"), Py_BuildValue(const_cast<char*>("(ff)"), 178.0, 250.0));
696
        PyDict_SetItemString(d, const_cast<char*>("PAPER_B9"), Py_BuildValue(const_cast<char*>("(ff)"), 125.0, 178.0));
697
        PyDict_SetItemString(d, const_cast<char*>("PAPER_B10"), Py_BuildValue(const_cast<char*>("(ff)"), 89.0, 125.0));
698
        PyDict_SetItemString(d, const_cast<char*>("PAPER_C5E"), Py_BuildValue(const_cast<char*>("(ff)"), 462.0, 649.0));
699
        PyDict_SetItemString(d, const_cast<char*>("PAPER_COMM10E"), Py_BuildValue(const_cast<char*>("(ff)"), 298.0, 683.0));
700
        PyDict_SetItemString(d, const_cast<char*>("PAPER_DLE"),  Py_BuildValue(const_cast<char*>("(ff)"), 312.0, 624.0));
701
        PyDict_SetItemString(d, const_cast<char*>("PAPER_EXECUTIVE"), Py_BuildValue(const_cast<char*>("(ff)"), 542.0, 720.0));
702
        PyDict_SetItemString(d, const_cast<char*>("PAPER_FOLIO"), Py_BuildValue(const_cast<char*>("(ff)"), 595.0, 935.0));
703
        PyDict_SetItemString(d, const_cast<char*>("PAPER_LEDGER"), Py_BuildValue(const_cast<char*>("(ff)"), 1224.0, 792.0));
704
        PyDict_SetItemString(d, const_cast<char*>("PAPER_LEGAL"), Py_BuildValue(const_cast<char*>("(ff)"), 612.0, 1008.0));
705
        PyDict_SetItemString(d, const_cast<char*>("PAPER_LETTER"), Py_BuildValue(const_cast<char*>("(ff)"), 612.0, 792.0));
706
        PyDict_SetItemString(d, const_cast<char*>("PAPER_TABLOID"), Py_BuildValue(const_cast<char*>("(ff)"), 792.0, 1224.0));
5887 fschmid 707
        PyDict_SetItemString(d, const_cast<char*>("NORMAL"), Py_BuildValue(const_cast<char*>("i"), 0));
708
        PyDict_SetItemString(d, const_cast<char*>("DARKEN"), Py_BuildValue(const_cast<char*>("i"), 1));
709
        PyDict_SetItemString(d, const_cast<char*>("LIGHTEN"), Py_BuildValue(const_cast<char*>("i"), 2));
710
        PyDict_SetItemString(d, const_cast<char*>("MULTIPLY"), Py_BuildValue(const_cast<char*>("i"), 3));
711
        PyDict_SetItemString(d, const_cast<char*>("SCREEN"), Py_BuildValue(const_cast<char*>("i"), 4));
712
        PyDict_SetItemString(d, const_cast<char*>("OVERLAY"), Py_BuildValue(const_cast<char*>("i"), 5));
713
        PyDict_SetItemString(d, const_cast<char*>("HARD_LIGHT"), Py_BuildValue(const_cast<char*>("i"), 6));
714
        PyDict_SetItemString(d, const_cast<char*>("SOFT_LIGHT"), Py_BuildValue(const_cast<char*>("i"), 7));
715
        PyDict_SetItemString(d, const_cast<char*>("DIFFERENCE"), Py_BuildValue(const_cast<char*>("i"), 8));
716
        PyDict_SetItemString(d, const_cast<char*>("EXCLUSION"), Py_BuildValue(const_cast<char*>("i"), 9));
717
        PyDict_SetItemString(d, const_cast<char*>("COLOR_DODGE"), Py_BuildValue(const_cast<char*>("i"), 10));
718
        PyDict_SetItemString(d, const_cast<char*>("COLOR_BURN"), Py_BuildValue(const_cast<char*>("i"), 11));
719
        PyDict_SetItemString(d, const_cast<char*>("HUE"), Py_BuildValue(const_cast<char*>("i"), 12));
720
        PyDict_SetItemString(d, const_cast<char*>("SATURATION"), Py_BuildValue(const_cast<char*>("i"), 13));
721
        PyDict_SetItemString(d, const_cast<char*>("COLOR"), Py_BuildValue(const_cast<char*>("i"), 14));
722
        PyDict_SetItemString(d, const_cast<char*>("LUMINOSITY"), Py_BuildValue(const_cast<char*>("i"), 15));
3647 subik 723
        // preset page layouts
724
        PyDict_SetItemString(d, const_cast<char*>("PAGE_1"), Py_BuildValue(const_cast<char*>("i"), 0));
725
        PyDict_SetItemString(d, const_cast<char*>("PAGE_2"), Py_BuildValue(const_cast<char*>("i"), 1));
726
        PyDict_SetItemString(d, const_cast<char*>("PAGE_3"), Py_BuildValue(const_cast<char*>("i"), 2));
727
        PyDict_SetItemString(d, const_cast<char*>("PAGE_4"), Py_BuildValue(const_cast<char*>("i"), 3));
733 subik 728
 
2428 craig 729
        // Measurement units understood by Scribus's units.cpp functions are exported as constant conversion
730
        // factors to be used from Python.
2431 craig 731
        for (int i = 0; i <= unitGetMaxIndex(); ++i)
2428 craig 732
        {
733
                PyObject* value = PyFloat_FromDouble(unitGetRatioFromIndex(i));
734
                if (!value)
735
                {
736
                        initscribus_failed(__FILE__, __LINE__);
737
                        return;
738
                }
739
                // `in' is a reserved word in Python so we must replace it
740
                PyObject* name;
2430 craig 741
                if (unitGetStrFromIndex(i) == "in")
2428 craig 742
                        name = PyString_FromString("inch");
743
                else
10598 cbradney 744
                        name = PyString_FromString(unitGetStrFromIndex(i).toAscii().constData());
2428 craig 745
                if (!name)
746
                {
747
                        initscribus_failed(__FILE__, __LINE__);
748
                        return;
749
                }
750
                if (PyDict_SetItem(d, name, value))
751
                {
752
                        initscribus_failed(__FILE__, __LINE__);
753
                        return;
754
                }
755
        }
756
 
1043 subik 757
        // Export the Scribus version into the module namespace so scripts know what they're running in
758
        PyDict_SetItemString(d, const_cast<char*>("scribus_version"), PyString_FromString(const_cast<char*>(VERSION)));
759
        // Now build a version tuple like that provided by Python in sys.version_info
760
        // The tuple is of the form (major, minor, patchlevel, extraversion, reserved)
761
        QRegExp version_re("(\\d+)\\.(\\d+)\\.(\\d+)(.*)");
10598 cbradney 762
        int pos = version_re.indexIn(QString(VERSION));
1043 subik 763
        // We ignore errors, causing the scribus_version_info attribute to simply not be created.
764
        // This will make acceses raise AttrbuteError.
765
        if (pos > -1)
766
        {
767
                int majorVersion = version_re.cap(1).toInt();
768
                int minorVersion = version_re.cap(2).toInt();
769
                int patchVersion = version_re.cap(3).toInt();
770
                QString extraVersion = version_re.cap(4);
771
                PyObject* versionTuple = Py_BuildValue(const_cast<char*>("(iiisi)"),\
10493 fschmid 772
                                majorVersion, minorVersion, patchVersion, (const char*)extraVersion.toUtf8(), 0);
1043 subik 773
                if (versionTuple != NULL)
774
                        PyDict_SetItemString(d, const_cast<char*>("scribus_version_info"), versionTuple);
775
                else
776
                        qDebug("Failed to build version tuple for version string '%s' in scripter", VERSION);
777
        }
778
        else
779
                qDebug("Couldn't parse version string '%s' in scripter", VERSION);
780
 
5781 cbradney 781
//      ScMW = pl;
655 fschmid 782
        // Function aliases for compatibility
783
        // We need to import the __builtins__, warnings and exceptions modules to be able to run
784
        // the generated Python functions from inside the `scribus' module's context.
785
        // This code makes it possible to extend the `scribus' module by running Python code
786
        // from C in other ways too.
934 subik 787
        PyObject* builtinModule = PyImport_ImportModuleEx(const_cast<char*>("__builtin__"),
788
                        d, d, Py_BuildValue(const_cast<char*>("[]")));
655 fschmid 789
        if (builtinModule == NULL)
790
        {
791
                qDebug("Failed to import __builtin__ module. Something is probably broken with your Python.");
792
                return;
793
        }
934 subik 794
        PyDict_SetItemString(d, const_cast<char*>("__builtin__"), builtinModule);
795
        PyObject* exceptionsModule = PyImport_ImportModuleEx(const_cast<char*>("exceptions"),
796
                        d, d, Py_BuildValue(const_cast<char*>("[]")));
655 fschmid 797
        if (exceptionsModule == NULL)
798
        {
799
                qDebug("Failed to import exceptions module. Something is probably broken with your Python.");
800
                return;
801
        }
934 subik 802
        PyDict_SetItemString(d, const_cast<char*>("exceptions"), exceptionsModule);
803
        PyObject* warningsModule = PyImport_ImportModuleEx(const_cast<char*>("warnings"),
804
                        d, d, Py_BuildValue(const_cast<char*>("[]")));
655 fschmid 805
        if (warningsModule == NULL)
806
        {
807
                qDebug("Failed to import warnings module. Something is probably broken with your Python.");
808
                return;
809
        }
934 subik 810
        PyDict_SetItemString(d, const_cast<char*>("warnings"), warningsModule);
853 subik 811
        // Create the module-level docstring. This can be a proper unicode string, unlike
812
        // the others, because we can just create a Unicode object and insert it in our
813
        // module dictionary.
814
        QString docstring = QObject::tr("Scribus Python interface module\n\
1345 subik 815
\n\
816
This module is the Python interface for Scribus. It provides functions\n\
817
to control scribus and to manipulate objects on the canvas. Each\n\
818
function is documented individually below.\n\
819
\n\
820
A few things are common across most of the interface.\n\
821
\n\
822
Most functions operate on frames. Frames are identified by their name,\n\
823
a string - they are not real Python objects. Many functions take an\n\
824
optional (non-keyword) parameter, a frame name.\n\
825
Many exceptions are also common across most functions. These are\n\
826
not currently documented in the docstring for each function.\n\
1559 craig 827
- Many functions will raise a NoDocOpenError if you try to use them\n\
1345 subik 828
without a document to operate on.\n\
1559 craig 829
- If you do not pass a frame name to a function that requires one,\n\
830
the function will use the currently selected frame, if any, or\n\
831
raise a NoValidObjectError if it can't find anything to operate\n\
1345 subik 832
on.\n\
833
- Many functions will raise WrongFrameTypeError if you try to use them\n\
834
on a frame type that they do not make sense with. For example, setting\n\
1525 cbradney 835
the text color on a graphics frame doesn't make sense, and will result\n\
1345 subik 836
in this exception being raised.\n\
837
- Errors resulting from calls to the underlying Python API will be\n\
838
passed through unaltered. As such, the list of exceptions thrown by\n\
839
any function as provided here and in its docstring is incomplete.\n\
840
\n\
841
Details of what exceptions each function may throw are provided on the\n\
1559 craig 842
function's documentation, though as with most Python code this list\n\
843
is not exhaustive due to exceptions from called functions.\n\
844
");
853 subik 845
 
10493 fschmid 846
        PyObject* docStr = PyString_FromString(docstring.toUtf8().data());
1559 craig 847
        if (!docStr)
848
                qDebug("Failed to create module-level docstring (couldn't make str)");
853 subik 849
        else
1559 craig 850
        {
851
                PyObject* uniDocStr = PyUnicode_FromEncodedObject(docStr, "utf-8", NULL);
852
                Py_DECREF(docStr);
853
                docStr = NULL;
854
                if (!uniDocStr)
855
                        qDebug("Failed to create module-level docstring object (couldn't make unicode)");
856
                else
857
                        PyDict_SetItemString(d, const_cast<char*>("__doc__"), uniDocStr);
858
                Py_DECREF(uniDocStr);
859
                uniDocStr = NULL;
860
        }
1425 subik 861
 
862
        // Wrap up pointers to the the QApp and main window and push them out
863
        // to Python.
864
        wrappedQApp = wrapQObject(qApp);
865
        if (!wrappedQApp)
866
        {
867
                qDebug("Failed to wrap up QApp");
868
                PyErr_Print();
869
        }
870
        // Push it into the module dict, stealing a ref in the process
871
        PyDict_SetItemString(d, const_cast<char*>("qApp"), wrappedQApp);
872
        Py_DECREF(wrappedQApp);
873
        wrappedQApp = NULL;
874
 
5781 cbradney 875
        wrappedMainWindow = wrapQObject(pl);
1425 subik 876
        if (!wrappedMainWindow)
877
        {
4026 craig 878
                qDebug("Failed to wrap up ScMW");
1425 subik 879
                PyErr_Print();
880
        }
881
        // Push it into the module dict, stealing a ref in the process
882
        PyDict_SetItemString(d, const_cast<char*>("mainWindow"), wrappedMainWindow);
883
        Py_DECREF(wrappedMainWindow);
884
        wrappedMainWindow = NULL;
82 Franz 885
}
886
 
6200 subik 887
/*! HACK: this removes "warning: 'blah' defined but not used" compiler warnings
888
with header files structure untouched (docstrings are kept near declarations)
889
PV */
890
void scriptplugindocwarnings()
891
{
892
    QStringList s;
893
    s <<printer__doc__<<pdffile__doc__<<imgexp__doc__<<imgexp_dpi__doc__<<imgexp_scale__doc__ <<imgexp_quality__doc__<<imgexp_filename__doc__<<imgexp_type__doc__<<imgexp_alltypes__doc__ << imgexp_save__doc__ << imgexp_saveas__doc__;
894
}