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;
