r23557 by jghali - Refactoring and cleanups for PSLib

scribus-commit scribus-commit at lists.scribus.net
Mon Apr 6 20:50:38 UTC 2020


Author: jghali
Date: Mon Apr  6 20:50:38 2020
New Revision: 23557

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23557
Log:
Refactoring and cleanups for PSLib

Modified:
    trunk/Scribus/scribus/plugins/scriptplugin/objprinter.cpp
    trunk/Scribus/scribus/plugins/scriptplugin_py2x/objprinter.cpp
    trunk/Scribus/scribus/pslib.cpp
    trunk/Scribus/scribus/pslib.h
    trunk/Scribus/scribus/scprintengine_gdi.cpp
    trunk/Scribus/scribus/scprintengine_ps.cpp
    trunk/Scribus/scribus/scribus.cpp
    trunk/Scribus/scribus/ui/preview.cpp

Modified: trunk/Scribus/scribus/plugins/scriptplugin/objprinter.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23557&path=/trunk/Scribus/scribus/plugins/scriptplugin/objprinter.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/scriptplugin/objprinter.cpp	(original)
+++ trunk/Scribus/scribus/plugins/scriptplugin/objprinter.cpp	Mon Apr  6 20:50:38 2020
@@ -415,6 +415,7 @@
 	options.toFile    = fil;
 	options.separationName = SepName;
 	options.outputSeparations = SepName != QString("No");
+	options.useSpotColors = true;
 	options.useColor = self->color;
 	options.mirrorH  = self->mph;
 	options.mirrorV  = self->mpv;
@@ -423,14 +424,14 @@
 	options.bleedMarks = false;
 	options.registrationMarks = false;
 	options.colorMarks = false;
+	options.includePDFMarks = false;
 	options.markOffset = 0.0;
 	options.bleeds.set(0, 0, 0, 0);
 	if (!PrinterUtil::checkPrintEngineSupport(options.printer, options.prnEngine, options.toFile))
 		options.prnEngine = PrinterUtil::getDefaultPrintEngine(options.printer, options.toFile);
 	printcomm = PyUnicode_asQString(self->cmd);
-	QMap<QString, QMap<uint, FPointArray> > ReallyUsed;
-	ReallyUsed.clear();
-	ScCore->primaryMainWindow()->doc->getUsedFonts(ReallyUsed);
+
+	ScribusDoc* currentDoc = ScCore->primaryMainWindow()->doc;
 
 #if defined(_WIN32)
 	if (!options.toFile)
@@ -440,7 +441,7 @@
 		if ( PrinterUtil::getDefaultSettings(prn, options.devMode) )
 		{
 			ScPrintEngine_GDI winPrint;
-			printDone = winPrint.print( *ScCore->primaryMainWindow()->doc, options );
+			printDone = winPrint.print( *currentDoc, options );
 		}
 		if (!printDone)
 			PyErr_SetString(PyExc_SystemError, "Printing failed");
@@ -448,26 +449,26 @@
 	}
 #endif
 
-	PSLib *dd = new PSLib(options, true, PrefsManager::instance().appPrefs.fontPrefs.AvailFonts, ReallyUsed, ScCore->primaryMainWindow()->doc->PageColors, false, true);
+	PSLib *dd = new PSLib(currentDoc, options, PSLib::OutputPS, &currentDoc->PageColors);
 	if (dd != nullptr)
 	{
 		if (!fil)
-			fna = QDir::toNativeSeparators(ScPaths::tempFileDir()+"/tmp.ps");
+			fna = QDir::toNativeSeparators(ScPaths::tempFileDir() + "/tmp.ps");
 		PSfile = dd->PS_set_file(fna);
 		fna = QDir::toNativeSeparators(fna);
 		if (PSfile)
 		{
 			options.setDevParam = false;
 			options.doClip = false;
-			dd->CreatePS(ScCore->primaryMainWindow()->doc, options);
+			dd->createPS(options);
 			if (options.prnEngine == PostScript1 || options.prnEngine == PostScript2)
 			{
 				if (ScCore->haveGS())
 				{
 					QString tmp;
 					QStringList opts;
-					opts.append( QString("-dDEVICEWIDTHPOINTS=%1").arg(tmp.setNum(ScCore->primaryMainWindow()->doc->pageWidth())) );
-					opts.append( QString("-dDEVICEHEIGHTPOINTS=%1").arg(tmp.setNum(ScCore->primaryMainWindow()->doc->pageHeight())) );
+					opts.append( QString("-dDEVICEWIDTHPOINTS=%1").arg(tmp.setNum(currentDoc->pageWidth())) );
+					opts.append( QString("-dDEVICEHEIGHTPOINTS=%1").arg(tmp.setNum(currentDoc->pageHeight())) );
 					convertPS2PS(fna, fna+".tmp", opts, options.prnEngine);
 					moveFile( fna + ".tmp", fna );
 				}

Modified: trunk/Scribus/scribus/plugins/scriptplugin_py2x/objprinter.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23557&path=/trunk/Scribus/scribus/plugins/scriptplugin_py2x/objprinter.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/scriptplugin_py2x/objprinter.cpp	(original)
+++ trunk/Scribus/scribus/plugins/scriptplugin_py2x/objprinter.cpp	Mon Apr  6 20:50:38 2020
@@ -428,9 +428,8 @@
 	if (!PrinterUtil::checkPrintEngineSupport(options.printer, options.prnEngine, options.toFile))
 		options.prnEngine = PrinterUtil::getDefaultPrintEngine(options.printer, options.toFile);
 	printcomm = QString(PyString_AsString(self->cmd));
-	QMap<QString, QMap<uint, FPointArray> > ReallyUsed;
-	ReallyUsed.clear();
-	ScCore->primaryMainWindow()->doc->getUsedFonts(ReallyUsed);
+	
+	ScribusDoc* currentDoc = ScCore->primaryMainWindow()->doc;
 
 #if defined(_WIN32)
 	if (!options.toFile)
@@ -440,7 +439,7 @@
 		if ( PrinterUtil::getDefaultSettings(prn, options.devMode) )
 		{
 			ScPrintEngine_GDI winPrint;
-			printDone = winPrint.print( *ScCore->primaryMainWindow()->doc, options );
+			printDone = winPrint.print( *currentDoc, options );
 		}
 		if (!printDone)
 			PyErr_SetString(PyExc_SystemError, "Printing failed");
@@ -448,7 +447,7 @@
 	}
 #endif
 
-	PSLib *dd = new PSLib(options, true, PrefsManager::instance().appPrefs.fontPrefs.AvailFonts, ReallyUsed, ScCore->primaryMainWindow()->doc->PageColors, false, true);
+	PSLib *dd = new PSLib(options, PSLib::OutputPS, &currentDoc->PageColors);
 	if (dd != nullptr)
 	{
 		if (!fil)
@@ -459,15 +458,15 @@
 		{
 			options.setDevParam = false;
 			options.doClip = false;
-			dd->CreatePS(ScCore->primaryMainWindow()->doc, options);
+			dd->CreatePS(options);
 			if (options.prnEngine == PostScript1 || options.prnEngine == PostScript2)
 			{
 				if (ScCore->haveGS())
 				{
 					QString tmp;
 					QStringList opts;
-					opts.append( QString("-dDEVICEWIDTHPOINTS=%1").arg(tmp.setNum(ScCore->primaryMainWindow()->doc->pageWidth())) );
-					opts.append( QString("-dDEVICEHEIGHTPOINTS=%1").arg(tmp.setNum(ScCore->primaryMainWindow()->doc->pageHeight())) );
+					opts.append( QString("-dDEVICEWIDTHPOINTS=%1").arg(tmp.setNum(currentDoc->pageWidth())) );
+					opts.append( QString("-dDEVICEHEIGHTPOINTS=%1").arg(tmp.setNum(currentDoc->pageHeight())) );
 					convertPS2PS(fna, fna+".tmp", opts, options.prnEngine);
 					moveFile( fna + ".tmp", fna );
 				}

Modified: trunk/Scribus/scribus/pslib.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23557&path=/trunk/Scribus/scribus/pslib.cpp
==============================================================================
--- trunk/Scribus/scribus/pslib.cpp	(original)
+++ trunk/Scribus/scribus/pslib.cpp	Mon Apr  6 20:50:38 2020
@@ -68,7 +68,6 @@
 	ScribusDoc* m_Doc;
 	uint m_argh;
 	ScPage* m_page;
-	bool m_sep;
 	bool m_farb;
 	bool m_master;
 	PSLib* m_ps;
@@ -84,12 +83,10 @@
 	}
 
 public:
-	PSPainter(ScribusDoc* Doc, uint argh, ScPage* page, bool sep, bool farb, bool master, PSLib* ps):
+	PSPainter(ScribusDoc* Doc, uint argh, ScPage* page, bool master, PSLib* ps):
 		m_Doc(Doc),
 		m_argh(argh),
 		m_page(page),
-		m_sep(sep),
-		m_farb(farb),
 		m_master(master),
 		m_ps(ps)
 	{}
@@ -234,57 +231,46 @@
 	applyTransform();
 	if (scaleH() != 1 || scaleV() != 1)
 		m_ps->PS_scale(scaleH(), scaleV());
-	m_ps->ProcessItem(m_Doc, m_page, item, m_argh, m_sep, m_farb, m_master, true);
+	m_ps->ProcessItem(m_page, item, m_argh, m_master, true);
 	m_ps->PS_restore();
 }
 
-PSLib::PSLib(PrintOptions &options, bool psart, SCFonts &AllFonts, QMap<QString, QMap<uint, FPointArray> > DocFonts, ColorList DocColors, bool pdf, bool spot)
+PSLib::PSLib(ScribusDoc* doc, PrintOptions &options, OutputFormat outputFmt, ColorList *docColors)
+	: m_Doc(doc), m_outputFormat(outputFmt)
 {
 	Options = options;
-	optimization = OptimizeCompat;
-	m_Doc = nullptr;
-	progressDialog = nullptr;
-	abortExport = false;
-	PageIndex = 0;
 	User = "";
 	Creator = "Scribus" + QString(VERSION);
-	Titel = "";
+	Title = "";
 	FillColor = "0.0 0.0 0.0 0.0";
 	StrokeColor = "0.0 0.0 0.0 0.0";
-	Header = psart ? "%!PS-Adobe-3.0\n" : "%!PS-Adobe-3.0 EPSF-3.0\n";
 	BBox = "";
 	BBoxH = "";
-	psExport = psart;
-	isPDF = pdf;
-	UsedFonts.clear();
-	Fonts = "";
 	FontDesc = "";
-	GraySc = false;
-	DoSep = false;
-	abortExport = false;
-	useSpotColors = spot;
-	GrayCalc =  "/setcmykcolor {exch 0.11 mul add exch 0.59 mul add exch 0.3 mul add\n";
-	GrayCalc += "               dup 1 gt {pop 1} if 1 exch sub oldsetgray} bind def\n";
-	GrayCalc += "/setrgbcolor {0.11 mul exch 0.59 mul add exch 0.3 mul add\n";
-	GrayCalc += "              oldsetgray} bind def\n";
 	Farben = "";
 	FNamen = "";
+
 	CMYKColorF cmykValues;
-	ColorList::Iterator itf;
 	double c, m, y, k;
 	int spotCount = 1;
-	bool erst = true;
-	colorsToUse = DocColors;
+	bool first = true;
 	spotMap.clear();
-	colorDesc = "";
-	for (itf = DocColors.begin(); itf != DocColors.end(); ++itf)
-	{
-		if (((itf->isSpotColor()) || (itf->isRegistrationColor())) && (useSpotColors))
-		{
-			ScColorEngine::getCMYKValues(*itf, DocColors.document(), cmykValues);
+	colorDesc.clear();
+
+	if (docColors != nullptr)
+		colorsToUse = *docColors;
+	else
+		m_Doc->getUsedColors(colorsToUse);
+	colorsToUse.setDocument(m_Doc);
+
+	for (auto itf = colorsToUse.begin(); itf != colorsToUse.end(); ++itf)
+	{
+		if (((itf->isSpotColor()) || (itf->isRegistrationColor())) && (Options.useSpotColors))
+		{
+			ScColorEngine::getCMYKValues(*itf, colorsToUse.document(), cmykValues);
 			cmykValues.getValues(c, m, y, k);
-			colorDesc += "/Spot"+QString::number(spotCount)+" { [ /Separation (";
-			if (DocColors[itf.key()].isRegistrationColor())
+			colorDesc += "/Spot" + QString::number(spotCount) + " { [ /Separation (";
+			if (itf->isRegistrationColor())
 				colorDesc += "All";
 			else
 				colorDesc += itf.key();
@@ -296,11 +282,11 @@
 			spotMap.insert(itf.key(), "Spot" + QString::number(spotCount));
 			++spotCount;
 		}
-		if ((itf.key() != "Cyan") && (itf.key() != "Magenta") && (itf.key() != "Yellow") && (itf.key() != "Black") && DocColors[itf.key()].isSpotColor())
-		{
-			ScColorEngine::getCMYKValues(DocColors[itf.key()], DocColors.document(), cmykValues);
+		if ((itf.key() != "Cyan") && (itf.key() != "Magenta") && (itf.key() != "Yellow") && (itf.key() != "Black") && itf->isSpotColor())
+		{
+			ScColorEngine::getCMYKValues(colorsToUse[itf.key()], colorsToUse.document(), cmykValues);
 			cmykValues.getValues(c, m, y, k);
-			if (!erst)
+			if (!first)
 			{
 				Farben += "%%+ ";
 				FNamen += "%%+ ";
@@ -308,18 +294,21 @@
 			Farben += ToStr(c) + " " + ToStr(m) + " ";
 			Farben += ToStr(y) + " " + ToStr(k) + " (" + itf.key() + ")\n";
 			FNamen += "(" + itf.key() + ")\n";
-			erst = false;
-		}
-	}
+			first = false;
+		}
+	}
+
 	QMap<QString, QString> psNameMap;
-	QMap<QString, QMap<uint, FPointArray> >::Iterator it;
-//	int a = 0;
-	for (it = DocFonts.begin(); it != DocFonts.end(); ++it)
+	SCFonts& allFonts = PrefsManager::instance().appPrefs.fontPrefs.AvailFonts;
+	QMap<QString, QMap<uint, FPointArray> > docFonts;
+	doc->getUsedFonts(docFonts);
+
+	for (auto it = docFonts.begin(); it != docFonts.end(); ++it)
 	{
 		// Subset all TTF Fonts until the bug in the TTF-Embedding Code is fixed
 		// Subset also font whose postscript name conflicts with an already used font
 		// Subset always now with new boxes code.
-		ScFace &face (AllFonts[it.key()]);
+		ScFace &face (allFonts[it.key()]);
 		QMap<uint, FPointArray>& RealGlyphs(it.value());
 		QString encodedName = face.psName().simplified().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" );
 
@@ -370,55 +359,6 @@
 
 		psNameMap.insert(encodedName, face.scName());
 	}
-	Prolog = "%%BeginProlog\n";
-	Prolog += "/Scribusdict 100 dict def\n";
-	Prolog += "Scribusdict begin\n";
-	Prolog += "/sp {showpage} bind def\n";
-	Prolog += "/oldsetgray /setgray load def\n";
-	Prolog += "/cmyk {setcmykcolor} def\n";
-	Prolog += "/m {moveto} bind def\n";
-	Prolog += "/l {lineto} bind def\n";
-	Prolog += "/li {lineto} bind def\n";
-	Prolog += "/cu {curveto} bind def\n";
-	Prolog += "/cl {closepath} bind def\n";
-	Prolog += "/gs {gsave} bind def\n";
-	Prolog += "/gr {grestore} bind def\n";
-	Prolog += "/tr {translate} bind def\n";
-	Prolog += "/ro {rotate} bind def\n";
-	Prolog += "/sh {show} bind def\n";
-	Prolog += "/shg {setcmykcolor moveto glyphshow} def\n";
-	Prolog += "/shgsp {moveto glyphshow} def\n";
-	Prolog += "/sc {scale} bind def\n";
-	Prolog += "/se {selectfont} bind def\n";
-	Prolog += "/sf {setfont} bind def\n";
-	Prolog += "/sw {setlinewidth} bind def\n";
-	Prolog += "/f  {findfont} bind def\n";
-	Prolog += "/fi {fill} bind def\n";
-	Prolog += "/st {stroke} bind def\n";
-	Prolog += "/shgf {gs dup scale begin cvx exec fill end gr} bind def\n";
-	Prolog += "/shgs {gs dup 1 exch div currentlinewidth mul sw dup scale\n";
-	Prolog += "       begin cvx exec st end gr} bind def\n";
-	Prolog += "/bEPS {\n";
-	Prolog += "    /b4_Inc_state save def\n";
-	Prolog += "    /dict_count countdictstack def\n";
-	Prolog += "    /op_count count 1 sub def\n";
-	Prolog += "    userdict begin\n";
-	Prolog += "    /showpage { } def\n";
-	Prolog += "    0 setgray 0 setlinecap\n";
-	Prolog += "    1 setlinewidth 0 setlinejoin\n";
-	Prolog += "    10 setmiterlimit [ ] 0 setdash newpath\n";
-	Prolog += "    /languagelevel where\n";
-	Prolog += "    {pop languagelevel\n";
-	Prolog += "    1 ne\n";
-	Prolog += "    {false setstrokeadjust false setoverprint\n";
-	Prolog += "    } if } if } bind def\n";
-	Prolog += "/eEPS { count op_count sub {pop} repeat\n";
-	Prolog += "    countdictstack dict_count sub {end} repeat\n";
-	Prolog += "    b4_Inc_state restore } bind def\n";
-	Prolog += "    end\n";
-	if ((Options.cropMarks) || (Options.bleedMarks) || (Options.registrationMarks) || (Options.colorMarks))
-		Prolog += "/rb { [ /Separation (All)\n/DeviceCMYK { dup 0 mul exch dup 0 mul exch dup 0 mul exch 1 mul }\n] setcolorspace setcolor} bind def\n";
-	Prolog += "%%EndProlog\n";
 }
 
 PSLib::~PSLib()
@@ -567,7 +507,7 @@
 	if (art == "Creator")
 		Creator = was;
 	if (art == "Title")
-		Titel = was;
+		Title = was;
 }
 
 bool PSLib::PS_set_file(const QString& fn)
@@ -580,15 +520,15 @@
 	return ret;
 }
 
-bool PSLib::PS_begin_doc(ScribusDoc *doc, double x, double y, double width, double height, int numpage, bool sep, bool farb)
-{
-	m_Doc = doc;
-	PutStream(Header);
+bool PSLib::PS_begin_doc(double x, double y, double width, double height, int numpage)
+{
+	QString header = (m_outputFormat == OutputPS) ? "%!PS-Adobe-3.0\n" : "%!PS-Adobe-3.0 EPSF-3.0\n";
+	PutStream(header);
 	PutStream("%%For: " + User + "\n");
-	PutStream("%%Title: " + Titel + "\n");
+	PutStream("%%Title: " + Title + "\n");
 	PutStream("%%Creator: " + Creator + "\n");
 	PutStream("%%Pages: " + IToStr(numpage) + "\n");
-	if (width < height || !psExport)
+	if (width < height || (m_outputFormat == OutputEPS))
 	{
 		BBox = "%%BoundingBox: " + IToStr(qRound(x)) + " " + IToStr(qRound(y)) + " " + IToStr(qRound(width)) + " " + IToStr(qRound(height)) + "\n";
 		BBoxH = "%%HiResBoundingBox: " + ToStr(x) + " " + ToStr(y) + " " + ToStr(width) + " " + ToStr(height) + "\n";
@@ -606,26 +546,82 @@
 		PutStream("%%CMYKCustomColor: "+Farben);
 	PutStream("%%LanguageLevel: 3\n");
 	PutStream("%%EndComments\n");
-	if (!psExport)
+	if (m_outputFormat == OutputEPS)
 	{
 		PutStream("%%BeginDefaults\n");
 		PutStream("%%ViewingOrientation: 1 0 0 1\n");
 		PutStream("%%EndDefaults\n");
 	}
-	PutStream(Prolog);
+
+	QString prolog = "%%BeginProlog\n";
+	prolog += "/Scribusdict 100 dict def\n";
+	prolog += "Scribusdict begin\n";
+	prolog += "/sp {showpage} bind def\n";
+	prolog += "/oldsetgray /setgray load def\n";
+	prolog += "/cmyk {setcmykcolor} def\n";
+	prolog += "/m {moveto} bind def\n";
+	prolog += "/l {lineto} bind def\n";
+	prolog += "/li {lineto} bind def\n";
+	prolog += "/cu {curveto} bind def\n";
+	prolog += "/cl {closepath} bind def\n";
+	prolog += "/gs {gsave} bind def\n";
+	prolog += "/gr {grestore} bind def\n";
+	prolog += "/tr {translate} bind def\n";
+	prolog += "/ro {rotate} bind def\n";
+	prolog += "/sh {show} bind def\n";
+	prolog += "/shg {setcmykcolor moveto glyphshow} def\n";
+	prolog += "/shgsp {moveto glyphshow} def\n";
+	prolog += "/sc {scale} bind def\n";
+	prolog += "/se {selectfont} bind def\n";
+	prolog += "/sf {setfont} bind def\n";
+	prolog += "/sw {setlinewidth} bind def\n";
+	prolog += "/f  {findfont} bind def\n";
+	prolog += "/fi {fill} bind def\n";
+	prolog += "/st {stroke} bind def\n";
+	prolog += "/shgf {gs dup scale begin cvx exec fill end gr} bind def\n";
+	prolog += "/shgs {gs dup 1 exch div currentlinewidth mul sw dup scale\n";
+	prolog += "       begin cvx exec st end gr} bind def\n";
+	prolog += "/bEPS {\n";
+	prolog += "    /b4_Inc_state save def\n";
+	prolog += "    /dict_count countdictstack def\n";
+	prolog += "    /op_count count 1 sub def\n";
+	prolog += "    userdict begin\n";
+	prolog += "    /showpage { } def\n";
+	prolog += "    0 setgray 0 setlinecap\n";
+	prolog += "    1 setlinewidth 0 setlinejoin\n";
+	prolog += "    10 setmiterlimit [ ] 0 setdash newpath\n";
+	prolog += "    /languagelevel where\n";
+	prolog += "    {pop languagelevel\n";
+	prolog += "    1 ne\n";
+	prolog += "    {false setstrokeadjust false setoverprint\n";
+	prolog += "    } if } if } bind def\n";
+	prolog += "/eEPS { count op_count sub {pop} repeat\n";
+	prolog += "    countdictstack dict_count sub {end} repeat\n";
+	prolog += "    b4_Inc_state restore } bind def\n";
+	prolog += "    end\n";
+	if ((Options.cropMarks) || (Options.bleedMarks) || (Options.registrationMarks) || (Options.colorMarks))
+		prolog += "/rb { [ /Separation (All)\n/DeviceCMYK { dup 0 mul exch dup 0 mul exch dup 0 mul exch 1 mul }\n] setcolorspace setcolor} bind def\n";
+	prolog += "%%EndProlog\n";
+	PutStream(prolog);
+
 	PutStream("%%BeginSetup\n");
-	if (isPDF)
+	if (Options.includePDFMarks)
 		PutStream("/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse\n");
 	if (!FontDesc.isEmpty())
 		PutStream(FontDesc);
-	if ((!colorDesc.isEmpty()) && (!sep))
+	if ((!colorDesc.isEmpty()) && (!Options.outputSeparations))
 		PutStream(colorDesc);
-//	PutStream("Scribusdict begin\n");
-	PutStream(Fonts);
 	if (GraySc)
-		PutStream(GrayCalc);
-	Optimization optim = optimization;
-	optimization = OptimizeSize;
+	{
+		QString grayCalc =  "/setcmykcolor {exch 0.11 mul add exch 0.59 mul add exch 0.3 mul add\n";
+		grayCalc += "               dup 1 gt {pop 1} if 1 exch sub oldsetgray} bind def\n";
+		grayCalc += "/setrgbcolor {0.11 mul exch 0.59 mul add exch 0.3 mul add\n";
+		grayCalc += "              oldsetgray} bind def\n";
+		PutStream(grayCalc);
+	}
+		
+	Optimization optim = m_optimization;
+	m_optimization = OptimizeSize;
 	QStringList patterns = m_Doc->getPatternDependencyList(m_Doc->getUsedPatterns());
 	for (int c = 0; c < patterns.count(); ++c)
 	{
@@ -633,7 +629,7 @@
 		for (int em = 0; em < pa.items.count(); ++em)
 		{
 			PageItem* item = pa.items.at(em);
-			if ((item->asImageFrame()) && (item->imageIsAvailable) && (!item->Pfile.isEmpty()) && (item->printEnabled()) && (!sep) && (farb))
+			if ((item->asImageFrame()) && (item->imageIsAvailable) && (!item->Pfile.isEmpty()) && (item->printEnabled()) && (!Options.outputSeparations) && (Options.useColor))
 			{
 				if (!PS_ImageData(item, item->Pfile, item->itemName(), item->ImageProfile, item->UseEmbedded))
 					return false;
@@ -662,7 +658,7 @@
 			PutStream("{\n");
 			PS_save();
 			PS_translate(item->gXpos, pa.height - item->gYpos);
-			ProcessItem(m_Doc, m_Doc->Pages->at(0), item, 0, sep, farb, false, true, true);
+			ProcessItem(m_Doc->Pages->at(0), item, 0, false, true, true);
 			PS_restore();
 			PutStream("} exec\n");
 		}
@@ -671,10 +667,9 @@
 		PutStream("} def\n");
 		PutStream("end\n");
 	}
-	optimization = optim;
+	m_optimization = optim;
 //	PutStream("end\n");
 //	PutStream("%%EndSetup\n");
-	Prolog = "";
 	FontDesc = "";
 	return true;
 }
@@ -701,7 +696,7 @@
 	PutStream("} bind def\n");
 }
 
-void PSLib::PS_begin_page(ScPage* pg, MarginStruct* Ma, bool Clipping)
+void PSLib::PS_begin_page(ScPage* pg, MarginStruct* Ma, bool clipping)
 {
 	double bleedRight = 0.0;
 	double bleedLeft = 0.0;
@@ -715,7 +710,7 @@
 	double maxBoxY = pg->height()+Options.bleeds.bottom()+Options.bleeds.top()+markOffs*2.0;
 	PageIndex++;
 	PutStream("%%Page: " + IToStr(PageIndex) + " " + IToStr(PageIndex) + "\n");
-	if (psExport)
+	if (m_outputFormat == OutputPS)
 	{
 		if (pg->orientation() == 0)
 		{
@@ -731,13 +726,13 @@
 		}
 	}
 	PutStream("Scribusdict begin\n");
-	if ((psExport) && (Options.setDevParam))
+	if ((m_outputFormat == OutputPS) && (Options.setDevParam))
   	{
 		PutStream("<< /PageSize [ "+ToStr(maxBoxX)+" "+ToStr(maxBoxY)+" ]\n");
 		PutStream(">> setpagedevice\n");
 	}
 	PutStream("save\n");
-	if (pg->orientation() == 1 && psExport)
+	if ((pg->orientation() == 1) && (m_outputFormat == OutputPS))
 		PutStream("90 rotate 0 "+IToStr(qRound(maxBoxY))+" neg translate\n");
   	PutStream("/DeviceCMYK setcolorspace\n");
 	// Clip to bleeds
@@ -753,13 +748,13 @@
 	PutStream(ToStr(bleedLeft+markOffs)+" "+ToStr(Options.bleeds.bottom()+markOffs)+" tr\n");
 	ActPage = pg;
 	// Clip to margins if requested
-	if (Clipping)
-	{
-		PDev = ToStr(Ma->left()) + " " + ToStr(Ma->bottom()) + " m\n";
-		PDev += ToStr(pg->width() - Ma->right()) + " " + ToStr(Ma->bottom()) + " li\n";
-		PDev += ToStr(pg->width() - Ma->right()) + " " + ToStr(pg->height() - Ma->top()) + " li\n";
-		PDev += ToStr(Ma->left()) + " " + ToStr(pg->height() - Ma->top()) + " li cl clip newpath\n";
-		PutStream(PDev);
+	if (clipping)
+	{
+		QString clipPath = ToStr(Ma->left()) + " " + ToStr(Ma->bottom()) + " m\n";
+		clipPath += ToStr(pg->width() - Ma->right()) + " " + ToStr(Ma->bottom()) + " li\n";
+		clipPath += ToStr(pg->width() - Ma->right()) + " " + ToStr(pg->height() - Ma->top()) + " li\n";
+		clipPath += ToStr(Ma->left()) + " " + ToStr(pg->height() - Ma->top()) + " li cl clip newpath\n";
+		PutStream(clipPath);
 	}
 }
 
@@ -777,7 +772,7 @@
 	double maxBoxX = ActPage->width()+bleedLeft+bleedRight+markOffs*2.0;
 	double maxBoxY = ActPage->height()+Options.bleeds.bottom()+Options.bleeds.top()+markOffs*2.0;
 	PutStream("gs\n");
-	if (ActPage->orientation() == 1 && psExport)
+	if ((ActPage->orientation() == 1) && (m_outputFormat == OutputPS))
 		PutStream("90 rotate 0 "+IToStr(qRound(maxBoxY))+" neg translate\n");
 	if ((Options.cropMarks) || (Options.bleedMarks) || (Options.registrationMarks) || (Options.colorMarks))
 	{
@@ -1073,11 +1068,6 @@
 		}
 }
 
-void PSLib::PS_selectfont(const QString& f, double s)
-{
-	PutStream(UsedFonts[f] + " " + ToStr(s) + " se\n");
-}
-
 void PSLib::PS_fill()
 {
 	if (fillRule)
@@ -1089,14 +1079,14 @@
 void PSLib::PS_fillspot(const QString& color, double shade)
 {
 	if (fillRule)
-		PutStream(ToStr(shade / 100.0)+" "+spotMap[color]+" eofill\n");
+		PutStream(ToStr(shade / 100.0) + " " + spotMap[color] + " eofill\n");
 	else
-		PutStream(ToStr(shade / 100.0)+" "+spotMap[color]+" fill\n");
+		PutStream(ToStr(shade / 100.0) + " " + spotMap[color] + " fill\n");
 }
 
 void PSLib::PS_strokespot(const QString& color, double shade)
 {
-	PutStream(ToStr(shade / 100.0)+" "+spotMap[color]+" st\n");
+	PutStream(ToStr(shade / 100.0) + " " + spotMap[color] + " st\n");
 }
 
 void PSLib::PS_stroke()
@@ -1407,7 +1397,7 @@
 			PutStream("/setrgbcolor {exch pop exch pop oldsetgray} bind def\n");
 			break;
 		default:
-			PutStream("%%PlateColor "+name+"\n");
+			PutStream("%%PlateColor " + name + "\n");
 			PutStream("/setcmykcolor {exch 0.11 mul add exch 0.59 mul add exch 0.3 mul add dup 1 gt {pop 1} if 1 exch sub oldsetgray} bind def\n");
 			PutStream("/setrgbcolor {0.11 mul exch 0.59 mul add exch 0.3 mul add oldsetgray} bind def\n");
 			break;
@@ -1522,7 +1512,7 @@
 	PS_Error( tr("Insufficient memory for processing an image"));
 }
 
-int PSLib::CreatePS(ScribusDoc* Doc, PrintOptions &options)
+int PSLib::createPS(PrintOptions &options)
 {
 	bool errorOccured = false;
 	Options = options;
@@ -1545,20 +1535,20 @@
 	double gy = 0.0;
 	double gw = 0.0;
 	double gh = 0.0;;
-	PS_set_Info("Author", Doc->documentInfo().author());
-	PS_set_Info("Title", Doc->documentInfo().title());
-	if (!farb)
+	PS_set_Info("Author", m_Doc->documentInfo().author());
+	PS_set_Info("Title", m_Doc->documentInfo().title());
+	if (!Options.useColor)
 		PS_setGray();
-	if ((Doc->HasCMS) && (ScCore->haveCMS()))
-		solidTransform = Doc->colorEngine.createTransform(Doc->DocInputCMYKProf, Format_CMYK_16, Doc->DocPrinterProf, Format_CMYK_16, Doc->IntentColors, 0);
+	if ((m_Doc->HasCMS) && (ScCore->haveCMS()))
+		solidTransform = m_Doc->colorEngine.createTransform(m_Doc->DocInputCMYKProf, Format_CMYK_16, m_Doc->DocPrinterProf, Format_CMYK_16, m_Doc->IntentColors, 0);
 	else
 		solidTransform = ScColorTransform();
 	if (ScCore->usingGUI())
 	{
 		QString title = QObject::tr("Exporting PostScript File");
-		if (psExport)
+		if (m_outputFormat == OutputPS)
 			title = QObject::tr("Printing File");
-		progressDialog = new MultiProgressDialog(title, CommonStrings::tr_Cancel, Doc->scMW());
+		progressDialog = new MultiProgressDialog(title, CommonStrings::tr_Cancel, m_Doc->scMW());
 		if (progressDialog)
 		{
 			QStringList barNames, barTexts;
@@ -1567,8 +1557,8 @@
 			QList<bool> barsNumeric;
 			barsNumeric << true << true;
 			progressDialog->addExtraProgressBars(barNames, barTexts, barsNumeric);
-			progressDialog->setOverallTotalSteps(pageNs.size()+Doc->MasterPages.count());
-			progressDialog->setTotalSteps("EMP", Doc->MasterPages.count());
+			progressDialog->setOverallTotalSteps(pageNs.size()+m_Doc->MasterPages.count());
+			progressDialog->setTotalSteps("EMP", m_Doc->MasterPages.count());
 			progressDialog->setTotalSteps("EP", pageNs.size());
 			progressDialog->setOverallProgress(0);
 			progressDialog->setProgress("EMP", 0);
@@ -1578,8 +1568,8 @@
 			ScQApp->processEvents();
 		}
 	}
-	uint docSelectionCount = Doc->m_Selection->count();
-	if ((!psExport) && (docSelectionCount != 0))
+	uint docSelectionCount = m_Doc->m_Selection->count();
+	if ((m_outputFormat == OutputEPS) && (docSelectionCount != 0))
 	{
 		double minx =  std::numeric_limits<double>::max();
 		double miny =  std::numeric_limits<double>::max();
@@ -1587,16 +1577,16 @@
 		double maxy = -std::numeric_limits<double>::max();
 		for (uint ep = 0; ep < docSelectionCount; ++ep)
 		{
-			PageItem* currItem = Doc->m_Selection->itemAt(ep);
+			PageItem* currItem = m_Doc->m_Selection->itemAt(ep);
 			double lw = currItem->lineWidth() / 2.0;
 			if (currItem->rotation() != 0)
 			{
 				FPointArray pb;
 				pb.resize(0);
-				pb.addPoint(FPoint(currItem->xPos()-lw, currItem->yPos()-lw));
-				pb.addPoint(FPoint(currItem->width()+lw*2.0, -lw, currItem->xPos()-lw, currItem->yPos()-lw, currItem->rotation(), 1.0, 1.0));
-				pb.addPoint(FPoint(currItem->width()+lw*2.0, currItem->height()+lw*2.0, currItem->xPos()-lw, currItem->yPos()-lw, currItem->rotation(), 1.0, 1.0));
-				pb.addPoint(FPoint(-lw, currItem->height()+lw*2.0, currItem->xPos()-lw, currItem->yPos()-lw, currItem->rotation(), 1.0, 1.0));
+				pb.addPoint(FPoint(currItem->xPos() - lw, currItem->yPos() - lw));
+				pb.addPoint(FPoint(currItem->width() + lw * 2.0, -lw, currItem->xPos() - lw, currItem->yPos() - lw, currItem->rotation(), 1.0, 1.0));
+				pb.addPoint(FPoint(currItem->width() + lw * 2.0, currItem->height() + lw * 2.0, currItem->xPos() - lw, currItem->yPos() - lw, currItem->rotation(), 1.0, 1.0));
+				pb.addPoint(FPoint(-lw, currItem->height() + lw * 2.0, currItem->xPos() - lw, currItem->yPos() - lw, currItem->rotation(), 1.0, 1.0));
 				for (uint pc = 0; pc < 4; ++pc)
 				{
 					minx = qMin(minx, pb.point(pc).x());
@@ -1607,10 +1597,10 @@
 			}
 			else
 			{
-				minx = qMin(minx, currItem->xPos()-lw);
-				miny = qMin(miny, currItem->yPos()-lw);
-				maxx = qMax(maxx, currItem->xPos()-lw + currItem->width()+lw*2.0);
-				maxy = qMax(maxy, currItem->yPos()-lw + currItem->height()+lw*2.0);
+				minx = qMin(minx, currItem->xPos() - lw);
+				miny = qMin(miny, currItem->yPos() - lw);
+				maxx = qMax(maxx, currItem->xPos() - lw + currItem->width() + lw * 2.0);
+				maxy = qMax(maxy, currItem->yPos() - lw + currItem->height()+ lw * 2.0);
 			}
 		}
 		gx = minx;
@@ -1618,9 +1608,9 @@
 		gw = maxx - minx;
 		gh = maxy - miny;
 		int pgNum = pageNs[0] - 1;
-		gx -= Doc->Pages->at(pgNum)->xOffset();
-		gy -= Doc->Pages->at(pgNum)->yOffset();
-		errorOccured = !PS_begin_doc(Doc, gx, Doc->pageHeight() - (gy+gh), gx + gw, Doc->pageHeight() - gy, 1*pagemult, sep, farb);
+		gx -= m_Doc->Pages->at(pgNum)->xOffset();
+		gy -= m_Doc->Pages->at(pgNum)->yOffset();
+		errorOccured = !PS_begin_doc(gx, m_Doc->pageHeight() - (gy + gh), gx + gw, m_Doc->pageHeight() - gy, 1 * pagemult);
 	}
 	else
 	{
@@ -1629,13 +1619,13 @@
 		for (size_t i = 0; i < pageNs.size(); ++i)
 		{
 			int pgNum = pageNs[i] - 1;
-			maxWidth = qMax(Doc->Pages->at(pgNum)->width(), maxWidth);
-			maxHeight = qMax(Doc->Pages->at(pgNum)->height(), maxHeight);
-		}
-		errorOccured = !PS_begin_doc(Doc, 0.0, 0.0, maxWidth, maxHeight, pageNs.size()*pagemult, sep, farb);
+			maxWidth = qMax(m_Doc->Pages->at(pgNum)->width(), maxWidth);
+			maxHeight = qMax(m_Doc->Pages->at(pgNum)->height(), maxHeight);
+		}
+		errorOccured = !PS_begin_doc(0.0, 0.0, maxWidth, maxHeight, pageNs.size() * pagemult);
 	}
 	int ap=0;
-	for (; ap < Doc->MasterPages.count() && !abortExport && !errorOccured; ++ap)
+	for (; ap < m_Doc->MasterPages.count() && !abortExport && !errorOccured; ++ap)
 	{
 		if (progressDialog)
 		{
@@ -1643,30 +1633,30 @@
 			progressDialog->setProgress("EMP", ap);
 			ScQApp->processEvents();
 		}
-		if (Doc->MasterItems.count() != 0)
+		if (m_Doc->MasterItems.count() != 0)
 		{
 			int Lnr = 0;
 			ScLayer ll;
 			ll.isPrintable = false;
 			ll.ID = 0;
-			for (int lam = 0; lam < Doc->Layers.count() && !abortExport && !errorOccured; ++lam)
-			{
-				Doc->Layers.levelToLayer(ll, Lnr);
+			for (int lam = 0; lam < m_Doc->Layers.count() && !abortExport && !errorOccured; ++lam)
+			{
+				m_Doc->Layers.levelToLayer(ll, Lnr);
 				if (ll.isPrintable)
 				{
-					for (int api = 0; api < Doc->MasterItems.count() && !abortExport; ++api)
+					for (int api = 0; api < m_Doc->MasterItems.count() && !abortExport; ++api)
 					{
-						PageItem *it = Doc->MasterItems.at(api);
+						PageItem *it = m_Doc->MasterItems.at(api);
 						if (progressDialog)
 							ScQApp->processEvents();
 						if ((it->m_layerID != ll.ID) || (!it->printEnabled()))
 							continue;
 						double bLeft, bRight, bBottom, bTop;
-						GetBleeds(Doc->MasterPages.at(ap), bLeft, bRight, bBottom, bTop);
-						double x1 = Doc->MasterPages.at(ap)->xOffset() - bLeft;
-						double y1 = Doc->MasterPages.at(ap)->yOffset() - bTop;
-						double w1 = Doc->MasterPages.at(ap)->width() + bLeft + bRight;
-						double h1 = Doc->MasterPages.at(ap)->height()+ bBottom + bTop;
+						GetBleeds(m_Doc->MasterPages.at(ap), bLeft, bRight, bBottom, bTop);
+						double x1 = m_Doc->MasterPages.at(ap)->xOffset() - bLeft;
+						double y1 = m_Doc->MasterPages.at(ap)->yOffset() - bTop;
+						double w1 = m_Doc->MasterPages.at(ap)->width() + bLeft + bRight;
+						double h1 = m_Doc->MasterPages.at(ap)->height()+ bBottom + bTop;
 						double lw = it->visualLineWidth();
 						double x2 = it->BoundingX - lw / 2.0;
 						double y2 = it->BoundingY - lw / 2.0;
@@ -1674,15 +1664,15 @@
 						double h2 = qMax(it->BoundingH + lw, 1.0);
 						if (!QRectF(x2, y2, w2, h2).intersects(QRectF(x1, y1, w1, h1)))
 							continue;
-						if ((it->OwnPage != static_cast<int>(Doc->MasterPages.at(ap)->pageNr())) && (it->OwnPage != -1))
+						if ((it->OwnPage != static_cast<int>(m_Doc->MasterPages.at(ap)->pageNr())) && (it->OwnPage != -1))
 							continue;
-						if ((optimization == OptimizeSize) && it->asImageFrame() && it->imageIsAvailable && (!it->Pfile.isEmpty()) && it->printEnabled() && (!sep) && farb)
+						if ((m_optimization == OptimizeSize) && it->asImageFrame() && it->imageIsAvailable && (!it->Pfile.isEmpty()) && it->printEnabled() && (!sep) && farb)
 						{
 							errorOccured = !PS_ImageData(it, it->Pfile, it->itemName(), it->ImageProfile, it->UseEmbedded);
 							if (errorOccured) break;
 						}
 						PS_TemplateStart(QString("mp_obj_%1_%2").arg(ap).arg(qHash(it)));
-						ProcessItem(Doc, Doc->MasterPages.at(ap), it, ap+1, sep, farb, true);
+						ProcessItem(m_Doc->MasterPages.at(ap), it, ap+1, true);
 						PS_TemplateEnd();
 					}
 				}
@@ -1691,11 +1681,12 @@
 			}
 		}
 		if (errorOccured) break;
-	}
+	}	
+	PutStream("%%EndSetup\n");
+	
 	sepac = 0;
 	uint aa = 0;
-	uint a;	
-	PutStream("%%EndSetup\n");
+	uint a;
 	while (aa < pageNs.size() && !abortExport && !errorOccured)
 	{
 		if (progressDialog)
@@ -1705,8 +1696,8 @@
 			ScQApp->processEvents();
 		}
 		a = pageNs[aa]-1;
-		ScPage* page = Doc->Pages->at(a);
-		if ((!psExport) && (Doc->m_Selection->count() != 0))
+		ScPage* page = m_Doc->Pages->at(a);
+		if ((m_outputFormat == OutputEPS) && (m_Doc->m_Selection->count() != 0))
 		{
 			MarginStruct Ma;
 			Ma.setLeft(gx);
@@ -1744,18 +1735,18 @@
 		}
 		ScLayer ll;
 		ll.isPrintable = false;
-		for (int lam = 0; lam < Doc->Layers.count() && !abortExport && !errorOccured; ++lam)
-		{
-			Doc->Layers.levelToLayer(ll, lam);
+		for (int lam = 0; lam < m_Doc->Layers.count() && !abortExport && !errorOccured; ++lam)
+		{
+			m_Doc->Layers.levelToLayer(ll, lam);
 			if (!ll.isPrintable)
 				continue;
 			if (!page->masterPageNameEmpty() && !abortExport && !errorOccured)
 			{
-				errorOccured |= !ProcessMasterPageLayer(Doc, page, ll, a, sep, farb);
+				errorOccured |= !ProcessMasterPageLayer(page, ll, a);
 			}
 			if (!abortExport && !errorOccured)
 			{
-				errorOccured |= !ProcessPageLayer(Doc, page, ll, a+1, sep, farb);
+				errorOccured |= !ProcessPageLayer(page, ll, a + 1);
 			}
 		}
 		if (!abortExport && !errorOccured)
@@ -1788,7 +1779,7 @@
 	return 0; 
 }
 
-bool PSLib::ProcessItem(ScribusDoc* Doc, ScPage* page, PageItem* item, uint PNr, bool sep, bool farb, bool master, bool embedded, bool useTemplate)
+bool PSLib::ProcessItem(ScPage* page, PageItem* item, uint PNr, bool master, bool embedded, bool useTemplate)
 {
 	double h, s, v, k;
 	QVector<double> dum;
@@ -1858,7 +1849,7 @@
 		{
 			bool imageOk = false;
 			PS_translate(0, -item->BBoxH*item->imageYScale());
-			if ((optimization == OptimizeSize) && (((!page->pageNameEmpty()) && !sep && farb) || useTemplate))
+			if ((m_optimization == OptimizeSize) && (((!page->pageNameEmpty()) && !Options.outputSeparations && Options.useColor) || useTemplate))
 				imageOk = PS_image(item, item->imageXOffset(), -item->imageYOffset(), item->Pfile, item->imageXScale(), item->imageYScale(), item->ImageProfile, item->UseEmbedded, item->itemName());
 			else
 				imageOk = PS_image(item, item->imageXOffset(), -item->imageYOffset(), item->Pfile, item->imageXScale(), item->imageYScale(), item->ImageProfile, item->UseEmbedded);
@@ -1869,11 +1860,11 @@
 		{
 			if (item->NamedLStyle.isEmpty()) // && (item->lineWidth() != 0.0))
 			{
-				ScPattern* strokePattern = Doc->checkedPattern(item->strokePattern());
+				ScPattern* strokePattern = m_Doc->checkedPattern(item->strokePattern());
 				if ((strokePattern) && (item->patternStrokePath))
 				{
 					QPainterPath path = item->PoLine.toQPainterPath(false);
-					HandleBrushPattern(item, path, page, PNr, sep, farb, master);
+					HandleBrushPattern(item, path, page, PNr, master);
 				}
 				else
 				{
@@ -1896,7 +1887,7 @@
 			}
 			else
 			{
-				multiLine ml = Doc->MLineStyles[item->NamedLStyle];
+				multiLine ml = m_Doc->MLineStyles[item->NamedLStyle];
 				for (int it = ml.size()-1; it > -1; it--)
 				{
 					if (ml[it].Color != CommonStrings::None) // && (ml[it].Width != 0))
@@ -1917,7 +1908,7 @@
 	case PageItem::TextFrame:
 		if (master)
 			break;
-		if ((item->isBookmark || item->isAnnotation()) && (!isPDF))
+		if ((item->isBookmark || item->isAnnotation()) && (!Options.includePDFMarks))
 			break;
 		if (item->isBookmark)
 		{
@@ -1967,7 +1958,7 @@
 			PS_scale(1, -1);
 		}
 		if (item->itemText.length() != 0)
-			setTextSt(Doc, item, PNr-1, page, sep, farb, master);
+			setTextSt(item, PNr-1, page, master);
 		if (((item->lineColor() != CommonStrings::None) || (!item->NamedLStyle.isEmpty()) || (!item->strokePattern().isEmpty()) || (item->GrTypeStroke > 0)))
 		{
 			PS_setlinewidth(item->lineWidth());
@@ -1975,11 +1966,11 @@
 			PS_setdash(item->PLineArt, item->DashOffset, item->DashValues);
 			if (item->NamedLStyle.isEmpty()) // && (item->lineWidth() != 0.0))
 			{
-				ScPattern* strokePattern = Doc->checkedPattern(item->strokePattern());
+				ScPattern* strokePattern = m_Doc->checkedPattern(item->strokePattern());
 				if ((strokePattern) && (item->patternStrokePath))
 				{
 					QPainterPath path = item->PoLine.toQPainterPath(false);
-					HandleBrushPattern(item, path, page, PNr, sep, farb, master);
+					HandleBrushPattern(item, path, page, PNr, master);
 				}
 				else
 				{
@@ -1999,7 +1990,7 @@
 			}
 			else
 			{
-				multiLine ml = Doc->MLineStyles[item->NamedLStyle];
+				multiLine ml = m_Doc->MLineStyles[item->NamedLStyle];
 				for (int it = ml.size()-1; it > -1; it--)
 				{
 					if (ml[it].Color != CommonStrings::None) //&& (ml[it].Width != 0))
@@ -2020,7 +2011,7 @@
 	case PageItem::Line:
 		if (item->NamedLStyle.isEmpty()) // && (item->lineWidth() != 0.0))
 		{
-			ScPattern* strokePattern = Doc->checkedPattern(item->strokePattern());
+			ScPattern* strokePattern = m_Doc->checkedPattern(item->strokePattern());
 			if (strokePattern)
 			{
 				if (item->patternStrokePath)
@@ -2028,7 +2019,7 @@
 					QPainterPath guidePath;
 					guidePath.moveTo(0, 0);
 					guidePath.lineTo(item->width(), 0);
-					HandleBrushPattern(item, guidePath, page, PNr, sep, farb, master);
+					HandleBrushPattern(item, guidePath, page, PNr, master);
 				}
 				else
 				{
@@ -2052,7 +2043,7 @@
 		}
 		else
 		{
-			multiLine ml = Doc->MLineStyles[item->NamedLStyle];
+			multiLine ml = m_Doc->MLineStyles[item->NamedLStyle];
 			for (int it = ml.size()-1; it > -1; it--)
 			{
 				if (ml[it].Color != CommonStrings::None) //&& (ml[it].Width != 0))
@@ -2108,11 +2099,11 @@
 		{
 			if (item->NamedLStyle.isEmpty()) //&& (item->lineWidth() != 0.0))
 			{
-				ScPattern* strokePattern = Doc->checkedPattern(item->strokePattern());
+				ScPattern* strokePattern = m_Doc->checkedPattern(item->strokePattern());
 				if (strokePattern && (item->patternStrokePath))
 				{
 					QPainterPath path = item->PoLine.toQPainterPath(false);
-					HandleBrushPattern(item, path, page, PNr, sep, farb, master);
+					HandleBrushPattern(item, path, page, PNr, master);
 				}
 				else
 				{
@@ -2128,7 +2119,7 @@
 			}
 			else
 			{
-				multiLine ml = Doc->MLineStyles[item->NamedLStyle];
+				multiLine ml = m_Doc->MLineStyles[item->NamedLStyle];
 				for (int it = ml.size()-1; it > -1; it--)
 				{
 					if (ml[it].Color != CommonStrings::None) //&& (ml[it].Width != 0))
@@ -2165,11 +2156,11 @@
 		{
 			if (item->NamedLStyle.isEmpty()) //&& (item->lineWidth() != 0.0))
 			{
-				ScPattern* strokePattern = Doc->checkedPattern(item->strokePattern());
+				ScPattern* strokePattern = m_Doc->checkedPattern(item->strokePattern());
 				if (strokePattern && (item->patternStrokePath))
 				{
 					QPainterPath path = item->PoLine.toQPainterPath(false);
-					HandleBrushPattern(item, path, page, PNr, sep, farb, master);
+					HandleBrushPattern(item, path, page, PNr, master);
 				}
 				else
 				{
@@ -2184,7 +2175,7 @@
 			}
 			else
 			{
-				multiLine ml = Doc->MLineStyles[item->NamedLStyle];
+				multiLine ml = m_Doc->MLineStyles[item->NamedLStyle];
 				for (int it = ml.size()-1; it > -1; it--)
 				{
 					if (ml[it].Color != CommonStrings::None) //&& (ml[it].Width != 0))
@@ -2247,11 +2238,11 @@
 				PS_save();
 				if (item->NamedLStyle.isEmpty()) //&& (item->lineWidth() != 0.0))
 				{
-					ScPattern* strokePattern = Doc->checkedPattern(item->strokePattern());
+					ScPattern* strokePattern = m_Doc->checkedPattern(item->strokePattern());
 					if (strokePattern && (item->patternStrokePath))
 					{
 						QPainterPath path = item->PoLine.toQPainterPath(false);
-						HandleBrushPattern(item, path, page, PNr, sep, farb, master);
+						HandleBrushPattern(item, path, page, PNr, master);
 					}
 					else
 					{
@@ -2266,7 +2257,7 @@
 				}
 				else
 				{
-					multiLine ml = Doc->MLineStyles[item->NamedLStyle];
+					multiLine ml = m_Doc->MLineStyles[item->NamedLStyle];
 					for (int it = ml.size()-1; it > -1; it--)
 					{
 						if (ml[it].Color != CommonStrings::None) //&& (ml[it].Width != 0))
@@ -2285,7 +2276,7 @@
 			}
 		}
 		if (item->itemText.length() != 0)
-			setTextSt(Doc, item, PNr-1, page, sep, farb, master);
+			setTextSt(item, PNr-1, page, master);
 		break;
 	case PageItem::Symbol:
 		if (m_Doc->docPatterns.contains(item->pattern()))
@@ -2311,7 +2302,7 @@
 				PageItem* embed = pat.items.at(em);
 				PS_save();
 				PS_translate(embed->gXpos, item->height() - embed->gYpos);
-				ProcessItem(m_Doc, page, embed, PNr, sep, farb, master, true);
+				ProcessItem(page, embed, PNr, master, true);
 				PS_restore();
 			}
 			PS_restore();
@@ -2338,7 +2329,7 @@
 			PageItem* embed = item->groupItemList.at(em);
 			PS_save();
 			PS_translate(embed->gXpos, item->height() - embed->gYpos);
-			ProcessItem(m_Doc, page, embed, PNr, sep, farb, master, true);
+			ProcessItem(page, embed, PNr, master, true);
 			PS_restore();
 		}
 		PS_restore();
@@ -2536,7 +2527,7 @@
 					PageItem* textFrame = cell.textFrame();
 					PS_save();
 					PS_translate(cell.contentRect().x(), -cell.contentRect().y());
-					ProcessItem(m_Doc, page, textFrame, PNr, sep, farb, master, true);
+					ProcessItem(page, textFrame, PNr, master, true);
 					PS_restore();
 				}
 			}
@@ -2579,7 +2570,7 @@
 	PS_restore();
 }
 
-void PSLib::ProcessPage(ScribusDoc* Doc, ScPage* page, uint PNr, bool sep, bool farb)
+void PSLib::ProcessPage(ScPage* page, uint PNr)
 {
 	PageItem *item;
 	QList<PageItem*> PItems;
@@ -2587,10 +2578,10 @@
 	ScLayer ll;
 	ll.isPrintable = false;
 	ll.ID = 0;
-	PItems = (page->pageNameEmpty()) ? Doc->DocItems : Doc->MasterItems;
-	for (int la = 0; la < Doc->Layers.count(); ++la)
-	{
-		Doc->Layers.levelToLayer(ll, Lnr);
+	PItems = (page->pageNameEmpty()) ? m_Doc->DocItems : m_Doc->MasterItems;
+	for (int la = 0; la < m_Doc->Layers.count(); ++la)
+	{
+		m_Doc->Layers.levelToLayer(ll, Lnr);
 		if (ll.isPrintable && !abortExport)
 		{
 			for (int b = 0; b < PItems.count() && !abortExport; ++b)
@@ -2606,10 +2597,10 @@
 					continue;
 				if ((!page->pageNameEmpty()) && (item->asTable()))
 					continue;
-				if ((!page->pageNameEmpty()) && (item->asImageFrame()) && ((sep) || (!farb)))
+				if ((!page->pageNameEmpty()) && (item->asImageFrame()) && ((Options.outputSeparations) || (!Options.useColor)))
 					continue;
 				//if ((!Art) && (view->SelItem.count() != 0) && (!item->Select))
-				if ((!psExport) && (!item->isSelected()) && (Doc->m_Selection->count() != 0))
+				if ((m_outputFormat == OutputEPS) && (!item->isSelected()) && (m_Doc->m_Selection->count() != 0))
 					continue;
 				double bLeft, bRight, bBottom, bTop;
 				GetBleeds(page, bLeft, bRight, bBottom, bTop);
@@ -2628,19 +2619,19 @@
 					continue;
 				if ((!page->pageNameEmpty()) && (item->OwnPage != static_cast<int>(page->pageNr())) && (item->OwnPage != -1))
 					continue;
-				ProcessItem(Doc, page, item, PNr, sep, farb, false);
+				ProcessItem(page, item, PNr, false);
 			}
 		}
 		Lnr++;
 	}
 }
 
-bool PSLib::ProcessMasterPageLayer(ScribusDoc* Doc, ScPage* page, ScLayer& layer, uint PNr, bool sep, bool farb)
+bool PSLib::ProcessMasterPageLayer(ScPage* page, ScLayer& layer, uint PNr)
 {
 	bool success = true;
 	double h, s, v, k;
 	QVector<double> dum;
-	ScPage* mPage = Doc->MasterPages.at(Doc->MasterNames[page->masterPageName()]);
+	ScPage* mPage = m_Doc->MasterPages.at(m_Doc->MasterNames[page->masterPageName()]);
 	if (layer.isPrintable)
 	{
 		for (int am = 0; am < page->FromMaster.count() && !abortExport; ++am)
@@ -2652,14 +2643,14 @@
 				continue;
 			if (!(ite->asTextFrame()) && !(ite->asImageFrame()) && !(ite->asPathText()) && !(ite->asTable()))
 			{
-				int mpIndex = Doc->MasterNames[page->masterPageName()];
+				int mpIndex = m_Doc->MasterNames[page->masterPageName()];
 				PS_UseTemplate(QString("mp_obj_%1_%2").arg(mpIndex).arg(qHash(ite)));
 			}
 			else if (ite->asImageFrame())
 			{
 				PS_save();
 				// JG : replace what seems mostly duplicate code by corresponding function call (#3936)
-				success &= ProcessItem(Doc, mPage, ite, PNr, sep, farb, false, false, true);
+				success &= ProcessItem(mPage, ite, PNr, false, false, true);
 				PS_restore();
 			}
 			else if (ite->asTable())
@@ -2855,7 +2846,7 @@
 							PageItem* textFrame = cell.textFrame();
 							PS_save();
 							PS_translate(cell.contentRect().x(), -cell.contentRect().y());
-							ProcessItem(Doc, mPage, textFrame, PNr, sep, farb, false, false, true);
+							ProcessItem(mPage, textFrame, PNr, false, false, true);
 							PS_restore();
 						}
 					}
@@ -2900,16 +2891,16 @@
 					PS_scale(1, -1);
 				}
 				if (ite->itemText.length() != 0)
-					setTextSt(Doc, ite, PNr, mPage, sep, farb, true);
+					setTextSt(ite, PNr, mPage, true);
 				if (((ite->lineColor() != CommonStrings::None) || (!ite->NamedLStyle.isEmpty()) || (!ite->strokePattern().isEmpty()) || (ite->GrTypeStroke > 0)))
 				{
 					if (ite->NamedLStyle.isEmpty()) // && (ite->lineWidth() != 0.0))
 					{
-						ScPattern* strokePattern = Doc->checkedPattern(ite->strokePattern());
+						ScPattern* strokePattern = m_Doc->checkedPattern(ite->strokePattern());
 						if (strokePattern && (ite->patternStrokePath))
 						{
 							QPainterPath path = ite->PoLine.toQPainterPath(false);
-							HandleBrushPattern(ite, path, page, PNr, sep, farb, true);
+							HandleBrushPattern(ite, path, page, PNr, true);
 						}
 						else
 						{
@@ -2932,7 +2923,7 @@
 					}
 					else
 					{
-						multiLine ml = Doc->MLineStyles[ite->NamedLStyle];
+						multiLine ml = m_Doc->MLineStyles[ite->NamedLStyle];
 						for (int it = ml.size()-1; it > -1; it--)
 						{
 							if (ml[it].Color != CommonStrings::None) //&& (ml[it].Width != 0))
@@ -2962,11 +2953,11 @@
 						PS_save();
 						if (ite->NamedLStyle.isEmpty()) //&& (item->lineWidth() != 0.0))
 						{
-							ScPattern* strokePattern = Doc->checkedPattern(ite->strokePattern());
+							ScPattern* strokePattern = m_Doc->checkedPattern(ite->strokePattern());
 							if (strokePattern && (ite->patternStrokePath))
 							{
 								QPainterPath path = ite->PoLine.toQPainterPath(false);
-								HandleBrushPattern(ite, path, mPage, PNr, sep, farb, true);
+								HandleBrushPattern(ite, path, mPage, PNr, true);
 							}
 							else
 							{
@@ -2981,7 +2972,7 @@
 						}
 						else
 						{
-							multiLine ml = Doc->MLineStyles[ite->NamedLStyle];
+							multiLine ml = m_Doc->MLineStyles[ite->NamedLStyle];
 							for (int it = ml.size()-1; it > -1; it--)
 							{
 								if (ml[it].Color != CommonStrings::None) //&& (ml[it].Width != 0))
@@ -3000,7 +2991,7 @@
 					}
 				}
 				if (ite->itemText.length() != 0)
-					setTextSt(Doc, ite, PNr, mPage, sep, farb, true);
+					setTextSt(ite, PNr, mPage, true);
 				PS_restore();
 			}
 			if (!success)
@@ -3010,14 +3001,14 @@
 	return success;
 }
 
-bool PSLib::ProcessPageLayer(ScribusDoc* Doc, ScPage* page, ScLayer& layer, uint PNr, bool sep, bool farb)
+bool PSLib::ProcessPageLayer(ScPage* page, ScLayer& layer, uint PNr)
 {
 	bool success = true;
 	if (!layer.isPrintable || abortExport)
 		return true;
 
 	QList<PageItem*> items;
-	items = (page->pageNameEmpty()) ? Doc->DocItems : Doc->MasterItems;
+	items = (page->pageNameEmpty()) ? m_Doc->DocItems : m_Doc->MasterItems;
 
 	for (int i = 0; i < items.count() && !abortExport; ++i)
 	{
@@ -3032,10 +3023,10 @@
 			continue;
 		if ((!page->pageNameEmpty()) && (item->asTable()))
 			continue;
-		if ((!page->pageNameEmpty()) && (item->asImageFrame()) && ((sep) || (!farb)))
+		if ((!page->pageNameEmpty()) && (item->asImageFrame()) && ((Options.outputSeparations) || (!Options.useColor)))
 			continue;
 		//if ((!Art) && (view->SelItem.count() != 0) && (!item->Select))
-		if ((!psExport) && (!item->isSelected()) && (Doc->m_Selection->count() != 0))
+		if ((m_outputFormat == OutputEPS) && (!item->isSelected()) && (m_Doc->m_Selection->count() != 0))
 			continue;
 		double bLeft, bRight, bBottom, bTop;
 		GetBleeds(page, bLeft, bRight, bBottom, bTop);
@@ -3054,7 +3045,7 @@
 			continue;
 		if ((!page->pageNameEmpty()) && (item->OwnPage != static_cast<int>(page->pageNr())) && (item->OwnPage != -1))
 			continue;
-		success &= ProcessItem(Doc, page, item, PNr, sep, farb, false);
+		success &= ProcessItem(page, item, PNr, false);
 		if (!success)
 			break;
 	}
@@ -3062,7 +3053,7 @@
 }
 
 
-void PSLib::HandleBrushPattern(PageItem *item, QPainterPath &path, ScPage* a, uint PNr, bool sep, bool farb, bool master)
+void PSLib::HandleBrushPattern(PageItem *item, QPainterPath &path, ScPage* page, uint PNr, bool master)
 {
 	ScPattern pat = m_Doc->docPatterns[item->strokePattern()];
 	double pLen = path.length() - ((pat.width / 2.0) * (item->patternStrokeScaleX / 100.0));
@@ -3102,7 +3093,7 @@
 			PageItem* embedded = pat.items.at(em);
 			PS_save();
 			PS_translate(embedded->gXpos, embedded->gHeight - embedded->gYpos);
-			ProcessItem(m_Doc, a, embedded, PNr, sep, farb, master, true);
+			ProcessItem(page, embedded, PNr, master, true);
 			PS_restore();
 		}
 		xpos += adv;
@@ -3173,7 +3164,7 @@
 	for (int ac = 0; ac < cols.count(); ac++)
 	{
 		QString colorVal = "";
-		if ((useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)) && (!GraySc))
+		if ((Options.useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)) && (!GraySc))
 		{
 			if (spotColorSet.contains(cols.at(ac)))
 			{
@@ -3225,7 +3216,7 @@
 		{
 			PutStream("/ColorSpace /DeviceGray\n");
 		}
-		else if ((useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)))
+		else if ((Options.useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)))
 		{
 			PutStream("/ColorSpace [ /DeviceN [/Cyan /Magenta /Yellow /Black");
 			for (int sc = 0; sc < spotColorSet.count(); sc++)
@@ -3354,7 +3345,7 @@
 	for (int ac = 0; ac < cols.count(); ac++)
 	{
 		QString colorVal = "";
-		if ((useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)) && (!GraySc))
+		if ((Options.useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)) && (!GraySc))
 		{
 			if (spotColorSet.contains(cols.at(ac)))
 			{
@@ -3406,7 +3397,7 @@
 		{
 			PutStream("/ColorSpace /DeviceGray\n");
 		}
-		else if ((useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)))
+		else if ((Options.useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)))
 		{
 			PutStream("/ColorSpace [ /DeviceN [/Cyan /Magenta /Yellow /Black");
 			for (int sc = 0; sc < spotColorSet.count(); sc++)
@@ -3531,7 +3522,7 @@
 	for (int ac = 0; ac < cols.count(); ac++)
 	{
 		QString colorVal = "";
-		if ((useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)) && (!GraySc))
+		if ((Options.useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)) && (!GraySc))
 		{
 			if (spotColorSet.contains(cols.at(ac)))
 			{
@@ -3578,7 +3569,7 @@
 	PutStream("/ShadingType 6\n");
 	if ((DoSep) || (GraySc))
 		PutStream("/ColorSpace /DeviceGray\n");
-	else if ((useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)))
+	else if ((Options.useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)))
 	{
 		PutStream("/ColorSpace [ /DeviceN [/Cyan /Magenta /Yellow /Black");
 		for (int sc = 0; sc < spotColorSet.count(); sc++)
@@ -3726,7 +3717,7 @@
 	PutStream("/ShadingType 7\n");
 	if ((DoSep) || (GraySc))
 		PutStream("/ColorSpace /DeviceGray\n");
-	else if ((useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)))
+	else if ((Options.useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)))
 	{
 		PutStream("/ColorSpace [ /DeviceN [/Cyan /Magenta /Yellow /Black");
 		for (int sc = 0; sc < spotColorSet.count(); sc++)
@@ -3769,7 +3760,7 @@
 	PutStream(ToStr(item->GrControl2.x())+" "+ToStr(-item->GrControl2.y())+"\n");
 	for (int ac = 0; ac < cols.count(); ac++)
 	{
-		if ((useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)) && (!GraySc))
+		if ((Options.useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)) && (!GraySc))
 		{
 			if (spotColorSet.contains(cols.at(ac)))
 			{
@@ -3944,7 +3935,7 @@
 		PutStream("/ShadingType 3\n");
 	if ((DoSep) || (GraySc))
 		PutStream("/ColorSpace /DeviceGray\n");
-	else if ((useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)))
+	else if ((Options.useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)))
 	{
 		PutStream("/ColorSpace [ /DeviceN [/Cyan /Magenta /Yellow /Black");
 		for (int sc = 0; sc < spotColorSet.count(); sc++)
@@ -4013,7 +4004,7 @@
 		PutStream("<<\n");
 		PutStream("/FunctionType 2\n");
 		PutStream("/Domain [0 1]\n");
-		if ((useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)) && (!GraySc))
+		if ((Options.useSpotColors) && ((spotColorSet.count() > 0) && (spotColorSet.count() < 28)) && (!GraySc))
 		{
 			if (spotColorSet.contains(colorNames.at(cc)))
 			{
@@ -4326,9 +4317,9 @@
 	}
 }
 
-void PSLib::SetColor(const QString& farb, double shade, double *h, double *s, double *v, double *k)
-{
-	if (farb == CommonStrings::None)
+void PSLib::SetColor(const QString& color, double shade, double *h, double *s, double *v, double *k)
+{
+	if (color == CommonStrings::None)
 	{
 		*h = 0;
 		*s = 0;
@@ -4336,17 +4327,17 @@
 		*k = 0;
 		return;
 	}
-	ScColor& col = m_Doc->PageColors[farb];
+	ScColor& col = m_Doc->PageColors[color];
 	SetColor(col, shade, h, s, v, k);
 }
 
-void PSLib::SetColor(const ScColor& farb, double shade, double *c, double *m, double *y, double *k)
+void PSLib::SetColor(const ScColor& color, double shade, double *c, double *m, double *y, double *k)
 {
 	double c1 = *c, m1 = *m, y1 = *y, k1 = *k;
-	ScColor tmp(farb);
-	if (farb.getColorModel() != colorModelCMYK)
-		tmp = ScColorEngine::convertToModel(farb, m_Doc, colorModelCMYK);
-	if ((Options.doGCR) && (!farb.isRegistrationColor()))
+	ScColor tmp(color);
+	if (color.getColorModel() != colorModelCMYK)
+		tmp = ScColorEngine::convertToModel(color, m_Doc, colorModelCMYK);
+	if ((Options.doGCR) && (!color.isRegistrationColor()))
 		ScColorEngine::applyGCR(tmp, m_Doc);
 	tmp.getCMYK(&c1, &m1, &y1, &k1);
 	if ((m_Doc->HasCMS) && (ScCore->haveCMS()) && (solidTransform))
@@ -4378,23 +4369,19 @@
 
 /**
  * @brief PSLib::setTextSt
- * @param Doc   our dicument
- * @param ite   the Textitem to set
+ * @param ite   the text item to set
  * @param argh  current page number
  * @param pg    current page
- * @param sep   separate colors option
- * @param farb  useColors option (== !grayscale)
- * @param ic    use ICC profile option
  * @param master true if setting master page item
  */
-void PSLib::setTextSt(ScribusDoc* Doc, PageItem* ite, uint argh, ScPage* pg, bool sep, bool farb, bool master)
+void PSLib::setTextSt(PageItem* ite, uint argh, ScPage* pg, bool master)
 {
 	int savedOwnPage = ite->OwnPage;
 	ite->OwnPage = argh;
 	ite->layout();
 	ite->OwnPage = savedOwnPage;
 
-	PSPainter p(Doc, argh, pg, sep, farb, master, this);
+	PSPainter p(m_Doc, argh, pg, master, this);
 	ite->textLayout.renderBackground(&p);
 	ite->textLayout.render(&p);
 }
@@ -4404,7 +4391,7 @@
 	ScColor& color(colorsToUse[colorName]);
 	if (fill)
 	{
-		if (((color.isSpotColor()) || (color.isRegistrationColor())) && (useSpotColors))
+		if (((color.isSpotColor()) || (color.isRegistrationColor())) && (Options.useSpotColors))
 		{
 			if (!DoSep)
 				PS_fillspot(colorName, shade);
@@ -4438,7 +4425,7 @@
 	}
 	else
 	{
-		if (((color.isSpotColor()) || (color.isRegistrationColor())) && (useSpotColors))
+		if (((color.isSpotColor()) || (color.isRegistrationColor())) && (Options.useSpotColors))
 		{
 			if (!DoSep)
 				PS_strokespot(colorName, shade);
@@ -4461,7 +4448,7 @@
 void PSLib::putColorNoDraw(const QString& colorName, double shade)
 {
 	ScColor& color(colorsToUse[colorName]);
-	if (((color.isSpotColor()) || (color.isRegistrationColor())) && (useSpotColors))
+	if (((color.isSpotColor()) || (color.isRegistrationColor())) && (Options.useSpotColors))
 	{
 		if (!DoSep)
 			PutStream(ToStr(shade / 100.0)+" "+spotMap[colorName] + "\n");

Modified: trunk/Scribus/scribus/pslib.h
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23557&path=/trunk/Scribus/scribus/pslib.h
==============================================================================
--- trunk/Scribus/scribus/pslib.h	(original)
+++ trunk/Scribus/scribus/pslib.h	Mon Apr  6 20:50:38 2020
@@ -60,30 +60,39 @@
 
 	public:
 
-		typedef enum
+		enum Optimization
 		{
 			OptimizeCompat = 0,
 			OptimizeSize = 1
-		} Optimization;
-
-		PSLib(PrintOptions &options, bool psart, SCFonts &AllFonts, QMap<QString, QMap<uint, FPointArray> > DocFonts, ColorList DocColors, bool pdf = false, bool spot = true);
+		};
+
+		enum OutputFormat
+		{
+			OutputPS = 0,
+			OutputEPS = 1
+		};
+
+		PSLib(ScribusDoc* doc, PrintOptions &options, OutputFormat outputFmt, ColorList *docColors = nullptr);
 		virtual ~PSLib();
 
-		void setOptimization (Optimization opt) { optimization = opt; }
-
-		virtual int   CreatePS(ScribusDoc* Doc, PrintOptions &options);
+		void setOptimization (Optimization opt) { m_optimization = opt; }
+		void setOutputFormat (OutputFormat outputFmt) { m_outputFormat = outputFmt; }
+
+		virtual int   createPS(PrintOptions &options);
 		virtual const QString& errorMessage();
 
+		virtual bool PS_set_file(const QString& fn);
+		virtual void PS_set_Info(const QString& art, const QString& was);
+
+	protected:
 		virtual void PS_Error(const QString& message);
 		virtual void PS_Error_ImageDataWriteFailure();
 		virtual void PS_Error_ImageLoadFailure(const QString& fileName);
 		virtual void PS_Error_MaskLoadFailure(const QString& fileName);
 		virtual void PS_Error_InsufficientMemory();
 
-		virtual bool PS_set_file(const QString& fn);
-		virtual void PS_set_Info(const QString& art, const QString& was);
-		virtual bool PS_begin_doc(ScribusDoc *doc, double x, double y, double width, double height, int numpage, bool sep, bool farb);
-		virtual void PS_begin_page(ScPage* pg, MarginStruct* Ma, bool Clipping);
+		virtual bool PS_begin_doc( double x, double y, double width, double height, int numpage);
+		virtual void PS_begin_page(ScPage* pg, MarginStruct* Ma, bool clipping);
 		virtual void PS_end_page();
 		virtual void PS_curve(double x1, double y1, double x2, double y2, double x3, double y3);
 		virtual void PS_moveto(double x, double y);
@@ -101,7 +110,6 @@
 		virtual void PS_setlinewidth(double w);
 		virtual void PS_setcapjoin(Qt::PenCapStyle ca, Qt::PenJoinStyle jo);
 		virtual void PS_setdash(Qt::PenStyle st, double offset, QVector<double> dash);
-		virtual void PS_selectfont(const QString& f, double s);
 		virtual void PS_fill();
 		virtual void PS_fillspot(const QString& color, double shade);
 		virtual void PS_stroke();
@@ -121,10 +129,10 @@
 		virtual void PS_TemplateStart(const QString& Name);
 		virtual void PS_TemplateEnd();
 		virtual void PS_UseTemplate(const QString& Name);
-		virtual bool ProcessItem(ScribusDoc* Doc, ScPage* page, PageItem* item, uint PNr, bool sep, bool farb, bool master, bool embedded = false, bool useTemplate = false);
-		virtual void ProcessPage(ScribusDoc* Doc, ScPage* page, uint PNr, bool sep = false, bool farb = true);
-		virtual bool ProcessMasterPageLayer(ScribusDoc* Doc, ScPage* page, ScLayer& ll, uint PNr, bool sep = false, bool farb = true);
-		virtual bool ProcessPageLayer(ScribusDoc* Doc, ScPage* a, ScLayer& ll, uint PNr, bool sep = false, bool farb = true);
+		virtual bool ProcessItem(ScPage* page, PageItem* item, uint PNr, bool master, bool embedded = false, bool useTemplate = false);
+		virtual void ProcessPage(ScPage* page, uint PNr);
+		virtual bool ProcessMasterPageLayer(ScPage* page, ScLayer& ll, uint PNr);
+		virtual bool ProcessPageLayer(ScPage* a, ScLayer& ll, uint PNr);
 		virtual void PS_HatchFill(PageItem *currItem);
 		virtual void drawArrow(PageItem *ite, QTransform &arrowTrans, int arrowIndex);
 		virtual void putColor(const QString& color, double shade, bool fill);
@@ -133,7 +141,7 @@
 		virtual void GetBleeds(ScPage* page, double& left, double& right, double& bottom, double& top);
 		virtual void SetClipPath(const FPointArray &points, bool poly = true);
 		virtual void SetPathAndClip(const FPointArray &points, bool clipRule);
-		virtual void HandleBrushPattern(PageItem *item, QPainterPath &path, ScPage* a, uint PNr, bool sep, bool farb, bool master);
+		virtual void HandleBrushPattern(PageItem *item, QPainterPath &path, ScPage* a, uint PNr, bool master);
 		virtual void HandleStrokePattern(PageItem *item);
 		virtual void HandleMeshGradient(PageItem* item);
 		virtual void HandlePatchMeshGradient(PageItem* item);
@@ -142,11 +150,9 @@
 		virtual void HandleGradientFillStroke(PageItem *item, bool stroke = true, bool forArrow = false);
 		virtual void SetColor(const QString& color, double shade, double *c, double *m, double *y, double *k);
 		virtual void SetColor(const ScColor& color, double shade, double *c, double *m, double *y, double *k);
-		virtual void setTextSt(ScribusDoc* Doc, PageItem* ite, uint a, ScPage* pg, bool sep, bool farb, bool master);
-		bool psExport;
+		virtual void setTextSt(PageItem* ite, uint a, ScPage* pg, bool master);
 
 	private:
-
 		void PutStream (const QString& c);
 		void PutStream (const QByteArray& array, bool hexEnc);
 		void PutStream (const char* in, int length, bool hexEnc);
@@ -161,49 +167,42 @@
 		void WriteASCII85Bytes(const unsigned char* array, int length);
 
 		void paintBorder(const TableBorder& border, const QPointF& start, const QPointF& end, const QPointF& startOffsetFactors, const QPointF& endOffsetFactors);
-
-		Optimization optimization;
+		
+		ScribusDoc *m_Doc { nullptr };
+		Optimization m_optimization { OptimizeCompat };
+		OutputFormat m_outputFormat { OutputPS };
 
 		QString ToStr(double c);
 		QString IToStr(int c);
 		QString MatrixToStr(double m11, double m12, double m21, double m22, double x, double y);
 		QString PSEncode(const QString& in);
 		QString ErrorMessage;
-		QString Prolog;
-		QString Header;
 		QString Creator;
 		QString User;
-		QString Titel;
+		QString Title;
 		QString BBox;
 		QString BBoxH;
 		QString Farben;
 		QString FNamen;
-		QString PDev;
-		QString GrayCalc;
-		bool GraySc;
-		int  PageIndex;
+		bool GraySc { false };
+		int  PageIndex { 0 };
 		QString FillColor;
 		QString StrokeColor;
 		double LineW;
-		QString Fonts;
 		QString FontDesc;
-		QMap<QString, QString> UsedFonts;
 		QMap<QString, QString> FontSubsetMap;
-		bool isPDF;
 		QFile Spool;
 		QDataStream spoolStream;
 		int  Plate;
-		bool DoSep;
-		bool useSpotColors;
+		bool DoSep { false };
 		bool fillRule;
 		ScColorTransform solidTransform;
 		QString currentSpot;
 		ColorList colorsToUse;
 		QString colorDesc;
-		ScribusDoc *m_Doc;
 		QMap<QString, QString> spotMap;
-		MultiProgressDialog* progressDialog;
-		bool abortExport;
+		MultiProgressDialog* progressDialog { nullptr };
+		bool abortExport { false };
 		PrintOptions Options;
 		ScPage* ActPage;
 

Modified: trunk/Scribus/scribus/scprintengine_gdi.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23557&path=/trunk/Scribus/scribus/scprintengine_gdi.cpp
==============================================================================
--- trunk/Scribus/scribus/scprintengine_gdi.cpp	(original)
+++ trunk/Scribus/scribus/scprintengine_gdi.cpp	Mon Apr  6 20:50:38 2020
@@ -428,21 +428,18 @@
 bool ScPrintEngine_GDI::printPage_PS(ScribusDoc* doc, ScPage* page, PrintOptions& options, HDC printerDC, cairo_t* /*context*/)
 {
 	bool succeed = false;
-	ColorList usedColors;
 	PrintOptions options2 = options;
-	QMap<QString, QMap<uint, FPointArray> > usedFonts;
 	QString tempFilePath;
 	int ret = 0;
 
-	doc->getUsedFonts(usedFonts);
-	doc->getUsedColors(usedColors);
 	options2.pageNumbers.clear();
 	options2.pageNumbers.push_back(page->pageNr() + 1);
+	options2.includePDFMarks = false;
 
 	tempFilePath = PrefsManager::instance().preferencesLocation() + "/tmp.ps";
-	PSLib *dd = new PSLib(options2, false, PrefsManager::instance().appPrefs.fontPrefs.AvailFonts, usedFonts, usedColors, false, options2.useSpotColors);
+	PSLib *dd = new PSLib(doc, options2, PSLib::OutputEPS);
 	dd->PS_set_file(tempFilePath);
-	ret = dd->CreatePS(doc, options2);
+	ret = dd->createPS(options2);
 	delete dd;
 	if (ret != 0) return false;
 

Modified: trunk/Scribus/scribus/scprintengine_ps.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23557&path=/trunk/Scribus/scribus/scprintengine_ps.cpp
==============================================================================
--- trunk/Scribus/scribus/scprintengine_ps.cpp	(original)
+++ trunk/Scribus/scribus/scprintengine_ps.cpp	Mon Apr  6 20:50:38 2020
@@ -17,13 +17,9 @@
 bool ScPrintEngine_PS::print(ScribusDoc& doc, PrintOptions& options)
 {
 	bool retw = false;
-	ColorList usedColors;
-	QMap<QString, QMap<uint, FPointArray> > usedFonts;
 	QString filename(options.filename);
-	doc.getUsedFonts(usedFonts);
-	doc.getUsedColors(usedColors);
 	PrefsManager& prefsManager = PrefsManager::instance();
-	PSLib *dd = new PSLib(options, true, prefsManager.appPrefs.fontPrefs.AvailFonts, usedFonts, usedColors, options.includePDFMarks, options.useSpotColors);
+	PSLib *dd = new PSLib(&doc, options, PSLib::OutputPS);
 	if (dd == nullptr)
 		return false;
 
@@ -39,11 +35,11 @@
 	// Write the PS to a file
 	filename = QDir::toNativeSeparators(filename);
 
-	int psCreationRetVal=dd->CreatePS(&doc, options);
-	if (psCreationRetVal!=0)
+	int psCreationRetVal = dd->createPS(options);
+	if (psCreationRetVal != 0)
 	{
 		QFile::remove(filename);
-		if (psCreationRetVal==2)
+		if (psCreationRetVal == 2)
 			return true;
 		m_errorMessage = dd->errorMessage();
 		return false;

Modified: trunk/Scribus/scribus/scribus.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23557&path=/trunk/Scribus/scribus/scribus.cpp
==============================================================================
--- trunk/Scribus/scribus/scribus.cpp	(original)
+++ trunk/Scribus/scribus/scribus.cpp	Mon Apr  6 20:50:38 2020
@@ -6966,11 +6966,6 @@
 	QStringList spots;
 	bool return_value = true;
 	ReOrderText(doc, view);
-	QMap<QString, QMap<uint, FPointArray> > ReallyUsed;
-	ReallyUsed.clear();
-	doc->getUsedFonts(ReallyUsed);
-	ColorList usedColors;
-	doc->getUsedColors(usedColors);
 	ScCore->fileWatcher->forceScan();
 	ScCore->fileWatcher->stop();
 	PrintOptions options;
@@ -6978,6 +6973,7 @@
 	options.outputSeparations = false;
 	options.separationName = "All";
 	options.allSeparations = spots;
+	options.useSpotColors = true;
 	options.useColor = true;
 	options.mirrorH = false;
 	options.mirrorV = false;
@@ -6988,16 +6984,17 @@
 	options.bleedMarks = false;
 	options.registrationMarks = false;
 	options.colorMarks = false;
+	options.includePDFMarks = false;
 	options.markLength = 20.0;
 	options.markOffset = 0.0;
 	options.bleeds.set(0, 0, 0, 0);
-	PSLib *pslib = new PSLib(options, false, m_prefsManager.appPrefs.fontPrefs.AvailFonts, ReallyUsed, usedColors, false, true);
+	PSLib *pslib = new PSLib(doc, options, PSLib::OutputEPS);
 	if (pslib != nullptr)
 	{
 		qApp->setOverrideCursor(QCursor(Qt::WaitCursor));
 		if (pslib->PS_set_file(fn))
 		{
-			int psRet = pslib->CreatePS(doc, options);
+			int psRet = pslib->createPS(options);
 			if (psRet == 1)
 			{
 				error = pslib->errorMessage();

Modified: trunk/Scribus/scribus/ui/preview.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23557&path=/trunk/Scribus/scribus/ui/preview.cpp
==============================================================================
--- trunk/Scribus/scribus/ui/preview.cpp	(original)
+++ trunk/Scribus/scribus/ui/preview.cpp	Mon Apr  6 20:50:38 2020
@@ -479,7 +479,6 @@
 {
 	int ret = -1;
 	QString cmd1;
-	QMap<QString,QMap<uint, FPointArray> > ReallyUsed;
 #if defined _WIN32
 	if (!postscriptPreview)
 	{
@@ -511,13 +510,12 @@
 		|| (MirrorHor->isChecked() != mHor) || (MirrorVert->isChecked() != mVer) || (ClipMarg->isChecked() != fClip)
 		|| (spotColors->isChecked() != fSpot))
 	{
-		ReallyUsed.clear();
-		doc->getUsedFonts(ReallyUsed);
 		PrintOptions options;
 		options.pageNumbers.push_back(pageIndex + 1);
 		options.outputSeparations = false;
 		options.separationName = "All";
 		options.allSeparations = QStringList();
+		options.useSpotColors = !spotColors->isChecked();
 		options.useColor = !useGray->isChecked();
 		options.mirrorH = MirrorHor->isChecked();
 		options.mirrorV = MirrorVert->isChecked();
@@ -528,14 +526,15 @@
 		options.bleedMarks = false;
 		options.registrationMarks = false;
 		options.colorMarks = false;
+		options.includePDFMarks = false;
 		options.markLength = 20.0;
 		options.markOffset = 0.0;
 		options.bleeds.set(0, 0, 0, 0);
-		PSLib *dd = new PSLib(options, true, prefsManager.appPrefs.fontPrefs.AvailFonts, ReallyUsed, doc->PageColors, false, !spotColors->isChecked());
+		PSLib *dd = new PSLib(doc, options, PSLib::OutputPS, &doc->PageColors);
 		if (!dd)
 			return ret;
 		dd->PS_set_file( ScPaths::tempFileDir() + "/tmp.ps");
-		ret = dd->CreatePS(doc, options);
+		ret = dd->createPS(options);
 		delete dd;
 		if (ret != 0) return 1;
 	}
@@ -616,19 +615,17 @@
 	int ret = -1;
 	QString cmd;
 	QStringList args, args1, args2, args3;
-	QMap<QString, QMap<uint, FPointArray> > ReallyUsed;
 	// Recreate Postscript-File only when the actual Page has changed
 	if ((pageIndex != APage)  || (EnableGCR->isChecked() != GMode) || (useGray->isChecked() != fGray)
 		|| (MirrorHor->isChecked() != mHor) || (MirrorVert->isChecked() != mVer) || (ClipMarg->isChecked() != fClip)
 		|| (spotColors->isChecked() != fSpot))
 	{
-		ReallyUsed.clear();
-		doc->getUsedFonts(ReallyUsed);
 		PrintOptions options;
 		options.pageNumbers.push_back(pageIndex + 1);
 		options.outputSeparations = false;
 		options.separationName = "All";
 		options.allSeparations = QStringList();
+		options.useSpotColors = !spotColors->isChecked();
 		options.useColor = !useGray->isChecked();
 		options.mirrorH = MirrorHor->isChecked();
 		options.mirrorV = MirrorVert->isChecked();
@@ -639,14 +636,15 @@
 		options.bleedMarks = false;
 		options.registrationMarks = false;
 		options.colorMarks = false;
+		options.includePDFMarks = false;
 		options.markLength = 20.0;
 		options.markOffset = 0.0;
 		options.bleeds.set(0, 0, 0, 0);
-		PSLib *dd = new PSLib(options, true, prefsManager.appPrefs.fontPrefs.AvailFonts, ReallyUsed, doc->PageColors, false, !spotColors->isChecked());
+		PSLib *dd = new PSLib(doc, options, PSLib::OutputPS, &doc->PageColors);
 		if (dd != nullptr)
 		{
 			dd->PS_set_file(ScPaths::tempFileDir()+"/tmp.ps");
-			ret = dd->CreatePS(doc, options);
+			ret = dd->createPS(options);
 			delete dd;
 			if (ret != 0) return 1;
 		}




More information about the scribus-commit mailing list