Subversion Repositories Scribus

Rev

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