r13971 by jghali - #8410: Baseline shift is not saved for tab characters

scribus-commit scribus-commit at lists.scribus.net
Mon Sep 7 01:20:22 CEST 2009


Revision: 13971
Author: jghali
Date: 2009-09-06T23:20:37.083169Z
Commit message: #8410: Baseline shift is not saved for tab characters

Changeset: 
M  /trunk/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
M  /trunk/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format_save.cpp
M  /trunk/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format.cpp
M  /trunk/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp

Diffs:
Index: scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
===================================================================
--- scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp	(revision 13970)
+++ scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp	(revision 13971)
@@ -1019,7 +1019,10 @@
 		else if (ch == SpecialChars::PARSEP)	// stores also the paragraphstyle for preceding chars
 			putPStyle(docu, item->itemText.paragraphStyle(k), "para");
 		else if (ch == SpecialChars::TAB)
+		{
 			docu.writeEmptyElement("tab");
+			putCStyle(docu, lastStyle);
+		}
 		else if (ch == SpecialChars::LINEBREAK)
 			docu.writeEmptyElement("breakline");
 		else if (ch == SpecialChars::COLBREAK)
Index: scribus/plugins/fileloader/scribus150format/scribus150format.cpp
===================================================================
--- scribus/plugins/fileloader/scribus150format/scribus150format.cpp	(revision 13970)
+++ scribus/plugins/fileloader/scribus150format/scribus150format.cpp	(revision 13971)
@@ -1,3399 +1,3406 @@
-/*
-For general Scribus (>=1.3.2) copyright and licensing information please refer
-to the COPYING file provided with the program. Following this notice may exist
-a copyright and/or license notice that predates the release of Scribus 1.3.2
-for which a new license (GPL+exception) is in place.
-*/
-#include "scribus150format.h"
-#include "scribus150formatimpl.h"
-
-#include "../../formatidlist.h"
-#include "commonstrings.h"
-#include "ui/missing.h"
-#include "hyphenator.h"
-#include "pageitem_latexframe.h"
-#include "prefsmanager.h"
-#include "scclocale.h"
-#include "scconfig.h"
-#include "sccolorengine.h"
-#include "scpattern.h"
-#include "scribuscore.h"
-#include "scribusdoc.h"
-#include "scribusview.h"
-#include "sctextstream.h"
-#include "scxmlstreamreader.h"
-#include "undomanager.h"
-#include "units.h"
-#include "util.h"
-#include "util_math.h"
-#include "util_color.h"
-#include "scgzfile.h"
-#include "scpattern.h"
-#ifdef HAVE_OSG
-	#include "pageitem_osgframe.h"
-#endif
-#include <QCursor>
-// #include <QDebug>
-#include <QFileInfo>
-#include <QList>
-#include <QByteArray>
-#include <QApplication>
-
-
-// See scplugin.h and pluginmanager.{cpp,h} for detail on what these methods
-// do. That documentatation is not duplicated here.
-// Please don't implement the functionality of your plugin here; do that
-// in scribus150formatimpl.h and scribus150formatimpl.cpp .
-
-Scribus150Format::Scribus150Format() :
-	LoadSavePlugin()
-{
-	// Set action info in languageChange, so we only have to do
-	// it in one place. This includes registering file formats.
-	languageChange();
-}
-
-Scribus150Format::~Scribus150Format()
-{
-	unregisterAll();
-};
-
-void Scribus150Format::languageChange()
-{
-	//(Re)register file formats.
-	unregisterAll();
-	registerFormats();
-}
-
-const QString Scribus150Format::fullTrName() const
-{
-	return QObject::tr("Scribus 1.3.4+ Support");
-}
-
-const ScActionPlugin::AboutData* Scribus150Format::getAboutData() const
-{
-	AboutData* about = new AboutData;
-	Q_CHECK_PTR(about);
-	about->authors = QString::fromUtf8(
-			"Franz Schmid <franz at scribus.info>, "
-			"The Scribus Team");
-	about->shortDescription = tr("Scribus 1.3.4+ File Format Support");
-	about->description = tr("Allows Scribus to read Scribus 1.3.4 and higher formatted files.");
-	// about->version
-	// about->releaseDate
-	// about->copyright
-	about->license = "GPL";
-	return about;
-}
-
-void Scribus150Format::deleteAboutData(const AboutData* about) const
-{
-	Q_ASSERT(about);
-	delete about;
-}
-
-void Scribus150Format::registerFormats()
-{
-	FileFormat fmt(this);
-	fmt.trName = tr("Scribus 1.5.0+ Document");
-	fmt.formatId = FORMATID_SLA150IMPORT;
-	fmt.load = true;
-	fmt.save = true;
-	fmt.filter = fmt.trName + " (*.sla *.SLA *.sla.gz *.SLA.GZ *.scd *.SCD *.scd.gz *.SCD.GZ)";
-	fmt.nameMatch = QRegExp("\\.(sla|scd)(\\.gz)?", Qt::CaseInsensitive);
-	fmt.mimeTypes = QStringList();
-	fmt.mimeTypes.append("application/x-scribus");
-	fmt.priority = 64;
-	registerFormat(fmt);
-}
-
-bool Scribus150Format::fileSupported(QIODevice* /* file */, const QString & fileName) const
-{
-	QByteArray docBytes("");
-	if(fileName.right(2) == "gz")
-	{
-		if (!ScGzFile::readFromFile(fileName, docBytes, 4096))
-		{
-			// FIXME: Needs better error return
-			return false;
-		}
-	}
-	else
-	{
-		// Not gzip encoded, just load it
-		loadRawText(fileName, docBytes);
-	}
-//	if (docBytes.left(16) == "<SCRIBUSUTF8NEW " && docBytes.left(35).contains("Version=\"1.3.4"))
-//		return true;
-	int startElemPos = docBytes.left(512).indexOf("<SCRIBUSUTF8NEW ");
-	return startElemPos >= 0 && ((docBytes.mid(startElemPos, 64).indexOf("Version=\"1.5.0") >= 0));
-}
-
-QString Scribus150Format::readSLA(const QString & fileName)
-{
-	QByteArray docBytes("");
-	if(fileName.right(2) == "gz")
-	{
-		if (!ScGzFile::readFromFile(fileName, docBytes))
-		{
-			// FIXME: Needs better error return
-			return false;
-		}
-	}
-	else
-	{
-		// Not gzip encoded, just load it
-		loadRawText(fileName, docBytes);
-	}
-	QString docText("");
-	int startElemPos = docBytes.left(512).indexOf("<SCRIBUSUTF8NEW ");
-	if (startElemPos >= 0 && ((docBytes.mid(startElemPos, 64).indexOf("Version=\"1.5.0") >= 0)))
-		docText = QString::fromUtf8(docBytes);
-	else
-		return QString::null;
-	if (docText.endsWith(QChar(10)) || docText.endsWith(QChar(13)))
-		docText.truncate(docText.length()-1);
-	return docText;
-}
-
-void Scribus150Format::getReplacedFontData(bool & getNewReplacement, QMap<QString,QString> &getReplacedFonts, QList<ScFace> &getDummyScFaces)
-{
-	getNewReplacement=false;
-	getReplacedFonts.clear();
-}
-
-bool Scribus150Format::loadFile(const QString & fileName, const FileFormat & /* fmt */, int /* flags */, int /* index */)
-{
-	if (m_Doc==0 || m_AvailableFonts==0)
-	{
-		Q_ASSERT(m_Doc==0 || m_AvailableFonts==0);
-		return false;
-	}
-	ParagraphStyle vg;
-	struct ScribusDoc::BookMa bok;
-	QMap<int, ScribusDoc::BookMa> bookmarks;
-
-	bool newVersion = false;
-
-	QMap<int,int> TableID;
-	QMap<int,int> TableIDM;
-	QMap<int,int> TableIDF;
-	QList<PageItem*> TableItems;
-	QList<PageItem*> TableItemsM;
-	QList<PageItem*> TableItemsF;
-	QMap<PageItem*, int> groupID;
-	QMap<PageItem*, int> groupIDM;
-	QMap<PageItem*, int> groupIDF;
-	
-	QString f(readSLA(fileName));
-	if (f.isEmpty())
-		return false;
-	QString fileDir = QFileInfo(fileName).absolutePath();
-	int firstPage = 0;
-	int layerToSetActive = 0;
-	ScColor lf = ScColor();
-	
-	if (m_mwProgressBar!=0)
-	{
-		m_mwProgressBar->setMaximum(f.length());
-		m_mwProgressBar->setValue(0);
-	}
-	// Stop autosave timer,it will be restarted only if doc has autosave feature is enabled
-	if (m_Doc->autoSaveTimer->isActive())
-		m_Doc->autoSaveTimer->stop();
-	
-	groupRemap.clear();
-	itemRemap.clear();
-	itemNext.clear();
-	itemCount = 0;
-	itemRemapM.clear();
-	itemNextM.clear();
-	itemCountM = 0;
-	itemRemapF.clear();
-	itemNextF.clear();
-
-	TableItems.clear();
-	TableID.clear();
-	TableItemsM.clear();
-	TableIDM.clear();
-	TableItemsF.clear();
-	TableIDF.clear();
-
-	m_Doc->GroupCounter = 1;
-	m_Doc->LastAuto = 0;
-	m_Doc->PageColors.clear();
-	m_Doc->Layers.clear();
-
-	bool firstElement = true;
-	bool success = true;
-	bool hasPageSets = false;
-	int  progress = 0;
-
-	ScXmlStreamReader reader(f);
-	ScXmlStreamAttributes attrs;
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		QXmlStreamReader::TokenType tType = reader.readNext();
-		if (tType != QXmlStreamReader::StartElement)
-			continue;
-		QStringRef tagName = reader.name();
-		attrs = reader.scAttributes();
-
-		if (m_mwProgressBar != 0)
-		{
-			int newProgress = qRound(reader.characterOffset() / (double) f.length() * 100);
-			if (newProgress != progress)
-			{
-				m_mwProgressBar->setValue(reader.characterOffset());
-				progress = newProgress;
-			}
-		}
-
-		if (firstElement)
-		{
-			if (tagName != "SCRIBUSUTF8NEW")
-			{
-				success = false;
-				break;
-			}
-			if (attrs.hasAttribute("Version"))
-				newVersion = true;
-			firstElement = false;
-		}
-		if (tagName == "DOCUMENT")
-		{
-			readDocAttributes(m_Doc, attrs);
-			layerToSetActive = attrs.valueAsInt("ALAYER", 0);
-			if (m_Doc->currentPageLayout == 0)
-				firstPage = 0;
-			else
-			{
-				if (attrs.valueAsInt("FIRSTLEFT", 0) == 1)
-					firstPage = 0;
-				else
-					firstPage = 1;
-			}
-			if (attrs.hasAttribute("currentProfile"))
-			{
-				m_Doc->checkerProfiles.clear();
-				m_Doc->curCheckProfile = attrs.valueAsString("currentProfile");
-			}
-		}
-		if (tagName == "CheckProfile")
-		{
-			success = readCheckProfile(m_Doc, attrs);
-			if (!success) break;
-		}
-		if (tagName == "PageSets")
-		{
-			success = readPageSets(m_Doc, reader);
-			if (!success) break;
-			hasPageSets = true;
-		}
-		// 10/25/2004 pv - None is "reserved" color. cannot be defined in any file...
-		if (tagName == "COLOR" && attrs.valueAsString("NAME") != CommonStrings::None)
-		{
-			success = readColor(m_Doc->PageColors, attrs);
-			if (!success) break;
-		}
-		if (tagName == "STYLE")
-		{
-			readParagraphStyle(m_Doc, reader, vg, *m_AvailableFonts);
-			StyleSet<ParagraphStyle>tmp;
-			tmp.create(vg);
-			m_Doc->redefineStyles(tmp, false);
-		}
-		if (tagName == "CHARSTYLE")
-		{
-			readParagraphStyle(m_Doc, reader, vg, *m_AvailableFonts);
-			StyleSet<CharStyle> temp;
-			temp.create(vg.charStyle());
-			m_Doc->redefineCharStyles(temp, false);
-		}
-		if (tagName == "JAVA")
-		{
-			QString name = attrs.valueAsString("NAME");
-			if (!name.isEmpty())
-				m_Doc->JavaScripts[name] = attrs.valueAsString("SCRIPT");
-		}
-		if (tagName == "LAYERS")
-		{
-			ScLayer newLayer;
-			readLayers(newLayer, attrs);
-			m_Doc->Layers.append(newLayer);
-		}
-		if (tagName == "Arrows")
-		{
-			success = readArrows(m_Doc, attrs);
-			if (!success) break;
-		}
-		if (tagName == "MultiLine")
-		{
-			multiLine ml;
-			QString mlName = attrs.valueAsString("Name");
-			success = readMultiline(ml, reader);
-			if (!success) break;
-			if (!mlName.isEmpty())
-			{
-				m_Doc->MLineStyles.insert(mlName, ml);
-			}
-		}
-		if (tagName == "Bookmark")
-		{
-			int bmElem = 0;
-			struct ScribusDoc::BookMa bookmark;
-			success = readBookMark(bookmark, bmElem, attrs);
-			if (!success) break;
-			bookmarks.insert(bmElem, bookmark);
-		}
-		if (tagName == "PDF")
-		{
-			success = readPDFOptions(m_Doc, reader);
-			if (!success) break;
-		}
-		if (tagName == "Printer")
-		{
-			success = readPrinterOptions(m_Doc, reader);
-			if (!success) break;
-		}
-		if (tagName == "DocItemAttributes")
-		{
-			success = readDocItemAttributes(m_Doc, reader);
-			if (!success) break;
-		}
-		if (tagName == "TablesOfContents")
-		{
-			success = readTableOfContents(m_Doc, reader);
-			if (!success) break;
-		}
-		if (tagName == "Sections")
-		{
-			success = readSections(m_Doc, reader);
-			if (!success) break;
-		}
-		if (tagName == "HYPHEN")
-		{
-			success = readHyphen(m_Doc, reader);
-			if (!success) break;
-		}
-		if (tagName == "PAGE" || tagName == "MASTERPAGE")
-		{
-			success = readPage(m_Doc, reader);
-			if (!success) break;
-		}
-		if (tagName == "PAGEOBJECT" || tagName == "MASTEROBJECT" || tagName == "FRAMEOBJECT")
-		{
-			ItemInfo itemInfo;
-			success = readObject(m_Doc, reader, itemInfo, fileDir, false);
-			if (!success) break;
-
-			// first of linked chain?
-			if (tagName == "PAGEOBJECT")
-			{
-				if (itemInfo.nextItem != -1)
-					itemNext[itemInfo.item->ItemNr] = itemInfo.nextItem;
-			}
-			else if (tagName == "MASTEROBJECT")
-			{
-				if (itemInfo.nextItem != -1)
-					itemNextM[itemInfo.item->ItemNr] = itemInfo.nextItem;
-			}
-			/* not sure if we want that...
-			else if (tagName == "FRAMEOBJECT")
-			{
-				if (itemInfo.nextItem != -1)
-					itemNextF[itemInfo.item->ItemNr] = itemInfo.nextItem;
-			}*/
-
-			if (itemInfo.item->isTableItem)
-			{
-				if (tagName == "PAGEOBJECT")
-				{
-					TableItems.append(itemInfo.item);
-					TableID.insert(itemInfo.ownLink, itemInfo.item->ItemNr);
-				}
-				else if (tagName == "FRAMEOBJECT")
-				{
-					TableItemsF.append(itemInfo.item);
-					TableIDF.insert(itemInfo.ownLink, itemInfo.item->ItemNr);
-				}
-				else
-				{
-					TableItemsM.append(itemInfo.item);
-					TableIDM.insert(itemInfo.ownLink, itemInfo.item->ItemNr);
-				}
-			}
-			if (itemInfo.item->isGroupControl)
-			{
-				if (tagName == "PAGEOBJECT")
-					groupID.insert(itemInfo.item, itemInfo.groupLastItem + itemInfo.item->ItemNr);
-				else if (tagName == "FRAMEOBJECT")
-					groupIDF.insert(itemInfo.item, itemInfo.groupLastItem + itemInfo.item->ItemNr);
-				else
-					groupIDM.insert(itemInfo.item, itemInfo.groupLastItem + itemInfo.item->ItemNr);
-			}
-		}
-		if (tagName == "Pattern")
-		{
-			success = readPattern(m_Doc, reader, fileDir);
-			if (!success) break;
-		}
-	}
-
-	if (reader.hasError())
-		return false;
-
-	QMap<int, ScribusDoc::BookMa>::Iterator it;
-	for (it = bookmarks.begin(); it != bookmarks.end(); ++it)
-	{
-		int elem = it.key();
-		if (elem < m_Doc->Items->count())
-		{
-			ScribusDoc::BookMa bookmark = it.value();
-			bookmark.PageObject = m_Doc->Items->at(elem);
-			m_Doc->BookMarks.append( bookmark );
-		}
-	}
-
-	if (TableItemsF.count() != 0)
-	{
-		for (int ttc = 0; ttc < TableItemsF.count(); ++ttc)
-		{
-			PageItem* ta = TableItemsF.at(ttc);
-			if (ta->TopLinkID != -1)
-				ta->TopLink = m_Doc->FrameItems.at(TableIDF[ta->TopLinkID]);
-			else
-				ta->TopLink = 0;
-			if (ta->LeftLinkID != -1)
-				ta->LeftLink = m_Doc->FrameItems.at(TableIDF[ta->LeftLinkID]);
-			else
-				ta->LeftLink = 0;
-			if (ta->RightLinkID != -1)
-				ta->RightLink = m_Doc->FrameItems.at(TableIDF[ta->RightLinkID]);
-			else
-				ta->RightLink = 0;
-			if (ta->BottomLinkID != -1)
-				ta->BottomLink = m_Doc->FrameItems.at(TableIDF[ta->BottomLinkID]);
-			else
-				ta->BottomLink = 0;
-		}
-	}
-	if (TableItemsM.count() != 0)
-	{
-		for (int ttc = 0; ttc < TableItemsM.count(); ++ttc)
-		{
-			PageItem* ta = TableItemsM.at(ttc);
-			if (ta->TopLinkID != -1)
-				ta->TopLink = m_Doc->MasterItems.at(TableIDM[ta->TopLinkID]);
-			else
-				ta->TopLink = 0;
-			if (ta->LeftLinkID != -1)
-				ta->LeftLink = m_Doc->MasterItems.at(TableIDM[ta->LeftLinkID]);
-			else
-				ta->LeftLink = 0;
-			if (ta->RightLinkID != -1)
-				ta->RightLink = m_Doc->MasterItems.at(TableIDM[ta->RightLinkID]);
-			else
-				ta->RightLink = 0;
-			if (ta->BottomLinkID != -1)
-				ta->BottomLink = m_Doc->MasterItems.at(TableIDM[ta->BottomLinkID]);
-			else
-				ta->BottomLink = 0;
-		}
-	}
-	if (TableItems.count() != 0)
-	{
-		for (int ttc = 0; ttc < TableItems.count(); ++ttc)
-		{
-			PageItem* ta = TableItems.at(ttc);
-			if (ta->TopLinkID != -1)
-				ta->TopLink = m_Doc->Items->at(TableID[ta->TopLinkID]);
-			else
-				ta->TopLink = 0;
-			if (ta->LeftLinkID != -1)
-				ta->LeftLink = m_Doc->Items->at(TableID[ta->LeftLinkID]);
-			else
-				ta->LeftLink = 0;
-			if (ta->RightLinkID != -1)
-				ta->RightLink = m_Doc->Items->at(TableID[ta->RightLinkID]);
-			else
-				ta->RightLink = 0;
-			if (ta->BottomLinkID != -1)
-				ta->BottomLink = m_Doc->Items->at(TableID[ta->BottomLinkID]);
-			else
-				ta->BottomLink = 0;
-		}
-	}
-	if (groupIDF.count() != 0)
-	{
-		QMap<PageItem*, int>::Iterator it;
-		for (it = groupIDF.begin(); it != groupIDF.end(); ++it)
-		{
-			it.key()->groupsLastItem = m_Doc->FrameItems.at(it.value());
-		}
-	}
-	if (groupID.count() != 0)
-	{
-		QMap<PageItem*, int>::Iterator it;
-		for (it = groupID.begin(); it != groupID.end(); ++it)
-		{
-			it.key()->groupsLastItem = m_Doc->DocItems.at(it.value());
-		}
-	}
-	if (groupIDM.count() != 0)
-	{
-		QMap<PageItem*, int>::Iterator it;
-		for (it = groupIDM.begin(); it != groupIDM.end(); ++it)
-		{
-			it.key()->groupsLastItem = m_Doc->MasterItems.at(it.value());
-		}
-	}
-	//CB Add this in to set this in the file in memory. Its saved, why not load it.
-	//Will of course be replaced by per page settings although we still probably need a document default
-	if (!hasPageSets)
-	{
-		m_Doc->pageSets[m_Doc->currentPageLayout].FirstPage = firstPage;
-//		m_Doc->pageSets[m_Doc->currentPageLayout].GapHorizontal = dc.attribute("GapHorizontal", "0").toDouble();
-//		m_Doc->pageSets[m_Doc->currentPageLayout].GapVertical = 0.0;
-//		m_Doc->pageSets[m_Doc->currentPageLayout].GapBelow = dc.attribute("GapVertical", "40").toDouble();
-	}
-	m_Doc->setActiveLayer(layerToSetActive);
-	m_Doc->setMasterPageMode(false);
-	m_Doc->reformPages();
-
-	if (m_Doc->Layers.count() == 0)
-		m_Doc->Layers.newLayer( QObject::tr("Background") );
-
-	// reestablish textframe links
-	if (itemNext.count() != 0)
-	{
-		QMap<int,int>::Iterator lc;
-		for (lc = itemNext.begin(); lc != itemNext.end(); ++lc)
-		{
-			if (lc.value() >= 0)
-			{
-				PageItem * Its = m_Doc->DocItems.at(lc.key());
-				PageItem * Itn = m_Doc->DocItems.at(lc.value());
-				if (Itn->prevInChain() || Its->nextInChain()) 
-				{
-					qDebug() << "scribus150format: corruption in linked textframes detected";
-					continue;
-				}
-				Its->link(Itn);
-			}
-		}
-	}
-	
-	if (itemNextM.count() != 0)
-	{
-		QMap<int,int>::Iterator lc;
-		for (lc = itemNextM.begin(); lc != itemNextM.end(); ++lc)
-		{
-			if (lc.value() >= 0)
-			{
-				PageItem * Its = m_Doc->MasterItems.at(lc.key());
-				PageItem * Itn = m_Doc->MasterItems.at(lc.value());
-				if (Itn->prevInChain() || Its->nextInChain()) 
-				{
-					qDebug() << "scribus150format: corruption in linked textframes detected";
-					continue;
-				}
-				Its->link(Itn);
-			}
-		}
-	}
-	
-	// reestablish first/lastAuto
-	m_Doc->FirstAuto = m_Doc->LastAuto;
-	if (m_Doc->LastAuto)
-	{
-		while (m_Doc->LastAuto->nextInChain())
-			m_Doc->LastAuto = m_Doc->LastAuto->nextInChain();
-		while (m_Doc->FirstAuto->prevInChain())
-			m_Doc->FirstAuto = m_Doc->FirstAuto->prevInChain();
-	}
-
-	// start auto save timer if needed
-	if (m_Doc->AutoSave  && ScCore->usingGUI())
-		m_Doc->autoSaveTimer->start(m_Doc->AutoSaveTime);
-	
-	if (m_mwProgressBar!=0)
-		m_mwProgressBar->setValue(reader.characterOffset());
-	return true;
-// 	return false;
-}
-
-// Low level plugin API
-int scribus150format_getPluginAPIVersion()
-{
-	return PLUGIN_API_VERSION;
-}
-
-ScPlugin* scribus150format_getPlugin()
-{
-	Scribus150Format* plug = new Scribus150Format();
-	Q_CHECK_PTR(plug);
-	return plug;
-}
-
-void scribus150format_freePlugin(ScPlugin* plugin)
-{
-	Scribus150Format* plug = dynamic_cast<Scribus150Format*>(plugin);
-	Q_ASSERT(plug);
-	delete plug;
-}
-
-
-namespace {
-	const int NOVALUE = -16000;
-	
-	void fixLegacyCharStyle(CharStyle& cstyle) 
-	{
-		if (! cstyle.font().usable())
-			cstyle.resetFont();
-		if (cstyle.fontSize() <= -16000 / 10)
-			cstyle.resetFontSize();
-//		if (cstyle.effects() == 65535)
-//			cstyle.resetEffects();
-		if (cstyle.fillColor().isEmpty())
-			cstyle.resetFillColor();
-		if (cstyle.fillShade() <= -16000)
-			cstyle.resetFillShade();
-		if (cstyle.strokeColor().isEmpty())
-			cstyle.resetStrokeColor();
-		if (cstyle.strokeShade() <= -16000)
-			cstyle.resetStrokeShade();
-		if (cstyle.shadowXOffset() <= -16000 / 10)
-			cstyle.resetShadowXOffset();
-		if (cstyle.shadowYOffset() <= -16000 / 10)
-			cstyle.resetShadowYOffset();
-		if (cstyle.outlineWidth() <= -16000 / 10)
-			cstyle.resetOutlineWidth();
-		if (cstyle.underlineOffset() <= -16000 / 10)
-			cstyle.resetUnderlineOffset();
-		if (cstyle.underlineWidth() <= -16000 / 10)
-			cstyle.resetUnderlineWidth();
-		if (cstyle.strikethruOffset() <= -16000 / 10)
-			cstyle.resetStrikethruOffset();
-		if (cstyle.strikethruWidth() <= -16000 / 10)
-			cstyle.resetStrikethruWidth();
-		if (cstyle.scaleH() <= -16000 / 10)
-			cstyle.resetScaleH();
-		if (cstyle.scaleV() <= -16000 / 10)
-			cstyle.resetScaleV();
-		if (cstyle.baselineOffset() <= -16000 / 10)
-			cstyle.resetBaselineOffset();
-		if (cstyle.tracking() <= -16000 / 10)
-			cstyle.resetTracking();
-	}
-	
-	void fixLegacyParStyle(ParagraphStyle& pstyle) 
-	{
-		if (pstyle.lineSpacing() <= -16000)
-			pstyle.resetLineSpacing();
-		if (pstyle.leftMargin() <= -16000)
-			pstyle.resetLeftMargin();
-		if (pstyle.rightMargin() <= -16000)
-			pstyle.resetRightMargin();
-		if (pstyle.firstIndent() <= -16000)
-			pstyle.resetFirstIndent();
-		if (pstyle.alignment() < 0)
-			pstyle.resetAlignment();
-		if (pstyle.gapBefore() <= -16000)
-			pstyle.resetGapBefore();
-		if (pstyle.gapAfter() <= -16000)
-			pstyle.resetGapAfter();
-		if (pstyle.dropCapLines() < 0)
-			pstyle.resetDropCapLines();
-		if (pstyle.dropCapOffset() <= -16000)
-			pstyle.resetDropCapOffset();
-		fixLegacyCharStyle(pstyle.charStyle());
-	}
-	
-}// namespace
-
-void Scribus150Format::readDocAttributes(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
-{
-	m_Doc->m_pageSize = attrs.valueAsString("PAGESIZE");
-	m_Doc->PageOri    = attrs.valueAsInt("ORIENTATION", 0);
-	m_Doc->FirstPnum  = attrs.valueAsInt("FIRSTNUM", 1);
-	m_Doc->currentPageLayout = attrs.valueAsInt("BOOK", 0);
-
-	m_Doc->setUsesAutomaticTextFrames( attrs.valueAsInt("AUTOTEXT") );
-	m_Doc->PageSp  = attrs.valueAsInt("AUTOSPALTEN");
-	m_Doc->PageSpa = attrs.valueAsDouble("ABSTSPALTEN");
-	m_Doc->setUnitIndex( attrs.valueAsInt("UNITS", 0) );
-
-	m_Doc->Language   = attrs.valueAsString("LANGUAGE", "");
-	m_Doc->MinWordLen = attrs.valueAsInt("MINWORDLEN", 3);
-	m_Doc->HyCount    = attrs.valueAsInt("HYCOUNT", 2);
-
-	if (attrs.hasAttribute("PAGEWIDTH"))
-		m_Doc->pageWidth = attrs.valueAsDouble("PAGEWIDTH");
-	else
-		m_Doc->pageWidth = attrs.valueAsDouble("PAGEWITH");
-	m_Doc->pageHeight = attrs.valueAsDouble("PAGEHEIGHT");
-	m_Doc->pageMargins.Left  = qMax(0.0, attrs.valueAsDouble("BORDERLEFT"));
-	m_Doc->pageMargins.Right = qMax(0.0, attrs.valueAsDouble("BORDERRIGHT"));
-	m_Doc->pageMargins.Top   = qMax(0.0, attrs.valueAsDouble("BORDERTOP"));
-	m_Doc->pageMargins.Bottom= qMax(0.0, attrs.valueAsDouble("BORDERBOTTOM"));
-	m_Doc->marginPreset  = attrs.valueAsInt("PRESET", 0);
-	m_Doc->bleeds.Top    = attrs.valueAsDouble("BleedTop", 0.0);
-	m_Doc->bleeds.Left   = attrs.valueAsDouble("BleedLeft", 0.0);
-	m_Doc->bleeds.Right  = attrs.valueAsDouble("BleedRight", 0.0);
-	m_Doc->bleeds.Bottom = attrs.valueAsDouble("BleedBottom", 0.0);
-	m_Doc->Automatic = attrs.valueAsBool("AUTOMATIC", true);
-	m_Doc->AutoCheck = attrs.valueAsBool("AUTOCHECK", false);
-	m_Doc->GuideLock = attrs.valueAsBool("GUIDELOCK", false);
-	
-	m_Doc->rulerXoffset = attrs.valueAsDouble("rulerXoffset", 0.0);
-	m_Doc->rulerYoffset = attrs.valueAsDouble("rulerYoffset", 0.0);
-	m_Doc->SnapGuides   = attrs.valueAsBool("SnapToGuides", false);
-	m_Doc->useRaster    = attrs.valueAsBool("SnapToGrid", false);
-	
-	m_Doc->AutoSave       = attrs.valueAsBool("AutoSave", false);
-	m_Doc->AutoSaveTime   = attrs.valueAsInt("AutoSaveTime", 600000);
-	m_Doc->scratch.Bottom = attrs.valueAsDouble("ScratchBottom", 20.0);
-	// FIXME A typo in early 1.3cvs (MAR 05) means we must support loading of
-	// FIXME 'ScatchLeft' for a while too. This can be removed in a few months.
-	if (attrs.hasAttribute("ScatchLeft"))
-		m_Doc->scratch.Left = attrs.valueAsDouble("ScatchLeft", 100.0);
-	else
-		m_Doc->scratch.Left = attrs.valueAsDouble("ScratchLeft", 100.0);
-	m_Doc->scratch.Right = attrs.valueAsDouble("ScratchRight", 100.0);
-	m_Doc->scratch.Top   = attrs.valueAsDouble("ScratchTop", 20.0);
-	m_Doc->GapHorizontal = attrs.valueAsDouble("GapHorizontal", -1.0);
-	m_Doc->GapVertical   = attrs.valueAsDouble("GapVertical", -1.0);
-	
-	if (attrs.hasAttribute("PAGEC"))
-		m_Doc->papColor = QColor(attrs.valueAsString("PAGEC"));
-	
-	m_Doc->marginColored = attrs.valueAsBool("RANDF", false);
-
-	readCMSSettings(doc, attrs);
-	readDocumentInfo(doc, attrs);
-	readGuideSettings(doc, attrs);
-	readToolSettings(doc, attrs);
-	readTypographicSettings(doc, attrs);
-}
-
-void Scribus150Format::readCMSSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
-{
-	doc->CMSSettings.SoftProofOn     = attrs.valueAsBool("DPSo", false);
-	doc->CMSSettings.SoftProofFullOn = attrs.valueAsBool("DPSFo", false);
-	doc->CMSSettings.CMSinUse   = attrs.valueAsBool("DPuse", false);
-	doc->CMSSettings.GamutCheck = attrs.valueAsBool("DPgam", false);
-	doc->CMSSettings.BlackPoint = attrs.valueAsBool("DPbla", true);
-	doc->CMSSettings.DefaultMonitorProfile   = attrs.valueAsString("DPMo","");
-	doc->CMSSettings.DefaultPrinterProfile   = attrs.valueAsString("DPPr","");
-	doc->CMSSettings.DefaultImageRGBProfile  = attrs.valueAsString("DPIn","");
-	doc->CMSSettings.DefaultImageCMYKProfile = attrs.valueAsString("DPInCMYK","");
-	doc->CMSSettings.DefaultSolidColorRGBProfile = attrs.valueAsString("DPIn2","");
-	if (attrs.hasAttribute("DPIn3"))
-		doc->CMSSettings.DefaultSolidColorCMYKProfile = attrs.valueAsString("DPIn3","");
-	else
-		doc->CMSSettings.DefaultSolidColorCMYKProfile = attrs.valueAsString("DPPr","");
-	doc->CMSSettings.DefaultIntentColors = attrs.valueAsInt("DISc", 1);
-	doc->CMSSettings.DefaultIntentImages = attrs.valueAsInt("DIIm", 0);
-}
-
-void Scribus150Format::readDocumentInfo(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
-{
-	doc->documentInfo.setAuthor(attrs.valueAsString("AUTHOR"));
-	doc->documentInfo.setComments(attrs.valueAsString("COMMENTS"));
-	doc->documentInfo.setKeywords(attrs.valueAsString("KEYWORDS",""));
-	doc->documentInfo.setTitle(attrs.valueAsString("TITLE"));
-	doc->documentInfo.setSubject(attrs.valueAsString("SUBJECT"));
-	doc->documentInfo.setPublisher(attrs.valueAsString("PUBLISHER", ""));
-	doc->documentInfo.setDate(attrs.valueAsString("DOCDATE", ""));
-	doc->documentInfo.setType(attrs.valueAsString("DOCTYPE", ""));
-	doc->documentInfo.setFormat(attrs.valueAsString("DOCFORMAT", ""));
-	doc->documentInfo.setIdent(attrs.valueAsString("DOCIDENT", ""));
-	doc->documentInfo.setSource(attrs.valueAsString("DOCSOURCE", ""));
-	doc->documentInfo.setLangInfo(attrs.valueAsString("DOCLANGINFO", ""));
-	doc->documentInfo.setRelation(attrs.valueAsString("DOCRELATION", ""));
-	doc->documentInfo.setCover(attrs.valueAsString("DOCCOVER", ""));
-	doc->documentInfo.setRights(attrs.valueAsString("DOCRIGHTS", ""));
-	doc->documentInfo.setContrib(attrs.valueAsString("DOCCONTRIB", ""));
-}
-
-void Scribus150Format::readGuideSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
-{
-	PrefsManager* prefsManager = PrefsManager::instance();
-	doc->guidesSettings.minorGridSpacing = attrs.valueAsDouble("MINGRID", prefsManager->appPrefs.guidesPrefs.minorGridSpacing);
-	doc->guidesSettings.majorGridSpacing = attrs.valueAsDouble("MAJGRID", prefsManager->appPrefs.guidesPrefs.majorGridSpacing);
-	doc->guidesSettings.gridShown    = attrs.valueAsBool("SHOWGRID", false);
-	doc->guidesSettings.guidesShown  =attrs.valueAsBool("SHOWGUIDES", true);
-	doc->guidesSettings.colBordersShown  = attrs.valueAsBool("showcolborders", false);
-	doc->guidesSettings.framesShown  = attrs.valueAsBool("SHOWFRAME", true);
-	doc->guidesSettings.layerMarkersShown = attrs.valueAsBool("SHOWLAYERM", false);
-	doc->guidesSettings.marginsShown = attrs.valueAsBool("SHOWMARGIN", true);
-	doc->guidesSettings.baselineGridShown    = attrs.valueAsBool("SHOWBASE", false);
-	doc->guidesSettings.showPic      = attrs.valueAsBool("SHOWPICT", true);
-	doc->guidesSettings.linkShown    = attrs.valueAsBool("SHOWLINK", false);
-	doc->guidesSettings.showControls = attrs.valueAsBool("SHOWControl", false);
-	doc->guidesSettings.rulerMode    = attrs.valueAsBool("rulerMode", true);
-	doc->guidesSettings.rulersShown  = attrs.valueAsBool("showrulers", true);
-	doc->guidesSettings.showBleed    = attrs.valueAsBool("showBleed", true);
-	if (attrs.hasAttribute("MARGC"))
-		doc->guidesSettings.marginColor  = QColor(attrs.valueAsString("MARGC"));
-	if (attrs.hasAttribute("MINORC"))
-		doc->guidesSettings.minorGridColor = QColor(attrs.valueAsString("MINORC"));
-	if (attrs.hasAttribute("MAJORC"))
-		doc->guidesSettings.majorGridColor = QColor(attrs.valueAsString("MAJORC"));
-	if (attrs.hasAttribute("GuideC"))
-		doc->guidesSettings.guideColor = QColor(attrs.valueAsString("GuideC"));
-	if (attrs.hasAttribute("BaseC"))
-		doc->guidesSettings.baselineGridColor  = QColor(attrs.valueAsString("BaseC"));
-	doc->guidesSettings.guidePlacement   = attrs.valueAsBool("BACKG", true);
-	doc->guidesSettings.guideRad = attrs.valueAsDouble("GuideRad", 10.0);
-	doc->guidesSettings.grabRadius  = attrs.valueAsInt("GRAB", 4);
-}
-
-void Scribus150Format::readToolSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
-{
-	QString defFont = attrs.valueAsString("DFONT");
-	m_AvailableFonts->findFont(defFont, doc);
-
-	doc->itemToolPrefs.defFont = defFont;
-	doc->itemToolPrefs.defSize = qRound(attrs.valueAsDouble("DSIZE", 12.0) * 10);
-	doc->itemToolPrefs.dCols   = attrs.valueAsInt("DCOL", 1);
-	doc->itemToolPrefs.dGap    = attrs.valueAsDouble("DGAP", 0.0);
-
-	doc->itemToolPrefs.polyC   = attrs.valueAsInt("POLYC", 4);
-	doc->itemToolPrefs.polyF   = attrs.valueAsDouble("POLYF", 0.5);
-	doc->itemToolPrefs.polyR   = attrs.valueAsDouble("POLYR", 0.0);
-	doc->itemToolPrefs.polyCurvature = attrs.valueAsDouble("POLYCUR", 0.0);
-	doc->itemToolPrefs.polyFd  = attrs.valueAsInt("POLYFD", 0);
-	doc->itemToolPrefs.polyS   = attrs.valueAsBool("POLYS", false);
-
-	doc->itemToolPrefs.dStartArrow = attrs.valueAsInt("StartArrow", 0);
-	doc->itemToolPrefs.dEndArrow   = attrs.valueAsInt("EndArrow", 0);
-	doc->itemToolPrefs.scaleX      = attrs.valueAsDouble("PICTSCX", 1.0);
-	doc->itemToolPrefs.scaleY      = attrs.valueAsDouble("PICTSCY", 1.0);
-	doc->itemToolPrefs.scaleType   = attrs.valueAsBool("PSCALE", true);
-	doc->itemToolPrefs.aspectRatio = attrs.valueAsBool("PASPECT", false);
-	doc->itemToolPrefs.lowResType  = attrs.valueAsInt("HalfRes", 1);
-	doc->itemToolPrefs.useEmbeddedPath = attrs.valueAsBool("EmbeddedPath", false);
-	if (attrs.hasAttribute("PEN"))
-		doc->itemToolPrefs.dPen = attrs.valueAsString("PEN");
-	if (attrs.hasAttribute("BRUSH"))
-		doc->itemToolPrefs.dBrush = attrs.valueAsString("BRUSH");
-	if (attrs.hasAttribute("PENLINE"))
-		doc->itemToolPrefs.dPenLine = attrs.valueAsString("PENLINE");
-	if (attrs.hasAttribute("PENTEXT"))
-		doc->itemToolPrefs.dPenText = attrs.valueAsString("PENTEXT");
-	if (attrs.hasAttribute("StrokeText"))
-		doc->itemToolPrefs.dStrokeText = attrs.valueAsString("StrokeText");
-	doc->itemToolPrefs.dTextBackGround  = attrs.valueAsString("TextBackGround", CommonStrings::None);
-	doc->itemToolPrefs.dTextLineColor   = attrs.valueAsString("TextLineColor", CommonStrings::None);
-	doc->itemToolPrefs.dTextBackGroundShade =attrs.valueAsInt("TextBackGroundShade", 100);
-	doc->itemToolPrefs.dTextLineShade   = attrs.valueAsInt("TextLineShade", 100);
-	doc->itemToolPrefs.dTextPenShade    = attrs.valueAsInt("TextPenShade", 100);
-	doc->itemToolPrefs.dTextStrokeShade = attrs.valueAsInt("TextStrokeShade", 100);
-	doc->itemToolPrefs.dLineArt    = static_cast<Qt::PenStyle>(attrs.valueAsInt("STIL"));
-	doc->itemToolPrefs.dLstyleLine = static_cast<Qt::PenStyle>(attrs.valueAsInt("STILLINE"));
-	doc->itemToolPrefs.dWidth      = attrs.valueAsDouble("WIDTH", 0.0);
-	doc->itemToolPrefs.dWidthLine  = attrs.valueAsDouble("WIDTHLINE", 1.0);
-	doc->itemToolPrefs.dShade2     = attrs.valueAsInt("PENSHADE", 100);
-	doc->itemToolPrefs.dShadeLine  = attrs.valueAsInt("LINESHADE", 100);
-	doc->itemToolPrefs.dShade      = attrs.valueAsInt("BRUSHSHADE", 100);
-	doc->opToolPrefs.magMin      = attrs.valueAsInt("MAGMIN", 10);
-	doc->opToolPrefs.magMax      = attrs.valueAsInt("MAGMAX", 3200);
-	doc->opToolPrefs.magStep     = attrs.valueAsInt("MAGSTEP", 200);
-	doc->opToolPrefs.dispX       = attrs.valueAsDouble("dispX", 10.0);
-	doc->opToolPrefs.dispY       = attrs.valueAsDouble("dispY", 10.0);
-	doc->opToolPrefs.constrain   = attrs.valueAsDouble("constrain", 15.0);
-	//CB Reset doc zoom step value to 200% instead of old values.
-	if (doc->opToolPrefs.magStep < 100)
-		doc->opToolPrefs.magStep = 200;
-	doc->itemToolPrefs.tabFillChar = attrs.valueAsString("TabFill","");
-	doc->itemToolPrefs.dTabWidth   = attrs.valueAsDouble("TabWidth", 36.0);
-	if (attrs.hasAttribute("CPICT"))
-		doc->itemToolPrefs.dBrushPict = attrs.valueAsString("CPICT");
-	doc->itemToolPrefs.shadePict = attrs.valueAsInt("PICTSHADE", 100);
-}
-
-void Scribus150Format::readTypographicSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
-{
-	doc->typographicSettings.valueSuperScript   = attrs.valueAsInt("VHOCH");
-	doc->typographicSettings.scalingSuperScript = attrs.valueAsInt("VHOCHSC");
-	doc->typographicSettings.valueSubScript     = attrs.valueAsInt("VTIEF");
-	doc->typographicSettings.scalingSubScript   = attrs.valueAsInt("VTIEFSC");
-	doc->typographicSettings.valueSmallCaps     = attrs.valueAsInt("VKAPIT");
-	doc->guidesSettings.valueBaselineGrid      = attrs.valueAsDouble("BASEGRID", 12.0);
-	doc->guidesSettings.offsetBaselineGrid     = attrs.valueAsDouble("BASEO", 0.0);
-	doc->typographicSettings.autoLineSpacing    = attrs.valueAsInt("AUTOL", 20);
-	doc->typographicSettings.valueUnderlinePos  = attrs.valueAsInt("UnderlinePos", -1);
-	doc->typographicSettings.valueUnderlineWidth  = attrs.valueAsInt("UnderlineWidth", -1);
-	doc->typographicSettings.valueStrikeThruPos   = attrs.valueAsInt("StrikeThruPos", -1);
-	doc->typographicSettings.valueStrikeThruWidth = attrs.valueAsInt("StrikeThruWidth", -1);
-}
-
-bool Scribus150Format::readPageSets(ScribusDoc* doc, ScXmlStreamReader& reader)
-{
-	struct PageSet pageS;
-	ScXmlStreamAttributes attrs;
-
-	doc->pageSets.clear();
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		reader.readNext();
-		QStringRef tagName = reader.name();
-		if(reader.isStartElement())
-			attrs = reader.attributes();
-		if (reader.isEndElement() && tagName == "PageSets")
-			break;
-		if(reader.isStartElement() && tagName == "Set")
-		{
-			ScXmlStreamAttributes attrs = reader.scAttributes();
-			pageS.Name      = CommonStrings::untranslatePageSetString(attrs.valueAsString("Name"));
-			pageS.FirstPage = attrs.valueAsInt("FirstPage", 0);
-			pageS.Rows      = attrs.valueAsInt("Rows", 1);
-			pageS.Columns   = attrs.valueAsInt("Columns", 1);
-//			pageS.GapHorizontal = attrs.valueAsDouble("GapHorizontal", 0);
-//			pageS.GapVertical   = attrs.valueAsDouble("GapVertical", 0);
-//			pageS.GapBelow      = attrs.valueAsDouble("GapBelow", 0);
-			pageS.pageNames.clear();
-		}
-		if(reader.isEndElement() && tagName == "Set")
-		{
-			doc->pageSets.append(pageS);
-			if ((doc->pageSets.count()-1 == doc->currentPageLayout) && ((doc->GapHorizontal < 0) && (doc->GapVertical < 0)))
-			{
-				doc->GapHorizontal = attrs.valueAsDouble("GapHorizontal", 0.0);
-				doc->GapVertical   = attrs.valueAsDouble("GapBelow", 0.0);
-			}
-		}
-		if (reader.isStartElement() && tagName == "PageNames")
-			pageS.pageNames.append(CommonStrings::untranslatePageSetLocString(attrs.valueAsString("Name")));
-	}
-	return !reader.hasError();
-}
-
-bool Scribus150Format::readCheckProfile(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
-{
-	struct CheckerPrefs checkerSettings;
-	QString profileName = attrs.valueAsString("Name");
-	if (profileName.isEmpty())
-		return true;
-	checkerSettings.ignoreErrors      = attrs.valueAsBool("ignoreErrors", false);
-	checkerSettings.autoCheck         = attrs.valueAsBool("autoCheck", true);
-	checkerSettings.checkGlyphs       = attrs.valueAsBool("checkGlyphs", true);
-	checkerSettings.checkOrphans      = attrs.valueAsBool("checkOrphans", true);
-	checkerSettings.checkOverflow     = attrs.valueAsBool("checkOverflow", true);
-	checkerSettings.checkPictures     = attrs.valueAsBool("checkPictures", true);
-	checkerSettings.checkResolution   = attrs.valueAsBool("checkResolution", true);
-	checkerSettings.checkTransparency = attrs.valueAsBool("checkTransparency", true);
-	checkerSettings.minResolution     = attrs.valueAsDouble("minResolution", 72.0);
-	checkerSettings.maxResolution     = attrs.valueAsDouble("maxResolution", 4800.0);
-	checkerSettings.checkAnnotations  = attrs.valueAsBool("checkAnnotations", false);
-	checkerSettings.checkRasterPDF    = attrs.valueAsBool("checkRasterPDF", true);
-	checkerSettings.checkForGIF       = attrs.valueAsBool("checkForGIF", true);
-	checkerSettings.ignoreOffLayers   = attrs.valueAsBool("ignoreOffLayers", false);
-	doc->checkerProfiles[profileName] = checkerSettings;
-	return true;
-}
-
-bool Scribus150Format::readColor(ColorList& colors, ScXmlStreamAttributes& attrs)
-{
-	ScColor color;
-	if (attrs.hasAttribute("CMYK"))
-		color.setNamedColor(attrs.valueAsString("CMYK"));
-	else
-		color.fromQColor(QColor(attrs.valueAsString("RGB")));
-	color.setSpotColor( attrs.valueAsBool("Spot", false) );
-	color.setRegistrationColor( attrs.valueAsBool("Register", false) );
-	QString name = attrs.valueAsString("NAME");
-	colors.insert((name.isEmpty()) ? color.name() : name, color);
-	return true;
-}
-
-void Scribus150Format::readCharacterStyleAttrs(ScribusDoc *doc, ScXmlStreamAttributes& attrs, CharStyle & newStyle)
-{
-	static const QString CNAME("CNAME");
-	if (attrs.hasAttribute(CNAME))
-		newStyle.setName(attrs.valueAsString(CNAME));
-
-	// The default style attribute must be correctly set before trying to assign a parent
-	static const QString DEFAULTSTYLE("DefaultStyle");
-	if (newStyle.hasName() && attrs.hasAttribute(DEFAULTSTYLE))
-		newStyle.setDefaultStyle(attrs.valueAsInt(DEFAULTSTYLE));
-	else if (newStyle.name() == CommonStrings::DefaultCharacterStyle || newStyle.name() == CommonStrings::trDefaultCharacterStyle)
-		newStyle.setDefaultStyle(true);
-	else
-		newStyle.setDefaultStyle(false);
-
-	static const QString CPARENT("CPARENT");
-	if (attrs.hasAttribute(CPARENT))
-		newStyle.setParent(attrs.valueAsString(CPARENT));
-
-	static const QString FONT("FONT");
-	if (attrs.hasAttribute(FONT))
-		newStyle.setFont(m_AvailableFonts->findFont(attrs.valueAsString(FONT), doc));
-	
-	static const QString FONTSIZE("FONTSIZE");
-	if (attrs.hasAttribute(FONTSIZE))
-		newStyle.setFontSize(qRound(attrs.valueAsDouble(FONTSIZE) * 10));
-	
-	static const QString FCOLOR("FCOLOR");
-	if (attrs.hasAttribute(FCOLOR))
-		newStyle.setFillColor(attrs.valueAsString(FCOLOR));
-	
-	static const QString KERN("KERN");
-	if (attrs.hasAttribute(KERN))
-		newStyle.setTracking(qRound(attrs.valueAsDouble(KERN) * 10));
-	
-	static const QString FSHADE("FSHADE");
-	if (attrs.hasAttribute(FSHADE))
-		newStyle.setFillShade(attrs.valueAsInt(FSHADE));
-	
-	static const QString EFFECTS("EFFECTS");
-	if (attrs.hasAttribute(EFFECTS))
-		newStyle.setFeatures(static_cast<StyleFlag>(attrs.valueAsInt(EFFECTS)).featureList());
-	
-	static const QString EFFECT("EFFECT");
-	if (attrs.hasAttribute(EFFECT))
-		newStyle.setFeatures(static_cast<StyleFlag>(attrs.valueAsInt(EFFECT)).featureList());
-	
-	static const QString FEATURES("FEATURES");
-	if (attrs.hasAttribute(FEATURES))
-		newStyle.setFeatures(attrs.valueAsString(FEATURES).split( " ", QString::SkipEmptyParts));
-	
-	static const QString SCOLOR("SCOLOR");
-	if (attrs.hasAttribute(SCOLOR))
-		newStyle.setStrokeColor(attrs.valueAsString(SCOLOR, CommonStrings::None));
-	
-	static const QString SSHADE("SSHADE");
-	if (attrs.hasAttribute(SSHADE))
-		newStyle.setStrokeShade(attrs.valueAsInt(SSHADE));
-	
-	static const QString SCALEH("SCALEH");
-	if (attrs.hasAttribute(SCALEH))
-		newStyle.setScaleH(qRound(attrs.valueAsDouble(SCALEH) * 10));
-	
-	static const QString SCALEV("SCALEV");
-	if (attrs.hasAttribute(SCALEV))
-		newStyle.setScaleV(qRound(attrs.valueAsDouble(SCALEV) * 10));
-	
-	static const QString BASEO("BASEO");
-	if (attrs.hasAttribute(BASEO))
-		newStyle.setBaselineOffset(qRound(attrs.valueAsDouble(BASEO) * 10));
-	
-	static const QString TXTSHX("TXTSHX");
-	if (attrs.hasAttribute(TXTSHX))
-		newStyle.setShadowXOffset(qRound(attrs.valueAsDouble(TXTSHX) * 10));
-	
-	static const QString TXTSHY("TXTSHY");
-	if (attrs.hasAttribute(TXTSHY))
-		newStyle.setShadowYOffset(qRound(attrs.valueAsDouble(TXTSHY) * 10));
-	
-	static const QString TXTOUT("TXTOUT");
-	if (attrs.hasAttribute(TXTOUT))
-		newStyle.setOutlineWidth(qRound(attrs.valueAsDouble(TXTOUT) * 10));
-	
-	static const QString TXTULP("TXTULP");
-	if (attrs.hasAttribute(TXTULP))
-		newStyle.setUnderlineOffset(qRound(attrs.valueAsDouble(TXTULP) * 10));
-	
-	static const QString TXTULW("TXTULW");
-	if (attrs.hasAttribute(TXTULW))
-		newStyle.setUnderlineWidth(qRound(attrs.valueAsDouble(TXTULW) * 10));
-	
-	static const QString TXTSTP("TXTSTP");
-	if (attrs.hasAttribute(TXTSTP))
-		newStyle.setStrikethruOffset(qRound(attrs.valueAsDouble(TXTSTP) * 10));
-	
-	static const QString TXTSTW("TXTSTW");
-	if (attrs.hasAttribute(TXTSTW))
-		newStyle.setStrikethruWidth(qRound(attrs.valueAsDouble(TXTSTW) * 10));
-
-	static const QString SHORTCUT("SHORTCUT");
-	if (attrs.hasAttribute(SHORTCUT))
-		newStyle.setShortcut(attrs.valueAsString(SHORTCUT));
-
-	static const QString WORDTRACK("wordTrack");
-	if (attrs.hasAttribute(WORDTRACK))
-		newStyle.setWordTracking(attrs.valueAsDouble(WORDTRACK));
-}
-
-void Scribus150Format::readParagraphStyle(ScribusDoc *doc, ScXmlStreamReader& reader, ParagraphStyle& newStyle, SCFonts &fonts)
-{
-	ScXmlStreamAttributes attrs = reader.scAttributes();
-
-	newStyle.erase();
-	newStyle.setName(attrs.valueAsString("NAME", ""));
-	// The default style attribute must be correctly set before trying to assign a parent
-	static const QString DEFAULTSTYLE("DefaultStyle");
-	if (attrs.hasAttribute(DEFAULTSTYLE))
-		newStyle.setDefaultStyle(attrs.valueAsInt(DEFAULTSTYLE));
-	else if (newStyle.name() == CommonStrings::DefaultParagraphStyle || newStyle.name() == CommonStrings::trDefaultParagraphStyle)
-		newStyle.setDefaultStyle(true);
-	else
-		newStyle.setDefaultStyle(false);
-	newStyle.setParent(attrs.valueAsString("PARENT", ""));
-
-	static const QString LINESPMode("LINESPMode");
-	if (attrs.hasAttribute(LINESPMode))
-		newStyle.setLineSpacingMode(static_cast<ParagraphStyle::LineSpacingMode>(attrs.valueAsInt(LINESPMode)));
-
-	static const QString LINESP("LINESP");
-	if (attrs.hasAttribute(LINESP))
-		newStyle.setLineSpacing(attrs.valueAsDouble(LINESP));
-
-	static const QString INDENT("INDENT");
-	if (attrs.hasAttribute(INDENT))
-		newStyle.setLeftMargin(attrs.valueAsDouble(INDENT));
-
-	static const QString RMARGIN("RMARGIN");
-	if (attrs.hasAttribute(RMARGIN))
-		newStyle.setRightMargin(attrs.valueAsDouble(RMARGIN));
-
-	static const QString FIRST("FIRST");
-	if (attrs.hasAttribute(FIRST))
-		newStyle.setFirstIndent(attrs.valueAsDouble(FIRST));
-
-	static const QString ALIGN("ALIGN");
-	if (attrs.hasAttribute(ALIGN))
-		newStyle.setAlignment(static_cast<ParagraphStyle::AlignmentType>(attrs.valueAsInt(ALIGN)));
-
-	static const QString VOR("VOR");
-	if (attrs.hasAttribute(VOR))
-		newStyle.setGapBefore(attrs.valueAsDouble(VOR));
-
-	static const QString NACH("NACH");
-	if (attrs.hasAttribute(NACH))
-		newStyle.setGapAfter(attrs.valueAsDouble(NACH));
-
-	static const QString DROP("DROP");
-	if (attrs.hasAttribute(DROP))
-		newStyle.setHasDropCap(static_cast<bool>(attrs.valueAsInt(DROP)));
-
-	static const QString DROPLIN("DROPLIN");
-	if (attrs.hasAttribute(DROPLIN))
-		newStyle.setDropCapLines(attrs.valueAsInt(DROPLIN));
-
-	static const QString DROPDIST("DROPDIST");
-	if (attrs.hasAttribute(DROPDIST))
-		newStyle.setDropCapOffset(attrs.valueAsDouble(DROPDIST));
-
-	static const QString PSHORTCUT("PSHORTCUT");
-	if (attrs.hasAttribute(PSHORTCUT))
-		newStyle.setShortcut(attrs.valueAsString(PSHORTCUT));
-	
-	static const QString OpticalMargins("OpticalMargins");
-	if (attrs.hasAttribute(OpticalMargins))
-		newStyle.setOpticalMargins(attrs.valueAsInt(OpticalMargins));
-
-	static const QString HyphenationMode("HyphenationMode");
-	if (attrs.hasAttribute(HyphenationMode))
-		newStyle.setHyphenationMode(attrs.valueAsInt(HyphenationMode));
-
-	static const QString MinWordTrack("MinWordTrack");
-	if (attrs.hasAttribute(MinWordTrack))
-		newStyle.setMinWordTracking(attrs.valueAsDouble(MinWordTrack));
-
-	static const QString NormWordTrack("NormWordTrack");
-	if (attrs.hasAttribute(NormWordTrack))
-		newStyle.charStyle().setWordTracking(attrs.valueAsDouble(NormWordTrack));
-
-	static const QString MinGlyphShrink("MinGlyphShrink");
-	if (attrs.hasAttribute(MinGlyphShrink))
-		newStyle.setMinGlyphExtension(attrs.valueAsDouble(MinGlyphShrink));
-
-	static const QString MaxGlyphExtend("MaxGlyphExtend");
-	if (attrs.hasAttribute(MaxGlyphExtend))
-		newStyle.setMaxGlyphExtension(attrs.valueAsDouble(MaxGlyphExtend));
-	
-	readCharacterStyleAttrs( doc, attrs, newStyle.charStyle());
-
-	//	newStyle.tabValues().clear();
-	QList<ParagraphStyle::TabRecord> tbs;
-	newStyle.resetTabValues();
-	QStringRef thisTagName = reader.name();
-	while (!reader.atEnd() && !reader.hasError())
-	{
-		reader.readNext();
-		if (reader.isEndElement() && reader.name() == thisTagName)
-			break;
-		if (reader.isStartElement() && reader.name() == "Tabs")
-		{
-			ParagraphStyle::TabRecord tb;
-			ScXmlStreamAttributes attrs2 = reader.scAttributes();
-			tb.tabPosition = attrs2.valueAsDouble("Pos");
-			tb.tabType     = attrs2.valueAsInt("Type");
-			QString tbCh   = attrs2.valueAsString("Fill","");
-			tb.tabFillChar = tbCh.isEmpty() ? QChar() : tbCh[0];
-			tbs.append(tb);
-		}
-	}
-	if (tbs.count() > 0)
-		newStyle.setTabValues(tbs);
-	
-	fixLegacyParStyle(newStyle);
-}
-
-void Scribus150Format::readLayers(ScLayer& layer, ScXmlStreamAttributes& attrs)
-{
-	int lId   = attrs.valueAsInt("NUMMER");
-	int level = attrs.valueAsInt("LEVEL");
-	layer = ScLayer( attrs.valueAsString("NAME"), level, lId);
-	layer.isViewable   = attrs.valueAsInt("SICHTBAR");
-	layer.isPrintable  = attrs.valueAsInt("DRUCKEN");
-	layer.isEditable   = attrs.valueAsInt("EDIT", 1);
-	layer.flowControl  = attrs.valueAsInt("FLOW", 1);
-	layer.transparency = attrs.valueAsDouble("TRANS", 1.0);
-	layer.blendMode    = attrs.valueAsInt("BLEND", 0);
-	layer.outlineMode  = attrs.valueAsInt("OUTL", 0);
-	if (attrs.hasAttribute("LAYERC"))
-		layer.markerColor =  QColor(attrs.valueAsString("LAYERC","#000000"));
-}
-
-bool Scribus150Format::readArrows(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
-{
-	double xa, ya;
-	struct ArrowDesc arrow;
-	arrow.name = attrs.valueAsString("Name");
-	arrow.userArrow = true;
-	QString tmp = attrs.valueAsString("Points");
-	ScTextStream fp(&tmp, QIODevice::ReadOnly);
-	unsigned int numPoints = attrs.valueAsUInt("NumPoints");
-	for (uint cx = 0; cx < numPoints; ++cx)
-	{
-		fp >> xa;
-		fp >> ya;
-		arrow.points.addPoint(xa, ya);
-	}
-	doc->arrowStyles.append(arrow);
-	return true;
-}
-
-bool Scribus150Format::readMultiline(multiLine& ml, ScXmlStreamReader& reader)
-{
-	ml = multiLine();
-	ScXmlStreamAttributes rattrs = reader.scAttributes();
-	QStringRef tagName = reader.name();
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		ScXmlStreamReader::TokenType tType = reader.readNext();
-		if (tType == ScXmlStreamReader::EndElement && reader.name() == tagName)
-			break;
-		if (tType == ScXmlStreamReader::StartElement && reader.name() == "SubLine")
-		{
-			struct SingleLine sl;
-			ScXmlStreamAttributes attrs = reader.scAttributes();
-			sl.Color    = attrs.valueAsString("Color");
-			sl.Dash     = attrs.valueAsInt("Dash");
-			sl.LineEnd  = attrs.valueAsInt("LineEnd");
-			sl.LineJoin = attrs.valueAsInt("LineJoin");
-			sl.Shade    = attrs.valueAsInt("Shade");
-			sl.Width    = attrs.valueAsDouble("Width");
-			ml.shortcut = attrs.valueAsString("Shortcut");
-			ml.push_back(sl);
-		}
-	}
-	return !reader.hasError();
-}
-
-bool Scribus150Format::readBookMark(ScribusDoc::BookMa& bookmark, int& elem, ScXmlStreamAttributes& attrs)
-{
-	elem = attrs.valueAsInt("Element");
-	bookmark.PageObject = NULL;
-	bookmark.Title  = attrs.valueAsString("Title");
-	bookmark.Text   = attrs.valueAsString("Text");
-	bookmark.Aktion = attrs.valueAsString("Aktion");
-	bookmark.ItemNr = attrs.valueAsInt("ItemNr");
-	bookmark.First  = attrs.valueAsInt("First");
-	bookmark.Last   = attrs.valueAsInt("Last");
-	bookmark.Prev   = attrs.valueAsInt("Prev");
-	bookmark.Next   = attrs.valueAsInt("Next");
-	bookmark.Parent = attrs.valueAsInt("Parent");
-	return true;
-}
-
-bool Scribus150Format::readPDFOptions(ScribusDoc* doc, ScXmlStreamReader& reader)
-{
-	ScXmlStreamAttributes attrs = reader.scAttributes();
-
-	doc->PDF_Options.firstUse   = attrs.valueAsBool("firstUse", true);
-	doc->PDF_Options.Articles   = attrs.valueAsBool("Articles");
-	doc->PDF_Options.Thumbnails = attrs.valueAsBool("Thumbnails");
-	doc->PDF_Options.Compress   = attrs.valueAsBool("Compress");
-	doc->PDF_Options.CompressMethod = (PDFOptions::PDFCompression)attrs.valueAsInt("CMethod", 0);
-	doc->PDF_Options.Quality    = attrs.valueAsInt("Quality", 0);
-	doc->PDF_Options.RecalcPic  = attrs.valueAsBool("RecalcPic");
-	doc->PDF_Options.Bookmarks  = attrs.valueAsBool("Bookmarks");
-	doc->PDF_Options.MirrorH    = attrs.valueAsBool("MirrorH", false);
-	doc->PDF_Options.MirrorV    = attrs.valueAsBool("MirrorV", false);
-	doc->PDF_Options.RotateDeg  = attrs.valueAsInt("RotateDeg", 0);
-	doc->PDF_Options.doClip     = attrs.valueAsBool("Clip", false);
-	doc->PDF_Options.PresentMode = attrs.valueAsBool("PresentMode");
-	doc->PDF_Options.PicRes     = attrs.valueAsInt("PicRes");
-	// Fixme: check input pdf version
-	doc->PDF_Options.Version    = (PDFOptions::PDFVersion) attrs.valueAsInt("Version");
-	doc->PDF_Options.Resolution = attrs.valueAsInt("Resolution");
-	doc->PDF_Options.Binding    = attrs.valueAsInt("Binding");
-	doc->PDF_Options.fileName   = "";
-	doc->PDF_Options.isGrayscale   = attrs.valueAsBool("Grayscale", false);
-	doc->PDF_Options.UseRGB        = attrs.valueAsBool("RGBMode", false);
-	doc->PDF_Options.UseProfiles   = attrs.valueAsBool("UseProfiles", false);
-	doc->PDF_Options.UseProfiles2  = attrs.valueAsBool("UseProfiles2", false);
-	doc->PDF_Options.Intent        = attrs.valueAsInt("Intent", 1);
-	doc->PDF_Options.Intent2       = attrs.valueAsInt("Intent2", 1);
-	doc->PDF_Options.SolidProf     = attrs.valueAsString("SolidP", "");
-	doc->PDF_Options.ImageProf     = attrs.valueAsString("ImageP", "");
-	doc->PDF_Options.PrintProf     = attrs.valueAsString("PrintP", "");
-	doc->PDF_Options.Info          = attrs.valueAsString("InfoString", "");
-	doc->PDF_Options.bleeds.Top    = attrs.valueAsDouble("BTop", 0.0);
-	doc->PDF_Options.bleeds.Left   = attrs.valueAsDouble("BLeft", 0.0);
-	doc->PDF_Options.bleeds.Right  = attrs.valueAsDouble("BRight", 0.0);
-	doc->PDF_Options.bleeds.Bottom = attrs.valueAsDouble("BBottom", 0.0);
-	doc->PDF_Options.useDocBleeds  = attrs.valueAsBool("useDocBleeds", true);
-	doc->PDF_Options.cropMarks     = attrs.valueAsBool("cropMarks", false);
-	doc->PDF_Options.bleedMarks    = attrs.valueAsBool("bleedMarks", false);
-	doc->PDF_Options.registrationMarks = attrs.valueAsBool("registrationMarks", false);
-	doc->PDF_Options.colorMarks    = attrs.valueAsBool("colorMarks", false);
-	doc->PDF_Options.docInfoMarks  = attrs.valueAsBool("docInfoMarks", false);
-	doc->PDF_Options.markOffset    = attrs.valueAsDouble("markOffset", 0.0);
-	doc->PDF_Options.EmbeddedI     = attrs.valueAsBool("ImagePr", false);
-	doc->PDF_Options.PassOwner     = attrs.valueAsString("PassOwner", "");
-	doc->PDF_Options.PassUser      = attrs.valueAsString("PassUser", "");
-	doc->PDF_Options.Permissions   = attrs.valueAsInt("Permissions", -4);
-	doc->PDF_Options.Encrypt       = attrs.valueAsBool("Encrypt", false);
-	doc->PDF_Options.useLayers     = attrs.valueAsBool("UseLayers", false);
-	doc->PDF_Options.UseLPI        = attrs.valueAsBool("UseLpi", false);
-	doc->PDF_Options.UseSpotColors = attrs.valueAsBool("UseSpotColors", true);
-	doc->PDF_Options.doMultiFile   = attrs.valueAsBool("doMultiFile", false);
-	doc->PDF_Options.displayBookmarks =  attrs.valueAsBool("displayBookmarks", false);
-	doc->PDF_Options.displayFullscreen = attrs.valueAsBool("displayFullscreen", false);
-	doc->PDF_Options.displayLayers = attrs.valueAsBool("displayLayers", false);
-	doc->PDF_Options.displayThumbs = attrs.valueAsBool("displayThumbs", false);
-	doc->PDF_Options.hideMenuBar   = attrs.valueAsBool("hideMenuBar", false);
-	doc->PDF_Options.hideToolBar   = attrs.valueAsBool("hideToolBar", false);
-	doc->PDF_Options.fitWindow     = attrs.valueAsBool("fitWindow", false);
-	doc->PDF_Options.PageLayout    = attrs.valueAsInt("PageLayout", 0);
-	doc->PDF_Options.openAction    = attrs.valueAsString("openAction", "");
-
-	QStringRef tagName = reader.name();
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		reader.readNext();
-		if (reader.isEndElement() && (reader.name() == tagName))
-			break;
-		if (!reader.isStartElement())
-			continue;
-		QStringRef tName = reader.name();
-		attrs = reader.scAttributes();
-		if(tName == "LPI")
-		{
-			struct LPIData lpo;
-			lpo.Angle     = attrs.valueAsInt("Angle");
-			lpo.Frequency = attrs.valueAsInt("Frequency");
-			lpo.SpotFunc  = attrs.valueAsInt("SpotFunction");
-			doc->PDF_Options.LPISettings[attrs.valueAsString("Color")] = lpo;
-		}
-		if(tName == "Fonts")
-		{
-			QString fname = attrs.valueAsString("Name");
-			if (!doc->PDF_Options.EmbedList.contains(fname))
-				doc->PDF_Options.EmbedList.append(fname);
-		}
-		if(tName == "Subset")
-		{
-			QString sname = attrs.valueAsString("Name");
-			if (!doc->PDF_Options.SubsetList.contains(sname))
-				doc->PDF_Options.SubsetList.append(sname);
-		}
-		if(tName == "Effekte")
-		{
-			struct PDFPresentationData ef;
-			ef.pageEffectDuration =  attrs.valueAsInt("pageEffectDuration");
-			ef.pageViewDuration =  attrs.valueAsInt("pageViewDuration");
-			ef.effectType = attrs.valueAsInt("effectType");
-			ef.Dm = attrs.valueAsInt("Dm");
-			ef.M  = attrs.valueAsInt("M");
-			ef.Di = attrs.valueAsInt("Di");
-			doc->PDF_Options.PresentVals.append(ef);
-		}
-	}
-	return !reader.hasError();
-}
-
-bool Scribus150Format::readPrinterOptions(ScribusDoc* doc, ScXmlStreamReader& reader)
-{
-	ScXmlStreamAttributes attrs = reader.scAttributes();
-	doc->Print_Options.firstUse = attrs.valueAsBool("firstUse");
-	doc->Print_Options.toFile   = attrs.valueAsBool("toFile");
-	doc->Print_Options.useAltPrintCommand = attrs.valueAsBool("useAltPrintCommand");
-	doc->Print_Options.outputSeparations  = attrs.valueAsBool("outputSeparations");
-	doc->Print_Options.useSpotColors      = attrs.valueAsBool("useSpotColors");
-	doc->Print_Options.useColor = attrs.valueAsBool("useColor");
-	doc->Print_Options.mirrorH  = attrs.valueAsBool("mirrorH");
-	doc->Print_Options.mirrorV  = attrs.valueAsBool("mirrorV");
-	doc->Print_Options.useICC   = attrs.valueAsBool("useICC");
-	doc->Print_Options.doGCR    = attrs.valueAsBool("doGCR");
-	doc->Print_Options.doClip   = attrs.valueAsBool("doClip");
-	doc->Print_Options.setDevParam  = attrs.valueAsBool("setDevParam");
-	doc->Print_Options.useDocBleeds = attrs.valueAsBool("useDocBleeds");
-	doc->Print_Options.cropMarks    = attrs.valueAsBool("cropMarks");
-	doc->Print_Options.bleedMarks   = attrs.valueAsBool("bleedMarks");
-	doc->Print_Options.registrationMarks = attrs.valueAsBool("registrationMarks");
-	doc->Print_Options.colorMarks   = attrs.valueAsBool("colorMarks");
-	doc->Print_Options.includePDFMarks = attrs.valueAsBool("includePDFMarks", "1");
-	if (attrs.hasAttribute("PrintEngine"))
-		doc->Print_Options.prnEngine = (PrintEngine) attrs.valueAsInt("PrintEngine", 3);
-	else
-		doc->Print_Options.prnEngine = (PrintEngine) attrs.valueAsInt("PSLevel", 3);
-	doc->Print_Options.markOffset    = attrs.valueAsDouble("markOffset");
-	doc->Print_Options.bleeds.Top    = attrs.valueAsDouble("BleedTop");
-	doc->Print_Options.bleeds.Left   = attrs.valueAsDouble("BleedLeft");
-	doc->Print_Options.bleeds.Right  = attrs.valueAsDouble("BleedRight");
-	doc->Print_Options.bleeds.Bottom = attrs.valueAsDouble("BleedBottom");
-	doc->Print_Options.printer  = attrs.valueAsString("printer");
-	doc->Print_Options.filename = attrs.valueAsString("filename");
-	doc->Print_Options.separationName = attrs.valueAsString("separationName");
-	doc->Print_Options.printerCommand = attrs.valueAsString("printerCommand");
-	doc->Print_Options.copies = 1;
-
-	QStringRef tagName = reader.name();
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		ScXmlStreamReader::TokenType tType = reader.readNext();
-		QStringRef tName = reader.name();
-		if (tType == ScXmlStreamReader::StartElement && tName == "Separation")
-			doc->Print_Options.allSeparations.append(reader.attributes().value("Name").toString());
-		if (tType == ScXmlStreamReader::EndElement && tName == tagName)
-			break;
-	}
-	return !reader.hasError();
-}
-
-bool Scribus150Format::readDocItemAttributes(ScribusDoc *doc, ScXmlStreamReader& reader)
-{
-	QStringRef tagName = reader.name();
-	doc->docItemAttributes.clear();
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		reader.readNext();
-		if (reader.isEndElement() && reader.name() == tagName)
-			break;
-		if(reader.isStartElement() && reader.name() == "ItemAttribute")
-		{
-			ScXmlStreamAttributes attrs = reader.scAttributes();
-			ObjectAttribute objattr;
-			objattr.name  = attrs.valueAsString("Name");
-			objattr.type  = attrs.valueAsString("Type");
-			objattr.value = attrs.valueAsString("Value");
-			objattr.parameter      = attrs.valueAsString("Parameter");
-			objattr.relationship   = attrs.valueAsString("Relationship");
-			objattr.relationshipto = attrs.valueAsString("RelationshipTo");
-			objattr.autoaddto = attrs.valueAsString("AutoAddTo");
-			doc->docItemAttributes.append(objattr);
-		}
-	}
-	return !reader.hasError();
-}
-
-bool Scribus150Format::readTableOfContents(ScribusDoc* doc, ScXmlStreamReader& reader)
-{
-	QStringRef tagName = reader.name();
-	m_Doc->docToCSetups.clear();
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		reader.readNext();
-		if (reader.isEndElement() && reader.name() == tagName)
-			break;
-		if(reader.isStartElement() && reader.name() == "TableOfContents")
-		{
-			ScXmlStreamAttributes attrs = reader.scAttributes();
-			ToCSetup tocsetup;
-			tocsetup.name = attrs.valueAsString("Name");
-			tocsetup.itemAttrName = attrs.valueAsString("ItemAttributeName");
-			tocsetup.frameName    = attrs.valueAsString("FrameName");
-			tocsetup.textStyle    = attrs.valueAsString("Style");
-			tocsetup.listNonPrintingFrames = QVariant(attrs.valueAsString("ListNonPrinting")).toBool();
-			QString numberPlacement = attrs.valueAsString("NumberPlacement");
-			if (numberPlacement == "Beginning")
-				tocsetup.pageLocation = Beginning;
-			if (numberPlacement == "End")
-				tocsetup.pageLocation = End;
-			if (numberPlacement == "NotShown")
-				tocsetup.pageLocation = NotShown;
-			doc->docToCSetups.append(tocsetup);
-		}
-	}
-	return !reader.hasError();
-}
-
-bool Scribus150Format::readSections(ScribusDoc* doc, ScXmlStreamReader& reader)
-{
-	QStringRef tagName = reader.name();
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		reader.readNext();
-		if (reader.isEndElement() && reader.name() == tagName)
-			break;
-		if (reader.isStartElement() && reader.name() == "Section")
-		{
-			ScXmlStreamAttributes attrs = reader.scAttributes();
-			struct DocumentSection newSection;
-			newSection.number = attrs.valueAsInt("Number");
-			newSection.name   = attrs.valueAsString("Name");
-			newSection.fromindex = attrs.valueAsInt("From");
-			newSection.toindex   = attrs.valueAsInt("To");
-			QString type = attrs.valueAsString("Type");
-			if (type == "Type_1_2_3")
-				newSection.type=Type_1_2_3;
-			if (type == "Type_i_ii_iii")
-				newSection.type=Type_i_ii_iii;
-			if (type == "Type_I_II_III")
-				newSection.type=Type_I_II_III;
-			if (type == "Type_a_b_c")
-				newSection.type=Type_a_b_c;
-			if (type == "Type_A_B_C")
-				newSection.type=Type_A_B_C;
-			if (type == "Type_None")
-				newSection.type=Type_None;
-			newSection.sectionstartindex = attrs.valueAsInt("Start");
-			newSection.reversed = attrs.valueAsBool("Reversed");
-			newSection.active   = attrs.valueAsBool("Active");
-			doc->sections.insert(newSection.number, newSection);
-		}
-	}
-	return !reader.hasError();
-}
-
-bool Scribus150Format::readHyphen(ScribusDoc *doc, ScXmlStreamReader& reader)
-{
-	QStringRef tagName = reader.name();
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		reader.readNext();
-		if (reader.isEndElement() && reader.name() == tagName)
-			break;
-		if (reader.isStartElement() && reader.name() == "EXCEPTION")
-		{
-			ScXmlStreamAttributes attrs = reader.scAttributes();
-			QString word = attrs.valueAsString("WORD");
-			QString hyph = attrs.valueAsString("HYPHENATED");
-			doc->docHyphenator->specialWords.insert(word, hyph);
-		}
-		else if (reader.isStartElement() && reader.name() == "IGNORE")
-		{
-			ScXmlStreamAttributes attrs = reader.scAttributes();
-			QString word = attrs.valueAsString("WORD");
-			doc->docHyphenator->ignoredWords.insert(word);
-		}
-	}
-	return !reader.hasError();
-}
-
-bool Scribus150Format::readPage(ScribusDoc* doc, ScXmlStreamReader& reader)
-{
-	QStringRef tagName = reader.name();
-
-	ScXmlStreamAttributes attrs = reader.scAttributes();
-	int     pageNum  = attrs.valueAsInt("NUM");
-	QString pageName = attrs.valueAsString("NAM", "");
-	if (tagName == "MASTERPAGE" && pageName.isEmpty())
-	{
-		qDebug() << "scribus150format: corrupted masterpage with empty name detected";
-		return true;
-	}
-	m_Doc->setMasterPageMode(!pageName.isEmpty());
-	Page* newPage = pageName.isEmpty() ? doc->addPage(pageNum) : doc->addMasterPage(pageNum, pageName);
-
-	newPage->LeftPg   = attrs.valueAsInt("LEFT", 0);
-	QString mpName    = attrs.valueAsString("MNAM", "Normal");
-	newPage->MPageNam = m_Doc->masterPageMode() ? QString("") : mpName;
-	if (attrs.hasAttribute("Size"))
-		newPage->m_pageSize = attrs.valueAsString("Size");
-	if (attrs.hasAttribute("Orientation"))
-		newPage->setOrientation(attrs.valueAsInt("Orientation"));
-	newPage->setXOffset(attrs.valueAsDouble("PAGEXPOS"));
-	newPage->setYOffset(attrs.valueAsDouble("PAGEYPOS"));
-	if (attrs.hasAttribute("PAGEWIDTH"))
-		newPage->setWidth(attrs.valueAsDouble("PAGEWIDTH"));
-	else
-		newPage->setWidth(attrs.valueAsDouble("PAGEWITH"));
-	newPage->setHeight(attrs.valueAsDouble("PAGEHEIGHT"));
-	newPage->setInitialHeight(newPage->height());
-	newPage->setInitialWidth(newPage->width());
-	newPage->initialMargins.Top    = qMax(0.0, attrs.valueAsDouble("BORDERTOP"));
-	newPage->initialMargins.Bottom = qMax(0.0, attrs.valueAsDouble("BORDERBOTTOM"));
-	newPage->initialMargins.Left   = qMax(0.0, attrs.valueAsDouble("BORDERLEFT"));
-	newPage->initialMargins.Right  = qMax(0.0, attrs.valueAsDouble("BORDERRIGHT"));
-	newPage->marginPreset   = attrs.valueAsInt("PRESET", 0);
-	newPage->Margins.Top    = newPage->initialMargins.Top;
-	newPage->Margins.Bottom = newPage->initialMargins.Bottom;
-	m_Doc->setMasterPageMode(false);
-	//m_Doc->Pages=&m_Doc->DocPages;
-	// guides reading
-	newPage->guides.setHorizontalAutoGap( attrs.valueAsDouble("AGhorizontalAutoGap", 0.0));
-	newPage->guides.setVerticalAutoGap  ( attrs.valueAsDouble("AGverticalAutoGap", 0.0));
-	newPage->guides.setHorizontalAutoCount( attrs.valueAsInt("AGhorizontalAutoCount", 0) );
-	newPage->guides.setVerticalAutoCount  ( attrs.valueAsInt("AGverticalAutoCount", 0) );
-	newPage->guides.setHorizontalAutoRefer( attrs.valueAsInt("AGhorizontalAutoRefer", 0) );
-	newPage->guides.setVerticalAutoRefer  ( attrs.valueAsInt("AGverticalAutoRefer", 0) );
-	GuideManagerIO::readVerticalGuides(attrs.valueAsString("VerticalGuides"),
-			newPage,
-			GuideManagerCore::Standard,
-			attrs.hasAttribute("NumVGuides"));
-	GuideManagerIO::readHorizontalGuides(attrs.valueAsString("HorizontalGuides"),
-			newPage,
-			GuideManagerCore::Standard,
-			attrs.hasAttribute("NumHGuides"));
-	GuideManagerIO::readSelection(attrs.valueAsString("AGSelection"), newPage);
-	return true;
-}
-
-bool Scribus150Format::readObject(ScribusDoc* doc, ScXmlStreamReader& reader, ItemInfo& info, const QString& baseDir, bool loadPage)
-{
-	QStringRef tagName = reader.name();
-	ScXmlStreamAttributes attrs = reader.scAttributes();
-
-	if (!loadPage)
-	{
-		if (tagName == "PAGEOBJECT" || tagName == "FRAMEOBJECT" || tagName == "PatternItem")
-			doc->setMasterPageMode(false);
-		else
-			doc->setMasterPageMode(true);
-	}
-	int pagenr = -1;
-	if ((!attrs.value("OnMasterPage").isEmpty()) && (tagName == "MASTEROBJECT"))
-	{
-		doc->setCurrentPage(doc->MasterPages.at(doc->MasterNames[attrs.valueAsString("OnMasterPage")]));
-		pagenr = -2;
-	}
-
-	PageItem* newItem = pasteItem(doc, attrs, baseDir, pagenr);
-	newItem->setRedrawBounding();
-	if (tagName == "MASTEROBJECT")
-		newItem->OwnPage = doc->OnPage(newItem);
-	else
-		newItem->OwnPage = attrs.valueAsInt("OwnPage");
-	if (tagName == "PAGEOBJECT")
-		newItem->OnMasterPage = "";
-	QString tmpf = attrs.valueAsString("IFONT", doc->itemToolPrefs.defFont);
-	m_AvailableFonts->findFont(tmpf, doc);
-
-//	newItem->Language = ScMW->GetLang(pg.attribute("LANGUAGE", doc->Language));
-	newItem->isAutoText = attrs.valueAsBool("AUTOTEXT", false);
-	newItem->isEmbedded = attrs.valueAsBool("isInline", false);
-	newItem->gXpos   = attrs.valueAsDouble("gXpos", 0.0);
-	newItem->gYpos   = attrs.valueAsDouble("gYpos", 0.0);
-	newItem->gWidth  = attrs.valueAsDouble("gWidth", newItem->width());
-	newItem->gHeight = attrs.valueAsDouble("gHeight", newItem->height());
-	if (newItem->isAutoText)
-		doc->LastAuto = newItem;
-
-	if (tagName == "FRAMEOBJECT")
-	{
-		doc->FrameItems.append(doc->Items->takeAt(newItem->ItemNr));
-		newItem->ItemNr = doc->FrameItems.count()-1;
-	}
-
-	info.item     = newItem;
-	info.nextItem = attrs.valueAsInt("NEXTITEM", -1);
-	info.ownLink  = newItem->isTableItem ? attrs.valueAsInt("OwnLINK", 0) : 0;
-	info.groupLastItem = 0;
-
-	newItem->isGroupControl = attrs.valueAsBool("isGroupControl", 0);
-	if (newItem->isGroupControl)
-	{
-		int groupLastItem = attrs.valueAsInt("groupsLastItem", 0);
-		// Sanity check for some broken files created using buggy development versions.
-		if ((newItem->Groups.count() == 0) || (groupLastItem <= 0)) 
-		{
-			newItem->isGroupControl = false;
-			newItem->setFillColor("None");
-		}
-		info.groupLastItem = groupLastItem;
-	}
-
-	bool layerFound = true;
-	struct ImageLoadRequest loadingInfo;
-#ifdef HAVE_OSG
-	struct PageItem_OSGFrame::viewDefinition currentView;
-#endif
-	QList<ParagraphStyle::TabRecord> tabValues;
-
-	LastStyles * lastStyle = new LastStyles();
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		ScXmlStreamReader::TokenType tType = reader.readNext();
-		if (reader.isEndElement() && tagName == reader.name())
-			break;
-		if (tType != ScXmlStreamReader::StartElement)
-			continue;
-		QStringRef tName = reader.name();
-		ScXmlStreamAttributes tAtt = reader.scAttributes();
-		if (tName == "CSTOP")
-		{
-			QString name = tAtt.valueAsString("NAME");
-			double ramp  = tAtt.valueAsDouble("RAMP", 0.0);
-			int shade    = tAtt.valueAsInt("SHADE", 100);
-			double opa   = tAtt.valueAsDouble("TRANS", 1.0);
-			newItem->fill_gradient.addStop(SetColor(doc, name, shade), ramp, 0.5, opa, name, shade);
-		}
-
-		if (tName == "ITEXT")
-			readItemText(newItem, tAtt, lastStyle);
-		else if (tName == "para")
-		{
-			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::PARSEP);
-			ParagraphStyle newStyle;
-			PrefsManager* prefsManager = PrefsManager::instance();
-			readParagraphStyle(doc, reader, newStyle, prefsManager->appPrefs.fontPrefs.AvailFonts);
-			newItem->itemText.setStyle(newItem->itemText.length()-1, newStyle);
-			newItem->itemText.setCharStyle(newItem->itemText.length()-1, 1, lastStyle->Style);
-		}
-		else if (tName == "trail")
-		{
-			ParagraphStyle newStyle;
-			PrefsManager* prefsManager = PrefsManager::instance();
-			readParagraphStyle(doc, reader, newStyle, prefsManager->appPrefs.fontPrefs.AvailFonts);
-			newItem->itemText.setStyle(newItem->itemText.length(), newStyle);
-		}
-		else if (tName == "tab")
-			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::TAB);
-		else if (tName == "breakline")
-			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::LINEBREAK);
-		else if (tName == "breakcol")
-			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::COLBREAK);
-		else if (tName == "breakframe")
-			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::FRAMEBREAK);
-		else if (tName == "nbhyphen")
-			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::NBHYPHEN);
-		else if (tName == "nbspace")
-			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::NBSPACE);
-		else if (tName == "zwnbspace")
-			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::ZWNBSPACE);
-		else if (tName == "zwspace")
-			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::ZWSPACE);
-		else if (tName == "var")
-		{
-			CharStyle newStyle;
-			if (tAtt.value("name") == "pgno")
-				newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::PAGENUMBER);
-			else
-				newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::PAGECOUNT);
-			readCharacterStyleAttrs(doc, tAtt, newStyle);
-			newItem->itemText.setCharStyle(newItem->itemText.length()-1, 1, newStyle);
-			lastStyle->StyleStart = newItem->itemText.length()-1;
-			lastStyle->Style = newStyle;
-		}
-		if (tName == "PageItemAttributes")
-		{
-			readPageItemAttributes(newItem, reader);
-		}
-		if (tName == "PSDLayer")
-		{
-			layerFound = true;
-			loadingInfo.blend   = tAtt.valueAsString("Blend");
-			loadingInfo.opacity = tAtt.valueAsInt("Opacity");
-			loadingInfo.visible = tAtt.valueAsBool("Visible");
-			loadingInfo.useMask = tAtt.valueAsBool("useMask", true);
-			newItem->pixm.imgInfo.RequestProps.insert(tAtt.valueAsInt("Layer"), loadingInfo);
-		}
-#ifdef HAVE_OSG
-		if (tName == "OSGViews")
-		{
-			currentView.angleFOV = tAtt.valueAsDouble("angleFOV");
-			QString tmp = "";
-			tmp = tAtt.valueAsString("trackM");
-			ScTextStream fp(&tmp, QIODevice::ReadOnly);
-			double m1, m2, m3, m4;
-			double m5, m6, m7, m8;
-			double m9, m10, m11, m12;
-			double m13, m14, m15, m16;
-			fp >> m1 >> m2 >> m3 >> m4;
-			fp >> m5 >> m6 >> m7 >> m8;
-			fp >> m9 >> m10 >> m11 >> m12;
-			fp >> m13 >> m14 >> m15 >> m16;
-			currentView.trackerMatrix.set(m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16);
-			tmp = "";
-			tmp = tAtt.valueAsString("trackC");
-			ScTextStream fp2(&tmp, QIODevice::ReadOnly);
-			double v1, v2, v3;
-			fp2 >> v1 >> v2 >> v3;
-			currentView.trackerCenter.set(v1, v2, v3);
-			tmp = "";
-			tmp = tAtt.valueAsString("cameraP");
-			ScTextStream fp3(&tmp, QIODevice::ReadOnly);
-			fp3 >> v1 >> v2 >> v3;
-			currentView.cameraPosition.set(v1, v2, v3);
-			tmp = "";
-			tmp = tAtt.valueAsString("cameraU");
-			ScTextStream fp4(&tmp, QIODevice::ReadOnly);
-			fp4 >> v1 >> v2 >> v3;
-			currentView.cameraUp.set(v1, v2, v3);
-			currentView.trackerDist = tAtt.valueAsDouble("trackerDist");
-			currentView.trackerSize = tAtt.valueAsDouble("trackerSize");
-			currentView.illumination = static_cast<PageItem_OSGFrame::LightType>(tAtt.valueAsInt("illumination"));
-			currentView.rendermode = static_cast<PageItem_OSGFrame::RenderType>(tAtt.valueAsInt("rendermode"));
-			currentView.addedTransparency = tAtt.valueAsDouble("trans");
-			currentView.colorAC = QColor(tAtt.valueAsString("colorAC"));
-			currentView.colorFC = QColor(tAtt.valueAsString("colorFC"));
-			if (newItem->asOSGFrame())
-				newItem->asOSGFrame()->viewMap.insert(tAtt.valueAsString("viewName"), currentView);
-		}
-#endif
-		if (tName == "ImageEffect")
-		{
-			struct ImageEffect ef;
-			ef.effectParameters = tAtt.valueAsString("Param");
-			ef.effectCode = tAtt.valueAsInt("Code");
-			newItem->effectsInUse.append(ef);
-		}
-		if (tName == "Tabs")
-		{
-			ParagraphStyle::TabRecord tb;
-			tb.tabPosition = tAtt.valueAsDouble("Pos");
-			tb.tabType     = tAtt.valueAsInt("Type");
-			QString tbCh   = tAtt.valueAsString("Fill", "");
-			tb.tabFillChar = tbCh.isEmpty() ? QChar() : tbCh[0];
-			tabValues.append(tb);
-		}
-		if (tName == "LATEX")
-		{
-			if (newItem->asLatexFrame())
-			{
-				readLatexInfo(newItem->asLatexFrame(), reader);
-			}
-			else
-			{
-				while (!reader.atEnd() && !reader.hasError())
-				{
-					reader.readNext();
-					if (reader.isEndElement() && reader.name() == tName)
-						break;
-				}
-			}
-		}
-	}
-	delete lastStyle;
-
-	if (tabValues.count() > 0) 
-	{
-		ParagraphStyle newDefault(newItem->itemText.defaultStyle());
-		newDefault.setTabValues(tabValues);
-		newItem->itemText.setDefaultStyle(newDefault);
-	}
-
-	if (newItem->fill_gradient.Stops() == 0)
-	{
-		const ScColor& col1 = doc->PageColors[doc->itemToolPrefs.dBrush];
-		const ScColor& col2 = doc->PageColors[doc->itemToolPrefs.dPen];
-		newItem->fill_gradient.addStop(ScColorEngine::getRGBColor(col1, doc), 0.0, 0.5, 1.0, doc->itemToolPrefs.dBrush, 100);
-		newItem->fill_gradient.addStop(ScColorEngine::getRGBColor(col2, doc), 1.0, 0.5, 1.0, doc->itemToolPrefs.dPen, 100);
-	}
-
-	if (newItem->asPathText())
-	{
-		newItem->updatePolyClip();
-		newItem->Frame = true;
-	}
-#ifdef HAVE_OSG
-	if (newItem->asImageFrame() || newItem->asLatexFrame() || newItem->asOSGFrame())
-#else
-	if (newItem->asImageFrame() || newItem->asLatexFrame())
-#endif
-	{
-		if (!newItem->Pfile.isEmpty())
-		{
-			doc->loadPict(newItem->Pfile, newItem, false);
-			if (layerFound)
-			{
-				newItem->pixm.imgInfo.isRequest = true;
-				doc->loadPict(newItem->Pfile, newItem, true);
-			}
-			newItem->AdjustPictScale();
-		}
-	}
-
-	if (!loadPage)
-		doc->setMasterPageMode(false);
-	return !reader.hasError();
-}
-
-bool Scribus150Format::readPattern(ScribusDoc* doc, ScXmlStreamReader& reader, const QString& baseDir)
-{
-	ScPattern pat;
-	ScXmlStreamAttributes attrs = reader.scAttributes();
-	QString patternName = attrs.valueAsString("Name");
-	bool success = true;
-
-	if (patternName.isEmpty())
-	{
-		reader.readToElementEnd();
-		return true;
-	}
-
-	QMap<PageItem*, int> groupID2;
-	QMap<int,int> TableID2;
-	QList<PageItem*> TableItems2;
-
-	pat.setDoc(doc);
-	pat.width   = attrs.valueAsDouble("width", 0.0);
-	pat.height  = attrs.valueAsDouble("height", 0.0);
-	pat.scaleX  = attrs.valueAsDouble("scaleX", 0.0);
-	pat.scaleY  = attrs.valueAsDouble("scaleY", 0.0);
-	pat.xoffset = attrs.valueAsDouble("xoffset", 0.0);
-	pat.yoffset = attrs.valueAsDouble("yoffset", 0.0);
-	
-	uint itemCount1 = m_Doc->Items->count();
-	bool savedAlignGrid = m_Doc->useRaster;
-	bool savedAlignGuides = m_Doc->SnapGuides;
-	m_Doc->useRaster = false;
-	m_Doc->SnapGuides = false;
-
-	QStringRef tagName = reader.name();
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		reader.readNext();
-		if (reader.isEndElement() && reader.name() == tagName)
-			break;
-		if (!reader.isStartElement() || reader.name() != "PatternItem") 
-			continue;
-
-		QStringRef tName = reader.name();
-		ScXmlStreamAttributes tAtt = reader.attributes();
-			
-		ItemInfo itemInfo;
-		m_Doc->setMasterPageMode(false);
-		
-		int ownPage = tAtt.valueAsInt("OwnPage");
-		success = readObject(doc, reader, itemInfo, baseDir, false);
-		if (!success) break;
-
-		itemInfo.item->OwnPage = ownPage;
-		itemInfo.item->OnMasterPage = "";
-
-		if (itemInfo.item->isTableItem)
-		{
-			TableItems2.append(itemInfo.item);
-			TableID2.insert(itemInfo.ownLink, itemInfo.item->ItemNr);
-		}
-		if (itemInfo.item->isGroupControl)
-		{
-			groupID2.insert(itemInfo.item, itemInfo.groupLastItem + itemInfo.item->ItemNr);
-		}
-	}
-
-	doc->useRaster  = savedAlignGrid;
-	doc->SnapGuides = savedAlignGuides;
-	if (!success)
-	{
-		return false;
-	}
-
-	if (groupID2.count() != 0)
-	{
-		QMap<PageItem*, int>::Iterator it;
-		for (it = groupID2.begin(); it != groupID2.end(); ++it)
-		{
-			it.key()->groupsLastItem = m_Doc->Items->at(it.value());
-		}
-	}
-	if (TableItems2.count() != 0)
-	{
-		for (int ttc = 0; ttc < TableItems2.count(); ++ttc)
-		{
-			PageItem* ta = TableItems2.at(ttc);
-			if (ta->TopLinkID != -1)
-				ta->TopLink = m_Doc->Items->at(TableID2[ta->TopLinkID]);
-			else
-				ta->TopLink = 0;
-			if (ta->LeftLinkID != -1)
-				ta->LeftLink = m_Doc->Items->at(TableID2[ta->LeftLinkID]);
-			else
-				ta->LeftLink = 0;
-			if (ta->RightLinkID != -1)
-				ta->RightLink = m_Doc->Items->at(TableID2[ta->RightLinkID]);
-			else
-				ta->RightLink = 0;
-			if (ta->BottomLinkID != -1)
-				ta->BottomLink = m_Doc->Items->at(TableID2[ta->BottomLinkID]);
-			else
-				ta->BottomLink = 0;
-		}
-	}
-
-	uint itemCount2 = m_Doc->Items->count();
-	if (itemCount2 > itemCount1)
-	{
-		PageItem* currItem = doc->Items->at(itemCount1), *newItem;
-		pat.pattern = currItem->DrawObj_toImage();
-		pat.pattern = pat.pattern.copy(-pat.xoffset, -pat.yoffset, pat.width, pat.height);
-		for (uint as = itemCount1; as < itemCount2; ++as)
-		{
-			newItem = doc->Items->takeAt(itemCount1);
-			newItem->moveBy(pat.xoffset, pat.yoffset, true);
-			newItem->gXpos += pat.xoffset;
-			newItem->gYpos += pat.yoffset;
-			newItem->ItemNr = pat.items.count();
-			pat.items.append(newItem);
-		}
-	}
-	doc->docPatterns.insert(patternName, pat);
-
-	return success;
-}
-
-bool Scribus150Format::readItemText(PageItem *obj, ScXmlStreamAttributes& attrs, LastStyles* last)
-{
-	QString tmp2;
-	CharStyle newStyle;
-	ScribusDoc* doc = obj->doc();
-	
-	readCharacterStyleAttrs(doc, attrs, newStyle);
-
-	if (attrs.hasAttribute(QLatin1String("Unicode")))
-	{
-		tmp2 = QChar(attrs.valueAsInt("Unicode"));
-	}
-	else
-	{
-		tmp2 = attrs.valueAsString("CH");
-		
-		// legacy stuff:
-		tmp2.replace(QRegExp("\r"), QChar(13));
-		tmp2.replace(QRegExp("\n"), QChar(13));
-		tmp2.replace(QRegExp("\t"), QChar(9));
-	}
-	
-	// more legacy stuff:
-	QString pstylename = attrs.valueAsString("PSTYLE", "");		
-
-	fixLegacyCharStyle(newStyle);
-	last->ParaStyle = pstylename;
-	// end of legacy stuff
-	
-	int iobj = attrs.valueAsInt("COBJ", -1);
-
-	for (int cxx=0; cxx<tmp2.length(); ++cxx)
-	{
-		QChar ch = tmp2.at(cxx);		
-		{ // Legacy mode
-			if (ch == QChar(5))
-				ch = SpecialChars::PARSEP;
-			if (ch == QChar(4))
-				ch = SpecialChars::TAB;
-		}
-		
-		int pos = obj->itemText.length();
-		if (ch == SpecialChars::OBJECT) {
-			if (iobj != -1) {
-				obj->itemText.insertObject(pos, doc->FrameItems.at(iobj));
-			}
-		}
-		else if (ch == SpecialChars::SHYPHEN && pos > 0)
-		{
-//			qDebug() << QString("scribus150format: SHYPHEN at %1").arg(pos);
-			ScText* lastItem = obj->itemText.item(pos-1);
-			// double SHY means user provided SHY, single SHY is automatic one
-			if (lastItem->effects() & ScStyle_HyphenationPossible)
-			{
-				lastItem->setEffects(lastItem->effects() & ~ScStyle_HyphenationPossible);
-				obj->itemText.insertChars(pos, QString(ch));
-			}
-			else
-			{
-				lastItem->setEffects(lastItem->effects() | ScStyle_HyphenationPossible);
-			}
-		}
-		else {
-			obj->itemText.insertChars(pos, QString(ch));
-		}
-//		qDebug() << QString("style at %1: %2 ^ %3 = %4 (%5)").arg(pos).arg((uint)newStyle.effects()).arg((uint)last->Style.effects()).arg((uint)(newStyle.effects() ^ last->Style.effects())).arg(newStyle != last->Style);
-		if (newStyle != last->Style) // || (newStyle.effects() ^ last->Style.effects()) == ScStyle_HyphenationPossible) 
-		{  // FIXME StyleFlag operator== ignores hyphen flag
-//			qDebug() << QString("new style at %1: %2 -> %3").arg(pos).arg(last->Style.asString()).arg(newStyle.asString());
-			obj->itemText.setCharStyle(last->StyleStart, pos-last->StyleStart, last->Style);
-			last->Style = newStyle;
-			last->StyleStart = pos;
-		}
-		if (ch == SpecialChars::PARSEP) {
-			ParagraphStyle pstyle;
-			// Qt4 if (last->ParaStyle >= 0) {
-			if (!last->ParaStyle.isEmpty()) {
-				pstyle.setParent( last->ParaStyle );
-			}
-			obj->itemText.applyStyle(pos, pstyle);
-		}
-	}
-
-	obj->itemText.setCharStyle(last->StyleStart, obj->itemText.length()-last->StyleStart, last->Style);
-	last->StyleStart = obj->itemText.length();
-/*
-	QString dbg("");
-	for (int i=0; i < obj->itemText.length(); ++i)
-	{
-		dbg += obj->itemText.text(i,1);
-		if (obj->itemText.item(i)->effects() & ScStyle_HyphenationPossible)
-			dbg += "~";
-	}
-	qDebug("scribus150format: read itemtext %d '%s'", obj->itemText.length(), dbg.latin1());
-	*/
-	ParagraphStyle pstyle;
-
-	if (!last->ParaStyle.isEmpty()) { // Qt4 >= 0) {
-		pstyle.setParent( last->ParaStyle );
-		obj->itemText.applyStyle(obj->itemText.length()-1, pstyle);
-	}
-
-	return true;
-}
-
-bool Scribus150Format::readPageItemAttributes(PageItem* item, ScXmlStreamReader& reader)
-{
-	QStringRef tagName = reader.name();
-	ObjAttrVector pageItemAttributes;
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		reader.readNext();
-		if (reader.isEndElement() && reader.name() == tagName)
-			break;
-		if (reader.isStartElement() && reader.name() == "ItemAttribute")
-		{
-			ScXmlStreamAttributes tAtt = reader.scAttributes();
-			ObjectAttribute objattr;
-			objattr.name  = tAtt.valueAsString("Name");
-			objattr.type  = tAtt.valueAsString("Type");
-			objattr.value = tAtt.valueAsString("Value");
-			objattr.parameter = tAtt.valueAsString("Parameter");
-			objattr.relationship   = tAtt.valueAsString("Relationship");
-			objattr.relationshipto = tAtt.valueAsString("RelationshipTo");
-			objattr.autoaddto = tAtt.valueAsString("AutoAddTo");
-			pageItemAttributes.append(objattr);
-		}
-	}
-	item->setObjectAttributes(&pageItemAttributes);
-	return !reader.hasError();
-}
-
-PageItem* Scribus150Format::pasteItem(ScribusDoc *doc, ScXmlStreamAttributes& attrs, const QString& baseDir, int pagenr)
-{
-	int z = 0;
-	struct ImageLoadRequest loadingInfo;
-	PageItem::ItemType pt = static_cast<PageItem::ItemType>(attrs.valueAsInt("PTYPE"));
-	double xf, yf;
-	double x   = attrs.valueAsDouble("XPOS");
-	double y   = attrs.valueAsDouble("YPOS");
-	double w   = attrs.valueAsDouble("WIDTH");
-	double h   = attrs.valueAsDouble("HEIGHT");
-	double pw  = attrs.valueAsDouble("PWIDTH");
-	double scx = attrs.valueAsDouble("LOCALSCX");
-	double scy = attrs.valueAsDouble("LOCALSCY");
-	QString Pcolor = attrs.valueAsString("PCOLOR");
-	if (Pcolor.isEmpty())
-		Pcolor = CommonStrings::None;
-	QString Pcolor2 = attrs.valueAsString("PCOLOR2");
-	if (Pcolor2.isEmpty())
-		Pcolor2 = CommonStrings::None;
-	QColor tmpc;
-	PageItem *currItem=NULL;
-	QString tmp, clPath;
-	int xi;
-
-	switch (pt)
-	{
-	// OBSOLETE CR 2005-02-06
-	case PageItem::ItemType1:
-		z = doc->itemAdd(PageItem::Polygon, PageItem::Ellipse, x, y, w, h, pw, Pcolor, Pcolor2, true);
-		currItem = doc->Items->at(z);
-		if (pagenr > -2) 
-			currItem->OwnPage = pagenr;
-		break;
-	//
-	case PageItem::ImageFrame:
-	case PageItem::OSGFrame:
-	case PageItem::LatexFrame: /*Everything that is valid for image frames is also valid for latex frames*/
-		z = doc->itemAdd(pt, PageItem::Unspecified, x, y, w, h, 1, doc->itemToolPrefs.dBrushPict, CommonStrings::None, true);
-		currItem = doc->Items->at(z);
-		if (pagenr > -2) 
-			currItem->OwnPage = pagenr;
-		UndoManager::instance()->setUndoEnabled(false);
-		currItem->setImageXYScale(scx, scy);
-		currItem->setImageXYOffset(attrs.valueAsDouble("LOCALX"), attrs.valueAsDouble("LOCALY"));
-//		if (!currItem->asLatexFrame())
-#ifdef HAVE_OSG
-		if ((currItem->asImageFrame() || currItem->asOSGFrame()) && (!currItem->asLatexFrame()))
-#else
-		if ((currItem->asImageFrame()) && (!currItem->asLatexFrame()))
-#endif
-		{
-			bool inlineF = attrs.valueAsBool("isInlineImage", false);
-			QString dat  = attrs.valueAsString("ImageData", "");
-			QByteArray inlineImageData;
-			inlineImageData.append(dat);
-			QString inlineImageExt = attrs.valueAsString("inlineImageExt", "");
-			if (inlineF)
-			{
-				if (inlineImageData.size() > 0)
-				{
-					currItem->tempImageFile = new QTemporaryFile(QDir::tempPath() + "/scribus_temp_XXXXXX." + inlineImageExt);
-					currItem->tempImageFile->open();
-					QString fileName = getLongPathName(currItem->tempImageFile->fileName());
-					currItem->tempImageFile->close();
-					inlineImageData = qUncompress(QByteArray::fromBase64(inlineImageData));
-					QFile outFil(fileName);
-					if (outFil.open(QIODevice::WriteOnly))
-					{
-						outFil.write(inlineImageData);
-						outFil.close();
-						currItem->isInlineImage = true;
-						currItem->Pfile = fileName;
-					}
-				}
-			}
-			else
-				currItem->Pfile = Relative2Path(attrs.valueAsString("PFILE"), baseDir);
-#ifdef HAVE_OSG
-			if (currItem->asOSGFrame())
-			{
-				PageItem_OSGFrame *osgframe = currItem->asOSGFrame();
-				osgframe->modelFile = Relative2Path(attrs.valueAsString("modelFile"), baseDir);
-				osgframe->currentView = attrs.valueAsString("currentViewName", "");
-				osgframe->loadModel();
-			}
-#endif
-		}
-		currItem->IProfile    = attrs.valueAsString("PRFILE", "");
-		currItem->EmProfile   = attrs.valueAsString("EPROF" , "");
-		currItem->IRender     = attrs.valueAsInt("IRENDER", 1);
-		currItem->UseEmbedded = attrs.valueAsInt("EMBEDDED", 1);
-		currItem->pixm.imgInfo.lowResType = attrs.valueAsInt("ImageRes", 1);
-		currItem->pixm.imgInfo.actualPageNumber = attrs.valueAsInt("Pagenumber", 0);
-		currItem->IProfile    = attrs.valueAsString("PRFILE","");
-		currItem->EmProfile   = attrs.valueAsString("EPROF","");
-		currItem->IRender     = attrs.valueAsInt("IRENDER", 1);
-		currItem->UseEmbedded = attrs.valueAsInt("EMBEDDED", 1);
-		if (currItem->asLatexFrame())
-		{
-			currItem->setImageXYOffset(attrs.valueAsDouble("LOCALX") * scx, attrs.valueAsDouble("LOCALY") * scy);
-	//		currItem->setImageXYScale(1.0, 1.0);
-		}
-		else
-			currItem->setImageXYScale(scx, scy);
-		clPath = attrs.valueAsString("ImageClip", "");
-		if (currItem->pixm.imgInfo.PDSpathData.contains(clPath))
-		{
-			currItem->imageClip = currItem->pixm.imgInfo.PDSpathData[clPath].copy();
-			currItem->pixm.imgInfo.usedPath = clPath;
-			QTransform cl;
-			cl.translate(currItem->imageXOffset()*currItem->imageXScale(), currItem->imageYOffset()*currItem->imageYScale());
-			cl.scale(currItem->imageXScale(), currItem->imageYScale());
-			currItem->imageClip.map(cl);
-		}
-		currItem->setImageShown( attrs.valueAsInt("PICART"));
-/*		currItem->BBoxX = ScCLocale::toDoubleC( obj->attribute("BBOXX"));
-		currItem->BBoxH = ScCLocale::toDoubleC( obj->attribute("BBOXH")); */
-		currItem->ScaleType   = attrs.valueAsInt("SCALETYPE", 1);
-		currItem->AspectRatio = attrs.valueAsInt("RATIO", 0);
-		currItem->setLineWidth(pw);
-		UndoManager::instance()->setUndoEnabled(true);
-		break;
-	// OBSOLETE CR 2005-02-06
-	case PageItem::ItemType3:
-		z = doc->itemAdd(PageItem::Polygon, PageItem::Rectangle, x, y, w, h, pw, Pcolor, Pcolor2, true);
-		currItem = doc->Items->at(z);
-		if (pagenr > -2) 
-			currItem->OwnPage = pagenr;
-		break;
-	//
-	case PageItem::PathText:
-		z = doc->itemAdd(PageItem::PathText, PageItem::Unspecified, x, y, w, h, pw, CommonStrings::None, Pcolor, true);
-		currItem = doc->Items->at(z);
-		if (pagenr > -2) 
-			currItem->OwnPage = pagenr;
-		UndoManager::instance()->setUndoEnabled(false);
-		if (attrs.valueAsInt("ANNOTATION", 0) && attrs.valueAsBool("ANICON", false))
-		{
-			currItem->setImageXYScale(scx, scy);
-			currItem->setImageXYOffset(attrs.valueAsDouble("LOCALX"), attrs.valueAsDouble("LOCALY"));
-			currItem->Pfile  = Relative2Path(attrs.valueAsString("PFILE" , "") , baseDir);
-			currItem->Pfile2 = Relative2Path(attrs.valueAsString("PFILE2", ""), baseDir);
-			currItem->Pfile3 = Relative2Path(attrs.valueAsString("PFILE3", ""), baseDir);
-			currItem->IProfile  = attrs.valueAsString("PRFILE", "");
-			currItem->EmProfile = attrs.valueAsString("EPROF", "");
-			currItem->IRender   = attrs.valueAsInt("IRENDER", 1);
-			currItem->UseEmbedded = attrs.valueAsInt("EMBEDDED", 1);
-			doc->LoadPict(currItem->Pfile, z);
-			currItem->setImageXYScale(scx, scy);
-			currItem->setImageShown(attrs.valueAsInt("PICART"));
-/*			currItem->BBoxX = ScCLocale::toDoubleC( obj->attribute("BBOXX"));
-			currItem->BBoxH = ScCLocale::toDoubleC( obj->attribute("BBOXH")); */
-			currItem->ScaleType   = attrs.valueAsInt("SCALETYPE", 1);
-			currItem->AspectRatio = attrs.valueAsInt("RATIO", 0);
-		}
-		//currItem->convertTo(pt);
-		UndoManager::instance()->setUndoEnabled(true);
-		break;
-	case PageItem::TextFrame:
-		z = doc->itemAdd(PageItem::TextFrame, PageItem::Unspecified, x, y, w, h, pw, CommonStrings::None, Pcolor, true);
-		currItem = doc->Items->at(z);
-		if (pagenr > -2) 
-			currItem->OwnPage = pagenr;
-		UndoManager::instance()->setUndoEnabled(false);
-		if ((attrs.valueAsInt("ANNOTATION", 0)) && (attrs.valueAsBool("ANICON", false)))
-		{
-			currItem->setImageXYScale(scx, scy);
-			currItem->setImageXYOffset(attrs.valueAsDouble("LOCALX"), attrs.valueAsDouble("LOCALY"));
-			currItem->Pfile  = Relative2Path(attrs.valueAsString("PFILE" , ""), baseDir);
-			currItem->Pfile2 = Relative2Path(attrs.valueAsString("PFILE2", ""), baseDir);
-			currItem->Pfile3 = Relative2Path(attrs.valueAsString("PFILE3", ""), baseDir);
-			currItem->IProfile    = attrs.valueAsString("PRFILE", "");
-			currItem->EmProfile   = attrs.valueAsString("EPROF", "");
-			currItem->IRender     = attrs.valueAsInt("IRENDER" , 1);
-			currItem->UseEmbedded = attrs.valueAsInt("EMBEDDED", 1);
-			doc->LoadPict(currItem->Pfile, z);
-			currItem->setImageXYScale(scx, scy);
-			currItem->setImageShown( attrs.valueAsInt("PICART"));
-/*			currItem->BBoxX = ScCLocale::toDoubleC( obj->attribute("BBOXX"));
-			currItem->BBoxH = ScCLocale::toDoubleC( obj->attribute("BBOXH")); */
-			currItem->ScaleType   = attrs.valueAsInt("SCALETYPE", 1);
-			currItem->AspectRatio = attrs.valueAsInt("RATIO", 0);
-		}
-		//currItem->convertTo(pt);
-		UndoManager::instance()->setUndoEnabled(true);
-		break;
-	case PageItem::Line:
-		z = doc->itemAdd(PageItem::Line, PageItem::Unspecified, x, y, w, h, pw, CommonStrings::None, Pcolor2, true);
-		currItem = doc->Items->at(z);
-		if (pagenr > -2) 
-			currItem->OwnPage = pagenr;
-		break;
-	case PageItem::Polygon:
-		z = doc->itemAdd(PageItem::Polygon, PageItem::Unspecified, x, y, w, h, pw, Pcolor, Pcolor2, true);
-		currItem = doc->Items->at(z);
-		if (pagenr > -2) 
-			currItem->OwnPage = pagenr;
-		break;
-	case PageItem::PolyLine:
-		z = doc->itemAdd(PageItem::PolyLine, PageItem::Unspecified, x, y, w, h, pw, Pcolor, Pcolor2, true);
-		currItem = doc->Items->at(z);
-		if (pagenr > -2) 
-			currItem->OwnPage = pagenr;
-		break;
-	case PageItem::Multiple:
-		Q_ASSERT(false);
-		break;
-	}
-
-	UndoManager::instance()->setUndoEnabled(false);
-	currItem->FrameType = attrs.valueAsInt("FRTYPE", 0);
-	int startArrowIndex = attrs.valueAsInt("startArrowIndex", 0);
-	if ((startArrowIndex < 0) || (startArrowIndex > static_cast<int>(doc->arrowStyles.size())))
-	{
-		qDebug() << QString("scribus150format: invalid arrow index: %").arg(startArrowIndex);
-		startArrowIndex = 0;
-	}
-	currItem->setStartArrowIndex(startArrowIndex);
-	int endArrowIndex = attrs.valueAsInt("endArrowIndex", 0);
-	if ((endArrowIndex < 0) || (endArrowIndex > static_cast<int>(doc->arrowStyles.size())))
-	{
-		qDebug() << QString("scribus150format: invalid arrow index: %").arg(endArrowIndex);
-		endArrowIndex = 0;
-	}
-	currItem->setEndArrowIndex(endArrowIndex);
-	currItem->NamedLStyle = attrs.valueAsString("NAMEDLST", "");
-	currItem->isBookmark  = attrs.valueAsInt("BOOKMARK");
-	if ((currItem->isBookmark) && (doc->BookMarks.count() == 0))
-		doc->OldBM = true;
-	currItem->setImageFlippedH( attrs.valueAsInt("FLIPPEDH"));
-	currItem->setImageFlippedV( attrs.valueAsInt("FLIPPEDV"));
-	currItem->setCornerRadius( attrs.valueAsDouble("RADRECT", 0.0));
-	currItem->ClipEdited = attrs.valueAsInt("CLIPEDIT", 0);
-	currItem->setFillColor(Pcolor);
-	currItem->setLineColor(Pcolor2);
-	currItem->setFillShade(attrs.valueAsInt("SHADE"));
-	currItem->setLineShade(attrs.valueAsInt("SHADE2"));
-
-	ParagraphStyle pstyle;
-	if (attrs.hasAttribute("LINESP"))
-		pstyle.setLineSpacing(attrs.valueAsDouble("LINESP"));
-	if (attrs.hasAttribute("LINESPMode"))
-		pstyle.setLineSpacingMode(static_cast<ParagraphStyle::LineSpacingMode>(attrs.valueAsInt("LINESPMode", 0)));
-	if (attrs.hasAttribute("ALIGN"))
-		pstyle.setAlignment(static_cast<ParagraphStyle::AlignmentType>(attrs.valueAsInt("ALIGN", 0)));
-	if (attrs.hasAttribute("IFONT"))
-		pstyle.charStyle().setFont(m_AvailableFonts->findFont(attrs.valueAsString("IFONT"), doc));
-	if (attrs.hasAttribute("ISIZE"))
-		pstyle.charStyle().setFontSize(qRound(attrs.valueAsDouble("ISIZE") * 10));
-	if (attrs.hasAttribute("TXTSTROKE"))
-		pstyle.charStyle().setStrokeColor(attrs.valueAsString("TXTSTROKE"));
-	if (attrs.hasAttribute("TXTFILL"))
-		pstyle.charStyle().setFillColor(attrs.valueAsString("TXTFILL"));
-	if (attrs.hasAttribute("TXTSTRSH"))
-		pstyle.charStyle().setStrokeShade(attrs.valueAsInt("TXTSTRSH"));
-	if (attrs.hasAttribute("TXTFILLSH"))
-		pstyle.charStyle().setFillShade(attrs.valueAsInt("TXTFILLSH"));
-	if (attrs.hasAttribute("TXTSCALE"))
-		pstyle.charStyle().setScaleH(qRound(attrs.valueAsDouble("TXTSCALE") * 10));
-	if (attrs.hasAttribute("TXTSCALEV"))
-		pstyle.charStyle().setScaleV(qRound(attrs.valueAsDouble("TXTSCALEV") * 10));
-	if (attrs.hasAttribute("TXTBASE"))
-		pstyle.charStyle().setBaselineOffset(qRound(attrs.valueAsDouble("TXTBASE") * 10));
-	if (attrs.hasAttribute("TXTSHX"))
-		pstyle.charStyle().setShadowXOffset(qRound(attrs.valueAsDouble("TXTSHX") * 10));
-	if (attrs.hasAttribute("TXTSHY"))
-		pstyle.charStyle().setShadowYOffset(qRound(attrs.valueAsDouble("TXTSHY") * 10));
-	if (attrs.hasAttribute("TXTOUT"))
-		pstyle.charStyle().setOutlineWidth(qRound(attrs.valueAsDouble("TXTOUT") * 10));
-	if (attrs.hasAttribute("TXTULP"))
-		pstyle.charStyle().setUnderlineOffset(qRound(attrs.valueAsDouble("TXTULP") * 10));
-	if (attrs.hasAttribute("TXTULW"))
-		pstyle.charStyle().setUnderlineWidth(qRound(attrs.valueAsDouble("TXTULW") * 10));
-	if (attrs.hasAttribute("TXTSTP"))
-		pstyle.charStyle().setStrikethruOffset(qRound(attrs.valueAsDouble("TXTSTP") * 10));
-	if (attrs.hasAttribute("TXTSTW"))
-		pstyle.charStyle().setStrikethruWidth(qRound(attrs.valueAsDouble("TXTSTW") * 10));
-	if (attrs.hasAttribute("TXTSTYLE"))
-		pstyle.charStyle().setFeatures(static_cast<StyleFlag>(attrs.valueAsInt("TXTSTYLE")).featureList());
-	if (attrs.hasAttribute("TXTKERN"))
-		pstyle.charStyle().setTracking(qRound(attrs.valueAsDouble("TXTKERN", 0.0) * 10));
-	if (attrs.hasAttribute("wordTrack"))
-		pstyle.charStyle().setWordTracking(attrs.valueAsDouble("wordTrack"));
-	if (attrs.hasAttribute("MinWordTrack"))
-		pstyle.setMinWordTracking(attrs.valueAsDouble("MinWordTrack"));
-	if (attrs.hasAttribute("MinGlyphShrink"))
-		pstyle.setMinGlyphExtension(attrs.valueAsDouble("MinGlyphShrink"));
-	if (attrs.hasAttribute("MaxGlyphExtend"))
-		pstyle.setMaxGlyphExtension(attrs.valueAsDouble("MaxGlyphExtend"));
-	if (attrs.hasAttribute("OpticalMargins"))
-		pstyle.setOpticalMargins(attrs.valueAsInt("OpticalMargins"));
-	if (attrs.hasAttribute("HyphenationMode"))
-		pstyle.setHyphenationMode(attrs.valueAsInt("HyphenationMode"));
-	if (attrs.hasAttribute("leftMargin"))
-		pstyle.setLeftMargin(attrs.valueAsDouble("leftMargin"));
-	if (attrs.hasAttribute("rightMargin"))
-		pstyle.setRightMargin(attrs.valueAsDouble("rightMargin"));
-	if (attrs.hasAttribute("firstIndent"))
-		pstyle.setFirstIndent(attrs.valueAsDouble("firstIndent"));
-	currItem->itemText.setDefaultStyle(pstyle);
-
-	if (attrs.hasAttribute("PSTYLE"))
-	{
-		QString pstyleName = attrs.valueAsString("PSTYLE");
-		if (!pstyleName.isEmpty())
-		{
-			ParagraphStyle defStyle(currItem->itemText.defaultStyle());
-			defStyle.setParent(pstyleName);
-			currItem->itemText.setDefaultStyle(defStyle);
-		}
-	}
-
-	currItem->setRotation( attrs.valueAsDouble("ROT") );
-	currItem->setTextToFrameDist(attrs.valueAsDouble("EXTRA"),
-								attrs.valueAsDouble("REXTRA", 1.0),
-								attrs.valueAsDouble("TEXTRA", 1.0),
-								attrs.valueAsDouble("BEXTRA", 1.0));
-	currItem->setFirstLineOffset(static_cast<FirstLineOffsetPolicy>(attrs.valueAsInt("FLOP")));
-
-	currItem->PLineArt  = Qt::PenStyle(attrs.valueAsInt("PLINEART"));
-	currItem->PLineEnd  = Qt::PenCapStyle(attrs.valueAsInt("PLINEEND", 0));
-	currItem->PLineJoin = Qt::PenJoinStyle(attrs.valueAsInt("PLINEJOIN", 0));
-	currItem->setPrintEnabled( attrs.valueAsInt("PRINTABLE"));
-	currItem->setIsAnnotation( attrs.valueAsInt("ANNOTATION", 0));
-	currItem->annotation().setType( attrs.valueAsInt("ANTYPE", 0));
-	QString AnName = attrs.valueAsString("ANNAME","");
-	if (!AnName.isEmpty())
-	{
-		if (currItem->itemName() == AnName)
-			currItem->AutoName = true;
-		else
-		{
-			currItem->setItemName(AnName);
-			currItem->AutoName = false;
-		}
-	}
-	currItem->annotation().setAction( attrs.valueAsString("ANACTION","") );
-	currItem->annotation().setE_act ( attrs.valueAsString("ANEACT","") );
-	currItem->annotation().setX_act ( attrs.valueAsString("ANXACT","") );
-	currItem->annotation().setD_act ( attrs.valueAsString("ANDACT","") );
-	currItem->annotation().setFo_act( attrs.valueAsString("ANFOACT","") );
-	currItem->annotation().setBl_act( attrs.valueAsString("ANBLACT","") );
-	currItem->annotation().setK_act ( attrs.valueAsString("ANKACT","") );
-	currItem->annotation().setF_act ( attrs.valueAsString("ANFACT","") );
-	currItem->annotation().setV_act ( attrs.valueAsString("ANVACT","") );
-	currItem->annotation().setC_act ( attrs.valueAsString("ANCACT","") );
-	currItem->annotation().setActionType(attrs.valueAsInt("ANACTYP", 0));
-	currItem->annotation().setExtern( attrs.valueAsString("ANEXTERN",""));
-	if ((!currItem->annotation().Extern().isEmpty()) && (currItem->annotation().ActionType() != 8))
-		currItem->annotation().setExtern(Relative2Path(attrs.valueAsString("ANEXTERN", "") , baseDir));
-	currItem->annotation().setZiel( attrs.valueAsInt("ANZIEL", 0));
-	currItem->annotation().setToolTip ( attrs.valueAsString("ANTOOLTIP",""));
-	currItem->annotation().setRollOver( attrs.valueAsString("ANROLL",""));
-	currItem->annotation().setDown( attrs.valueAsString("ANDOWN",""));
-	currItem->annotation().setBwid( attrs.valueAsInt("ANBWID", 1));
-	currItem->annotation().setBsty( attrs.valueAsInt("ANBSTY", 0));
-	currItem->annotation().setFeed( attrs.valueAsInt("ANFEED", 1));
-	currItem->annotation().setFlag( attrs.valueAsInt("ANFLAG", 0));
-	currItem->annotation().setFont( attrs.valueAsInt("ANFONT", 4));
-	currItem->annotation().setFormat( attrs.valueAsInt("ANFORMAT", 0));
-	currItem->annotation().setVis( attrs.valueAsInt("ANVIS", 0));
-	currItem->annotation().setIsChk( attrs.valueAsBool("ANCHK", false) );
-	currItem->annotation().setAAact( attrs.valueAsBool("ANAA", false) );
-	currItem->annotation().setHTML ( attrs.valueAsInt("ANHTML", 0));
-	currItem->annotation().setUseIcons( attrs.valueAsBool("ANICON", false));
-	currItem->annotation().setChkStil ( attrs.valueAsInt("ANCHKS", 0));
-	currItem->annotation().setMaxChar ( attrs.valueAsInt("ANMC", -1));
-	currItem->annotation().setBorderColor( attrs.valueAsString("ANBCOL", CommonStrings::None));
-	currItem->annotation().setIPlace(attrs.valueAsInt("ANPLACE", 1));
-	currItem->annotation().setScaleW(attrs.valueAsInt("ANSCALE", 0));
-	currItem->TopLine      = attrs.valueAsBool("TopLine", false);
-	currItem->LeftLine     = attrs.valueAsBool("LeftLine", false);
-	currItem->RightLine    = attrs.valueAsBool("RightLine", false);
-	currItem->BottomLine   = attrs.valueAsBool("BottomLine", false);
-	currItem->isTableItem  = attrs.valueAsBool("isTableItem", false);
-	currItem->TopLinkID    = attrs.valueAsInt("TopLINK", -1);
-	currItem->LeftLinkID   = attrs.valueAsInt("LeftLINK", -1);
-	currItem->RightLinkID  = attrs.valueAsInt("RightLINK", -1);
-	currItem->BottomLinkID = attrs.valueAsInt("BottomLINK", -1);
-	currItem->PoShow       = attrs.valueAsInt("PLTSHOW", 0);
-	currItem->BaseOffs     = attrs.valueAsDouble("BASEOF", 0.0);
-	currItem->textPathType =  attrs.valueAsInt("textPathType", 0);
-	currItem->textPathFlipped = attrs.valueAsBool("textPathFlipped", false);
-	if ( attrs.hasAttribute("TEXTFLOWMODE") )
-		currItem->setTextFlowMode((PageItem::TextFlowMode) attrs.valueAsInt("TEXTFLOWMODE", 0));
-	else if ( attrs.valueAsInt("TEXTFLOW") )
-	{
-		if (attrs.valueAsInt("TEXTFLOW2", 0))
-			currItem->setTextFlowMode(PageItem::TextFlowUsesBoundingBox);
-		else if (attrs.valueAsInt("TEXTFLOW3", 0))
-			currItem->setTextFlowMode(PageItem::TextFlowUsesContourLine);
-		else
-			currItem->setTextFlowMode(PageItem::TextFlowUsesFrameShape);	
-	}
-	else
-		currItem->setTextFlowMode(PageItem::TextFlowDisabled);
-	currItem->DashOffset = attrs.valueAsDouble("DASHOFF", 0.0);
-	currItem->setReversed(attrs.valueAsBool("REVERS", false));
-	currItem->setLocked (attrs.valueAsBool("LOCK", false));
-	currItem->setSizeLocked(attrs.valueAsBool("LOCKR", false));
-	currItem->setFillTransparency(attrs.valueAsDouble("TransValue", 0.0));
-	currItem->fillRule    = attrs.valueAsBool("fillRule", true);
-	currItem->doOverprint = attrs.valueAsBool("doOverprint", false);
-	if (attrs.hasAttribute("TransValueS"))
-		currItem->setLineTransparency(attrs.valueAsDouble("TransValueS", 0.0));
-	else
-		currItem->setLineTransparency(attrs.valueAsDouble("TransValue", 0.0));
-	currItem->setFillBlendmode(attrs.valueAsInt("TransBlend", 0));
-	currItem->setLineBlendmode(attrs.valueAsInt("TransBlendS", 0));
-	if (attrs.valueAsInt("TRANSPARENT", 0) == 1)
-		currItem->setFillColor(CommonStrings::None);
-	currItem->Cols   = attrs.valueAsInt("COLUMNS", 1);
-	currItem->ColGap = attrs.valueAsDouble("COLGAP", 0.0);
-	if (attrs.valueAsInt("LAYER", 0) != -1)
-		currItem->LayerID = attrs.valueAsInt("LAYER", 0);
-	tmp = "";
-
-	if (attrs.hasAttribute("GROUPS") && (attrs.valueAsInt("NUMGROUP", 0) != 0))
-	{
-		int groupMax = doc->GroupCounter;
-		QMap<int, int>::ConstIterator gIt;
-		tmp = attrs.valueAsString("GROUPS");
-		ScTextStream fg(&tmp, QIODevice::ReadOnly);
-		currItem->Groups.clear();
-		int numGroup = attrs.valueAsInt("NUMGROUP", 0);
-		for (int cx = 0; cx < numGroup; ++cx)
-		{
-			fg >> xi;
-			gIt = groupRemap.find(xi);
-			if (gIt != groupRemap.end())
-				currItem->Groups.push(gIt.value());
-			else
-			{
-				currItem->Groups.push(groupMax); 
-				groupRemap.insert(xi, groupMax);
-				++groupMax;
-			}
-		}
-		doc->GroupCounter = groupMax;
-		tmp = "";
-	}
-	else
-		currItem->Groups.clear();
-
-	tmp = "";
-	if ((attrs.hasAttribute("NUMDASH")) && (attrs.valueAsInt("NUMDASH", 0) != 0))
-	{
-		tmp = attrs.valueAsString("DASHS");
-		ScTextStream dgv(&tmp, QIODevice::ReadOnly);
-		currItem->DashValues.clear();
-		int numDash = attrs.valueAsInt("NUMDASH", 0);
-		for (int cxv = 0; cxv < numDash; ++cxv)
-		{
-			dgv >> xf;
-			currItem->DashValues.append(xf);
-		}
-		tmp = "";
-	}
-	else
-		currItem->DashValues.clear();
-
-	tmp = "";
-	if (attrs.hasAttribute("NUMPO"))
-	{
-		currItem->PoLine.resize(attrs.valueAsUInt("NUMPO"));
-		tmp = attrs.valueAsString("POCOOR");
-		ScTextStream fp(&tmp, QIODevice::ReadOnly);
-		uint numPo = attrs.valueAsUInt("NUMPO");
-		for (uint cx=0; cx < numPo; ++cx)
-		{
-			fp >> xf;
-			fp >> yf;
-			currItem->PoLine.setPoint(cx, xf, yf);
-		}
-	}
-	else
-		currItem->PoLine.resize(0);
-
-	tmp = "";
-	if (attrs.hasAttribute("NUMCO"))
-	{
-		currItem->ContourLine.resize(attrs.valueAsUInt("NUMCO"));
-		tmp = attrs.valueAsString("COCOOR");
-		ScTextStream fp(&tmp, QIODevice::ReadOnly);
-		uint numCo = attrs.valueAsUInt("NUMCO");
-		for (uint cx=0; cx < numCo; ++cx)
-		{
-			fp >> xf;
-			fp >> yf;
-			currItem->ContourLine.setPoint(cx, xf, yf);
-		}
-	}
-	else
-		currItem->ContourLine = currItem->PoLine.copy();
-
-	if (!currItem->asLine())
-		currItem->Clip = FlattenPath(currItem->PoLine, currItem->Segments);
-	else
-	{
-		int ph = static_cast<int>(qMax(1.0, currItem->lineWidth() / 2.0));
-		currItem->Segments.clear();
-		currItem->PoLine.resize(0);
-		currItem->Clip.setPoints(4, -ph,-ph, static_cast<int>(currItem->width()+ph),-ph,
-		                  static_cast<int>(currItem->width()+ph),static_cast<int>(currItem->height()+ph),
-		                  -ph,static_cast<int>(currItem->height()+ph));
-		currItem->setHeight(1.0);
-	}
-
-	if (currItem->asPathText())
-	{
-		currItem->updatePolyClip();
-		currItem->Frame = true;
-	}
-	currItem->GrType = attrs.valueAsInt("GRTYP", 0);
-	QString GrColor;
-	QString GrColor2;
-	int GrShade = 0;
-	int GrShade2 = 0;
-	if (currItem->GrType != 0)
-	{
-		if (currItem->GrType == 8)
-		{
-			currItem->setPattern( attrs.valueAsString("pattern", "") );
-			double patternScaleX   = attrs.valueAsDouble("pScaleX", 100.0);
-			double patternScaleY   = attrs.valueAsDouble("pScaleY", 100.0);
-			double patternOffsetX  = attrs.valueAsDouble("pOffsetX", 0.0);
-			double patternOffsetY  = attrs.valueAsDouble("pOffsetY", 0.0);
-			double patternRotation = attrs.valueAsDouble("pRotation", 0.0);
-			currItem->setPatternTransform(patternScaleX, patternScaleY, patternOffsetX, patternOffsetY, patternRotation);
-		}
-		else
-		{
-			currItem->GrStartX = attrs.valueAsDouble("GRSTARTX", 0.0);
-			currItem->GrStartY = attrs.valueAsDouble("GRSTARTY", 0.0);
-			currItem->GrEndX   = attrs.valueAsDouble("GRENDX", 0.0);
-			currItem->GrEndY   = attrs.valueAsDouble("GRENDY", 0.0);
-			GrColor = attrs.valueAsString("GRCOLOR","");
-			if (!GrColor.isEmpty())
-			{
-				GrColor2 = attrs.valueAsString("GRCOLOR2","");
-				GrShade  = attrs.valueAsInt("GRSHADE", 100);
-				GrShade2 = attrs.valueAsInt("GRSHADE2", 100);
-			}
-		}
-	}
-	if ((currItem->GrType != 0) && (currItem->GrType != 8))
-	{
-		currItem->fill_gradient.clearStops();
-		if ((!GrColor.isEmpty()) && (!GrColor2.isEmpty()))
-		{
-			if (currItem->GrType == 5)
-			{
-				if ((GrColor != CommonStrings::None) && (!GrColor.isEmpty()))
-					currItem->SetQColor(&tmpc, GrColor, GrShade);
-				currItem->fill_gradient.addStop(tmpc, 0.0, 0.5, 1.0, GrColor, GrShade);
-				if ((GrColor2 != CommonStrings::None) && (!GrColor2.isEmpty()))
-					currItem->SetQColor(&tmpc, GrColor2, GrShade2);
-				currItem->fill_gradient.addStop(tmpc, 1.0, 0.5, 1.0, GrColor2, GrShade2);
-			}
-			else
-			{
-				if ((GrColor2 != CommonStrings::None) && (!GrColor2.isEmpty()))
-					currItem->SetQColor(&tmpc, GrColor2, GrShade2);
-				currItem->fill_gradient.addStop(tmpc, 0.0, 0.5, 1.0, GrColor2, GrShade2);
-				if ((GrColor != CommonStrings::None) && (!GrColor.isEmpty()))
-					currItem->SetQColor(&tmpc, GrColor, GrShade);
-				currItem->fill_gradient.addStop(tmpc, 1.0, 0.5, 1.0, GrColor, GrShade);
-			}
-		}
-//		currItem->updateGradientVectors();
-	}
-	//currItem->setRedrawBounding();
-	//currItem->OwnPage = view->OnPage(currItem);
-	UndoManager::instance()->setUndoEnabled(true);
-	return currItem;
-}
-
-bool Scribus150Format::readLatexInfo(PageItem_LatexFrame* latexitem, ScXmlStreamReader& reader)
-{
-	ScXmlStreamAttributes attrs = reader.scAttributes();
-	QStringRef tagName = reader.name();
-
-	latexitem->setConfigFile(attrs.valueAsString("ConfigFile"), true);
-	latexitem->setDpi(attrs.valueAsInt("DPI"));
-	latexitem->setUsePreamble(attrs.valueAsBool("USE_PREAMBLE"));
-
-	QString formula;
-	while (!reader.atEnd() && !reader.hasError())
-	{
-		reader.readNext();
-		if (reader.isEndElement() && reader.name() == tagName)
-			break;
-		if (reader.isCharacters())
-			formula += reader.text().toString();
-		if (reader.isStartDocument() && reader.name() == "PROPERTY")
-		{
-			ScXmlStreamAttributes tAtt = reader.scAttributes();
-			QString name  = tAtt.valueAsString("name");
-			QString value = tAtt.valueAsString("value");
-			if (name.isEmpty()) continue;
-			latexitem->editorProperties[name] = value;
-		}
-	}
-	formula = formula.trimmed();
-	latexitem->setFormula(formula, false);
-
-	return !reader.hasError();
-}
-
-bool Scribus150Format::loadPage(const QString & fileName, int pageNumber, bool Mpage, QString renamedPageName)
-{
-// 	qDebug() << QString("loading page %2 from file '%1' from 1.3.x plugin").arg(fileName).arg(pageNumber);
-	if (m_Doc==0 || m_AvailableFonts==0)
-	{
-		Q_ASSERT(m_Doc==0 || m_AvailableFonts==0);
-		return false;
-	}
-	ParagraphStyle vg;
-	struct ScribusDoc::BookMa bok;
-	QMap<int, ScribusDoc::BookMa> bookmarks;
-
-	Page* newPage = NULL;
-	
-	QString tmp;
-	QMap<int,int> TableID;
-	QList<PageItem*> TableItems;
-	QMap<PageItem*, int> groupID;
-	double pageX = 0, pageY = 0;
-	bool newVersion = false;
-	QMap<int,int> layerTrans;
-	int maxLayer = 0, maxLevel = 0, a = 0;
-
-	layerTrans.clear();
-	uint layerCount=m_Doc->layerCount();
-	for (uint la2 = 0; la2 < layerCount; ++la2)
-	{
-		maxLayer = qMax(m_Doc->Layers[la2].ID, maxLayer);
-		maxLevel = qMax(m_Doc->Layers[la2].Level, maxLevel);
-	}
-
-	groupRemap.clear();
-	itemRemap.clear();
-	itemNext.clear();
-	itemCount = 0;
-	itemRemapM.clear();
-	itemNextM.clear();
-	itemCountM = 0;
-	itemRemapF.clear();
-	itemNextF.clear();
-
- 	QString f(readSLA(fileName));
-	if (f.isEmpty())
-		return false;
-
-	QString fileDir = QFileInfo(fileName).absolutePath();
-
-	bool firstElement = true;
-	bool success = true;
-	
-	ScXmlStreamReader reader(f);
-	ScXmlStreamAttributes attrs;
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		QXmlStreamReader::TokenType tType = reader.readNext();
-		if (tType != QXmlStreamReader::StartElement)
-			continue;
-		QStringRef tagName = reader.name();
-		attrs = reader.scAttributes();
-
-		if (firstElement)
-		{
-			if (tagName != "SCRIBUSUTF8NEW")
-			{
-				success = false;
-				break;
-			}
-			if (attrs.hasAttribute("Version"))
-				newVersion = true;
-			firstElement = false;
-		}
-
-		if (tagName == "COLOR" && attrs.valueAsString("NAME") != CommonStrings::None)
-		{
-			success = readColor(m_Doc->PageColors, attrs);
-			if (!success) break;
-		}
-		if (tagName == "JAVA")
-		{
-			QString name = attrs.valueAsString("NAME");
-			if (!name.isEmpty())
-				m_Doc->JavaScripts[name] = attrs.valueAsString("SCRIPT");
-		}
-		if (tagName == "LAYERS")
-		{
-			ScLayer newLayer;
-			readLayers(newLayer, attrs);
-			const ScLayer* la2 = m_Doc->Layers.layerByName(newLayer.Name);
-			if (la2)
-				layerTrans.insert(newLayer.ID, la2->ID);
-			else
-			{
-				maxLayer++;
-				maxLevel++;
-				layerTrans.insert(newLayer.ID, maxLayer);
-				newLayer.ID = maxLayer;
-				newLayer.Level = maxLevel;
-				m_Doc->Layers.append(newLayer);
-			}
-		}
-		if (tagName == "Arrows")
-		{
-			success = readArrows(m_Doc, attrs);
-			if (!success) break;
-		}
-		if(tagName == "MultiLine")
-		{
-			multiLine ml;
-			QString mlName  = attrs.valueAsString("Name");
-			QString mlName2 = mlName;
-			readMultiline(ml, reader);
-			int copyC = 1;
-			QMap<QString,multiLine>::ConstIterator mlit = m_Doc->MLineStyles.find(mlName2);
-			if (mlit != m_Doc->MLineStyles.end() && ml != mlit.value())
-			{
-				while (m_Doc->MLineStyles.contains(mlName2))
-				{
-					mlName2 = QObject::tr("Copy #%1 of ").arg(copyC)+mlName;
-					copyC++;
-				}
-			}
-			m_Doc->MLineStyles.insert(mlName2, ml);
-		}
-		if (tagName == "Pattern")
-		{
-			success = readPattern(m_Doc, reader, fileDir);
-			if (!success) break;
-		}
-		if (tagName == "Bookmark")
-		{
-			int bmElem = 0;
-			struct ScribusDoc::BookMa bookmark;
-			success = readBookMark(bookmark, bmElem, attrs);
-			if (!success) break;
-			bookmarks.insert(bmElem, bookmark);
-		}
-		if(tagName == "STYLE")
-		{
-			getStyle(vg, reader, NULL, m_Doc, true);
-		}
-		if (((tagName == "PAGE") || (tagName == "MASTERPAGE")) && (attrs.valueAsInt("NUM") == pageNumber))
-		{
-			if (Mpage && (tagName != "MASTERPAGE"))
-				continue;
-			a = m_Doc->currentPage()->pageNr();
-			newPage = m_Doc->Pages->at(a);
-			if (Mpage)
-			{
-				newPage->LeftPg = attrs.valueAsInt("LEFT", 0);
-				
-				if (!renamedPageName.isEmpty())
-					newPage->setPageName(renamedPageName);
-				else
-					newPage->setPageName(attrs.valueAsString("NAM",""));
-			}
-			if (attrs.hasAttribute("Size"))
-				newPage->m_pageSize = attrs.valueAsString("Size");
-			if (attrs.hasAttribute("Orientation"))
-				newPage->setOrientation(attrs.valueAsInt("Orientation"));
-			if (attrs.hasAttribute("PAGEWIDTH"))
-				newPage->setWidth( attrs.valueAsDouble("PAGEWIDTH") );
-			else
-				newPage->setWidth( attrs.valueAsDouble("PAGEWITH") );
-			newPage->setHeight( attrs.valueAsDouble("PAGEHEIGHT") );
-			newPage->setInitialHeight(newPage->height());
-			newPage->setInitialWidth(newPage->width());
-			newPage->initialMargins.Top    = qMax(0.0, attrs.valueAsDouble("BORDERTOP"));
-			newPage->initialMargins.Bottom = qMax(0.0, attrs.valueAsDouble("BORDERBOTTOM"));
-			newPage->initialMargins.Left   = qMax(0.0, attrs.valueAsDouble("BORDERLEFT"));
-			newPage->initialMargins.Right  = qMax(0.0, attrs.valueAsDouble("BORDERRIGHT"));
-			newPage->marginPreset = attrs.valueAsInt("PRESET", 0);
-			newPage->Margins.Top = newPage->initialMargins.Top;
-			newPage->Margins.Bottom = newPage->initialMargins.Bottom;
-			pageX = attrs.valueAsDouble( attrs.valueAsString("PAGEXPOS"));
-			pageY = attrs.valueAsDouble( attrs.valueAsString("PAGEYPOS"));
-			// guides reading
-			tmp = "";
-			newPage->guides.setHorizontalAutoGap(attrs.valueAsDouble("AGhorizontalAutoGap", 0.0));
-			newPage->guides.setVerticalAutoGap(attrs.valueAsDouble("AGverticalAutoGap", 0.0));
-			newPage->guides.setHorizontalAutoCount(attrs.valueAsInt("AGhorizontalAutoCount", 0));
-			newPage->guides.setVerticalAutoCount(attrs.valueAsInt("AGverticalAutoCount", 0));
-			newPage->guides.setHorizontalAutoRefer(attrs.valueAsInt("AGhorizontalAutoRefer", 0));
-			newPage->guides.setVerticalAutoRefer(attrs.valueAsInt("AGverticalAutoRefer", 0));
-			GuideManagerIO::readVerticalGuides(attrs.valueAsString("VerticalGuides"),
-											newPage,
-											GuideManagerCore::Standard,
-											attrs.hasAttribute("NumVGuides"));
-			GuideManagerIO::readHorizontalGuides(attrs.valueAsString("HorizontalGuides"),
-											newPage,
-											GuideManagerCore::Standard,
-											attrs.hasAttribute("NumHGuides"));
-			GuideManagerIO::readSelection(attrs.valueAsString("AGSelection"), newPage);
-		}
-		if ((tagName == "PAGEOBJECT") || (tagName == "MASTEROBJECT") || (tagName == "FRAMEOBJECT"))
-		{
-			if ((Mpage && tagName != "MASTEROBJECT") || (!Mpage && tagName == "MASTEROBJECT"))
-			{
-				// Go to end of node
-				reader.readToElementEnd();
-				continue;
-			}
-			if (attrs.valueAsInt("OwnPage") != pageNumber)
-			{			
-				if (tagName == "PAGEOBJECT")
-					itemRemap[itemCount++] = -1;
-				else if (tagName == "MASTEROBJECT")
-					itemRemapM[itemCountM++] = -1;
-				reader.readToElementEnd();
-			}
-			else
-			{
-				// first of linked chain?
-				if (tagName == "PAGEOBJECT")
-				{
-					itemRemap[itemCount++] = m_Doc->DocItems.count();
-					if (attrs.valueAsInt("NEXTITEM") != -1)
-						itemNext[m_Doc->DocItems.count()] = attrs.valueAsInt("NEXTITEM");
-				}
-				else if (tagName == "MASTEROBJECT")
-				{
-					itemRemapM[itemCountM++] = m_Doc->MasterItems.count();
-					if (attrs.valueAsInt("NEXTITEM") != -1)
-						itemNextM[m_Doc->MasterItems.count()] = attrs.valueAsInt("NEXTITEM");
-				}
-
-				ItemInfo itemInfo;
-				success = readObject(m_Doc, reader, itemInfo, fileDir, true);
-				if (!success) break;
-
-				PageItem* newItem = itemInfo.item;
-				newItem->moveBy(-pageX + newPage->xOffset(), - pageY + newPage->yOffset());
-				newItem->OwnPage = m_Doc->currentPageNumber();
-				if (tagName == "PAGEOBJECT")
-					newItem->OnMasterPage = "";
-
-				if (newItem->isTableItem)
-				{
-					TableItems.append(newItem);
-					TableID.insert(itemInfo.ownLink, newItem->ItemNr);
-				}
-				if (newItem->isGroupControl)
-				{
-					groupID.insert(newItem, itemInfo.groupLastItem + newItem->ItemNr);
-				}
-				if (tagName == "FRAMEOBJECT")
-				{
-					m_Doc->FrameItems.append(m_Doc->Items->takeAt(newItem->ItemNr));
-					newItem->ItemNr = m_Doc->FrameItems.count()-1;
-				}
-			}
-		}
-	}
-
-	if (reader.hasError())
-		return false;
-
-	QMap<int, ScribusDoc::BookMa>::Iterator it;
-	for (it = bookmarks.begin(); it != bookmarks.end(); ++it)
-	{
-		int elem = it.key();
-		if (elem < m_Doc->Items->count())
-		{
-			ScribusDoc::BookMa bookmark = it.value();
-			bookmark.PageObject = m_Doc->Items->at(elem);
-			m_Doc->BookMarks.append( bookmark );
-		}
-	}
-
-	if (TableItems.count() != 0)
-	{
-		for (int ttc = 0; ttc < TableItems.count(); ++ttc)
-		{
-			PageItem* ta = TableItems.at(ttc);
-			if (ta->TopLinkID != -1)
-				ta->TopLink = m_Doc->Items->at(TableID[ta->TopLinkID]);
-			else
-				ta->TopLink = 0;
-			if (ta->LeftLinkID != -1)
-				ta->LeftLink = m_Doc->Items->at(TableID[ta->LeftLinkID]);
-			else
-				ta->LeftLink = 0;
-			if (ta->RightLinkID != -1)
-				ta->RightLink = m_Doc->Items->at(TableID[ta->RightLinkID]);
-			else
-				ta->RightLink = 0;
-			if (ta->BottomLinkID != -1)
-				ta->BottomLink = m_Doc->Items->at(TableID[ta->BottomLinkID]);
-			else
-				ta->BottomLink = 0;
-		}
-	}
-
-	if (groupID.count() != 0)
-	{
-		QMap<PageItem*, int>::Iterator it;
-		for (it = groupID.begin(); it != groupID.end(); ++it)
-		{
-			it.key()->groupsLastItem = m_Doc->Items->at(it.value());
-		}
-	}
-	
-	// reestablish textframe links
-	if (itemNext.count() != 0 && !Mpage)
-	{
-		QMap<int,int>::Iterator lc;
-		for (lc = itemNext.begin(); lc != itemNext.end(); ++lc)
-		{
-			if (itemRemap[lc.value()] >= 0)
-			{
-				if ((lc.key() < m_Doc->Items->count()) && (itemRemap[lc.value()] < m_Doc->Items->count()))
-				{
-					PageItem * Its = m_Doc->DocItems.at(lc.key());
-					PageItem * Itn = m_Doc->DocItems.at(itemRemap[lc.value()]);
-					if (Itn->prevInChain() || Its->nextInChain()) 
-					{
-						qDebug() << "scribus150format: corruption in linked textframes detected";
-						continue;
-					}
-					Its->link(Itn);
-				}
-			}
-		}
-	}
-	else if (itemNextM.count() != 0 && Mpage)
-	{
-		QMap<int,int>::Iterator lc;
-		for (lc = itemNextM.begin(); lc != itemNextM.end(); ++lc)
-		{
-			if (itemRemapM[lc.value()] >= 0)
-			{
-				if ((lc.key() < m_Doc->MasterItems.count()) && (itemRemapM[lc.value()] < m_Doc->MasterItems.count()))
-				{
-					PageItem * Its = m_Doc->MasterItems.at(lc.key());
-					PageItem * Itn = m_Doc->MasterItems.at(itemRemapM[lc.value()]);
-					if (Itn->prevInChain() || Its->nextInChain())
-					{
-						qDebug() << "scribus150format: corruption in linked textframes detected";
-						continue;
-					}
-					Its->link(Itn);
-				}
-			}
-		}
-	}
-	
-	// reestablish first/lastAuto
-	m_Doc->FirstAuto = m_Doc->LastAuto;
-	if (m_Doc->LastAuto)
-	{
-		while (m_Doc->LastAuto->nextInChain())
-			m_Doc->LastAuto = m_Doc->LastAuto->nextInChain();
-		while (m_Doc->FirstAuto->prevInChain())
-			m_Doc->FirstAuto = m_Doc->FirstAuto->prevInChain();
-	}
-
-	return true;
-}
-
-void Scribus150Format::getStyle(ParagraphStyle& style, ScXmlStreamReader& reader, StyleSet<ParagraphStyle> *tempStyles, ScribusDoc* doc, bool fl)
-{
-	bool fou(false);
-	QString tmpf, tmV;
-	const StyleSet<ParagraphStyle> * docParagraphStyles = tempStyles? tempStyles : & doc->paragraphStyles();
-	PrefsManager* prefsManager = PrefsManager::instance();
-	readParagraphStyle(doc, reader, style, prefsManager->appPrefs.fontPrefs.AvailFonts);
-	for (int xx=0; xx<docParagraphStyles->count(); ++xx)
-	{
-		if (style.name() == (*docParagraphStyles)[xx].name())
-		{
-			if (style.equiv((*docParagraphStyles)[xx]))
-			{
-				fou = true;
-			}
-			else
-			{
-				style.setName("Copy of "+(*docParagraphStyles)[xx].name());
-				fou = false;
-			}
-			break;
-		}
-	}
-	if (!fou && fl)
-	{
-		for (int xx=0; xx< docParagraphStyles->count(); ++xx)
-		{
-			if (style.equiv((*docParagraphStyles)[xx]))
-			{
-				style.setName((*docParagraphStyles)[xx].name());
-				fou = true;
-				break;
-			}
-		}
-	}
-	if (!fou)
-	{
-		if (tempStyles)
-			tempStyles->create(style);
-		else
-		{
-			StyleSet<ParagraphStyle> tmp;
-			tmp.create(style);
-			doc->redefineStyles(tmp, false);
-		}
-	}
-}
-
-bool Scribus150Format::readStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles)
-{
-	ParagraphStyle vg;
-	QString tmpf;
-	QString f (readSLA(fileName));
-	if (f.isEmpty())
-		return false;
-
-	bool firstElement = true;
-	bool success = true;
-
-	ScXmlStreamReader reader(f);
-	ScXmlStreamAttributes attrs;
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		QXmlStreamReader::TokenType tType = reader.readNext();
-		if (tType != QXmlStreamReader::StartElement)
-			continue;
-		QStringRef tagName = reader.name();
-		if (firstElement)
-		{
-			if (tagName != "SCRIBUSUTF8NEW")
-			{
-				success = false;
-				break;
-			}
-			firstElement = false;
-			continue;
-		}
-		if (tagName == "STYLE")
-		{
-			getStyle(vg, reader, &docParagraphStyles, doc, false);
-		}
-	}
-	return success;
-}
-
-bool Scribus150Format::readCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles)
-{
-	CharStyle cstyle;
-	QString f(readSLA(fileName));
-	if (f.isEmpty())
-		return false;
-	bool firstElement = true;
-	bool success = true;
-
-	ScXmlStreamReader reader(f);
-	ScXmlStreamAttributes attrs;
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		QXmlStreamReader::TokenType tType = reader.readNext();
-		if (tType != QXmlStreamReader::StartElement)
-			continue;
-		QStringRef tagName = reader.name();
-		if (firstElement)
-		{
-			if (tagName != "SCRIBUSUTF8NEW")
-			{
-				success = false;
-				break;
-			}
-			firstElement = false;
-			continue;
-		}
-		if (tagName == "CHARSTYLE")
-		{
-			readCharacterStyleAttrs(doc, attrs, cstyle);
-			docCharStyles.create(cstyle);
-		}
-	}
-	return true;
-}
-
-bool Scribus150Format::readLineStyles(const QString& fileName, QMap<QString,multiLine> *styles)
-{
-	QString f(readSLA(fileName));
-	if (f.isEmpty())
-		return false;
-	bool firstElement = true;
-	bool success = true;
-
-	ScXmlStreamReader reader(f);
-	ScXmlStreamAttributes attrs;
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		QXmlStreamReader::TokenType tType = reader.readNext();
-		if (tType != QXmlStreamReader::StartElement)
-			continue;
-		QStringRef tagName = reader.name();
-		if (firstElement)
-		{
-			if (tagName != "SCRIBUSUTF8NEW")
-			{
-				success = false;
-				break;
-			}
-			firstElement = false;
-			continue;
-		}
-		if (tagName == "MultiLine")
-		{
-			multiLine ml;
-			attrs = reader.scAttributes();
-			QString mlName  = attrs.valueAsString("Name");
-			QString mlName2 = mlName;
-			readMultiline(ml, reader);
-			int copyC = 1;
-			QMap<QString,multiLine>::ConstIterator mlit = styles->find(mlName2);
-			if (mlit != styles->end() && ml != mlit.value())
-			{
-				while (styles->contains(mlName2))
-				{
-					mlName2 = tr("Copy #%1 of ").arg(copyC)+mlName;
-					copyC++;
-				}
-			}
-			styles->insert(mlName2, ml);
-		}
-	}
-	return true;
-}
-
-bool Scribus150Format::readColors(const QString& fileName, ColorList & colors)
-{
-	QString f(readSLA(fileName));
-	if (f.isEmpty())
-		return false;
-	bool firstElement = true;
-	bool success = true;
-
-	ScXmlStreamReader reader(f);
-	ScXmlStreamAttributes attrs;
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		QXmlStreamReader::TokenType tType = reader.readNext();
-		if (tType != QXmlStreamReader::StartElement)
-			continue;
-		QStringRef tagName = reader.name();
-		if (firstElement)
-		{
-			if (tagName != "SCRIBUSUTF8NEW")
-			{
-				success = false;
-				break;
-			}
-			firstElement = false;
-			continue;
-		}
-		if(tagName == "COLOR" && attrs.valueAsString("NAME") != CommonStrings::None)
-		{
-			attrs = reader.scAttributes();
-			if (attrs.valueAsString("NAME") != CommonStrings::None)
-			{
-				readColor(colors, attrs);
-			}
-		}
-	}
-	return true;
-}
-
-bool Scribus150Format::readPageCount(const QString& fileName, int *num1, int *num2, QStringList & masterPageNames)
-{
-	QString pageName;
-	int counter = 0;
-	int counter2 = 0;
-	QString f(readSLA(fileName));
-	if (f.isEmpty())
-		return false;
-	bool firstElement = true;
-	bool success = true;
-
-	ScXmlStreamReader reader(f);
-	ScXmlStreamAttributes attrs;
-	while(!reader.atEnd() && !reader.hasError())
-	{
-		QXmlStreamReader::TokenType tType = reader.readNext();
-		if (tType != QXmlStreamReader::StartElement)
-			continue;
-		QStringRef tagName = reader.name();
-		if (firstElement)
-		{
-			if (tagName != "SCRIBUSUTF8NEW")
-			{
-				success = false;
-				break;
-			}
-			firstElement = false;
-			continue;
-		}
-		if(tagName == "PAGE")
-			counter++;
-		if(tagName == "MASTERPAGE")
-		{
-			pageName = reader.scAttributes().valueAsString("NAM");
-			if (!pageName.isEmpty())
-			{
-				counter2++;
-				masterPageNames.append(pageName);
-			}
-		}
-	}
-	*num1 = counter;
-	*num2 = counter2;
-	return success;
-}
-
-
-
-
+/*
+For general Scribus (>=1.3.2) copyright and licensing information please refer
+to the COPYING file provided with the program. Following this notice may exist
+a copyright and/or license notice that predates the release of Scribus 1.3.2
+for which a new license (GPL+exception) is in place.
+*/
+#include "scribus150format.h"
+#include "scribus150formatimpl.h"
+
+#include "../../formatidlist.h"
+#include "commonstrings.h"
+#include "ui/missing.h"
+#include "hyphenator.h"
+#include "pageitem_latexframe.h"
+#include "prefsmanager.h"
+#include "scclocale.h"
+#include "scconfig.h"
+#include "sccolorengine.h"
+#include "scpattern.h"
+#include "scribuscore.h"
+#include "scribusdoc.h"
+#include "scribusview.h"
+#include "sctextstream.h"
+#include "scxmlstreamreader.h"
+#include "undomanager.h"
+#include "units.h"
+#include "util.h"
+#include "util_math.h"
+#include "util_color.h"
+#include "scgzfile.h"
+#include "scpattern.h"
+#ifdef HAVE_OSG
+	#include "pageitem_osgframe.h"
+#endif
+#include <QCursor>
+// #include <QDebug>
+#include <QFileInfo>
+#include <QList>
+#include <QByteArray>
+#include <QApplication>
+
+
+// See scplugin.h and pluginmanager.{cpp,h} for detail on what these methods
+// do. That documentatation is not duplicated here.
+// Please don't implement the functionality of your plugin here; do that
+// in scribus150formatimpl.h and scribus150formatimpl.cpp .
+
+Scribus150Format::Scribus150Format() :
+	LoadSavePlugin()
+{
+	// Set action info in languageChange, so we only have to do
+	// it in one place. This includes registering file formats.
+	languageChange();
+}
+
+Scribus150Format::~Scribus150Format()
+{
+	unregisterAll();
+};
+
+void Scribus150Format::languageChange()
+{
+	//(Re)register file formats.
+	unregisterAll();
+	registerFormats();
+}
+
+const QString Scribus150Format::fullTrName() const
+{
+	return QObject::tr("Scribus 1.3.4+ Support");
+}
+
+const ScActionPlugin::AboutData* Scribus150Format::getAboutData() const
+{
+	AboutData* about = new AboutData;
+	Q_CHECK_PTR(about);
+	about->authors = QString::fromUtf8(
+			"Franz Schmid <franz at scribus.info>, "
+			"The Scribus Team");
+	about->shortDescription = tr("Scribus 1.3.4+ File Format Support");
+	about->description = tr("Allows Scribus to read Scribus 1.3.4 and higher formatted files.");
+	// about->version
+	// about->releaseDate
+	// about->copyright
+	about->license = "GPL";
+	return about;
+}
+
+void Scribus150Format::deleteAboutData(const AboutData* about) const
+{
+	Q_ASSERT(about);
+	delete about;
+}
+
+void Scribus150Format::registerFormats()
+{
+	FileFormat fmt(this);
+	fmt.trName = tr("Scribus 1.5.0+ Document");
+	fmt.formatId = FORMATID_SLA150IMPORT;
+	fmt.load = true;
+	fmt.save = true;
+	fmt.filter = fmt.trName + " (*.sla *.SLA *.sla.gz *.SLA.GZ *.scd *.SCD *.scd.gz *.SCD.GZ)";
+	fmt.nameMatch = QRegExp("\\.(sla|scd)(\\.gz)?", Qt::CaseInsensitive);
+	fmt.mimeTypes = QStringList();
+	fmt.mimeTypes.append("application/x-scribus");
+	fmt.priority = 64;
+	registerFormat(fmt);
+}
+
+bool Scribus150Format::fileSupported(QIODevice* /* file */, const QString & fileName) const
+{
+	QByteArray docBytes("");
+	if(fileName.right(2) == "gz")
+	{
+		if (!ScGzFile::readFromFile(fileName, docBytes, 4096))
+		{
+			// FIXME: Needs better error return
+			return false;
+		}
+	}
+	else
+	{
+		// Not gzip encoded, just load it
+		loadRawText(fileName, docBytes);
+	}
+//	if (docBytes.left(16) == "<SCRIBUSUTF8NEW " && docBytes.left(35).contains("Version=\"1.3.4"))
+//		return true;
+	int startElemPos = docBytes.left(512).indexOf("<SCRIBUSUTF8NEW ");
+	return startElemPos >= 0 && ((docBytes.mid(startElemPos, 64).indexOf("Version=\"1.5.0") >= 0));
+}
+
+QString Scribus150Format::readSLA(const QString & fileName)
+{
+	QByteArray docBytes("");
+	if(fileName.right(2) == "gz")
+	{
+		if (!ScGzFile::readFromFile(fileName, docBytes))
+		{
+			// FIXME: Needs better error return
+			return false;
+		}
+	}
+	else
+	{
+		// Not gzip encoded, just load it
+		loadRawText(fileName, docBytes);
+	}
+	QString docText("");
+	int startElemPos = docBytes.left(512).indexOf("<SCRIBUSUTF8NEW ");
+	if (startElemPos >= 0 && ((docBytes.mid(startElemPos, 64).indexOf("Version=\"1.5.0") >= 0)))
+		docText = QString::fromUtf8(docBytes);
+	else
+		return QString::null;
+	if (docText.endsWith(QChar(10)) || docText.endsWith(QChar(13)))
+		docText.truncate(docText.length()-1);
+	return docText;
+}
+
+void Scribus150Format::getReplacedFontData(bool & getNewReplacement, QMap<QString,QString> &getReplacedFonts, QList<ScFace> &getDummyScFaces)
+{
+	getNewReplacement=false;
+	getReplacedFonts.clear();
+}
+
+bool Scribus150Format::loadFile(const QString & fileName, const FileFormat & /* fmt */, int /* flags */, int /* index */)
+{
+	if (m_Doc==0 || m_AvailableFonts==0)
+	{
+		Q_ASSERT(m_Doc==0 || m_AvailableFonts==0);
+		return false;
+	}
+	ParagraphStyle vg;
+	struct ScribusDoc::BookMa bok;
+	QMap<int, ScribusDoc::BookMa> bookmarks;
+
+	bool newVersion = false;
+
+	QMap<int,int> TableID;
+	QMap<int,int> TableIDM;
+	QMap<int,int> TableIDF;
+	QList<PageItem*> TableItems;
+	QList<PageItem*> TableItemsM;
+	QList<PageItem*> TableItemsF;
+	QMap<PageItem*, int> groupID;
+	QMap<PageItem*, int> groupIDM;
+	QMap<PageItem*, int> groupIDF;
+	
+	QString f(readSLA(fileName));
+	if (f.isEmpty())
+		return false;
+	QString fileDir = QFileInfo(fileName).absolutePath();
+	int firstPage = 0;
+	int layerToSetActive = 0;
+	ScColor lf = ScColor();
+	
+	if (m_mwProgressBar!=0)
+	{
+		m_mwProgressBar->setMaximum(f.length());
+		m_mwProgressBar->setValue(0);
+	}
+	// Stop autosave timer,it will be restarted only if doc has autosave feature is enabled
+	if (m_Doc->autoSaveTimer->isActive())
+		m_Doc->autoSaveTimer->stop();
+	
+	groupRemap.clear();
+	itemRemap.clear();
+	itemNext.clear();
+	itemCount = 0;
+	itemRemapM.clear();
+	itemNextM.clear();
+	itemCountM = 0;
+	itemRemapF.clear();
+	itemNextF.clear();
+
+	TableItems.clear();
+	TableID.clear();
+	TableItemsM.clear();
+	TableIDM.clear();
+	TableItemsF.clear();
+	TableIDF.clear();
+
+	m_Doc->GroupCounter = 1;
+	m_Doc->LastAuto = 0;
+	m_Doc->PageColors.clear();
+	m_Doc->Layers.clear();
+
+	bool firstElement = true;
+	bool success = true;
+	bool hasPageSets = false;
+	int  progress = 0;
+
+	ScXmlStreamReader reader(f);
+	ScXmlStreamAttributes attrs;
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		QXmlStreamReader::TokenType tType = reader.readNext();
+		if (tType != QXmlStreamReader::StartElement)
+			continue;
+		QStringRef tagName = reader.name();
+		attrs = reader.scAttributes();
+
+		if (m_mwProgressBar != 0)
+		{
+			int newProgress = qRound(reader.characterOffset() / (double) f.length() * 100);
+			if (newProgress != progress)
+			{
+				m_mwProgressBar->setValue(reader.characterOffset());
+				progress = newProgress;
+			}
+		}
+
+		if (firstElement)
+		{
+			if (tagName != "SCRIBUSUTF8NEW")
+			{
+				success = false;
+				break;
+			}
+			if (attrs.hasAttribute("Version"))
+				newVersion = true;
+			firstElement = false;
+		}
+		if (tagName == "DOCUMENT")
+		{
+			readDocAttributes(m_Doc, attrs);
+			layerToSetActive = attrs.valueAsInt("ALAYER", 0);
+			if (m_Doc->currentPageLayout == 0)
+				firstPage = 0;
+			else
+			{
+				if (attrs.valueAsInt("FIRSTLEFT", 0) == 1)
+					firstPage = 0;
+				else
+					firstPage = 1;
+			}
+			if (attrs.hasAttribute("currentProfile"))
+			{
+				m_Doc->checkerProfiles.clear();
+				m_Doc->curCheckProfile = attrs.valueAsString("currentProfile");
+			}
+		}
+		if (tagName == "CheckProfile")
+		{
+			success = readCheckProfile(m_Doc, attrs);
+			if (!success) break;
+		}
+		if (tagName == "PageSets")
+		{
+			success = readPageSets(m_Doc, reader);
+			if (!success) break;
+			hasPageSets = true;
+		}
+		// 10/25/2004 pv - None is "reserved" color. cannot be defined in any file...
+		if (tagName == "COLOR" && attrs.valueAsString("NAME") != CommonStrings::None)
+		{
+			success = readColor(m_Doc->PageColors, attrs);
+			if (!success) break;
+		}
+		if (tagName == "STYLE")
+		{
+			readParagraphStyle(m_Doc, reader, vg, *m_AvailableFonts);
+			StyleSet<ParagraphStyle>tmp;
+			tmp.create(vg);
+			m_Doc->redefineStyles(tmp, false);
+		}
+		if (tagName == "CHARSTYLE")
+		{
+			readParagraphStyle(m_Doc, reader, vg, *m_AvailableFonts);
+			StyleSet<CharStyle> temp;
+			temp.create(vg.charStyle());
+			m_Doc->redefineCharStyles(temp, false);
+		}
+		if (tagName == "JAVA")
+		{
+			QString name = attrs.valueAsString("NAME");
+			if (!name.isEmpty())
+				m_Doc->JavaScripts[name] = attrs.valueAsString("SCRIPT");
+		}
+		if (tagName == "LAYERS")
+		{
+			ScLayer newLayer;
+			readLayers(newLayer, attrs);
+			m_Doc->Layers.append(newLayer);
+		}
+		if (tagName == "Arrows")
+		{
+			success = readArrows(m_Doc, attrs);
+			if (!success) break;
+		}
+		if (tagName == "MultiLine")
+		{
+			multiLine ml;
+			QString mlName = attrs.valueAsString("Name");
+			success = readMultiline(ml, reader);
+			if (!success) break;
+			if (!mlName.isEmpty())
+			{
+				m_Doc->MLineStyles.insert(mlName, ml);
+			}
+		}
+		if (tagName == "Bookmark")
+		{
+			int bmElem = 0;
+			struct ScribusDoc::BookMa bookmark;
+			success = readBookMark(bookmark, bmElem, attrs);
+			if (!success) break;
+			bookmarks.insert(bmElem, bookmark);
+		}
+		if (tagName == "PDF")
+		{
+			success = readPDFOptions(m_Doc, reader);
+			if (!success) break;
+		}
+		if (tagName == "Printer")
+		{
+			success = readPrinterOptions(m_Doc, reader);
+			if (!success) break;
+		}
+		if (tagName == "DocItemAttributes")
+		{
+			success = readDocItemAttributes(m_Doc, reader);
+			if (!success) break;
+		}
+		if (tagName == "TablesOfContents")
+		{
+			success = readTableOfContents(m_Doc, reader);
+			if (!success) break;
+		}
+		if (tagName == "Sections")
+		{
+			success = readSections(m_Doc, reader);
+			if (!success) break;
+		}
+		if (tagName == "HYPHEN")
+		{
+			success = readHyphen(m_Doc, reader);
+			if (!success) break;
+		}
+		if (tagName == "PAGE" || tagName == "MASTERPAGE")
+		{
+			success = readPage(m_Doc, reader);
+			if (!success) break;
+		}
+		if (tagName == "PAGEOBJECT" || tagName == "MASTEROBJECT" || tagName == "FRAMEOBJECT")
+		{
+			ItemInfo itemInfo;
+			success = readObject(m_Doc, reader, itemInfo, fileDir, false);
+			if (!success) break;
+
+			// first of linked chain?
+			if (tagName == "PAGEOBJECT")
+			{
+				if (itemInfo.nextItem != -1)
+					itemNext[itemInfo.item->ItemNr] = itemInfo.nextItem;
+			}
+			else if (tagName == "MASTEROBJECT")
+			{
+				if (itemInfo.nextItem != -1)
+					itemNextM[itemInfo.item->ItemNr] = itemInfo.nextItem;
+			}
+			/* not sure if we want that...
+			else if (tagName == "FRAMEOBJECT")
+			{
+				if (itemInfo.nextItem != -1)
+					itemNextF[itemInfo.item->ItemNr] = itemInfo.nextItem;
+			}*/
+
+			if (itemInfo.item->isTableItem)
+			{
+				if (tagName == "PAGEOBJECT")
+				{
+					TableItems.append(itemInfo.item);
+					TableID.insert(itemInfo.ownLink, itemInfo.item->ItemNr);
+				}
+				else if (tagName == "FRAMEOBJECT")
+				{
+					TableItemsF.append(itemInfo.item);
+					TableIDF.insert(itemInfo.ownLink, itemInfo.item->ItemNr);
+				}
+				else
+				{
+					TableItemsM.append(itemInfo.item);
+					TableIDM.insert(itemInfo.ownLink, itemInfo.item->ItemNr);
+				}
+			}
+			if (itemInfo.item->isGroupControl)
+			{
+				if (tagName == "PAGEOBJECT")
+					groupID.insert(itemInfo.item, itemInfo.groupLastItem + itemInfo.item->ItemNr);
+				else if (tagName == "FRAMEOBJECT")
+					groupIDF.insert(itemInfo.item, itemInfo.groupLastItem + itemInfo.item->ItemNr);
+				else
+					groupIDM.insert(itemInfo.item, itemInfo.groupLastItem + itemInfo.item->ItemNr);
+			}
+		}
+		if (tagName == "Pattern")
+		{
+			success = readPattern(m_Doc, reader, fileDir);
+			if (!success) break;
+		}
+	}
+
+	if (reader.hasError())
+		return false;
+
+	QMap<int, ScribusDoc::BookMa>::Iterator it;
+	for (it = bookmarks.begin(); it != bookmarks.end(); ++it)
+	{
+		int elem = it.key();
+		if (elem < m_Doc->Items->count())
+		{
+			ScribusDoc::BookMa bookmark = it.value();
+			bookmark.PageObject = m_Doc->Items->at(elem);
+			m_Doc->BookMarks.append( bookmark );
+		}
+	}
+
+	if (TableItemsF.count() != 0)
+	{
+		for (int ttc = 0; ttc < TableItemsF.count(); ++ttc)
+		{
+			PageItem* ta = TableItemsF.at(ttc);
+			if (ta->TopLinkID != -1)
+				ta->TopLink = m_Doc->FrameItems.at(TableIDF[ta->TopLinkID]);
+			else
+				ta->TopLink = 0;
+			if (ta->LeftLinkID != -1)
+				ta->LeftLink = m_Doc->FrameItems.at(TableIDF[ta->LeftLinkID]);
+			else
+				ta->LeftLink = 0;
+			if (ta->RightLinkID != -1)
+				ta->RightLink = m_Doc->FrameItems.at(TableIDF[ta->RightLinkID]);
+			else
+				ta->RightLink = 0;
+			if (ta->BottomLinkID != -1)
+				ta->BottomLink = m_Doc->FrameItems.at(TableIDF[ta->BottomLinkID]);
+			else
+				ta->BottomLink = 0;
+		}
+	}
+	if (TableItemsM.count() != 0)
+	{
+		for (int ttc = 0; ttc < TableItemsM.count(); ++ttc)
+		{
+			PageItem* ta = TableItemsM.at(ttc);
+			if (ta->TopLinkID != -1)
+				ta->TopLink = m_Doc->MasterItems.at(TableIDM[ta->TopLinkID]);
+			else
+				ta->TopLink = 0;
+			if (ta->LeftLinkID != -1)
+				ta->LeftLink = m_Doc->MasterItems.at(TableIDM[ta->LeftLinkID]);
+			else
+				ta->LeftLink = 0;
+			if (ta->RightLinkID != -1)
+				ta->RightLink = m_Doc->MasterItems.at(TableIDM[ta->RightLinkID]);
+			else
+				ta->RightLink = 0;
+			if (ta->BottomLinkID != -1)
+				ta->BottomLink = m_Doc->MasterItems.at(TableIDM[ta->BottomLinkID]);
+			else
+				ta->BottomLink = 0;
+		}
+	}
+	if (TableItems.count() != 0)
+	{
+		for (int ttc = 0; ttc < TableItems.count(); ++ttc)
+		{
+			PageItem* ta = TableItems.at(ttc);
+			if (ta->TopLinkID != -1)
+				ta->TopLink = m_Doc->Items->at(TableID[ta->TopLinkID]);
+			else
+				ta->TopLink = 0;
+			if (ta->LeftLinkID != -1)
+				ta->LeftLink = m_Doc->Items->at(TableID[ta->LeftLinkID]);
+			else
+				ta->LeftLink = 0;
+			if (ta->RightLinkID != -1)
+				ta->RightLink = m_Doc->Items->at(TableID[ta->RightLinkID]);
+			else
+				ta->RightLink = 0;
+			if (ta->BottomLinkID != -1)
+				ta->BottomLink = m_Doc->Items->at(TableID[ta->BottomLinkID]);
+			else
+				ta->BottomLink = 0;
+		}
+	}
+	if (groupIDF.count() != 0)
+	{
+		QMap<PageItem*, int>::Iterator it;
+		for (it = groupIDF.begin(); it != groupIDF.end(); ++it)
+		{
+			it.key()->groupsLastItem = m_Doc->FrameItems.at(it.value());
+		}
+	}
+	if (groupID.count() != 0)
+	{
+		QMap<PageItem*, int>::Iterator it;
+		for (it = groupID.begin(); it != groupID.end(); ++it)
+		{
+			it.key()->groupsLastItem = m_Doc->DocItems.at(it.value());
+		}
+	}
+	if (groupIDM.count() != 0)
+	{
+		QMap<PageItem*, int>::Iterator it;
+		for (it = groupIDM.begin(); it != groupIDM.end(); ++it)
+		{
+			it.key()->groupsLastItem = m_Doc->MasterItems.at(it.value());
+		}
+	}
+	//CB Add this in to set this in the file in memory. Its saved, why not load it.
+	//Will of course be replaced by per page settings although we still probably need a document default
+	if (!hasPageSets)
+	{
+		m_Doc->pageSets[m_Doc->currentPageLayout].FirstPage = firstPage;
+//		m_Doc->pageSets[m_Doc->currentPageLayout].GapHorizontal = dc.attribute("GapHorizontal", "0").toDouble();
+//		m_Doc->pageSets[m_Doc->currentPageLayout].GapVertical = 0.0;
+//		m_Doc->pageSets[m_Doc->currentPageLayout].GapBelow = dc.attribute("GapVertical", "40").toDouble();
+	}
+	m_Doc->setActiveLayer(layerToSetActive);
+	m_Doc->setMasterPageMode(false);
+	m_Doc->reformPages();
+
+	if (m_Doc->Layers.count() == 0)
+		m_Doc->Layers.newLayer( QObject::tr("Background") );
+
+	// reestablish textframe links
+	if (itemNext.count() != 0)
+	{
+		QMap<int,int>::Iterator lc;
+		for (lc = itemNext.begin(); lc != itemNext.end(); ++lc)
+		{
+			if (lc.value() >= 0)
+			{
+				PageItem * Its = m_Doc->DocItems.at(lc.key());
+				PageItem * Itn = m_Doc->DocItems.at(lc.value());
+				if (Itn->prevInChain() || Its->nextInChain()) 
+				{
+					qDebug() << "scribus150format: corruption in linked textframes detected";
+					continue;
+				}
+				Its->link(Itn);
+			}
+		}
+	}
+	
+	if (itemNextM.count() != 0)
+	{
+		QMap<int,int>::Iterator lc;
+		for (lc = itemNextM.begin(); lc != itemNextM.end(); ++lc)
+		{
+			if (lc.value() >= 0)
+			{
+				PageItem * Its = m_Doc->MasterItems.at(lc.key());
+				PageItem * Itn = m_Doc->MasterItems.at(lc.value());
+				if (Itn->prevInChain() || Its->nextInChain()) 
+				{
+					qDebug() << "scribus150format: corruption in linked textframes detected";
+					continue;
+				}
+				Its->link(Itn);
+			}
+		}
+	}
+	
+	// reestablish first/lastAuto
+	m_Doc->FirstAuto = m_Doc->LastAuto;
+	if (m_Doc->LastAuto)
+	{
+		while (m_Doc->LastAuto->nextInChain())
+			m_Doc->LastAuto = m_Doc->LastAuto->nextInChain();
+		while (m_Doc->FirstAuto->prevInChain())
+			m_Doc->FirstAuto = m_Doc->FirstAuto->prevInChain();
+	}
+
+	// start auto save timer if needed
+	if (m_Doc->AutoSave  && ScCore->usingGUI())
+		m_Doc->autoSaveTimer->start(m_Doc->AutoSaveTime);
+	
+	if (m_mwProgressBar!=0)
+		m_mwProgressBar->setValue(reader.characterOffset());
+	return true;
+// 	return false;
+}
+
+// Low level plugin API
+int scribus150format_getPluginAPIVersion()
+{
+	return PLUGIN_API_VERSION;
+}
+
+ScPlugin* scribus150format_getPlugin()
+{
+	Scribus150Format* plug = new Scribus150Format();
+	Q_CHECK_PTR(plug);
+	return plug;
+}
+
+void scribus150format_freePlugin(ScPlugin* plugin)
+{
+	Scribus150Format* plug = dynamic_cast<Scribus150Format*>(plugin);
+	Q_ASSERT(plug);
+	delete plug;
+}
+
+
+namespace {
+	const int NOVALUE = -16000;
+	
+	void fixLegacyCharStyle(CharStyle& cstyle) 
+	{
+		if (! cstyle.font().usable())
+			cstyle.resetFont();
+		if (cstyle.fontSize() <= -16000 / 10)
+			cstyle.resetFontSize();
+//		if (cstyle.effects() == 65535)
+//			cstyle.resetEffects();
+		if (cstyle.fillColor().isEmpty())
+			cstyle.resetFillColor();
+		if (cstyle.fillShade() <= -16000)
+			cstyle.resetFillShade();
+		if (cstyle.strokeColor().isEmpty())
+			cstyle.resetStrokeColor();
+		if (cstyle.strokeShade() <= -16000)
+			cstyle.resetStrokeShade();
+		if (cstyle.shadowXOffset() <= -16000 / 10)
+			cstyle.resetShadowXOffset();
+		if (cstyle.shadowYOffset() <= -16000 / 10)
+			cstyle.resetShadowYOffset();
+		if (cstyle.outlineWidth() <= -16000 / 10)
+			cstyle.resetOutlineWidth();
+		if (cstyle.underlineOffset() <= -16000 / 10)
+			cstyle.resetUnderlineOffset();
+		if (cstyle.underlineWidth() <= -16000 / 10)
+			cstyle.resetUnderlineWidth();
+		if (cstyle.strikethruOffset() <= -16000 / 10)
+			cstyle.resetStrikethruOffset();
+		if (cstyle.strikethruWidth() <= -16000 / 10)
+			cstyle.resetStrikethruWidth();
+		if (cstyle.scaleH() <= -16000 / 10)
+			cstyle.resetScaleH();
+		if (cstyle.scaleV() <= -16000 / 10)
+			cstyle.resetScaleV();
+		if (cstyle.baselineOffset() <= -16000 / 10)
+			cstyle.resetBaselineOffset();
+		if (cstyle.tracking() <= -16000 / 10)
+			cstyle.resetTracking();
+	}
+	
+	void fixLegacyParStyle(ParagraphStyle& pstyle) 
+	{
+		if (pstyle.lineSpacing() <= -16000)
+			pstyle.resetLineSpacing();
+		if (pstyle.leftMargin() <= -16000)
+			pstyle.resetLeftMargin();
+		if (pstyle.rightMargin() <= -16000)
+			pstyle.resetRightMargin();
+		if (pstyle.firstIndent() <= -16000)
+			pstyle.resetFirstIndent();
+		if (pstyle.alignment() < 0)
+			pstyle.resetAlignment();
+		if (pstyle.gapBefore() <= -16000)
+			pstyle.resetGapBefore();
+		if (pstyle.gapAfter() <= -16000)
+			pstyle.resetGapAfter();
+		if (pstyle.dropCapLines() < 0)
+			pstyle.resetDropCapLines();
+		if (pstyle.dropCapOffset() <= -16000)
+			pstyle.resetDropCapOffset();
+		fixLegacyCharStyle(pstyle.charStyle());
+	}
+	
+}// namespace
+
+void Scribus150Format::readDocAttributes(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
+{
+	m_Doc->m_pageSize = attrs.valueAsString("PAGESIZE");
+	m_Doc->PageOri    = attrs.valueAsInt("ORIENTATION", 0);
+	m_Doc->FirstPnum  = attrs.valueAsInt("FIRSTNUM", 1);
+	m_Doc->currentPageLayout = attrs.valueAsInt("BOOK", 0);
+
+	m_Doc->setUsesAutomaticTextFrames( attrs.valueAsInt("AUTOTEXT") );
+	m_Doc->PageSp  = attrs.valueAsInt("AUTOSPALTEN");
+	m_Doc->PageSpa = attrs.valueAsDouble("ABSTSPALTEN");
+	m_Doc->setUnitIndex( attrs.valueAsInt("UNITS", 0) );
+
+	m_Doc->Language   = attrs.valueAsString("LANGUAGE", "");
+	m_Doc->MinWordLen = attrs.valueAsInt("MINWORDLEN", 3);
+	m_Doc->HyCount    = attrs.valueAsInt("HYCOUNT", 2);
+
+	if (attrs.hasAttribute("PAGEWIDTH"))
+		m_Doc->pageWidth = attrs.valueAsDouble("PAGEWIDTH");
+	else
+		m_Doc->pageWidth = attrs.valueAsDouble("PAGEWITH");
+	m_Doc->pageHeight = attrs.valueAsDouble("PAGEHEIGHT");
+	m_Doc->pageMargins.Left  = qMax(0.0, attrs.valueAsDouble("BORDERLEFT"));
+	m_Doc->pageMargins.Right = qMax(0.0, attrs.valueAsDouble("BORDERRIGHT"));
+	m_Doc->pageMargins.Top   = qMax(0.0, attrs.valueAsDouble("BORDERTOP"));
+	m_Doc->pageMargins.Bottom= qMax(0.0, attrs.valueAsDouble("BORDERBOTTOM"));
+	m_Doc->marginPreset  = attrs.valueAsInt("PRESET", 0);
+	m_Doc->bleeds.Top    = attrs.valueAsDouble("BleedTop", 0.0);
+	m_Doc->bleeds.Left   = attrs.valueAsDouble("BleedLeft", 0.0);
+	m_Doc->bleeds.Right  = attrs.valueAsDouble("BleedRight", 0.0);
+	m_Doc->bleeds.Bottom = attrs.valueAsDouble("BleedBottom", 0.0);
+	m_Doc->Automatic = attrs.valueAsBool("AUTOMATIC", true);
+	m_Doc->AutoCheck = attrs.valueAsBool("AUTOCHECK", false);
+	m_Doc->GuideLock = attrs.valueAsBool("GUIDELOCK", false);
+	
+	m_Doc->rulerXoffset = attrs.valueAsDouble("rulerXoffset", 0.0);
+	m_Doc->rulerYoffset = attrs.valueAsDouble("rulerYoffset", 0.0);
+	m_Doc->SnapGuides   = attrs.valueAsBool("SnapToGuides", false);
+	m_Doc->useRaster    = attrs.valueAsBool("SnapToGrid", false);
+	
+	m_Doc->AutoSave       = attrs.valueAsBool("AutoSave", false);
+	m_Doc->AutoSaveTime   = attrs.valueAsInt("AutoSaveTime", 600000);
+	m_Doc->scratch.Bottom = attrs.valueAsDouble("ScratchBottom", 20.0);
+	// FIXME A typo in early 1.3cvs (MAR 05) means we must support loading of
+	// FIXME 'ScatchLeft' for a while too. This can be removed in a few months.
+	if (attrs.hasAttribute("ScatchLeft"))
+		m_Doc->scratch.Left = attrs.valueAsDouble("ScatchLeft", 100.0);
+	else
+		m_Doc->scratch.Left = attrs.valueAsDouble("ScratchLeft", 100.0);
+	m_Doc->scratch.Right = attrs.valueAsDouble("ScratchRight", 100.0);
+	m_Doc->scratch.Top   = attrs.valueAsDouble("ScratchTop", 20.0);
+	m_Doc->GapHorizontal = attrs.valueAsDouble("GapHorizontal", -1.0);
+	m_Doc->GapVertical   = attrs.valueAsDouble("GapVertical", -1.0);
+	
+	if (attrs.hasAttribute("PAGEC"))
+		m_Doc->papColor = QColor(attrs.valueAsString("PAGEC"));
+	
+	m_Doc->marginColored = attrs.valueAsBool("RANDF", false);
+
+	readCMSSettings(doc, attrs);
+	readDocumentInfo(doc, attrs);
+	readGuideSettings(doc, attrs);
+	readToolSettings(doc, attrs);
+	readTypographicSettings(doc, attrs);
+}
+
+void Scribus150Format::readCMSSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
+{
+	doc->CMSSettings.SoftProofOn     = attrs.valueAsBool("DPSo", false);
+	doc->CMSSettings.SoftProofFullOn = attrs.valueAsBool("DPSFo", false);
+	doc->CMSSettings.CMSinUse   = attrs.valueAsBool("DPuse", false);
+	doc->CMSSettings.GamutCheck = attrs.valueAsBool("DPgam", false);
+	doc->CMSSettings.BlackPoint = attrs.valueAsBool("DPbla", true);
+	doc->CMSSettings.DefaultMonitorProfile   = attrs.valueAsString("DPMo","");
+	doc->CMSSettings.DefaultPrinterProfile   = attrs.valueAsString("DPPr","");
+	doc->CMSSettings.DefaultImageRGBProfile  = attrs.valueAsString("DPIn","");
+	doc->CMSSettings.DefaultImageCMYKProfile = attrs.valueAsString("DPInCMYK","");
+	doc->CMSSettings.DefaultSolidColorRGBProfile = attrs.valueAsString("DPIn2","");
+	if (attrs.hasAttribute("DPIn3"))
+		doc->CMSSettings.DefaultSolidColorCMYKProfile = attrs.valueAsString("DPIn3","");
+	else
+		doc->CMSSettings.DefaultSolidColorCMYKProfile = attrs.valueAsString("DPPr","");
+	doc->CMSSettings.DefaultIntentColors = attrs.valueAsInt("DISc", 1);
+	doc->CMSSettings.DefaultIntentImages = attrs.valueAsInt("DIIm", 0);
+}
+
+void Scribus150Format::readDocumentInfo(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
+{
+	doc->documentInfo.setAuthor(attrs.valueAsString("AUTHOR"));
+	doc->documentInfo.setComments(attrs.valueAsString("COMMENTS"));
+	doc->documentInfo.setKeywords(attrs.valueAsString("KEYWORDS",""));
+	doc->documentInfo.setTitle(attrs.valueAsString("TITLE"));
+	doc->documentInfo.setSubject(attrs.valueAsString("SUBJECT"));
+	doc->documentInfo.setPublisher(attrs.valueAsString("PUBLISHER", ""));
+	doc->documentInfo.setDate(attrs.valueAsString("DOCDATE", ""));
+	doc->documentInfo.setType(attrs.valueAsString("DOCTYPE", ""));
+	doc->documentInfo.setFormat(attrs.valueAsString("DOCFORMAT", ""));
+	doc->documentInfo.setIdent(attrs.valueAsString("DOCIDENT", ""));
+	doc->documentInfo.setSource(attrs.valueAsString("DOCSOURCE", ""));
+	doc->documentInfo.setLangInfo(attrs.valueAsString("DOCLANGINFO", ""));
+	doc->documentInfo.setRelation(attrs.valueAsString("DOCRELATION", ""));
+	doc->documentInfo.setCover(attrs.valueAsString("DOCCOVER", ""));
+	doc->documentInfo.setRights(attrs.valueAsString("DOCRIGHTS", ""));
+	doc->documentInfo.setContrib(attrs.valueAsString("DOCCONTRIB", ""));
+}
+
+void Scribus150Format::readGuideSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
+{
+	PrefsManager* prefsManager = PrefsManager::instance();
+	doc->guidesSettings.minorGridSpacing = attrs.valueAsDouble("MINGRID", prefsManager->appPrefs.guidesPrefs.minorGridSpacing);
+	doc->guidesSettings.majorGridSpacing = attrs.valueAsDouble("MAJGRID", prefsManager->appPrefs.guidesPrefs.majorGridSpacing);
+	doc->guidesSettings.gridShown    = attrs.valueAsBool("SHOWGRID", false);
+	doc->guidesSettings.guidesShown  =attrs.valueAsBool("SHOWGUIDES", true);
+	doc->guidesSettings.colBordersShown  = attrs.valueAsBool("showcolborders", false);
+	doc->guidesSettings.framesShown  = attrs.valueAsBool("SHOWFRAME", true);
+	doc->guidesSettings.layerMarkersShown = attrs.valueAsBool("SHOWLAYERM", false);
+	doc->guidesSettings.marginsShown = attrs.valueAsBool("SHOWMARGIN", true);
+	doc->guidesSettings.baselineGridShown    = attrs.valueAsBool("SHOWBASE", false);
+	doc->guidesSettings.showPic      = attrs.valueAsBool("SHOWPICT", true);
+	doc->guidesSettings.linkShown    = attrs.valueAsBool("SHOWLINK", false);
+	doc->guidesSettings.showControls = attrs.valueAsBool("SHOWControl", false);
+	doc->guidesSettings.rulerMode    = attrs.valueAsBool("rulerMode", true);
+	doc->guidesSettings.rulersShown  = attrs.valueAsBool("showrulers", true);
+	doc->guidesSettings.showBleed    = attrs.valueAsBool("showBleed", true);
+	if (attrs.hasAttribute("MARGC"))
+		doc->guidesSettings.marginColor  = QColor(attrs.valueAsString("MARGC"));
+	if (attrs.hasAttribute("MINORC"))
+		doc->guidesSettings.minorGridColor = QColor(attrs.valueAsString("MINORC"));
+	if (attrs.hasAttribute("MAJORC"))
+		doc->guidesSettings.majorGridColor = QColor(attrs.valueAsString("MAJORC"));
+	if (attrs.hasAttribute("GuideC"))
+		doc->guidesSettings.guideColor = QColor(attrs.valueAsString("GuideC"));
+	if (attrs.hasAttribute("BaseC"))
+		doc->guidesSettings.baselineGridColor  = QColor(attrs.valueAsString("BaseC"));
+	doc->guidesSettings.guidePlacement   = attrs.valueAsBool("BACKG", true);
+	doc->guidesSettings.guideRad = attrs.valueAsDouble("GuideRad", 10.0);
+	doc->guidesSettings.grabRadius  = attrs.valueAsInt("GRAB", 4);
+}
+
+void Scribus150Format::readToolSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
+{
+	QString defFont = attrs.valueAsString("DFONT");
+	m_AvailableFonts->findFont(defFont, doc);
+
+	doc->itemToolPrefs.defFont = defFont;
+	doc->itemToolPrefs.defSize = qRound(attrs.valueAsDouble("DSIZE", 12.0) * 10);
+	doc->itemToolPrefs.dCols   = attrs.valueAsInt("DCOL", 1);
+	doc->itemToolPrefs.dGap    = attrs.valueAsDouble("DGAP", 0.0);
+
+	doc->itemToolPrefs.polyC   = attrs.valueAsInt("POLYC", 4);
+	doc->itemToolPrefs.polyF   = attrs.valueAsDouble("POLYF", 0.5);
+	doc->itemToolPrefs.polyR   = attrs.valueAsDouble("POLYR", 0.0);
+	doc->itemToolPrefs.polyCurvature = attrs.valueAsDouble("POLYCUR", 0.0);
+	doc->itemToolPrefs.polyFd  = attrs.valueAsInt("POLYFD", 0);
+	doc->itemToolPrefs.polyS   = attrs.valueAsBool("POLYS", false);
+
+	doc->itemToolPrefs.dStartArrow = attrs.valueAsInt("StartArrow", 0);
+	doc->itemToolPrefs.dEndArrow   = attrs.valueAsInt("EndArrow", 0);
+	doc->itemToolPrefs.scaleX      = attrs.valueAsDouble("PICTSCX", 1.0);
+	doc->itemToolPrefs.scaleY      = attrs.valueAsDouble("PICTSCY", 1.0);
+	doc->itemToolPrefs.scaleType   = attrs.valueAsBool("PSCALE", true);
+	doc->itemToolPrefs.aspectRatio = attrs.valueAsBool("PASPECT", false);
+	doc->itemToolPrefs.lowResType  = attrs.valueAsInt("HalfRes", 1);
+	doc->itemToolPrefs.useEmbeddedPath = attrs.valueAsBool("EmbeddedPath", false);
+	if (attrs.hasAttribute("PEN"))
+		doc->itemToolPrefs.dPen = attrs.valueAsString("PEN");
+	if (attrs.hasAttribute("BRUSH"))
+		doc->itemToolPrefs.dBrush = attrs.valueAsString("BRUSH");
+	if (attrs.hasAttribute("PENLINE"))
+		doc->itemToolPrefs.dPenLine = attrs.valueAsString("PENLINE");
+	if (attrs.hasAttribute("PENTEXT"))
+		doc->itemToolPrefs.dPenText = attrs.valueAsString("PENTEXT");
+	if (attrs.hasAttribute("StrokeText"))
+		doc->itemToolPrefs.dStrokeText = attrs.valueAsString("StrokeText");
+	doc->itemToolPrefs.dTextBackGround  = attrs.valueAsString("TextBackGround", CommonStrings::None);
+	doc->itemToolPrefs.dTextLineColor   = attrs.valueAsString("TextLineColor", CommonStrings::None);
+	doc->itemToolPrefs.dTextBackGroundShade =attrs.valueAsInt("TextBackGroundShade", 100);
+	doc->itemToolPrefs.dTextLineShade   = attrs.valueAsInt("TextLineShade", 100);
+	doc->itemToolPrefs.dTextPenShade    = attrs.valueAsInt("TextPenShade", 100);
+	doc->itemToolPrefs.dTextStrokeShade = attrs.valueAsInt("TextStrokeShade", 100);
+	doc->itemToolPrefs.dLineArt    = static_cast<Qt::PenStyle>(attrs.valueAsInt("STIL"));
+	doc->itemToolPrefs.dLstyleLine = static_cast<Qt::PenStyle>(attrs.valueAsInt("STILLINE"));
+	doc->itemToolPrefs.dWidth      = attrs.valueAsDouble("WIDTH", 0.0);
+	doc->itemToolPrefs.dWidthLine  = attrs.valueAsDouble("WIDTHLINE", 1.0);
+	doc->itemToolPrefs.dShade2     = attrs.valueAsInt("PENSHADE", 100);
+	doc->itemToolPrefs.dShadeLine  = attrs.valueAsInt("LINESHADE", 100);
+	doc->itemToolPrefs.dShade      = attrs.valueAsInt("BRUSHSHADE", 100);
+	doc->opToolPrefs.magMin      = attrs.valueAsInt("MAGMIN", 10);
+	doc->opToolPrefs.magMax      = attrs.valueAsInt("MAGMAX", 3200);
+	doc->opToolPrefs.magStep     = attrs.valueAsInt("MAGSTEP", 200);
+	doc->opToolPrefs.dispX       = attrs.valueAsDouble("dispX", 10.0);
+	doc->opToolPrefs.dispY       = attrs.valueAsDouble("dispY", 10.0);
+	doc->opToolPrefs.constrain   = attrs.valueAsDouble("constrain", 15.0);
+	//CB Reset doc zoom step value to 200% instead of old values.
+	if (doc->opToolPrefs.magStep < 100)
+		doc->opToolPrefs.magStep = 200;
+	doc->itemToolPrefs.tabFillChar = attrs.valueAsString("TabFill","");
+	doc->itemToolPrefs.dTabWidth   = attrs.valueAsDouble("TabWidth", 36.0);
+	if (attrs.hasAttribute("CPICT"))
+		doc->itemToolPrefs.dBrushPict = attrs.valueAsString("CPICT");
+	doc->itemToolPrefs.shadePict = attrs.valueAsInt("PICTSHADE", 100);
+}
+
+void Scribus150Format::readTypographicSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
+{
+	doc->typographicSettings.valueSuperScript   = attrs.valueAsInt("VHOCH");
+	doc->typographicSettings.scalingSuperScript = attrs.valueAsInt("VHOCHSC");
+	doc->typographicSettings.valueSubScript     = attrs.valueAsInt("VTIEF");
+	doc->typographicSettings.scalingSubScript   = attrs.valueAsInt("VTIEFSC");
+	doc->typographicSettings.valueSmallCaps     = attrs.valueAsInt("VKAPIT");
+	doc->guidesSettings.valueBaselineGrid      = attrs.valueAsDouble("BASEGRID", 12.0);
+	doc->guidesSettings.offsetBaselineGrid     = attrs.valueAsDouble("BASEO", 0.0);
+	doc->typographicSettings.autoLineSpacing    = attrs.valueAsInt("AUTOL", 20);
+	doc->typographicSettings.valueUnderlinePos  = attrs.valueAsInt("UnderlinePos", -1);
+	doc->typographicSettings.valueUnderlineWidth  = attrs.valueAsInt("UnderlineWidth", -1);
+	doc->typographicSettings.valueStrikeThruPos   = attrs.valueAsInt("StrikeThruPos", -1);
+	doc->typographicSettings.valueStrikeThruWidth = attrs.valueAsInt("StrikeThruWidth", -1);
+}
+
+bool Scribus150Format::readPageSets(ScribusDoc* doc, ScXmlStreamReader& reader)
+{
+	struct PageSet pageS;
+	ScXmlStreamAttributes attrs;
+
+	doc->pageSets.clear();
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		reader.readNext();
+		QStringRef tagName = reader.name();
+		if(reader.isStartElement())
+			attrs = reader.attributes();
+		if (reader.isEndElement() && tagName == "PageSets")
+			break;
+		if(reader.isStartElement() && tagName == "Set")
+		{
+			ScXmlStreamAttributes attrs = reader.scAttributes();
+			pageS.Name      = CommonStrings::untranslatePageSetString(attrs.valueAsString("Name"));
+			pageS.FirstPage = attrs.valueAsInt("FirstPage", 0);
+			pageS.Rows      = attrs.valueAsInt("Rows", 1);
+			pageS.Columns   = attrs.valueAsInt("Columns", 1);
+//			pageS.GapHorizontal = attrs.valueAsDouble("GapHorizontal", 0);
+//			pageS.GapVertical   = attrs.valueAsDouble("GapVertical", 0);
+//			pageS.GapBelow      = attrs.valueAsDouble("GapBelow", 0);
+			pageS.pageNames.clear();
+		}
+		if(reader.isEndElement() && tagName == "Set")
+		{
+			doc->pageSets.append(pageS);
+			if ((doc->pageSets.count()-1 == doc->currentPageLayout) && ((doc->GapHorizontal < 0) && (doc->GapVertical < 0)))
+			{
+				doc->GapHorizontal = attrs.valueAsDouble("GapHorizontal", 0.0);
+				doc->GapVertical   = attrs.valueAsDouble("GapBelow", 0.0);
+			}
+		}
+		if (reader.isStartElement() && tagName == "PageNames")
+			pageS.pageNames.append(CommonStrings::untranslatePageSetLocString(attrs.valueAsString("Name")));
+	}
+	return !reader.hasError();
+}
+
+bool Scribus150Format::readCheckProfile(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
+{
+	struct CheckerPrefs checkerSettings;
+	QString profileName = attrs.valueAsString("Name");
+	if (profileName.isEmpty())
+		return true;
+	checkerSettings.ignoreErrors      = attrs.valueAsBool("ignoreErrors", false);
+	checkerSettings.autoCheck         = attrs.valueAsBool("autoCheck", true);
+	checkerSettings.checkGlyphs       = attrs.valueAsBool("checkGlyphs", true);
+	checkerSettings.checkOrphans      = attrs.valueAsBool("checkOrphans", true);
+	checkerSettings.checkOverflow     = attrs.valueAsBool("checkOverflow", true);
+	checkerSettings.checkPictures     = attrs.valueAsBool("checkPictures", true);
+	checkerSettings.checkResolution   = attrs.valueAsBool("checkResolution", true);
+	checkerSettings.checkTransparency = attrs.valueAsBool("checkTransparency", true);
+	checkerSettings.minResolution     = attrs.valueAsDouble("minResolution", 72.0);
+	checkerSettings.maxResolution     = attrs.valueAsDouble("maxResolution", 4800.0);
+	checkerSettings.checkAnnotations  = attrs.valueAsBool("checkAnnotations", false);
+	checkerSettings.checkRasterPDF    = attrs.valueAsBool("checkRasterPDF", true);
+	checkerSettings.checkForGIF       = attrs.valueAsBool("checkForGIF", true);
+	checkerSettings.ignoreOffLayers   = attrs.valueAsBool("ignoreOffLayers", false);
+	doc->checkerProfiles[profileName] = checkerSettings;
+	return true;
+}
+
+bool Scribus150Format::readColor(ColorList& colors, ScXmlStreamAttributes& attrs)
+{
+	ScColor color;
+	if (attrs.hasAttribute("CMYK"))
+		color.setNamedColor(attrs.valueAsString("CMYK"));
+	else
+		color.fromQColor(QColor(attrs.valueAsString("RGB")));
+	color.setSpotColor( attrs.valueAsBool("Spot", false) );
+	color.setRegistrationColor( attrs.valueAsBool("Register", false) );
+	QString name = attrs.valueAsString("NAME");
+	colors.insert((name.isEmpty()) ? color.name() : name, color);
+	return true;
+}
+
+void Scribus150Format::readCharacterStyleAttrs(ScribusDoc *doc, ScXmlStreamAttributes& attrs, CharStyle & newStyle)
+{
+	static const QString CNAME("CNAME");
+	if (attrs.hasAttribute(CNAME))
+		newStyle.setName(attrs.valueAsString(CNAME));
+
+	// The default style attribute must be correctly set before trying to assign a parent
+	static const QString DEFAULTSTYLE("DefaultStyle");
+	if (newStyle.hasName() && attrs.hasAttribute(DEFAULTSTYLE))
+		newStyle.setDefaultStyle(attrs.valueAsInt(DEFAULTSTYLE));
+	else if (newStyle.name() == CommonStrings::DefaultCharacterStyle || newStyle.name() == CommonStrings::trDefaultCharacterStyle)
+		newStyle.setDefaultStyle(true);
+	else
+		newStyle.setDefaultStyle(false);
+
+	static const QString CPARENT("CPARENT");
+	if (attrs.hasAttribute(CPARENT))
+		newStyle.setParent(attrs.valueAsString(CPARENT));
+
+	static const QString FONT("FONT");
+	if (attrs.hasAttribute(FONT))
+		newStyle.setFont(m_AvailableFonts->findFont(attrs.valueAsString(FONT), doc));
+	
+	static const QString FONTSIZE("FONTSIZE");
+	if (attrs.hasAttribute(FONTSIZE))
+		newStyle.setFontSize(qRound(attrs.valueAsDouble(FONTSIZE) * 10));
+	
+	static const QString FCOLOR("FCOLOR");
+	if (attrs.hasAttribute(FCOLOR))
+		newStyle.setFillColor(attrs.valueAsString(FCOLOR));
+	
+	static const QString KERN("KERN");
+	if (attrs.hasAttribute(KERN))
+		newStyle.setTracking(qRound(attrs.valueAsDouble(KERN) * 10));
+	
+	static const QString FSHADE("FSHADE");
+	if (attrs.hasAttribute(FSHADE))
+		newStyle.setFillShade(attrs.valueAsInt(FSHADE));
+	
+	static const QString EFFECTS("EFFECTS");
+	if (attrs.hasAttribute(EFFECTS))
+		newStyle.setFeatures(static_cast<StyleFlag>(attrs.valueAsInt(EFFECTS)).featureList());
+	
+	static const QString EFFECT("EFFECT");
+	if (attrs.hasAttribute(EFFECT))
+		newStyle.setFeatures(static_cast<StyleFlag>(attrs.valueAsInt(EFFECT)).featureList());
+	
+	static const QString FEATURES("FEATURES");
+	if (attrs.hasAttribute(FEATURES))
+		newStyle.setFeatures(attrs.valueAsString(FEATURES).split( " ", QString::SkipEmptyParts));
+	
+	static const QString SCOLOR("SCOLOR");
+	if (attrs.hasAttribute(SCOLOR))
+		newStyle.setStrokeColor(attrs.valueAsString(SCOLOR, CommonStrings::None));
+	
+	static const QString SSHADE("SSHADE");
+	if (attrs.hasAttribute(SSHADE))
+		newStyle.setStrokeShade(attrs.valueAsInt(SSHADE));
+	
+	static const QString SCALEH("SCALEH");
+	if (attrs.hasAttribute(SCALEH))
+		newStyle.setScaleH(qRound(attrs.valueAsDouble(SCALEH) * 10));
+	
+	static const QString SCALEV("SCALEV");
+	if (attrs.hasAttribute(SCALEV))
+		newStyle.setScaleV(qRound(attrs.valueAsDouble(SCALEV) * 10));
+	
+	static const QString BASEO("BASEO");
+	if (attrs.hasAttribute(BASEO))
+		newStyle.setBaselineOffset(qRound(attrs.valueAsDouble(BASEO) * 10));
+	
+	static const QString TXTSHX("TXTSHX");
+	if (attrs.hasAttribute(TXTSHX))
+		newStyle.setShadowXOffset(qRound(attrs.valueAsDouble(TXTSHX) * 10));
+	
+	static const QString TXTSHY("TXTSHY");
+	if (attrs.hasAttribute(TXTSHY))
+		newStyle.setShadowYOffset(qRound(attrs.valueAsDouble(TXTSHY) * 10));
+	
+	static const QString TXTOUT("TXTOUT");
+	if (attrs.hasAttribute(TXTOUT))
+		newStyle.setOutlineWidth(qRound(attrs.valueAsDouble(TXTOUT) * 10));
+	
+	static const QString TXTULP("TXTULP");
+	if (attrs.hasAttribute(TXTULP))
+		newStyle.setUnderlineOffset(qRound(attrs.valueAsDouble(TXTULP) * 10));
+	
+	static const QString TXTULW("TXTULW");
+	if (attrs.hasAttribute(TXTULW))
+		newStyle.setUnderlineWidth(qRound(attrs.valueAsDouble(TXTULW) * 10));
+	
+	static const QString TXTSTP("TXTSTP");
+	if (attrs.hasAttribute(TXTSTP))
+		newStyle.setStrikethruOffset(qRound(attrs.valueAsDouble(TXTSTP) * 10));
+	
+	static const QString TXTSTW("TXTSTW");
+	if (attrs.hasAttribute(TXTSTW))
+		newStyle.setStrikethruWidth(qRound(attrs.valueAsDouble(TXTSTW) * 10));
+
+	static const QString SHORTCUT("SHORTCUT");
+	if (attrs.hasAttribute(SHORTCUT))
+		newStyle.setShortcut(attrs.valueAsString(SHORTCUT));
+
+	static const QString WORDTRACK("wordTrack");
+	if (attrs.hasAttribute(WORDTRACK))
+		newStyle.setWordTracking(attrs.valueAsDouble(WORDTRACK));
+}
+
+void Scribus150Format::readParagraphStyle(ScribusDoc *doc, ScXmlStreamReader& reader, ParagraphStyle& newStyle, SCFonts &fonts)
+{
+	ScXmlStreamAttributes attrs = reader.scAttributes();
+
+	newStyle.erase();
+	newStyle.setName(attrs.valueAsString("NAME", ""));
+	// The default style attribute must be correctly set before trying to assign a parent
+	static const QString DEFAULTSTYLE("DefaultStyle");
+	if (attrs.hasAttribute(DEFAULTSTYLE))
+		newStyle.setDefaultStyle(attrs.valueAsInt(DEFAULTSTYLE));
+	else if (newStyle.name() == CommonStrings::DefaultParagraphStyle || newStyle.name() == CommonStrings::trDefaultParagraphStyle)
+		newStyle.setDefaultStyle(true);
+	else
+		newStyle.setDefaultStyle(false);
+	newStyle.setParent(attrs.valueAsString("PARENT", ""));
+
+	static const QString LINESPMode("LINESPMode");
+	if (attrs.hasAttribute(LINESPMode))
+		newStyle.setLineSpacingMode(static_cast<ParagraphStyle::LineSpacingMode>(attrs.valueAsInt(LINESPMode)));
+
+	static const QString LINESP("LINESP");
+	if (attrs.hasAttribute(LINESP))
+		newStyle.setLineSpacing(attrs.valueAsDouble(LINESP));
+
+	static const QString INDENT("INDENT");
+	if (attrs.hasAttribute(INDENT))
+		newStyle.setLeftMargin(attrs.valueAsDouble(INDENT));
+
+	static const QString RMARGIN("RMARGIN");
+	if (attrs.hasAttribute(RMARGIN))
+		newStyle.setRightMargin(attrs.valueAsDouble(RMARGIN));
+
+	static const QString FIRST("FIRST");
+	if (attrs.hasAttribute(FIRST))
+		newStyle.setFirstIndent(attrs.valueAsDouble(FIRST));
+
+	static const QString ALIGN("ALIGN");
+	if (attrs.hasAttribute(ALIGN))
+		newStyle.setAlignment(static_cast<ParagraphStyle::AlignmentType>(attrs.valueAsInt(ALIGN)));
+
+	static const QString VOR("VOR");
+	if (attrs.hasAttribute(VOR))
+		newStyle.setGapBefore(attrs.valueAsDouble(VOR));
+
+	static const QString NACH("NACH");
+	if (attrs.hasAttribute(NACH))
+		newStyle.setGapAfter(attrs.valueAsDouble(NACH));
+
+	static const QString DROP("DROP");
+	if (attrs.hasAttribute(DROP))
+		newStyle.setHasDropCap(static_cast<bool>(attrs.valueAsInt(DROP)));
+
+	static const QString DROPLIN("DROPLIN");
+	if (attrs.hasAttribute(DROPLIN))
+		newStyle.setDropCapLines(attrs.valueAsInt(DROPLIN));
+
+	static const QString DROPDIST("DROPDIST");
+	if (attrs.hasAttribute(DROPDIST))
+		newStyle.setDropCapOffset(attrs.valueAsDouble(DROPDIST));
+
+	static const QString PSHORTCUT("PSHORTCUT");
+	if (attrs.hasAttribute(PSHORTCUT))
+		newStyle.setShortcut(attrs.valueAsString(PSHORTCUT));
+	
+	static const QString OpticalMargins("OpticalMargins");
+	if (attrs.hasAttribute(OpticalMargins))
+		newStyle.setOpticalMargins(attrs.valueAsInt(OpticalMargins));
+
+	static const QString HyphenationMode("HyphenationMode");
+	if (attrs.hasAttribute(HyphenationMode))
+		newStyle.setHyphenationMode(attrs.valueAsInt(HyphenationMode));
+
+	static const QString MinWordTrack("MinWordTrack");
+	if (attrs.hasAttribute(MinWordTrack))
+		newStyle.setMinWordTracking(attrs.valueAsDouble(MinWordTrack));
+
+	static const QString NormWordTrack("NormWordTrack");
+	if (attrs.hasAttribute(NormWordTrack))
+		newStyle.charStyle().setWordTracking(attrs.valueAsDouble(NormWordTrack));
+
+	static const QString MinGlyphShrink("MinGlyphShrink");
+	if (attrs.hasAttribute(MinGlyphShrink))
+		newStyle.setMinGlyphExtension(attrs.valueAsDouble(MinGlyphShrink));
+
+	static const QString MaxGlyphExtend("MaxGlyphExtend");
+	if (attrs.hasAttribute(MaxGlyphExtend))
+		newStyle.setMaxGlyphExtension(attrs.valueAsDouble(MaxGlyphExtend));
+	
+	readCharacterStyleAttrs( doc, attrs, newStyle.charStyle());
+
+	//	newStyle.tabValues().clear();
+	QList<ParagraphStyle::TabRecord> tbs;
+	newStyle.resetTabValues();
+	QStringRef thisTagName = reader.name();
+	while (!reader.atEnd() && !reader.hasError())
+	{
+		reader.readNext();
+		if (reader.isEndElement() && reader.name() == thisTagName)
+			break;
+		if (reader.isStartElement() && reader.name() == "Tabs")
+		{
+			ParagraphStyle::TabRecord tb;
+			ScXmlStreamAttributes attrs2 = reader.scAttributes();
+			tb.tabPosition = attrs2.valueAsDouble("Pos");
+			tb.tabType     = attrs2.valueAsInt("Type");
+			QString tbCh   = attrs2.valueAsString("Fill","");
+			tb.tabFillChar = tbCh.isEmpty() ? QChar() : tbCh[0];
+			tbs.append(tb);
+		}
+	}
+	if (tbs.count() > 0)
+		newStyle.setTabValues(tbs);
+	
+	fixLegacyParStyle(newStyle);
+}
+
+void Scribus150Format::readLayers(ScLayer& layer, ScXmlStreamAttributes& attrs)
+{
+	int lId   = attrs.valueAsInt("NUMMER");
+	int level = attrs.valueAsInt("LEVEL");
+	layer = ScLayer( attrs.valueAsString("NAME"), level, lId);
+	layer.isViewable   = attrs.valueAsInt("SICHTBAR");
+	layer.isPrintable  = attrs.valueAsInt("DRUCKEN");
+	layer.isEditable   = attrs.valueAsInt("EDIT", 1);
+	layer.flowControl  = attrs.valueAsInt("FLOW", 1);
+	layer.transparency = attrs.valueAsDouble("TRANS", 1.0);
+	layer.blendMode    = attrs.valueAsInt("BLEND", 0);
+	layer.outlineMode  = attrs.valueAsInt("OUTL", 0);
+	if (attrs.hasAttribute("LAYERC"))
+		layer.markerColor =  QColor(attrs.valueAsString("LAYERC","#000000"));
+}
+
+bool Scribus150Format::readArrows(ScribusDoc* doc, ScXmlStreamAttributes& attrs)
+{
+	double xa, ya;
+	struct ArrowDesc arrow;
+	arrow.name = attrs.valueAsString("Name");
+	arrow.userArrow = true;
+	QString tmp = attrs.valueAsString("Points");
+	ScTextStream fp(&tmp, QIODevice::ReadOnly);
+	unsigned int numPoints = attrs.valueAsUInt("NumPoints");
+	for (uint cx = 0; cx < numPoints; ++cx)
+	{
+		fp >> xa;
+		fp >> ya;
+		arrow.points.addPoint(xa, ya);
+	}
+	doc->arrowStyles.append(arrow);
+	return true;
+}
+
+bool Scribus150Format::readMultiline(multiLine& ml, ScXmlStreamReader& reader)
+{
+	ml = multiLine();
+	ScXmlStreamAttributes rattrs = reader.scAttributes();
+	QStringRef tagName = reader.name();
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		ScXmlStreamReader::TokenType tType = reader.readNext();
+		if (tType == ScXmlStreamReader::EndElement && reader.name() == tagName)
+			break;
+		if (tType == ScXmlStreamReader::StartElement && reader.name() == "SubLine")
+		{
+			struct SingleLine sl;
+			ScXmlStreamAttributes attrs = reader.scAttributes();
+			sl.Color    = attrs.valueAsString("Color");
+			sl.Dash     = attrs.valueAsInt("Dash");
+			sl.LineEnd  = attrs.valueAsInt("LineEnd");
+			sl.LineJoin = attrs.valueAsInt("LineJoin");
+			sl.Shade    = attrs.valueAsInt("Shade");
+			sl.Width    = attrs.valueAsDouble("Width");
+			ml.shortcut = attrs.valueAsString("Shortcut");
+			ml.push_back(sl);
+		}
+	}
+	return !reader.hasError();
+}
+
+bool Scribus150Format::readBookMark(ScribusDoc::BookMa& bookmark, int& elem, ScXmlStreamAttributes& attrs)
+{
+	elem = attrs.valueAsInt("Element");
+	bookmark.PageObject = NULL;
+	bookmark.Title  = attrs.valueAsString("Title");
+	bookmark.Text   = attrs.valueAsString("Text");
+	bookmark.Aktion = attrs.valueAsString("Aktion");
+	bookmark.ItemNr = attrs.valueAsInt("ItemNr");
+	bookmark.First  = attrs.valueAsInt("First");
+	bookmark.Last   = attrs.valueAsInt("Last");
+	bookmark.Prev   = attrs.valueAsInt("Prev");
+	bookmark.Next   = attrs.valueAsInt("Next");
+	bookmark.Parent = attrs.valueAsInt("Parent");
+	return true;
+}
+
+bool Scribus150Format::readPDFOptions(ScribusDoc* doc, ScXmlStreamReader& reader)
+{
+	ScXmlStreamAttributes attrs = reader.scAttributes();
+
+	doc->PDF_Options.firstUse   = attrs.valueAsBool("firstUse", true);
+	doc->PDF_Options.Articles   = attrs.valueAsBool("Articles");
+	doc->PDF_Options.Thumbnails = attrs.valueAsBool("Thumbnails");
+	doc->PDF_Options.Compress   = attrs.valueAsBool("Compress");
+	doc->PDF_Options.CompressMethod = (PDFOptions::PDFCompression)attrs.valueAsInt("CMethod", 0);
+	doc->PDF_Options.Quality    = attrs.valueAsInt("Quality", 0);
+	doc->PDF_Options.RecalcPic  = attrs.valueAsBool("RecalcPic");
+	doc->PDF_Options.Bookmarks  = attrs.valueAsBool("Bookmarks");
+	doc->PDF_Options.MirrorH    = attrs.valueAsBool("MirrorH", false);
+	doc->PDF_Options.MirrorV    = attrs.valueAsBool("MirrorV", false);
+	doc->PDF_Options.RotateDeg  = attrs.valueAsInt("RotateDeg", 0);
+	doc->PDF_Options.doClip     = attrs.valueAsBool("Clip", false);
+	doc->PDF_Options.PresentMode = attrs.valueAsBool("PresentMode");
+	doc->PDF_Options.PicRes     = attrs.valueAsInt("PicRes");
+	// Fixme: check input pdf version
+	doc->PDF_Options.Version    = (PDFOptions::PDFVersion) attrs.valueAsInt("Version");
+	doc->PDF_Options.Resolution = attrs.valueAsInt("Resolution");
+	doc->PDF_Options.Binding    = attrs.valueAsInt("Binding");
+	doc->PDF_Options.fileName   = "";
+	doc->PDF_Options.isGrayscale   = attrs.valueAsBool("Grayscale", false);
+	doc->PDF_Options.UseRGB        = attrs.valueAsBool("RGBMode", false);
+	doc->PDF_Options.UseProfiles   = attrs.valueAsBool("UseProfiles", false);
+	doc->PDF_Options.UseProfiles2  = attrs.valueAsBool("UseProfiles2", false);
+	doc->PDF_Options.Intent        = attrs.valueAsInt("Intent", 1);
+	doc->PDF_Options.Intent2       = attrs.valueAsInt("Intent2", 1);
+	doc->PDF_Options.SolidProf     = attrs.valueAsString("SolidP", "");
+	doc->PDF_Options.ImageProf     = attrs.valueAsString("ImageP", "");
+	doc->PDF_Options.PrintProf     = attrs.valueAsString("PrintP", "");
+	doc->PDF_Options.Info          = attrs.valueAsString("InfoString", "");
+	doc->PDF_Options.bleeds.Top    = attrs.valueAsDouble("BTop", 0.0);
+	doc->PDF_Options.bleeds.Left   = attrs.valueAsDouble("BLeft", 0.0);
+	doc->PDF_Options.bleeds.Right  = attrs.valueAsDouble("BRight", 0.0);
+	doc->PDF_Options.bleeds.Bottom = attrs.valueAsDouble("BBottom", 0.0);
+	doc->PDF_Options.useDocBleeds  = attrs.valueAsBool("useDocBleeds", true);
+	doc->PDF_Options.cropMarks     = attrs.valueAsBool("cropMarks", false);
+	doc->PDF_Options.bleedMarks    = attrs.valueAsBool("bleedMarks", false);
+	doc->PDF_Options.registrationMarks = attrs.valueAsBool("registrationMarks", false);
+	doc->PDF_Options.colorMarks    = attrs.valueAsBool("colorMarks", false);
+	doc->PDF_Options.docInfoMarks  = attrs.valueAsBool("docInfoMarks", false);
+	doc->PDF_Options.markOffset    = attrs.valueAsDouble("markOffset", 0.0);
+	doc->PDF_Options.EmbeddedI     = attrs.valueAsBool("ImagePr", false);
+	doc->PDF_Options.PassOwner     = attrs.valueAsString("PassOwner", "");
+	doc->PDF_Options.PassUser      = attrs.valueAsString("PassUser", "");
+	doc->PDF_Options.Permissions   = attrs.valueAsInt("Permissions", -4);
+	doc->PDF_Options.Encrypt       = attrs.valueAsBool("Encrypt", false);
+	doc->PDF_Options.useLayers     = attrs.valueAsBool("UseLayers", false);
+	doc->PDF_Options.UseLPI        = attrs.valueAsBool("UseLpi", false);
+	doc->PDF_Options.UseSpotColors = attrs.valueAsBool("UseSpotColors", true);
+	doc->PDF_Options.doMultiFile   = attrs.valueAsBool("doMultiFile", false);
+	doc->PDF_Options.displayBookmarks =  attrs.valueAsBool("displayBookmarks", false);
+	doc->PDF_Options.displayFullscreen = attrs.valueAsBool("displayFullscreen", false);
+	doc->PDF_Options.displayLayers = attrs.valueAsBool("displayLayers", false);
+	doc->PDF_Options.displayThumbs = attrs.valueAsBool("displayThumbs", false);
+	doc->PDF_Options.hideMenuBar   = attrs.valueAsBool("hideMenuBar", false);
+	doc->PDF_Options.hideToolBar   = attrs.valueAsBool("hideToolBar", false);
+	doc->PDF_Options.fitWindow     = attrs.valueAsBool("fitWindow", false);
+	doc->PDF_Options.PageLayout    = attrs.valueAsInt("PageLayout", 0);
+	doc->PDF_Options.openAction    = attrs.valueAsString("openAction", "");
+
+	QStringRef tagName = reader.name();
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		reader.readNext();
+		if (reader.isEndElement() && (reader.name() == tagName))
+			break;
+		if (!reader.isStartElement())
+			continue;
+		QStringRef tName = reader.name();
+		attrs = reader.scAttributes();
+		if(tName == "LPI")
+		{
+			struct LPIData lpo;
+			lpo.Angle     = attrs.valueAsInt("Angle");
+			lpo.Frequency = attrs.valueAsInt("Frequency");
+			lpo.SpotFunc  = attrs.valueAsInt("SpotFunction");
+			doc->PDF_Options.LPISettings[attrs.valueAsString("Color")] = lpo;
+		}
+		if(tName == "Fonts")
+		{
+			QString fname = attrs.valueAsString("Name");
+			if (!doc->PDF_Options.EmbedList.contains(fname))
+				doc->PDF_Options.EmbedList.append(fname);
+		}
+		if(tName == "Subset")
+		{
+			QString sname = attrs.valueAsString("Name");
+			if (!doc->PDF_Options.SubsetList.contains(sname))
+				doc->PDF_Options.SubsetList.append(sname);
+		}
+		if(tName == "Effekte")
+		{
+			struct PDFPresentationData ef;
+			ef.pageEffectDuration =  attrs.valueAsInt("pageEffectDuration");
+			ef.pageViewDuration =  attrs.valueAsInt("pageViewDuration");
+			ef.effectType = attrs.valueAsInt("effectType");
+			ef.Dm = attrs.valueAsInt("Dm");
+			ef.M  = attrs.valueAsInt("M");
+			ef.Di = attrs.valueAsInt("Di");
+			doc->PDF_Options.PresentVals.append(ef);
+		}
+	}
+	return !reader.hasError();
+}
+
+bool Scribus150Format::readPrinterOptions(ScribusDoc* doc, ScXmlStreamReader& reader)
+{
+	ScXmlStreamAttributes attrs = reader.scAttributes();
+	doc->Print_Options.firstUse = attrs.valueAsBool("firstUse");
+	doc->Print_Options.toFile   = attrs.valueAsBool("toFile");
+	doc->Print_Options.useAltPrintCommand = attrs.valueAsBool("useAltPrintCommand");
+	doc->Print_Options.outputSeparations  = attrs.valueAsBool("outputSeparations");
+	doc->Print_Options.useSpotColors      = attrs.valueAsBool("useSpotColors");
+	doc->Print_Options.useColor = attrs.valueAsBool("useColor");
+	doc->Print_Options.mirrorH  = attrs.valueAsBool("mirrorH");
+	doc->Print_Options.mirrorV  = attrs.valueAsBool("mirrorV");
+	doc->Print_Options.useICC   = attrs.valueAsBool("useICC");
+	doc->Print_Options.doGCR    = attrs.valueAsBool("doGCR");
+	doc->Print_Options.doClip   = attrs.valueAsBool("doClip");
+	doc->Print_Options.setDevParam  = attrs.valueAsBool("setDevParam");
+	doc->Print_Options.useDocBleeds = attrs.valueAsBool("useDocBleeds");
+	doc->Print_Options.cropMarks    = attrs.valueAsBool("cropMarks");
+	doc->Print_Options.bleedMarks   = attrs.valueAsBool("bleedMarks");
+	doc->Print_Options.registrationMarks = attrs.valueAsBool("registrationMarks");
+	doc->Print_Options.colorMarks   = attrs.valueAsBool("colorMarks");
+	doc->Print_Options.includePDFMarks = attrs.valueAsBool("includePDFMarks", "1");
+	if (attrs.hasAttribute("PrintEngine"))
+		doc->Print_Options.prnEngine = (PrintEngine) attrs.valueAsInt("PrintEngine", 3);
+	else
+		doc->Print_Options.prnEngine = (PrintEngine) attrs.valueAsInt("PSLevel", 3);
+	doc->Print_Options.markOffset    = attrs.valueAsDouble("markOffset");
+	doc->Print_Options.bleeds.Top    = attrs.valueAsDouble("BleedTop");
+	doc->Print_Options.bleeds.Left   = attrs.valueAsDouble("BleedLeft");
+	doc->Print_Options.bleeds.Right  = attrs.valueAsDouble("BleedRight");
+	doc->Print_Options.bleeds.Bottom = attrs.valueAsDouble("BleedBottom");
+	doc->Print_Options.printer  = attrs.valueAsString("printer");
+	doc->Print_Options.filename = attrs.valueAsString("filename");
+	doc->Print_Options.separationName = attrs.valueAsString("separationName");
+	doc->Print_Options.printerCommand = attrs.valueAsString("printerCommand");
+	doc->Print_Options.copies = 1;
+
+	QStringRef tagName = reader.name();
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		ScXmlStreamReader::TokenType tType = reader.readNext();
+		QStringRef tName = reader.name();
+		if (tType == ScXmlStreamReader::StartElement && tName == "Separation")
+			doc->Print_Options.allSeparations.append(reader.attributes().value("Name").toString());
+		if (tType == ScXmlStreamReader::EndElement && tName == tagName)
+			break;
+	}
+	return !reader.hasError();
+}
+
+bool Scribus150Format::readDocItemAttributes(ScribusDoc *doc, ScXmlStreamReader& reader)
+{
+	QStringRef tagName = reader.name();
+	doc->docItemAttributes.clear();
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		reader.readNext();
+		if (reader.isEndElement() && reader.name() == tagName)
+			break;
+		if(reader.isStartElement() && reader.name() == "ItemAttribute")
+		{
+			ScXmlStreamAttributes attrs = reader.scAttributes();
+			ObjectAttribute objattr;
+			objattr.name  = attrs.valueAsString("Name");
+			objattr.type  = attrs.valueAsString("Type");
+			objattr.value = attrs.valueAsString("Value");
+			objattr.parameter      = attrs.valueAsString("Parameter");
+			objattr.relationship   = attrs.valueAsString("Relationship");
+			objattr.relationshipto = attrs.valueAsString("RelationshipTo");
+			objattr.autoaddto = attrs.valueAsString("AutoAddTo");
+			doc->docItemAttributes.append(objattr);
+		}
+	}
+	return !reader.hasError();
+}
+
+bool Scribus150Format::readTableOfContents(ScribusDoc* doc, ScXmlStreamReader& reader)
+{
+	QStringRef tagName = reader.name();
+	m_Doc->docToCSetups.clear();
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		reader.readNext();
+		if (reader.isEndElement() && reader.name() == tagName)
+			break;
+		if(reader.isStartElement() && reader.name() == "TableOfContents")
+		{
+			ScXmlStreamAttributes attrs = reader.scAttributes();
+			ToCSetup tocsetup;
+			tocsetup.name = attrs.valueAsString("Name");
+			tocsetup.itemAttrName = attrs.valueAsString("ItemAttributeName");
+			tocsetup.frameName    = attrs.valueAsString("FrameName");
+			tocsetup.textStyle    = attrs.valueAsString("Style");
+			tocsetup.listNonPrintingFrames = QVariant(attrs.valueAsString("ListNonPrinting")).toBool();
+			QString numberPlacement = attrs.valueAsString("NumberPlacement");
+			if (numberPlacement == "Beginning")
+				tocsetup.pageLocation = Beginning;
+			if (numberPlacement == "End")
+				tocsetup.pageLocation = End;
+			if (numberPlacement == "NotShown")
+				tocsetup.pageLocation = NotShown;
+			doc->docToCSetups.append(tocsetup);
+		}
+	}
+	return !reader.hasError();
+}
+
+bool Scribus150Format::readSections(ScribusDoc* doc, ScXmlStreamReader& reader)
+{
+	QStringRef tagName = reader.name();
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		reader.readNext();
+		if (reader.isEndElement() && reader.name() == tagName)
+			break;
+		if (reader.isStartElement() && reader.name() == "Section")
+		{
+			ScXmlStreamAttributes attrs = reader.scAttributes();
+			struct DocumentSection newSection;
+			newSection.number = attrs.valueAsInt("Number");
+			newSection.name   = attrs.valueAsString("Name");
+			newSection.fromindex = attrs.valueAsInt("From");
+			newSection.toindex   = attrs.valueAsInt("To");
+			QString type = attrs.valueAsString("Type");
+			if (type == "Type_1_2_3")
+				newSection.type=Type_1_2_3;
+			if (type == "Type_i_ii_iii")
+				newSection.type=Type_i_ii_iii;
+			if (type == "Type_I_II_III")
+				newSection.type=Type_I_II_III;
+			if (type == "Type_a_b_c")
+				newSection.type=Type_a_b_c;
+			if (type == "Type_A_B_C")
+				newSection.type=Type_A_B_C;
+			if (type == "Type_None")
+				newSection.type=Type_None;
+			newSection.sectionstartindex = attrs.valueAsInt("Start");
+			newSection.reversed = attrs.valueAsBool("Reversed");
+			newSection.active   = attrs.valueAsBool("Active");
+			doc->sections.insert(newSection.number, newSection);
+		}
+	}
+	return !reader.hasError();
+}
+
+bool Scribus150Format::readHyphen(ScribusDoc *doc, ScXmlStreamReader& reader)
+{
+	QStringRef tagName = reader.name();
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		reader.readNext();
+		if (reader.isEndElement() && reader.name() == tagName)
+			break;
+		if (reader.isStartElement() && reader.name() == "EXCEPTION")
+		{
+			ScXmlStreamAttributes attrs = reader.scAttributes();
+			QString word = attrs.valueAsString("WORD");
+			QString hyph = attrs.valueAsString("HYPHENATED");
+			doc->docHyphenator->specialWords.insert(word, hyph);
+		}
+		else if (reader.isStartElement() && reader.name() == "IGNORE")
+		{
+			ScXmlStreamAttributes attrs = reader.scAttributes();
+			QString word = attrs.valueAsString("WORD");
+			doc->docHyphenator->ignoredWords.insert(word);
+		}
+	}
+	return !reader.hasError();
+}
+
+bool Scribus150Format::readPage(ScribusDoc* doc, ScXmlStreamReader& reader)
+{
+	QStringRef tagName = reader.name();
+
+	ScXmlStreamAttributes attrs = reader.scAttributes();
+	int     pageNum  = attrs.valueAsInt("NUM");
+	QString pageName = attrs.valueAsString("NAM", "");
+	if (tagName == "MASTERPAGE" && pageName.isEmpty())
+	{
+		qDebug() << "scribus150format: corrupted masterpage with empty name detected";
+		return true;
+	}
+	m_Doc->setMasterPageMode(!pageName.isEmpty());
+	Page* newPage = pageName.isEmpty() ? doc->addPage(pageNum) : doc->addMasterPage(pageNum, pageName);
+
+	newPage->LeftPg   = attrs.valueAsInt("LEFT", 0);
+	QString mpName    = attrs.valueAsString("MNAM", "Normal");
+	newPage->MPageNam = m_Doc->masterPageMode() ? QString("") : mpName;
+	if (attrs.hasAttribute("Size"))
+		newPage->m_pageSize = attrs.valueAsString("Size");
+	if (attrs.hasAttribute("Orientation"))
+		newPage->setOrientation(attrs.valueAsInt("Orientation"));
+	newPage->setXOffset(attrs.valueAsDouble("PAGEXPOS"));
+	newPage->setYOffset(attrs.valueAsDouble("PAGEYPOS"));
+	if (attrs.hasAttribute("PAGEWIDTH"))
+		newPage->setWidth(attrs.valueAsDouble("PAGEWIDTH"));
+	else
+		newPage->setWidth(attrs.valueAsDouble("PAGEWITH"));
+	newPage->setHeight(attrs.valueAsDouble("PAGEHEIGHT"));
+	newPage->setInitialHeight(newPage->height());
+	newPage->setInitialWidth(newPage->width());
+	newPage->initialMargins.Top    = qMax(0.0, attrs.valueAsDouble("BORDERTOP"));
+	newPage->initialMargins.Bottom = qMax(0.0, attrs.valueAsDouble("BORDERBOTTOM"));
+	newPage->initialMargins.Left   = qMax(0.0, attrs.valueAsDouble("BORDERLEFT"));
+	newPage->initialMargins.Right  = qMax(0.0, attrs.valueAsDouble("BORDERRIGHT"));
+	newPage->marginPreset   = attrs.valueAsInt("PRESET", 0);
+	newPage->Margins.Top    = newPage->initialMargins.Top;
+	newPage->Margins.Bottom = newPage->initialMargins.Bottom;
+	m_Doc->setMasterPageMode(false);
+	//m_Doc->Pages=&m_Doc->DocPages;
+	// guides reading
+	newPage->guides.setHorizontalAutoGap( attrs.valueAsDouble("AGhorizontalAutoGap", 0.0));
+	newPage->guides.setVerticalAutoGap  ( attrs.valueAsDouble("AGverticalAutoGap", 0.0));
+	newPage->guides.setHorizontalAutoCount( attrs.valueAsInt("AGhorizontalAutoCount", 0) );
+	newPage->guides.setVerticalAutoCount  ( attrs.valueAsInt("AGverticalAutoCount", 0) );
+	newPage->guides.setHorizontalAutoRefer( attrs.valueAsInt("AGhorizontalAutoRefer", 0) );
+	newPage->guides.setVerticalAutoRefer  ( attrs.valueAsInt("AGverticalAutoRefer", 0) );
+	GuideManagerIO::readVerticalGuides(attrs.valueAsString("VerticalGuides"),
+			newPage,
+			GuideManagerCore::Standard,
+			attrs.hasAttribute("NumVGuides"));
+	GuideManagerIO::readHorizontalGuides(attrs.valueAsString("HorizontalGuides"),
+			newPage,
+			GuideManagerCore::Standard,
+			attrs.hasAttribute("NumHGuides"));
+	GuideManagerIO::readSelection(attrs.valueAsString("AGSelection"), newPage);
+	return true;
+}
+
+bool Scribus150Format::readObject(ScribusDoc* doc, ScXmlStreamReader& reader, ItemInfo& info, const QString& baseDir, bool loadPage)
+{
+	QStringRef tagName = reader.name();
+	ScXmlStreamAttributes attrs = reader.scAttributes();
+
+	if (!loadPage)
+	{
+		if (tagName == "PAGEOBJECT" || tagName == "FRAMEOBJECT" || tagName == "PatternItem")
+			doc->setMasterPageMode(false);
+		else
+			doc->setMasterPageMode(true);
+	}
+	int pagenr = -1;
+	if ((!attrs.value("OnMasterPage").isEmpty()) && (tagName == "MASTEROBJECT"))
+	{
+		doc->setCurrentPage(doc->MasterPages.at(doc->MasterNames[attrs.valueAsString("OnMasterPage")]));
+		pagenr = -2;
+	}
+
+	PageItem* newItem = pasteItem(doc, attrs, baseDir, pagenr);
+	newItem->setRedrawBounding();
+	if (tagName == "MASTEROBJECT")
+		newItem->OwnPage = doc->OnPage(newItem);
+	else
+		newItem->OwnPage = attrs.valueAsInt("OwnPage");
+	if (tagName == "PAGEOBJECT")
+		newItem->OnMasterPage = "";
+	QString tmpf = attrs.valueAsString("IFONT", doc->itemToolPrefs.defFont);
+	m_AvailableFonts->findFont(tmpf, doc);
+
+//	newItem->Language = ScMW->GetLang(pg.attribute("LANGUAGE", doc->Language));
+	newItem->isAutoText = attrs.valueAsBool("AUTOTEXT", false);
+	newItem->isEmbedded = attrs.valueAsBool("isInline", false);
+	newItem->gXpos   = attrs.valueAsDouble("gXpos", 0.0);
+	newItem->gYpos   = attrs.valueAsDouble("gYpos", 0.0);
+	newItem->gWidth  = attrs.valueAsDouble("gWidth", newItem->width());
+	newItem->gHeight = attrs.valueAsDouble("gHeight", newItem->height());
+	if (newItem->isAutoText)
+		doc->LastAuto = newItem;
+
+	if (tagName == "FRAMEOBJECT")
+	{
+		doc->FrameItems.append(doc->Items->takeAt(newItem->ItemNr));
+		newItem->ItemNr = doc->FrameItems.count()-1;
+	}
+
+	info.item     = newItem;
+	info.nextItem = attrs.valueAsInt("NEXTITEM", -1);
+	info.ownLink  = newItem->isTableItem ? attrs.valueAsInt("OwnLINK", 0) : 0;
+	info.groupLastItem = 0;
+
+	newItem->isGroupControl = attrs.valueAsBool("isGroupControl", 0);
+	if (newItem->isGroupControl)
+	{
+		int groupLastItem = attrs.valueAsInt("groupsLastItem", 0);
+		// Sanity check for some broken files created using buggy development versions.
+		if ((newItem->Groups.count() == 0) || (groupLastItem <= 0)) 
+		{
+			newItem->isGroupControl = false;
+			newItem->setFillColor("None");
+		}
+		info.groupLastItem = groupLastItem;
+	}
+
+	bool layerFound = true;
+	struct ImageLoadRequest loadingInfo;
+#ifdef HAVE_OSG
+	struct PageItem_OSGFrame::viewDefinition currentView;
+#endif
+	QList<ParagraphStyle::TabRecord> tabValues;
+
+	LastStyles * lastStyle = new LastStyles();
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		ScXmlStreamReader::TokenType tType = reader.readNext();
+		if (reader.isEndElement() && tagName == reader.name())
+			break;
+		if (tType != ScXmlStreamReader::StartElement)
+			continue;
+		QStringRef tName = reader.name();
+		ScXmlStreamAttributes tAtt = reader.scAttributes();
+		if (tName == "CSTOP")
+		{
+			QString name = tAtt.valueAsString("NAME");
+			double ramp  = tAtt.valueAsDouble("RAMP", 0.0);
+			int shade    = tAtt.valueAsInt("SHADE", 100);
+			double opa   = tAtt.valueAsDouble("TRANS", 1.0);
+			newItem->fill_gradient.addStop(SetColor(doc, name, shade), ramp, 0.5, opa, name, shade);
+		}
+
+		if (tName == "ITEXT")
+			readItemText(newItem, tAtt, lastStyle);
+		else if (tName == "para")
+		{
+			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::PARSEP);
+			ParagraphStyle newStyle;
+			PrefsManager* prefsManager = PrefsManager::instance();
+			readParagraphStyle(doc, reader, newStyle, prefsManager->appPrefs.fontPrefs.AvailFonts);
+			newItem->itemText.setStyle(newItem->itemText.length()-1, newStyle);
+			newItem->itemText.setCharStyle(newItem->itemText.length()-1, 1, lastStyle->Style);
+		}
+		else if (tName == "trail")
+		{
+			ParagraphStyle newStyle;
+			PrefsManager* prefsManager = PrefsManager::instance();
+			readParagraphStyle(doc, reader, newStyle, prefsManager->appPrefs.fontPrefs.AvailFonts);
+			newItem->itemText.setStyle(newItem->itemText.length(), newStyle);
+		}
+		else if (tName == "tab")
+		{
+			CharStyle newStyle;
+			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::TAB);
+			readCharacterStyleAttrs(doc, tAtt, newStyle);
+			newItem->itemText.setCharStyle(newItem->itemText.length()-1, 1, newStyle);
+			lastStyle->StyleStart = newItem->itemText.length()-1;
+			lastStyle->Style = newStyle;
+		}
+		else if (tName == "breakline")
+			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::LINEBREAK);
+		else if (tName == "breakcol")
+			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::COLBREAK);
+		else if (tName == "breakframe")
+			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::FRAMEBREAK);
+		else if (tName == "nbhyphen")
+			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::NBHYPHEN);
+		else if (tName == "nbspace")
+			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::NBSPACE);
+		else if (tName == "zwnbspace")
+			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::ZWNBSPACE);
+		else if (tName == "zwspace")
+			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::ZWSPACE);
+		else if (tName == "var")
+		{
+			CharStyle newStyle;
+			if (tAtt.value("name") == "pgno")
+				newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::PAGENUMBER);
+			else
+				newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::PAGECOUNT);
+			readCharacterStyleAttrs(doc, tAtt, newStyle);
+			newItem->itemText.setCharStyle(newItem->itemText.length()-1, 1, newStyle);
+			lastStyle->StyleStart = newItem->itemText.length()-1;
+			lastStyle->Style = newStyle;
+		}
+		if (tName == "PageItemAttributes")
+		{
+			readPageItemAttributes(newItem, reader);
+		}
+		if (tName == "PSDLayer")
+		{
+			layerFound = true;
+			loadingInfo.blend   = tAtt.valueAsString("Blend");
+			loadingInfo.opacity = tAtt.valueAsInt("Opacity");
+			loadingInfo.visible = tAtt.valueAsBool("Visible");
+			loadingInfo.useMask = tAtt.valueAsBool("useMask", true);
+			newItem->pixm.imgInfo.RequestProps.insert(tAtt.valueAsInt("Layer"), loadingInfo);
+		}
+#ifdef HAVE_OSG
+		if (tName == "OSGViews")
+		{
+			currentView.angleFOV = tAtt.valueAsDouble("angleFOV");
+			QString tmp = "";
+			tmp = tAtt.valueAsString("trackM");
+			ScTextStream fp(&tmp, QIODevice::ReadOnly);
+			double m1, m2, m3, m4;
+			double m5, m6, m7, m8;
+			double m9, m10, m11, m12;
+			double m13, m14, m15, m16;
+			fp >> m1 >> m2 >> m3 >> m4;
+			fp >> m5 >> m6 >> m7 >> m8;
+			fp >> m9 >> m10 >> m11 >> m12;
+			fp >> m13 >> m14 >> m15 >> m16;
+			currentView.trackerMatrix.set(m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16);
+			tmp = "";
+			tmp = tAtt.valueAsString("trackC");
+			ScTextStream fp2(&tmp, QIODevice::ReadOnly);
+			double v1, v2, v3;
+			fp2 >> v1 >> v2 >> v3;
+			currentView.trackerCenter.set(v1, v2, v3);
+			tmp = "";
+			tmp = tAtt.valueAsString("cameraP");
+			ScTextStream fp3(&tmp, QIODevice::ReadOnly);
+			fp3 >> v1 >> v2 >> v3;
+			currentView.cameraPosition.set(v1, v2, v3);
+			tmp = "";
+			tmp = tAtt.valueAsString("cameraU");
+			ScTextStream fp4(&tmp, QIODevice::ReadOnly);
+			fp4 >> v1 >> v2 >> v3;
+			currentView.cameraUp.set(v1, v2, v3);
+			currentView.trackerDist = tAtt.valueAsDouble("trackerDist");
+			currentView.trackerSize = tAtt.valueAsDouble("trackerSize");
+			currentView.illumination = static_cast<PageItem_OSGFrame::LightType>(tAtt.valueAsInt("illumination"));
+			currentView.rendermode = static_cast<PageItem_OSGFrame::RenderType>(tAtt.valueAsInt("rendermode"));
+			currentView.addedTransparency = tAtt.valueAsDouble("trans");
+			currentView.colorAC = QColor(tAtt.valueAsString("colorAC"));
+			currentView.colorFC = QColor(tAtt.valueAsString("colorFC"));
+			if (newItem->asOSGFrame())
+				newItem->asOSGFrame()->viewMap.insert(tAtt.valueAsString("viewName"), currentView);
+		}
+#endif
+		if (tName == "ImageEffect")
+		{
+			struct ImageEffect ef;
+			ef.effectParameters = tAtt.valueAsString("Param");
+			ef.effectCode = tAtt.valueAsInt("Code");
+			newItem->effectsInUse.append(ef);
+		}
+		if (tName == "Tabs")
+		{
+			ParagraphStyle::TabRecord tb;
+			tb.tabPosition = tAtt.valueAsDouble("Pos");
+			tb.tabType     = tAtt.valueAsInt("Type");
+			QString tbCh   = tAtt.valueAsString("Fill", "");
+			tb.tabFillChar = tbCh.isEmpty() ? QChar() : tbCh[0];
+			tabValues.append(tb);
+		}
+		if (tName == "LATEX")
+		{
+			if (newItem->asLatexFrame())
+			{
+				readLatexInfo(newItem->asLatexFrame(), reader);
+			}
+			else
+			{
+				while (!reader.atEnd() && !reader.hasError())
+				{
+					reader.readNext();
+					if (reader.isEndElement() && reader.name() == tName)
+						break;
+				}
+			}
+		}
+	}
+	delete lastStyle;
+
+	if (tabValues.count() > 0) 
+	{
+		ParagraphStyle newDefault(newItem->itemText.defaultStyle());
+		newDefault.setTabValues(tabValues);
+		newItem->itemText.setDefaultStyle(newDefault);
+	}
+
+	if (newItem->fill_gradient.Stops() == 0)
+	{
+		const ScColor& col1 = doc->PageColors[doc->itemToolPrefs.dBrush];
+		const ScColor& col2 = doc->PageColors[doc->itemToolPrefs.dPen];
+		newItem->fill_gradient.addStop(ScColorEngine::getRGBColor(col1, doc), 0.0, 0.5, 1.0, doc->itemToolPrefs.dBrush, 100);
+		newItem->fill_gradient.addStop(ScColorEngine::getRGBColor(col2, doc), 1.0, 0.5, 1.0, doc->itemToolPrefs.dPen, 100);
+	}
+
+	if (newItem->asPathText())
+	{
+		newItem->updatePolyClip();
+		newItem->Frame = true;
+	}
+#ifdef HAVE_OSG
+	if (newItem->asImageFrame() || newItem->asLatexFrame() || newItem->asOSGFrame())
+#else
+	if (newItem->asImageFrame() || newItem->asLatexFrame())
+#endif
+	{
+		if (!newItem->Pfile.isEmpty())
+		{
+			doc->loadPict(newItem->Pfile, newItem, false);
+			if (layerFound)
+			{
+				newItem->pixm.imgInfo.isRequest = true;
+				doc->loadPict(newItem->Pfile, newItem, true);
+			}
+			newItem->AdjustPictScale();
+		}
+	}
+
+	if (!loadPage)
+		doc->setMasterPageMode(false);
+	return !reader.hasError();
+}
+
+bool Scribus150Format::readPattern(ScribusDoc* doc, ScXmlStreamReader& reader, const QString& baseDir)
+{
+	ScPattern pat;
+	ScXmlStreamAttributes attrs = reader.scAttributes();
+	QString patternName = attrs.valueAsString("Name");
+	bool success = true;
+
+	if (patternName.isEmpty())
+	{
+		reader.readToElementEnd();
+		return true;
+	}
+
+	QMap<PageItem*, int> groupID2;
+	QMap<int,int> TableID2;
+	QList<PageItem*> TableItems2;
+
+	pat.setDoc(doc);
+	pat.width   = attrs.valueAsDouble("width", 0.0);
+	pat.height  = attrs.valueAsDouble("height", 0.0);
+	pat.scaleX  = attrs.valueAsDouble("scaleX", 0.0);
+	pat.scaleY  = attrs.valueAsDouble("scaleY", 0.0);
+	pat.xoffset = attrs.valueAsDouble("xoffset", 0.0);
+	pat.yoffset = attrs.valueAsDouble("yoffset", 0.0);
+	
+	uint itemCount1 = m_Doc->Items->count();
+	bool savedAlignGrid = m_Doc->useRaster;
+	bool savedAlignGuides = m_Doc->SnapGuides;
+	m_Doc->useRaster = false;
+	m_Doc->SnapGuides = false;
+
+	QStringRef tagName = reader.name();
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		reader.readNext();
+		if (reader.isEndElement() && reader.name() == tagName)
+			break;
+		if (!reader.isStartElement() || reader.name() != "PatternItem") 
+			continue;
+
+		QStringRef tName = reader.name();
+		ScXmlStreamAttributes tAtt = reader.attributes();
+			
+		ItemInfo itemInfo;
+		m_Doc->setMasterPageMode(false);
+		
+		int ownPage = tAtt.valueAsInt("OwnPage");
+		success = readObject(doc, reader, itemInfo, baseDir, false);
+		if (!success) break;
+
+		itemInfo.item->OwnPage = ownPage;
+		itemInfo.item->OnMasterPage = "";
+
+		if (itemInfo.item->isTableItem)
+		{
+			TableItems2.append(itemInfo.item);
+			TableID2.insert(itemInfo.ownLink, itemInfo.item->ItemNr);
+		}
+		if (itemInfo.item->isGroupControl)
+		{
+			groupID2.insert(itemInfo.item, itemInfo.groupLastItem + itemInfo.item->ItemNr);
+		}
+	}
+
+	doc->useRaster  = savedAlignGrid;
+	doc->SnapGuides = savedAlignGuides;
+	if (!success)
+	{
+		return false;
+	}
+
+	if (groupID2.count() != 0)
+	{
+		QMap<PageItem*, int>::Iterator it;
+		for (it = groupID2.begin(); it != groupID2.end(); ++it)
+		{
+			it.key()->groupsLastItem = m_Doc->Items->at(it.value());
+		}
+	}
+	if (TableItems2.count() != 0)
+	{
+		for (int ttc = 0; ttc < TableItems2.count(); ++ttc)
+		{
+			PageItem* ta = TableItems2.at(ttc);
+			if (ta->TopLinkID != -1)
+				ta->TopLink = m_Doc->Items->at(TableID2[ta->TopLinkID]);
+			else
+				ta->TopLink = 0;
+			if (ta->LeftLinkID != -1)
+				ta->LeftLink = m_Doc->Items->at(TableID2[ta->LeftLinkID]);
+			else
+				ta->LeftLink = 0;
+			if (ta->RightLinkID != -1)
+				ta->RightLink = m_Doc->Items->at(TableID2[ta->RightLinkID]);
+			else
+				ta->RightLink = 0;
+			if (ta->BottomLinkID != -1)
+				ta->BottomLink = m_Doc->Items->at(TableID2[ta->BottomLinkID]);
+			else
+				ta->BottomLink = 0;
+		}
+	}
+
+	uint itemCount2 = m_Doc->Items->count();
+	if (itemCount2 > itemCount1)
+	{
+		PageItem* currItem = doc->Items->at(itemCount1), *newItem;
+		pat.pattern = currItem->DrawObj_toImage();
+		pat.pattern = pat.pattern.copy(-pat.xoffset, -pat.yoffset, pat.width, pat.height);
+		for (uint as = itemCount1; as < itemCount2; ++as)
+		{
+			newItem = doc->Items->takeAt(itemCount1);
+			newItem->moveBy(pat.xoffset, pat.yoffset, true);
+			newItem->gXpos += pat.xoffset;
+			newItem->gYpos += pat.yoffset;
+			newItem->ItemNr = pat.items.count();
+			pat.items.append(newItem);
+		}
+	}
+	doc->docPatterns.insert(patternName, pat);
+
+	return success;
+}
+
+bool Scribus150Format::readItemText(PageItem *obj, ScXmlStreamAttributes& attrs, LastStyles* last)
+{
+	QString tmp2;
+	CharStyle newStyle;
+	ScribusDoc* doc = obj->doc();
+	
+	readCharacterStyleAttrs(doc, attrs, newStyle);
+
+	if (attrs.hasAttribute(QLatin1String("Unicode")))
+	{
+		tmp2 = QChar(attrs.valueAsInt("Unicode"));
+	}
+	else
+	{
+		tmp2 = attrs.valueAsString("CH");
+		
+		// legacy stuff:
+		tmp2.replace(QRegExp("\r"), QChar(13));
+		tmp2.replace(QRegExp("\n"), QChar(13));
+		tmp2.replace(QRegExp("\t"), QChar(9));
+	}
+	
+	// more legacy stuff:
+	QString pstylename = attrs.valueAsString("PSTYLE", "");		
+
+	fixLegacyCharStyle(newStyle);
+	last->ParaStyle = pstylename;
+	// end of legacy stuff
+	
+	int iobj = attrs.valueAsInt("COBJ", -1);
+
+	for (int cxx=0; cxx<tmp2.length(); ++cxx)
+	{
+		QChar ch = tmp2.at(cxx);		
+		{ // Legacy mode
+			if (ch == QChar(5))
+				ch = SpecialChars::PARSEP;
+			if (ch == QChar(4))
+				ch = SpecialChars::TAB;
+		}
+		
+		int pos = obj->itemText.length();
+		if (ch == SpecialChars::OBJECT) {
+			if (iobj != -1) {
+				obj->itemText.insertObject(pos, doc->FrameItems.at(iobj));
+			}
+		}
+		else if (ch == SpecialChars::SHYPHEN && pos > 0)
+		{
+//			qDebug() << QString("scribus150format: SHYPHEN at %1").arg(pos);
+			ScText* lastItem = obj->itemText.item(pos-1);
+			// double SHY means user provided SHY, single SHY is automatic one
+			if (lastItem->effects() & ScStyle_HyphenationPossible)
+			{
+				lastItem->setEffects(lastItem->effects() & ~ScStyle_HyphenationPossible);
+				obj->itemText.insertChars(pos, QString(ch));
+			}
+			else
+			{
+				lastItem->setEffects(lastItem->effects() | ScStyle_HyphenationPossible);
+			}
+		}
+		else {
+			obj->itemText.insertChars(pos, QString(ch));
+		}
+//		qDebug() << QString("style at %1: %2 ^ %3 = %4 (%5)").arg(pos).arg((uint)newStyle.effects()).arg((uint)last->Style.effects()).arg((uint)(newStyle.effects() ^ last->Style.effects())).arg(newStyle != last->Style);
+		if (newStyle != last->Style) // || (newStyle.effects() ^ last->Style.effects()) == ScStyle_HyphenationPossible) 
+		{  // FIXME StyleFlag operator== ignores hyphen flag
+//			qDebug() << QString("new style at %1: %2 -> %3").arg(pos).arg(last->Style.asString()).arg(newStyle.asString());
+			obj->itemText.setCharStyle(last->StyleStart, pos-last->StyleStart, last->Style);
+			last->Style = newStyle;
+			last->StyleStart = pos;
+		}
+		if (ch == SpecialChars::PARSEP) {
+			ParagraphStyle pstyle;
+			// Qt4 if (last->ParaStyle >= 0) {
+			if (!last->ParaStyle.isEmpty()) {
+				pstyle.setParent( last->ParaStyle );
+			}
+			obj->itemText.applyStyle(pos, pstyle);
+		}
+	}
+
+	obj->itemText.setCharStyle(last->StyleStart, obj->itemText.length()-last->StyleStart, last->Style);
+	last->StyleStart = obj->itemText.length();
+/*
+	QString dbg("");
+	for (int i=0; i < obj->itemText.length(); ++i)
+	{
+		dbg += obj->itemText.text(i,1);
+		if (obj->itemText.item(i)->effects() & ScStyle_HyphenationPossible)
+			dbg += "~";
+	}
+	qDebug("scribus150format: read itemtext %d '%s'", obj->itemText.length(), dbg.latin1());
+	*/
+	ParagraphStyle pstyle;
+
+	if (!last->ParaStyle.isEmpty()) { // Qt4 >= 0) {
+		pstyle.setParent( last->ParaStyle );
+		obj->itemText.applyStyle(obj->itemText.length()-1, pstyle);
+	}
+
+	return true;
+}
+
+bool Scribus150Format::readPageItemAttributes(PageItem* item, ScXmlStreamReader& reader)
+{
+	QStringRef tagName = reader.name();
+	ObjAttrVector pageItemAttributes;
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		reader.readNext();
+		if (reader.isEndElement() && reader.name() == tagName)
+			break;
+		if (reader.isStartElement() && reader.name() == "ItemAttribute")
+		{
+			ScXmlStreamAttributes tAtt = reader.scAttributes();
+			ObjectAttribute objattr;
+			objattr.name  = tAtt.valueAsString("Name");
+			objattr.type  = tAtt.valueAsString("Type");
+			objattr.value = tAtt.valueAsString("Value");
+			objattr.parameter = tAtt.valueAsString("Parameter");
+			objattr.relationship   = tAtt.valueAsString("Relationship");
+			objattr.relationshipto = tAtt.valueAsString("RelationshipTo");
+			objattr.autoaddto = tAtt.valueAsString("AutoAddTo");
+			pageItemAttributes.append(objattr);
+		}
+	}
+	item->setObjectAttributes(&pageItemAttributes);
+	return !reader.hasError();
+}
+
+PageItem* Scribus150Format::pasteItem(ScribusDoc *doc, ScXmlStreamAttributes& attrs, const QString& baseDir, int pagenr)
+{
+	int z = 0;
+	struct ImageLoadRequest loadingInfo;
+	PageItem::ItemType pt = static_cast<PageItem::ItemType>(attrs.valueAsInt("PTYPE"));
+	double xf, yf;
+	double x   = attrs.valueAsDouble("XPOS");
+	double y   = attrs.valueAsDouble("YPOS");
+	double w   = attrs.valueAsDouble("WIDTH");
+	double h   = attrs.valueAsDouble("HEIGHT");
+	double pw  = attrs.valueAsDouble("PWIDTH");
+	double scx = attrs.valueAsDouble("LOCALSCX");
+	double scy = attrs.valueAsDouble("LOCALSCY");
+	QString Pcolor = attrs.valueAsString("PCOLOR");
+	if (Pcolor.isEmpty())
+		Pcolor = CommonStrings::None;
+	QString Pcolor2 = attrs.valueAsString("PCOLOR2");
+	if (Pcolor2.isEmpty())
+		Pcolor2 = CommonStrings::None;
+	QColor tmpc;
+	PageItem *currItem=NULL;
+	QString tmp, clPath;
+	int xi;
+
+	switch (pt)
+	{
+	// OBSOLETE CR 2005-02-06
+	case PageItem::ItemType1:
+		z = doc->itemAdd(PageItem::Polygon, PageItem::Ellipse, x, y, w, h, pw, Pcolor, Pcolor2, true);
+		currItem = doc->Items->at(z);
+		if (pagenr > -2) 
+			currItem->OwnPage = pagenr;
+		break;
+	//
+	case PageItem::ImageFrame:
+	case PageItem::OSGFrame:
+	case PageItem::LatexFrame: /*Everything that is valid for image frames is also valid for latex frames*/
+		z = doc->itemAdd(pt, PageItem::Unspecified, x, y, w, h, 1, doc->itemToolPrefs.dBrushPict, CommonStrings::None, true);
+		currItem = doc->Items->at(z);
+		if (pagenr > -2) 
+			currItem->OwnPage = pagenr;
+		UndoManager::instance()->setUndoEnabled(false);
+		currItem->setImageXYScale(scx, scy);
+		currItem->setImageXYOffset(attrs.valueAsDouble("LOCALX"), attrs.valueAsDouble("LOCALY"));
+//		if (!currItem->asLatexFrame())
+#ifdef HAVE_OSG
+		if ((currItem->asImageFrame() || currItem->asOSGFrame()) && (!currItem->asLatexFrame()))
+#else
+		if ((currItem->asImageFrame()) && (!currItem->asLatexFrame()))
+#endif
+		{
+			bool inlineF = attrs.valueAsBool("isInlineImage", false);
+			QString dat  = attrs.valueAsString("ImageData", "");
+			QByteArray inlineImageData;
+			inlineImageData.append(dat);
+			QString inlineImageExt = attrs.valueAsString("inlineImageExt", "");
+			if (inlineF)
+			{
+				if (inlineImageData.size() > 0)
+				{
+					currItem->tempImageFile = new QTemporaryFile(QDir::tempPath() + "/scribus_temp_XXXXXX." + inlineImageExt);
+					currItem->tempImageFile->open();
+					QString fileName = getLongPathName(currItem->tempImageFile->fileName());
+					currItem->tempImageFile->close();
+					inlineImageData = qUncompress(QByteArray::fromBase64(inlineImageData));
+					QFile outFil(fileName);
+					if (outFil.open(QIODevice::WriteOnly))
+					{
+						outFil.write(inlineImageData);
+						outFil.close();
+						currItem->isInlineImage = true;
+						currItem->Pfile = fileName;
+					}
+				}
+			}
+			else
+				currItem->Pfile = Relative2Path(attrs.valueAsString("PFILE"), baseDir);
+#ifdef HAVE_OSG
+			if (currItem->asOSGFrame())
+			{
+				PageItem_OSGFrame *osgframe = currItem->asOSGFrame();
+				osgframe->modelFile = Relative2Path(attrs.valueAsString("modelFile"), baseDir);
+				osgframe->currentView = attrs.valueAsString("currentViewName", "");
+				osgframe->loadModel();
+			}
+#endif
+		}
+		currItem->IProfile    = attrs.valueAsString("PRFILE", "");
+		currItem->EmProfile   = attrs.valueAsString("EPROF" , "");
+		currItem->IRender     = attrs.valueAsInt("IRENDER", 1);
+		currItem->UseEmbedded = attrs.valueAsInt("EMBEDDED", 1);
+		currItem->pixm.imgInfo.lowResType = attrs.valueAsInt("ImageRes", 1);
+		currItem->pixm.imgInfo.actualPageNumber = attrs.valueAsInt("Pagenumber", 0);
+		currItem->IProfile    = attrs.valueAsString("PRFILE","");
+		currItem->EmProfile   = attrs.valueAsString("EPROF","");
+		currItem->IRender     = attrs.valueAsInt("IRENDER", 1);
+		currItem->UseEmbedded = attrs.valueAsInt("EMBEDDED", 1);
+		if (currItem->asLatexFrame())
+		{
+			currItem->setImageXYOffset(attrs.valueAsDouble("LOCALX") * scx, attrs.valueAsDouble("LOCALY") * scy);
+	//		currItem->setImageXYScale(1.0, 1.0);
+		}
+		else
+			currItem->setImageXYScale(scx, scy);
+		clPath = attrs.valueAsString("ImageClip", "");
+		if (currItem->pixm.imgInfo.PDSpathData.contains(clPath))
+		{
+			currItem->imageClip = currItem->pixm.imgInfo.PDSpathData[clPath].copy();
+			currItem->pixm.imgInfo.usedPath = clPath;
+			QTransform cl;
+			cl.translate(currItem->imageXOffset()*currItem->imageXScale(), currItem->imageYOffset()*currItem->imageYScale());
+			cl.scale(currItem->imageXScale(), currItem->imageYScale());
+			currItem->imageClip.map(cl);
+		}
+		currItem->setImageShown( attrs.valueAsInt("PICART"));
+/*		currItem->BBoxX = ScCLocale::toDoubleC( obj->attribute("BBOXX"));
+		currItem->BBoxH = ScCLocale::toDoubleC( obj->attribute("BBOXH")); */
+		currItem->ScaleType   = attrs.valueAsInt("SCALETYPE", 1);
+		currItem->AspectRatio = attrs.valueAsInt("RATIO", 0);
+		currItem->setLineWidth(pw);
+		UndoManager::instance()->setUndoEnabled(true);
+		break;
+	// OBSOLETE CR 2005-02-06
+	case PageItem::ItemType3:
+		z = doc->itemAdd(PageItem::Polygon, PageItem::Rectangle, x, y, w, h, pw, Pcolor, Pcolor2, true);
+		currItem = doc->Items->at(z);
+		if (pagenr > -2) 
+			currItem->OwnPage = pagenr;
+		break;
+	//
+	case PageItem::PathText:
+		z = doc->itemAdd(PageItem::PathText, PageItem::Unspecified, x, y, w, h, pw, CommonStrings::None, Pcolor, true);
+		currItem = doc->Items->at(z);
+		if (pagenr > -2) 
+			currItem->OwnPage = pagenr;
+		UndoManager::instance()->setUndoEnabled(false);
+		if (attrs.valueAsInt("ANNOTATION", 0) && attrs.valueAsBool("ANICON", false))
+		{
+			currItem->setImageXYScale(scx, scy);
+			currItem->setImageXYOffset(attrs.valueAsDouble("LOCALX"), attrs.valueAsDouble("LOCALY"));
+			currItem->Pfile  = Relative2Path(attrs.valueAsString("PFILE" , "") , baseDir);
+			currItem->Pfile2 = Relative2Path(attrs.valueAsString("PFILE2", ""), baseDir);
+			currItem->Pfile3 = Relative2Path(attrs.valueAsString("PFILE3", ""), baseDir);
+			currItem->IProfile  = attrs.valueAsString("PRFILE", "");
+			currItem->EmProfile = attrs.valueAsString("EPROF", "");
+			currItem->IRender   = attrs.valueAsInt("IRENDER", 1);
+			currItem->UseEmbedded = attrs.valueAsInt("EMBEDDED", 1);
+			doc->LoadPict(currItem->Pfile, z);
+			currItem->setImageXYScale(scx, scy);
+			currItem->setImageShown(attrs.valueAsInt("PICART"));
+/*			currItem->BBoxX = ScCLocale::toDoubleC( obj->attribute("BBOXX"));
+			currItem->BBoxH = ScCLocale::toDoubleC( obj->attribute("BBOXH")); */
+			currItem->ScaleType   = attrs.valueAsInt("SCALETYPE", 1);
+			currItem->AspectRatio = attrs.valueAsInt("RATIO", 0);
+		}
+		//currItem->convertTo(pt);
+		UndoManager::instance()->setUndoEnabled(true);
+		break;
+	case PageItem::TextFrame:
+		z = doc->itemAdd(PageItem::TextFrame, PageItem::Unspecified, x, y, w, h, pw, CommonStrings::None, Pcolor, true);
+		currItem = doc->Items->at(z);
+		if (pagenr > -2) 
+			currItem->OwnPage = pagenr;
+		UndoManager::instance()->setUndoEnabled(false);
+		if ((attrs.valueAsInt("ANNOTATION", 0)) && (attrs.valueAsBool("ANICON", false)))
+		{
+			currItem->setImageXYScale(scx, scy);
+			currItem->setImageXYOffset(attrs.valueAsDouble("LOCALX"), attrs.valueAsDouble("LOCALY"));
+			currItem->Pfile  = Relative2Path(attrs.valueAsString("PFILE" , ""), baseDir);
+			currItem->Pfile2 = Relative2Path(attrs.valueAsString("PFILE2", ""), baseDir);
+			currItem->Pfile3 = Relative2Path(attrs.valueAsString("PFILE3", ""), baseDir);
+			currItem->IProfile    = attrs.valueAsString("PRFILE", "");
+			currItem->EmProfile   = attrs.valueAsString("EPROF", "");
+			currItem->IRender     = attrs.valueAsInt("IRENDER" , 1);
+			currItem->UseEmbedded = attrs.valueAsInt("EMBEDDED", 1);
+			doc->LoadPict(currItem->Pfile, z);
+			currItem->setImageXYScale(scx, scy);
+			currItem->setImageShown( attrs.valueAsInt("PICART"));
+/*			currItem->BBoxX = ScCLocale::toDoubleC( obj->attribute("BBOXX"));
+			currItem->BBoxH = ScCLocale::toDoubleC( obj->attribute("BBOXH")); */
+			currItem->ScaleType   = attrs.valueAsInt("SCALETYPE", 1);
+			currItem->AspectRatio = attrs.valueAsInt("RATIO", 0);
+		}
+		//currItem->convertTo(pt);
+		UndoManager::instance()->setUndoEnabled(true);
+		break;
+	case PageItem::Line:
+		z = doc->itemAdd(PageItem::Line, PageItem::Unspecified, x, y, w, h, pw, CommonStrings::None, Pcolor2, true);
+		currItem = doc->Items->at(z);
+		if (pagenr > -2) 
+			currItem->OwnPage = pagenr;
+		break;
+	case PageItem::Polygon:
+		z = doc->itemAdd(PageItem::Polygon, PageItem::Unspecified, x, y, w, h, pw, Pcolor, Pcolor2, true);
+		currItem = doc->Items->at(z);
+		if (pagenr > -2) 
+			currItem->OwnPage = pagenr;
+		break;
+	case PageItem::PolyLine:
+		z = doc->itemAdd(PageItem::PolyLine, PageItem::Unspecified, x, y, w, h, pw, Pcolor, Pcolor2, true);
+		currItem = doc->Items->at(z);
+		if (pagenr > -2) 
+			currItem->OwnPage = pagenr;
+		break;
+	case PageItem::Multiple:
+		Q_ASSERT(false);
+		break;
+	}
+
+	UndoManager::instance()->setUndoEnabled(false);
+	currItem->FrameType = attrs.valueAsInt("FRTYPE", 0);
+	int startArrowIndex = attrs.valueAsInt("startArrowIndex", 0);
+	if ((startArrowIndex < 0) || (startArrowIndex > static_cast<int>(doc->arrowStyles.size())))
+	{
+		qDebug() << QString("scribus150format: invalid arrow index: %").arg(startArrowIndex);
+		startArrowIndex = 0;
+	}
+	currItem->setStartArrowIndex(startArrowIndex);
+	int endArrowIndex = attrs.valueAsInt("endArrowIndex", 0);
+	if ((endArrowIndex < 0) || (endArrowIndex > static_cast<int>(doc->arrowStyles.size())))
+	{
+		qDebug() << QString("scribus150format: invalid arrow index: %").arg(endArrowIndex);
+		endArrowIndex = 0;
+	}
+	currItem->setEndArrowIndex(endArrowIndex);
+	currItem->NamedLStyle = attrs.valueAsString("NAMEDLST", "");
+	currItem->isBookmark  = attrs.valueAsInt("BOOKMARK");
+	if ((currItem->isBookmark) && (doc->BookMarks.count() == 0))
+		doc->OldBM = true;
+	currItem->setImageFlippedH( attrs.valueAsInt("FLIPPEDH"));
+	currItem->setImageFlippedV( attrs.valueAsInt("FLIPPEDV"));
+	currItem->setCornerRadius( attrs.valueAsDouble("RADRECT", 0.0));
+	currItem->ClipEdited = attrs.valueAsInt("CLIPEDIT", 0);
+	currItem->setFillColor(Pcolor);
+	currItem->setLineColor(Pcolor2);
+	currItem->setFillShade(attrs.valueAsInt("SHADE"));
+	currItem->setLineShade(attrs.valueAsInt("SHADE2"));
+
+	ParagraphStyle pstyle;
+	if (attrs.hasAttribute("LINESP"))
+		pstyle.setLineSpacing(attrs.valueAsDouble("LINESP"));
+	if (attrs.hasAttribute("LINESPMode"))
+		pstyle.setLineSpacingMode(static_cast<ParagraphStyle::LineSpacingMode>(attrs.valueAsInt("LINESPMode", 0)));
+	if (attrs.hasAttribute("ALIGN"))
+		pstyle.setAlignment(static_cast<ParagraphStyle::AlignmentType>(attrs.valueAsInt("ALIGN", 0)));
+	if (attrs.hasAttribute("IFONT"))
+		pstyle.charStyle().setFont(m_AvailableFonts->findFont(attrs.valueAsString("IFONT"), doc));
+	if (attrs.hasAttribute("ISIZE"))
+		pstyle.charStyle().setFontSize(qRound(attrs.valueAsDouble("ISIZE") * 10));
+	if (attrs.hasAttribute("TXTSTROKE"))
+		pstyle.charStyle().setStrokeColor(attrs.valueAsString("TXTSTROKE"));
+	if (attrs.hasAttribute("TXTFILL"))
+		pstyle.charStyle().setFillColor(attrs.valueAsString("TXTFILL"));
+	if (attrs.hasAttribute("TXTSTRSH"))
+		pstyle.charStyle().setStrokeShade(attrs.valueAsInt("TXTSTRSH"));
+	if (attrs.hasAttribute("TXTFILLSH"))
+		pstyle.charStyle().setFillShade(attrs.valueAsInt("TXTFILLSH"));
+	if (attrs.hasAttribute("TXTSCALE"))
+		pstyle.charStyle().setScaleH(qRound(attrs.valueAsDouble("TXTSCALE") * 10));
+	if (attrs.hasAttribute("TXTSCALEV"))
+		pstyle.charStyle().setScaleV(qRound(attrs.valueAsDouble("TXTSCALEV") * 10));
+	if (attrs.hasAttribute("TXTBASE"))
+		pstyle.charStyle().setBaselineOffset(qRound(attrs.valueAsDouble("TXTBASE") * 10));
+	if (attrs.hasAttribute("TXTSHX"))
+		pstyle.charStyle().setShadowXOffset(qRound(attrs.valueAsDouble("TXTSHX") * 10));
+	if (attrs.hasAttribute("TXTSHY"))
+		pstyle.charStyle().setShadowYOffset(qRound(attrs.valueAsDouble("TXTSHY") * 10));
+	if (attrs.hasAttribute("TXTOUT"))
+		pstyle.charStyle().setOutlineWidth(qRound(attrs.valueAsDouble("TXTOUT") * 10));
+	if (attrs.hasAttribute("TXTULP"))
+		pstyle.charStyle().setUnderlineOffset(qRound(attrs.valueAsDouble("TXTULP") * 10));
+	if (attrs.hasAttribute("TXTULW"))
+		pstyle.charStyle().setUnderlineWidth(qRound(attrs.valueAsDouble("TXTULW") * 10));
+	if (attrs.hasAttribute("TXTSTP"))
+		pstyle.charStyle().setStrikethruOffset(qRound(attrs.valueAsDouble("TXTSTP") * 10));
+	if (attrs.hasAttribute("TXTSTW"))
+		pstyle.charStyle().setStrikethruWidth(qRound(attrs.valueAsDouble("TXTSTW") * 10));
+	if (attrs.hasAttribute("TXTSTYLE"))
+		pstyle.charStyle().setFeatures(static_cast<StyleFlag>(attrs.valueAsInt("TXTSTYLE")).featureList());
+	if (attrs.hasAttribute("TXTKERN"))
+		pstyle.charStyle().setTracking(qRound(attrs.valueAsDouble("TXTKERN", 0.0) * 10));
+	if (attrs.hasAttribute("wordTrack"))
+		pstyle.charStyle().setWordTracking(attrs.valueAsDouble("wordTrack"));
+	if (attrs.hasAttribute("MinWordTrack"))
+		pstyle.setMinWordTracking(attrs.valueAsDouble("MinWordTrack"));
+	if (attrs.hasAttribute("MinGlyphShrink"))
+		pstyle.setMinGlyphExtension(attrs.valueAsDouble("MinGlyphShrink"));
+	if (attrs.hasAttribute("MaxGlyphExtend"))
+		pstyle.setMaxGlyphExtension(attrs.valueAsDouble("MaxGlyphExtend"));
+	if (attrs.hasAttribute("OpticalMargins"))
+		pstyle.setOpticalMargins(attrs.valueAsInt("OpticalMargins"));
+	if (attrs.hasAttribute("HyphenationMode"))
+		pstyle.setHyphenationMode(attrs.valueAsInt("HyphenationMode"));
+	if (attrs.hasAttribute("leftMargin"))
+		pstyle.setLeftMargin(attrs.valueAsDouble("leftMargin"));
+	if (attrs.hasAttribute("rightMargin"))
+		pstyle.setRightMargin(attrs.valueAsDouble("rightMargin"));
+	if (attrs.hasAttribute("firstIndent"))
+		pstyle.setFirstIndent(attrs.valueAsDouble("firstIndent"));
+	currItem->itemText.setDefaultStyle(pstyle);
+
+	if (attrs.hasAttribute("PSTYLE"))
+	{
+		QString pstyleName = attrs.valueAsString("PSTYLE");
+		if (!pstyleName.isEmpty())
+		{
+			ParagraphStyle defStyle(currItem->itemText.defaultStyle());
+			defStyle.setParent(pstyleName);
+			currItem->itemText.setDefaultStyle(defStyle);
+		}
+	}
+
+	currItem->setRotation( attrs.valueAsDouble("ROT") );
+	currItem->setTextToFrameDist(attrs.valueAsDouble("EXTRA"),
+								attrs.valueAsDouble("REXTRA", 1.0),
+								attrs.valueAsDouble("TEXTRA", 1.0),
+								attrs.valueAsDouble("BEXTRA", 1.0));
+	currItem->setFirstLineOffset(static_cast<FirstLineOffsetPolicy>(attrs.valueAsInt("FLOP")));
+
+	currItem->PLineArt  = Qt::PenStyle(attrs.valueAsInt("PLINEART"));
+	currItem->PLineEnd  = Qt::PenCapStyle(attrs.valueAsInt("PLINEEND", 0));
+	currItem->PLineJoin = Qt::PenJoinStyle(attrs.valueAsInt("PLINEJOIN", 0));
+	currItem->setPrintEnabled( attrs.valueAsInt("PRINTABLE"));
+	currItem->setIsAnnotation( attrs.valueAsInt("ANNOTATION", 0));
+	currItem->annotation().setType( attrs.valueAsInt("ANTYPE", 0));
+	QString AnName = attrs.valueAsString("ANNAME","");
+	if (!AnName.isEmpty())
+	{
+		if (currItem->itemName() == AnName)
+			currItem->AutoName = true;
+		else
+		{
+			currItem->setItemName(AnName);
+			currItem->AutoName = false;
+		}
+	}
+	currItem->annotation().setAction( attrs.valueAsString("ANACTION","") );
+	currItem->annotation().setE_act ( attrs.valueAsString("ANEACT","") );
+	currItem->annotation().setX_act ( attrs.valueAsString("ANXACT","") );
+	currItem->annotation().setD_act ( attrs.valueAsString("ANDACT","") );
+	currItem->annotation().setFo_act( attrs.valueAsString("ANFOACT","") );
+	currItem->annotation().setBl_act( attrs.valueAsString("ANBLACT","") );
+	currItem->annotation().setK_act ( attrs.valueAsString("ANKACT","") );
+	currItem->annotation().setF_act ( attrs.valueAsString("ANFACT","") );
+	currItem->annotation().setV_act ( attrs.valueAsString("ANVACT","") );
+	currItem->annotation().setC_act ( attrs.valueAsString("ANCACT","") );
+	currItem->annotation().setActionType(attrs.valueAsInt("ANACTYP", 0));
+	currItem->annotation().setExtern( attrs.valueAsString("ANEXTERN",""));
+	if ((!currItem->annotation().Extern().isEmpty()) && (currItem->annotation().ActionType() != 8))
+		currItem->annotation().setExtern(Relative2Path(attrs.valueAsString("ANEXTERN", "") , baseDir));
+	currItem->annotation().setZiel( attrs.valueAsInt("ANZIEL", 0));
+	currItem->annotation().setToolTip ( attrs.valueAsString("ANTOOLTIP",""));
+	currItem->annotation().setRollOver( attrs.valueAsString("ANROLL",""));
+	currItem->annotation().setDown( attrs.valueAsString("ANDOWN",""));
+	currItem->annotation().setBwid( attrs.valueAsInt("ANBWID", 1));
+	currItem->annotation().setBsty( attrs.valueAsInt("ANBSTY", 0));
+	currItem->annotation().setFeed( attrs.valueAsInt("ANFEED", 1));
+	currItem->annotation().setFlag( attrs.valueAsInt("ANFLAG", 0));
+	currItem->annotation().setFont( attrs.valueAsInt("ANFONT", 4));
+	currItem->annotation().setFormat( attrs.valueAsInt("ANFORMAT", 0));
+	currItem->annotation().setVis( attrs.valueAsInt("ANVIS", 0));
+	currItem->annotation().setIsChk( attrs.valueAsBool("ANCHK", false) );
+	currItem->annotation().setAAact( attrs.valueAsBool("ANAA", false) );
+	currItem->annotation().setHTML ( attrs.valueAsInt("ANHTML", 0));
+	currItem->annotation().setUseIcons( attrs.valueAsBool("ANICON", false));
+	currItem->annotation().setChkStil ( attrs.valueAsInt("ANCHKS", 0));
+	currItem->annotation().setMaxChar ( attrs.valueAsInt("ANMC", -1));
+	currItem->annotation().setBorderColor( attrs.valueAsString("ANBCOL", CommonStrings::None));
+	currItem->annotation().setIPlace(attrs.valueAsInt("ANPLACE", 1));
+	currItem->annotation().setScaleW(attrs.valueAsInt("ANSCALE", 0));
+	currItem->TopLine      = attrs.valueAsBool("TopLine", false);
+	currItem->LeftLine     = attrs.valueAsBool("LeftLine", false);
+	currItem->RightLine    = attrs.valueAsBool("RightLine", false);
+	currItem->BottomLine   = attrs.valueAsBool("BottomLine", false);
+	currItem->isTableItem  = attrs.valueAsBool("isTableItem", false);
+	currItem->TopLinkID    = attrs.valueAsInt("TopLINK", -1);
+	currItem->LeftLinkID   = attrs.valueAsInt("LeftLINK", -1);
+	currItem->RightLinkID  = attrs.valueAsInt("RightLINK", -1);
+	currItem->BottomLinkID = attrs.valueAsInt("BottomLINK", -1);
+	currItem->PoShow       = attrs.valueAsInt("PLTSHOW", 0);
+	currItem->BaseOffs     = attrs.valueAsDouble("BASEOF", 0.0);
+	currItem->textPathType =  attrs.valueAsInt("textPathType", 0);
+	currItem->textPathFlipped = attrs.valueAsBool("textPathFlipped", false);
+	if ( attrs.hasAttribute("TEXTFLOWMODE") )
+		currItem->setTextFlowMode((PageItem::TextFlowMode) attrs.valueAsInt("TEXTFLOWMODE", 0));
+	else if ( attrs.valueAsInt("TEXTFLOW") )
+	{
+		if (attrs.valueAsInt("TEXTFLOW2", 0))
+			currItem->setTextFlowMode(PageItem::TextFlowUsesBoundingBox);
+		else if (attrs.valueAsInt("TEXTFLOW3", 0))
+			currItem->setTextFlowMode(PageItem::TextFlowUsesContourLine);
+		else
+			currItem->setTextFlowMode(PageItem::TextFlowUsesFrameShape);	
+	}
+	else
+		currItem->setTextFlowMode(PageItem::TextFlowDisabled);
+	currItem->DashOffset = attrs.valueAsDouble("DASHOFF", 0.0);
+	currItem->setReversed(attrs.valueAsBool("REVERS", false));
+	currItem->setLocked (attrs.valueAsBool("LOCK", false));
+	currItem->setSizeLocked(attrs.valueAsBool("LOCKR", false));
+	currItem->setFillTransparency(attrs.valueAsDouble("TransValue", 0.0));
+	currItem->fillRule    = attrs.valueAsBool("fillRule", true);
+	currItem->doOverprint = attrs.valueAsBool("doOverprint", false);
+	if (attrs.hasAttribute("TransValueS"))
+		currItem->setLineTransparency(attrs.valueAsDouble("TransValueS", 0.0));
+	else
+		currItem->setLineTransparency(attrs.valueAsDouble("TransValue", 0.0));
+	currItem->setFillBlendmode(attrs.valueAsInt("TransBlend", 0));
+	currItem->setLineBlendmode(attrs.valueAsInt("TransBlendS", 0));
+	if (attrs.valueAsInt("TRANSPARENT", 0) == 1)
+		currItem->setFillColor(CommonStrings::None);
+	currItem->Cols   = attrs.valueAsInt("COLUMNS", 1);
+	currItem->ColGap = attrs.valueAsDouble("COLGAP", 0.0);
+	if (attrs.valueAsInt("LAYER", 0) != -1)
+		currItem->LayerID = attrs.valueAsInt("LAYER", 0);
+	tmp = "";
+
+	if (attrs.hasAttribute("GROUPS") && (attrs.valueAsInt("NUMGROUP", 0) != 0))
+	{
+		int groupMax = doc->GroupCounter;
+		QMap<int, int>::ConstIterator gIt;
+		tmp = attrs.valueAsString("GROUPS");
+		ScTextStream fg(&tmp, QIODevice::ReadOnly);
+		currItem->Groups.clear();
+		int numGroup = attrs.valueAsInt("NUMGROUP", 0);
+		for (int cx = 0; cx < numGroup; ++cx)
+		{
+			fg >> xi;
+			gIt = groupRemap.find(xi);
+			if (gIt != groupRemap.end())
+				currItem->Groups.push(gIt.value());
+			else
+			{
+				currItem->Groups.push(groupMax); 
+				groupRemap.insert(xi, groupMax);
+				++groupMax;
+			}
+		}
+		doc->GroupCounter = groupMax;
+		tmp = "";
+	}
+	else
+		currItem->Groups.clear();
+
+	tmp = "";
+	if ((attrs.hasAttribute("NUMDASH")) && (attrs.valueAsInt("NUMDASH", 0) != 0))
+	{
+		tmp = attrs.valueAsString("DASHS");
+		ScTextStream dgv(&tmp, QIODevice::ReadOnly);
+		currItem->DashValues.clear();
+		int numDash = attrs.valueAsInt("NUMDASH", 0);
+		for (int cxv = 0; cxv < numDash; ++cxv)
+		{
+			dgv >> xf;
+			currItem->DashValues.append(xf);
+		}
+		tmp = "";
+	}
+	else
+		currItem->DashValues.clear();
+
+	tmp = "";
+	if (attrs.hasAttribute("NUMPO"))
+	{
+		currItem->PoLine.resize(attrs.valueAsUInt("NUMPO"));
+		tmp = attrs.valueAsString("POCOOR");
+		ScTextStream fp(&tmp, QIODevice::ReadOnly);
+		uint numPo = attrs.valueAsUInt("NUMPO");
+		for (uint cx=0; cx < numPo; ++cx)
+		{
+			fp >> xf;
+			fp >> yf;
+			currItem->PoLine.setPoint(cx, xf, yf);
+		}
+	}
+	else
+		currItem->PoLine.resize(0);
+
+	tmp = "";
+	if (attrs.hasAttribute("NUMCO"))
+	{
+		currItem->ContourLine.resize(attrs.valueAsUInt("NUMCO"));
+		tmp = attrs.valueAsString("COCOOR");
+		ScTextStream fp(&tmp, QIODevice::ReadOnly);
+		uint numCo = attrs.valueAsUInt("NUMCO");
+		for (uint cx=0; cx < numCo; ++cx)
+		{
+			fp >> xf;
+			fp >> yf;
+			currItem->ContourLine.setPoint(cx, xf, yf);
+		}
+	}
+	else
+		currItem->ContourLine = currItem->PoLine.copy();
+
+	if (!currItem->asLine())
+		currItem->Clip = FlattenPath(currItem->PoLine, currItem->Segments);
+	else
+	{
+		int ph = static_cast<int>(qMax(1.0, currItem->lineWidth() / 2.0));
+		currItem->Segments.clear();
+		currItem->PoLine.resize(0);
+		currItem->Clip.setPoints(4, -ph,-ph, static_cast<int>(currItem->width()+ph),-ph,
+		                  static_cast<int>(currItem->width()+ph),static_cast<int>(currItem->height()+ph),
+		                  -ph,static_cast<int>(currItem->height()+ph));
+		currItem->setHeight(1.0);
+	}
+
+	if (currItem->asPathText())
+	{
+		currItem->updatePolyClip();
+		currItem->Frame = true;
+	}
+	currItem->GrType = attrs.valueAsInt("GRTYP", 0);
+	QString GrColor;
+	QString GrColor2;
+	int GrShade = 0;
+	int GrShade2 = 0;
+	if (currItem->GrType != 0)
+	{
+		if (currItem->GrType == 8)
+		{
+			currItem->setPattern( attrs.valueAsString("pattern", "") );
+			double patternScaleX   = attrs.valueAsDouble("pScaleX", 100.0);
+			double patternScaleY   = attrs.valueAsDouble("pScaleY", 100.0);
+			double patternOffsetX  = attrs.valueAsDouble("pOffsetX", 0.0);
+			double patternOffsetY  = attrs.valueAsDouble("pOffsetY", 0.0);
+			double patternRotation = attrs.valueAsDouble("pRotation", 0.0);
+			currItem->setPatternTransform(patternScaleX, patternScaleY, patternOffsetX, patternOffsetY, patternRotation);
+		}
+		else
+		{
+			currItem->GrStartX = attrs.valueAsDouble("GRSTARTX", 0.0);
+			currItem->GrStartY = attrs.valueAsDouble("GRSTARTY", 0.0);
+			currItem->GrEndX   = attrs.valueAsDouble("GRENDX", 0.0);
+			currItem->GrEndY   = attrs.valueAsDouble("GRENDY", 0.0);
+			GrColor = attrs.valueAsString("GRCOLOR","");
+			if (!GrColor.isEmpty())
+			{
+				GrColor2 = attrs.valueAsString("GRCOLOR2","");
+				GrShade  = attrs.valueAsInt("GRSHADE", 100);
+				GrShade2 = attrs.valueAsInt("GRSHADE2", 100);
+			}
+		}
+	}
+	if ((currItem->GrType != 0) && (currItem->GrType != 8))
+	{
+		currItem->fill_gradient.clearStops();
+		if ((!GrColor.isEmpty()) && (!GrColor2.isEmpty()))
+		{
+			if (currItem->GrType == 5)
+			{
+				if ((GrColor != CommonStrings::None) && (!GrColor.isEmpty()))
+					currItem->SetQColor(&tmpc, GrColor, GrShade);
+				currItem->fill_gradient.addStop(tmpc, 0.0, 0.5, 1.0, GrColor, GrShade);
+				if ((GrColor2 != CommonStrings::None) && (!GrColor2.isEmpty()))
+					currItem->SetQColor(&tmpc, GrColor2, GrShade2);
+				currItem->fill_gradient.addStop(tmpc, 1.0, 0.5, 1.0, GrColor2, GrShade2);
+			}
+			else
+			{
+				if ((GrColor2 != CommonStrings::None) && (!GrColor2.isEmpty()))
+					currItem->SetQColor(&tmpc, GrColor2, GrShade2);
+				currItem->fill_gradient.addStop(tmpc, 0.0, 0.5, 1.0, GrColor2, GrShade2);
+				if ((GrColor != CommonStrings::None) && (!GrColor.isEmpty()))
+					currItem->SetQColor(&tmpc, GrColor, GrShade);
+				currItem->fill_gradient.addStop(tmpc, 1.0, 0.5, 1.0, GrColor, GrShade);
+			}
+		}
+//		currItem->updateGradientVectors();
+	}
+	//currItem->setRedrawBounding();
+	//currItem->OwnPage = view->OnPage(currItem);
+	UndoManager::instance()->setUndoEnabled(true);
+	return currItem;
+}
+
+bool Scribus150Format::readLatexInfo(PageItem_LatexFrame* latexitem, ScXmlStreamReader& reader)
+{
+	ScXmlStreamAttributes attrs = reader.scAttributes();
+	QStringRef tagName = reader.name();
+
+	latexitem->setConfigFile(attrs.valueAsString("ConfigFile"), true);
+	latexitem->setDpi(attrs.valueAsInt("DPI"));
+	latexitem->setUsePreamble(attrs.valueAsBool("USE_PREAMBLE"));
+
+	QString formula;
+	while (!reader.atEnd() && !reader.hasError())
+	{
+		reader.readNext();
+		if (reader.isEndElement() && reader.name() == tagName)
+			break;
+		if (reader.isCharacters())
+			formula += reader.text().toString();
+		if (reader.isStartDocument() && reader.name() == "PROPERTY")
+		{
+			ScXmlStreamAttributes tAtt = reader.scAttributes();
+			QString name  = tAtt.valueAsString("name");
+			QString value = tAtt.valueAsString("value");
+			if (name.isEmpty()) continue;
+			latexitem->editorProperties[name] = value;
+		}
+	}
+	formula = formula.trimmed();
+	latexitem->setFormula(formula, false);
+
+	return !reader.hasError();
+}
+
+bool Scribus150Format::loadPage(const QString & fileName, int pageNumber, bool Mpage, QString renamedPageName)
+{
+// 	qDebug() << QString("loading page %2 from file '%1' from 1.3.x plugin").arg(fileName).arg(pageNumber);
+	if (m_Doc==0 || m_AvailableFonts==0)
+	{
+		Q_ASSERT(m_Doc==0 || m_AvailableFonts==0);
+		return false;
+	}
+	ParagraphStyle vg;
+	struct ScribusDoc::BookMa bok;
+	QMap<int, ScribusDoc::BookMa> bookmarks;
+
+	Page* newPage = NULL;
+	
+	QString tmp;
+	QMap<int,int> TableID;
+	QList<PageItem*> TableItems;
+	QMap<PageItem*, int> groupID;
+	double pageX = 0, pageY = 0;
+	bool newVersion = false;
+	QMap<int,int> layerTrans;
+	int maxLayer = 0, maxLevel = 0, a = 0;
+
+	layerTrans.clear();
+	uint layerCount=m_Doc->layerCount();
+	for (uint la2 = 0; la2 < layerCount; ++la2)
+	{
+		maxLayer = qMax(m_Doc->Layers[la2].ID, maxLayer);
+		maxLevel = qMax(m_Doc->Layers[la2].Level, maxLevel);
+	}
+
+	groupRemap.clear();
+	itemRemap.clear();
+	itemNext.clear();
+	itemCount = 0;
+	itemRemapM.clear();
+	itemNextM.clear();
+	itemCountM = 0;
+	itemRemapF.clear();
+	itemNextF.clear();
+
+ 	QString f(readSLA(fileName));
+	if (f.isEmpty())
+		return false;
+
+	QString fileDir = QFileInfo(fileName).absolutePath();
+
+	bool firstElement = true;
+	bool success = true;
+	
+	ScXmlStreamReader reader(f);
+	ScXmlStreamAttributes attrs;
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		QXmlStreamReader::TokenType tType = reader.readNext();
+		if (tType != QXmlStreamReader::StartElement)
+			continue;
+		QStringRef tagName = reader.name();
+		attrs = reader.scAttributes();
+
+		if (firstElement)
+		{
+			if (tagName != "SCRIBUSUTF8NEW")
+			{
+				success = false;
+				break;
+			}
+			if (attrs.hasAttribute("Version"))
+				newVersion = true;
+			firstElement = false;
+		}
+
+		if (tagName == "COLOR" && attrs.valueAsString("NAME") != CommonStrings::None)
+		{
+			success = readColor(m_Doc->PageColors, attrs);
+			if (!success) break;
+		}
+		if (tagName == "JAVA")
+		{
+			QString name = attrs.valueAsString("NAME");
+			if (!name.isEmpty())
+				m_Doc->JavaScripts[name] = attrs.valueAsString("SCRIPT");
+		}
+		if (tagName == "LAYERS")
+		{
+			ScLayer newLayer;
+			readLayers(newLayer, attrs);
+			const ScLayer* la2 = m_Doc->Layers.layerByName(newLayer.Name);
+			if (la2)
+				layerTrans.insert(newLayer.ID, la2->ID);
+			else
+			{
+				maxLayer++;
+				maxLevel++;
+				layerTrans.insert(newLayer.ID, maxLayer);
+				newLayer.ID = maxLayer;
+				newLayer.Level = maxLevel;
+				m_Doc->Layers.append(newLayer);
+			}
+		}
+		if (tagName == "Arrows")
+		{
+			success = readArrows(m_Doc, attrs);
+			if (!success) break;
+		}
+		if(tagName == "MultiLine")
+		{
+			multiLine ml;
+			QString mlName  = attrs.valueAsString("Name");
+			QString mlName2 = mlName;
+			readMultiline(ml, reader);
+			int copyC = 1;
+			QMap<QString,multiLine>::ConstIterator mlit = m_Doc->MLineStyles.find(mlName2);
+			if (mlit != m_Doc->MLineStyles.end() && ml != mlit.value())
+			{
+				while (m_Doc->MLineStyles.contains(mlName2))
+				{
+					mlName2 = QObject::tr("Copy #%1 of ").arg(copyC)+mlName;
+					copyC++;
+				}
+			}
+			m_Doc->MLineStyles.insert(mlName2, ml);
+		}
+		if (tagName == "Pattern")
+		{
+			success = readPattern(m_Doc, reader, fileDir);
+			if (!success) break;
+		}
+		if (tagName == "Bookmark")
+		{
+			int bmElem = 0;
+			struct ScribusDoc::BookMa bookmark;
+			success = readBookMark(bookmark, bmElem, attrs);
+			if (!success) break;
+			bookmarks.insert(bmElem, bookmark);
+		}
+		if(tagName == "STYLE")
+		{
+			getStyle(vg, reader, NULL, m_Doc, true);
+		}
+		if (((tagName == "PAGE") || (tagName == "MASTERPAGE")) && (attrs.valueAsInt("NUM") == pageNumber))
+		{
+			if (Mpage && (tagName != "MASTERPAGE"))
+				continue;
+			a = m_Doc->currentPage()->pageNr();
+			newPage = m_Doc->Pages->at(a);
+			if (Mpage)
+			{
+				newPage->LeftPg = attrs.valueAsInt("LEFT", 0);
+				
+				if (!renamedPageName.isEmpty())
+					newPage->setPageName(renamedPageName);
+				else
+					newPage->setPageName(attrs.valueAsString("NAM",""));
+			}
+			if (attrs.hasAttribute("Size"))
+				newPage->m_pageSize = attrs.valueAsString("Size");
+			if (attrs.hasAttribute("Orientation"))
+				newPage->setOrientation(attrs.valueAsInt("Orientation"));
+			if (attrs.hasAttribute("PAGEWIDTH"))
+				newPage->setWidth( attrs.valueAsDouble("PAGEWIDTH") );
+			else
+				newPage->setWidth( attrs.valueAsDouble("PAGEWITH") );
+			newPage->setHeight( attrs.valueAsDouble("PAGEHEIGHT") );
+			newPage->setInitialHeight(newPage->height());
+			newPage->setInitialWidth(newPage->width());
+			newPage->initialMargins.Top    = qMax(0.0, attrs.valueAsDouble("BORDERTOP"));
+			newPage->initialMargins.Bottom = qMax(0.0, attrs.valueAsDouble("BORDERBOTTOM"));
+			newPage->initialMargins.Left   = qMax(0.0, attrs.valueAsDouble("BORDERLEFT"));
+			newPage->initialMargins.Right  = qMax(0.0, attrs.valueAsDouble("BORDERRIGHT"));
+			newPage->marginPreset = attrs.valueAsInt("PRESET", 0);
+			newPage->Margins.Top = newPage->initialMargins.Top;
+			newPage->Margins.Bottom = newPage->initialMargins.Bottom;
+			pageX = attrs.valueAsDouble( attrs.valueAsString("PAGEXPOS"));
+			pageY = attrs.valueAsDouble( attrs.valueAsString("PAGEYPOS"));
+			// guides reading
+			tmp = "";
+			newPage->guides.setHorizontalAutoGap(attrs.valueAsDouble("AGhorizontalAutoGap", 0.0));
+			newPage->guides.setVerticalAutoGap(attrs.valueAsDouble("AGverticalAutoGap", 0.0));
+			newPage->guides.setHorizontalAutoCount(attrs.valueAsInt("AGhorizontalAutoCount", 0));
+			newPage->guides.setVerticalAutoCount(attrs.valueAsInt("AGverticalAutoCount", 0));
+			newPage->guides.setHorizontalAutoRefer(attrs.valueAsInt("AGhorizontalAutoRefer", 0));
+			newPage->guides.setVerticalAutoRefer(attrs.valueAsInt("AGverticalAutoRefer", 0));
+			GuideManagerIO::readVerticalGuides(attrs.valueAsString("VerticalGuides"),
+											newPage,
+											GuideManagerCore::Standard,
+											attrs.hasAttribute("NumVGuides"));
+			GuideManagerIO::readHorizontalGuides(attrs.valueAsString("HorizontalGuides"),
+											newPage,
+											GuideManagerCore::Standard,
+											attrs.hasAttribute("NumHGuides"));
+			GuideManagerIO::readSelection(attrs.valueAsString("AGSelection"), newPage);
+		}
+		if ((tagName == "PAGEOBJECT") || (tagName == "MASTEROBJECT") || (tagName == "FRAMEOBJECT"))
+		{
+			if ((Mpage && tagName != "MASTEROBJECT") || (!Mpage && tagName == "MASTEROBJECT"))
+			{
+				// Go to end of node
+				reader.readToElementEnd();
+				continue;
+			}
+			if (attrs.valueAsInt("OwnPage") != pageNumber)
+			{			
+				if (tagName == "PAGEOBJECT")
+					itemRemap[itemCount++] = -1;
+				else if (tagName == "MASTEROBJECT")
+					itemRemapM[itemCountM++] = -1;
+				reader.readToElementEnd();
+			}
+			else
+			{
+				// first of linked chain?
+				if (tagName == "PAGEOBJECT")
+				{
+					itemRemap[itemCount++] = m_Doc->DocItems.count();
+					if (attrs.valueAsInt("NEXTITEM") != -1)
+						itemNext[m_Doc->DocItems.count()] = attrs.valueAsInt("NEXTITEM");
+				}
+				else if (tagName == "MASTEROBJECT")
+				{
+					itemRemapM[itemCountM++] = m_Doc->MasterItems.count();
+					if (attrs.valueAsInt("NEXTITEM") != -1)
+						itemNextM[m_Doc->MasterItems.count()] = attrs.valueAsInt("NEXTITEM");
+				}
+
+				ItemInfo itemInfo;
+				success = readObject(m_Doc, reader, itemInfo, fileDir, true);
+				if (!success) break;
+
+				PageItem* newItem = itemInfo.item;
+				newItem->moveBy(-pageX + newPage->xOffset(), - pageY + newPage->yOffset());
+				newItem->OwnPage = m_Doc->currentPageNumber();
+				if (tagName == "PAGEOBJECT")
+					newItem->OnMasterPage = "";
+
+				if (newItem->isTableItem)
+				{
+					TableItems.append(newItem);
+					TableID.insert(itemInfo.ownLink, newItem->ItemNr);
+				}
+				if (newItem->isGroupControl)
+				{
+					groupID.insert(newItem, itemInfo.groupLastItem + newItem->ItemNr);
+				}
+				if (tagName == "FRAMEOBJECT")
+				{
+					m_Doc->FrameItems.append(m_Doc->Items->takeAt(newItem->ItemNr));
+					newItem->ItemNr = m_Doc->FrameItems.count()-1;
+				}
+			}
+		}
+	}
+
+	if (reader.hasError())
+		return false;
+
+	QMap<int, ScribusDoc::BookMa>::Iterator it;
+	for (it = bookmarks.begin(); it != bookmarks.end(); ++it)
+	{
+		int elem = it.key();
+		if (elem < m_Doc->Items->count())
+		{
+			ScribusDoc::BookMa bookmark = it.value();
+			bookmark.PageObject = m_Doc->Items->at(elem);
+			m_Doc->BookMarks.append( bookmark );
+		}
+	}
+
+	if (TableItems.count() != 0)
+	{
+		for (int ttc = 0; ttc < TableItems.count(); ++ttc)
+		{
+			PageItem* ta = TableItems.at(ttc);
+			if (ta->TopLinkID != -1)
+				ta->TopLink = m_Doc->Items->at(TableID[ta->TopLinkID]);
+			else
+				ta->TopLink = 0;
+			if (ta->LeftLinkID != -1)
+				ta->LeftLink = m_Doc->Items->at(TableID[ta->LeftLinkID]);
+			else
+				ta->LeftLink = 0;
+			if (ta->RightLinkID != -1)
+				ta->RightLink = m_Doc->Items->at(TableID[ta->RightLinkID]);
+			else
+				ta->RightLink = 0;
+			if (ta->BottomLinkID != -1)
+				ta->BottomLink = m_Doc->Items->at(TableID[ta->BottomLinkID]);
+			else
+				ta->BottomLink = 0;
+		}
+	}
+
+	if (groupID.count() != 0)
+	{
+		QMap<PageItem*, int>::Iterator it;
+		for (it = groupID.begin(); it != groupID.end(); ++it)
+		{
+			it.key()->groupsLastItem = m_Doc->Items->at(it.value());
+		}
+	}
+	
+	// reestablish textframe links
+	if (itemNext.count() != 0 && !Mpage)
+	{
+		QMap<int,int>::Iterator lc;
+		for (lc = itemNext.begin(); lc != itemNext.end(); ++lc)
+		{
+			if (itemRemap[lc.value()] >= 0)
+			{
+				if ((lc.key() < m_Doc->Items->count()) && (itemRemap[lc.value()] < m_Doc->Items->count()))
+				{
+					PageItem * Its = m_Doc->DocItems.at(lc.key());
+					PageItem * Itn = m_Doc->DocItems.at(itemRemap[lc.value()]);
+					if (Itn->prevInChain() || Its->nextInChain()) 
+					{
+						qDebug() << "scribus150format: corruption in linked textframes detected";
+						continue;
+					}
+					Its->link(Itn);
+				}
+			}
+		}
+	}
+	else if (itemNextM.count() != 0 && Mpage)
+	{
+		QMap<int,int>::Iterator lc;
+		for (lc = itemNextM.begin(); lc != itemNextM.end(); ++lc)
+		{
+			if (itemRemapM[lc.value()] >= 0)
+			{
+				if ((lc.key() < m_Doc->MasterItems.count()) && (itemRemapM[lc.value()] < m_Doc->MasterItems.count()))
+				{
+					PageItem * Its = m_Doc->MasterItems.at(lc.key());
+					PageItem * Itn = m_Doc->MasterItems.at(itemRemapM[lc.value()]);
+					if (Itn->prevInChain() || Its->nextInChain())
+					{
+						qDebug() << "scribus150format: corruption in linked textframes detected";
+						continue;
+					}
+					Its->link(Itn);
+				}
+			}
+		}
+	}
+	
+	// reestablish first/lastAuto
+	m_Doc->FirstAuto = m_Doc->LastAuto;
+	if (m_Doc->LastAuto)
+	{
+		while (m_Doc->LastAuto->nextInChain())
+			m_Doc->LastAuto = m_Doc->LastAuto->nextInChain();
+		while (m_Doc->FirstAuto->prevInChain())
+			m_Doc->FirstAuto = m_Doc->FirstAuto->prevInChain();
+	}
+
+	return true;
+}
+
+void Scribus150Format::getStyle(ParagraphStyle& style, ScXmlStreamReader& reader, StyleSet<ParagraphStyle> *tempStyles, ScribusDoc* doc, bool fl)
+{
+	bool fou(false);
+	QString tmpf, tmV;
+	const StyleSet<ParagraphStyle> * docParagraphStyles = tempStyles? tempStyles : & doc->paragraphStyles();
+	PrefsManager* prefsManager = PrefsManager::instance();
+	readParagraphStyle(doc, reader, style, prefsManager->appPrefs.fontPrefs.AvailFonts);
+	for (int xx=0; xx<docParagraphStyles->count(); ++xx)
+	{
+		if (style.name() == (*docParagraphStyles)[xx].name())
+		{
+			if (style.equiv((*docParagraphStyles)[xx]))
+			{
+				fou = true;
+			}
+			else
+			{
+				style.setName("Copy of "+(*docParagraphStyles)[xx].name());
+				fou = false;
+			}
+			break;
+		}
+	}
+	if (!fou && fl)
+	{
+		for (int xx=0; xx< docParagraphStyles->count(); ++xx)
+		{
+			if (style.equiv((*docParagraphStyles)[xx]))
+			{
+				style.setName((*docParagraphStyles)[xx].name());
+				fou = true;
+				break;
+			}
+		}
+	}
+	if (!fou)
+	{
+		if (tempStyles)
+			tempStyles->create(style);
+		else
+		{
+			StyleSet<ParagraphStyle> tmp;
+			tmp.create(style);
+			doc->redefineStyles(tmp, false);
+		}
+	}
+}
+
+bool Scribus150Format::readStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles)
+{
+	ParagraphStyle vg;
+	QString tmpf;
+	QString f (readSLA(fileName));
+	if (f.isEmpty())
+		return false;
+
+	bool firstElement = true;
+	bool success = true;
+
+	ScXmlStreamReader reader(f);
+	ScXmlStreamAttributes attrs;
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		QXmlStreamReader::TokenType tType = reader.readNext();
+		if (tType != QXmlStreamReader::StartElement)
+			continue;
+		QStringRef tagName = reader.name();
+		if (firstElement)
+		{
+			if (tagName != "SCRIBUSUTF8NEW")
+			{
+				success = false;
+				break;
+			}
+			firstElement = false;
+			continue;
+		}
+		if (tagName == "STYLE")
+		{
+			getStyle(vg, reader, &docParagraphStyles, doc, false);
+		}
+	}
+	return success;
+}
+
+bool Scribus150Format::readCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles)
+{
+	CharStyle cstyle;
+	QString f(readSLA(fileName));
+	if (f.isEmpty())
+		return false;
+	bool firstElement = true;
+	bool success = true;
+
+	ScXmlStreamReader reader(f);
+	ScXmlStreamAttributes attrs;
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		QXmlStreamReader::TokenType tType = reader.readNext();
+		if (tType != QXmlStreamReader::StartElement)
+			continue;
+		QStringRef tagName = reader.name();
+		if (firstElement)
+		{
+			if (tagName != "SCRIBUSUTF8NEW")
+			{
+				success = false;
+				break;
+			}
+			firstElement = false;
+			continue;
+		}
+		if (tagName == "CHARSTYLE")
+		{
+			readCharacterStyleAttrs(doc, attrs, cstyle);
+			docCharStyles.create(cstyle);
+		}
+	}
+	return true;
+}
+
+bool Scribus150Format::readLineStyles(const QString& fileName, QMap<QString,multiLine> *styles)
+{
+	QString f(readSLA(fileName));
+	if (f.isEmpty())
+		return false;
+	bool firstElement = true;
+	bool success = true;
+
+	ScXmlStreamReader reader(f);
+	ScXmlStreamAttributes attrs;
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		QXmlStreamReader::TokenType tType = reader.readNext();
+		if (tType != QXmlStreamReader::StartElement)
+			continue;
+		QStringRef tagName = reader.name();
+		if (firstElement)
+		{
+			if (tagName != "SCRIBUSUTF8NEW")
+			{
+				success = false;
+				break;
+			}
+			firstElement = false;
+			continue;
+		}
+		if (tagName == "MultiLine")
+		{
+			multiLine ml;
+			attrs = reader.scAttributes();
+			QString mlName  = attrs.valueAsString("Name");
+			QString mlName2 = mlName;
+			readMultiline(ml, reader);
+			int copyC = 1;
+			QMap<QString,multiLine>::ConstIterator mlit = styles->find(mlName2);
+			if (mlit != styles->end() && ml != mlit.value())
+			{
+				while (styles->contains(mlName2))
+				{
+					mlName2 = tr("Copy #%1 of ").arg(copyC)+mlName;
+					copyC++;
+				}
+			}
+			styles->insert(mlName2, ml);
+		}
+	}
+	return true;
+}
+
+bool Scribus150Format::readColors(const QString& fileName, ColorList & colors)
+{
+	QString f(readSLA(fileName));
+	if (f.isEmpty())
+		return false;
+	bool firstElement = true;
+	bool success = true;
+
+	ScXmlStreamReader reader(f);
+	ScXmlStreamAttributes attrs;
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		QXmlStreamReader::TokenType tType = reader.readNext();
+		if (tType != QXmlStreamReader::StartElement)
+			continue;
+		QStringRef tagName = reader.name();
+		if (firstElement)
+		{
+			if (tagName != "SCRIBUSUTF8NEW")
+			{
+				success = false;
+				break;
+			}
+			firstElement = false;
+			continue;
+		}
+		if(tagName == "COLOR" && attrs.valueAsString("NAME") != CommonStrings::None)
+		{
+			attrs = reader.scAttributes();
+			if (attrs.valueAsString("NAME") != CommonStrings::None)
+			{
+				readColor(colors, attrs);
+			}
+		}
+	}
+	return true;
+}
+
+bool Scribus150Format::readPageCount(const QString& fileName, int *num1, int *num2, QStringList & masterPageNames)
+{
+	QString pageName;
+	int counter = 0;
+	int counter2 = 0;
+	QString f(readSLA(fileName));
+	if (f.isEmpty())
+		return false;
+	bool firstElement = true;
+	bool success = true;
+
+	ScXmlStreamReader reader(f);
+	ScXmlStreamAttributes attrs;
+	while(!reader.atEnd() && !reader.hasError())
+	{
+		QXmlStreamReader::TokenType tType = reader.readNext();
+		if (tType != QXmlStreamReader::StartElement)
+			continue;
+		QStringRef tagName = reader.name();
+		if (firstElement)
+		{
+			if (tagName != "SCRIBUSUTF8NEW")
+			{
+				success = false;
+				break;
+			}
+			firstElement = false;
+			continue;
+		}
+		if(tagName == "PAGE")
+			counter++;
+		if(tagName == "MASTERPAGE")
+		{
+			pageName = reader.scAttributes().valueAsString("NAM");
+			if (!pageName.isEmpty())
+			{
+				counter2++;
+				masterPageNames.append(pageName);
+			}
+		}
+	}
+	*num1 = counter;
+	*num2 = counter2;
+	return success;
+}
+
+
+
+
Index: scribus/plugins/fileloader/scribus134format/scribus134format_save.cpp
===================================================================
--- scribus/plugins/fileloader/scribus134format/scribus134format_save.cpp	(revision 13970)
+++ scribus/plugins/fileloader/scribus134format/scribus134format_save.cpp	(revision 13971)
@@ -1016,7 +1016,10 @@
 		else if (ch == SpecialChars::PARSEP)	// stores also the paragraphstyle for preceding chars
 			putPStyle(docu, item->itemText.paragraphStyle(k), "para");
 		else if (ch == SpecialChars::TAB)
+		{
 			docu.writeEmptyElement("tab");
+			putCStyle(docu, lastStyle);
+		}
 		else if (ch == SpecialChars::LINEBREAK)
 			docu.writeEmptyElement("breakline");
 		else if (ch == SpecialChars::COLBREAK)
Index: scribus/plugins/fileloader/scribus134format/scribus134format.cpp
===================================================================
--- scribus/plugins/fileloader/scribus134format/scribus134format.cpp	(revision 13970)
+++ scribus/plugins/fileloader/scribus134format/scribus134format.cpp	(revision 13971)
@@ -1777,7 +1777,14 @@
 			newItem->itemText.setCharStyle(newItem->itemText.length()-1, 1, lastStyle->Style);
 		}
 		else if (tName == "tab")
+		{
+			CharStyle newStyle;
 			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::TAB);
+			readCharacterStyleAttrs(doc, tAtt, newStyle);
+			newItem->itemText.setCharStyle(newItem->itemText.length()-1, 1, newStyle);
+			lastStyle->StyleStart = newItem->itemText.length()-1;
+			lastStyle->Style = newStyle;
+		}
 		else if (tName == "breakline")
 			newItem->itemText.insertChars(newItem->itemText.length(), SpecialChars::LINEBREAK);
 		else if (tName == "breakcol")




More information about the scribus-commit mailing list