Subversion Repositories Scribus

Rev

Rev 310 | Rev 319 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/***************************************************************************
                        scribusXml.cpp the document xml library for scribus
                             -------------------
    begin                : Sam Jul 14 10:00:00 CEST 2001
    copyright            : (C) 2001 by Christian T�p
    email                : christian.toepp@mr-ct@gmx.de
 ***************************************************************************/


#include "scribusXml.h"
#include "scribusXml.moc"
#include <qfile.h>
#include <qtextstream.h>
#include <qapplication.h>
#include <qstylefactory.h>
#include <qtl.h>
#include <qcursor.h>
#include <qregexp.h>
#include <qdir.h>
#include <qtextcodec.h>
#include <cstdlib>
#include <cmath>
#include "missing.h"

#if (_MSC_VER >= 1200)
 #include "win-config.h"
#else
 #include "config.h"
#endif

#ifdef HAVE_LIBZ
#include <zlib.h>
#endif
extern double QStodouble(QString in);
extern int QStoInt(QString in);
extern bool loadText(QString nam, QString *Buffer);
extern QString Path2Relative(QString Path);

QString ScriXmlDoc::ReadDatei(QString fileName)
{
/**
  * added to support gz docs
  * 2.7.2002 C.Toepp
  * <c.toepp@gmx.de>
  */

        QString f = "";
#ifdef HAVE_LIBZ
        if(fileName.right(2) == "gz")
        {
                gzFile gzDoc;
                char buff[4097];
                int i;
                gzDoc = gzopen(fileName.latin1(),"rb");
                if(gzDoc == NULL)
                        return "";
                while((i = gzread(gzDoc,&buff,4096)) > 0)
                {
                        buff[i] = '\0';
                        f.append(buff);
                }
                gzclose(gzDoc);
        }
        else
// a normal document
                loadText(fileName, &f);
#else
        loadText(fileName, &f);
#endif
        QString ff = "";
        if (f.startsWith("<SCRIBUSUTF8"))
                ff = QString::fromUtf8(f);
        else
                ff = f;
        return ff;
/** end changes */
}

bool ScriXmlDoc::ReadLStyles(QString fileName, QMap<QString,multiLine> *Sty)
{
        QDomDocument docu("scridoc");
        QString f = "";
        f = ReadDatei(fileName);
        if (f == "")
                return false;
        if(!docu.setContent(f))
                return false;
        QDomElement elem=docu.documentElement();
        if ((elem.tagName() != "SCRIBUS") && (elem.tagName() != "SCRIBUSUTF8"))
                return false;
        QDomNode DOC=elem.firstChild();
        while(!DOC.isNull())
        {
                QDomElement dc=DOC.toElement();
                QDomNode PAGE=DOC.firstChild();
                while(!PAGE.isNull())
                {
                        QDomElement pg=PAGE.toElement();
                        if(pg.tagName()=="MultiLine")
                        {
                                multiLine ml;
                                QDomNode MuLn = PAGE.firstChild();
                                while(!MuLn.isNull())
                                {
                                        QDomElement MuL = MuLn.toElement();
                                        struct singleLine sl;
                                        sl.Color = MuL.attribute("Color");
                                        sl.Dash = QStoInt(MuL.attribute("Dash"));
                                        sl.LineEnd = QStoInt(MuL.attribute("LineEnd"));
                                        sl.LineJoin = QStoInt(MuL.attribute("LineJoin"));
                                        sl.Shade = QStoInt(MuL.attribute("Shade"));
                                        sl.Width = QStodouble(MuL.attribute("Width"));
                                        ml.push_back(sl);
                                        MuLn = MuLn.nextSibling();
                                }
                                QString Nam = pg.attribute("Name");
                                QString Nam2 = Nam;
                                int copyC = 1;
                                while (Sty->contains(Nam2))
                                {
                                        Nam2 = tr("Copy #%1 of ").arg(copyC)+Nam;
                                        copyC++;
                                }
                                Sty->insert(Nam2, ml);
                        }
                        PAGE=PAGE.nextSibling();
                }
                DOC=DOC.nextSibling();
        }
        return true;
}

bool ScriXmlDoc::ReadStyles(QString fileName, ScribusDoc* doc, preV *Prefs)
{
        struct StVorL vg;
        QMap<QString,QString> DoFonts;
        QDomDocument docu("scridoc");
        QString f = "";
        QString tmpf;
        QFont fo;
        bool fou;
        double xf;
        DoFonts.clear();
        f = ReadDatei(fileName);
        if (f == "")
                return false;
        if(!docu.setContent(f))
                return false;
        QDomElement elem=docu.documentElement();
        if ((elem.tagName() != "SCRIBUS") && (elem.tagName() != "SCRIBUSUTF8"))
                return false;
        QDomNode DOC=elem.firstChild();
        while(!DOC.isNull())
        {
                QDomElement dc=DOC.toElement();
                QDomNode PAGE=DOC.firstChild();
                while(!PAGE.isNull())
                {
                        QDomElement pg=PAGE.toElement();
                        if(pg.tagName()=="FONT")
                        {
                                tmpf = pg.attribute("NAME");
                                if ((!Prefs->AvailFonts.find(tmpf)) || (!Prefs->AvailFonts[tmpf]->UseFont))
                                {
                                        if ((!Prefs->GFontSub.contains(tmpf)) || (!Prefs->AvailFonts[Prefs->GFontSub[tmpf]]->UseFont))
                                        {
                                                qApp->setOverrideCursor(QCursor(arrowCursor), true);
                                                DmF *dia = new DmF(0, tmpf, Prefs);
                                                dia->exec();
                                                tmpf = dia->Ersatz;
                                                delete dia;
                                                qApp->setOverrideCursor(QCursor(waitCursor), true);
                                                Prefs->GFontSub[pg.attribute("NAME")] = tmpf;
                                        }
                                        else
                                                tmpf = Prefs->GFontSub[tmpf];
                                }
                                fo = Prefs->AvailFonts[tmpf]->Font;
                                fo.setPointSize(qRound(doc->Dsize / 10.0));
                                doc->AddFont(tmpf, fo);
                                DoFonts[pg.attribute("NAME")] = tmpf;
                        }
                        if(pg.tagName()=="STYLE")
                        {
                                fou = false;
                                vg.Vname = pg.attribute("NAME");
                                vg.LineSpa = QStodouble(pg.attribute("LINESP"));
                                vg.Indent = QStodouble(pg.attribute("INDENT","0"));
                                vg.First = QStodouble(pg.attribute("FIRST","0"));
                                vg.Ausri = QStoInt(pg.attribute("ALIGN"));
                                vg.Avor = QStodouble(pg.attribute("VOR","0"));
                                vg.Anach = QStodouble(pg.attribute("NACH","0"));
                                if (pg.hasAttribute("FONT"))
                                        vg.Font = DoFonts[pg.attribute("FONT")];
                                else
                                        vg.Font = DoFonts[doc->Dfont];
                                vg.FontSize = qRound(QStodouble(pg.attribute("FONTSIZE","12")) * 10.0);
                                vg.Drop = static_cast<bool>(QStoInt(pg.attribute("DROP","0")));
                                vg.DropLin = QStoInt(pg.attribute("DROPLIN","2"));
                                vg.FontEffect = QStoInt(pg.attribute("EFFECT","0"));
                                vg.FColor = pg.attribute("FCOLOR", doc->Dbrush);
                                vg.FShade = QStoInt(pg.attribute("FSHADE", "100"));
                                vg.SColor = pg.attribute("SCOLOR", doc->Dpen);
                                vg.SShade = QStoInt(pg.attribute("SSHADE", "100"));
                                vg.BaseAdj = static_cast<bool>(QStoInt(pg.attribute("BASE","0")));
                                if ((pg.hasAttribute("NUMTAB")) && (QStoInt(pg.attribute("NUMTAB","0")) != 0))
                                {
                                        QString tmp = pg.attribute("TABS");
                                        QTextStream tgv(&tmp, IO_ReadOnly);
                                        vg.TabValues.clear();
                                        for (int cxv = 0; cxv < QStoInt(pg.attribute("NUMTAB","0")); ++cxv)
                                        {
                                                tgv >> xf;
                                                vg.TabValues.append(xf);
                                        }
                                        tmp = "";
                                }
                                else
                                        vg.TabValues.clear();
                                for (uint xx=0; xx<Vorlagen.count(); ++xx)
                                {
                                        if (vg.Vname == Vorlagen[xx].Vname)
                                        {
                                                if ((vg.LineSpa == Vorlagen[xx].LineSpa) &&
                                                                (vg.Indent == Vorlagen[xx].Indent) &&
                                                                (vg.First == Vorlagen[xx].First) &&
                                                                (vg.Ausri == Vorlagen[xx].Ausri) &&
                                                                (vg.Avor == Vorlagen[xx].Avor) &&
                                                                (vg.Anach == Vorlagen[xx].Anach) &&
                                                                (vg.Font == Vorlagen[xx].Font) &&
                                                                (vg.TabValues == Vorlagen[xx].TabValues) &&
                                                                (vg.Drop == Vorlagen[xx].Drop) &&
                                                                (vg.DropLin == Vorlagen[xx].DropLin) &&
                                                                (vg.FontEffect == Vorlagen[xx].FontEffect) &&
                                                                (vg.FColor == Vorlagen[xx].FColor) &&
                                                                (vg.FShade == Vorlagen[xx].FShade) &&
                                                                (vg.SColor == Vorlagen[xx].SColor) &&
                                                                (vg.SShade == Vorlagen[xx].SShade) &&
                                                                (vg.BaseAdj == Vorlagen[xx].BaseAdj) &&
                                                                (vg.FontSize == Vorlagen[xx].FontSize))
                                                        fou = true;
                                                else
                                                {
                                                        QString Nam = vg.Vname;
                                                        QString Nam2 = Nam;
                                                        bool fou2 = false;
                                                        int copyC = 1;
                                                        do
                                                        {
                                                                fou2 = false;
                                                                for (uint vv=0; vv<Vorlagen.count(); ++vv)
                                                                {
                                                                        if (Nam2 == Vorlagen[vv].Vname)
                                                                        {
                                                                                fou2 = true;
                                                                                break;
                                                                        }
                                                                }
                                                                if (fou2)
                                                                        Nam2 = tr("Copy #%1 of ").arg(copyC)+Nam;
                                                                else
                                                                        break;
                                                                copyC++;
                                                        }
                                                        while (fou2);
                                                        vg.Vname = Nam2;
                                                        fou = false;
                                                }
                                                break;
                                        }
                                }
                                if (!fou)
                                        Vorlagen.append(vg);
                        }
                        PAGE=PAGE.nextSibling();
                }
                DOC=DOC.nextSibling();
        }
        return true;
}

bool ScriXmlDoc::ReadColors(QString fileName)
{
        QDomDocument docu("scridoc");
        QString f = "";
        f = ReadDatei(fileName);
        if (f == "")
                return false;
        if(!docu.setContent(f))
                return false;
        Farben.clear();
        CMYKColor lf = CMYKColor();
        QDomElement elem=docu.documentElement();
        if ((elem.tagName() != "SCRIBUS") && (elem.tagName() != "SCRIBUSUTF8"))
                return false;
        QDomNode DOC=elem.firstChild();
        while(!DOC.isNull())
        {
                QDomElement dc=DOC.toElement();
                QDomNode PAGE=DOC.firstChild();
                while(!PAGE.isNull())
                {
                        QDomElement pg=PAGE.toElement();
                        if(pg.tagName()=="COLOR")
                        {
                                if (pg.hasAttribute("CMYK"))
                                        lf.setNamedColor(pg.attribute("CMYK"));
                                else
                                        lf.fromQColor(QColor(pg.attribute("RGB")));
                                Farben[pg.attribute("NAME")] = lf;
                        }
                        PAGE=PAGE.nextSibling();
                }
                DOC=DOC.nextSibling();
        }
        return true;
}

bool ScriXmlDoc::ReadPageCount(QString fileName, int *num1, int *num2)
{
        QString PgNam;
        int counter = 0;
        int counter2 = 0;
        MNames.clear();
        QDomDocument docu("scridoc");
        QString f = "";
        f = ReadDatei(fileName);
        if (f == "")
                return false;
        if(!docu.setContent(f))
                return false;
        QDomElement elem=docu.documentElement();
        if ((elem.tagName() != "SCRIBUS") && (elem.tagName() != "SCRIBUSUTF8"))
                return false;
        QDomNode DOC=elem.firstChild();
        while(!DOC.isNull())
        {
                QDomNode PAGE=DOC.firstChild();
                while(!PAGE.isNull())
                {
                        QDomElement pg=PAGE.toElement();
                        if(pg.tagName()=="PAGE")
                        {
                                PgNam = pg.attribute("NAM", "");
                                if (PgNam == "")
                                        counter++;
                                else
                                {
                                        counter2++;
                                        MNames.append(PgNam);
                                }
                        }
                PAGE=PAGE.nextSibling();
                }
        DOC=DOC.nextSibling();
        }
        *num1 = counter;
        *num2 = counter2;
        return true;
}

bool ScriXmlDoc::ReadPage(QString fileName, SCFonts &avail, ScribusDoc *doc, ScribusView *view, int PageToLoad, bool Mpage)
{
        struct CLBuf OB;
        struct StVorL vg;
        struct Layer la;
        struct ScribusDoc::BookMa bok;
        struct Linked Link;
        PageItem *Neu;
        LFrames.clear();
        QString tmV, tmp, tmpf, tmp2, tmp3, tmp4, PgNam, f, Defont, tmf;
        QFont fo;
        QMap<QString,QString> DoFonts;
        QMap<uint,QString> DoVorl;
        QMap<int,int> TableID;
        QPtrList<PageItem> TableItems;
        uint VorlC;
        int x, y, a, counter, baseobj;
        double xf, yf;
        bool newVersion = false;
        bool fou;
        bool VorLFound = false;
        DoVorl.clear();
        DoFonts.clear();
        DoFonts[doc->Dfont] = doc->Dfont;
        DoVorl[0] = "0";
        DoVorl[1] = "1";
        DoVorl[2] = "2";
        DoVorl[3] = "3";
        DoVorl[4] = "4";
        VorlC = 5;
        QDomDocument docu("scridoc");
        f = "";
        f = ReadDatei(fileName);
        if (f == "")
                return false;
        if(!docu.setContent(f))
                return false;
        CMYKColor lf = CMYKColor();
        QDomElement elem=docu.documentElement();
        if ((elem.tagName() != "SCRIBUS") && (elem.tagName() != "SCRIBUSUTF8"))
                return false;
        if (elem.hasAttribute("Version"))
                newVersion = true;
        QDomNode DOC=elem.firstChild();
        while(!DOC.isNull())
        {
                QDomElement dc=DOC.toElement();
        /*
        * Attribute von DOCUMENT auslesen
        */

                QDomNode PAGE=DOC.firstChild();
                while(!PAGE.isNull())
                {
                        QDomElement pg=PAGE.toElement();
                        if(pg.tagName()=="FONT")
                        {
                        /*
                        * Attribute von FONT auslesen
                        */

                                tmpf = pg.attribute("NAME");
                                if ((!avail.find(tmpf)) || (!avail[tmpf]->UseFont))
                                {
                                        if ((!view->Prefs->GFontSub.contains(tmpf)) || (!avail[view->Prefs->GFontSub[tmpf]]->UseFont))
                                        {
                                                qApp->setOverrideCursor(QCursor(arrowCursor), true);
                                                DmF *dia = new DmF(view, tmpf, view->Prefs);
                                                dia->exec();
                                                tmpf = dia->Ersatz;
                                                delete dia;
                                                qApp->setOverrideCursor(QCursor(waitCursor), true);
                                                view->Prefs->GFontSub[pg.attribute("NAME")] = tmpf;
                                        }
                                        else
                                                tmpf = view->Prefs->GFontSub[tmpf];
                                }
                                fo = avail[tmpf]->Font;
                                fo.setPointSize(qRound(doc->Dsize / 10.0));
                                doc->AddFont(tmpf, fo);
                                DoFonts[pg.attribute("NAME")] = tmpf;
                        }
                        if(pg.tagName()=="COLOR")
                        {
                                if (pg.hasAttribute("CMYK"))
                                        lf.setNamedColor(pg.attribute("CMYK"));
                                else
                                        lf.fromQColor(QColor(pg.attribute("RGB")));
                                doc->PageColors[pg.attribute("NAME")] = lf;
                        }
                        if(pg.tagName()=="STYLE")
                        {
                                fou = false;
                                VorLFound = true;
                                vg.Vname = pg.attribute("NAME");
                                vg.LineSpa = QStodouble(pg.attribute("LINESP"));
                                vg.Indent = QStodouble(pg.attribute("INDENT","0"));
                                vg.First = QStodouble(pg.attribute("FIRST","0"));
                                vg.Ausri = QStoInt(pg.attribute("ALIGN"));
                                vg.Avor = QStodouble(pg.attribute("VOR","0"));
                                vg.Anach = QStodouble(pg.attribute("NACH","0"));
                                if (pg.hasAttribute("FONT"))
                                        vg.Font = DoFonts[pg.attribute("FONT")];
                                else
                                        vg.Font = DoFonts[Defont];
                                vg.FontSize = qRound(QStodouble(pg.attribute("FONTSIZE","12")) * 10.0);
                                vg.Drop = static_cast<bool>(QStoInt(pg.attribute("DROP","0")));
                                vg.DropLin = QStoInt(pg.attribute("DROPLIN","2"));
                                vg.FontEffect = QStoInt(pg.attribute("EFFECT","0"));
                                vg.FColor = pg.attribute("FCOLOR", doc->Dbrush);
                                vg.FShade = QStoInt(pg.attribute("FSHADE", "100"));
                                vg.SColor = pg.attribute("SCOLOR", doc->Dpen);
                                vg.SShade = QStoInt(pg.attribute("SSHADE", "100"));
                                vg.BaseAdj = static_cast<bool>(QStoInt(pg.attribute("BASE","0")));
                                if ((pg.hasAttribute("NUMTAB")) && (QStoInt(pg.attribute("NUMTAB","0")) != 0))
                                {
                                        tmp = pg.attribute("TABS");
                                        QTextStream tgv(&tmp, IO_ReadOnly);
                                        vg.TabValues.clear();
                                        for (int cxv = 0; cxv < QStoInt(pg.attribute("NUMTAB","0")); ++cxv)
                                        {
                                                tgv >> xf;
                                                vg.TabValues.append(xf);
                                        }
                                        tmp = "";
                                }
                                else
                                        vg.TabValues.clear();
                                for (uint xx=0; xx<doc->Vorlagen.count(); ++xx)
                                {
                                        if (vg.Vname == doc->Vorlagen[xx].Vname)
                                        {
                                                if ((vg.LineSpa == doc->Vorlagen[xx].LineSpa) &&
                                                        (vg.Indent == doc->Vorlagen[xx].Indent) &&
                                                        (vg.First == doc->Vorlagen[xx].First) &&
                                                        (vg.Ausri == doc->Vorlagen[xx].Ausri) &&
                                                        (vg.Avor == doc->Vorlagen[xx].Avor) &&
                                                        (vg.Anach == doc->Vorlagen[xx].Anach) &&
                                                        (vg.Font == doc->Vorlagen[xx].Font) &&
                                                        (vg.TabValues == doc->Vorlagen[xx].TabValues) &&
                                                        (vg.Drop == doc->Vorlagen[xx].Drop) &&
                                                        (vg.DropLin == doc->Vorlagen[xx].DropLin) &&
                                                        (vg.FontEffect == doc->Vorlagen[xx].FontEffect) &&
                                                        (vg.FColor == doc->Vorlagen[xx].FColor) &&
                                                        (vg.FShade == doc->Vorlagen[xx].FShade) &&
                                                        (vg.SColor == doc->Vorlagen[xx].SColor) &&
                                                        (vg.SShade == doc->Vorlagen[xx].SShade) &&
                                                        (vg.BaseAdj == doc->Vorlagen[xx].BaseAdj) &&
                                                        (vg.FontSize == doc->Vorlagen[xx].FontSize))
                                                {
                                                        DoVorl[VorlC] = tmV.setNum(xx);
                                                        VorlC++;
                                                        fou = true;
                                                }
                                                else
                                                {
                                                        QString Nam = vg.Vname;
                                                        QString Nam2 = Nam;
                                                        bool fou2 = false;
                                                        int copyC = 1;
                                                        do
                                                        {
                                                                fou2 = false;
                                                                for (uint vv=0; vv<doc->Vorlagen.count(); ++vv)
                                                                {
                                                                        if (Nam2 == doc->Vorlagen[vv].Vname)
                                                                        {
                                                                                fou2 = true;
                                                                                break;
                                                                        }
                                                                }
                                                                if (fou2)
                                                                        Nam2 = tr("Copy #%1 of ").arg(copyC)+Nam;
                                                                else
                                                                        break;
                                                                copyC++;
                                                        }
                                                        while (fou2);
                                                        vg.Vname = Nam2;
                                                        fou = false;
                                                }
                                        break;
                                        }
                                }
                                if (!fou)
                                {
                                        doc->Vorlagen.append(vg);
                                        DoVorl[VorlC] = tmV.setNum(doc->Vorlagen.count()-1);
                                        VorlC++;
                                }
                        }
                        if(pg.tagName()=="JAVA")
                                doc->JavaScripts[pg.attribute("NAME")] = pg.attribute("SCRIPT");
                        if(pg.tagName()=="LAYERS")
                        {
                                la.LNr = QStoInt(pg.attribute("NUMMER"));
                                la.Level = QStoInt(pg.attribute("LEVEL"));
                                la.Name = pg.attribute("NAME");
                                la.Sichtbar = QStoInt(pg.attribute("SICHTBAR"));
                                la.Drucken = QStoInt(pg.attribute("DRUCKEN"));
                                bool laex = false;
                                for (uint la2 = 0; la2 < doc->Layers.count(); ++la2)
                                {
                                        if (doc->Layers[la2].Name == la.Name)
                                                laex = true;
                                }
                                if (!laex)
                                        doc->Layers.append(la);
                        }
                        if(pg.tagName()=="Bookmark")
                        {
                                bok.Title = pg.attribute("Title");
                                bok.Text = pg.attribute("Text");
                                bok.Aktion = pg.attribute("Aktion");
                                bok.ItemNr = QStoInt(pg.attribute("ItemNr"));
                                bok.Seite = QStoInt(pg.attribute("Seite"));
                                bok.Element = QStoInt(pg.attribute("Element"));
                                bok.First = QStoInt(pg.attribute("First"));
                                bok.Last = QStoInt(pg.attribute("Last"));
                                bok.Prev = QStoInt(pg.attribute("Prev"));
                                bok.Next = QStoInt(pg.attribute("Next"));
                                bok.Parent = QStoInt(pg.attribute("Parent"));
                                doc->BookMarks.append(bok);
                        }
                        if(pg.tagName()=="MultiLine")
                        {
                                multiLine ml;
                                QDomNode MuLn = PAGE.firstChild();
                                while(!MuLn.isNull())
                                {
                                        QDomElement MuL = MuLn.toElement();
                                        struct singleLine sl;
                                        sl.Color = MuL.attribute("Color");
                                        sl.Dash = QStoInt(MuL.attribute("Dash"));
                                        sl.LineEnd = QStoInt(MuL.attribute("LineEnd"));
                                        sl.LineJoin = QStoInt(MuL.attribute("LineJoin"));
                                        sl.Shade = QStoInt(MuL.attribute("Shade"));
                                        sl.Width = QStodouble(MuL.attribute("Width"));
                                        ml.push_back(sl);
                                        MuLn = MuLn.nextSibling();
                                }
                                QString Nam = pg.attribute("Name");
                                QString Nam2 = Nam;
                                int copyC = 1;
                                while (doc->MLineStyles.contains(Nam2))
                                {
                                        Nam2 = tr("Copy #%1 of ").arg(copyC)+Nam;
                                        copyC++;
                                }
                                doc->MLineStyles.insert(Nam2, ml);
                        }
                        if ((pg.tagName()=="PAGE") && (QStoInt(pg.attribute("NUM")) == PageToLoad))
                        {
                                a = doc->ActPage->PageNr;
                                if ((pg.attribute("NAM", "") == "") && (Mpage))
                                {
                                        PAGE=PAGE.nextSibling();
                                        continue;
                                }
                                if (Mpage)
                                {
                                        view->Pages.at(a)->LeftPg=QStoInt(pg.attribute("LEFT","0"));
                                        view->Pages.at(a)->PageNam = pg.attribute("NAM","");
                                }
                                TableItems.clear();
                                TableID.clear();
                        /*
                        * Attribute von PAGE auslesen
                        */

                                if ((pg.hasAttribute("NumVGuides")) && (QStoInt(pg.attribute("NumVGuides","0")) != 0))
                                {
                                        tmp = pg.attribute("VerticalGuides");
                                        QTextStream fgv(&tmp, IO_ReadOnly);
                                        view->Pages.at(a)->YGuides.clear();
                                        for (int cxv = 0; cxv < QStoInt(pg.attribute("NumVGuides","0")); ++cxv)
                                        {
                                                fgv >> xf;
                                                view->Pages.at(a)->YGuides.append(xf);
                                        }
                                        qHeapSort(view->Pages.at(a)->YGuides);
                                        tmp = "";
                                }
                                else
                                        view->Pages.at(a)->YGuides.clear();
                                if ((pg.hasAttribute("NumHGuides")) && (QStoInt(pg.attribute("NumHGuides","0")) != 0))
                                {
                                        tmp = pg.attribute("HorizontalGuides");
                                        QTextStream fgh(&tmp, IO_ReadOnly);
                                        view->Pages.at(a)->XGuides.clear();
                                        for (int cxh = 0; cxh < QStoInt(pg.attribute("NumHGuides","0")); ++cxh)
                                        {
                                                fgh >> xf;
                                                view->Pages.at(a)->XGuides.append(xf);
                                        }
                                        qHeapSort(view->Pages.at(a)->XGuides);
                                        tmp = "";
                                }
                                else
                                        view->Pages.at(a)->XGuides.clear();
                                QDomNode OBJ=PAGE.firstChild();
                                counter = doc->ActPage->Items.count();
                                baseobj = counter;
                                while(!OBJ.isNull())
                                {
                                        QDomElement obj=OBJ.toElement();
                                /*
                                * Attribute von OBJECT auslesen
                                */

                                        if ((QStoInt(obj.attribute("NEXTITEM")) != -1) &&
                                                        (QStoInt(obj.attribute("NEXTPAGE")) == PageToLoad))
                                        {
                                                if (QStoInt(obj.attribute("BACKITEM")) == -1)
                                                {
                                                        Link.Start = counter;
                                                        Link.StPag = a;
                                                        LFrames.append(Link);
                                                }
                                        }
                                        OB.PType = QStoInt(obj.attribute("PTYPE"));
                                        OB.Xpos = QStodouble(obj.attribute("XPOS"));
                                        OB.Ypos=QStodouble(obj.attribute("YPOS"));
                                        OB.Width=QStodouble(obj.attribute("WIDTH"));
                                        OB.Height=QStodouble(obj.attribute("HEIGHT"));
                                        OB.RadRect = QStodouble(obj.attribute("RADRECT","0"));
                                        OB.ClipEdited = QStoInt(obj.attribute("CLIPEDIT", "0"));
                                        OB.FrameType = QStoInt(obj.attribute("FRTYPE", "0"));
                                        OB.Pwidth=QStodouble(obj.attribute("PWIDTH"));
                                        OB.Pcolor=obj.attribute("PCOLOR");
                                        if ((!newVersion) && (OB.PType == 4))
                                        {
                                                OB.TxtFill = obj.attribute("PCOLOR2");
                                                OB.Pcolor2 = "None";
                                        }
                                        else
                                        {
                                                OB.Pcolor2 = obj.attribute("PCOLOR2");
                                                OB.TxtFill = obj.attribute("TXTFILL", "Black");
                                        }
                                        OB.NamedLStyle = obj.attribute("NAMEDLST", "");
                                        if (!doc->MLineStyles.contains(OB.NamedLStyle))
                                                OB.NamedLStyle = "";
                                        OB.Shade=QStoInt(obj.attribute("SHADE"));
                                        OB.Shade2=QStoInt(obj.attribute("SHADE2"));
                                        OB.TxtStroke=obj.attribute("TXTSTROKE", "None");
                                        OB.ShTxtFill=QStoInt(obj.attribute("TXTFILLSH", "100"));
                                        OB.ShTxtStroke=QStoInt(obj.attribute("TXTSTRSH", "100"));
                                        OB.TxtScale=QStoInt(obj.attribute("TXTSCALE", "100"));
                                        OB.TxTStyle=QStoInt(obj.attribute("TXTSTYLE", "0"));
                                        OB.Cols = QStoInt(obj.attribute("COLUMNS","1"));
                                        OB.ColGap = QStodouble(obj.attribute("COLGAP","0.0"));
                                        OB.GrType = QStoInt(obj.attribute("GRTYP","0"));
                                        OB.fill_gradient.clearStops();
                                        if (OB.GrType != 0)
                                        {
                                                OB.GrStartX = QStodouble(obj.attribute("GRSTARTX","0.0"));
                                                OB.GrStartY = QStodouble(obj.attribute("GRSTARTY","0.0"));
                                                OB.GrEndX = QStodouble(obj.attribute("GRENDX","0.0"));
                                                OB.GrEndY = QStodouble(obj.attribute("GRENDY","0.0"));
                                                OB.GrColor = obj.attribute("GRCOLOR","");
                                                if (OB.GrColor != "")
                                                {
                                                        OB.GrColor2 = obj.attribute("GRCOLOR2","");
                                                        OB.GrShade = QStoInt(obj.attribute("GRSHADE","100"));
                                                        OB.GrShade2 = QStoInt(obj.attribute("GRSHADE2","100"));
                                                }
                                        }
                                        OB.Rot=QStodouble(obj.attribute("ROT"));
                                        OB.PLineArt=Qt::PenStyle(QStoInt(obj.attribute("PLINEART")));
                                        OB.PLineEnd=Qt::PenCapStyle(QStoInt(obj.attribute("PLINEEND","0")));
                                        OB.PLineJoin=Qt::PenJoinStyle(QStoInt(obj.attribute("PLINEJOIN","0")));
                                        OB.LineSp=QStodouble(obj.attribute("LINESP"));
                                        OB.ExtraV=QStodouble(obj.attribute("EXTRAV","0"));
                                        OB.LocalScX=QStodouble(obj.attribute("LOCALSCX"));
                                        OB.LocalScY=QStodouble(obj.attribute("LOCALSCY"));
                                        OB.LocalX=QStodouble(obj.attribute("LOCALX"));
                                        OB.LocalY=QStodouble(obj.attribute("LOCALY"));
                                        OB.PicArt=QStoInt(obj.attribute("PICART"));
                                        OB.flippedH=QStoInt(obj.attribute("FLIPPEDH"));
                                        OB.flippedV=QStoInt(obj.attribute("FLIPPEDV"));
                                        OB.BBoxX=QStodouble(obj.attribute("BBOXX"));
                                        OB.BBoxH=QStodouble(obj.attribute("BBOXH"));
                                        OB.ScaleType = QStoInt(obj.attribute("SCALETYPE","1"));
                                        OB.AspectRatio = QStoInt(obj.attribute("RATIO","0"));
                                        OB.isPrintable=QStoInt(obj.attribute("PRINTABLE"));
                                        OB.isBookmark=QStoInt(obj.attribute("BOOKMARK"));
                                        if ((OB.isBookmark) && (doc->BookMarks.count() == 0))
                                                doc->OldBM = true;
                                        OB.BMnr = QStoInt(obj.attribute("BookNr","0"));
                                        OB.isAnnotation=QStoInt(obj.attribute("ANNOTATION","0"));
                                        OB.AnType = QStoInt(obj.attribute("ANTYPE","0"));
                                        OB.AnAction = obj.attribute("ANACTION","");
                                        OB.An_E_act = obj.attribute("ANEACT","");
                                        OB.An_X_act = obj.attribute("ANXACT","");
                                        OB.An_D_act = obj.attribute("ANDACT","");
                                        OB.An_Fo_act = obj.attribute("ANFOACT","");
                                        OB.An_Bl_act = obj.attribute("ANBLACT","");
                                        OB.An_K_act = obj.attribute("ANKACT","");
                                        OB.An_F_act = obj.attribute("ANFACT","");
                                        OB.An_V_act = obj.attribute("ANVACT","");
                                        OB.An_C_act = obj.attribute("ANCACT","");
                                        OB.AnActType = QStoInt(obj.attribute("ANACTYP","0"));
                                        OB.An_Extern = obj.attribute("ANEXTERN","");
                                        if ((OB.An_Extern != "") && (OB.AnActType != 8))
                                        {
                                                QFileInfo efp(OB.An_Extern);
                                                OB.An_Extern = efp.absFilePath();
                                        }
                                        OB.AnZiel = QStoInt(obj.attribute("ANZIEL","0"));
                                        OB.AnName = obj.attribute("ANNAME","");
                                        OB.AnToolTip = obj.attribute("ANTOOLTIP","");
                                        OB.AnRollOver = obj.attribute("ANROLL","");
                                        OB.AnDown = obj.attribute("ANDOWN","");
                                        OB.AnBwid = QStoInt(obj.attribute("ANBWID","1"));
                                        OB.AnBsty = QStoInt(obj.attribute("ANBSTY","0"));
                                        OB.AnFeed = QStoInt(obj.attribute("ANFEED","1"));
                                        OB.AnFlag = QStoInt(obj.attribute("ANFLAG","0"));
                                        OB.AnFont = QStoInt(obj.attribute("ANFONT","4"));
                                        OB.AnFormat = QStoInt(obj.attribute("ANFORMAT","0"));
                                        OB.AnVis = QStoInt(obj.attribute("ANVIS","0"));
                                        OB.AnIsChk = static_cast<bool>(QStoInt(obj.attribute("ANCHK","0")));
                                        OB.AnAAact = static_cast<bool>(QStoInt(obj.attribute("ANAA","0")));
                                        OB.AnHTML = static_cast<bool>(QStoInt(obj.attribute("ANHTML","0")));
                                        OB.AnUseIcons = static_cast<bool>(QStoInt(obj.attribute("ANICON","0")));
                                        OB.AnChkStil = QStoInt(obj.attribute("ANCHKS","0"));
                                        OB.AnMaxChar = QStoInt(obj.attribute("ANMC","-1"));
                                        OB.AnBColor = obj.attribute("ANBCOL","None");
                                        OB.AnIPlace = QStoInt(obj.attribute("ANPLACE","1"));
                                        OB.AnScaleW = QStoInt(obj.attribute("ANSCALE","0"));
                                        if (QStoInt(obj.attribute("TRANSPARENT","0")) == 1)
                                                OB.Pcolor = "None";
                                        OB.Textflow=QStoInt(obj.attribute("TEXTFLOW"));
                                        OB.Textflow2=QStoInt(obj.attribute("TEXTFLOW2","0"));
                                        OB.Extra=QStodouble(obj.attribute("EXTRA"));
                                        OB.TExtra=QStodouble(obj.attribute("TEXTRA", "1"));
                                        OB.BExtra=QStodouble(obj.attribute("BEXTRA", "1"));
                                        OB.RExtra=QStodouble(obj.attribute("REXTRA", "1"));
                                        OB.PoShow = QStoInt(obj.attribute("PTLSHOW","0"));
                                        OB.BaseOffs = QStodouble(obj.attribute("BASEOF","0"));
                                        OB.Ausrich = QStoInt(obj.attribute("ALIGN","0"));
                                        tmf = obj.attribute("IFONT", doc->Dfont);
                                        if (tmf == "")
                                                tmf = doc->Dfont;
                                        OB.IFont = DoFonts[tmf];
                                        OB.ISize = qRound(QStodouble(obj.attribute("ISIZE","12")) * 10.0);
                                        OB.Pfile=obj.attribute("PFILE");
                                        OB.Pfile2=obj.attribute("PFILE2","");
                                        OB.Pfile3=obj.attribute("PFILE3","");
                                        OB.IProfile=obj.attribute("PRFILE","");
                                        OB.EmProfile=obj.attribute("EPROF","");
                                        OB.IRender = QStoInt(obj.attribute("IRENDER","1"));
                                        OB.UseEmbedded = QStoInt(obj.attribute("EMBEDDED","1"));
                                        OB.Locked = static_cast<bool>(QStoInt(obj.attribute("LOCK","0")));
                                        OB.LockRes = static_cast<bool>(QStoInt(obj.attribute("LOCKR","0")));
                                        OB.Reverse = static_cast<bool>(QStoInt(obj.attribute("REVERS","0")));
                                        OB.InvPict = static_cast<bool>(QStoInt(obj.attribute("INVERS","0")));
                                        OB.isTableItem = static_cast<bool>(QStoInt(obj.attribute("isTableItem","0")));
                                        OB.TopLine = static_cast<bool>(QStoInt(obj.attribute("TopLine","0")));
                                        OB.LeftLine = static_cast<bool>(QStoInt(obj.attribute("LeftLine","0")));
                                        OB.RightLine = static_cast<bool>(QStoInt(obj.attribute("RightLine","0")));
                                        OB.BottomLine = static_cast<bool>(QStoInt(obj.attribute("BottomLine","0")));
                                        OB.TopLinkID =  QStoInt(obj.attribute("TopLINK","-1"));
                                        OB.LeftLinkID =  QStoInt(obj.attribute("LeftLINK","-1"));
                                        OB.RightLinkID =  QStoInt(obj.attribute("RightLINK","-1"));
                                        OB.BottomLinkID =  QStoInt(obj.attribute("BottomLINK","-1"));
                                        OB.LayerNr = QStoInt(obj.attribute("LAYER","0"));
                                        OB.Language = obj.attribute("LANGUAGE", doc->Language);
                                        OB.Transparency = QStodouble(obj.attribute("TransValue","0.0"));
                                        if (obj.hasAttribute("TransValueS"))
                                                OB.TranspStroke = QStodouble(obj.attribute("TransValueS","0.0"));
                                        else
                                                OB.TranspStroke = OB.Transparency;
                                        if (obj.hasAttribute("NUMCLIP"))
                                        {
                                                OB.Clip.resize(obj.attribute("NUMCLIP").toUInt());
                                                tmp = obj.attribute("CLIPCOOR");
                                                QTextStream fc(&tmp, IO_ReadOnly);
                                                for (uint c=0; c<obj.attribute("NUMCLIP").toUInt(); ++c)
                                                {
                                                        fc >> x;
                                                        fc >> y;
                                                        OB.Clip.setPoint(c, x, y);
                                                }
                                        }
                                        else
                                                OB.Clip.resize(0);
                                        if (obj.hasAttribute("NUMPO"))
                                        {
                                                OB.PoLine.resize(obj.attribute("NUMPO").toUInt());
                                                tmp = obj.attribute("POCOOR");
                                                QTextStream fp(&tmp, IO_ReadOnly);
                                                for (uint cx=0; cx<obj.attribute("NUMPO").toUInt(); ++cx)
                                                {
                                                        fp >> xf;
                                                        fp >> yf;
                                                        OB.PoLine.setPoint(cx, xf, yf);
                                                }
                                        }
                                        else
                                                OB.PoLine.resize(0);
                                        tmp = "";
                                        if ((obj.hasAttribute("GROUPS")) && (QStoInt(obj.attribute("NUMGROUP","0")) != 0))
                                        {
                                                tmp = obj.attribute("GROUPS");
                                                QTextStream fg(&tmp, IO_ReadOnly);
                                                OB.Groups.clear();
                                                for (int cx = 0; cx < QStoInt(obj.attribute("NUMGROUP","0")); ++cx)
                                                {
                                                        fg >> x;
                                                        OB.Groups.push(x);
                                                }
                                        tmp = "";
                                        }
                                        else
                                                OB.Groups.clear();
                                        if ((obj.hasAttribute("NUMTAB")) && (QStoInt(obj.attribute("NUMTAB","0")) != 0))
                                        {
                                                tmp = obj.attribute("TABS");
                                                QTextStream tgv(&tmp, IO_ReadOnly);
                                                OB.TabValues.clear();
                                                for (int cxv = 0; cxv < QStoInt(obj.attribute("NUMTAB","0")); ++cxv)
                                                {
                                                        tgv >> xf;
                                                        OB.TabValues.append(xf);
                                                }
                                                tmp = "";
                                        }
                                        else
                                                OB.TabValues.clear();
                                        if ((obj.hasAttribute("NUMDASH")) && (QStoInt(obj.attribute("NUMDASH","0")) != 0))
                                        {
                                                tmp = obj.attribute("DASHS");
                                                QTextStream dgv(&tmp, IO_ReadOnly);
                                                OB.DashValues.clear();
                                        for (int cxv = 0; cxv < QStoInt(obj.attribute("NUMDASH","0")); ++cxv)
                                        {
                                                dgv >> xf;
                                                OB.DashValues.append(xf);
                                        }
                                        tmp = "";
                                }
                                else
                                        OB.DashValues.clear();
                                OB.DashOffset = QStodouble(obj.attribute("DASHOFF","0.0"));
                                QDomNode IT=OBJ.firstChild();
                                while(!IT.isNull())
                                {
                                        QDomElement it=IT.toElement();
                                        if (it.tagName()=="CSTOP")
                                        {
                                                QString name = it.attribute("NAME");
                                                double ramp = QStodouble(it.attribute("RAMP","0.0"));
                                                int shade = QStoInt(it.attribute("SHADE","100"));
                                                double opa = QStodouble(it.attribute("TRANS","1"));
                                                OB.fill_gradient.addStop(SetFarbe(doc, name, shade), ramp, 0.5, opa, name, shade);
                                        }
                                        if (it.tagName()=="ITEXT")
                                        {
                                                tmp2 = it.attribute("CH");
                                                tmp2.replace(QRegExp("\r"), QChar(5));
                                                tmp2.replace(QRegExp("\n"), QChar(5));
                                                tmp2.replace(QRegExp("\t"), QChar(4));
                                                tmf = it.attribute("CFONT", doc->Dfont);
                                                if (tmf == "")
                                                        tmf = doc->Dfont;
                                                tmp3 = "\t" + DoFonts[tmf] + "\t";
                                                tmp3 += it.attribute("CSIZE") + "\t";
                                                tmp3 += it.attribute("CCOLOR") + "\t";
                                                tmp3 += it.attribute("CEXTRA") + "\t";
                                                tmp3 += it.attribute("CSHADE") + "\t";
                                                tmp3 += it.attribute("CSTYLE") + "\t";
                                                if (VorLFound)
                                                        tmp3 += DoVorl[it.attribute("CAB","0").toUInt()] + "\t";
                                                else
                                                {
                                                        if (it.attribute("CAB","0").toUInt() < 5)
                                                                tmp3 += it.attribute("CAB","0")+"\t";
                                                        else
                                                                tmp3 += "0\t";
                                                        }
                                                        tmp3 += it.attribute("CSTROKE","None") + "\t";
                                                        tmp3 += it.attribute("CSHADE2","100") + "\t";
                                                        tmp3 += it.attribute("CSCALE","100") + "\n";
                                                        for (uint cxx=0; cxx<tmp2.length(); ++cxx)
                                                                tmp += tmp2.at(cxx)+tmp3;
                                                }
                                                IT=IT.nextSibling();
                                        }
                                        OB.Ptext = tmp;
                                        if ((OB.PType == 5) && (OB.Height != 0))
                                        {
                                                OB.Rot += atan2(OB.Height,OB.Width)*(180.0/3.1415927);
                                                OB.Width = sqrt(pow(OB.Width,2)+pow(OB.Height,2));
                                                OB.Height = 0;
                                                OB.Clip.setPoints(4, -1,-1, static_cast<int>(OB.Width+1),-1, static_cast<int>(OB.Width+1),
                                                                                        static_cast<int>(OB.Height+1), -1, static_cast<int>(OB.Height+1));
                                        }
                                        view->Pages.at(a)->PasteItem(&OB, true);
                                        Neu = view->Pages.at(a)->Items.at(counter);
                                        if (QStoInt(obj.attribute("NEXTPAGE")) == PageToLoad)
                                        {
                                                Neu->NextIt = baseobj + QStoInt(obj.attribute("NEXTITEM"));
                                                Neu->NextPg = a; // QStoInt(obj.attribute("NEXTPAGE"));
                                        }
                                        if (Neu->isTableItem)
                                        {
                                                TableItems.append(Neu);
                                                TableID.insert(QStoInt(obj.attribute("OwnLINK","0")), Neu->ItemNr);
                                        }
                                        counter++;
                                        OBJ=OBJ.nextSibling();
                                }
                                if (TableItems.count() != 0)
                                {
                                        for (uint ttc = 0; ttc < TableItems.count(); ++ttc)
                                        {
                                                PageItem* ta = TableItems.at(ttc);
                                                if (ta->TopLinkID != -1)
                                                        ta->TopLink = view->Pages.at(a)->Items.at(TableID[ta->TopLinkID]);
                                                else
                                                        ta->TopLink = 0;
                                                if (ta->LeftLinkID != -1)
                                                        ta->LeftLink = view->Pages.at(a)->Items.at(TableID[ta->LeftLinkID]);
                                                else
                                                        ta->LeftLink = 0;
                                                if (ta->RightLinkID != -1)
                                                        ta->RightLink = view->Pages.at(a)->Items.at(TableID[ta->RightLinkID]);
                                                else
                                                        ta->RightLink = 0;
                                                if (ta->BottomLinkID != -1)
                                                        ta->BottomLink = view->Pages.at(a)->Items.at(TableID[ta->BottomLinkID]);
                                                else
                                                        ta->BottomLink = 0;
                                        }
                                }
                                if (LFrames.count() != 0)
                                {
                                        PageItem *Its;
                                        PageItem *Itn;
                                        PageItem *Itr;
                                        QValueList<Linked>::Iterator lc;
                                        for (lc = LFrames.begin(); lc != LFrames.end(); ++lc)
                                        {
                                                Its = view->Pages.at((*lc).StPag)->Items.at((*lc).Start);
                                                Itr = Its;
                                                Its->BackBox = 0;
                                                while (Its->NextIt != -1)
                                                {
                                                        if (Its->NextPg == a)
                                                        {
                                                                Itn = view->Pages.at(Its->NextPg)->Items.at(Its->NextIt);
                                                                Its->NextBox = Itn;
                                                                Itn->BackBox = Its;
                                                                Its = Itn;
                                                        }
                                                        else
                                                                break;
                                                }
                                                Its->NextBox = 0;
                                                Itr->Dirty = true;
//                                      Itr->paintObj();
                                        }
                                }
                                if (!Mpage)
                                        view->reformPages();
                                return true;
                        }
                PAGE=PAGE.nextSibling();
                }      
        DOC=DOC.nextSibling();
        }
        return false;
}

bool ScriXmlDoc::ReadDoc(QString fileName, SCFonts &avail, ScribusDoc *doc, ScribusView *view, QProgressBar *dia2)
{
        struct CLBuf OB;
        struct StVorL vg;
        struct Layer la;
        struct ScribusDoc::BookMa bok;
        int counter, Pgc;      
        bool AtFl;
        bool newVersion = false;
        struct Linked Link;
        QString tmp, tmpf, tmp2, tmp3, tmp4, PgNam, Defont, tmf;
        QFont fo;
        QMap<QString,QString> DoFonts;
        QMap<int,int> TableID;
        QPtrList<PageItem> TableItems;
        int x, y, a;
        double xf, yf;
        PageItem *Neu;
        LFrames.clear();
        QDomDocument docu("scridoc");
        QString f = "";
        f = ReadDatei(fileName);
        if ((f == "") || (!f.startsWith("<SCRIBUS")) || (!docu.setContent(f)))
                return false;
        doc->PageColors.clear();       
        doc->Layers.clear();
        CMYKColor lf = CMYKColor();
        QDomElement elem=docu.documentElement();
        if ((elem.tagName() != "SCRIBUS") && (elem.tagName() != "SCRIBUSUTF8"))
                return false;
        if (elem.hasAttribute("Version"))
                newVersion = true;
        QDomNode DOC=elem.firstChild();
        dia2->setTotalSteps(DOC.childNodes().count());
        dia2->setProgress(0);
        int ObCount = 0;
        while(!DOC.isNull())
        {
                QDomElement dc=DOC.toElement();
        /*
        * Attribute von DOCUMENT auslesen
        */

                doc->PageB=QStodouble(dc.attribute("PAGEWITH"));
                doc->PageH=QStodouble(dc.attribute("PAGEHEIGHT"));
                doc->PageM.Left=QStodouble(dc.attribute("BORDERLEFT"));
                doc->PageM.Right=QStodouble(dc.attribute("BORDERRIGHT"));
                doc->PageM.Top=QStodouble(dc.attribute("BORDERTOP"));
                doc->PageM.Bottom=QStodouble(dc.attribute("BORDERBOTTOM"));
                doc->PageOri = QStoInt(dc.attribute("ORIENTATION","0"));
                doc->FirstPnum = QStoInt(dc.attribute("FIRSTNUM","1"));
                doc->PageFP=QStoInt(dc.attribute("BOOK", "0"));
                doc->FirstPageLeft=QStoInt(dc.attribute("FIRSTLEFT","0"));
                doc->PageAT=QStoInt(dc.attribute("AUTOTEXT"));
                doc->PageSp=QStoInt(dc.attribute("AUTOSPALTEN"));
                doc->PageSpa=QStodouble(dc.attribute("ABSTSPALTEN"));
                doc->Einheit = QStoInt(dc.attribute("UNITS","0"));
                DoFonts.clear();
                Defont=dc.attribute("DFONT");
                if (!avail.find(Defont))
                {
                        QString dd = Defont;
                        if (view->Prefs->GFontSub.contains(Defont))
                                Defont = view->Prefs->GFontSub[dd];
                        else
                                Defont = view->Prefs->DefFont;
                        DoFonts[dd] = Defont;
                }
                doc->Dfont = Defont;
                doc->Dsize=qRound(QStodouble(dc.attribute("DSIZE")) * 10);
                doc->DCols=QStoInt(dc.attribute("DCOL", "1"));
                doc->DGap=QStodouble(dc.attribute("DGAP", "0.0"));
                doc->DocAutor=dc.attribute("AUTHOR");
                doc->DocComments=dc.attribute("COMMENTS");
                doc->DocKeyWords=dc.attribute("KEYWORDS","");
                doc->DocTitel=dc.attribute("TITLE");
                doc->VHoch=QStoInt(dc.attribute("VHOCH"));
                doc->VHochSc=QStoInt(dc.attribute("VHOCHSC"));
                doc->VTief=QStoInt(dc.attribute("VTIEF"));
                doc->VTiefSc=QStoInt(dc.attribute("VTIEFSC"));
                doc->VKapit=QStoInt(dc.attribute("VKAPIT"));
                doc->GroupCounter=QStoInt(dc.attribute("GROUPC","1"));
                doc->HasCMS = static_cast<bool>(QStoInt(dc.attribute("HCMS","0")));
                doc->CMSSettings.SoftProofOn = static_cast<bool>(QStoInt(dc.attribute("DPSo","0")));
                doc->CMSSettings.CMSinUse = static_cast<bool>(QStoInt(dc.attribute("DPuse","0")));
                doc->CMSSettings.GamutCheck = static_cast<bool>(QStoInt(dc.attribute("DPgam","0")));
                doc->CMSSettings.BlackPoint = static_cast<bool>(QStoInt(dc.attribute("DPbla","1")));
                doc->CMSSettings.DefaultMonitorProfile = dc.attribute("DPMo","");
                doc->CMSSettings.DefaultPrinterProfile = dc.attribute("DPPr","");
                doc->CMSSettings.DefaultInputProfile = dc.attribute("DPIn","");
                doc->CMSSettings.DefaultInputProfile2 = dc.attribute("DPIn2","");
                doc->CMSSettings.DefaultIntentPrinter = QStoInt(dc.attribute("DIPr","0"));
                doc->CMSSettings.DefaultIntentMonitor = QStoInt(dc.attribute("DIMo","1"));
                doc->CMSSettings.DefaultIntentMonitor2 = QStoInt(dc.attribute("DIMo2","1"));
                doc->ActiveLayer = QStoInt(dc.attribute("ALAYER","0"));
                doc->Language = dc.attribute("LANGUAGE", "");
                doc->MinWordLen = QStoInt(dc.attribute("MINWORDLEN", "3"));
                doc->HyCount = QStoInt(dc.attribute("HYCOUNT", "2"));
                doc->Automatic = static_cast<bool>(QStoInt(dc.attribute("AUTOMATIC", "1")));
                doc->AutoCheck = static_cast<bool>(QStoInt(dc.attribute("AUTOCHECK", "0")));
                doc->GuideLock = static_cast<bool>(QStoInt(dc.attribute("GUIDELOCK", "0")));
                doc->BaseGrid = QStodouble(dc.attribute("BASEGRID", "12"));
                doc->BaseOffs = QStodouble(dc.attribute("BASEO", "0"));
                QDomNode PAGE=DOC.firstChild();
                while(!PAGE.isNull())
                {
                        ObCount++;
                        dia2->setProgress(ObCount);
                        QDomElement pg=PAGE.toElement();
                        if(pg.tagName()=="FONT")
                        {
                        /*
                        * Attribute von FONT auslesen
                        */

                                tmpf = pg.attribute("NAME");
                                if ((!avail.find(tmpf)) || (!avail[tmpf]->UseFont))
                                {
                                        if ((!view->Prefs->GFontSub.contains(tmpf)) || (!avail[view->Prefs->GFontSub[tmpf]]->UseFont))
                                        {
                                                qApp->setOverrideCursor(QCursor(arrowCursor), true);
                                                DmF *dia = new DmF(view, tmpf, view->Prefs);
                                                dia->exec();
                                                tmpf = dia->Ersatz;
                                                delete dia;
                                                qApp->setOverrideCursor(QCursor(waitCursor), true);
                                                view->Prefs->GFontSub[pg.attribute("NAME")] = tmpf;
                                        }
                                        else
                                                tmpf = view->Prefs->GFontSub[tmpf];
                                }
                                fo = avail[tmpf]->Font;
                                fo.setPointSize(qRound(doc->Dsize / 10.0));
                                doc->AddFont(tmpf, fo);
                                DoFonts[pg.attribute("NAME")] = tmpf;
                        }
                        if(pg.tagName()=="COLOR")
                        {
                                if (pg.hasAttribute("CMYK"))
                                        lf.setNamedColor(pg.attribute("CMYK"));
                                else
                                        lf.fromQColor(QColor(pg.attribute("RGB")));
                          doc->PageColors[pg.attribute("NAME")] = lf;
                        }
                        if(pg.tagName()=="STYLE")
                        {
                                vg.Vname = pg.attribute("NAME");
                                vg.LineSpa = QStodouble(pg.attribute("LINESP"));
                                vg.Indent = QStodouble(pg.attribute("INDENT","0"));
                                vg.First = QStodouble(pg.attribute("FIRST","0"));
                                vg.Ausri = QStoInt(pg.attribute("ALIGN"));
                                vg.Avor = QStodouble(pg.attribute("VOR","0"));
                                vg.Anach = QStodouble(pg.attribute("NACH","0"));
                                if (pg.hasAttribute("FONT"))
                                        vg.Font = DoFonts[pg.attribute("FONT")];
                                else
                                        vg.Font = DoFonts[Defont];
                                vg.FontSize = qRound(QStodouble(pg.attribute("FONTSIZE","12")) * 10.0);
                                vg.Drop = static_cast<bool>(QStoInt(pg.attribute("DROP","0")));
                                vg.DropLin = QStoInt(pg.attribute("DROPLIN","2"));
                                vg.FontEffect = QStoInt(pg.attribute("EFFECT","0"));
                                vg.FColor = pg.attribute("FCOLOR", doc->Dbrush);
                                vg.FShade = QStoInt(pg.attribute("FSHADE","100"));
                                vg.SColor = pg.attribute("SCOLOR", doc->Dpen);
                                vg.SShade = QStoInt(pg.attribute("SSHADE","100"));
                                vg.BaseAdj = static_cast<bool>(QStoInt(pg.attribute("BASE","0")));
                                if ((pg.hasAttribute("NUMTAB")) && (QStoInt(pg.attribute("NUMTAB","0")) != 0))
                                {
                                        tmp = pg.attribute("TABS");
                                        QTextStream tgv(&tmp, IO_ReadOnly);
                                        vg.TabValues.clear();
                                        for (int cxv = 0; cxv < QStoInt(pg.attribute("NUMTAB","0")); ++cxv)
                                        {
                                                tgv >> xf;
                                                vg.TabValues.append(xf);
                                        }
                                        tmp = "";
                                }
                                else
                                        vg.TabValues.clear();
                                doc->Vorlagen.append(vg);
                        }
                        if(pg.tagName()=="JAVA")
                                doc->JavaScripts[pg.attribute("NAME")] = pg.attribute("SCRIPT");
                        if(pg.tagName()=="LAYERS")
                        {
                                la.LNr = QStoInt(pg.attribute("NUMMER"));
                                la.Level = QStoInt(pg.attribute("LEVEL"));
                                la.Name = pg.attribute("NAME");
                                la.Sichtbar = QStoInt(pg.attribute("SICHTBAR"));
                                la.Drucken = QStoInt(pg.attribute("DRUCKEN"));
                                doc->Layers.append(la);
                        }
                        if(pg.tagName()=="Bookmark")
                        {
                                bok.Title = pg.attribute("Title");
                                bok.Text = pg.attribute("Text");
                                bok.Aktion = pg.attribute("Aktion");
                                bok.ItemNr = QStoInt(pg.attribute("ItemNr"));
                                bok.Seite = QStoInt(pg.attribute("Seite"));
                                bok.Element = QStoInt(pg.attribute("Element"));
                                bok.First = QStoInt(pg.attribute("First"));
                                bok.Last = QStoInt(pg.attribute("Last"));
                                bok.Prev = QStoInt(pg.attribute("Prev"));
                                bok.Next = QStoInt(pg.attribute("Next"));
                                bok.Parent = QStoInt(pg.attribute("Parent"));
                                doc->BookMarks.append(bok);
                        }
                        if(pg.tagName()=="PDF")
                        {
                                doc->PDF_Optionen.Articles = static_cast<bool>(QStoInt(pg.attribute("Articles")));
                                doc->PDF_Optionen.Thumbnails = static_cast<bool>(QStoInt(pg.attribute("Thumbnails")));
                                doc->PDF_Optionen.Compress = static_cast<bool>(QStoInt(pg.attribute("Compress")));
                                doc->PDF_Optionen.CompressMethod = QStoInt(pg.attribute("CMethod","0"));
                                doc->PDF_Optionen.Quality = QStoInt(pg.attribute("Quality","0"));
                                doc->PDF_Optionen.RecalcPic = static_cast<bool>(QStoInt(pg.attribute("RecalcPic")));
                                doc->PDF_Optionen.Bookmarks = static_cast<bool>(QStoInt(pg.attribute("Bookmarks")));
                                doc->PDF_Optionen.PresentMode = static_cast<bool>(QStoInt(pg.attribute("PresentMode")));
                                doc->PDF_Optionen.PicRes = QStoInt(pg.attribute("PicRes"));
                                doc->PDF_Optionen.Version = QStoInt(pg.attribute("Version"));
                                doc->PDF_Optionen.Resolution = QStoInt(pg.attribute("Resolution"));
                                doc->PDF_Optionen.Binding = QStoInt(pg.attribute("Binding"));
                                doc->PDF_Optionen.Datei = "";
                                doc->PDF_Optionen.UseRGB = static_cast<bool>(QStoInt(pg.attribute("RGBMode","0")));
                                doc->PDF_Optionen.UseProfiles = static_cast<bool>(QStoInt(pg.attribute("UseProfiles","0")));
                                doc->PDF_Optionen.UseProfiles2 = static_cast<bool>(QStoInt(pg.attribute("UseProfiles2","0")));
                                doc->PDF_Optionen.Intent = QStoInt(pg.attribute("Intent","1"));
                                doc->PDF_Optionen.Intent2 = QStoInt(pg.attribute("Intent2","1"));
                                doc->PDF_Optionen.SolidProf = pg.attribute("SolidP", "");
                                doc->PDF_Optionen.ImageProf = pg.attribute("ImageP", "");
                                doc->PDF_Optionen.PrintProf = pg.attribute("PrintP", "");
                                doc->PDF_Optionen.Info = pg.attribute("InfoString", "");
                                doc->PDF_Optionen.BleedTop = QStodouble(pg.attribute("BTop","0"));
                                doc->PDF_Optionen.BleedLeft = QStodouble(pg.attribute("BLeft","0"));
                                doc->PDF_Optionen.BleedRight = QStodouble(pg.attribute("BRight","0"));
                                doc->PDF_Optionen.BleedBottom = QStodouble(pg.attribute("BBottom","0"));
                                doc->PDF_Optionen.EmbeddedI = static_cast<bool>(QStoInt(pg.attribute("ImagePr","0")));
                                doc->PDF_Optionen.PassOwner = pg.attribute("PassOwner", "");
                                doc->PDF_Optionen.PassUser = pg.attribute("PassUser", "");
                                doc->PDF_Optionen.Permissions = QStoInt(pg.attribute("Permissions","-4"));
                                doc->PDF_Optionen.Encrypt = static_cast<bool>(QStoInt(pg.attribute("Encrypt","0")));
                                QDomNode PFO = PAGE.firstChild();
                                while(!PFO.isNull())
                                {
                                        QDomElement pdfF = PFO.toElement();
                                        if(pdfF.tagName() == "Fonts")
                                        {
                                                if (!doc->PDF_Optionen.EmbedList.contains(DoFonts[pdfF.attribute("Name")]))
                                                        doc->PDF_Optionen.EmbedList.append(DoFonts[pdfF.attribute("Name")]);
                                        }
                                        if(pdfF.tagName() == "Effekte")
                                        {
                                        struct PreSet ef;
                                        ef.EffektLen = QStoInt(pdfF.attribute("EffektLen"));
                                        ef.AnzeigeLen = QStoInt(pdfF.attribute("AnzeigeLen"));
                                        ef.Effekt = QStoInt(pdfF.attribute("Effekt"));
                                        ef.Dm = QStoInt(pdfF.attribute("Dm"));
                                        ef.M = QStoInt(pdfF.attribute("M"));
                                        ef.Di = QStoInt(pdfF.attribute("Di"));
                                                doc->PDF_Optionen.PresentVals.append(ef);
                                        }
                                        PFO = PFO.nextSibling();
                                }
                        }
                        if(pg.tagName()=="MultiLine")
                        {
                                multiLine ml;
                                QDomNode MuLn = PAGE.firstChild();
                                while(!MuLn.isNull())
                                {
                                        QDomElement MuL = MuLn.toElement();
                                        struct singleLine sl;
                                        sl.Color = MuL.attribute("Color");
                                        sl.Dash = QStoInt(MuL.attribute("Dash"));
                                        sl.LineEnd = QStoInt(MuL.attribute("LineEnd"));
                                        sl.LineJoin = QStoInt(MuL.attribute("LineJoin"));
                                        sl.Shade = QStoInt(MuL.attribute("Shade"));
                                        sl.Width = QStodouble(MuL.attribute("Width"));
                                        ml.push_back(sl);
                                        MuLn = MuLn.nextSibling();
                                }
                                doc->MLineStyles.insert(pg.attribute("Name"), ml);
                        }
                        if(pg.tagName()=="PAGE")
                        {
                                TableItems.clear();
                                TableID.clear();
                        /*
                        * Attribute von PAGE auslesen
                        */

                                a = QStoInt(pg.attribute("NUM"));
                                PgNam = "";
                                PgNam = pg.attribute("NAM", "");
                                Pgc = doc->PageC;
                                AtFl = doc->PageAT;
                                if (PgNam == "")
                                {
                                        doc->PageC = Pgc;
                                        view->Pages = view->DocPages;
                                        doc->PageAT = AtFl;
                                        doc->MasterP = false;
                                }
                                else
                                {
                                        doc->PageC = 0;
                                        doc->PageAT = false;
                                        view->Pages = view->MasterPages;
                                        doc->MasterP = true;
                                }
                                emit NewPage(a);
                                view->Pages.at(a)->LeftPg=QStoInt(pg.attribute("LEFT","0"));
                                QString Mus = "";
                                Mus = pg.attribute("MNAM","Normal");
                                if (!doc->MasterP)
                                        view->Pages.at(a)->MPageNam = Mus;
                                else
                                        view->Pages.at(a)->MPageNam = "";
                                if ((pg.hasAttribute("NumVGuides")) && (QStoInt(pg.attribute("NumVGuides","0")) != 0))
                                {
                                        tmp = pg.attribute("VerticalGuides");
                                        QTextStream fgv(&tmp, IO_ReadOnly);
                                        view->Pages.at(a)->YGuides.clear();
                                        for (int cxv = 0; cxv < QStoInt(pg.attribute("NumVGuides","0")); ++cxv)
                                        {
                                                fgv >> xf;
                                                view->Pages.at(a)->YGuides.append(xf);
                                        }
                                        qHeapSort(view->Pages.at(a)->YGuides);
                                        tmp = "";
                                }
                                else
                                        view->Pages.at(a)->YGuides.clear();
                                if ((pg.hasAttribute("NumHGuides")) && (QStoInt(pg.attribute("NumHGuides","0")) != 0))
                                {
                                        tmp = pg.attribute("HorizontalGuides");
                                        QTextStream fgh(&tmp, IO_ReadOnly);
                                        view->Pages.at(a)->XGuides.clear();
                                        for (int cxh = 0; cxh < QStoInt(pg.attribute("NumHGuides","0")); ++cxh)
                                        {
                                                fgh >> xf;
                                                view->Pages.at(a)->XGuides.append(xf);
                                        }
                                        qHeapSort(view->Pages.at(a)->XGuides);
                                        tmp = "";
                                }
                                else
                                        view->Pages.at(a)->XGuides.clear();
                                counter = 0;
                                QDomNode OBJ=PAGE.firstChild();
                                while(!OBJ.isNull())
                                {
                                        QDomElement obj=OBJ.toElement();
                                /*
                                * Attribute von OBJECT auslesen
                                */

                                        if ((QStoInt(obj.attribute("NEXTITEM")) != -1) || (static_cast<bool>(QStoInt(obj.attribute("AUTOTEXT")))))
                                        {
                                                if (QStoInt(obj.attribute("BACKITEM")) == -1)
                                                {
                                                        Link.Start = counter;
                                                        Link.StPag = a;
                                                        LFrames.append(Link);
                                                }
                                        }
                                        OB.PType = QStoInt(obj.attribute("PTYPE"));
                                        OB.Xpos = QStodouble(obj.attribute("XPOS"));
                                        OB.Ypos=QStodouble(obj.attribute("YPOS"));
                                        OB.Width=QStodouble(obj.attribute("WIDTH"));
                                        OB.Height=QStodouble(obj.attribute("HEIGHT"));
                                        OB.RadRect = QStodouble(obj.attribute("RADRECT","0"));
                                        OB.ClipEdited = QStoInt(obj.attribute("CLIPEDIT", "0"));
                                        OB.FrameType = QStoInt(obj.attribute("FRTYPE", "0"));
                                        OB.Pwidth=QStodouble(obj.attribute("PWIDTH"));
                                        OB.Pcolor=obj.attribute("PCOLOR");
                                        if ((!newVersion) && (OB.PType == 4))
                                        {
                                                OB.TxtFill = obj.attribute("PCOLOR2");
                                                OB.Pcolor2 = "None";
                                        }
                                        else
                                        {
                                                OB.Pcolor2 = obj.attribute("PCOLOR2");
                                                OB.TxtFill = obj.attribute("TXTFILL", "Black");
                                        }
                                        OB.NamedLStyle = obj.attribute("NAMEDLST", "");
                                        OB.Shade=QStoInt(obj.attribute("SHADE"));
                                        OB.Shade2=QStoInt(obj.attribute("SHADE2"));
                                        OB.TxtStroke=obj.attribute("TXTSTROKE", "None");
                                        OB.ShTxtFill=QStoInt(obj.attribute("TXTFILLSH", "100"));
                                        OB.ShTxtStroke=QStoInt(obj.attribute("TXTSTRSH", "100"));
                                        OB.TxtScale=QStoInt(obj.attribute("TXTSCALE", "100"));
                                        OB.TxTStyle=QStoInt(obj.attribute("TXTSTYLE", "0"));
                                        OB.Cols = QStoInt(obj.attribute("COLUMNS","1"));
                                        OB.ColGap = QStodouble(obj.attribute("COLGAP","0.0"));
                                        OB.GrType = QStoInt(obj.attribute("GRTYP","0"));
                                        OB.fill_gradient.clearStops();
                                        if (OB.GrType != 0)
                                        {
                                                OB.GrStartX = QStodouble(obj.attribute("GRSTARTX","0.0"));
                                                OB.GrStartY = QStodouble(obj.attribute("GRSTARTY","0.0"));
                                                OB.GrEndX = QStodouble(obj.attribute("GRENDX","0.0"));
                                                OB.GrEndY = QStodouble(obj.attribute("GRENDY","0.0"));
                                                OB.GrColor = obj.attribute("GRCOLOR","");
                                                if (OB.GrColor != "")
                                                {
                                                        OB.GrColor2 = obj.attribute("GRCOLOR2","");
                                                        OB.GrShade = QStoInt(obj.attribute("GRSHADE","100"));
                                                        OB.GrShade2 = QStoInt(obj.attribute("GRSHADE2","100"));
                                                }
                                        }
                                        OB.Rot=QStodouble(obj.attribute("ROT"));
                                        OB.PLineArt=Qt::PenStyle(QStoInt(obj.attribute("PLINEART")));
                                        OB.PLineEnd=Qt::PenCapStyle(QStoInt(obj.attribute("PLINEEND","0")));
                                        OB.PLineJoin=Qt::PenJoinStyle(QStoInt(obj.attribute("PLINEJOIN","0")));
                                        OB.LineSp=QStodouble(obj.attribute("LINESP"));
                                        OB.ExtraV=QStodouble(obj.attribute("EXTRAV","0"));
                                        OB.LocalScX=QStodouble(obj.attribute("LOCALSCX"));
                                        OB.LocalScY=QStodouble(obj.attribute("LOCALSCY"));
                                        OB.LocalX=QStodouble(obj.attribute("LOCALX"));
                                        OB.LocalY=QStodouble(obj.attribute("LOCALY"));
                                        OB.PicArt=QStoInt(obj.attribute("PICART"));
                                        OB.flippedH=QStoInt(obj.attribute("FLIPPEDH"));
                                        OB.flippedV=QStoInt(obj.attribute("FLIPPEDV"));
                                        OB.BBoxX=QStodouble(obj.attribute("BBOXX"));
                                        OB.BBoxH=QStodouble(obj.attribute("BBOXH"));
                                        OB.ScaleType = QStoInt(obj.attribute("SCALETYPE","1"));
                                        OB.AspectRatio = QStoInt(obj.attribute("RATIO","0"));
                                        OB.isPrintable=QStoInt(obj.attribute("PRINTABLE"));
                                        OB.isBookmark=QStoInt(obj.attribute("BOOKMARK"));
                                        if ((OB.isBookmark) && (doc->BookMarks.count() == 0))
                                                doc->OldBM = true;
                                        OB.BMnr = QStoInt(obj.attribute("BookNr","0"));
                                        OB.isAnnotation=QStoInt(obj.attribute("ANNOTATION","0"));
                                        OB.AnType = QStoInt(obj.attribute("ANTYPE","0"));
                                        OB.AnAction = obj.attribute("ANACTION","");
                                        OB.An_E_act = obj.attribute("ANEACT","");
                                        OB.An_X_act = obj.attribute("ANXACT","");
                                        OB.An_D_act = obj.attribute("ANDACT","");
                                        OB.An_Fo_act = obj.attribute("ANFOACT","");
                                        OB.An_Bl_act = obj.attribute("ANBLACT","");
                                        OB.An_K_act = obj.attribute("ANKACT","");
                                        OB.An_F_act = obj.attribute("ANFACT","");
                                        OB.An_V_act = obj.attribute("ANVACT","");
                                        OB.An_C_act = obj.attribute("ANCACT","");
                                        OB.AnActType = QStoInt(obj.attribute("ANACTYP","0"));
                                        OB.An_Extern = obj.attribute("ANEXTERN","");
                                        if ((OB.An_Extern != "") && (OB.AnActType != 8))
                                        {
                                                QFileInfo efp(OB.An_Extern);
                                                OB.An_Extern = efp.absFilePath();
                                        }
                                        OB.AnZiel = QStoInt(obj.attribute("ANZIEL","0"));
                                        OB.AnName = obj.attribute("ANNAME","");
                                        OB.AnToolTip = obj.attribute("ANTOOLTIP","");
                                        OB.AnRollOver = obj.attribute("ANROLL","");
                                        OB.AnDown = obj.attribute("ANDOWN","");
                                        OB.AnBwid = QStoInt(obj.attribute("ANBWID","1"));
                                        OB.AnBsty = QStoInt(obj.attribute("ANBSTY","0"));
                                        OB.AnFeed = QStoInt(obj.attribute("ANFEED","1"));
                                        OB.AnFlag = QStoInt(obj.attribute("ANFLAG","0"));
                                        OB.AnFont = QStoInt(obj.attribute("ANFONT","4"));
                                        OB.AnFormat = QStoInt(obj.attribute("ANFORMAT","0"));
                                        OB.AnVis = QStoInt(obj.attribute("ANVIS","0"));
                                        OB.AnIsChk = static_cast<bool>(QStoInt(obj.attribute("ANCHK","0")));
                                        OB.AnAAact = static_cast<bool>(QStoInt(obj.attribute("ANAA","0")));
                                        OB.AnHTML = static_cast<bool>(QStoInt(obj.attribute("ANHTML","0")));
                                        OB.AnUseIcons = static_cast<bool>(QStoInt(obj.attribute("ANICON","0")));
                                        OB.AnChkStil = QStoInt(obj.attribute("ANCHKS","0"));
                                        OB.AnMaxChar = QStoInt(obj.attribute("ANMC","-1"));
                                        OB.AnBColor = obj.attribute("ANBCOL","None");
                                        OB.AnIPlace = QStoInt(obj.attribute("ANPLACE","1"));
                                        OB.AnScaleW = QStoInt(obj.attribute("ANSCALE","0"));
                                        if (QStoInt(obj.attribute("TRANSPARENT","0")) == 1)
                                                OB.Pcolor = "None";
                                        OB.Textflow=QStoInt(obj.attribute("TEXTFLOW"));
                                        OB.Textflow2=QStoInt(obj.attribute("TEXTFLOW2","0"));
                                        OB.Extra=QStodouble(obj.attribute("EXTRA"));
                                        OB.TExtra=QStodouble(obj.attribute("TEXTRA", "1"));
                                        OB.BExtra=QStodouble(obj.attribute("BEXTRA", "1"));
                                        OB.RExtra=QStodouble(obj.attribute("REXTRA", "1"));
                                        OB.PoShow = QStoInt(obj.attribute("PTLSHOW","0"));
                                        OB.BaseOffs = QStodouble(obj.attribute("BASEOF","0"));
                                        OB.Ausrich = QStoInt(obj.attribute("ALIGN","0"));
                                        OB.IFont = obj.attribute("IFONT", doc->Dfont);
                                        if (tmf == "")
                                                OB.IFont = doc->Dfont;
                                        else
                                                OB.IFont = DoFonts[tmf];
                                        OB.ISize = qRound(QStodouble(obj.attribute("ISIZE","12")) * 10);
                                        OB.Pfile=obj.attribute("PFILE");
                                        OB.Pfile2=obj.attribute("PFILE2","");
                                        OB.Pfile3=obj.attribute("PFILE3","");
                                        OB.IProfile=obj.attribute("PRFILE","");
                                        OB.EmProfile=obj.attribute("EPROF","");
                                        OB.IRender = QStoInt(obj.attribute("IRENDER","1"));
                                        OB.UseEmbedded = QStoInt(obj.attribute("EMBEDDED","1"));
                                        OB.Locked = static_cast<bool>(QStoInt(obj.attribute("LOCK","0")));
                                        OB.LockRes = static_cast<bool>(QStoInt(obj.attribute("LOCKR","0")));
                                        OB.Reverse = static_cast<bool>(QStoInt(obj.attribute("REVERS","0")));
                                        OB.InvPict = static_cast<bool>(QStoInt(obj.attribute("INVERS","0")));
                                        OB.isTableItem = static_cast<bool>(QStoInt(obj.attribute("isTableItem","0")));
                                        OB.TopLine = static_cast<bool>(QStoInt(obj.attribute("TopLine","0")));
                                        OB.LeftLine = static_cast<bool>(QStoInt(obj.attribute("LeftLine","0")));
                                        OB.RightLine = static_cast<bool>(QStoInt(obj.attribute("RightLine","0")));
                                        OB.BottomLine = static_cast<bool>(QStoInt(obj.attribute("BottomLine","0")));
                                        OB.TopLinkID =  QStoInt(obj.attribute("TopLINK","-1"));
                                        OB.LeftLinkID =  QStoInt(obj.attribute("LeftLINK","-1"));
                                        OB.RightLinkID =  QStoInt(obj.attribute("RightLINK","-1"));
                                        OB.BottomLinkID =  QStoInt(obj.attribute("BottomLINK","-1"));
                                        OB.LayerNr = QStoInt(obj.attribute("LAYER","0"));
                                        OB.Language = obj.attribute("LANGUAGE", doc->Language);
                                        OB.Transparency = QStodouble(obj.attribute("TransValue","0.0"));
                                        if (obj.hasAttribute("TransValueS"))
                                                OB.TranspStroke = QStodouble(obj.attribute("TransValueS","0.0"));
                                        else
                                                OB.TranspStroke = OB.Transparency;
                                        if (obj.hasAttribute("NUMCLIP"))
                                        {
                                                OB.Clip.resize(obj.attribute("NUMCLIP").toUInt());
                                                tmp = obj.attribute("CLIPCOOR");
                                                QTextStream fc(&tmp, IO_ReadOnly);
                                                for (uint c=0; c<obj.attribute("NUMCLIP").toUInt(); ++c)
                                                {
                                                        fc >> x;
                                                        fc >> y;
                                                        OB.Clip.setPoint(c, x, y);
                                                }
                                        }
                                        else
                                                OB.Clip.resize(0);
                                        if (obj.hasAttribute("NUMPO"))
                                        {
                                                OB.PoLine.resize(obj.attribute("NUMPO").toUInt());
                                                tmp = obj.attribute("POCOOR");
                                                QTextStream fp(&tmp, IO_ReadOnly);
                                                for (uint cx=0; cx<obj.attribute("NUMPO").toUInt(); ++cx)
                                                {
                                                        fp >> xf;
                                                        fp >> yf;
                                                        OB.PoLine.setPoint(cx, xf, yf);
                                                }
                                        }
                                        else
                                                OB.PoLine.resize(0);
                                        tmp = "";
                                        if ((obj.hasAttribute("GROUPS")) && (QStoInt(obj.attribute("NUMGROUP","0")) != 0))
                                        {
                                                tmp = obj.attribute("GROUPS");
                                                QTextStream fg(&tmp, IO_ReadOnly);
                                                OB.Groups.clear();
                                                for (int cx = 0; cx < QStoInt(obj.attribute("NUMGROUP","0")); ++cx)
                                                {
                                                        fg >> x;
                                                        OB.Groups.push(x);
                                                }
                                                tmp = "";
                                        }
                                        else
                                                OB.Groups.clear();
                                        if ((obj.hasAttribute("NUMTAB")) && (QStoInt(obj.attribute("NUMTAB","0")) != 0))
                                        {
                                                tmp = obj.attribute("TABS");
                                                QTextStream tgv(&tmp, IO_ReadOnly);
                                                OB.TabValues.clear();
                                                for (int cxv = 0; cxv < QStoInt(obj.attribute("NUMTAB","0")); ++cxv)
                                                {
                                                        tgv >> xf;
                                                        OB.TabValues.append(xf);
                                                }
                                                tmp = "";
                                        }
                                        else
                                                OB.TabValues.clear();
                                        if ((obj.hasAttribute("NUMDASH")) && (QStoInt(obj.attribute("NUMDASH","0")) != 0))
                                        {
                                                tmp = obj.attribute("DASHS");
                                                QTextStream dgv(&tmp, IO_ReadOnly);
                                                OB.DashValues.clear();
                                                for (int cxv = 0; cxv < QStoInt(obj.attribute("NUMDASH","0")); ++cxv)
                                                {
                                                        dgv >> xf;
                                                        OB.DashValues.append(xf);
                                                }
                                                tmp = "";
                                        }
                                        else
                                                OB.DashValues.clear();
                                        OB.DashOffset = QStodouble(obj.attribute("DASHOFF","0.0"));
                                        QDomNode IT=OBJ.firstChild();
                                        while(!IT.isNull())
                                        {
                                                QDomElement it=IT.toElement();
                                                if (it.tagName()=="CSTOP")
                                                {
                                                        QString name = it.attribute("NAME");
                                                        double ramp = QStodouble(it.attribute("RAMP","0.0"));
                                                        int shade = QStoInt(it.attribute("SHADE","100"));
                                                        double opa = QStodouble(it.attribute("TRANS","1"));
                                                        OB.fill_gradient.addStop(SetFarbe(doc, name, shade), ramp, 0.5, opa, name, shade);
                                                }
                                                if (it.tagName()=="ITEXT")
                                                {
                                                        tmp2 = it.attribute("CH");
                                                        tmp2.replace(QRegExp("\r"), QChar(5));
                                                        tmp2.replace(QRegExp("\n"), QChar(5));
                                                        tmp2.replace(QRegExp("\t"), QChar(4));
                                                        tmf = it.attribute("CFONT", doc->Dfont);
                                                        if (tmf == "")
                                                                tmf = doc->Dfont;
                                                        tmp3 = "\t" + DoFonts[tmf] + "\t";
                                                        tmp3 += it.attribute("CSIZE") + "\t";
                                                        tmp3 += it.attribute("CCOLOR") + "\t";
                                                        tmp3 += it.attribute("CEXTRA") + "\t";
                                                        tmp3 += it.attribute("CSHADE") + "\t";
                                                        tmp3 += it.attribute("CSTYLE") + "\t";
                                                        tmp3 += it.attribute("CAB","0") + "\t";
                                                        tmp3 += it.attribute("CSTROKE","None") + "\t";
                                                        tmp3 += it.attribute("CSHADE2","100") + "\t";
                                                        tmp3 += it.attribute("CSCALE","100") + "\n";
                                                        for (uint cxx=0; cxx<tmp2.length(); ++cxx)
                                                                tmp += tmp2.at(cxx)+tmp3;
                                                }
                                                IT=IT.nextSibling();
                                        }
                                        OB.Ptext = tmp;
                                        int docGc = doc->GroupCounter;
                                        doc->GroupCounter = 0;
                                        if ((OB.PType == 5) && (OB.Height != 0))
                                        {
                                                OB.Rot += atan2(OB.Height,OB.Width)*(180.0/3.1415927);
                                                OB.Width = sqrt(pow(OB.Width,2)+pow(OB.Height,2));
                                                OB.Height = 0;
                                                OB.Clip.setPoints(4, -1,-1, static_cast<int>(OB.Width+1),-1, static_cast<int>(OB.Width+1),
                                                                                         static_cast<int>(OB.Height+1), -1, static_cast<int>(OB.Height+1));
                                        }
                                        view->Pages.at(a)->PasteItem(&OB, true);
                                        doc->GroupCounter = docGc;
                                        Neu = view->Pages.at(a)->Items.at(counter);
                                        Neu->isAutoText=static_cast<bool>(QStoInt(obj.attribute("AUTOTEXT")));
                                        if (Neu->isAutoText)
                                                doc->LastAuto = Neu;
                                        Neu->NextIt = QStoInt(obj.attribute("NEXTITEM"));
                                        Neu->NextPg = QStoInt(obj.attribute("NEXTPAGE"));
                                        if (Neu->isTableItem)
                                        {
                                                TableItems.append(Neu);
                                                TableID.insert(QStoInt(obj.attribute("OwnLINK","0")), Neu->ItemNr);
                                        }
                                        counter++;
                                        OBJ=OBJ.nextSibling();
                                }
                                if (TableItems.count() != 0)
                                {
                                        for (uint ttc = 0; ttc < TableItems.count(); ++ttc)
                                        {
                                                PageItem* ta = TableItems.at(ttc);
                                                if (ta->TopLinkID != -1)
                                                        ta->TopLink = view->Pages.at(a)->Items.at(TableID[ta->TopLinkID]);
                                                else
                                                        ta->TopLink = 0;
                                                if (ta->LeftLinkID != -1)
                                                        ta->LeftLink = view->Pages.at(a)->Items.at(TableID[ta->LeftLinkID]);
                                                else
                                                        ta->LeftLink = 0;
                                                if (ta->RightLinkID != -1)
                                                        ta->RightLink = view->Pages.at(a)->Items.at(TableID[ta->RightLinkID]);
                                                else
                                                        ta->RightLink = 0;
                                                if (ta->BottomLinkID != -1)
                                                        ta->BottomLink = view->Pages.at(a)->Items.at(TableID[ta->BottomLinkID]);
                                                else
                                                        ta->BottomLink = 0;
                                        }
                                }
                                if (PgNam == "")
                                        view->DocPages = view->Pages;
                                else
                                {
                                        view->Pages.at(a)->PageNam = PgNam;
                                        view->MasterNames[PgNam] = a;
                                        view->MasterPages = view->Pages;
                                }
                                doc->MasterP = false;
                                doc->PageC = Pgc+1;
                                doc->PageAT = AtFl;
                        }
                        PAGE=PAGE.nextSibling();
                }
                DOC=DOC.nextSibling();
        }
        for (uint ap=0; ap<view->MasterPages.count(); ++ap)
                view->MasterPages.at(ap)->parentWidget()->hide();
        view->Pages = view->DocPages;
        doc->PageC = view->Pages.count();      
        view->reformPages();
        if (doc->Layers.count() == 0)
        {
                la.LNr = 0;
                la.Level = 0;
                la.Name = tr("Background");
                la.Sichtbar = true;
                la.Drucken = true;
                doc->Layers.append(la);
        }
        if (LFrames.count() != 0)
        {
                PageItem *Its;
                PageItem *Itn;
                PageItem *Itr;
                QValueList<Linked>::Iterator lc;
                for (lc = LFrames.begin(); lc != LFrames.end(); ++lc)
                {
                        Its = view->Pages.at((*lc).StPag)->Items.at((*lc).Start);
                        Itr = Its;
                        Its->BackBox = 0;
                        if (Its->isAutoText)
                                doc->FirstAuto = Its;
                        while (Its->NextIt != -1)
                        {
                                Itn = view->Pages.at(Its->NextPg)->Items.at(Its->NextIt);
                                Its->NextBox = Itn;
                                Itn->BackBox = Its;
                                Its = Itn;
                        }
                        Its->NextBox = 0;
                        Itr->Dirty = true;
                }
        }
        view->UN->setText(doc->Einheit == 0 ? "pt" : "mm");
        dia2->setProgress(DOC.childNodes().count());
        return true;
}

bool ScriXmlDoc::ReadElemHeader(QString file, bool isFile, double *x, double *y, double *w, double *h)
{
        QString f;
        QDomDocument docu("scridoc");
        if (isFile)
        {
                if (!loadText(file, &f))
                        return false;
                QString ff = "";
                if (f.startsWith("<SCRIBUSELEMUTF8"))
                        ff = QString::fromUtf8(f);
                else
                        ff = f;
                if(!docu.setContent(ff))
                        return false;
        }
        else
        {
                QString ff = "";
                if (file.startsWith("<SCRIBUSELEMUTF8"))
                        ff = QString::fromUtf8(file);
                else
                        ff = file;
                if(!docu.setContent(ff))
                        return false;
        }
        QDomElement elem=docu.documentElement();
        if ((elem.tagName() != "SCRIBUSELEM") && (elem.tagName() != "SCRIBUSELEMUTF8"))
                return false;
        *x = QStodouble(elem.attribute("XP"));
        *y = QStodouble(elem.attribute("YP"));
        *w = QStodouble(elem.attribute("W","0"));
        *h = QStodouble(elem.attribute("H","0"));
        return true;
}

bool ScriXmlDoc::ReadElem(QString fileName, SCFonts &avail, ScribusDoc *doc, int Xp, int Yp, bool Fi, bool loc, QMap<QString,QString> &FontSub, preV *Prefs)
{
        struct CLBuf OB;
        struct StVorL vg;
        QString tmp, tmpf, tmp2, tmp3, tmp4, f, tmV, tmf;
        QFont fo;
        QMap<QString,QString> DoFonts;
        QMap<uint,QString> DoVorl;
        QMap<QString,QString> DoMul;
        QMap<int,int> TableID;
        QPtrList<PageItem> TableItems;
        uint VorlC;
        bool fou;
        bool VorLFound = false;
        bool newVersion = false;
        int x, y;
        double GrX, GrY, xf, yf;
        int GrMax = doc->GroupCounter;
        CMYKColor lf = CMYKColor();
        QDomDocument docu("scridoc");
        if (Fi)
        {
                if (!loadText(fileName, &f))
                        return false;
                QString ff = "";
                if (f.startsWith("<SCRIBUSELEMUTF8"))
                        ff = QString::fromUtf8(f);
                else
                        ff = f;
                if(!docu.setContent(ff))
                        return false;
        }
        else
        {
                QString ff = "";
                if (fileName.startsWith("<SCRIBUSELEMUTF8"))
                        ff = QString::fromUtf8(fileName);
                else
                        ff = fileName;
                if(!docu.setContent(ff))
                        return false;
        }
        QDomElement elem=docu.documentElement();
        if ((elem.tagName() != "SCRIBUSELEM") && (elem.tagName() != "SCRIBUSELEMUTF8"))
                return false;
        if (loc)
        {
                GrX = 0;
                GrY = 0;
        }
        else
        {
                GrX = QStodouble(elem.attribute("XP"));
                GrY = QStodouble(elem.attribute("YP"));
        }
        if (elem.hasAttribute("Version"))
                newVersion = true;
        QDomNode DOC=elem.firstChild();
        DoFonts.clear();
        DoFonts[doc->Dfont] = doc->Dfont;
        DoVorl.clear();
        DoVorl[0] = "0";
        DoVorl[1] = "1";
        DoVorl[2] = "2";
        DoVorl[3] = "3";
        DoVorl[4] = "4";
        VorlC = 5;
        TableItems.clear();
        TableID.clear();
        QString CurDirP = QDir::currentDirPath();
        QDir::setCurrent(QDir::homeDirPath());
        while(!DOC.isNull())
        {
                QDomElement pg=DOC.toElement();
                if(pg.tagName()=="FONT")
                {
                        tmpf = pg.attribute("NAME");
                        if ((!avail.find(tmpf)) || (!avail[tmpf]->UseFont))
                        {
                                if (!FontSub.contains(tmpf) || (!avail[FontSub[tmpf]]->UseFont))
                                {
                                        DmF *dia = new DmF(0, tmpf, Prefs);
                                        dia->exec();
                                        tmpf = dia->Ersatz;
                                        FontSub[pg.attribute("NAME")] = tmpf;
                                        delete dia;
                                }
                                else
                                        tmpf = FontSub[tmpf];
                        }
                        fo = avail[tmpf]->Font;
                        fo.setPointSize(qRound(doc->Dsize / 10.0));
                        if(!doc->UsedFonts.contains(tmpf))
                                doc->AddFont(tmpf, fo);
                        DoFonts[pg.attribute("NAME")] = tmpf;
                }
                if(pg.tagName()=="COLOR")
                {
                        if (pg.hasAttribute("CMYK"))
                                lf.setNamedColor(pg.attribute("CMYK"));
                        else
                                lf.fromQColor(QColor(pg.attribute("RGB")));
                        if (!doc->PageColors.contains(pg.attribute("NAME")))
                                doc->PageColors[pg.attribute("NAME")] = lf;
                }
                if(pg.tagName()=="MultiLine")
                {
                        multiLine ml;
                        QDomNode MuLn = DOC.firstChild();
                        while(!MuLn.isNull())
                        {
                                QDomElement MuL = MuLn.toElement();
                                struct singleLine sl;
                                sl.Color = MuL.attribute("Color");
                                sl.Dash = QStoInt(MuL.attribute("Dash"));
                                sl.LineEnd = QStoInt(MuL.attribute("LineEnd"));
                                sl.LineJoin = QStoInt(MuL.attribute("LineJoin"));
                                sl.Shade = QStoInt(MuL.attribute("Shade"));
                                sl.Width = QStodouble(MuL.attribute("Width"));
                                ml.push_back(sl);
                                MuLn = MuLn.nextSibling();
                        }
                        if (!doc->MLineStyles.contains(pg.attribute("Name")))
                                doc->MLineStyles.insert(pg.attribute("Name"), ml);
                }
                if(pg.tagName()=="STYLE")
                {
                        fou = false;
                        VorLFound = true;
                        vg.Vname = pg.attribute("NAME");
                        vg.LineSpa = QStodouble(pg.attribute("LINESP"));
                        vg.Indent = QStodouble(pg.attribute("INDENT","0"));
                        vg.First = QStodouble(pg.attribute("FIRST","0"));
                        vg.Ausri = QStoInt(pg.attribute("ALIGN"));
                        vg.Avor = QStodouble(pg.attribute("VOR","0"));
                        vg.Anach = QStodouble(pg.attribute("NACH","0"));
                        if (pg.hasAttribute("FONT"))
                                vg.Font = DoFonts[pg.attribute("FONT")];
                        else
                                vg.Font = doc->Dfont;
                        vg.FontSize = qRound(QStodouble(pg.attribute("FONTSIZE","12")) * 10);
                        vg.Drop = static_cast<bool>(QStoInt(pg.attribute("DROP","0")));
                        vg.DropLin = QStoInt(pg.attribute("DROPLIN","2"));
                        vg.FontEffect = QStoInt(pg.attribute("EFFECT","0"));
                        vg.FColor = pg.attribute("FCOLOR", doc->Dbrush);
                        vg.FShade = QStoInt(pg.attribute("FSHADE", "100"));
                        vg.SColor = pg.attribute("SCOLOR", doc->Dpen);
                        vg.SShade = QStoInt(pg.attribute("SSHADE", "100"));
                        vg.BaseAdj = static_cast<bool>(QStoInt(pg.attribute("BASE","0")));
                        if ((pg.hasAttribute("NUMTAB")) && (QStoInt(pg.attribute("NUMTAB","0")) != 0))
                        {
                                tmp = pg.attribute("TABS");
                                QTextStream tgv(&tmp, IO_ReadOnly);
                                vg.TabValues.clear();
                                for (int cxv = 0; cxv < QStoInt(pg.attribute("NUMTAB","0")); ++cxv)
                                {
                                        tgv >> xf;
                                        vg.TabValues.append(xf);
                                }
                                tmp = "";
                        }
                        else
                                vg.TabValues.clear();
                        for (uint xx=0; xx<doc->Vorlagen.count(); ++xx)
                        {
                                if (vg.Vname == doc->Vorlagen[xx].Vname)
                                {
                                        if ((vg.LineSpa == doc->Vorlagen[xx].LineSpa) &&
                                                        (vg.Indent == doc->Vorlagen[xx].Indent) &&
                                                        (vg.First == doc->Vorlagen[xx].First) &&
                                                        (vg.Ausri == doc->Vorlagen[xx].Ausri) &&
                                                        (vg.Avor == doc->Vorlagen[xx].Avor) &&
                                                        (vg.Anach == doc->Vorlagen[xx].Anach) &&
                                                        (vg.Font == doc->Vorlagen[xx].Font) &&
                                                        (vg.TabValues == doc->Vorlagen[xx].TabValues) &&
                                                        (vg.Drop == doc->Vorlagen[xx].Drop) &&
                                                        (vg.DropLin == doc->Vorlagen[xx].DropLin) &&
                                                        (vg.FontEffect == doc->Vorlagen[xx].FontEffect) &&
                                                        (vg.FColor == doc->Vorlagen[xx].FColor) &&
                                                        (vg.FShade == doc->Vorlagen[xx].FShade) &&
                                                        (vg.SColor == doc->Vorlagen[xx].SColor) &&
                                                        (vg.SShade == doc->Vorlagen[xx].SShade) &&
                                                        (vg.BaseAdj == doc->Vorlagen[xx].BaseAdj) &&
                                                        (vg.FontSize == doc->Vorlagen[xx].FontSize))
                                        {
                                                DoVorl[VorlC] = tmV.setNum(xx);
                                                VorlC++;
                                                fou = true;
                                        }
                                        else
                                        {
                                                vg.Vname = "Copy of "+doc->Vorlagen[xx].Vname;
                                                fou = false;
                                        }
                                        break;
                                }
                        }
                        if (!fou)
                        {
                                doc->Vorlagen.append(vg);
                                DoVorl[VorlC] = tmV.setNum(doc->Vorlagen.count()-1);
                                VorlC++;
                        }
                }
                DOC=DOC.nextSibling();
        }
        DOC=elem.firstChild();
        while(!DOC.isNull())
        {
                QDomElement pg=DOC.toElement();
                if(pg.tagName()=="ITEM")
                {
                        OB.PType = QStoInt(pg.attribute("PTYPE"));
                        OB.Xpos = static_cast<double>(Xp) + QStodouble(pg.attribute("XPOS")) - GrX;
                        OB.Ypos = static_cast<double>(Yp) + QStodouble(pg.attribute("YPOS")) - GrY;
                        OB.Width = QStodouble(pg.attribute("WIDTH"));
                        OB.Height = QStodouble(pg.attribute("HEIGHT"));
                        OB.RadRect = QStodouble(pg.attribute("RADRECT","0"));
                        OB.ClipEdited = QStoInt(pg.attribute("CLIPEDIT", "0"));
                        OB.FrameType = QStoInt(pg.attribute("FRTYPE", "0"));
                        OB.Pwidth = QStodouble(pg.attribute("PWIDTH"));
                        OB.Pcolor = pg.attribute("PCOLOR");
                        if ((!newVersion) && (OB.PType == 4))
                        {
                                OB.TxtFill = pg.attribute("PCOLOR2");
                                OB.Pcolor2 = "None";
                        }
                        else
                        {
                                OB.Pcolor2 = pg.attribute("PCOLOR2");
                                OB.TxtFill = pg.attribute("TXTFILL", "Black");
                        }
                        OB.NamedLStyle = pg.attribute("NAMEDLST", "");
                        if (!doc->MLineStyles.contains(OB.NamedLStyle))
                                OB.NamedLStyle = "";
                        OB.Shade = QStoInt(pg.attribute("SHADE"));
                        OB.Shade2 = QStoInt(pg.attribute("SHADE2"));
                        OB.TxtStroke = pg.attribute("TXTSTROKE", "None");
                        OB.ShTxtFill = QStoInt(pg.attribute("TXTFILLSH", "100"));
                        OB.ShTxtStroke = QStoInt(pg.attribute("TXTSTRSH", "100"));
                        OB.TxtScale = QStoInt(pg.attribute("TXTSCALE", "100"));
                        OB.TxTStyle = QStoInt(pg.attribute("TXTSTYLE", "0"));
                        OB.Cols = QStoInt(pg.attribute("COLUMNS","1"));
                        OB.ColGap = QStodouble(pg.attribute("COLGAP","0.0"));
                        OB.GrType = QStoInt(pg.attribute("GRTYP","0"));
                        OB.fill_gradient.clearStops();
                        if (OB.GrType != 0)
                        {
                                OB.GrStartX = QStodouble(pg.attribute("GRSTARTX","0.0"));
                                OB.GrStartY = QStodouble(pg.attribute("GRSTARTY","0.0"));
                                OB.GrEndX = QStodouble(pg.attribute("GRENDX","0.0"));
                                OB.GrEndY = QStodouble(pg.attribute("GRENDY","0.0"));
                                OB.GrColor = pg.attribute("GRCOLOR","");
                                if (OB.GrColor != "")
                                {
                                        OB.GrColor2 = pg.attribute("GRCOLOR2","");
                                        OB.GrShade = QStoInt(pg.attribute("GRSHADE","100"));
                                        OB.GrShade2 = QStoInt(pg.attribute("GRSHADE2","100"));
                                }
                        }
                        OB.Rot = QStodouble(pg.attribute("ROT"));
                        OB.PLineArt = Qt::PenStyle(QStoInt(pg.attribute("PLINEART")));
                        OB.PLineEnd = Qt::PenCapStyle(QStoInt(pg.attribute("PLINEEND","0")));
                        OB.PLineJoin = Qt::PenJoinStyle(QStoInt(pg.attribute("PLINEJOIN","0")));
                        OB.LineSp = QStodouble(pg.attribute("LINESP"));
                        OB.ExtraV = QStodouble(pg.attribute("EXTRAV","0"));
                        OB.LocalScX = QStodouble(pg.attribute("LOCALSCX"));
                        OB.LocalScY = QStodouble(pg.attribute("LOCALSCY"));
                        OB.LocalX = QStodouble(pg.attribute("LOCALX"));
                        OB.LocalY = QStodouble(pg.attribute("LOCALY"));
                        OB.PicArt = QStoInt(pg.attribute("PICART"));
                        OB.flippedH = QStoInt(pg.attribute("FLIPPEDH"));
                        OB.flippedV = QStoInt(pg.attribute("FLIPPEDV"));
                        OB.ScaleType = QStoInt(pg.attribute("SCALETYPE","1"));
                        OB.AspectRatio = QStoInt(pg.attribute("RATIO","0"));
                        OB.BBoxX = QStodouble(pg.attribute("BBOXX"));
                        OB.BBoxH = QStodouble(pg.attribute("BBOXH"));
                        OB.isPrintable = QStoInt(pg.attribute("PRINTABLE"));
                        OB.isBookmark = false;
                        OB.BMnr = 0;
                        OB.isAnnotation = QStoInt(pg.attribute("ANNOTATION","0"));
                        OB.AnType = QStoInt(pg.attribute("ANTYPE","0"));
                        OB.AnAction = pg.attribute("ANACTION","");
                        OB.An_E_act = pg.attribute("ANEACT","");
                        OB.An_X_act = pg.attribute("ANXACT","");
                        OB.An_D_act = pg.attribute("ANDACT","");
                        OB.An_Fo_act = pg.attribute("ANFOACT","");
                        OB.An_Bl_act = pg.attribute("ANBLACT","");
                        OB.An_K_act = pg.attribute("ANKACT","");
                        OB.An_F_act = pg.attribute("ANFACT","");
                        OB.An_V_act = pg.attribute("ANVACT","");
                        OB.An_C_act = pg.attribute("ANCACT","");
                        OB.AnActType = QStoInt(pg.attribute("ANACTYP","0"));
                        OB.An_Extern = pg.attribute("ANEXTERN","");
                        if ((OB.An_Extern != "") && (OB.AnActType != 8))
                        {
                                QFileInfo efp(OB.An_Extern);
                                OB.An_Extern = efp.absFilePath();
                        }
                        OB.AnZiel = QStoInt(pg.attribute("ANZIEL","0"));
                        OB.AnName = pg.attribute("ANNAME","");
                        OB.AnToolTip = pg.attribute("ANTOOLTIP","");
                        OB.AnRollOver = pg.attribute("ANROLL","");
                        OB.AnDown = pg.attribute("ANDOWN","");
                        OB.AnBwid = QStoInt(pg.attribute("ANBWID","1"));
                        OB.AnBsty = QStoInt(pg.attribute("ANBSTY","0"));
                        OB.AnFeed = QStoInt(pg.attribute("ANFEED","1"));
                        OB.AnFlag = QStoInt(pg.attribute("ANFLAG","0"));
                        OB.AnFont = QStoInt(pg.attribute("ANFONT","4"));
                        OB.AnFormat = QStoInt(pg.attribute("ANFORMAT","0"));
                        OB.AnVis = QStoInt(pg.attribute("ANVIS","0"));
                        OB.AnMaxChar = QStoInt(pg.attribute("ANMC","-1"));
                        OB.AnIsChk = static_cast<bool>(QStoInt(pg.attribute("ANCHK","0")));
                        OB.AnAAact = static_cast<bool>(QStoInt(pg.attribute("ANAA","0")));
                        OB.AnHTML = static_cast<bool>(QStoInt(pg.attribute("ANHTML","0")));
                        OB.AnUseIcons = static_cast<bool>(QStoInt(pg.attribute("ANICON","0")));
                        OB.AnChkStil = QStoInt(pg.attribute("ANCHKS","0"));
                        OB.AnIPlace = QStoInt(pg.attribute("ANPLACE","1"));
                        OB.AnScaleW = QStoInt(pg.attribute("ANSCALE","0"));
                        OB.AnBColor = pg.attribute("ANBCOL","None");
                        if (QStoInt(pg.attribute("TRANSPARENT","0")) == 1)
                                OB.Pcolor = "None";
                        OB.Textflow = QStoInt(pg.attribute("TEXTFLOW"));
                        OB.Textflow2 = QStoInt(pg.attribute("TEXTFLOW2","0"));
                        OB.Extra = QStodouble(pg.attribute("EXTRA"));
                        OB.TExtra = QStodouble(pg.attribute("TEXTRA", "1"));
                        OB.BExtra = QStodouble(pg.attribute("BEXTRA", "1"));
                        OB.RExtra = QStodouble(pg.attribute("REXTRA", "1"));
                        OB.PoShow = QStoInt(pg.attribute("PTLSHOW","0"));
                        OB.BaseOffs = QStodouble(pg.attribute("BASEOF","0"));
                        OB.Ausrich = QStoInt(pg.attribute("ALIGN","0"));
                        tmf = pg.attribute("IFONT", doc->Dfont);
                        if (tmf == "")
                                tmf = doc->Dfont;
                        OB.IFont = DoFonts[tmf];
                        OB.ISize = qRound(QStodouble(pg.attribute("ISIZE","12")) * 10);
                        OB.Pfile = pg.attribute("PFILE");
                        OB.Pfile2 = pg.attribute("PFILE2","");
                        OB.Pfile3 = pg.attribute("PFILE3","");
                        OB.IProfile = pg.attribute("PRFILE","");
                        OB.EmProfile = pg.attribute("EPROF","");
                        OB.IRender = QStoInt(pg.attribute("IRENDER","1"));
                        OB.UseEmbedded = QStoInt(pg.attribute("EMBEDDED","1"));
                        OB.Locked = static_cast<bool>(QStoInt(pg.attribute("LOCK","0")));
                        OB.LockRes = static_cast<bool>(QStoInt(pg.attribute("LOCKR","0")));
                        OB.Reverse = static_cast<bool>(QStoInt(pg.attribute("REVERS","0")));
                        OB.InvPict = static_cast<bool>(QStoInt(pg.attribute("INVERS","0")));
                        OB.isTableItem = static_cast<bool>(QStoInt(pg.attribute("isTableItem","0")));
                        OB.TopLine = static_cast<bool>(QStoInt(pg.attribute("TopLine","0")));
                        OB.LeftLine = static_cast<bool>(QStoInt(pg.attribute("LeftLine","0")));
                        OB.RightLine = static_cast<bool>(QStoInt(pg.attribute("RightLine","0")));
                        OB.BottomLine = static_cast<bool>(QStoInt(pg.attribute("BottomLine","0")));
                        OB.TopLinkID =  QStoInt(pg.attribute("TopLINK","-1"));
                        OB.LeftLinkID =  QStoInt(pg.attribute("LeftLINK","-1"));
                        OB.RightLinkID =  QStoInt(pg.attribute("RightLINK","-1"));
                        OB.BottomLinkID =  QStoInt(pg.attribute("BottomLINK","-1"));
                        OB.Language = pg.attribute("LANGUAGE", doc->Language);
                        OB.Transparency = QStodouble(pg.attribute("TransValue","0.0"));
                        if (pg.hasAttribute("TransValueS"))
                                OB.TranspStroke = QStodouble(pg.attribute("TransValueS","0.0"));
                        else
                                OB.TranspStroke = OB.Transparency;
                        if (pg.hasAttribute("NUMCLIP"))
                        {
                                OB.Clip.resize(pg.attribute("NUMCLIP").toUInt());
                                tmp = pg.attribute("CLIPCOOR");
                                QTextStream f(&tmp, IO_ReadOnly);
                                for (uint c=0; c<pg.attribute("NUMCLIP").toUInt(); ++c)
                                {
                                        f >> x;
                                        f >> y;
                                        OB.Clip.setPoint(c, x, y);
                                }
                        }
                        else
                                OB.Clip.resize(0);
                        if (pg.hasAttribute("NUMPO"))
                        {
                                OB.PoLine.resize(pg.attribute("NUMPO").toUInt());
                                tmp = pg.attribute("POCOOR");
                                QTextStream fp(&tmp, IO_ReadOnly);
                                for (uint cx=0; cx<pg.attribute("NUMPO").toUInt(); ++cx)
                                {
                                        fp >> xf;
                                        fp >> yf;
                                        OB.PoLine.setPoint(cx, xf, yf);
                                }
                        }
                        else
                                OB.PoLine.resize(0);
                        tmp = "";
                        if ((pg.hasAttribute("GROUPS")) && (QStoInt(pg.attribute("NUMGROUP","0")) != 0))
                        {
                                tmp = pg.attribute("GROUPS");
                                QTextStream fg(&tmp, IO_ReadOnly);
                                OB.Groups.clear();
                                for (int cx = 0; cx < QStoInt(pg.attribute("NUMGROUP","0")); ++cx)
                                {
                                        fg >> x;
                                        OB.Groups.push(x+doc->GroupCounter);
                                        GrMax = QMAX(GrMax, x+doc->GroupCounter);
                                }
                                tmp = "";
                        }
                        else
                                OB.Groups.clear();
                        tmp = "";
                        if ((pg.hasAttribute("NUMTAB")) && (QStoInt(pg.attribute("NUMTAB","0")) != 0))
                        {
                                tmp = pg.attribute("TABS");
                                QTextStream tgv(&tmp, IO_ReadOnly);
                                OB.TabValues.clear();
                                for (int cxv = 0; cxv < QStoInt(pg.attribute("NUMTAB","0")); ++cxv)
                                {
                                        tgv >> xf;
                                        OB.TabValues.append(xf);
                                }
                                tmp = "";
                        }
                        else
                                OB.TabValues.clear();
                        if ((pg.hasAttribute("NUMDASH")) && (QStoInt(pg.attribute("NUMDASH","0")) != 0))
                        {
                                tmp = pg.attribute("DASHS");
                                QTextStream dgv(&tmp, IO_ReadOnly);
                                OB.DashValues.clear();
                                for (int cxv = 0; cxv < QStoInt(pg.attribute("NUMDASH","0")); ++cxv)
                                {
                                        dgv >> xf;
                                        OB.DashValues.append(xf);
                                }
                                tmp = "";
                        }
                        else
                                OB.DashValues.clear();
                        OB.DashOffset = QStodouble(pg.attribute("DASHOFF","0.0"));
                        QDomNode IT=DOC.firstChild();
                        while(!IT.isNull())
                        {
                                QDomElement it=IT.toElement();
                                if (it.tagName()=="CSTOP")
                                {
                                        QString name = it.attribute("NAME");
                                        double ramp = QStodouble(it.attribute("RAMP","0.0"));
                                        int shade = QStoInt(it.attribute("SHADE","100"));
                                        double opa = QStodouble(it.attribute("TRANS","1"));
                                        OB.fill_gradient.addStop(SetFarbe(doc, name, shade), ramp, 0.5, opa, name, shade);
                                }
                                if (it.tagName()=="ITEXT")
                                {
                                        tmp2 = it.attribute("CH");
                                        tmp2.replace(QRegExp("\r"), QChar(5));
                                        tmp2.replace(QRegExp("\n"), QChar(5));
                                        tmp2.replace(QRegExp("\t"), QChar(4));
                                        tmf = it.attribute("CFONT", doc->Dfont);
                                        if (tmf == "")
                                                tmf = doc->Dfont;
                                        tmp3 = "\t" + DoFonts[tmf] + "\t";
                                        tmp3 += it.attribute("CSIZE") + "\t";
                                        tmp3 += it.attribute("CCOLOR") + "\t";
                                        tmp3 += it.attribute("CEXTRA") + "\t";
                                        tmp3 += it.attribute("CSHADE") + "\t";
                                        tmp3 += it.attribute("CSTYLE") + "\t";
                                        if (VorLFound)
                                                tmp3 += DoVorl[it.attribute("CAB","0").toUInt()] + "\t";
                                        else
                                        {
                                                if (it.attribute("CAB","0").toUInt() < 5)
                                                        tmp3 += it.attribute("CAB","0")+"\t";
                                                else
                                                        tmp3 += "0\t";
                                        }
                                        tmp3 += it.attribute("CSTROKE","None") + "\t";
                                        tmp3 += it.attribute("CSHADE2","100") + "\t";
                                        tmp3 += it.attribute("CSCALE","100") + "\n";
                                        for (uint cxx=0; cxx<tmp2.length(); ++cxx)
                                                tmp += tmp2.at(cxx)+tmp3;
                                }
                                IT=IT.nextSibling();
                        }
                        OB.Ptext = tmp;
                        if ((OB.PType == 5) && (OB.Height != 0))
                        {
                                OB.Rot += atan2(OB.Height,OB.Width)*(180.0/3.1415927);
                                OB.Width = sqrt(pow(OB.Width,2)+pow(OB.Height,2));
                                OB.Height = 0;
                                OB.Clip.setPoints(4, -1,-1, static_cast<int>(OB.Width+1),-1, static_cast<int>(OB.Width+1),
                                                                        static_cast<int>(OB.Height+1), -1, static_cast<int>(OB.Height+1));
                        }
                        OB.LayerNr = -1;
                        doc->ActPage->PasteItem(&OB, true, true);
                        PageItem* Neu = doc->ActPage->Items.at(doc->ActPage->Items.count()-1);
                        if (Neu->isTableItem)
                        {
                                TableItems.append(Neu);
                                TableID.insert(QStoInt(pg.attribute("OwnLINK","0")), Neu->ItemNr);
                        }
                }
                DOC=DOC.nextSibling();
        }
        if (TableItems.count() != 0)
        {
                for (uint ttc = 0; ttc < TableItems.count(); ++ttc)
                {
                        PageItem* ta = TableItems.at(ttc);
                        if (ta->TopLinkID != -1)
                                ta->TopLink = doc->ActPage->Items.at(TableID[ta->TopLinkID]);
                        else
                                ta->TopLink = 0;
                        if (ta->LeftLinkID != -1)
                                ta->LeftLink = doc->ActPage->Items.at(TableID[ta->LeftLinkID]);
                        else
                                ta->LeftLink = 0;
                        if (ta->RightLinkID != -1)
                                ta->RightLink = doc->ActPage->Items.at(TableID[ta->RightLinkID]);
                        else
                                ta->RightLink = 0;
                        if (ta->BottomLinkID != -1)
                                ta->BottomLink = doc->ActPage->Items.at(TableID[ta->BottomLinkID]);
                        else
                                ta->BottomLink = 0;
                }
        }
        doc->GroupCounter = GrMax + 1;
        QDir::setCurrent(CurDirP);
        return true;
}

QString ScriXmlDoc::WriteElem(QPtrList<PageItem> *Selitems, ScribusDoc *doc)
{
        int tsh, tsh2, tst, tst2, tsb, tsb2, tshs, tshs2, tsc, tsc2;
        QString text, tf, tf2, tc, tc2, tcs, tcs2, tmp, tmpy;
        double te, te2, xf, yf, ts, ts2;
        PageItem *item;
        QDomDocument docu("scribus");
        QString st="<SCRIBUSELEMUTF8></SCRIBUSELEMUTF8>";
        docu.setContent(st);
        QDomElement elem=docu.documentElement();
        item = Selitems->at(0);
        QValueList<uint> ELL;
        for (uint cor=0; cor<Selitems->count(); ++cor)
                ELL.append(Selitems->at(cor)->ItemNr);
        qHeapSort(ELL);
        if (doc->ActPage->GroupSel)
        {
                elem.setAttribute("XP", doc->ActPage->GroupX);
                elem.setAttribute("YP", doc->ActPage->GroupY);
                elem.setAttribute("W", doc->ActPage->GroupW);
                elem.setAttribute("H", doc->ActPage->GroupH);
        }
        else
        {
                if (item->Rot == 0)
                {
                        elem.setAttribute("XP", item->Xpos);
                        elem.setAttribute("YP", item->Ypos);
                        elem.setAttribute("W", item->Width);
                        elem.setAttribute("H", item->Height);
                }
                else
                {
                        QPainter p;
                        p.begin(doc->ActPage);
                        p.translate(static_cast<int>(item->Xpos), static_cast<int>(item->Ypos));
                        p.rotate(item->Rot);
                        QRect apr = QRegion(p.xForm(QRect(0, 0, static_cast<int>(item->Width),
                                                                                         static_cast<int>(QMAX(item->Height, 1))))).boundingRect();
                        p.end();
                        elem.setAttribute("XP", apr.x());
                        elem.setAttribute("YP", apr.y());
                        elem.setAttribute("W", apr.width());
                        elem.setAttribute("H", apr.height());
                }
        }
        elem.setAttribute("COUNT", Selitems->count());
        elem.setAttribute("Version", "1.2cvs");
        for (uint co=0; co<Selitems->count(); ++co)
        {
                QString CurDirP = QDir::currentDirPath();
                QDir::setCurrent(QDir::homeDirPath());
                item = doc->ActPage->Items.at(ELL[co]);
                QDomElement ob=docu.createElement("ITEM");
                ob.setAttribute("PTYPE",item->PType);
                ob.setAttribute("XPOS",item->Xpos);
                ob.setAttribute("YPOS",item->Ypos);
                ob.setAttribute("WIDTH",item->Width);
                ob.setAttribute("HEIGHT",item->Height);
                ob.setAttribute("RADRECT",item->RadRect);
                ob.setAttribute("FRTYPE", item->FrameType);
                ob.setAttribute("CLIPEDIT", item->ClipEdited ? 1 : 0);
                ob.setAttribute("PWIDTH",item->Pwidth);
                ob.setAttribute("PCOLOR",item->Pcolor);
                ob.setAttribute("PCOLOR2",item->Pcolor2);
                ob.setAttribute("TXTFILL",item->TxtFill);
                ob.setAttribute("TXTSTROKE",item->TxtStroke);
                ob.setAttribute("TXTSTRSH",item->ShTxtStroke);
                ob.setAttribute("TXTFILLSH",item->ShTxtFill);
                ob.setAttribute("TXTSCALE",item->TxtScale);
                ob.setAttribute("TXTSTYLE",item->TxTStyle);
                ob.setAttribute("COLUMNS", item->Cols);
                ob.setAttribute("COLGAP", item->ColGap);
                ob.setAttribute("NAMEDLST",item->NamedLStyle);
                ob.setAttribute("SHADE",item->Shade);
                ob.setAttribute("SHADE2",item->Shade2);
                if (item->GrType != 0)
                {
                        QPtrVector<VColorStop> cstops = item->fill_gradient.colorStops();
                        for (uint cst = 0; cst < item->fill_gradient.Stops(); ++cst)
                        {
                                QDomElement itcl = docu.createElement("CSTOP");
                                itcl.setAttribute("RAMP", cstops.at(cst)->rampPoint);
                                itcl.setAttribute("NAME", cstops.at(cst)->name);
                                itcl.setAttribute("SHADE", cstops.at(cst)->shade);
                                itcl.setAttribute("TRANS", cstops.at(cst)->opacity);
                                ob.appendChild(itcl);
                        }
                        ob.setAttribute("GRSTARTX", item->GrStartX);
                        ob.setAttribute("GRSTARTY", item->GrStartY);
                        ob.setAttribute("GRENDX", item->GrEndX);
                        ob.setAttribute("GRENDY", item->GrEndY);
                }
                ob.setAttribute("GRTYP",item->GrType);
                ob.setAttribute("ROT",item->Rot);
                ob.setAttribute("PLINEART",item->PLineArt);
                ob.setAttribute("PLINEEND", item->PLineEnd);
                ob.setAttribute("PLINEJOIN", item->PLineJoin);
                ob.setAttribute("LINESP",item->LineSp);
                ob.setAttribute("EXTRAV",item->ExtraV);
                ob.setAttribute("LOCALSCX",item->LocalScX);
                ob.setAttribute("LOCALSCY",item->LocalScY);
                ob.setAttribute("LOCALX",item->LocalX);
                ob.setAttribute("LOCALY",item->LocalY);
                ob.setAttribute("PICART", item->PicArt ? 1 : 0);
                ob.setAttribute("PTLSHOW", item->PoShow ? 1 : 0);
                ob.setAttribute("BASEOF", item->BaseOffs);
                ob.setAttribute("FLIPPEDH",item->flippedH);
                ob.setAttribute("FLIPPEDV",item->flippedV);
                ob.setAttribute("BBOXX",item->BBoxX);
                ob.setAttribute("BBOXH",item->BBoxH);
                ob.setAttribute("SCALETYPE", item->ScaleType ? 1 : 0);
                ob.setAttribute("RATIO", item->AspectRatio ? 1 : 0);
                ob.setAttribute("PRINTABLE", item->isPrintable ? 1 : 0);
                if(item->isAnnotation)
                {
                        ob.setAttribute("ANNOTATION",1);
                        ob.setAttribute("ANTYPE", item->AnType);
                        ob.setAttribute("ANACTION", item->AnAction);
                        ob.setAttribute("ANEACT", item->An_E_act);
                        ob.setAttribute("ANXACT", item->An_X_act);
                        ob.setAttribute("ANDACT", item->An_D_act);
                        ob.setAttribute("ANFOACT", item->An_Fo_act);
                        ob.setAttribute("ANBLACT", item->An_Bl_act);
                        ob.setAttribute("ANKACT", item->An_K_act);
                        ob.setAttribute("ANFACT", item->An_F_act);
                        ob.setAttribute("ANVACT", item->An_V_act);
                        ob.setAttribute("ANCACT", item->An_C_act);
                        if (item->AnActType == 8)
                                ob.setAttribute("ANEXTERN", item->An_Extern);
                        else
                                ob.setAttribute("ANEXTERN", Path2Relative(item->An_Extern));
                        ob.setAttribute("ANZIEL", item->AnZiel);
                        ob.setAttribute("ANACTYP", item->AnActType);
                        ob.setAttribute("ANTOOLTIP", item->AnToolTip);
                        ob.setAttribute("ANBWID", item->AnBwid);
                        ob.setAttribute("ANBSTY", item->AnBsty);
                        ob.setAttribute("ANFEED", item->AnFeed);
                        ob.setAttribute("ANFLAG", item->AnFlag);
                        ob.setAttribute("ANFONT", item->AnFont);
                        ob.setAttribute("ANFORMAT", item->AnFormat);
                        ob.setAttribute("ANROLL", item->AnRollOver);
                        ob.setAttribute("ANDOWN", item->AnDown);
                        ob.setAttribute("ANVIS", item->AnVis);
                        ob.setAttribute("ANMC", item->AnMaxChar);
                        ob.setAttribute("ANCHK", item->AnIsChk);
                        ob.setAttribute("ANAA", item->AnAAact);
                        ob.setAttribute("ANCHKS", item->AnChkStil);
                        ob.setAttribute("ANBCOL", item->AnBColor);
                        ob.setAttribute("ANHTML", item->AnHTML);
                        ob.setAttribute("ANICON", item->AnUseIcons);
                        ob.setAttribute("ANPLACE", item->AnIPlace);
                        ob.setAttribute("ANSCALE", item->AnScaleW);
                }
                else
                        ob.setAttribute("ANNOTATION",0);
                ob.setAttribute("ANNAME", !item->AutoName ? item->AnName : QString(""));
                ob.setAttribute("TEXTFLOW", item->Textflow ? 1 : 0);
                ob.setAttribute("TEXTFLOW2", item->Textflow2 ? 1 : 0);
                ob.setAttribute("AUTOTEXT", item->isAutoText ? 1 : 0);
                ob.setAttribute("EXTRA",item->Extra);
                ob.setAttribute("TEXTRA",item->TExtra);
                ob.setAttribute("BEXTRA",item->BExtra);
                ob.setAttribute("REXTRA",item->RExtra);
                ob.setAttribute("ALIGN",item->Ausrich);
                ob.setAttribute("IFONT",item->IFont);
                ob.setAttribute("ISIZE",item->ISize / 10.0);
                if (item->Pfile != "")
                        ob.setAttribute("PFILE",Path2Relative(item->Pfile));
                else
                        ob.setAttribute("PFILE","");
                if (item->Pfile2 != "")
                        ob.setAttribute("PFILE2",Path2Relative(item->Pfile2));
                else
                        ob.setAttribute("PFILE2","");
                if (item->Pfile3 != "")
                        ob.setAttribute("PFILE3",Path2Relative(item->Pfile3));
                else
                        ob.setAttribute("PFILE3","");
                QDir::setCurrent(CurDirP);
                ob.setAttribute("PRFILE",item->IProfile);
                ob.setAttribute("EPROF", item->EmProfile);
                ob.setAttribute("IRENDER",item->IRender);
                ob.setAttribute("EMBEDDED", item->UseEmbedded ? 1 : 0);
                ob.setAttribute("LOCK", item->Locked ? 1 : 0);
                ob.setAttribute("LOCKR", item->LockRes ? 1 : 0);
                ob.setAttribute("REVERS", item->Reverse ? 1 : 0);
                ob.setAttribute("INVERS", item->InvPict ? 1 : 0);
                ob.setAttribute("TransValue", item->Transparency);
                ob.setAttribute("TransValueS", item->TranspStroke);
                ob.setAttribute("isTableItem", static_cast<int>(item->isTableItem));
                ob.setAttribute("TopLine", static_cast<int>(item->TopLine));
                ob.setAttribute("LeftLine", static_cast<int>(item->LeftLine));
                ob.setAttribute("RightLine", static_cast<int>(item->RightLine));
                ob.setAttribute("BottomLine", static_cast<int>(item->BottomLine));
                if (item->isTableItem)
                {
                        if (item->TopLink != 0)
                                ob.setAttribute("TopLINK", item->TopLink->ItemNr);
                        else
                                ob.setAttribute("TopLINK", -1);
                        if (item->LeftLink != 0)
                                ob.setAttribute("LeftLINK", item->LeftLink->ItemNr);
                        else
                                ob.setAttribute("LeftLINK", -1);
                        if (item->RightLink != 0)
                                ob.setAttribute("RightLINK", item->RightLink->ItemNr);
                        else
                                ob.setAttribute("RightLINK", -1);
                        if (item->BottomLink != 0)
                                ob.setAttribute("BottomLINK", item->BottomLink->ItemNr);
                        else
                                ob.setAttribute("BottomLINK", -1);
                        ob.setAttribute("OwnLINK", item->ItemNr);
                }
                for(uint k=0;k<item->Ptext.count();++k)
                {
                        QDomElement it=docu.createElement("ITEXT");
                        ts = item->Ptext.at(k)->csize / 10.0;
                        tf = item->Ptext.at(k)->cfont;
                        tc = item->Ptext.at(k)->ccolor;
                        te = item->Ptext.at(k)->cextra;
                        tsh = item->Ptext.at(k)->cshade;
                        tst = item->Ptext.at(k)->cstyle;
                        tsb = item->Ptext.at(k)->cab;
                        tcs = item->Ptext.at(k)->cstroke;
                        tshs = item->Ptext.at(k)->cshade2;
                        tsc = item->Ptext.at(k)->cscale;
                        if (item->Ptext.at(k)->ch == QChar(13))
                                text = QChar(5);
                        else if (item->Ptext.at(k)->ch == QChar(9))
                                text = QChar(4);
                        else
                                text = item->Ptext.at(k)->ch;
                        k++;
                        if (k == item->Ptext.count())
                        {
                                it.setAttribute("CH",text);
                                it.setAttribute("CSIZE",ts);
                                it.setAttribute("CFONT",tf);
                                it.setAttribute("CCOLOR",tc);
                                it.setAttribute("CEXTRA",te);
                                it.setAttribute("CSHADE",tsh);
                                it.setAttribute("CSTYLE",tst);
                                it.setAttribute("CAB",tsb);
                                it.setAttribute("CSTROKE",tcs);
                                it.setAttribute("CSHADE2",tshs);
                                it.setAttribute("CSCALE",tsc);
                                ob.appendChild(it);
                                break;
                        }
                        ts2 = item->Ptext.at(k)->csize / 10.0;
                        tf2 = item->Ptext.at(k)->cfont;
                        tc2 = item->Ptext.at(k)->ccolor;
                        te2 = item->Ptext.at(k)->cextra;
                        tsh2 = item->Ptext.at(k)->cshade;
                        tst2 = item->Ptext.at(k)->cstyle;
                        tsb2 = item->Ptext.at(k)->cab;
                        tcs2 = item->Ptext.at(k)->cstroke;
                        tshs2 = item->Ptext.at(k)->cshade2;
                        tsc2 = item->Ptext.at(k)->cscale;
                        while ((ts2 == ts)
                                                        && (tsb2 == tsb)
                                                        && (tf2 == tf)
                                                        && (tc2 == tc)
                                                        && (te2 == te)
                                                        && (tsh2 == tsh)
                                                        && (tshs2 == tshs)
                                                        && (tsc2 == tsc)
                                                        && (tcs2 == tcs)
                                                        && (tst2 == tst))
                        {
                                if (item->Ptext.at(k)->ch == QChar(13))
                                        text += QChar(5);