Hi ale

as the list has technically removed the attachment, I append the patch at the 
very end of this message. You find it as well on the hidden site 
http://jbechtel.de/site/dist/scribus-py3/

Answers to your mail are inline.

BR
 Jonas


On Tue, 24 Oct 2017 16:52:24 +0200, ale rimoldi <ale.comp_06 at xox.ch> wrote:

> hi jonas
> 
> a late reply from my side...
> 
> the port to python3 should already be in
> 
> https://github.com/aoloe/scribus-plugin-scripter
> 
> but it's not a huge thing...
> 
> what i wonder: does your port run scripts?

What do you mean? I enter some python code in the console and it get's 
executed. This satisfies me so far as I wanted a proof-of-concept for Python 3 
running with Scribus. The Function is illustrated on 
http://jbechtel.de/dist/scribus-py3 (I don't add an attachement here as the 
list will probably block it).

It doesn't work with the pdf export functions. I did not test / do not remember 
at which invokation stage the pdf export stucks
It doesn't work to load an external file. (Displays an error but no error text)
I did not test any window or so which is opened by the script as user interface.

Wait, I found a way to load external script files: Type the following into the 
console:
# https://stackoverflow.com/questions/1027714/
# ->
# https://stackoverflow.com/a/31566843
vars = globals();
exec(open("test2.script").read(), vars)
print (vars)

This doesn't forward the output of test2.script, but the script's execution 
leads to the desired effect on the document.


> in my work i got stuck at getting the signals / slots cross the 
> boundaries between c++/qt5 and python/pyqt5.
> (pyqt4 is using string for passing them around but pyqt5 wants real objects)
> 
> a few people have tried to help out and/or audited the scribus scripter 
> and nobody could find a solution.
> 
> since the scripter relies on a few technologies that are very little 
> documented / used and/or have been abandoned since about 10 years, i've 
> now tried to dig into a new library: modern, supported, with an active 
> community: pybind11.

I must admit I don't have any knowledge of the available python binding libs 
(and I probably won't get a depth insight soon).

> 
> i've been exploring it in my freetime and i like what i could achieve 
> with it!
> (i was probably the first person trying to create a scripter engine with 
> pybind11... and i did need much support and a patch to the code to get 
> the code to work!)
> i have a repository with all my tries and i'm currently cleaning it up 
> so that i can share my experience with the scribus and the pybind11 
> communities.
> 
> after the clean up steps, there are three things to be done before 
> making my efforts public:
> 
> - find out all the data structures to be tested in the scripter API, to 
> be sure that all needs of the scribus scripter are covered (work in 
> progress: i can already get values and objects to go back and forth 
> between c++ and python)
> 
> - add the scripter to a sample qt5 application (work in progress: the 
> qt5 demo application can already launch a python3 script showing a pyqt5 
> dialog and gets back the value entered in the dialog...)
> 
> - get the scripts to attach themselves to the navigation and the 
> keyboard shortcuts (probably without using signals and slots across the 
> c++/python boundaries.
> 
> 
> i like the results i got so far.
> it's far from being such a clever solution as the "scripter2" is, but i 
> hope the final result will be easier to understand and maintain!
> 
> as soon as the repository is cleaned up (fix the old cmake files, make 
> sure all README are correct) i can share the url and help from people 
> with c++ skills is very welcome!
> (and with a bit of luck, i will be cleaning up the repository later this 
> evening)
> 

I can
- rewrite my WiScri environment to Python 3. (And make it more general; by now 
they only work with one document)
- use this WiScri scripts for my diploma thesis and therefore find errors (and 
performance flaws)
- look at the code and give hints where the errors come from

Unfortunately I cannot afford more time as there are many other things to do. 
So I won't provide code directly.

> 
> have fun
> a.l.e












diff -r old/scribus-1.5.3/scribus/pluginmanager.cpp 
scribus-1.5.3/scribus/pluginmanager.cpp
187a188,189
>       // JONAS: debug message.
>       qDebug("Plugin-Verzeichnis: %s", 
> ScPaths::instance().pluginDir().toLocal8Bit().data());
192a195,196
>               // JONAS: debug message.
>               qDebug("Zu ladendes Plugin: %s", 
> dirList[dc].toLocal8Bit().data());
629c633,634
<       return (QDir::Files | QDir::Executable | QDir::NoSymLinks);
---
>       // JONAS: Allow SymLinks.
>       return (QDir::Files | QDir::Executable);
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/cmdcell.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/cmdcell.cpp
64c64
<       return PyString_FromString(table->cellAt(row, 
column).styleName().toUtf8());
---
>       return Legacy_PyString_FromString(table->cellAt(row, 
> column).styleName().toUtf8());
156c156
<       return PyString_FromString(table->cellAt(row, 
column).fillColor().toUtf8());
---
>       return Legacy_PyString_FromString(table->cellAt(row, 
> column).fillColor().toUtf8());
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/cmdcolor.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/cmdcolor.cpp
25c25
<               PyList_SetItem(l, cc, PyString_FromString(it.key().toUtf8()));
---
>               PyList_SetItem(l, cc, 
> Legacy_PyString_FromString(it.key().toUtf8()));
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/cmddialog.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/cmddialog.cpp
71c71
<       return PyString_FromString(fName.toUtf8());
---
>       return Legacy_PyString_FromString(fName.toUtf8());
123c123
<       return PyString_FromString(txt.toUtf8());
---
>       return Legacy_PyString_FromString(txt.toUtf8());
146c146
<               return PyString_FromString(s.toUtf8());
---
>               return Legacy_PyString_FromString(s.toUtf8());
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/cmddoc.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/cmddoc.cpp
200c200
<               return PyString_FromString("");
---
>               return Legacy_PyString_FromString("");
202c202
<       return 
PyString_FromString(ScCore->primaryMainWindow()->doc->DocName.toUtf8());
---
>       return 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->DocName.toUtf8());
321c321
<               PyList_SET_ITEM(names, n++, 
PyString_FromString(it.key().toUtf8().data()) );
---
>               PyList_SET_ITEM(names, n++, 
> Legacy_PyString_FromString(it.key().toUtf8().data()) );
406c406
<       return 
PyString_FromString(ScCore->primaryMainWindow()->doc->DocPages.at(e)->MPageNam.toUtf8());
---
>       return 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->DocPages.at(e)->MPageNam.toUtf8());
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/cmdgetprop.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/cmdgetprop.cpp
47c47
<       return PyString_FromString(result.toUtf8());
---
>       return Legacy_PyString_FromString(result.toUtf8());
58c58
<       return i != NULL ? PyString_FromString(i->fillColor().toUtf8()) : NULL;
---
>       return i != NULL ? Legacy_PyString_FromString(i->fillColor().toUtf8()) 
> : NULL;
99c99
<                               return 
PyString_FromString(it->itemText.charStyle(b).fillColor().toUtf8());
---
>                               return 
> Legacy_PyString_FromString(it->itemText.charStyle(b).fillColor().toUtf8());
103c103
<               return PyString_FromString(it->lineColor().toUtf8());
---
>               return Legacy_PyString_FromString(it->lineColor().toUtf8());
239c239
<       return i != NULL ? PyString_FromString(i->Pfile.toUtf8()) : NULL;
---
>       return i != NULL ? Legacy_PyString_FromString(i->Pfile.toUtf8()) : NULL;
316c316
<                                       PyList_SetItem(l, counter2, 
PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(lam)->itemName().toUtf8()));
---
>                                       PyList_SetItem(l, counter2, 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(lam)->itemName().toUtf8()));
322c322
<                               PyList_SetItem(l, counter2, 
PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(lam)->itemName().toUtf8()));
---
>                               PyList_SetItem(l, counter2, 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(lam)->itemName().toUtf8()));
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/cmdgetsetprop.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/cmdgetsetprop.cpp
91c91
<       return PyString_FromString(type);
---
>       return Legacy_PyString_FromString(type);
101c101
<               if (PyList_Append(resultList, 
PyString_FromString((*it).toUtf8().data())) == -1)
---
>               if (PyList_Append(resultList, 
> Legacy_PyString_FromString((*it).toUtf8().data())) == -1)
292c292
<               resultobj = PyString_FromString(prop.toByteArray().data());
---
>               resultobj = 
> Legacy_PyString_FromString(prop.toByteArray().data());
294c294
<               resultobj = 
PyString_FromString(prop.toString().toUtf8().data());
---
>               resultobj = 
> Legacy_PyString_FromString(prop.toString().toUtf8().data());
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/cmdmani.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/cmdmani.cpp
409c409
<       return (group ? PyString_FromString(group->itemName().toUtf8()) : NULL);
---
>       return (group ? Legacy_PyString_FromString(group->itemName().toUtf8()) 
> : NULL);
467c467
<               return 
PyString_FromString(ScCore->primaryMainWindow()->doc->m_Selection->itemAt(i)->itemName().toUtf8());
---
>               return 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->m_Selection->itemAt(i)->itemName().toUtf8());
470c470
<               return PyString_FromString("");
---
>               return Legacy_PyString_FromString("");
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/cmdmisc.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/cmdmisc.cpp
52c52
<                       PyList_SetItem(l, cc, 
PyString_FromString(it.currentKey().toUtf8()));
---
>                       PyList_SetItem(l, cc, 
> Legacy_PyString_FromString(it.currentKey().toUtf8()));
131c131
<               PyObject* stringPython = 
PyString_FromStringAndSize(buffer_string,bufferSize);
---
>               PyObject* stringPython = 
> Legacy_PyString_FromStringAndSize(buffer_string,bufferSize);
160c160
<               PyList_SetItem(l, lam, 
PyString_FromString(ScCore->primaryMainWindow()->doc->Layers[lam].Name.toUtf8()));
---
>               PyList_SetItem(l, lam, 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->Layers[lam].Name.toUtf8()));
193c193
<       return 
PyString_FromString(ScCore->primaryMainWindow()->doc->activeLayerName().toUtf8());
---
>       return 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->activeLayerName().toUtf8());
764c764
<       return PyString_FromString(ScCore->getGuiLanguage().toUtf8());
---
>       return Legacy_PyString_FromString(ScCore->getGuiLanguage().toUtf8());
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/cmdobj.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/cmdobj.cpp
46c46
<       return 
PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().toUtf8());
---
>       return 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().toUtf8());
72c72
<       return 
PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().toUtf8());
---
>       return 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().toUtf8());
97c97
<       return 
PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().toUtf8());
---
>       return 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().toUtf8());
122c122
<       return 
PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().toUtf8());
---
>       return 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().toUtf8());
158c158
<       return PyString_FromString(table->itemName().toUtf8());
---
>       return Legacy_PyString_FromString(table->itemName().toUtf8());
218c218
<       return PyString_FromString(it->itemName().toUtf8());
---
>       return Legacy_PyString_FromString(it->itemName().toUtf8());
295c295
<       return PyString_FromString(it->itemName().toUtf8());
---
>       return Legacy_PyString_FromString(it->itemName().toUtf8());
377c377
<       return PyString_FromString(it->itemName().toUtf8());
---
>       return Legacy_PyString_FromString(it->itemName().toUtf8());
468c468
<       return PyString_FromString(it->itemName().toUtf8());
---
>       return Legacy_PyString_FromString(it->itemName().toUtf8());
509c509
<       return PyString_FromString(i->itemName().toUtf8());
---
>       return Legacy_PyString_FromString(i->itemName().toUtf8());
665c665
<               if (PyList_Append(styleList, 
PyString_FromString(ScCore->primaryMainWindow()->doc->paragraphStyles()[i].name().toUtf8())))
---
>               if (PyList_Append(styleList, 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->paragraphStyles()[i].name().toUtf8())))
682c682
<               if (PyList_Append(charStyleList, 
PyString_FromString(ScCore->primaryMainWindow()->doc->charStyles()[i].name().toUtf8())))
---
>               if (PyList_Append(charStyleList, 
> Legacy_PyString_FromString(ScCore->primaryMainWindow()->doc->charStyles()[i].name().toUtf8())))
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/cmdtable.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/cmdtable.cpp
341c341
<       return PyString_FromString(table->styleName().toUtf8());
---
>       return Legacy_PyString_FromString(table->styleName().toUtf8());
381c381
<       return PyString_FromString(table->fillColor().toUtf8());
---
>       return Legacy_PyString_FromString(table->fillColor().toUtf8());
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/cmdtext.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/cmdtext.cpp
94c94
<                               return 
PyString_FromString(it->itemText.charStyle(b).font().scName().toUtf8());
---
>                               return 
> Legacy_PyString_FromString(it->itemText.charStyle(b).font().scName().toUtf8());
98c98
<               return 
PyString_FromString(it->currentCharStyle().font().scName().toUtf8());
---
>               return 
> Legacy_PyString_FromString(it->currentCharStyle().font().scName().toUtf8());
174c174
<                               return 
PyString_FromString(it->itemText.charStyle(b).fontFeatures().toUtf8());
---
>                               return 
> Legacy_PyString_FromString(it->itemText.charStyle(b).fontFeatures().toUtf8());
178c178
<               return 
PyString_FromString(it->currentCharStyle().fontFeatures().toUtf8());
---
>               return 
> Legacy_PyString_FromString(it->currentCharStyle().fontFeatures().toUtf8());
267c267
<       return PyString_FromString(text.toUtf8());
---
>       return Legacy_PyString_FromString(text.toUtf8());
300c300
<       return PyString_FromString(text.toUtf8());
---
>       return Legacy_PyString_FromString(text.toUtf8());
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/cmdvar.h 
scribus-1.5.3/scribus/plugins/scriptplugin/cmdvar.h
34a35,57
> 
> // JONAS:
> #define Legacy_PyString_FromString PyBytes_FromString
> //#define PyString_FromStringAndSize PyBytes_FromStringAndSize
> #define Legacy_PyString_FromStringAndSize PyBytes_FromStringAndSize
> #define PyString_Check PyBytes_Check
> // rather CheckExact?
> #define PyString_Size PyBytes_Size
> #define PyString_AsString PyBytes_AsString
> #define PyInt_FromLong PyLong_FromLong
> #define PyInt_Check PyLong_Check
> #define PyInt_AsLong PyLong_AsLong
> #define PyCObject_Check PyCapsule_CheckExact
> #define PyCObject_AsVoidPtr(capsule) \
>               (PyCapsule_GetPointer(capsule, NULL))
> #define PyCObject_FromVoidPtr(pointer, destructor) \
>               (PyCapsule_New(pointer, NULL, destructor))
> // Hilfreich ist auch:
> // https://docs.python.org/3/howto/cporting.html#cobject-replaced-with-capsule
> // sowie weiterhin:
> // https://docs.python.org/3/c-api/bytes.html u. a.
> 
> 
53a77
> /*static*/ PyObject* PyInit_scribus(void);
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/objimageexport.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/objimageexport.cpp
19a20
> 
36c37,38
<       self->ob_type->tp_free((PyObject *)self);
---
>       Py_TYPE(self)->tp_free((PyObject *)self); // JONAS
>       //self->ob_base->tp_free((PyObject *)self);
47,48c49,50
<               self->name = PyString_FromString("ImageExport.png");
<               self->type = PyString_FromString("PNG");
---
>               self->name = Legacy_PyString_FromString("ImageExport.png");
>               self->type = Legacy_PyString_FromString("PNG");
122c124
<               PyList_SetItem(l, pos, 
PyString_FromString(QString((*it)).toLatin1().constData()));
---
>               PyList_SetItem(l, pos, 
> Legacy_PyString_FromString(QString((*it)).toLatin1().constData()));
208c210
<       0,
---
>       // 0,                 // DELETED (Jonas)
254c256,259
< 
---
>       // Added in version 2.6:
>       0, //    unsigned int tp_version_tag;
>       0, //    destructor tp_finalize;
>       
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/objpdffile.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/objpdffile.cpp
138c138
<       self->ob_type->tp_free((PyObject *)self);
---
>       Py_TYPE(self)->tp_free((PyObject *)self);
153c153
<               self->file = PyString_FromString("");
---
>               self->file = Legacy_PyString_FromString("");
242c242
<               self->owner = PyString_FromString("");
---
>               self->owner = Legacy_PyString_FromString("");
248c248
<               self->user = PyString_FromString("");
---
>               self->user = Legacy_PyString_FromString("");
272c272
<               self->solidpr = PyString_FromString("");
---
>               self->solidpr = Legacy_PyString_FromString("");
277c277
<               self->imagepr = PyString_FromString("");
---
>               self->imagepr = Legacy_PyString_FromString("");
282c282
<               self->printprofc = PyString_FromString("");
---
>               self->printprofc = Legacy_PyString_FromString("");
287c287
<               self->info = PyString_FromString("");
---
>               self->info = Legacy_PyString_FromString("");
316c316
<               self->openAction = PyString_FromString("");
---
>               self->openAction = Legacy_PyString_FromString("");
342c342
<       file = PyString_FromString(tf.toLatin1());
---
>       file = Legacy_PyString_FromString(tf.toLatin1());
378c378
<               tmp = PyString_FromString(fontName.toLatin1());
---
>               tmp = Legacy_PyString_FromString(fontName.toLatin1());
404c404
<               tmp = 
PyString_FromString(pdfOptions.SubsetList[fe].toLatin1().data());
---
>               tmp = 
> Legacy_PyString_FromString(pdfOptions.SubsetList[fe].toLatin1().data());
552c552
<       owner = PyString_FromString(pdfOptions.PassOwner.toLatin1());
---
>       owner = Legacy_PyString_FromString(pdfOptions.PassOwner.toLatin1());
562c562
<       user = PyString_FromString(pdfOptions.PassUser.toLatin1());
---
>       user = Legacy_PyString_FromString(pdfOptions.PassUser.toLatin1());
592c592
<       solidpr = PyString_FromString(tp.toLatin1());
---
>       solidpr = Legacy_PyString_FromString(tp.toLatin1());
604c604
<       imagepr = PyString_FromString(tp2.toLatin1());
---
>       imagepr = Legacy_PyString_FromString(tp2.toLatin1());
616c616
<       printprofc = PyString_FromString(tp3.toLatin1());
---
>       printprofc = Legacy_PyString_FromString(tp3.toLatin1());
626c626
<       info = PyString_FromString(tinfo.toLatin1());
---
>       info = Legacy_PyString_FromString(tinfo.toLatin1());
664c664
<       openAction = 
PyString_FromString(pdfOptions.openAction.toLatin1().data());
---
>       openAction = 
> Legacy_PyString_FromString(pdfOptions.openAction.toLatin1().data());
1549c1549
<       0,                    //
---
>       // 0,                 // DELETED (Jonas)
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/objprinter.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/objprinter.cpp
62c62
<       self->ob_type->tp_free((PyObject *)self);
---
>       Py_TYPE(self)->tp_free((PyObject *)self);
82c82
<               self->printer = PyString_FromString("");
---
>               self->printer = Legacy_PyString_FromString("");
88c88
<               self->file = PyString_FromString("");
---
>               self->file = Legacy_PyString_FromString("");
94c94
<               self->cmd = PyString_FromString("");
---
>               self->cmd = Legacy_PyString_FromString("");
106c106
<               self->separation = PyString_FromString("No");
---
>               self->separation = Legacy_PyString_FromString("No");
147c147
<               PyObject *tmppr = 
PyString_FromString(prn.toLocal8Bit().constData());
---
>               PyObject *tmppr = 
> Legacy_PyString_FromString(prn.toLocal8Bit().constData());
153c153
<       PyObject *tmp2 = PyString_FromString("File");
---
>       PyObject *tmp2 = Legacy_PyString_FromString("File");
158c158
<       printer = PyString_FromString("File");
---
>       printer = Legacy_PyString_FromString("File");
170c170
<       file = PyString_FromString(tf.toLatin1());
---
>       file = Legacy_PyString_FromString(tf.toLatin1());
180c180
<       cmd = PyString_FromString("");
---
>       cmd = Legacy_PyString_FromString("");
202c202
<       separation = PyString_FromString("No");
---
>       separation = Legacy_PyString_FromString("No");
517c517
<       0,                       //
---
>       // 0,                 // DELETED (Jonas)
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/scriptercore.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/scriptercore.cpp
269c269
<       char **comm = new char*[arguments.size()];
---
>       wchar_t **comm = new wchar_t*[arguments.size()];
273,275c273,280
<               comm[i] = new char[localStr.size() + 1]; //+1 to allow adding 
'\0'. may be useless, don't know how to check.
<               comm[i][localStr.size()] = 0;
<               strncpy(comm[i], localStr.data(), localStr.size());
---
>               char * tmp = new char[localStr.size() + 1];
>               tmp[localStr.size()] = 0;
>               strncpy(tmp, localStr.data(), localStr.size());
>               //comm[i] = new char[localStr.size() + 1]; //+1 to allow adding 
> '\0'. may be useless, don't know how to check.
>               //comm[i][localStr.size()] = 0;
>               //strncpy(comm[i], localStr.data(), localStr.size());
>               comm[i] = Py_DecodeLocale(tmp, NULL);
>               delete[] tmp;
280c285,286
<               delete[] comm[i];
---
>               PyMem_RawFree(comm[i]);
>               //delete[] comm[i];
297c303
<               cm        += QString("import cStringIO\n");
---
>               cm        += QString("import io\n");
305c311
<               cm        += QString("sys.stdin = cStringIO.StringIO()\n");
---
>               cm        += QString("sys.stdin = io.StringIO()\n");
414,415c420,431
<                               "    import cStringIO\n"
<                               "    scribus._bu = cStringIO.StringIO()\n"
---
>                               "    print('Started script console.')\n" // 
> JONAS
>                               "    #import scribus;\n"
>                               "    #dir(scribus);\n"
>                               "    #print(\"2\");\n"
>                               "    #dir(\"scribus\");\n"
>                               "    #print('3');\n"
>                               "    #print('Selection Count result: 
> {}.'.format(scribus.selectionCount()))\n"
>                               "    #print('4');\n"
>                               "    import io\n"
>                               "    #print('5');\n"
>                               "    scribus._bu = io.StringIO()\n"
>                               "    #print('6');\n"
416a433
>                               "    #print('7');\n"
417a435
>                               "    #print('8');\n"
418a437
>                               "    #print('9');\n"
419a439
>                               "    #print('10');\n"
421a442
>                               "    #print('11');\n"
422a444
>                               "    #print('12');\n"
423a446
>                               "    #print('13');\n"
424a448
>                               "    #print('14');\n"
426c450
<                               "    print 'Catched SystemExit - it is not good 
for Scribus'\n"
---
>                               "    print ('Catched SystemExit - it is not 
> good for Scribus')\n"
428c452,453
<                               "    print 'Catched KeyboardInterrupt - it is 
not good for Scribus'\n"
---
>                               "    print ('Catched KeyboardInterrupt - it is 
> not good for Scribus')\n"
>                               "#print('15');\n"
430a456,471
> /*
> """Scribus Python-Konsole
> 
> This is a standard Python console with some 
> known limitations. Please consult the Scribus
> Scripter documentation for futher information. """
> 
> '''
> asdf
> '''
> 
> scr = scribus
> print (scr)
> scra = 3
> dir(scr)
> */
598a640
>       // JONAS - Code duplication - StringIO several times assigned to 
> sys.stdin?
605,606c647,649
<               "import cStringIO\n"
<               "sys.stdin = cStringIO.StringIO()\n"
---
>               "import io\n"
>               "sys.stdin = io.StringIO()\n"
>               "print('    scriptercore.cpp: This is the .so plugin loading 
> code.')\n" //JONAS
diff -r old/scribus-1.5.3/scribus/plugins/scriptplugin/scriptplugin.cpp 
scribus-1.5.3/scribus/plugins/scriptplugin/scriptplugin.cpp
172a173,176
>       scripterCore = new ScripterCore(ScCore->primaryMainWindow());
>       Q_CHECK_PTR(scripterCore);
>       
>       PyImport_AppendInittab("scribus", &PyInit_scribus);
174c178
<       if (PyUnicode_SetDefaultEncoding("utf-8"))
---
>       /*if (PyUnicode_SetDefaultEncoding("utf-8"))
178c182
<       }
---
>       }*/
180,182c184
<       scripterCore = new ScripterCore(ScCore->primaryMainWindow());
<       Q_CHECK_PTR(scripterCore);
<       initscribus(ScCore->primaryMainWindow());
---
>       //initscribus(ScCore->primaryMainWindow());
257c259
<       return PyString_FromString(scripterCore->inValue.toUtf8().data());
---
>       return PyUnicode_FromString(scripterCore->inValue.toUtf8().data());
577a580,608
> 
> struct module_state {
>     PyObject *error;
> };
> #define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
> 
> static int myextension_traverse(PyObject *m, visitproc visit, void *arg) {
>     Py_VISIT(GETSTATE(m)->error);
>     return 0;
> }
> 
> static int myextension_clear(PyObject *m) {
>     Py_CLEAR(GETSTATE(m)->error);
>     return 0;
> }
> 
> static struct PyModuleDef moduledef = {
>         PyModuleDef_HEAD_INIT,
>         "scribus",
>         NULL,
>         sizeof(struct module_state),
>         scribus_methods,
>         NULL,
>         myextension_traverse,
>         myextension_clear,
>         NULL
> };
> 
> 
585a617,623
> // explanation on how it's to be done: 
> https://docs.python.org/3/howto/cporting.html
> // Additional hint: has to be called by PyImport_AppendInittab before 
> Py_Initialize
> /*static*/ PyObject* PyInit_scribus(void) {
>       PyObject *m;
>       m = PyModule_Create(&moduledef);
>       return m;
> }
587a626
>       
594c633
<       PyImport_AddModule((char*)"scribus");
---
>       m = PyImport_AddModule((char*)"scribus");
599c638,639
<       m = Py_InitModule((char*)"scribus", scribus_methods);
---
>       //m = Py_InitModule((char*)"scribus", scribus_methods);
>       
636,736c676,776
<       PyDict_SetItemString(d, const_cast<char*>("UNIT_POINTS"), 
PyInt_FromLong(unitIndexFromString("pt")));
<       PyDict_SetItemString(d, const_cast<char*>("UNIT_MILLIMETERS"), 
PyInt_FromLong(unitIndexFromString("mm")));
<       PyDict_SetItemString(d, const_cast<char*>("UNIT_INCHES"), 
PyInt_FromLong(unitIndexFromString("in")));
<       PyDict_SetItemString(d, const_cast<char*>("UNIT_PICAS"), 
PyInt_FromLong(unitIndexFromString("p")));
<       PyDict_SetItemString(d, const_cast<char*>("UNIT_CENTIMETRES"), 
PyInt_FromLong(unitIndexFromString("cm")));
<       PyDict_SetItemString(d, const_cast<char*>("UNIT_CICERO"), 
PyInt_FromLong(unitIndexFromString("c")));
<         PyDict_SetItemString(d, const_cast<char*>("UNIT_PT"), 
PyInt_FromLong(unitIndexFromString("pt")));
<         PyDict_SetItemString(d, const_cast<char*>("UNIT_MM"), 
PyInt_FromLong(unitIndexFromString("mm")));
<         PyDict_SetItemString(d, const_cast<char*>("UNIT_IN"), 
PyInt_FromLong(unitIndexFromString("in")));
<         PyDict_SetItemString(d, const_cast<char*>("UNIT_P"), 
PyInt_FromLong(unitIndexFromString("p")));
<         PyDict_SetItemString(d, const_cast<char*>("UNIT_CM"), 
PyInt_FromLong(unitIndexFromString("cm")));
<         PyDict_SetItemString(d, const_cast<char*>("UNIT_C"), 
PyInt_FromLong(unitIndexFromString("c")));
<       PyDict_SetItemString(d, const_cast<char*>("PORTRAIT"), 
Py_BuildValue(const_cast<char*>("i"), portraitPage));
<       PyDict_SetItemString(d, const_cast<char*>("LANDSCAPE"), 
Py_BuildValue(const_cast<char*>("i"), landscapePage));
<       PyDict_SetItemString(d, const_cast<char*>("NOFACINGPAGES"), 
Py_BuildValue(const_cast<char*>("i"), 0));
<       PyDict_SetItemString(d, const_cast<char*>("FACINGPAGES"),  
Py_BuildValue(const_cast<char*>("i"), 1));
<       PyDict_SetItemString(d, const_cast<char*>("FIRSTPAGERIGHT"), 
Py_BuildValue(const_cast<char*>("i"), 1));
<       PyDict_SetItemString(d, const_cast<char*>("FIRSTPAGELEFT"), 
Py_BuildValue(const_cast<char*>("i"), 0));
<       PyDict_SetItemString(d, const_cast<char*>("ALIGN_LEFT"), 
Py_BuildValue(const_cast<char*>("i"), 0));
<       PyDict_SetItemString(d, const_cast<char*>("ALIGN_RIGHT"), 
Py_BuildValue(const_cast<char*>("i"), 2));
<       PyDict_SetItemString(d, const_cast<char*>("ALIGN_CENTERED"), 
Py_BuildValue(const_cast<char*>("i"), 1));
<       PyDict_SetItemString(d, const_cast<char*>("ALIGN_BLOCK"), 
Py_BuildValue(const_cast<char*>("i"), 3));
<       PyDict_SetItemString(d, const_cast<char*>("ALIGN_FORCED"), 
Py_BuildValue(const_cast<char*>("i"), 4));
<       PyDict_SetItemString(d, const_cast<char*>("DIRECTION_LTR"), 
Py_BuildValue(const_cast<char*>("i"), 0));
<       PyDict_SetItemString(d, const_cast<char*>("DIRECTION_RTL"), 
Py_BuildValue(const_cast<char*>("i"), 1));
<       PyDict_SetItemString(d, const_cast<char*>("FILL_NOG"), 
Py_BuildValue(const_cast<char*>("i"), 0));
<       PyDict_SetItemString(d, const_cast<char*>("FILL_HORIZONTALG"), 
Py_BuildValue(const_cast<char*>("i"), 1));
<       PyDict_SetItemString(d, const_cast<char*>("FILL_VERTICALG"), 
Py_BuildValue(const_cast<char*>("i"), 2));
<       PyDict_SetItemString(d, const_cast<char*>("FILL_DIAGONALG"), 
Py_BuildValue(const_cast<char*>("i"), 3));
<       PyDict_SetItemString(d, const_cast<char*>("FILL_CROSSDIAGONALG"), 
Py_BuildValue(const_cast<char*>("i"), 4));
<       PyDict_SetItemString(d, const_cast<char*>("FILL_RADIALG"), 
Py_BuildValue(const_cast<char*>("i"), 5));
<       PyDict_SetItemString(d, const_cast<char*>("LINE_SOLID"), 
Py_BuildValue(const_cast<char*>("i"), Qt::SolidLine));
<       PyDict_SetItemString(d, const_cast<char*>("LINE_DASH"), 
Py_BuildValue(const_cast<char*>("i"), Qt::DashLine));
<       PyDict_SetItemString(d, const_cast<char*>("LINE_DOT"), 
Py_BuildValue(const_cast<char*>("i"), Qt::DotLine));
<       PyDict_SetItemString(d, const_cast<char*>("LINE_DASHDOT"), 
Py_BuildValue(const_cast<char*>("i"), Qt::DashDotLine));
<       PyDict_SetItemString(d, const_cast<char*>("LINE_DASHDOTDOT"), 
Py_BuildValue(const_cast<char*>("i"), Qt::DashDotDotLine));
<       PyDict_SetItemString(d, const_cast<char*>("JOIN_MITTER"), 
Py_BuildValue(const_cast<char*>("i"), Qt::MiterJoin));
<       PyDict_SetItemString(d, const_cast<char*>("JOIN_BEVEL"), 
Py_BuildValue(const_cast<char*>("i"), Qt::BevelJoin));
<       PyDict_SetItemString(d, const_cast<char*>("JOIN_ROUND"), 
Py_BuildValue(const_cast<char*>("i"), Qt::RoundJoin));
<       PyDict_SetItemString(d, const_cast<char*>("CAP_FLAT"), 
Py_BuildValue(const_cast<char*>("i"), Qt::FlatCap));
<       PyDict_SetItemString(d, const_cast<char*>("CAP_SQUARE"), 
Py_BuildValue(const_cast<char*>("i"), Qt::SquareCap));
<       PyDict_SetItemString(d, const_cast<char*>("CAP_ROUND"), 
Py_BuildValue(const_cast<char*>("i"), Qt::RoundCap));
<       PyDict_SetItemString(d, const_cast<char*>("BUTTON_NONE"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::NoButton));
<       PyDict_SetItemString(d, const_cast<char*>("BUTTON_OK"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::Ok));
<       PyDict_SetItemString(d, const_cast<char*>("BUTTON_CANCEL"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::Cancel));
<       PyDict_SetItemString(d, const_cast<char*>("BUTTON_YES"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::Yes));
<       PyDict_SetItemString(d, const_cast<char*>("BUTTON_NO"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::No));
<       PyDict_SetItemString(d, const_cast<char*>("BUTTON_ABORT"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::Abort));
<       PyDict_SetItemString(d, const_cast<char*>("BUTTON_RETRY"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::Retry));
<       PyDict_SetItemString(d, const_cast<char*>("BUTTON_IGNORE"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::Ignore));
<       PyDict_SetItemString(d, const_cast<char*>("BUTTON_DEFAULT"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::Default));
<       PyDict_SetItemString(d, const_cast<char*>("ICON_NONE"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::NoIcon));
<       PyDict_SetItemString(d, const_cast<char*>("ICON_INFORMATION"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::Information));
<       PyDict_SetItemString(d, const_cast<char*>("ICON_WARNING"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::Warning));
<       PyDict_SetItemString(d, const_cast<char*>("ICON_CRITICAL"), 
Py_BuildValue(const_cast<char*>("i"), QMessageBox::Critical));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_A0"), 
Py_BuildValue(const_cast<char*>("(ff)"), 2380.0, 3368.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_A1"), 
Py_BuildValue(const_cast<char*>("(ff)"), 1684.0, 2380.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_A2"), 
Py_BuildValue(const_cast<char*>("(ff)"), 1190.0, 1684.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_A3"), 
Py_BuildValue(const_cast<char*>("(ff)"), 842.0, 1190.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_A4"), 
Py_BuildValue(const_cast<char*>("(ff)"), 595.0, 842.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_A5"), 
Py_BuildValue(const_cast<char*>("(ff)"), 421.0, 595.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_A6"), 
Py_BuildValue(const_cast<char*>("(ff)"), 297.0, 421.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_A7"), 
Py_BuildValue(const_cast<char*>("(ff)"), 210.0, 297.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_A8"), 
Py_BuildValue(const_cast<char*>("(ff)"), 148.0, 210.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_A9"), 
Py_BuildValue(const_cast<char*>("(ff)"), 105.0, 148.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_B0"), 
Py_BuildValue(const_cast<char*>("(ff)"), 2836.0, 4008.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_B1"), 
Py_BuildValue(const_cast<char*>("(ff)"), 2004.0, 2836.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_B2"), 
Py_BuildValue(const_cast<char*>("(ff)"), 1418.0, 2004.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_B3"), 
Py_BuildValue(const_cast<char*>("(ff)"), 1002.0, 1418.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_B4"), 
Py_BuildValue(const_cast<char*>("(ff)"), 709.0, 1002.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_B5"), 
Py_BuildValue(const_cast<char*>("(ff)"), 501.0, 709.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_B6"), 
Py_BuildValue(const_cast<char*>("(ff)"), 355.0, 501.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_B7"), 
Py_BuildValue(const_cast<char*>("(ff)"), 250.0, 355.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_B8"), 
Py_BuildValue(const_cast<char*>("(ff)"), 178.0, 250.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_B9"), 
Py_BuildValue(const_cast<char*>("(ff)"), 125.0, 178.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_B10"), 
Py_BuildValue(const_cast<char*>("(ff)"), 89.0, 125.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_C5E"), 
Py_BuildValue(const_cast<char*>("(ff)"), 462.0, 649.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_COMM10E"), 
Py_BuildValue(const_cast<char*>("(ff)"), 298.0, 683.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_DLE"),  
Py_BuildValue(const_cast<char*>("(ff)"), 312.0, 624.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_EXECUTIVE"), 
Py_BuildValue(const_cast<char*>("(ff)"), 542.0, 720.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_FOLIO"), 
Py_BuildValue(const_cast<char*>("(ff)"), 595.0, 935.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_LEDGER"), 
Py_BuildValue(const_cast<char*>("(ff)"), 1224.0, 792.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_LEGAL"), 
Py_BuildValue(const_cast<char*>("(ff)"), 612.0, 1008.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_LETTER"), 
Py_BuildValue(const_cast<char*>("(ff)"), 612.0, 792.0));
<       PyDict_SetItemString(d, const_cast<char*>("PAPER_TABLOID"), 
Py_BuildValue(const_cast<char*>("(ff)"), 792.0, 1224.0));
<       PyDict_SetItemString(d, const_cast<char*>("NORMAL"), 
Py_BuildValue(const_cast<char*>("i"), 0));
<       PyDict_SetItemString(d, const_cast<char*>("DARKEN"), 
Py_BuildValue(const_cast<char*>("i"), 1));
<       PyDict_SetItemString(d, const_cast<char*>("LIGHTEN"), 
Py_BuildValue(const_cast<char*>("i"), 2));
<       PyDict_SetItemString(d, const_cast<char*>("MULTIPLY"), 
Py_BuildValue(const_cast<char*>("i"), 3));
<       PyDict_SetItemString(d, const_cast<char*>("SCREEN"), 
Py_BuildValue(const_cast<char*>("i"), 4));
<       PyDict_SetItemString(d, const_cast<char*>("OVERLAY"), 
Py_BuildValue(const_cast<char*>("i"), 5));
<       PyDict_SetItemString(d, const_cast<char*>("HARD_LIGHT"), 
Py_BuildValue(const_cast<char*>("i"), 6));
<       PyDict_SetItemString(d, const_cast<char*>("SOFT_LIGHT"), 
Py_BuildValue(const_cast<char*>("i"), 7));
<       PyDict_SetItemString(d, const_cast<char*>("DIFFERENCE"), 
Py_BuildValue(const_cast<char*>("i"), 8));
<       PyDict_SetItemString(d, const_cast<char*>("EXCLUSION"), 
Py_BuildValue(const_cast<char*>("i"), 9));
<       PyDict_SetItemString(d, const_cast<char*>("COLOR_DODGE"), 
Py_BuildValue(const_cast<char*>("i"), 10));
<       PyDict_SetItemString(d, const_cast<char*>("COLOR_BURN"), 
Py_BuildValue(const_cast<char*>("i"), 11));
<       PyDict_SetItemString(d, const_cast<char*>("HUE"), 
Py_BuildValue(const_cast<char*>("i"), 12));
<       PyDict_SetItemString(d, const_cast<char*>("SATURATION"), 
Py_BuildValue(const_cast<char*>("i"), 13));
<       PyDict_SetItemString(d, const_cast<char*>("COLOR"), 
Py_BuildValue(const_cast<char*>("i"), 14));
<       PyDict_SetItemString(d, const_cast<char*>("LUMINOSITY"), 
Py_BuildValue(const_cast<char*>("i"), 15));
---
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("UNIT_POINTS")), 
> PyInt_FromLong(unitIndexFromString("pt")));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("UNIT_MILLIMETERS")), 
> PyInt_FromLong(unitIndexFromString("mm")));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("UNIT_INCHES")), 
> PyInt_FromLong(unitIndexFromString("in")));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("UNIT_PICAS")), 
> PyInt_FromLong(unitIndexFromString("p")));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("UNIT_CENTIMETRES")), 
> PyInt_FromLong(unitIndexFromString("cm")));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("UNIT_CICERO")), 
> PyInt_FromLong(unitIndexFromString("c")));
>         PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("UNIT_PT")), 
> PyInt_FromLong(unitIndexFromString("pt")));
>         PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("UNIT_MM")), 
> PyInt_FromLong(unitIndexFromString("mm")));
>         PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("UNIT_IN")), 
> PyInt_FromLong(unitIndexFromString("in")));
>         PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("UNIT_P")), 
> PyInt_FromLong(unitIndexFromString("p")));
>         PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("UNIT_CM")), 
> PyInt_FromLong(unitIndexFromString("cm")));
>         PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("UNIT_C")), 
> PyInt_FromLong(unitIndexFromString("c")));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PORTRAIT")), 
> Py_BuildValue(const_cast<char*>("i"), portraitPage));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("LANDSCAPE")), 
> Py_BuildValue(const_cast<char*>("i"), landscapePage));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("NOFACINGPAGES")), 
> Py_BuildValue(const_cast<char*>("i"), 0));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("FACINGPAGES")),  
> Py_BuildValue(const_cast<char*>("i"), 1));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("FIRSTPAGERIGHT")), 
> Py_BuildValue(const_cast<char*>("i"), 1));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("FIRSTPAGELEFT")), 
> Py_BuildValue(const_cast<char*>("i"), 0));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("ALIGN_LEFT")), 
> Py_BuildValue(const_cast<char*>("i"), 0));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("ALIGN_RIGHT")), 
> Py_BuildValue(const_cast<char*>("i"), 2));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("ALIGN_CENTERED")), 
> Py_BuildValue(const_cast<char*>("i"), 1));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("ALIGN_BLOCK")), 
> Py_BuildValue(const_cast<char*>("i"), 3));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("ALIGN_FORCED")), 
> Py_BuildValue(const_cast<char*>("i"), 4));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("DIRECTION_LTR")), 
> Py_BuildValue(const_cast<char*>("i"), 0));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("DIRECTION_RTL")), 
> Py_BuildValue(const_cast<char*>("i"), 1));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("FILL_NOG")), 
> Py_BuildValue(const_cast<char*>("i"), 0));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("FILL_HORIZONTALG")), 
> Py_BuildValue(const_cast<char*>("i"), 1));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("FILL_VERTICALG")), 
> Py_BuildValue(const_cast<char*>("i"), 2));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("FILL_DIAGONALG")), 
> Py_BuildValue(const_cast<char*>("i"), 3));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("FILL_CROSSDIAGONALG")), 
> Py_BuildValue(const_cast<char*>("i"), 4));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("FILL_RADIALG")), 
> Py_BuildValue(const_cast<char*>("i"), 5));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("LINE_SOLID")), 
> Py_BuildValue(const_cast<char*>("i"), Qt::SolidLine));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("LINE_DASH")), 
> Py_BuildValue(const_cast<char*>("i"), Qt::DashLine));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("LINE_DOT")), 
> Py_BuildValue(const_cast<char*>("i"), Qt::DotLine));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("LINE_DASHDOT")), 
> Py_BuildValue(const_cast<char*>("i"), Qt::DashDotLine));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("LINE_DASHDOTDOT")), 
> Py_BuildValue(const_cast<char*>("i"), Qt::DashDotDotLine));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("JOIN_MITTER")), 
> Py_BuildValue(const_cast<char*>("i"), Qt::MiterJoin));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("JOIN_BEVEL")), 
> Py_BuildValue(const_cast<char*>("i"), Qt::BevelJoin));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("JOIN_ROUND")), 
> Py_BuildValue(const_cast<char*>("i"), Qt::RoundJoin));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("CAP_FLAT")), 
> Py_BuildValue(const_cast<char*>("i"), Qt::FlatCap));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("CAP_SQUARE")), 
> Py_BuildValue(const_cast<char*>("i"), Qt::SquareCap));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("CAP_ROUND")), 
> Py_BuildValue(const_cast<char*>("i"), Qt::RoundCap));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("BUTTON_NONE")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::NoButton));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("BUTTON_OK")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::Ok));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("BUTTON_CANCEL")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::Cancel));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("BUTTON_YES")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::Yes));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("BUTTON_NO")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::No));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("BUTTON_ABORT")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::Abort));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("BUTTON_RETRY")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::Retry));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("BUTTON_IGNORE")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::Ignore));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("BUTTON_DEFAULT")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::Default));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("ICON_NONE")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::NoIcon));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("ICON_INFORMATION")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::Information));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("ICON_WARNING")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::Warning));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("ICON_CRITICAL")), 
> Py_BuildValue(const_cast<char*>("i"), QMessageBox::Critical));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_A0")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 2380.0, 3368.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_A1")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 1684.0, 2380.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_A2")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 1190.0, 1684.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_A3")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 842.0, 1190.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_A4")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 595.0, 842.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_A5")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 421.0, 595.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_A6")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 297.0, 421.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_A7")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 210.0, 297.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_A8")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 148.0, 210.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_A9")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 105.0, 148.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_B0")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 2836.0, 4008.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_B1")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 2004.0, 2836.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_B2")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 1418.0, 2004.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_B3")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 1002.0, 1418.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_B4")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 709.0, 1002.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_B5")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 501.0, 709.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_B6")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 355.0, 501.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_B7")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 250.0, 355.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_B8")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 178.0, 250.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_B9")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 125.0, 178.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_B10")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 89.0, 125.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_C5E")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 462.0, 649.0));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("PAPER_COMM10E")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 298.0, 683.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAPER_DLE")), 
>  Py_BuildValue(const_cast<char*>("(ff)"), 312.0, 624.0));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("PAPER_EXECUTIVE")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 542.0, 720.0));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("PAPER_FOLIO")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 595.0, 935.0));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("PAPER_LEDGER")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 1224.0, 792.0));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("PAPER_LEGAL")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 612.0, 1008.0));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("PAPER_LETTER")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 612.0, 792.0));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("PAPER_TABLOID")), 
> Py_BuildValue(const_cast<char*>("(ff)"), 792.0, 1224.0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("NORMAL")), 
> Py_BuildValue(const_cast<char*>("i"), 0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("DARKEN")), 
> Py_BuildValue(const_cast<char*>("i"), 1));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("LIGHTEN")), 
> Py_BuildValue(const_cast<char*>("i"), 2));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("MULTIPLY")), 
> Py_BuildValue(const_cast<char*>("i"), 3));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("SCREEN")), 
> Py_BuildValue(const_cast<char*>("i"), 4));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("OVERLAY")), 
> Py_BuildValue(const_cast<char*>("i"), 5));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("HARD_LIGHT")), 
> Py_BuildValue(const_cast<char*>("i"), 6));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("SOFT_LIGHT")), 
> Py_BuildValue(const_cast<char*>("i"), 7));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("DIFFERENCE")), 
> Py_BuildValue(const_cast<char*>("i"), 8));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("EXCLUSION")), 
> Py_BuildValue(const_cast<char*>("i"), 9));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("COLOR_DODGE")), 
> Py_BuildValue(const_cast<char*>("i"), 10));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("COLOR_BURN")), 
> Py_BuildValue(const_cast<char*>("i"), 11));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("HUE")), 
> Py_BuildValue(const_cast<char*>("i"), 12));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("SATURATION")), 
> Py_BuildValue(const_cast<char*>("i"), 13));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("COLOR")), 
> Py_BuildValue(const_cast<char*>("i"), 14));
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("LUMINOSITY")), 
> Py_BuildValue(const_cast<char*>("i"), 15));
738,741c778,781
<       PyDict_SetItemString(d, const_cast<char*>("PAGE_1"), 
Py_BuildValue(const_cast<char*>("i"), 0));
<       PyDict_SetItemString(d, const_cast<char*>("PAGE_2"), 
Py_BuildValue(const_cast<char*>("i"), 1));
<       PyDict_SetItemString(d, const_cast<char*>("PAGE_3"), 
Py_BuildValue(const_cast<char*>("i"), 2));
<       PyDict_SetItemString(d, const_cast<char*>("PAGE_4"), 
Py_BuildValue(const_cast<char*>("i"), 3));
---
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAGE_1")), 
> Py_BuildValue(const_cast<char*>("i"), 0));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAGE_2")), 
> Py_BuildValue(const_cast<char*>("i"), 1));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAGE_3")), 
> Py_BuildValue(const_cast<char*>("i"), 2));
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("PAGE_4")), 
> Py_BuildValue(const_cast<char*>("i"), 3));
756c796
<                       name = PyString_FromString("inch");
---
>                       name = PyUnicode_FromString("inch");
758c798
<                       name = 
PyString_FromString(unitGetUntranslatedStrFromIndex(i).toLatin1().constData());
---
>                       name = 
> PyUnicode_FromString(unitGetUntranslatedStrFromIndex(i).toLatin1().constData());
772c812
<       PyDict_SetItemString(d, const_cast<char*>("scribus_version"), 
PyString_FromString(const_cast<char*>(VERSION)));
---
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("scribus_version")), 
> PyUnicode_FromString(const_cast<char*>(VERSION)));
788c828
<                       PyDict_SetItemString(d, 
const_cast<char*>("scribus_version_info"), versionTuple);
---
>                       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("scribus_version_info")), 
> versionTuple);
797c837
<       // We need to import the __builtins__, warnings and exceptions modules 
to be able to run
---
>       // We need to import the builtins, warnings and exceptions modules to 
> be able to run
801c841,842
<       PyObject* builtinModule = 
PyImport_ImportModuleEx(const_cast<char*>("__builtin__"),
---
>       // JONAS: __builtin__ -> builtins (Python3)
>       PyObject* builtinModule = 
> PyImport_ImportModuleEx(const_cast<char*>("builtins"),
805c846
<               qDebug("Failed to import __builtin__ module. Something is 
probably broken with your Python.");
---
>               qDebug("Failed to import builtins module. Something is probably 
> broken with your Python.");
808c849,851
<       PyDict_SetItemString(d, const_cast<char*>("__builtin__"), 
builtinModule);
---
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("builtins")), 
> builtinModule);
>       
>       /* JONAS: "exceptions" has been merged into "builtins" in Python 3
816c859,861
<       PyDict_SetItemString(d, const_cast<char*>("exceptions"), 
exceptionsModule);
---
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("exceptions")), exceptionsModule);
>       */
>       
824c869
<       PyDict_SetItemString(d, const_cast<char*>("warnings"), warningsModule);
---
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("warnings")), 
> warningsModule);
860c905
<       PyObject* docStr = PyString_FromString(docstring.toUtf8().data());
---
>       PyObject* docStr = PyUnicode_FromString(docstring.toUtf8().data());
865c910,911
<               PyObject* uniDocStr = PyUnicode_FromEncodedObject(docStr, 
"utf-8", NULL);
---
>               PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("__doc__")), docStr);
>               /*PyObject* uniDocStr = PyUnicode_FromEncodedObject(docStr, 
> "utf-8", NULL);
871c917
<                       PyDict_SetItemString(d, const_cast<char*>("__doc__"), 
uniDocStr);
---
>                       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("__doc__")), uniDocStr);
873a920
>               */
885c932
<       PyDict_SetItemString(d, const_cast<char*>("qApp"), wrappedQApp);
---
>       PyDict_SetItem(d, PyUnicode_FromString(const_cast<char*>("qApp")), 
> wrappedQApp);
896c943
<       PyDict_SetItemString(d, const_cast<char*>("mainWindow"), 
wrappedMainWindow);
---
>       PyDict_SetItem(d, 
> PyUnicode_FromString(const_cast<char*>("mainWindow")), wrappedMainWindow);
898a946,947
>       
>       return;
diff -r old/scribus-1.5.3/scribus/scribus.cpp scribus-1.5.3/scribus/scribus.cpp
311a312,314
>       // JONAS
>       m_doc = 0;
>       m_tocGenerator = 0;
479,480c482,486
<       delete m_doc;
<       delete m_tocGenerator;
---
>       // JONAS
>       if (m_doc)
>               delete m_doc;
>       if (m_tocGenerator)
>               delete m_tocGenerator;

Reply via email to