Subversion Repositories Scribus

Rev

Rev 18491 | Rev 18752 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
13746 jghali 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
7
#include "scribus150format.h"
8
#include "scribus150formatimpl.h"
9
 
14170 jghali 10
#include <ctime>
13746 jghali 11
#include <memory>
12
 
13
#include "../../formatidlist.h"
14
#include "commonstrings.h"
15
#include "ui/missing.h"
16
#include "prefsmanager.h"
16162 fschmid 17
#include "resourcecollection.h"
13746 jghali 18
#include "scconfig.h"
19
#include "scpattern.h"
20
#include "scribusdoc.h"
21
#include "scribusview.h"
22
#include "hyphenator.h"
17826 craig 23
#include "notesstyles.h"
17863 jghali 24
#include "pageitem_arc.h"
13746 jghali 25
#include "pageitem_latexframe.h"
17863 jghali 26
#include "pageitem_noteframe.h"
13839 fschmid 27
#ifdef HAVE_OSG
28
        #include "pageitem_osgframe.h"
29
#endif
16191 fschmid 30
#include "pageitem_regularpolygon.h"
16311 fschmid 31
#include "pageitem_spiral.h"
16859 craig 32
#include "pageitem_table.h"
13746 jghali 33
 
34
#include "units.h"
35
#include "util.h"
36
#include "util_math.h"
37
#include "util_color.h"
38
#include "scgzfile.h"
39
#include <QCursor>
40
#include <QFileInfo>
41
#include <QList>
42
#include <QDataStream>
43
 
44
#include "scxmlstreamwriter.h"
45
 
16162 fschmid 46
QString Scribus150Format::saveElements(double xp, double yp, double wp, double hp, Selection* selection, QByteArray &prevData)
47
{
48
        QString fileDir = QDir::homePath();
49
        QString documentStr;
50
        documentStr.reserve(524288);
51
        ScXmlStreamWriter writer(&documentStr);
52
        writer.setAutoFormatting(true);
17003 fschmid 53
//      writer.writeStartDocument();
16162 fschmid 54
        writer.writeStartElement("SCRIBUSELEMUTF8");
55
        writer.writeAttribute("XP", xp);
56
        writer.writeAttribute("YP", yp);
57
        writer.writeAttribute("W", wp);
58
        writer.writeAttribute("H", hp);
59
        writer.writeAttribute("COUNT",   selection->count());
60
        writer.writeAttribute("Version", QString(VERSION));
61
        writer.writeAttribute("previewData", QString(prevData));
62
        writeColors(writer, true);
63
        writeGradients(writer, true);
64
        ResourceCollection lists;
65
        QList<PageItem*> emG;
17147 fschmid 66
        QList<PageItem*> emF;
67
        emG.clear();
68
        emF.clear();
16162 fschmid 69
        for (int cor = 0; cor < selection->count(); ++cor)
70
        {
17147 fschmid 71
                PageItem *currItem = selection->itemAt(cor);
72
                currItem->getNamedResources(lists);
73
                emG.append(currItem);
74
                if ((currItem->asTextFrame()) || (currItem->asPathText()))
75
                {
17826 craig 76
                        //for notes frames text should not be saved
77
                        if (currItem->isNoteFrame())
78
                                continue;
17147 fschmid 79
                        for (int e = currItem->firstInFrame(); e <= currItem->lastInFrame(); ++e)
80
                        {
81
                                uint chr = currItem->itemText.text(e).unicode();
82
                                if (chr == 25)
83
                                {
18524 avox 84
                    if ((currItem->itemText.hasObject(e)) && (!emF.contains(currItem->itemText.object(e))))
85
                        emF.append(currItem->itemText.object(e));
17147 fschmid 86
                                }
87
                        }
88
                }
16162 fschmid 89
        }
90
        QList<QString>::Iterator it;
91
        QList<QString> names = lists.styleNames();
16396 fschmid 92
        QList<int> styleList = m_Doc->getSortedStyleList();
93
        for (int a = 0; a < styleList.count(); ++a)
16162 fschmid 94
        {
16396 fschmid 95
                if (names.contains(m_Doc->paragraphStyles()[styleList[a]].name()))
96
                        putPStyle(writer, m_Doc->paragraphStyles()[styleList[a]], "STYLE");
16162 fschmid 97
        }
16396 fschmid 98
//      for (it = names.begin(); it != names.end(); ++it)
99
//      {
100
//              putPStyle(writer, m_Doc->paragraphStyles().get(*it), "STYLE");
101
//      }
16162 fschmid 102
        names = lists.charStyleNames();
16396 fschmid 103
        styleList = m_Doc->getSortedCharStyleList();
104
        for (int a = 0; a < styleList.count(); ++a)
16162 fschmid 105
        {
16396 fschmid 106
                if (names.contains(m_Doc->charStyles()[styleList[a]].name()))
107
                {
108
                        writer.writeStartElement("CHARSTYLE");
109
                        putNamedCStyle(writer, m_Doc->charStyles()[styleList[a]]);
110
                        writer.writeEndElement();
111
                }
16162 fschmid 112
        }
16396 fschmid 113
//      for (it = names.begin(); it != names.end(); ++it)
114
//      {
115
//              writer.writeStartElement("CHARSTYLE");
116
//              putNamedCStyle(writer, m_Doc->charStyles().get(*it));
117
//              writer.writeEndElement();
118
//      }
16162 fschmid 119
/*      names = lists.lineStyleNames();
120
        for (it = names.begin(); it != names.end(); ++it)
121
        {
122
                writeLinestyles(writer, true, *it);
123
        } */
124
        writeLinestyles(writer);
125
        writePatterns(writer, fileDir, true, selection);
17147 fschmid 126
        if (!emF.isEmpty())
127
                WriteObjects(m_Doc, writer, fileDir, 0, 0, ItemSelectionFrame, &emF);
16162 fschmid 128
        WriteObjects(m_Doc, writer, fileDir, 0, 0, ItemSelectionElements, &emG);
129
        writer.writeEndElement();
17003 fschmid 130
//      writer.writeEndDocument();
16163 fschmid 131
        documentStr.squeeze();
17003 fschmid 132
        return documentStr.trimmed();
16162 fschmid 133
}
134
 
16016 fschmid 135
bool Scribus150Format::savePalette(const QString & fileName)
136
{
137
        QString fileDir = QFileInfo(fileName).absolutePath();
138
        std::auto_ptr<QIODevice> outputFile;
139
        outputFile.reset( new QFile(fileName) );
140
        if (!outputFile->open(QIODevice::WriteOnly))
141
                return false;
142
        ScXmlStreamWriter docu;
143
        docu.setAutoFormatting(true);
144
        docu.setDevice(outputFile.get());
145
        docu.writeStartDocument();
146
        docu.writeStartElement("SCRIBUSCOLORS");
147
        writeColors(docu);
148
        writeGradients(docu);
149
        writePatterns(docu, fileDir);
150
        docu.writeEndElement();
151
        docu.writeEndDocument();
152
        bool  writeSucceed = false;
153
        const QFile* qFile = dynamic_cast<QFile*>(outputFile.get());
154
        writeSucceed = (qFile->error() == QFile::NoError);
155
        outputFile->close();
156
        return writeSucceed;
157
}
158
 
13746 jghali 159
bool Scribus150Format::saveFile(const QString & fileName, const FileFormat & /* fmt */)
160
{
161
        QString text, tf, tf2, tc, tc2;
162
        m_lastSavedFile = "";
163
 
18058 jghali 164
        // #11279: Image links get corrupted when symlinks involved
165
        // We have to proceed in tow steps here as QFileInfo::canonicalPath()
166
        // may no return correct result if fileName does not exists
167
        QString fileDir = QFileInfo(fileName).absolutePath();
168
        QString canonicalPath = QFileInfo(fileDir).canonicalFilePath();
169
        if (!canonicalPath.isEmpty())
170
                fileDir = canonicalPath;
171
 
13746 jghali 172
        // Create a random temporary file name
173
        srand(time(NULL)); // initialize random sequence each time
174
        long     randt = 0, randn = 1 + (int) (((double) rand() / ((double) RAND_MAX + 1)) * 10000);
175
        QString  tmpFileName  = QString("%1.%2").arg(fileName).arg(randn);
176
        while (QFile::exists(tmpFileName) && (randt < 100))
177
        {
178
                randn = 1 + (int) (((double) rand() / ((double) RAND_MAX + 1)) * 10000);
179
                tmpFileName = QString("%1.%2").arg(fileName).arg(randn);
180
                ++randt;
181
        }
182
        if (QFile::exists(tmpFileName))
183
                return false;
184
 
185
        std::auto_ptr<QIODevice> outputFile;
186
        if (fileName.toLower().right(2) == "gz")
187
                outputFile.reset( new ScGzFile(tmpFileName) );
188
        else
189
                outputFile.reset( new QFile(tmpFileName) );
190
 
191
        if (!outputFile->open(QIODevice::WriteOnly))
192
                return false;
193
 
194
        ScXmlStreamWriter docu;
195
        docu.setAutoFormatting(true);
196
        docu.setDevice(outputFile.get());
197
        docu.writeStartDocument();
198
        docu.writeStartElement("SCRIBUSUTF8NEW");
199
        docu.writeAttribute("Version", QString(VERSION));
200
 
201
        docu.writeStartElement("DOCUMENT");
202
        docu.writeAttribute("ANZPAGES"    , m_Doc->DocPages.count());
14991 cbradney 203
        docu.writeAttribute("PAGEWIDTH"   , m_Doc->pageWidth());
204
        docu.writeAttribute("PAGEHEIGHT"  , m_Doc->pageHeight());
14994 cbradney 205
        docu.writeAttribute("BORDERLEFT"  , m_Doc->margins()->Left);
206
        docu.writeAttribute("BORDERRIGHT" , m_Doc->margins()->Right);
207
        docu.writeAttribute("BORDERTOP"   , m_Doc->margins()->Top);
208
        docu.writeAttribute("BORDERBOTTOM", m_Doc->margins()->Bottom);
209
        docu.writeAttribute("PRESET"      , m_Doc->marginPreset());
14992 cbradney 210
        docu.writeAttribute("BleedTop"    , m_Doc->bleeds()->Top);
211
        docu.writeAttribute("BleedLeft"   , m_Doc->bleeds()->Left);
212
        docu.writeAttribute("BleedRight"  , m_Doc->bleeds()->Right);
213
        docu.writeAttribute("BleedBottom" , m_Doc->bleeds()->Bottom);
14991 cbradney 214
        docu.writeAttribute("ORIENTATION" , m_Doc->pageOrientation());
215
        docu.writeAttribute("PAGESIZE"    , m_Doc->pageSize());
13746 jghali 216
        docu.writeAttribute("FIRSTNUM"    , m_Doc->FirstPnum);
15407 craig 217
        docu.writeAttribute("BOOK"        , m_Doc->pagePositioning());
13746 jghali 218
        if(m_Doc->usesAutomaticTextFrames())
219
                docu.writeAttribute("AUTOTEXT", 1);
220
        docu.writeAttribute("AUTOSPALTEN" ,m_Doc->PageSp);
221
        docu.writeAttribute("ABSTSPALTEN" ,m_Doc->PageSpa);
222
        docu.writeAttribute("UNITS"       , m_Doc->unitIndex());
14932 cbradney 223
        docu.writeAttribute("DFONT"       ,m_Doc->itemToolPrefs().textFont);
224
        docu.writeAttribute("DSIZE"       ,m_Doc->itemToolPrefs().textSize / 10.0);
225
        docu.writeAttribute("DCOL"        ,m_Doc->itemToolPrefs().textColumns);
226
        docu.writeAttribute("DGAP"        ,m_Doc->itemToolPrefs().textColumnGap);
227
        docu.writeAttribute("TabFill"     ,m_Doc->itemToolPrefs().textTabFillChar);
228
        docu.writeAttribute("TabWidth"    ,m_Doc->itemToolPrefs().textTabWidth);
15037 cbradney 229
        docu.writeAttribute("AUTHOR"      ,m_Doc->documentInfo().author());
230
        docu.writeAttribute("COMMENTS"    ,m_Doc->documentInfo().comments());
231
        docu.writeAttribute("KEYWORDS"    ,m_Doc->documentInfo().keywords());
232
        docu.writeAttribute("PUBLISHER",m_Doc->documentInfo().publisher());
233
        docu.writeAttribute("DOCDATE",m_Doc->documentInfo().date());
234
        docu.writeAttribute("DOCTYPE",m_Doc->documentInfo().type());
235
        docu.writeAttribute("DOCFORMAT",m_Doc->documentInfo().format());
236
        docu.writeAttribute("DOCIDENT",m_Doc->documentInfo().ident());
237
        docu.writeAttribute("DOCSOURCE",m_Doc->documentInfo().source());
238
        docu.writeAttribute("DOCLANGINFO",m_Doc->documentInfo().langInfo());
239
        docu.writeAttribute("DOCRELATION",m_Doc->documentInfo().relation());
240
        docu.writeAttribute("DOCCOVER",m_Doc->documentInfo().cover());
241
        docu.writeAttribute("DOCRIGHTS",m_Doc->documentInfo().rights());
242
        docu.writeAttribute("DOCCONTRIB",m_Doc->documentInfo().contrib());
243
        docu.writeAttribute("TITLE",m_Doc->documentInfo().title());
244
        docu.writeAttribute("SUBJECT",m_Doc->documentInfo().subject());
14932 cbradney 245
        docu.writeAttribute("VHOCH"  , m_Doc->typographicPrefs().valueSuperScript);
246
        docu.writeAttribute("VHOCHSC", m_Doc->typographicPrefs().scalingSuperScript);
247
        docu.writeAttribute("VTIEF"  , m_Doc->typographicPrefs().valueSubScript);
248
        docu.writeAttribute("VTIEFSC", m_Doc->typographicPrefs().scalingSubScript);
249
        docu.writeAttribute("VKAPIT" , m_Doc->typographicPrefs().valueSmallCaps);
250
        docu.writeAttribute("BASEGRID",m_Doc->guidesPrefs().valueBaselineGrid);
251
        docu.writeAttribute("BASEO"  , m_Doc->guidesPrefs().offsetBaselineGrid);
252
        docu.writeAttribute("AUTOL"  , m_Doc->typographicPrefs().autoLineSpacing);
253
        docu.writeAttribute("UnderlinePos"   , m_Doc->typographicPrefs().valueUnderlinePos);
254
        docu.writeAttribute("UnderlineWidth" , m_Doc->typographicPrefs().valueUnderlineWidth);
255
        docu.writeAttribute("StrikeThruPos"  , m_Doc->typographicPrefs().valueStrikeThruPos);
256
        docu.writeAttribute("StrikeThruWidth", m_Doc->typographicPrefs().valueStrikeThruWidth);
13746 jghali 257
        docu.writeAttribute("GROUPC",m_Doc->GroupCounter);
258
        docu.writeAttribute("HCMS" , static_cast<int>(m_Doc->HasCMS));
15001 cbradney 259
        docu.writeAttribute("DPSo" , static_cast<int>(m_Doc->cmsSettings().SoftProofOn));
260
        docu.writeAttribute("DPSFo", static_cast<int>(m_Doc->cmsSettings().SoftProofFullOn));
261
        docu.writeAttribute("DPuse", static_cast<int>(m_Doc->cmsSettings().CMSinUse));
262
        docu.writeAttribute("DPgam", static_cast<int>(m_Doc->cmsSettings().GamutCheck));
263
        docu.writeAttribute("DPbla", static_cast<int>(m_Doc->cmsSettings().BlackPoint));
264
        docu.writeAttribute("DPMo",m_Doc->cmsSettings().DefaultMonitorProfile);
265
        docu.writeAttribute("DPPr",m_Doc->cmsSettings().DefaultPrinterProfile);
266
        docu.writeAttribute("DPIn",m_Doc->cmsSettings().DefaultImageRGBProfile);
267
        docu.writeAttribute("DPInCMYK",m_Doc->cmsSettings().DefaultImageCMYKProfile);
268
        docu.writeAttribute("DPIn2",m_Doc->cmsSettings().DefaultSolidColorRGBProfile);
269
        docu.writeAttribute("DPIn3",m_Doc->cmsSettings().DefaultSolidColorCMYKProfile);
270
        docu.writeAttribute("DISc",m_Doc->cmsSettings().DefaultIntentColors);
271
        docu.writeAttribute("DIIm",m_Doc->cmsSettings().DefaultIntentImages);
13746 jghali 272
        docu.writeAttribute("ALAYER", m_Doc->activeLayer());
14924 cbradney 273
        docu.writeAttribute("LANGUAGE", m_Doc->hyphLanguage());
274
        docu.writeAttribute("MINWORDLEN", m_Doc->hyphMinimumWordLength());
275
        docu.writeAttribute("HYCOUNT", m_Doc->hyphConsecutiveLines());
276
        docu.writeAttribute("AUTOMATIC", static_cast<int>(m_Doc->hyphAutomatic()));
277
        docu.writeAttribute("AUTOCHECK", static_cast<int>(m_Doc->hyphAutoCheck()));
13746 jghali 278
        docu.writeAttribute("GUIDELOCK", static_cast<int>(m_Doc->GuideLock));
279
        docu.writeAttribute("SnapToGuides", static_cast<int>(m_Doc->SnapGuides));
18027 jghali 280
        docu.writeAttribute("SnapToGrid", static_cast<int>(m_Doc->SnapGrid));
14932 cbradney 281
        docu.writeAttribute("MINGRID", m_Doc->guidesPrefs().minorGridSpacing);
282
        docu.writeAttribute("MAJGRID", m_Doc->guidesPrefs().majorGridSpacing);
283
        docu.writeAttribute("SHOWGRID", static_cast<int>(m_Doc->guidesPrefs().gridShown));
284
        docu.writeAttribute("SHOWGUIDES", static_cast<int>(m_Doc->guidesPrefs().guidesShown));
285
        docu.writeAttribute("showcolborders", static_cast<int>(m_Doc->guidesPrefs().colBordersShown));
286
        docu.writeAttribute("SHOWFRAME", static_cast<int>(m_Doc->guidesPrefs().framesShown));
287
        docu.writeAttribute("SHOWLAYERM", static_cast<int>(m_Doc->guidesPrefs().layerMarkersShown));
288
        docu.writeAttribute("SHOWMARGIN", static_cast<int>(m_Doc->guidesPrefs().marginsShown));
289
        docu.writeAttribute("SHOWBASE", static_cast<int>(m_Doc->guidesPrefs().baselineGridShown));
290
        docu.writeAttribute("SHOWPICT", static_cast<int>(m_Doc->guidesPrefs().showPic));
291
        docu.writeAttribute("SHOWControl", static_cast<int>(m_Doc->guidesPrefs().showControls));
292
        docu.writeAttribute("SHOWLINK", static_cast<int>(m_Doc->guidesPrefs().linkShown));
293
        docu.writeAttribute("rulerMode", static_cast<int>(m_Doc->guidesPrefs().rulerMode));
294
        docu.writeAttribute("showrulers", static_cast<int>(m_Doc->guidesPrefs().rulersShown));
295
        docu.writeAttribute("showBleed", static_cast<int>(m_Doc->guidesPrefs().showBleed));
13746 jghali 296
        docu.writeAttribute("rulerXoffset", m_Doc->rulerXoffset);
297
        docu.writeAttribute("rulerYoffset", m_Doc->rulerYoffset);
14932 cbradney 298
        docu.writeAttribute("GuideRad", m_Doc->guidesPrefs().guideRad);
299
        docu.writeAttribute("GRAB",m_Doc->guidesPrefs().grabRadius);
300
        docu.writeAttribute("POLYC", m_Doc->itemToolPrefs().polyCorners);
301
        docu.writeAttribute("POLYF", m_Doc->itemToolPrefs().polyFactor);
302
        docu.writeAttribute("POLYR", m_Doc->itemToolPrefs().polyRotation);
16191 fschmid 303
        docu.writeAttribute("POLYIR", m_Doc->itemToolPrefs().polyInnerRot);
14932 cbradney 304
        docu.writeAttribute("POLYCUR", m_Doc->itemToolPrefs().polyCurvature);
16192 fschmid 305
        docu.writeAttribute("POLYOCUR", m_Doc->itemToolPrefs().polyOuterCurvature);
14932 cbradney 306
        docu.writeAttribute("POLYS", static_cast<int>(m_Doc->itemToolPrefs().polyUseFactor));
16215 fschmid 307
        docu.writeAttribute("arcStartAngle", m_Doc->itemToolPrefs().arcStartAngle);
16311 fschmid 308
        docu.writeAttribute("arcSweepAngle", m_Doc->itemToolPrefs().arcSweepAngle);
309
        docu.writeAttribute("spiralStartAngle", m_Doc->itemToolPrefs().spiralStartAngle);
310
        docu.writeAttribute("spiralEndAngle", m_Doc->itemToolPrefs().spiralEndAngle);
311
        docu.writeAttribute("spiralFactor", m_Doc->itemToolPrefs().spiralFactor);
14925 cbradney 312
        docu.writeAttribute("AutoSave", static_cast<int>(m_Doc->autoSave()));
313
        docu.writeAttribute("AutoSaveTime", m_Doc->autoSaveTime());
14924 cbradney 314
        docu.writeAttribute("ScratchBottom", m_Doc->scratch()->Bottom);
315
        docu.writeAttribute("ScratchLeft", m_Doc->scratch()->Left);
316
        docu.writeAttribute("ScratchRight", m_Doc->scratch()->Right);
317
        docu.writeAttribute("ScratchTop", m_Doc->scratch()->Top);
318
        docu.writeAttribute("GapHorizontal", m_Doc->pageGapHorizontal());
319
        docu.writeAttribute("GapVertical", m_Doc->pageGapVertical());
14932 cbradney 320
        docu.writeAttribute("StartArrow", m_Doc->itemToolPrefs().lineStartArrow);
321
        docu.writeAttribute("EndArrow", m_Doc->itemToolPrefs().lineEndArrow);
322
        docu.writeAttribute("PEN",m_Doc->itemToolPrefs().shapeLineColor);
323
        docu.writeAttribute("BRUSH",m_Doc->itemToolPrefs().shapeFillColor);
324
        docu.writeAttribute("PENLINE",m_Doc->itemToolPrefs().lineColor);
325
        docu.writeAttribute("PENTEXT",m_Doc->itemToolPrefs().textColor);
326
        docu.writeAttribute("StrokeText",m_Doc->itemToolPrefs().textStrokeColor);
327
        docu.writeAttribute("TextBackGround", m_Doc->itemToolPrefs().textFillColor);
328
        docu.writeAttribute("TextLineColor", m_Doc->itemToolPrefs().textLineColor);
329
        docu.writeAttribute("TextBackGroundShade", m_Doc->itemToolPrefs().textFillColorShade);
330
        docu.writeAttribute("TextLineShade", m_Doc->itemToolPrefs().textLineColorShade);
331
        docu.writeAttribute("TextPenShade", m_Doc->itemToolPrefs().textShade);
332
        docu.writeAttribute("TextStrokeShade", m_Doc->itemToolPrefs().textStrokeShade);
333
        docu.writeAttribute("STIL",m_Doc->itemToolPrefs().shapeLineStyle);
334
        docu.writeAttribute("STILLINE",m_Doc->itemToolPrefs().lineStyle);
335
        docu.writeAttribute("WIDTH",m_Doc->itemToolPrefs().shapeLineWidth);
336
        docu.writeAttribute("WIDTHLINE",m_Doc->itemToolPrefs().lineWidth);
337
        docu.writeAttribute("PENSHADE",m_Doc->itemToolPrefs().shapeLineColorShade);
338
        docu.writeAttribute("LINESHADE",m_Doc->itemToolPrefs().lineColorShade);
339
        docu.writeAttribute("BRUSHSHADE",m_Doc->itemToolPrefs().shapeFillColorShade);
340
        docu.writeAttribute("CPICT",m_Doc->itemToolPrefs().imageFillColor);
341
        docu.writeAttribute("PICTSHADE",m_Doc->itemToolPrefs().imageFillColorShade);
17054 fschmid 342
        docu.writeAttribute("CSPICT",m_Doc->itemToolPrefs().imageStrokeColor);
343
        docu.writeAttribute("PICTSSHADE",m_Doc->itemToolPrefs().imageStrokeColorShade);
14932 cbradney 344
        docu.writeAttribute("PICTSCX",m_Doc->itemToolPrefs().imageScaleX);
345
        docu.writeAttribute("PICTSCY",m_Doc->itemToolPrefs().imageScaleY);
346
        docu.writeAttribute("PSCALE", static_cast<int>(m_Doc->itemToolPrefs().imageScaleType));
347
        docu.writeAttribute("PASPECT", static_cast<int>(m_Doc->itemToolPrefs().imageAspectRatio));
348
        docu.writeAttribute("EmbeddedPath", static_cast<int>(m_Doc->itemToolPrefs().imageUseEmbeddedPath));
349
        docu.writeAttribute("HalfRes", m_Doc->itemToolPrefs().imageLowResType);
350
        docu.writeAttribute("dispX", m_Doc->opToolPrefs().dispX);
351
        docu.writeAttribute("dispY", m_Doc->opToolPrefs().dispY);
352
        docu.writeAttribute("constrain", m_Doc->opToolPrefs().constrain);
353
        docu.writeAttribute("MINORC",m_Doc->guidesPrefs().minorGridColor.name());
354
        docu.writeAttribute("MAJORC",m_Doc->guidesPrefs().majorGridColor.name());
355
        docu.writeAttribute("GuideC", m_Doc->guidesPrefs().guideColor.name());
356
        docu.writeAttribute("BaseC", m_Doc->guidesPrefs().baselineGridColor.name());
16990 fschmid 357
        QString renderStack = "";
358
        int renderStackCount = m_Doc->guidesPrefs().renderStackOrder.count();
359
        for (int r = 0; r < renderStackCount; r++)
360
        {
361
                renderStack += QString("%1 ").arg(m_Doc->guidesPrefs().renderStackOrder[r]);
362
        }
363
        docu.writeAttribute("renderStack", renderStack.trimmed());
16992 fschmid 364
        docu.writeAttribute("GridType", m_Doc->guidesPrefs().gridType);
14924 cbradney 365
        docu.writeAttribute("PAGEC",m_Doc->paperColor().name());
14932 cbradney 366
        docu.writeAttribute("MARGC",m_Doc->guidesPrefs().marginColor.name());
14971 cbradney 367
        docu.writeAttribute("RANDF", static_cast<int>(m_Doc->marginColored()));
368
        docu.writeAttribute("currentProfile", m_Doc->curCheckProfile());
15847 fschmid 369
        docu.writeAttribute("calligrapicPenFillColor", m_Doc->itemToolPrefs().calligrapicPenFillColor);
370
        docu.writeAttribute("calligrapicPenLineColor", m_Doc->itemToolPrefs().calligrapicPenLineColor);
371
        docu.writeAttribute("calligrapicPenFillColorShade", m_Doc->itemToolPrefs().calligrapicPenFillColorShade);
372
        docu.writeAttribute("calligrapicPenLineColorShade", m_Doc->itemToolPrefs().calligrapicPenLineColorShade);
373
        docu.writeAttribute("calligrapicPenLineWidth", m_Doc->itemToolPrefs().calligrapicPenLineWidth);
374
        docu.writeAttribute("calligrapicPenAngle", m_Doc->itemToolPrefs().calligrapicPenAngle);
375
        docu.writeAttribute("calligrapicPenWidth", m_Doc->itemToolPrefs().calligrapicPenWidth);
376
        docu.writeAttribute("calligrapicPenStyle", m_Doc->itemToolPrefs().calligrapicPenStyle);
13746 jghali 377
 
378
        writeCheckerProfiles(docu);
379
        writeJavascripts(docu);
380
        writeBookmarks(docu);
381
        writeColors(docu);
14150 fschmid 382
        writeGradients(docu);
13746 jghali 383
        writeHyphenatorLists(docu);
384
        writePStyles(docu);
385
        writeCStyles(docu);
16859 craig 386
        writeTableStyles(docu);
387
        writeCellStyles(docu);
16162 fschmid 388
        writeLinestyles(docu);
13746 jghali 389
        writeLayers(docu);
390
        writePrintOptions(docu);
391
        writePdfOptions(docu);
392
        writeDocItemAttributes(docu);
393
        writeTOC(docu);
17826 craig 394
        writeMarks(docu);
395
        writeNotesStyles(docu);
396
        writeNotesFrames(docu);
397
        writeNotes(docu);
13746 jghali 398
        writePageSets(docu);
399
        writeSections(docu);
400
        writePatterns(docu, fileDir);
401
        writeContent (docu, fileDir);
402
 
403
        docu.writeEndElement();
404
        docu.writeEndDocument();
405
 
406
        bool  writeSucceed = false;
407
        const QFile* qFile = dynamic_cast<QFile*>(outputFile.get());
408
        const ScGzFile* gzFile = dynamic_cast<ScGzFile*>(outputFile.get());
409
        if (qFile)
410
                writeSucceed = (qFile->error() == QFile::NoError);
411
        else if (gzFile)
412
                writeSucceed = !gzFile->errorOccurred();
413
        outputFile->close();
414
 
415
        if (writeSucceed)
416
        {
417
                if (QFile::exists(fileName))
418
                        writeSucceed = QFile::remove(fileName) ? QFile::rename(tmpFileName, fileName) : false;
419
                else
420
                        writeSucceed = QFile::rename(tmpFileName, fileName);
421
                m_lastSavedFile = writeSucceed ? fileName : tmpFileName;
422
        }
423
        else if (QFile::exists(tmpFileName))
424
                QFile::remove(tmpFileName);
425
        if (writeSucceed)
426
                QFile::remove(tmpFileName);
427
        return writeSucceed;
428
}
429
 
430
void Scribus150Format::writeCheckerProfiles(ScXmlStreamWriter & docu)
431
{
432
        CheckerPrefsList::Iterator itcp;
14971 cbradney 433
        CheckerPrefsList::Iterator itcpend=m_Doc->checkerProfiles().end();
434
        for (itcp = m_Doc->checkerProfiles().begin(); itcp != itcpend; ++itcp)
13746 jghali 435
        {
436
                docu.writeEmptyElement("CheckProfile");
437
                docu.writeAttribute("Name",itcp.key());
438
                docu.writeAttribute("ignoreErrors", static_cast<int>(itcp.value().ignoreErrors));
439
                docu.writeAttribute("autoCheck", static_cast<int>(itcp.value().autoCheck));
440
                docu.writeAttribute("checkGlyphs", static_cast<int>(itcp.value().checkGlyphs));
441
                docu.writeAttribute("checkOrphans", static_cast<int>(itcp.value().checkOrphans));
442
                docu.writeAttribute("checkOverflow", static_cast<int>(itcp.value().checkOverflow));
443
                docu.writeAttribute("checkPictures", static_cast<int>(itcp.value().checkPictures));
16411 fschmid 444
                docu.writeAttribute("checkPartFilledImageFrames", static_cast<int>(itcp.value().checkPartFilledImageFrames));
13746 jghali 445
                docu.writeAttribute("checkResolution", static_cast<int>(itcp.value().checkResolution));
446
                docu.writeAttribute("checkTransparency", static_cast<int>(itcp.value().checkTransparency));
447
                docu.writeAttribute("minResolution",itcp.value().minResolution);
448
                docu.writeAttribute("maxResolution",itcp.value().maxResolution);
449
                docu.writeAttribute("checkAnnotations", static_cast<int>(itcp.value().checkAnnotations));
450
                docu.writeAttribute("checkRasterPDF", static_cast<int>(itcp.value().checkRasterPDF));
451
                docu.writeAttribute("checkForGIF", static_cast<int>(itcp.value().checkForGIF));
452
                docu.writeAttribute("ignoreOffLayers", static_cast<int>(itcp.value().ignoreOffLayers));
18410 jghali 453
                docu.writeAttribute("checkNotCMYKOrSpot", static_cast<int>(itcp.value().checkNotCMYKOrSpot));
454
                docu.writeAttribute("checkDeviceColorsAndOutputIntent", static_cast<int>(itcp.value().checkDeviceColorsAndOutputIntent));
455
                docu.writeAttribute("checkFontNotEmbedded", static_cast<int>(itcp.value().checkFontNotEmbedded));
456
                docu.writeAttribute("checkFontIsOpenType", static_cast<int>(itcp.value().checkFontIsOpenType));
18490 craig 457
                docu.writeAttribute("checkAppliedMasterDifferentSide", static_cast<int>(itcp.value().checkAppliedMasterDifferentSide));
18491 craig 458
                docu.writeAttribute("checkEmptyTextFrames", static_cast<int>(itcp.value().checkEmptyTextFrames));
13746 jghali 459
        }
460
}
461
 
462
void Scribus150Format::writeLinestyles(ScXmlStreamWriter& docu)
463
{
17400 fschmid 464
        QHash<QString,multiLine>::Iterator itMU;
13746 jghali 465
        for (itMU = m_Doc->MLineStyles.begin(); itMU != m_Doc->MLineStyles.end(); ++itMU)
466
        {
467
                docu.writeStartElement("MultiLine");
468
                docu.writeAttribute("Name",itMU.key());
469
                multiLine ml = itMU.value();
470
                multiLine::iterator itMU2;
471
                for (itMU2 = ml.begin(); itMU2 != ml.end(); ++itMU2)
472
                {
473
                        docu.writeEmptyElement("SubLine");
474
                        docu.writeAttribute("Color", (*itMU2).Color);
475
                        docu.writeAttribute("Shade", (*itMU2).Shade);
476
                        docu.writeAttribute("Dash", (*itMU2).Dash);
477
                        docu.writeAttribute("LineEnd", (*itMU2).LineEnd);
478
                        docu.writeAttribute("LineJoin", (*itMU2).LineJoin);
479
                        docu.writeAttribute("Width", (*itMU2).Width);
480
                        docu.writeAttribute("Shortcut", ml.shortcut);
481
                }
482
                docu.writeEndElement();
483
        }
484
        QList<ArrowDesc>::Iterator itar;
14969 cbradney 485
        for (itar = m_Doc->arrowStyles().begin(); itar != m_Doc->arrowStyles().end(); ++itar)
13746 jghali 486
        {
487
                if ((*itar).userArrow)
488
                {
489
                        docu.writeEmptyElement("Arrows");
490
                        docu.writeAttribute("NumPoints", (*itar).points.size());
491
                        QString arp = "";
492
                        QString tmp, tmpy;
493
                        double xa, ya;
18114 jghali 494
                        for (int nxx = 0; nxx < (*itar).points.size(); ++nxx)
13746 jghali 495
                        {
496
                                (*itar).points.point(nxx, &xa, &ya);
497
                                arp += tmp.setNum(xa) + " " + tmpy.setNum(ya) + " ";
498
                        }
499
                        docu.writeAttribute("Points", arp);
500
                        docu.writeAttribute("Name", (*itar).name);
501
                }
502
        }
503
}
504
 
505
 
506
void Scribus150Format::writeJavascripts(ScXmlStreamWriter & docu)
507
{
508
        QMap<QString,QString>::Iterator itja;
509
        for (itja = m_Doc->JavaScripts.begin(); itja != m_Doc->JavaScripts.end(); ++itja)
510
        {
511
                docu.writeEmptyElement("JAVA");
512
                docu.writeAttribute("NAME",itja.key());
513
                docu.writeAttribute("SCRIPT",itja.value());
514
        }
515
 
516
}
517
 
518
 
519
void Scribus150Format::writeBookmarks(ScXmlStreamWriter & docu)
520
{      
521
        QList<ScribusDoc::BookMa>::Iterator itbm;
522
        for (itbm = m_Doc->BookMarks.begin(); itbm != m_Doc->BookMarks.end(); ++itbm)
523
        {
524
                docu.writeEmptyElement("Bookmark");
525
                docu.writeAttribute("Title",(*itbm).Title);
526
                docu.writeAttribute("Text",(*itbm).Text);
527
                docu.writeAttribute("Aktion",(*itbm).Aktion);
528
                docu.writeAttribute("ItemNr", (*itbm).ItemNr);
16943 fschmid 529
                docu.writeAttribute("Element", qHash((*itbm).PageObject));
13746 jghali 530
                docu.writeAttribute("First", (*itbm).First);
531
                docu.writeAttribute("Last", (*itbm).Last);
532
                docu.writeAttribute("Prev", (*itbm).Prev);
533
                docu.writeAttribute("Next", (*itbm).Next);
534
                docu.writeAttribute("Parent", (*itbm).Parent);
535
        }
536
}
537
 
538
 
16162 fschmid 539
void Scribus150Format::writeColors(ScXmlStreamWriter & docu, bool part)
13746 jghali 540
{      
541
        ColorList::Iterator itc;
16162 fschmid 542
        ColorList usedColors;
543
        if (part)
544
                m_Doc->getUsedColors(usedColors);
545
        else
546
                usedColors = m_Doc->PageColors;
547
        for (itc = usedColors.begin(); itc != usedColors.end(); ++itc)
13746 jghali 548
        {
549
                docu.writeEmptyElement("COLOR");
550
                docu.writeAttribute("NAME",itc.key());
551
                if (m_Doc->PageColors[itc.key()].getColorModel() == colorModelRGB)
552
                        docu.writeAttribute("RGB",m_Doc->PageColors[itc.key()].nameRGB());
553
                else
554
                        docu.writeAttribute("CMYK",m_Doc->PageColors[itc.key()].nameCMYK());
16252 fschmid 555
                if (m_Doc->PageColors[itc.key()].isSpotColor())
556
                        docu.writeAttribute("Spot",static_cast<int>(m_Doc->PageColors[itc.key()].isSpotColor()));
557
                if (m_Doc->PageColors[itc.key()].isRegistrationColor())
558
                        docu.writeAttribute("Register",static_cast<int>(m_Doc->PageColors[itc.key()].isRegistrationColor()));
13746 jghali 559
        }
560
 
561
}
562
 
16162 fschmid 563
void Scribus150Format::writeGradients(ScXmlStreamWriter & docu, bool part)
14150 fschmid 564
{
17400 fschmid 565
        QHash<QString, VGradient>::Iterator itGrad;
566
        QHash<QString, VGradient> gradMap;
16162 fschmid 567
        if (part)
568
                m_Doc->getUsedGradients(gradMap);
569
        else
570
                gradMap = m_Doc->docGradients;
571
        for (itGrad = gradMap.begin(); itGrad != gradMap.end(); ++itGrad)
14150 fschmid 572
        {
573
                docu.writeStartElement("Gradient");
574
                docu.writeAttribute("Name",itGrad.key());
575
                VGradient gra = itGrad.value();
576
                QList<VColorStop*> cstops = gra.colorStops();
577
                for (uint cst = 0; cst < gra.Stops(); ++cst)
578
                {
579
                        docu.writeEmptyElement("CSTOP");
580
                        docu.writeAttribute("RAMP", cstops.at(cst)->rampPoint);
581
                        docu.writeAttribute("NAME", cstops.at(cst)->name);
582
                        docu.writeAttribute("SHADE", cstops.at(cst)->shade);
583
                        docu.writeAttribute("TRANS", cstops.at(cst)->opacity);
584
                }
585
                docu.writeEndElement();
586
        }
587
}
588
 
13746 jghali 589
void Scribus150Format::writeHyphenatorLists(ScXmlStreamWriter &docu)
590
{
591
        docu.writeStartElement("HYPHEN");
592
        for (QHash<QString, QString>::Iterator hyit = m_Doc->docHyphenator->specialWords.begin(); hyit != m_Doc->docHyphenator->specialWords.end(); ++hyit)
593
        {
594
                docu.writeEmptyElement("EXCEPTION");
595
                docu.writeAttribute("WORD", hyit.key());
596
                docu.writeAttribute("HYPHENATED", hyit.value());
597
        }
598
        for (QSet<QString>::Iterator hyit2 = m_Doc->docHyphenator->ignoredWords.begin(); hyit2 != m_Doc->docHyphenator->ignoredWords.end(); ++hyit2)
599
        {
600
                docu.writeEmptyElement("IGNORE");
601
                docu.writeAttribute("WORD", (*hyit2));
602
        }
603
        docu.writeEndElement();
604
}
605
 
16859 craig 606
void Scribus150Format::writePStyles(ScXmlStreamWriter & docu)
13746 jghali 607
{
16396 fschmid 608
        QList<int> styleList = m_Doc->getSortedStyleList();
609
        for (int a = 0; a < styleList.count(); ++a)
13746 jghali 610
        {
16396 fschmid 611
                putPStyle(docu, m_Doc->paragraphStyles()[styleList[a]], "STYLE");
13746 jghali 612
        }
16682 jghali 613
//      for (int ff = 0; ff < m_Doc->paragraphStyles().count(); ++ff)
614
//              putPStyle(docu, m_Doc->paragraphStyles()[ff], "STYLE");
13746 jghali 615
}
616
 
617
void Scribus150Format::putPStyle(ScXmlStreamWriter & docu, const ParagraphStyle & style, const QString &nodeName)
618
{
619
        bool styleHasTabs = (!style.isInhTabValues() && (style.tabValues().count() > 0));
620
        if (styleHasTabs)
621
                docu.writeStartElement(nodeName);
622
        else
623
                docu.writeEmptyElement(nodeName);
624
        if ( ! style.name().isEmpty() )
625
                docu.writeAttribute("NAME", style.name());
626
        if ( ! style.parent().isEmpty())
627
                docu.writeAttribute("PARENT", style.parent());
628
        if ( style.isDefaultStyle())
629
                docu.writeAttribute("DefaultStyle", style.isDefaultStyle());
630
 
631
        if ( ! style.isInhAlignment())
632
                docu.writeAttribute("ALIGN", style.alignment());
633
        if ( ! style.isInhLineSpacingMode())
634
                docu.writeAttribute("LINESPMode", style.lineSpacingMode());
635
        if ( ! style.isInhLineSpacing())
636
                docu.writeAttribute("LINESP", style.lineSpacing());
637
        if ( ! style.isInhLeftMargin())
638
                docu.writeAttribute("INDENT", style.leftMargin());
639
        if ( ! style.isInhRightMargin())
640
                docu.writeAttribute("RMARGIN", style.rightMargin());
641
        if ( ! style.isInhFirstIndent())
642
                docu.writeAttribute("FIRST", style.firstIndent());
643
        if ( ! style.isInhGapBefore())
644
                docu.writeAttribute("VOR", style.gapBefore());
645
        if ( ! style.isInhGapAfter())
646
                docu.writeAttribute("NACH", style.gapAfter());
18047 craig 647
        if ( ! style.isInhPeCharStyleName())
648
                docu.writeAttribute("ParagraphEffectCharStyle", style.peCharStyleName());
649
        if ( ! style.isInhParEffectOffset())
650
                docu.writeAttribute("ParagraphEffectOffset", style.parEffectOffset());
651
        if ( ! style.isInhParEffectIndent())
652
                docu.writeAttribute("ParagraphEffectIndent", static_cast<int>(style.parEffectIndent()));
13746 jghali 653
        if ( ! style.isInhHasDropCap())
654
                docu.writeAttribute("DROP", static_cast<int>(style.hasDropCap()));
655
        if ( ! style.isInhDropCapLines())
656
                docu.writeAttribute("DROPLIN", style.dropCapLines());
18047 craig 657
        if ( ! style.isInhHasBullet())
658
                docu.writeAttribute("Bullet", static_cast<int>(style.hasBullet()));
659
        if ( ! style.isInhBulletStr())
660
                docu.writeAttribute("BulletStr", style.bulletStr());
661
        if ( ! style.isInhHasNum())
662
                docu.writeAttribute("Numeration", static_cast<int>(style.hasNum()));
663
        if ( ! style.isInhNumFormat())
664
                docu.writeAttribute("NumerationFormat", style.numFormat());
665
        if ( ! style.isInhNumName())
666
                docu.writeAttribute("NumerationName", style.numName());
667
        if ( ! style.isInhNumLevel())
668
                docu.writeAttribute("NumerationLevel", style.numLevel());
669
        if ( ! style.isInhNumPrefix())
670
                docu.writeAttribute("NumerationPrefix", style.numPrefix());
671
        if ( ! style.isInhNumSuffix())
672
                docu.writeAttribute("NumerationSuffix", style.numSuffix());
673
        if ( ! style.isInhNumStart())
674
                docu.writeAttribute("NumerationStart", style.numStart());
675
        if ( ! style.isInhNumRestart())
676
                docu.writeAttribute("NumerationRestart", style.numRestart());
677
        if ( ! style.isInhNumOther())
678
                docu.writeAttribute("NumerationOther", static_cast<int>(style.numOther()));
679
        if ( ! style.isInhNumHigher())
680
                docu.writeAttribute("NumerationHigher", static_cast<int>(style.numHigher()));
13746 jghali 681
        if ( ! style.isInhOpticalMargins())
682
                docu.writeAttribute("OpticalMargins", style.opticalMargins());
683
        if ( ! style.isInhHyphenationMode())
684
                docu.writeAttribute("HyphenationMode", style.hyphenationMode());
685
        if ( ! style.isInhMinWordTracking())
686
                docu.writeAttribute("MinWordTrack", style.minWordTracking());
687
        if ( ! style.isInhMinGlyphExtension())
688
                docu.writeAttribute("MinGlyphShrink", style.minGlyphExtension());
689
        if ( ! style.isInhMaxGlyphExtension())
690
                docu.writeAttribute("MaxGlyphExtend", style.maxGlyphExtension());
16840 jghali 691
        if ( ! style.isInhKeepLinesStart())
692
                docu.writeAttribute("KeepLinesStart", style.keepLinesStart());
693
        if ( ! style.isInhKeepLinesEnd())
694
                docu.writeAttribute("KeepLinesEnd", style.keepLinesEnd());
695
        if ( ! style.isInhKeepWithNext())
696
                docu.writeAttribute("KeepWithNext", style.keepWithNext());
697
        if ( ! style.isInhKeepTogether())
698
                docu.writeAttribute("KeepTogether", style.keepTogether());
13746 jghali 699
 
700
        if ( ! style.shortcut().isEmpty() )
701
                docu.writeAttribute("PSHORTCUT", style.shortcut()); // shortcuts won't be inherited
702
 
703
        putCStyle(docu, style.charStyle());
704
 
705
        if ( ! style.isInhTabValues())
706
        {
707
                for (int a = 0; a < style.tabValues().count(); ++a)
708
                {
709
                        docu.writeEmptyElement("Tabs");
710
                        docu.writeAttribute("Type", (style.tabValues().at(a)).tabType);
711
                        docu.writeAttribute("Pos", (style.tabValues().at(a)).tabPosition);
712
                        QString tabCh = "";
713
                        if (!(style.tabValues().at(a)).tabFillChar.isNull())
714
                                tabCh = QString((style.tabValues().at(a)).tabFillChar);
715
                        docu.writeAttribute("Fill", tabCh);
716
                }
717
        }
718
 
719
        if (styleHasTabs)
720
                docu.writeEndElement();
721
}
722
 
723
 
724
void Scribus150Format::writeCStyles(ScXmlStreamWriter & docu)
725
{
16396 fschmid 726
        QList<int> styleList = m_Doc->getSortedCharStyleList();
727
        for (int a = 0; a < styleList.count(); ++a)
13746 jghali 728
        {
729
                docu.writeStartElement("CHARSTYLE");
16396 fschmid 730
                putNamedCStyle(docu, m_Doc->charStyles()[styleList[a]]);
13746 jghali 731
                docu.writeEndElement();
732
        }
16396 fschmid 733
//      for (int ff = 0; ff < m_Doc->charStyles().count(); ++ff)
734
//      {
735
//              docu.writeStartElement("CHARSTYLE");
736
//              putNamedCStyle(docu, m_Doc->charStyles()[ff]);
737
//              docu.writeEndElement();
738
//      }
13746 jghali 739
}
740
 
741
void Scribus150Format::putCStylePT(ScXmlStreamWriter & docu, const CharStyle & style)
742
{
743
        docu.writeAttribute("CNAME", style.name());
744
        docu.writeAttribute("CPARENT", style.parent());
745
        docu.writeAttribute("FONT", style.font().scName());
746
        docu.writeAttribute("FONTSIZE", style.fontSize() / 10.0);
747
        docu.writeAttribute("FEATURES", style.features().join(" "));
748
        docu.writeAttribute("FCOLOR", style.fillColor());
749
        docu.writeAttribute("FSHADE", style.fillShade());
750
        docu.writeAttribute("SCOLOR", style.strokeColor());
751
        docu.writeAttribute("SSHADE", style.strokeShade());
752
        docu.writeAttribute("TXTSHX", style.shadowXOffset() / 10.0);
753
        docu.writeAttribute("TXTSHY", style.shadowYOffset() / 10.0);
754
        docu.writeAttribute("TXTOUT", style.outlineWidth() / 10.0);
755
        docu.writeAttribute("TXTULP", style.underlineOffset() / 10.0);
756
        docu.writeAttribute("TXTULW", style.underlineWidth() / 10.0);
757
        docu.writeAttribute("TXTSTP", style.strikethruOffset() / 10.0);
758
        docu.writeAttribute("TXTSTW", style.strikethruWidth() / 10.0);
759
        docu.writeAttribute("SCALEH", style.scaleH() / 10.0);
760
        docu.writeAttribute("SCALEV", style.scaleV() / 10.0);
761
        docu.writeAttribute("BASEO", style.baselineOffset() / 10.0);
762
        docu.writeAttribute("KERN", style.tracking() / 10.0);
763
        docu.writeAttribute("wordTrack", style.wordTracking());
15316 jghali 764
        docu.writeAttribute("LANGUAGE", style.language());
13746 jghali 765
        docu.writeAttribute("SHORTCUT", style.shortcut()); // shortcuts won't be inherited
766
}
767
 
768
void Scribus150Format::putCStyle(ScXmlStreamWriter & docu, const CharStyle & style)
769
{
770
        if ( ! style.parent().isEmpty() )
771
                docu.writeAttribute("CPARENT", style.parent());
772
        if ( ! style.isInhFont())      
773
                docu.writeAttribute("FONT", style.font().scName());
774
        if ( ! style.isInhFontSize())
775
                docu.writeAttribute("FONTSIZE", style.fontSize() / 10.0);
776
        if ( ! style.isInhFeatures())
777
                docu.writeAttribute("FEATURES", style.features().join(" "));
778
        if ( ! style.isInhFillColor())
779
                docu.writeAttribute("FCOLOR", style.fillColor());
780
        if ( ! style.isInhFillShade())
781
                docu.writeAttribute("FSHADE", style.fillShade());
782
        if ( ! style.isInhStrokeColor())
783
                docu.writeAttribute("SCOLOR", style.strokeColor());
784
        if ( ! style.isInhStrokeShade())
785
                docu.writeAttribute("SSHADE", style.strokeShade());
786
        if ( ! style.isInhShadowXOffset())
787
                docu.writeAttribute("TXTSHX", style.shadowXOffset() / 10.0);
788
        if ( ! style.isInhShadowYOffset())
789
                docu.writeAttribute("TXTSHY", style.shadowYOffset() / 10.0);
790
        if ( ! style.isInhOutlineWidth())
791
                docu.writeAttribute("TXTOUT", style.outlineWidth() / 10.0);
792
        if ( ! style.isInhUnderlineOffset())
793
                docu.writeAttribute("TXTULP", style.underlineOffset() / 10.0);
794
        if ( ! style.isInhUnderlineWidth())
795
                docu.writeAttribute("TXTULW", style.underlineWidth() / 10.0);
796
        if ( ! style.isInhStrikethruOffset())
797
                docu.writeAttribute("TXTSTP", style.strikethruOffset() / 10.0);
798
        if ( ! style.isInhStrikethruWidth())
799
                docu.writeAttribute("TXTSTW", style.strikethruWidth() / 10.0);
800
        if ( ! style.isInhScaleH())
801
                docu.writeAttribute("SCALEH", style.scaleH() / 10.0);
802
        if ( ! style.isInhScaleV())
803
                docu.writeAttribute("SCALEV", style.scaleV() / 10.0);
804
        if ( ! style.isInhBaselineOffset())
805
                docu.writeAttribute("BASEO", style.baselineOffset() / 10.0);
806
        if ( ! style.isInhTracking())
807
                docu.writeAttribute("KERN", style.tracking() / 10.0);
808
        if ( ! style.isInhWordTracking())
809
                docu.writeAttribute("wordTrack", style.wordTracking());
15316 jghali 810
        if ( ! style.isInhLanguage())
811
                docu.writeAttribute("LANGUAGE", style.language());
13746 jghali 812
        if ( ! style.shortcut().isEmpty() )
813
                docu.writeAttribute("SHORTCUT", style.shortcut()); // shortcuts won't be inherited
814
}
815
 
816
void Scribus150Format::putNamedCStyle(ScXmlStreamWriter& docu, const CharStyle & style)
817
{
818
        if ( ! style.name().isEmpty() )
819
                docu.writeAttribute("CNAME", style.name());
820
        if ( style.hasName() && style.isDefaultStyle())
821
                docu.writeAttribute("DefaultStyle", style.isDefaultStyle());
822
        putCStyle(docu, style);
823
}
824
 
16859 craig 825
void Scribus150Format::writeTableStyles(ScXmlStreamWriter& docu)
826
{
827
        QList<int> styleList = m_Doc->getSortedTableStyleList();
828
        for (int i = 0; i < styleList.count(); ++i)
829
        {
830
                docu.writeStartElement("TableStyle");
831
                putTableStyle(docu, m_Doc->tableStyles()[styleList[i]]);
832
                docu.writeEndElement();
833
        }
834
}
835
 
836
void Scribus150Format::writeCellStyles(ScXmlStreamWriter& docu)
837
{
838
        QList<int> styleList = m_Doc->getSortedCellStyleList();
839
        for (int i = 0; i < styleList.count(); ++i)
840
        {
841
                docu.writeStartElement("CellStyle");
842
                putCellStyle(docu, m_Doc->cellStyles()[styleList[i]]);
843
                docu.writeEndElement();
844
        }
845
}
846
 
847
void Scribus150Format::putTableStyle(ScXmlStreamWriter &docu, const TableStyle &style)
848
{
17318 fschmid 849
        if ( ! style.name().isEmpty() )
850
                docu.writeAttribute("NAME", style.name());
851
        if ( style.hasName() && style.isDefaultStyle())
852
                docu.writeAttribute("DefaultStyle", style.isDefaultStyle());
853
        if ( ! style.parent().isEmpty() )
854
                docu.writeAttribute("PARENT", style.parent());
855
        if ( ! style.isInhFillColor())
856
                docu.writeAttribute("FillColor", style.fillColor());
857
        if ( ! style.isInhFillShade())
858
                docu.writeAttribute("FillShade", style.fillShade());
17319 fschmid 859
        if ( ! style.isInhLeftBorder())
17318 fschmid 860
        {
17319 fschmid 861
                TableBorder tbLeft = style.leftBorder();
862
                docu.writeStartElement("TableBorderLeft");
863
                foreach (TableBorderLine tbl, tbLeft.borderLines())
864
                {
865
                        docu.writeStartElement("TableBorderLine");
866
                        docu.writeAttribute("Width", tbl.width());
867
                        docu.writeAttribute("PenStyle", tbl.style());
868
                        docu.writeAttribute("Color", tbl.color());
869
                        docu.writeAttribute("Shade", tbl.shade());
870
                        docu.writeEndElement();
871
                }
17318 fschmid 872
                docu.writeEndElement();
873
        }
17319 fschmid 874
        if ( ! style.isInhRightBorder())
17318 fschmid 875
        {
17319 fschmid 876
                TableBorder tbRight = style.rightBorder();
877
                docu.writeStartElement("TableBorderRight");
878
                foreach (TableBorderLine tbl, tbRight.borderLines())
879
                {
880
                        docu.writeStartElement("TableBorderLine");
881
                        docu.writeAttribute("Width", tbl.width());
882
                        docu.writeAttribute("PenStyle", tbl.style());
883
                        docu.writeAttribute("Color", tbl.color());
884
                        docu.writeAttribute("Shade", tbl.shade());
885
                        docu.writeEndElement();
886
                }
17318 fschmid 887
                docu.writeEndElement();
888
        }
17319 fschmid 889
        if ( ! style.isInhTopBorder())
17318 fschmid 890
        {
17319 fschmid 891
                TableBorder tbTop = style.topBorder();
892
                docu.writeStartElement("TableBorderTop");
893
                foreach (TableBorderLine tbl, tbTop.borderLines())
894
                {
895
                        docu.writeStartElement("TableBorderLine");
896
                        docu.writeAttribute("Width", tbl.width());
897
                        docu.writeAttribute("PenStyle", tbl.style());
898
                        docu.writeAttribute("Color", tbl.color());
899
                        docu.writeAttribute("Shade", tbl.shade());
900
                        docu.writeEndElement();
901
                }
17318 fschmid 902
                docu.writeEndElement();
903
        }
17319 fschmid 904
        if ( ! style.isInhBottomBorder())
17318 fschmid 905
        {
17319 fschmid 906
                TableBorder tbBottom = style.bottomBorder();
907
                docu.writeStartElement("TableBorderBottom");
908
                foreach (TableBorderLine tbl, tbBottom.borderLines())
909
                {
910
                        docu.writeStartElement("TableBorderLine");
911
                        docu.writeAttribute("Width", tbl.width());
912
                        docu.writeAttribute("PenStyle", tbl.style());
913
                        docu.writeAttribute("Color", tbl.color());
914
                        docu.writeAttribute("Shade", tbl.shade());
915
                        docu.writeEndElement();
916
                }
17318 fschmid 917
                docu.writeEndElement();
918
        }
16859 craig 919
}
920
 
921
void Scribus150Format::putCellStyle(ScXmlStreamWriter &docu, const CellStyle &style)
922
{
17318 fschmid 923
        if ( ! style.name().isEmpty() )
924
                docu.writeAttribute("NAME", style.name());
925
        if ( style.hasName() && style.isDefaultStyle())
926
                docu.writeAttribute("DefaultStyle", style.isDefaultStyle());
927
        if ( ! style.parent().isEmpty() )
928
                docu.writeAttribute("PARENT", style.parent());
929
        if ( ! style.isInhFillColor())
930
                docu.writeAttribute("FillColor", style.fillColor());
931
        if ( ! style.isInhFillShade())
932
                docu.writeAttribute("FillShade", style.fillShade());
17319 fschmid 933
        if ( ! style.isInhLeftPadding())
934
                docu.writeAttribute("LeftPadding",style.leftPadding());
935
        if ( ! style.isInhRightPadding())
936
                docu.writeAttribute("RightPadding", style.rightPadding());
937
        if ( ! style.isInhTopPadding())
938
                docu.writeAttribute("TopPadding",style.topPadding());
939
        if ( ! style.isInhBottomPadding())
940
                docu.writeAttribute("BottomPadding", style.bottomPadding());
941
        if ( ! style.isInhLeftBorder())
17318 fschmid 942
        {
17319 fschmid 943
                TableBorder tbLeft = style.leftBorder();
944
                docu.writeStartElement("TableBorderLeft");
945
                foreach (TableBorderLine tbl, tbLeft.borderLines())
946
                {
947
                        docu.writeStartElement("TableBorderLine");
948
                        docu.writeAttribute("Width", tbl.width());
949
                        docu.writeAttribute("PenStyle", tbl.style());
950
                        docu.writeAttribute("Color", tbl.color());
951
                        docu.writeAttribute("Shade", tbl.shade());
952
                        docu.writeEndElement();
953
                }
17318 fschmid 954
                docu.writeEndElement();
955
        }
17319 fschmid 956
        if ( ! style.isInhRightBorder())
17318 fschmid 957
        {
17319 fschmid 958
                TableBorder tbRight = style.rightBorder();
959
                docu.writeStartElement("TableBorderRight");
960
                foreach (TableBorderLine tbl, tbRight.borderLines())
961
                {
962
                        docu.writeStartElement("TableBorderLine");
963
                        docu.writeAttribute("Width", tbl.width());
964
                        docu.writeAttribute("PenStyle", tbl.style());
965
                        docu.writeAttribute("Color", tbl.color());
966
                        docu.writeAttribute("Shade", tbl.shade());
967
                        docu.writeEndElement();
968
                }
17318 fschmid 969
                docu.writeEndElement();
970
        }
17319 fschmid 971
        if ( ! style.isInhTopBorder())
17318 fschmid 972
        {
17319 fschmid 973
                TableBorder tbTop = style.topBorder();
974
                docu.writeStartElement("TableBorderTop");
975
                foreach (TableBorderLine tbl, tbTop.borderLines())
976
                {
977
                        docu.writeStartElement("TableBorderLine");
978
                        docu.writeAttribute("Width", tbl.width());
979
                        docu.writeAttribute("PenStyle", tbl.style());
980
                        docu.writeAttribute("Color", tbl.color());
981
                        docu.writeAttribute("Shade", tbl.shade());
982
                        docu.writeEndElement();
983
                }
17318 fschmid 984
                docu.writeEndElement();
985
        }
17319 fschmid 986
        if ( ! style.isInhBottomBorder())
17318 fschmid 987
        {
17319 fschmid 988
                TableBorder tbBottom = style.bottomBorder();
989
                docu.writeStartElement("TableBorderBottom");
990
                foreach (TableBorderLine tbl, tbBottom.borderLines())
991
                {
992
                        docu.writeStartElement("TableBorderLine");
993
                        docu.writeAttribute("Width", tbl.width());
994
                        docu.writeAttribute("PenStyle", tbl.style());
995
                        docu.writeAttribute("Color", tbl.color());
996
                        docu.writeAttribute("Shade", tbl.shade());
997
                        docu.writeEndElement();
998
                }
17318 fschmid 999
                docu.writeEndElement();
1000
        }
16859 craig 1001
}
1002
 
13746 jghali 1003
void Scribus150Format::writeLayers(ScXmlStreamWriter & docu)
1004
{      
1005
        uint layerCount=m_Doc->layerCount();
1006
        for (uint lay = 0; lay < layerCount; ++lay)
1007
        {
1008
                docu.writeEmptyElement("LAYERS");
13875 jghali 1009
                docu.writeAttribute("NUMMER",m_Doc->Layers[lay].ID);
13746 jghali 1010
                docu.writeAttribute("LEVEL",m_Doc->Layers[lay].Level);
1011
                docu.writeAttribute("NAME",m_Doc->Layers[lay].Name);
1012
                docu.writeAttribute("SICHTBAR", static_cast<int>(m_Doc->Layers[lay].isViewable));
1013
                docu.writeAttribute("DRUCKEN", static_cast<int>(m_Doc->Layers[lay].isPrintable));
1014
                docu.writeAttribute("EDIT", static_cast<int>(m_Doc->Layers[lay].isEditable));
17454 fschmid 1015
                docu.writeAttribute("SELECT", static_cast<int>(m_Doc->Layers[lay].isSelectable));
13746 jghali 1016
                docu.writeAttribute("FLOW", static_cast<int>(m_Doc->Layers[lay].flowControl));
1017
                docu.writeAttribute("TRANS", m_Doc->Layers[lay].transparency);
1018
                docu.writeAttribute("BLEND", m_Doc->Layers[lay].blendMode);
1019
                docu.writeAttribute("OUTL", static_cast<int>(m_Doc->Layers[lay].outlineMode));
1020
                docu.writeAttribute("LAYERC",m_Doc->Layers[lay].markerColor.name());
1021
        }
1022
}
1023
 
1024
void Scribus150Format::writePrintOptions(ScXmlStreamWriter & docu)
1025
{
1026
        docu.writeStartElement("Printer");
1027
        docu.writeAttribute("firstUse", static_cast<int>(m_Doc->Print_Options.firstUse));
1028
        docu.writeAttribute("toFile", static_cast<int>(m_Doc->Print_Options.toFile));
1029
        docu.writeAttribute("useAltPrintCommand", static_cast<int>(m_Doc->Print_Options.useAltPrintCommand));
1030
        docu.writeAttribute("outputSeparations", static_cast<int>(m_Doc->Print_Options.outputSeparations));
1031
        docu.writeAttribute("useSpotColors", static_cast<int>(m_Doc->Print_Options.useSpotColors));
1032
        docu.writeAttribute("useColor", static_cast<int>(m_Doc->Print_Options.useColor));
1033
        docu.writeAttribute("mirrorH", static_cast<int>(m_Doc->Print_Options.mirrorH));
1034
        docu.writeAttribute("mirrorV", static_cast<int>(m_Doc->Print_Options.mirrorV));
1035
        docu.writeAttribute("useICC", static_cast<int>(m_Doc->Print_Options.useICC));
1036
        docu.writeAttribute("doGCR", static_cast<int>(m_Doc->Print_Options.doGCR));
1037
        docu.writeAttribute("doClip", static_cast<int>(m_Doc->Print_Options.doClip));
1038
        docu.writeAttribute("setDevParam", static_cast<int>(m_Doc->Print_Options.setDevParam));
1039
        docu.writeAttribute("useDocBleeds", static_cast<int>(m_Doc->Print_Options.useDocBleeds));
1040
        docu.writeAttribute("cropMarks", static_cast<int>(m_Doc->Print_Options.cropMarks));
1041
        docu.writeAttribute("bleedMarks", static_cast<int>(m_Doc->Print_Options.bleedMarks));
1042
        docu.writeAttribute("registrationMarks", static_cast<int>(m_Doc->Print_Options.registrationMarks));
1043
        docu.writeAttribute("colorMarks", static_cast<int>(m_Doc->Print_Options.colorMarks));
1044
        docu.writeAttribute("includePDFMarks", static_cast<int>(m_Doc->Print_Options.includePDFMarks));
1045
        docu.writeAttribute("PSLevel", (m_Doc->Print_Options.prnEngine < WindowsGDI) ? m_Doc->Print_Options.prnEngine : PostScript3);
1046
        docu.writeAttribute("PDLanguage" , m_Doc->Print_Options.prnEngine);
17401 jghali 1047
        docu.writeAttribute("markLength" , m_Doc->Print_Options.markLength);
13746 jghali 1048
        docu.writeAttribute("markOffset" , m_Doc->Print_Options.markOffset);
1049
        docu.writeAttribute("BleedTop"   , m_Doc->Print_Options.bleeds.Top);
1050
        docu.writeAttribute("BleedLeft"  , m_Doc->Print_Options.bleeds.Left);
1051
        docu.writeAttribute("BleedRight" , m_Doc->Print_Options.bleeds.Right);
1052
        docu.writeAttribute("BleedBottom", m_Doc->Print_Options.bleeds.Bottom);
1053
        docu.writeAttribute("printer" , m_Doc->Print_Options.printer);
1054
        docu.writeAttribute("filename", m_Doc->Print_Options.filename);
1055
        docu.writeAttribute("separationName", m_Doc->Print_Options.separationName);
1056
        docu.writeAttribute("printerCommand", m_Doc->Print_Options.printerCommand);
1057
        for (int p = 0; p < m_Doc->Print_Options.allSeparations.count(); ++p)
1058
        {
1059
                docu.writeEmptyElement("Separation");
1060
                docu.writeAttribute("Name", m_Doc->Print_Options.allSeparations[p]);
1061
        }
1062
        docu.writeEndElement();
1063
}
1064
 
1065
void Scribus150Format::writePdfOptions(ScXmlStreamWriter & docu)
1066
{
1067
        docu.writeStartElement("PDF");
14925 cbradney 1068
        docu.writeAttribute("firstUse", static_cast<int>(m_Doc->pdfOptions().firstUse));
1069
        docu.writeAttribute("Thumbnails", static_cast<int>(m_Doc->pdfOptions().Thumbnails));
1070
        docu.writeAttribute("Articles", static_cast<int>(m_Doc->pdfOptions().Articles));
1071
        docu.writeAttribute("Bookmarks", static_cast<int>(m_Doc->pdfOptions().Bookmarks));
1072
        docu.writeAttribute("Compress", static_cast<int>(m_Doc->pdfOptions().Compress));
1073
        docu.writeAttribute("CMethod", m_Doc->pdfOptions().CompressMethod);
1074
        docu.writeAttribute("Quality", m_Doc->pdfOptions().Quality);
18412 jghali 1075
        docu.writeAttribute("EmbedPDF", static_cast<int>(m_Doc->pdfOptions().embedPDF));
14925 cbradney 1076
        docu.writeAttribute("MirrorH", static_cast<int>(m_Doc->pdfOptions().MirrorH));
1077
        docu.writeAttribute("MirrorV", static_cast<int>(m_Doc->pdfOptions().MirrorV));
1078
        docu.writeAttribute("Clip", static_cast<int>(m_Doc->pdfOptions().doClip));
17925 fschmid 1079
        docu.writeAttribute("rangeSel", m_Doc->pdfOptions().pageRangeSelection);
1080
        docu.writeAttribute("rangeTxt", m_Doc->pdfOptions().pageRangeString);
14925 cbradney 1081
        docu.writeAttribute("RotateDeg", static_cast<int>(m_Doc->pdfOptions().RotateDeg));
1082
        docu.writeAttribute("PresentMode", static_cast<int>(m_Doc->pdfOptions().PresentMode));
1083
        docu.writeAttribute("RecalcPic", static_cast<int>(m_Doc->pdfOptions().RecalcPic));
1084
        docu.writeAttribute("Grayscale", static_cast<int>(m_Doc->pdfOptions().isGrayscale));
1085
        docu.writeAttribute("RGBMode", static_cast<int>(m_Doc->pdfOptions().UseRGB));
1086
        docu.writeAttribute("UseProfiles", static_cast<int>(m_Doc->pdfOptions().UseProfiles));
1087
        docu.writeAttribute("UseProfiles2", static_cast<int>(m_Doc->pdfOptions().UseProfiles2));
1088
        docu.writeAttribute("Binding", m_Doc->pdfOptions().Binding);
1089
        docu.writeAttribute("PicRes", m_Doc->pdfOptions().PicRes);
1090
        docu.writeAttribute("Resolution", m_Doc->pdfOptions().Resolution);
1091
        docu.writeAttribute("Version", m_Doc->pdfOptions().Version);
1092
        docu.writeAttribute("Intent", m_Doc->pdfOptions().Intent);
1093
        docu.writeAttribute("Intent2", m_Doc->pdfOptions().Intent2);
1094
        docu.writeAttribute("SolidP", m_Doc->pdfOptions().SolidProf);
1095
        docu.writeAttribute("ImageP", m_Doc->pdfOptions().ImageProf);
1096
        docu.writeAttribute("PrintP", m_Doc->pdfOptions().PrintProf);
1097
        docu.writeAttribute("InfoString", m_Doc->pdfOptions().Info);
1098
        docu.writeAttribute("BTop", m_Doc->pdfOptions().bleeds.Top);
1099
        docu.writeAttribute("BLeft", m_Doc->pdfOptions().bleeds.Left);
1100
        docu.writeAttribute("BRight", m_Doc->pdfOptions().bleeds.Right);
1101
        docu.writeAttribute("BBottom", m_Doc->pdfOptions().bleeds.Bottom);
1102
        docu.writeAttribute("useDocBleeds", static_cast<int>(m_Doc->pdfOptions().useDocBleeds));
1103
        docu.writeAttribute("cropMarks", static_cast<int>(m_Doc->pdfOptions().cropMarks));
1104
        docu.writeAttribute("bleedMarks", static_cast<int>(m_Doc->pdfOptions().bleedMarks));
1105
        docu.writeAttribute("registrationMarks", static_cast<int>(m_Doc->pdfOptions().registrationMarks));
1106
        docu.writeAttribute("colorMarks", static_cast<int>(m_Doc->pdfOptions().colorMarks));
1107
        docu.writeAttribute("docInfoMarks", static_cast<int>(m_Doc->pdfOptions().docInfoMarks));
17401 jghali 1108
        docu.writeAttribute("markLength", m_Doc->pdfOptions().markLength);
14925 cbradney 1109
        docu.writeAttribute("markOffset", m_Doc->pdfOptions().markOffset);
1110
        docu.writeAttribute("ImagePr", static_cast<int>(m_Doc->pdfOptions().EmbeddedI));
1111
        docu.writeAttribute("PassOwner", m_Doc->pdfOptions().PassOwner);
1112
        docu.writeAttribute("PassUser", m_Doc->pdfOptions().PassUser);
1113
        docu.writeAttribute("Permissions", m_Doc->pdfOptions().Permissions);
1114
        docu.writeAttribute("Encrypt", static_cast<int>(m_Doc->pdfOptions().Encrypt));
1115
        docu.writeAttribute("UseLayers", static_cast<int>(m_Doc->pdfOptions().useLayers));
1116
        docu.writeAttribute("UseLpi", static_cast<int>(m_Doc->pdfOptions().UseLPI));
1117
        docu.writeAttribute("UseSpotColors", static_cast<int>(m_Doc->pdfOptions().UseSpotColors));
1118
        docu.writeAttribute("doMultiFile", static_cast<int>(m_Doc->pdfOptions().doMultiFile));
1119
        docu.writeAttribute("displayBookmarks", static_cast<int>(m_Doc->pdfOptions().displayBookmarks));
1120
        docu.writeAttribute("displayFullscreen", static_cast<int>(m_Doc->pdfOptions().displayFullscreen));
1121
        docu.writeAttribute("displayLayers", static_cast<int>(m_Doc->pdfOptions().displayLayers));
1122
        docu.writeAttribute("displayThumbs", static_cast<int>(m_Doc->pdfOptions().displayThumbs));
1123
        docu.writeAttribute("hideMenuBar", static_cast<int>(m_Doc->pdfOptions().hideMenuBar));
1124
        docu.writeAttribute("hideToolBar", static_cast<int>(m_Doc->pdfOptions().hideToolBar));
1125
        docu.writeAttribute("fitWindow", static_cast<int>(m_Doc->pdfOptions().fitWindow));
16204 fschmid 1126
        docu.writeAttribute("openAfterExport", static_cast<int>(m_Doc->pdfOptions().openAfterExport));
14925 cbradney 1127
        docu.writeAttribute("PageLayout", m_Doc->pdfOptions().PageLayout);
1128
        docu.writeAttribute("openAction", m_Doc->pdfOptions().openAction);
1129
        for (int pdoF = 0; pdoF < m_Doc->pdfOptions().EmbedList.count(); ++pdoF)
13746 jghali 1130
        {
1131
                docu.writeEmptyElement("Fonts");
14925 cbradney 1132
                docu.writeAttribute("Name", m_Doc->pdfOptions().EmbedList[pdoF]);
13746 jghali 1133
        }
14925 cbradney 1134
        for (int pdoS = 0; pdoS < m_Doc->pdfOptions().SubsetList.count(); ++pdoS)
13746 jghali 1135
        {
1136
                docu.writeEmptyElement("Subset");
14925 cbradney 1137
                docu.writeAttribute("Name", m_Doc->pdfOptions().SubsetList[pdoS]);
13746 jghali 1138
        }
1139
        QMap<QString,LPIData>::Iterator itlp;
14925 cbradney 1140
        for (itlp = m_Doc->pdfOptions().LPISettings.begin(); itlp != m_Doc->pdfOptions().LPISettings.end(); ++itlp)
13746 jghali 1141
        {
1142
                docu.writeEmptyElement("LPI");
1143
                docu.writeAttribute("Color", itlp.key());
1144
                docu.writeAttribute("Frequency", itlp.value().Frequency);
1145
                docu.writeAttribute("Angle", itlp.value().Angle);
1146
                docu.writeAttribute("SpotFunction", itlp.value().SpotFunc);
1147
        }
1148
        docu.writeEndElement();
1149
}
1150
 
1151
void Scribus150Format::writeDocItemAttributes(ScXmlStreamWriter & docu)
1152
{
1153
        docu.writeStartElement("DocItemAttributes");
14927 cbradney 1154
        for(ObjAttrVector::Iterator objAttrIt = m_Doc->itemAttributes().begin() ; objAttrIt != m_Doc->itemAttributes().end(); ++objAttrIt )
13746 jghali 1155
        {
1156
                docu.writeEmptyElement("ItemAttribute");
1157
                docu.writeAttribute("Name", (*objAttrIt).name);
1158
                docu.writeAttribute("Type", (*objAttrIt).type);
1159
                docu.writeAttribute("Value", (*objAttrIt).value);
1160
                docu.writeAttribute("Parameter", (*objAttrIt).parameter);
1161
                docu.writeAttribute("Relationship", (*objAttrIt).relationship);
1162
                docu.writeAttribute("RelationshipTo", (*objAttrIt).relationshipto);
1163
                docu.writeAttribute("AutoAddTo", (*objAttrIt).autoaddto);
1164
        }
1165
        docu.writeEndElement();
1166
}
1167
 
1168
 
1169
void Scribus150Format::writeTOC(ScXmlStreamWriter & docu)
1170
{
1171
        docu.writeStartElement("TablesOfContents");
14927 cbradney 1172
        for(ToCSetupVector::Iterator tocSetupIt = m_Doc->tocSetups().begin() ; tocSetupIt != m_Doc->tocSetups().end(); ++tocSetupIt )
13746 jghali 1173
        {
1174
                docu.writeEmptyElement("TableOfContents");
1175
                docu.writeAttribute("Name", (*tocSetupIt).name);
1176
                docu.writeAttribute("ItemAttributeName", (*tocSetupIt).itemAttrName);
1177
                docu.writeAttribute("FrameName", (*tocSetupIt).frameName);
1178
                docu.writeAttribute("ListNonPrinting", (*tocSetupIt).listNonPrintingFrames);
1179
                docu.writeAttribute("Style", (*tocSetupIt).textStyle);
1180
                switch ((*tocSetupIt).pageLocation)
1181
                {
1182
                        case Beginning:
1183
                                docu.writeAttribute("NumberPlacement", "Beginning");
1184
                                break;
1185
                        case End:
1186
                                docu.writeAttribute("NumberPlacement", "End");
1187
                                break;
1188
                        case NotShown:
1189
                                docu.writeAttribute("NumberPlacement", "NotShown");
1190
                                break;
1191
                }
1192
        }
1193
        docu.writeEndElement();
1194
}
1195
 
1196
 
1197
void Scribus150Format::writeSections(ScXmlStreamWriter & docu)
1198
{
1199
        docu.writeStartElement("Sections");
15037 cbradney 1200
        for(DocumentSectionMap::Iterator it = m_Doc->sections().begin() ; it != m_Doc->sections().end(); ++it )
13746 jghali 1201
        {
1202
                docu.writeEmptyElement("Section");
1203
                docu.writeAttribute("Number", (*it).number);
1204
                docu.writeAttribute("Name", (*it).name);
1205
                docu.writeAttribute("From", (*it).fromindex);
1206
                docu.writeAttribute("To", (*it).toindex);
1207
                switch ((*it).type)
1208
                {
1209
                        case Type_1_2_3:
1210
                                docu.writeAttribute("Type", "Type_1_2_3");
1211
                                break;
1212
                        case Type_i_ii_iii:
1213
                                docu.writeAttribute("Type", "Type_i_ii_iii");
1214
                                break;
1215
                        case Type_I_II_III:
1216
                                docu.writeAttribute("Type", "Type_I_II_III");
1217
                                break;
1218
                        case Type_a_b_c:
1219
                                docu.writeAttribute("Type", "Type_a_b_c");
1220
                                break;
1221
                        case Type_A_B_C:
1222
                                docu.writeAttribute("Type", "Type_A_B_C");
1223
                                break;
17826 craig 1224
                        case Type_asterix:
1225
                                docu.writeAttribute("Type", "Type_asterix");
1226
                                break;
13746 jghali 1227
                        case Type_None:
1228
                                docu.writeAttribute("Type", "Type_None");
1229
                                break;
1230
                }
1231
                docu.writeAttribute("Start", (*it).sectionstartindex);
1232
                docu.writeAttribute("Reversed", (*it).reversed);
1233
                docu.writeAttribute("Active", (*it).active);
15621 fschmid 1234
                docu.writeAttribute("FillChar", (*it).pageNumberFillChar.unicode());
15534 craig 1235
                docu.writeAttribute("FieldWidth", (*it).pageNumberWidth);
13746 jghali 1236
        }
1237
        docu.writeEndElement();
1238
}
1239
 
17826 craig 1240
void Scribus150Format::writeMarks(ScXmlStreamWriter & docu)
1241
{
1242
        //write list of definied marks to SLA
1243
        if (m_Doc->marksList().isEmpty())
1244
                return;
1245
        docu.writeStartElement("Marks");
1246
        foreach(Mark* mrk, m_Doc->marksList())
1247
        {
1248
                if (mrk->isType(MARKNoteFrameType))
1249
                        continue;
1250
                docu.writeEmptyElement("Mark");
1251
                docu.writeAttribute("label", mrk->label);
1252
                docu.writeAttribute("type", mrk->getType());
1253
                if (mrk->isType(MARK2ItemType) && mrk->hasItemPtr())
1254
                {
1255
                        const PageItem* item = mrk->getItemPtr();
1256
                        assert(item != NULL);
1257
                        docu.writeAttribute("ItemID", qHash(item));
1258
                        //docu.writeAttribute("itemName", item->itemName());
1259
                }
1260
                else if (mrk->isType(MARKVariableTextType) && mrk->hasString())
1261
                        docu.writeAttribute("str", mrk->getString());
1262
                else if (mrk->isType(MARK2MarkType) && mrk->hasMark())
1263
                {
1264
                        QString label;
1265
                        MarkType type;
1266
                        mrk->getMark(label, type);
1267
                        docu.writeAttribute("MARKlabel", label);
1268
                        docu.writeAttribute("MARKtype", type);
1269
                }
1270
        }
1271
        docu.writeEndElement();
1272
}
13746 jghali 1273
 
17826 craig 1274
void Scribus150Format::writeNotesStyles(ScXmlStreamWriter & docu)
1275
{
1276
        //write notes styles
1277
        docu.writeStartElement("NotesStyles");
1278
        QList<NotesStyle*>::Iterator itNS;
1279
        QList<NotesStyle*>::Iterator end = m_Doc->m_docNotesStylesList.end();
1280
        for (itNS = m_Doc->m_docNotesStylesList.begin(); itNS != end; ++itNS)
1281
        {
1282
                NotesStyle* NS = (*itNS);
1283
                docu.writeEmptyElement("notesStyle");
1284
                docu.writeAttribute("Name", NS->name());
1285
                docu.writeAttribute("Start", NS->start());
1286
                docu.writeAttribute("Endnotes", NS->isEndNotes());
1287
                switch (NS->getType())
1288
                {
1289
                        case Type_1_2_3:
1290
                                docu.writeAttribute("Type", "Type_1_2_3");
1291
                                break;
1292
                        case Type_i_ii_iii:
1293
                                docu.writeAttribute("Type", "Type_i_ii_iii");
1294
                                break;
1295
                        case Type_I_II_III:
1296
                                docu.writeAttribute("Type", "Type_I_II_III");
1297
                                break;
1298
                        case Type_a_b_c:
1299
                                docu.writeAttribute("Type", "Type_a_b_c");
1300
                                break;
1301
                        case Type_A_B_C:
1302
                                docu.writeAttribute("Type", "Type_A_B_C");
1303
                                break;
1304
                        case Type_asterix:
1305
                                docu.writeAttribute("Type", "Type_asterix");
1306
                                break;
1307
                        case Type_None:
1308
                                docu.writeAttribute("Type", "Type_None");
1309
                                break;
1310
                }
1311
                docu.writeAttribute("Range", (int) NS->range());
1312
                docu.writeAttribute("Prefix", NS->prefix());
1313
                docu.writeAttribute("Suffix", NS->suffix());
1314
                docu.writeAttribute("AutoHeight", NS->isAutoNotesHeight());
1315
                docu.writeAttribute("AutoWidth", NS->isAutoNotesWidth());
1316
                docu.writeAttribute("AutoRemove", NS->isAutoRemoveEmptyNotesFrames());
1317
                docu.writeAttribute("AutoWeld", NS->isAutoWeldNotesFrames());
1318
                docu.writeAttribute("SuperNote", NS->isSuperscriptInNote());
1319
                docu.writeAttribute("SuperMaster", NS->isSuperscriptInMaster());
1320
                docu.writeAttribute("MarksStyle", NS->marksChStyle());
1321
                docu.writeAttribute("NotesStyle", NS->notesParStyle());
1322
        }
1323
        docu.writeEndElement();
1324
}
1325
 
1326
void Scribus150Format::writeNotesFrames(ScXmlStreamWriter &docu)
1327
{
1328
        docu.writeStartElement("NotesFrames");
1329
 
1330
        QList<PageItem_NoteFrame*> NFList;
1331
        foreach (NotesStyle* NS, m_Doc->m_docNotesStylesList)
1332
                NFList.append(m_Doc->listNotesFrames(NS));
1333
 
1334
        for (int it = 0; it < NFList.count(); ++it)
1335
        {
1336
                PageItem_NoteFrame* nF = NFList.at(it);
1337
                NotesStyle* NS = nF->notesStyle();
1338
                if (NS->isEndNotes())
1339
                {
1340
                        docu.writeEmptyElement("ENDNOTEFRAME");
1341
                        docu.writeAttribute("NSname", NS->name());
1342
                        docu.writeAttribute("range", (int) NS->range());
1343
                        docu.writeAttribute("myID", qHash(nF));
1344
                        //docu.writeAttribute("name", nF->itemName());
1345
 
1346
                        rangeItem rI = m_Doc->m_docEndNotesFramesMap.value(nF);
1347
                        if (NS->range() == NSRsection)
1348
                                docu.writeAttribute("index", rI.sectionIndex);
1349
                        else if (NS->range() == NSRpage)
1350
                                docu.writeAttribute("index", rI.page->pageNr());
1351
                        else if (NS->range() == NSRstory)
1352
                                docu.writeAttribute("ItemID", qHash(rI.firstStoryFrame));
1353
                                //docu.writeAttribute("item", rI.firstStoryFrame->itemName());
1354
                }
1355
                else //footnotes frame
1356
                {
1357
                        docu.writeEmptyElement("FOOTNOTEFRAME");
1358
                        docu.writeAttribute("NSname", NS->name());
1359
                        docu.writeAttribute("myID", qHash(nF));
1360
                        //docu.writeAttribute("name", nF->itemName());
1361
                        docu.writeAttribute("MasterID", qHash(nF->masterFrame()));
1362
                        //docu.writeAttribute("master",nF->masterFrame()->itemName());
1363
                }
1364
        }
1365
        docu.writeEndElement();
1366
}
1367
 
1368
void Scribus150Format::writeNotes(ScXmlStreamWriter & docu)
1369
{
1370
        //write notes
1371
        if (m_Doc->notesList().isEmpty())
1372
                return;
1373
        docu.writeStartElement("Notes");
1374
        QList<TextNote*>::const_iterator itTN;
1375
        QList<TextNote*>::const_iterator end = m_Doc->notesList().end();
1376
        for (itTN = m_Doc->notesList().begin(); itTN != end; ++itTN)
1377
        {
1378
                TextNote* TN = (*itTN);
1379
                if (TN->masterMark() == NULL)
1380
                        continue;
1381
                docu.writeEmptyElement("Note");
1382
                docu.writeAttribute("Master", TN->masterMark()->label);
1383
                docu.writeAttribute("NStyle", TN->notesStyle()->name());
1384
                docu.writeAttribute("Text", TN->saxedText());
1385
        }
1386
        docu.writeEndElement();
1387
}
1388
 
13746 jghali 1389
void Scribus150Format::writePageSets(ScXmlStreamWriter & docu)
1390
{      
1391
        docu.writeStartElement("PageSets");
1392
        QList<PageSet>::Iterator itpgset;
14924 cbradney 1393
        QList<PageSet> pageSet(m_Doc->pageSets());
1394
        for(itpgset = pageSet.begin(); itpgset != pageSet.end(); ++itpgset )
13746 jghali 1395
        {
1396
                docu.writeStartElement("Set");
1397
                docu.writeAttribute("Name", (*itpgset).Name);
1398
                docu.writeAttribute("FirstPage", (*itpgset).FirstPage);
1399
                docu.writeAttribute("Rows", (*itpgset).Rows);
1400
                docu.writeAttribute("Columns", (*itpgset).Columns);
1401
//              docu.writeAttribute("GapHorizontal", (*itpgset).GapHorizontal);
1402
//              docu.writeAttribute("GapVertical", (*itpgset).GapVertical);
1403
//              docu.writeAttribute("GapBelow", (*itpgset).GapBelow);
1404
                QStringList pNames = (*itpgset).pageNames;
1405
                QStringList::Iterator itpgsetN;
1406
                for(itpgsetN = pNames.begin(); itpgsetN != pNames.end(); ++itpgsetN )
1407
                {
1408
                        docu.writeEmptyElement("PageNames");
1409
                        docu.writeAttribute("Name", (*itpgsetN));
1410
                }
1411
                docu.writeEndElement();
1412
        }
1413
        docu.writeEndElement();
1414
}
1415
 
16162 fschmid 1416
void Scribus150Format::writePatterns(ScXmlStreamWriter & docu, const QString& baseDir, bool part, Selection* selection)
13746 jghali 1417
{
16162 fschmid 1418
        QStringList patterns;
1419
        if (part)
1420
                patterns = m_Doc->getPatternDependencyList(m_Doc->getUsedPatternsSelection(selection));
1421
        else
1422
                patterns = m_Doc->getPatternDependencyList(m_Doc->docPatterns.keys());
16052 fschmid 1423
        for (int a = 0; a < patterns.count(); a++)
13746 jghali 1424
        {
1425
                docu.writeStartElement("Pattern");
16052 fschmid 1426
                docu.writeAttribute("Name", patterns[a]);
1427
                ScPattern pa = m_Doc->docPatterns[patterns[a]];
13746 jghali 1428
                docu.writeAttribute("width", pa.width);
1429
                docu.writeAttribute("height", pa.height);
1430
                docu.writeAttribute("scaleX", pa.scaleX);
1431
                docu.writeAttribute("scaleY", pa.scaleY);
1432
                docu.writeAttribute("xoffset", pa.xoffset);
1433
                docu.writeAttribute("yoffset", pa.yoffset);
1434
                WriteObjects(m_Doc, docu, baseDir, 0, 0, ItemSelectionPattern, &pa.items);
1435
                docu.writeEndElement();
1436
        }      
1437
}
1438
 
1439
void Scribus150Format::writeContent(ScXmlStreamWriter & docu, const QString& baseDir)
1440
{
1441
        if (m_mwProgressBar != 0)
1442
        {
1443
                m_mwProgressBar->setMaximum(m_Doc->DocPages.count()+m_Doc->MasterPages.count()+m_Doc->DocItems.count()+m_Doc->MasterItems.count()+m_Doc->FrameItems.count());
1444
                m_mwProgressBar->setValue(0);
1445
        }
1446
        WritePages(m_Doc, docu, m_mwProgressBar, 0, true);
1447
        WritePages(m_Doc, docu, m_mwProgressBar, m_Doc->MasterPages.count(), false);
1448
        WriteObjects(m_Doc, docu, baseDir, m_mwProgressBar, m_Doc->MasterPages.count()+m_Doc->DocPages.count(), ItemSelectionFrame);
1449
        WriteObjects(m_Doc, docu, baseDir, m_mwProgressBar, m_Doc->MasterPages.count()+m_Doc->DocPages.count()+m_Doc->FrameItems.count(), ItemSelectionMaster);
1450
        WriteObjects(m_Doc, docu, baseDir, m_mwProgressBar, m_Doc->MasterPages.count()+m_Doc->DocPages.count()+m_Doc->MasterItems.count()+m_Doc->FrameItems.count(), ItemSelectionPage);
1451
}
1452
 
1453
void Scribus150Format::WritePages(ScribusDoc *doc, ScXmlStreamWriter& docu, QProgressBar *dia2, uint maxC, bool master)
1454
{
1455
        uint ObCount = maxC;
16729 fschmid 1456
        ScPage *page;
13746 jghali 1457
        uint pages;
1458
        QString tmp;
1459
        if (master)
1460
                pages = doc->MasterPages.count();
1461
        else
1462
                pages = doc->DocPages.count();
1463
        for(uint i = 0; i < pages; ++i)
1464
        {
1465
                ObCount++;
1466
                if (dia2 != 0)
1467
                        dia2->setValue(ObCount);
1468
                if (master)
1469
                {
1470
                        docu.writeStartElement("MASTERPAGE");
1471
                        page = doc->MasterPages.at(i);
1472
                }
1473
                else
1474
                {
1475
                        docu.writeStartElement("PAGE");
1476
                        page = doc->DocPages.at(i);
1477
                }
1478
                docu.writeAttribute("PAGEXPOS",page->xOffset());
1479
                docu.writeAttribute("PAGEYPOS",page->yOffset());
1480
                docu.writeAttribute("PAGEWIDTH",page->width());
1481
                docu.writeAttribute("PAGEHEIGHT",page->height());
1482
                docu.writeAttribute("BORDERLEFT",page->initialMargins.Left);
1483
                docu.writeAttribute("BORDERRIGHT",page->initialMargins.Right);
1484
                docu.writeAttribute("BORDERTOP",page->initialMargins.Top);
1485
                docu.writeAttribute("BORDERBOTTOM",page->initialMargins.Bottom);
1486
                docu.writeAttribute("NUM",page->pageNr());
1487
                docu.writeAttribute("NAM",page->pageName());
1488
                docu.writeAttribute("MNAM",page->MPageNam);
1489
                docu.writeAttribute("Size", page->m_pageSize);
1490
                docu.writeAttribute("Orientation", page->orientation());
1491
                docu.writeAttribute("LEFT", page->LeftPg);
1492
                docu.writeAttribute("PRESET", page->marginPreset);
1493
                docu.writeAttribute("VerticalGuides", GuideManagerIO::writeVerticalGuides(
1494
                                                                                                        page, GuideManagerCore::Standard));
1495
                docu.writeAttribute("HorizontalGuides", GuideManagerIO::writeHorizontalGuides(
1496
                                                                                                        page, GuideManagerCore::Standard));
1497
                docu.writeAttribute("AGhorizontalAutoGap", page->guides.horizontalAutoGap());
1498
                docu.writeAttribute("AGverticalAutoGap", page->guides.verticalAutoGap());
1499
                docu.writeAttribute("AGhorizontalAutoCount", page->guides.horizontalAutoCount());
1500
                docu.writeAttribute("AGverticalAutoCount", page->guides.verticalAutoCount());
1501
                docu.writeAttribute("AGhorizontalAutoRefer", page->guides.horizontalAutoRefer());
1502
                docu.writeAttribute("AGverticalAutoRefer", page->guides.verticalAutoRefer());
1503
                docu.writeAttribute("AGSelection", GuideManagerIO::writeSelection(page));
18394 fschmid 1504
                docu.writeAttribute("pageEffectDuration", page->PresentVals.pageEffectDuration);
1505
                docu.writeAttribute("pageViewDuration", page->PresentVals.pageViewDuration);
1506
                docu.writeAttribute("effectType", page->PresentVals.effectType);
1507
                docu.writeAttribute("Dm", page->PresentVals.Dm);
1508
                docu.writeAttribute("M", page->PresentVals.M);
1509
                docu.writeAttribute("Di", page->PresentVals.Di);
13746 jghali 1510
                docu.writeEndElement();
1511
        }
1512
}
1513
 
1514
 
1515
namespace { // anon
15009 jghali 1516
        QString textWithSoftHyphens(StoryText& itemText, int from, int to)
13746 jghali 1517
        {
1518
                QString result("");
1519
                int lastPos = from;
1520
                for (int i = from; i < to; ++i)
1521
                {
18524 avox 1522
                        if (itemText.hasFlag(i, ScLayout_HyphenationPossible)
13746 jghali 1523
                                // duplicate SHYPHEN if already present to indicate a user provided SHYPHEN:
1524
                                || itemText.text(i) == SpecialChars::SHYPHEN)
1525
                        {
1526
                                result += itemText.text(lastPos, i + 1 - lastPos);
1527
                                result += SpecialChars::SHYPHEN;
1528
                                lastPos = i+1;
1529
                        }
1530
                }
1531
                if (lastPos < to)
1532
                        result += itemText.text(lastPos, to - lastPos);
1533
                return result;
1534
        }
1535
} // namespace anon
1536
 
1537
 
1538
void Scribus150Format::writeITEXTs(ScribusDoc *doc, ScXmlStreamWriter &docu, PageItem* item)
1539
{
1540
        CharStyle lastStyle;
1541
        int lastPos = 0;
1542
        QString tmpnum;
17826 craig 1543
        int iTLen = item->itemText.length();
1544
        if (item->isNoteFrame())
1545
                iTLen = 0;  //used for saving empty endnotes frames, as they will be filled automatically
1546
        for(int k = 0; k < iTLen; ++k)
13746 jghali 1547
        {
1548
                const CharStyle& style1(item->itemText.charStyle(k));
1549
                const QChar ch = item->itemText.text(k);
1550
 
1551
                if (ch == SpecialChars::OBJECT ||
1552
                        ch == SpecialChars::TAB ||
1553
                        ch == SpecialChars::PARSEP ||
1554
                        ch == SpecialChars::LINEBREAK ||
1555
                        ch == SpecialChars::COLBREAK ||
1556
                        ch == SpecialChars::FRAMEBREAK ||
1557
                        ch == SpecialChars::PAGENUMBER ||
1558
                        ch == SpecialChars::PAGECOUNT ||
1559
                        ch == SpecialChars::NBHYPHEN ||
1560
                        ch == SpecialChars::NBSPACE ||
1561
                        ch == SpecialChars::ZWNBSPACE ||
1562
                        ch == SpecialChars::ZWSPACE ||
1563
                        ch.unicode() < 32 ||
1564
                        (0xd800 <= ch.unicode() && ch.unicode() < 0xe000) ||
1565
                        ch.unicode() == 0xfffe || ch.unicode() == 0xffff ||
1566
                        style1 != lastStyle)
1567
                {
1568
                        // something new, write pending chars
1569
                        if  (k - lastPos > 0)
1570
                        {
1571
                                docu.writeEmptyElement("ITEXT");
1572
                                /*if (item->asPathText()) // seems to cause problems when loading pathtext elements
1573
                                        putCStylePT(docu, lastStyle);
1574
                                else*/
1575
                                        putCStyle(docu, lastStyle);
15009 jghali 1576
                                docu.writeAttribute("CH", textWithSoftHyphens(item->itemText, lastPos, k));
13746 jghali 1577
                        }
1578
                        lastStyle = style1;
1579
                        lastPos = k;
1580
                }
1581
 
1582
                if (ch == SpecialChars::OBJECT && item->itemText.object(k) != NULL)
1583
                {
1584
                        // each obj in its own ITEXT for now
1585
                        docu.writeEmptyElement("ITEXT");
1586
                        /*if (item->asPathText()) // seems to cause problems when loading pathtext elements
1587
                                putCStylePT(docu, lastStyle);
1588
                        else*/
1589
                                putCStyle(docu, lastStyle);
13900 jghali 1590
                        tmpnum.setNum(ch.unicode());
1591
                        docu.writeAttribute("Unicode", tmpnum);
17407 fschmid 1592
                        docu.writeAttribute("COBJ", item->itemText.object(k)->inlineCharID);
13746 jghali 1593
                }
18524 avox 1594
        else if (ch == SpecialChars::OBJECT && item->itemText.hasMark(k))
17826 craig 1595
                {
18524 avox 1596
            Mark* mark = item->itemText.mark(k);
18047 craig 1597
                        if (!mark->isType(MARKBullNumType))
1598
                        { //dont save marks for bullets and numbering
1599
                                docu.writeEmptyElement("MARK");
1600
                                docu.writeAttribute("label", mark->label);
1601
                                docu.writeAttribute("type", mark->getType());
1602
                        }
17826 craig 1603
                }
13746 jghali 1604
                else if (ch == SpecialChars::PARSEP)    // stores also the paragraphstyle for preceding chars
1605
                        putPStyle(docu, item->itemText.paragraphStyle(k), "para");
1606
                else if (ch == SpecialChars::TAB)
13971 jghali 1607
                {
13746 jghali 1608
                        docu.writeEmptyElement("tab");
13971 jghali 1609
                        putCStyle(docu, lastStyle);
1610
                }
13746 jghali 1611
                else if (ch == SpecialChars::LINEBREAK)
1612
                        docu.writeEmptyElement("breakline");
1613
                else if (ch == SpecialChars::COLBREAK)
1614
                        docu.writeEmptyElement("breakcol");
1615
                else if (ch == SpecialChars::FRAMEBREAK)
1616
                        docu.writeEmptyElement("breakframe");
1617
                else if (ch == SpecialChars::NBHYPHEN)
1618
                        docu.writeEmptyElement("nbhyphen");
1619
                else if (ch == SpecialChars::NBSPACE)
1620
                        docu.writeEmptyElement("nbspace");
1621
                else if (ch == SpecialChars::ZWNBSPACE)
1622
                        docu.writeEmptyElement("zwnbspace");
1623
                else if (ch == SpecialChars::ZWSPACE)
1624
                        docu.writeEmptyElement("zwspace");
1625
                else if (ch == SpecialChars::PAGENUMBER)
1626
                {
1627
                        docu.writeEmptyElement("var");
1628
                        docu.writeAttribute("name", "pgno");
1629
                        putCStyle(docu, lastStyle);
1630
                }
1631
                else if (ch == SpecialChars::PAGECOUNT)
1632
                {
1633
                        docu.writeEmptyElement("var");
1634
                        docu.writeAttribute("name", "pgco");
1635
                        putCStyle(docu, lastStyle);
1636
                }
1637
                else if (ch.unicode() < 32 ||
1638
                                 (0xd800 <= ch.unicode() && ch.unicode() < 0xe000) ||
1639
                                 ch.unicode() == 0xfffe || ch.unicode() == 0xffff)
1640
                {
1641
                        docu.writeEmptyElement("ITEXT");
1642
                        putCStyle(docu, lastStyle);
1643
                        tmpnum.setNum(ch.unicode());
1644
                        docu.writeAttribute("Unicode", tmpnum);        
1645
                }
1646
                else
1647
                {
1648
                        continue;
1649
                }
1650
                // otherwise we just wrote something special and are done with position 'k'
1651
                lastPos = k + 1;
1652
        }
1653
        // write pending chars
1654
        if ( item->itemText.length() - lastPos > 0)
1655
        {
1656
                docu.writeEmptyElement("ITEXT");
1657
                /*if (item->asPathText())
1658
                        putCStylePT(docu, lastStyle);
1659
                else*/
1660
                        putCStyle(docu, lastStyle);
15009 jghali 1661
                docu.writeAttribute("CH", textWithSoftHyphens(item->itemText, lastPos, item->itemText.length()));
13746 jghali 1662
        }
1663
        // paragraphstyle for trailing chars
1664
        if (item->itemText.length() == 0 || item->itemText.text(item->itemText.length()-1) != SpecialChars::PARSEP)
1665
        {
1666
                putPStyle(docu, item->itemText.paragraphStyle(item->itemText.length()), "trail");
1667
        }
1668
}
1669
 
1670
void Scribus150Format::WriteObjects(ScribusDoc *doc, ScXmlStreamWriter& docu, const QString& baseDir, QProgressBar *dia2, uint maxC, ItemSelection master, QList<PageItem*> *some_items)
1671
{
1672
        uint ObCount = maxC;
1673
        QList<PageItem*> *items = NULL;
17407 fschmid 1674
        QList<PageItem*> itemList;
13746 jghali 1675
        PageItem *item = NULL;
1676
        uint objects = 0;
1677
        switch (master)
1678
        {
1679
                case ItemSelectionMaster:
1680
                        items = &doc->MasterItems;
1681
                        break;
1682
                case ItemSelectionPage:
1683
                        items = &doc->DocItems;
1684
                        break;
1685
                case ItemSelectionFrame:
17147 fschmid 1686
                        if (some_items != NULL)
1687
                                items = some_items;
1688
                        else
17407 fschmid 1689
                        {
1690
                                itemList = doc->FrameItems.values();
1691
                                items = &itemList;
1692
                        }
13746 jghali 1693
                        break;
16105 fschmid 1694
                case ItemSelectionGroup:
13746 jghali 1695
                case ItemSelectionPattern:
16162 fschmid 1696
                case ItemSelectionElements:
13746 jghali 1697
                        items = some_items;
1698
                        break;
1699
                default:
1700
                        assert(false);
1701
        }
1702
        objects = items->count();
1703
        for(uint j = 0; j < objects;++j)
1704
        {
1705
                ObCount++;
1706
                if (dia2 != 0)
1707
                        dia2->setValue(ObCount);
1708
                item = items->at(j);
1709
                switch (master)
1710
                {
1711
                        case ItemSelectionMaster:
1712
//                              item = doc->MasterItems.at(j);
1713
                                docu.writeStartElement("MASTEROBJECT");
1714
                                break;
16105 fschmid 1715
                        case ItemSelectionGroup:
13746 jghali 1716
                        case ItemSelectionPage:
1717
//                              item = doc->DocItems.at(j);
1718
                                docu.writeStartElement("PAGEOBJECT");
1719
                                break;
1720
                        case ItemSelectionFrame:
1721
//                              item = doc->FrameItems.at(j);
1722
                                docu.writeStartElement("FRAMEOBJECT");
1723
                                break;
1724
                        case ItemSelectionPattern:
1725
                                docu.writeStartElement("PatternItem");
1726
                                break;
16162 fschmid 1727
                        case ItemSelectionElements:
1728
                                docu.writeStartElement("ITEM");
1729
                                break;
13746 jghali 1730
                }
17407 fschmid 1731
                if (master == ItemSelectionFrame)
1732
                        docu.writeAttribute("InID", item->inlineCharID);
16162 fschmid 1733
                if (master == ItemSelectionElements)
1734
                {
1735
                        docu.writeAttribute("XPOS", item->xPos() - doc->currentPage()->xOffset());
1736
                        docu.writeAttribute("YPOS", item->yPos() - doc->currentPage()->yOffset());
1737
                }
1738
                else
1739
                {
1740
                        docu.writeAttribute("XPOS", item->xPos());
1741
                        docu.writeAttribute("YPOS", item->yPos());
1742
                }
13746 jghali 1743
                SetItemProps(docu, item, baseDir, true);
16251 fschmid 1744
                if (!item->OnMasterPage.isEmpty())
1745
                        docu.writeAttribute("OnMasterPage", item->OnMasterPage);
1746
                if (!item->pixm.imgInfo.usedPath.isEmpty())
1747
                        docu.writeAttribute("ImageClip", item->pixm.imgInfo.usedPath);
16252 fschmid 1748
                if (item->pixm.imgInfo.lowResType != 1)
1749
                        docu.writeAttribute("ImageRes", item->pixm.imgInfo.lowResType);
1750
                if (item->isEmbedded)
1751
                        docu.writeAttribute("isInline", 1);
16251 fschmid 1752
                if (!item->fillRule)
1753
                        docu.writeAttribute("fillRule", 0);
1754
                if (item->doOverprint)
1755
                        docu.writeAttribute("doOverprint", 1);
13746 jghali 1756
                docu.writeAttribute("gXpos", item->gXpos);
1757
                docu.writeAttribute("gYpos", item->gYpos);
1758
                docu.writeAttribute("gWidth", item->gWidth);
1759
                docu.writeAttribute("gHeight", item->gHeight);
15060 fschmid 1760
                if (item->itemType() == PageItem::Symbol)
1761
                        docu.writeAttribute("pattern", item->pattern());
13746 jghali 1762
                if (item->GrType != 0)
1763
                {
1764
                        if (item->GrType == 8)
1765
                        {
1766
                                docu.writeAttribute("pattern", item->pattern());
14260 fschmid 1767
                                double patternScaleX, patternScaleY, patternOffsetX, patternOffsetY, patternRotation, patternSkewX, patternSkewY;
1768
                                item->patternTransform(patternScaleX, patternScaleY, patternOffsetX, patternOffsetY, patternRotation, patternSkewX, patternSkewY);
14276 fschmid 1769
                                bool mirrorX, mirrorY;
1770
                                item->patternFlip(mirrorX, mirrorY);
13746 jghali 1771
                                docu.writeAttribute("pScaleX", patternScaleX);
1772
                                docu.writeAttribute("pScaleY", patternScaleY);
1773
                                docu.writeAttribute("pOffsetX", patternOffsetX);
1774
                                docu.writeAttribute("pOffsetY", patternOffsetY);
1775
                                docu.writeAttribute("pRotation", patternRotation);
14260 fschmid 1776
                                docu.writeAttribute("pSkewX", patternSkewX);
1777
                                docu.writeAttribute("pSkewY", patternSkewY);
14276 fschmid 1778
                                docu.writeAttribute("pMirrorX" , mirrorX);
1779
                                docu.writeAttribute("pMirrorY" , mirrorY);
13746 jghali 1780
                        }
1781
                        else
1782
                        {
15024 fschmid 1783
                                if (item->GrType == 11)
14952 fschmid 1784
                                {
15024 fschmid 1785
                                        docu.writeAttribute("GMAY", item->meshGradientArray[0].count());
1786
                                        docu.writeAttribute("GMAX", item->meshGradientArray.count());
14952 fschmid 1787
                                }
16729 fschmid 1788
                                else if (item->GrType == 12)
1789
                                {
1790
                                        docu.writeAttribute("GMAX", item->meshGradientPatches.count());
1791
                                }
15024 fschmid 1792
                                else
1793
                                {
1794
                                        docu.writeAttribute("GRSTARTX", item->GrStartX);
1795
                                        docu.writeAttribute("GRSTARTY", item->GrStartY);
1796
                                        docu.writeAttribute("GRENDX", item->GrEndX);
1797
                                        docu.writeAttribute("GRENDY", item->GrEndY);
1798
                                        docu.writeAttribute("GRFOCALX", item->GrFocalX);
1799
                                        docu.writeAttribute("GRFOCALY", item->GrFocalY);
1800
                                        docu.writeAttribute("GRSCALE" , item->GrScale);
1801
                                        docu.writeAttribute("GRSKEW" , item->GrSkew);
1802
                                        if ((item->GrType == 9) || (item->GrType == 10))
1803
                                        {
1804
                                                docu.writeAttribute("GRC1X"   , item->GrControl1.x());
1805
                                                docu.writeAttribute("GRC1Y"   , item->GrControl1.y());
1806
                                                docu.writeAttribute("GRCOLP1" , item->GrColorP1);
1807
                                                docu.writeAttribute("GRC2X"   , item->GrControl2.x());
1808
                                                docu.writeAttribute("GRC2Y"   , item->GrControl2.y());
1809
                                                docu.writeAttribute("GRCOLP2" , item->GrColorP2);
1810
                                                docu.writeAttribute("GRC3X"   , item->GrControl3.x());
1811
                                                docu.writeAttribute("GRC3Y"   , item->GrControl3.y());
1812
                                                docu.writeAttribute("GRCOLP3" , item->GrColorP3);
1813
                                                docu.writeAttribute("GRC4X"   , item->GrControl4.x());
1814
                                                docu.writeAttribute("GRC4Y"   , item->GrControl4.y());
1815
                                                docu.writeAttribute("GRC5X"   , item->GrControl5.x());
1816
                                                docu.writeAttribute("GRC5Y"   , item->GrControl5.y());
1817
                                                docu.writeAttribute("GRCOLP4" , item->GrColorP4);
1818
                                                docu.writeAttribute("GRCOLT1" , item->GrCol1transp);
1819
                                                docu.writeAttribute("GRCOLT2" , item->GrCol2transp);
1820
                                                docu.writeAttribute("GRCOLT3" , item->GrCol3transp);
1821
                                                docu.writeAttribute("GRCOLT4" , item->GrCol4transp);
1822
                                                docu.writeAttribute("GRCOLS1" , item->GrCol1Shade);
1823
                                                docu.writeAttribute("GRCOLS2" , item->GrCol1Shade);
1824
                                                docu.writeAttribute("GRCOLS3" , item->GrCol1Shade);
1825
                                                docu.writeAttribute("GRCOLS4" , item->GrCol1Shade);
1826
                                        }
1827
                                }
13746 jghali 1828
                        }
1829
                }
14168 fschmid 1830
                if (!item->gradient().isEmpty())
1831
                        docu.writeAttribute("GRNAME", item->gradient());
14231 fschmid 1832
                if (!item->strokeGradient().isEmpty())
1833
                        docu.writeAttribute("GRNAMES", item->strokeGradient());
14297 fschmid 1834
                if (!item->gradientMask().isEmpty())
1835
                        docu.writeAttribute("GRNAMEM", item->gradientMask());
14231 fschmid 1836
                if (item->GrTypeStroke > 0)
1837
                {
1838
                        docu.writeAttribute("GRSTARTXS", item->GrStrokeStartX);
1839
                        docu.writeAttribute("GRSTARTYS", item->GrStrokeStartY);
1840
                        docu.writeAttribute("GRENDXS", item->GrStrokeEndX);
1841
                        docu.writeAttribute("GRENDYS", item->GrStrokeEndY);
14278 fschmid 1842
                        docu.writeAttribute("GRFOCALXS", item->GrStrokeFocalX);
1843
                        docu.writeAttribute("GRFOCALYS", item->GrStrokeFocalY);
1844
                        docu.writeAttribute("GRSCALES" , item->GrStrokeScale);
14284 fschmid 1845
                        docu.writeAttribute("GRSKEWS" , item->GrStrokeSkew);
14231 fschmid 1846
                }
14168 fschmid 1847
                if (!item->strokePattern().isEmpty())
1848
                {
1849
                        docu.writeAttribute("patternS", item->strokePattern());
14398 fschmid 1850
                        double patternScaleX, patternScaleY, patternOffsetX, patternOffsetY, patternRotation, patternSkewX, patternSkewY, patternSpace;
1851
                        item->strokePatternTransform(patternScaleX, patternScaleY, patternOffsetX, patternOffsetY, patternRotation, patternSkewX, patternSkewY, patternSpace);
1852
                        bool mirrorX, mirrorY, atPath;
14276 fschmid 1853
                        item->strokePatternFlip(mirrorX, mirrorY);
14398 fschmid 1854
                        atPath = item->isStrokePatternToPath();
14168 fschmid 1855
                        docu.writeAttribute("pScaleXS", patternScaleX);
1856
                        docu.writeAttribute("pScaleYS", patternScaleY);
1857
                        docu.writeAttribute("pOffsetXS", patternOffsetX);
1858
                        docu.writeAttribute("pOffsetYS", patternOffsetY);
1859
                        docu.writeAttribute("pRotationS", patternRotation);
14260 fschmid 1860
                        docu.writeAttribute("pSkewXS", patternSkewX);
1861
                        docu.writeAttribute("pSkewYS", patternSkewY);
14398 fschmid 1862
                        docu.writeAttribute("pSpaceS", patternSpace);
14276 fschmid 1863
                        docu.writeAttribute("pMirrorXS" , mirrorX);
1864
                        docu.writeAttribute("pMirrorYS" , mirrorY);
14398 fschmid 1865
                        docu.writeAttribute("pAtPathS" , atPath);
14168 fschmid 1866
                }
14297 fschmid 1867
                if (item->GrMask > 0)
1868
                {
16251 fschmid 1869
                        docu.writeAttribute("GRTYPM", item->GrMask);
14297 fschmid 1870
                        docu.writeAttribute("GRSTARTXM", item->GrMaskStartX);
1871
                        docu.writeAttribute("GRSTARTYM", item->GrMaskStartY);
1872
                        docu.writeAttribute("GRENDXM", item->GrMaskEndX);
1873
                        docu.writeAttribute("GRENDYM", item->GrMaskEndY);
1874
                        docu.writeAttribute("GRFOCALXM", item->GrMaskFocalX);
1875
                        docu.writeAttribute("GRFOCALYM", item->GrMaskFocalY);
1876
                        docu.writeAttribute("GRSCALEM" , item->GrMaskScale);
1877
                        docu.writeAttribute("GRSKEWM" , item->GrMaskSkew);
1878
                }
1879
                if (!item->patternMask().isEmpty())
1880
                {
1881
                        docu.writeAttribute("patternM", item->patternMask());
1882
                        double patternScaleX, patternScaleY, patternOffsetX, patternOffsetY, patternRotation, patternSkewX, patternSkewY;
1883
                        item->maskTransform(patternScaleX, patternScaleY, patternOffsetX, patternOffsetY, patternRotation, patternSkewX, patternSkewY);
1884
                        bool mirrorX, mirrorY;
1885
                        item->maskFlip(mirrorX, mirrorY);
1886
                        docu.writeAttribute("pScaleXM", patternScaleX);
1887
                        docu.writeAttribute("pScaleYM", patternScaleY);
1888
                        docu.writeAttribute("pOffsetXM", patternOffsetX);
1889
                        docu.writeAttribute("pOffsetYM", patternOffsetY);
1890
                        docu.writeAttribute("pRotationM", patternRotation