00001
00002
00003
00004
00005
00006
00007 #include "scribus134format.h"
00008 #include "scribus134formatimpl.h"
00009
00010 #include "../../formatidlist.h"
00011 #include "commonstrings.h"
00012 #include "missing.h"
00013 #include "prefsmanager.h"
00014 #include "scconfig.h"
00015 #include "scpattern.h"
00016 #include "scribusdoc.h"
00017 #include "scribusview.h"
00018 #include "hyphenator.h"
00019 #include "pageitem_latexframe.h"
00020
00021 #include "units.h"
00022 #include "util.h"
00023 #include "util_math.h"
00024 #include "util_color.h"
00025 #include "scgzfile.h"
00026 #include "scpattern.h"
00027 #include <QCursor>
00028 #include <QFileInfo>
00029 #include <QList>
00030 #include <QDataStream>
00031
00032
00033 bool Scribus134Format::saveFile(const QString & fileName, const FileFormat & )
00034 {
00035 QString text, tf, tf2, tc, tc2;
00036 QString fileDir = QFileInfo(fileName).absolutePath();
00037 m_lastSavedFile = "";
00038 QDomDocument docu("scribus");
00039 QString st="<SCRIBUSUTF8NEW></SCRIBUSUTF8NEW>";
00040 docu.setContent(st);
00041 QDomElement elem=docu.documentElement();
00042 elem.setAttribute("Version", QString(VERSION));
00043 QDomElement dc=docu.createElement("DOCUMENT");
00044 dc.setAttribute("ANZPAGES",m_Doc->DocPages.count());
00045 dc.setAttribute("PAGEWIDTH",m_Doc->pageWidth);
00046 dc.setAttribute("PAGEHEIGHT",m_Doc->pageHeight);
00047 dc.setAttribute("BORDERLEFT",m_Doc->pageMargins.Left);
00048 dc.setAttribute("BORDERRIGHT",m_Doc->pageMargins.Right);
00049 dc.setAttribute("BORDERTOP",m_Doc->pageMargins.Top);
00050 dc.setAttribute("BORDERBOTTOM",m_Doc->pageMargins.Bottom);
00051 dc.setAttribute("BleedTop", m_Doc->bleeds.Top);
00052 dc.setAttribute("BleedLeft", m_Doc->bleeds.Left);
00053 dc.setAttribute("BleedRight", m_Doc->bleeds.Right);
00054 dc.setAttribute("BleedBottom", m_Doc->bleeds.Bottom);
00055 dc.setAttribute("ORIENTATION",m_Doc->PageOri);
00056 dc.setAttribute("PAGESIZE",m_Doc->m_pageSize);
00057 dc.setAttribute("FIRSTNUM",m_Doc->FirstPnum);
00058 dc.setAttribute("BOOK", m_Doc->currentPageLayout);
00059 if(m_Doc->usesAutomaticTextFrames())
00060 dc.setAttribute("AUTOTEXT",1);
00061 dc.setAttribute("AUTOSPALTEN",m_Doc->PageSp);
00062 dc.setAttribute("ABSTSPALTEN",m_Doc->PageSpa);
00063 dc.setAttribute("UNITS",m_Doc->unitIndex());
00064 dc.setAttribute("DFONT",m_Doc->toolSettings.defFont);
00065 dc.setAttribute("DSIZE",m_Doc->toolSettings.defSize / 10.0);
00066 dc.setAttribute("DCOL",m_Doc->toolSettings.dCols);
00067 dc.setAttribute("DGAP",m_Doc->toolSettings.dGap);
00068 dc.setAttribute("TabFill",m_Doc->toolSettings.tabFillChar);
00069 dc.setAttribute("TabWidth",m_Doc->toolSettings.dTabWidth);
00070 dc.setAttribute("AUTHOR",m_Doc->documentInfo.getAuthor());
00071 dc.setAttribute("COMMENTS",m_Doc->documentInfo.getComments());
00072 dc.setAttribute("KEYWORDS",m_Doc->documentInfo.getKeywords());
00073 dc.setAttribute("PUBLISHER",m_Doc->documentInfo.getPublisher());
00074 dc.setAttribute("DOCDATE",m_Doc->documentInfo.getDate());
00075 dc.setAttribute("DOCTYPE",m_Doc->documentInfo.getType());
00076 dc.setAttribute("DOCFORMAT",m_Doc->documentInfo.getFormat());
00077 dc.setAttribute("DOCIDENT",m_Doc->documentInfo.getIdent());
00078 dc.setAttribute("DOCSOURCE",m_Doc->documentInfo.getSource());
00079 dc.setAttribute("DOCLANGINFO",m_Doc->documentInfo.getLangInfo());
00080 dc.setAttribute("DOCRELATION",m_Doc->documentInfo.getRelation());
00081 dc.setAttribute("DOCCOVER",m_Doc->documentInfo.getCover());
00082 dc.setAttribute("DOCRIGHTS",m_Doc->documentInfo.getRights());
00083 dc.setAttribute("DOCCONTRIB",m_Doc->documentInfo.getContrib());
00084 dc.setAttribute("TITLE",m_Doc->documentInfo.getTitle());
00085 dc.setAttribute("VHOCH",m_Doc->typographicSettings.valueSuperScript);
00086 dc.setAttribute("VHOCHSC",m_Doc->typographicSettings.scalingSuperScript);
00087 dc.setAttribute("VTIEF",m_Doc->typographicSettings.valueSubScript);
00088 dc.setAttribute("VTIEFSC",m_Doc->typographicSettings.scalingSubScript);
00089 dc.setAttribute("VKAPIT",m_Doc->typographicSettings.valueSmallCaps);
00090 dc.setAttribute("BASEGRID",m_Doc->typographicSettings.valueBaseGrid);
00091 dc.setAttribute("BASEO", m_Doc->typographicSettings.offsetBaseGrid);
00092 dc.setAttribute("AUTOL", m_Doc->typographicSettings.autoLineSpacing);
00093 dc.setAttribute("UnderlinePos", m_Doc->typographicSettings.valueUnderlinePos);
00094 dc.setAttribute("UnderlineWidth", m_Doc->typographicSettings.valueUnderlineWidth);
00095 dc.setAttribute("StrikeThruPos", m_Doc->typographicSettings.valueStrikeThruPos);
00096 dc.setAttribute("StrikeThruWidth", m_Doc->typographicSettings.valueStrikeThruWidth);
00097 dc.setAttribute("GROUPC",m_Doc->GroupCounter);
00098 dc.setAttribute("HCMS", static_cast<int>(m_Doc->HasCMS));
00099 dc.setAttribute("DPSo", static_cast<int>(m_Doc->CMSSettings.SoftProofOn));
00100 dc.setAttribute("DPSFo", static_cast<int>(m_Doc->CMSSettings.SoftProofFullOn));
00101 dc.setAttribute("DPuse", static_cast<int>(m_Doc->CMSSettings.CMSinUse));
00102 dc.setAttribute("DPgam", static_cast<int>(m_Doc->CMSSettings.GamutCheck));
00103 dc.setAttribute("DPbla", static_cast<int>(m_Doc->CMSSettings.BlackPoint));
00104 dc.setAttribute("DPMo",m_Doc->CMSSettings.DefaultMonitorProfile);
00105 dc.setAttribute("DPPr",m_Doc->CMSSettings.DefaultPrinterProfile);
00106 dc.setAttribute("DPIn",m_Doc->CMSSettings.DefaultImageRGBProfile);
00107 dc.setAttribute("DPInCMYK",m_Doc->CMSSettings.DefaultImageCMYKProfile);
00108 dc.setAttribute("DPIn2",m_Doc->CMSSettings.DefaultSolidColorRGBProfile);
00109 dc.setAttribute("DPIn3",m_Doc->CMSSettings.DefaultSolidColorCMYKProfile);
00110 dc.setAttribute("DISc",m_Doc->CMSSettings.DefaultIntentColors);
00111 dc.setAttribute("DIIm",m_Doc->CMSSettings.DefaultIntentImages);
00112 dc.setAttribute("ALAYER", m_Doc->activeLayer());
00113 dc.setAttribute("LANGUAGE", m_Doc->Language);
00114 dc.setAttribute("MINWORDLEN", m_Doc->MinWordLen);
00115 dc.setAttribute("HYCOUNT", m_Doc->HyCount);
00116 dc.setAttribute("AUTOMATIC", static_cast<int>(m_Doc->Automatic));
00117 dc.setAttribute("AUTOCHECK", static_cast<int>(m_Doc->AutoCheck));
00118 dc.setAttribute("GUIDELOCK", static_cast<int>(m_Doc->GuideLock));
00119 dc.setAttribute("SnapToGuides", static_cast<int>(m_Doc->SnapGuides));
00120 dc.setAttribute("SnapToGrid", static_cast<int>(m_Doc->useRaster));
00121 dc.setAttribute("MINGRID", m_Doc->guidesSettings.minorGrid);
00122 dc.setAttribute("MAJGRID", m_Doc->guidesSettings.majorGrid);
00123 dc.setAttribute("SHOWGRID", static_cast<int>(m_Doc->guidesSettings.gridShown));
00124 dc.setAttribute("SHOWGUIDES", static_cast<int>(m_Doc->guidesSettings.guidesShown));
00125 dc.setAttribute("showcolborders", static_cast<int>(m_Doc->guidesSettings.colBordersShown));
00126 dc.setAttribute("SHOWFRAME", static_cast<int>(m_Doc->guidesSettings.framesShown));
00127 dc.setAttribute("SHOWLAYERM", static_cast<int>(m_Doc->guidesSettings.layerMarkersShown));
00128 dc.setAttribute("SHOWMARGIN", static_cast<int>(m_Doc->guidesSettings.marginsShown));
00129 dc.setAttribute("SHOWBASE", static_cast<int>(m_Doc->guidesSettings.baseShown));
00130 dc.setAttribute("SHOWPICT", static_cast<int>(m_Doc->guidesSettings.showPic));
00131 dc.setAttribute("SHOWControl", static_cast<int>(m_Doc->guidesSettings.showControls));
00132 dc.setAttribute("SHOWLINK", static_cast<int>(m_Doc->guidesSettings.linkShown));
00133 dc.setAttribute("rulerMode", static_cast<int>(m_Doc->guidesSettings.rulerMode));
00134 dc.setAttribute("showrulers", static_cast<int>(m_Doc->guidesSettings.rulersShown));
00135 dc.setAttribute("showBleed", static_cast<int>(m_Doc->guidesSettings.showBleed));
00136 dc.setAttribute("rulerXoffset", m_Doc->rulerXoffset);
00137 dc.setAttribute("rulerYoffset", m_Doc->rulerYoffset);
00138 dc.setAttribute("GuideRad", m_Doc->guidesSettings.guideRad);
00139 dc.setAttribute("GRAB",m_Doc->guidesSettings.grabRad);
00140 dc.setAttribute("POLYC", m_Doc->toolSettings.polyC);
00141 dc.setAttribute("POLYF", m_Doc->toolSettings.polyF);
00142 dc.setAttribute("POLYR", m_Doc->toolSettings.polyR);
00143 dc.setAttribute("POLYFD", m_Doc->toolSettings.polyFd);
00144 dc.setAttribute("POLYS", static_cast<int>(m_Doc->toolSettings.polyS));
00145 dc.setAttribute("AutoSave", static_cast<int>(m_Doc->AutoSave));
00146 dc.setAttribute("AutoSaveTime", m_Doc->AutoSaveTime);
00147 dc.setAttribute("ScratchBottom", m_Doc->scratch.Bottom);
00148 dc.setAttribute("ScratchLeft", m_Doc->scratch.Left);
00149 dc.setAttribute("ScratchRight", m_Doc->scratch.Right);
00150 dc.setAttribute("ScratchTop", m_Doc->scratch.Top);
00151 dc.setAttribute("GapHorizontal", m_Doc->GapHorizontal);
00152 dc.setAttribute("GapVertical", m_Doc->GapVertical);
00153 dc.setAttribute("StartArrow", m_Doc->toolSettings.dStartArrow);
00154 dc.setAttribute("EndArrow", m_Doc->toolSettings.dEndArrow);
00155 dc.setAttribute("PEN",m_Doc->toolSettings.dPen);
00156 dc.setAttribute("BRUSH",m_Doc->toolSettings.dBrush);
00157 dc.setAttribute("PENLINE",m_Doc->toolSettings.dPenLine);
00158 dc.setAttribute("PENTEXT",m_Doc->toolSettings.dPenText);
00159 dc.setAttribute("StrokeText",m_Doc->toolSettings.dStrokeText);
00160 dc.setAttribute("TextBackGround", m_Doc->toolSettings.dTextBackGround);
00161 dc.setAttribute("TextLineColor", m_Doc->toolSettings.dTextLineColor);
00162 dc.setAttribute("TextBackGroundShade", m_Doc->toolSettings.dTextBackGroundShade);
00163 dc.setAttribute("TextLineShade", m_Doc->toolSettings.dTextLineShade);
00164 dc.setAttribute("TextPenShade", m_Doc->toolSettings.dTextPenShade);
00165 dc.setAttribute("TextStrokeShade", m_Doc->toolSettings.dTextStrokeShade);
00166 dc.setAttribute("STIL",m_Doc->toolSettings.dLineArt);
00167 dc.setAttribute("STILLINE",m_Doc->toolSettings.dLstyleLine);
00168 dc.setAttribute("WIDTH",m_Doc->toolSettings.dWidth);
00169 dc.setAttribute("WIDTHLINE",m_Doc->toolSettings.dWidthLine);
00170 dc.setAttribute("PENSHADE",m_Doc->toolSettings.dShade2);
00171 dc.setAttribute("LINESHADE",m_Doc->toolSettings.dShadeLine);
00172 dc.setAttribute("BRUSHSHADE",m_Doc->toolSettings.dShade);
00173 dc.setAttribute("MAGMIN",m_Doc->toolSettings.magMin);
00174 dc.setAttribute("MAGMAX",m_Doc->toolSettings.magMax);
00175 dc.setAttribute("MAGSTEP",m_Doc->toolSettings.magStep);
00176 dc.setAttribute("CPICT",m_Doc->toolSettings.dBrushPict);
00177 dc.setAttribute("PICTSHADE",m_Doc->toolSettings.shadePict);
00178 dc.setAttribute("PICTSCX",m_Doc->toolSettings.scaleX);
00179 dc.setAttribute("PICTSCY",m_Doc->toolSettings.scaleY);
00180 dc.setAttribute("PSCALE", static_cast<int>(m_Doc->toolSettings.scaleType));
00181 dc.setAttribute("PASPECT", static_cast<int>(m_Doc->toolSettings.aspectRatio));
00182 dc.setAttribute("EmbeddedPath", static_cast<int>(m_Doc->toolSettings.useEmbeddedPath));
00183 dc.setAttribute("HalfRes", m_Doc->toolSettings.lowResType);
00184 dc.setAttribute("dispX", m_Doc->toolSettings.dispX);
00185 dc.setAttribute("dispY", m_Doc->toolSettings.dispY);
00186 dc.setAttribute("constrain", m_Doc->toolSettings.constrain);
00187 dc.setAttribute("MINORC",m_Doc->guidesSettings.minorColor.name());
00188 dc.setAttribute("MAJORC",m_Doc->guidesSettings.majorColor.name());
00189 dc.setAttribute("GuideC", m_Doc->guidesSettings.guideColor.name());
00190 dc.setAttribute("BaseC", m_Doc->guidesSettings.baseColor.name());
00191 dc.setAttribute("GuideZ", m_Doc->guidesSettings.guideRad);
00192 dc.setAttribute("BACKG", static_cast<int>(m_Doc->guidesSettings.before));
00193 dc.setAttribute("PAGEC",m_Doc->papColor.name());
00194 dc.setAttribute("MARGC",m_Doc->guidesSettings.margColor.name());
00195 dc.setAttribute("RANDF", static_cast<int>(m_Doc->marginColored));
00196 dc.setAttribute("currentProfile", m_Doc->curCheckProfile);
00197 elem.appendChild(dc);
00198 writeCheckerProfiles(docu);
00199 writeLinestyles(docu);
00200 writeJavascripts(docu);
00201 writeBookmarks(docu);
00202 writeColors(docu);
00203 writeHyphenatorLists(docu);
00204 writePStyles(docu);
00205 writeCStyles(docu);
00206 writeLayers(docu);
00207 writePrintOptions(docu);
00208 writePdfOptions(docu);
00209 writeDocItemAttributes(docu);
00210 writeTOC(docu);
00211 writePageSets(docu);
00212 writeSections(docu);
00213 writePatterns(docu, fileDir);
00214 writeContent (docu, fileDir);
00215
00223
00224 srand(time(NULL));
00225 long randt = 0, randn = 1 + (int) (((double) rand() / ((double) RAND_MAX + 1)) * 10000);
00226 QString tmpFileName = QString("%1.%2").arg(fileName).arg(randn);
00227 while (QFile::exists(tmpFileName) && (randt < 100))
00228 {
00229 randn = 1 + (int) (((double) rand() / ((double) RAND_MAX + 1)) * 10000);
00230 tmpFileName = QString("%1.%2").arg(fileName).arg(randn);
00231 ++randt;
00232 }
00233 if (QFile::exists(tmpFileName))
00234 return false;
00235
00236 bool writeSucceed = false;
00237 static const char xmlpi[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
00238 QByteArray cs = docu.toByteArray();
00239 if(fileName.right(2) == "gz")
00240 {
00241 ScGzFile gzf(tmpFileName, cs);
00242 writeSucceed = gzf.write(xmlpi);
00243 }
00244 else
00245 {
00246 QFile f(tmpFileName);
00247 if(f.open(QIODevice::WriteOnly))
00248 {
00249 QDataStream s(&f);
00250 int xmlpilen = strlen(xmlpi);
00251 int bytesWritten1 = s.writeRawData(xmlpi, xmlpilen);
00252 int bytesWritten2 = s.writeRawData(cs, cs.length());
00253 bool writeSuccess1 = (bytesWritten1 > 0 && (bytesWritten1 == xmlpilen));
00254 bool writeSuccess2 = (bytesWritten2 > 0 && (bytesWritten2 == cs.length()));
00255 writeSucceed = (writeSuccess1 && writeSuccess2 && f.error() == QFile::NoError);
00256 f.close();
00257 }
00258 }
00259 if (writeSucceed)
00260 {
00261 if (QFile::exists(fileName))
00262 writeSucceed = QFile::remove(fileName) ? QFile::rename(tmpFileName, fileName) : false;
00263 else
00264 writeSucceed = QFile::rename(tmpFileName, fileName);
00265 m_lastSavedFile = writeSucceed ? fileName : tmpFileName;
00266 }
00267 else if (QFile::exists(tmpFileName))
00268 QFile::remove(tmpFileName);
00269 if (writeSucceed)
00270 QFile::remove(tmpFileName);
00271 return writeSucceed;
00272 }
00273
00274 void Scribus134Format::writeCheckerProfiles(QDomDocument & docu)
00275 {
00276 QDomElement dc=docu.documentElement().firstChild().toElement();
00277
00278 CheckerPrefsList::Iterator itcp;
00279 CheckerPrefsList::Iterator itcpend=m_Doc->checkerProfiles.end();
00280 for (itcp = m_Doc->checkerProfiles.begin(); itcp != itcpend; ++itcp)
00281 {
00282 QDomElement dc79a=docu.createElement("CheckProfile");
00283 dc79a.setAttribute("Name",itcp.key());
00284 dc79a.setAttribute("ignoreErrors", static_cast<int>(itcp.value().ignoreErrors));
00285 dc79a.setAttribute("autoCheck", static_cast<int>(itcp.value().autoCheck));
00286 dc79a.setAttribute("checkGlyphs", static_cast<int>(itcp.value().checkGlyphs));
00287 dc79a.setAttribute("checkOrphans", static_cast<int>(itcp.value().checkOrphans));
00288 dc79a.setAttribute("checkOverflow", static_cast<int>(itcp.value().checkOverflow));
00289 dc79a.setAttribute("checkPictures", static_cast<int>(itcp.value().checkPictures));
00290 dc79a.setAttribute("checkResolution", static_cast<int>(itcp.value().checkResolution));
00291 dc79a.setAttribute("checkTransparency", static_cast<int>(itcp.value().checkTransparency));
00292 dc79a.setAttribute("minResolution",itcp.value().minResolution);
00293 dc79a.setAttribute("maxResolution",itcp.value().maxResolution);
00294 dc79a.setAttribute("checkAnnotations", static_cast<int>(itcp.value().checkAnnotations));
00295 dc79a.setAttribute("checkRasterPDF", static_cast<int>(itcp.value().checkRasterPDF));
00296 dc79a.setAttribute("checkForGIF", static_cast<int>(itcp.value().checkForGIF));
00297 dc79a.setAttribute("ignoreOffLayers", static_cast<int>(itcp.value().ignoreOffLayers));
00298 dc.appendChild(dc79a);
00299 }
00300 }
00301
00302 void Scribus134Format::writeLinestyles(QDomDocument & docu)
00303 {
00304 QDomElement dc=docu.documentElement().firstChild().toElement();
00305
00306 QMap<QString,multiLine>::Iterator itMU;
00307 for (itMU = m_Doc->MLineStyles.begin(); itMU != m_Doc->MLineStyles.end(); ++itMU)
00308 {
00309 QDomElement MuL=docu.createElement("MultiLine");
00310 MuL.setAttribute("Name",itMU.key());
00311 multiLine ml = itMU.value();
00312 multiLine::iterator itMU2;
00313 for (itMU2 = ml.begin(); itMU2 != ml.end(); ++itMU2)
00314 {
00315 QDomElement SuL=docu.createElement("SubLine");
00316 SuL.setAttribute("Color", (*itMU2).Color);
00317 SuL.setAttribute("Shade", (*itMU2).Shade);
00318 SuL.setAttribute("Dash", (*itMU2).Dash);
00319 SuL.setAttribute("LineEnd", (*itMU2).LineEnd);
00320 SuL.setAttribute("LineJoin", (*itMU2).LineJoin);
00321 SuL.setAttribute("Width", (*itMU2).Width);
00322 SuL.setAttribute("Shortcut", ml.shortcut);
00323 MuL.appendChild(SuL);
00324 }
00325 dc.appendChild(MuL);
00326 }
00327 QList<ArrowDesc>::Iterator itar;
00328 for (itar = m_Doc->arrowStyles.begin(); itar != m_Doc->arrowStyles.end(); ++itar)
00329 {
00330 if ((*itar).userArrow)
00331 {
00332 QDomElement ar=docu.createElement("Arrows");
00333 ar.setAttribute("NumPoints", (*itar).points.size());
00334 QString arp = "";
00335 QString tmp, tmpy;
00336 double xa, ya;
00337 for (uint nxx = 0; nxx < (*itar).points.size(); ++nxx)
00338 {
00339 (*itar).points.point(nxx, &xa, &ya);
00340 arp += tmp.setNum(xa) + " " + tmpy.setNum(ya) + " ";
00341 }
00342 ar.setAttribute("Points", arp);
00343 ar.setAttribute("Name", (*itar).name);
00344 dc.appendChild(ar);
00345 }
00346 }
00347 }
00348
00349
00350 void Scribus134Format::writeJavascripts(QDomDocument & docu)
00351 {
00352 QDomElement dc=docu.documentElement().firstChild().toElement();
00353
00354 QMap<QString,QString>::Iterator itja;
00355 for (itja = m_Doc->JavaScripts.begin(); itja != m_Doc->JavaScripts.end(); ++itja)
00356 {
00357 QDomElement jav=docu.createElement("JAVA");
00358 jav.setAttribute("NAME",itja.key());
00359 jav.setAttribute("SCRIPT",itja.value());
00360 dc.appendChild(jav);
00361 }
00362
00363 }
00364
00365
00366 void Scribus134Format::writeBookmarks(QDomDocument & docu)
00367 {
00368 QDomElement dc=docu.documentElement().firstChild().toElement();
00369
00370 QList<ScribusDoc::BookMa>::Iterator itbm;
00371 for (itbm = m_Doc->BookMarks.begin(); itbm != m_Doc->BookMarks.end(); ++itbm)
00372 {
00373 QDomElement fn=docu.createElement("Bookmark");
00374 fn.setAttribute("Title",(*itbm).Title);
00375 fn.setAttribute("Text",(*itbm).Text);
00376 fn.setAttribute("Aktion",(*itbm).Aktion);
00377 fn.setAttribute("ItemNr", (*itbm).ItemNr);
00378 fn.setAttribute("Element", (*itbm).PageObject->ItemNr);
00379 fn.setAttribute("First", (*itbm).First);
00380 fn.setAttribute("Last", (*itbm).Last);
00381 fn.setAttribute("Prev", (*itbm).Prev);
00382 fn.setAttribute("Next", (*itbm).Next);
00383 fn.setAttribute("Parent", (*itbm).Parent);
00384 dc.appendChild(fn);
00385 }
00386 }
00387
00388
00389 void Scribus134Format::writeColors(QDomDocument & docu)
00390 {
00391 QDomElement dc=docu.documentElement().firstChild().toElement();
00392
00393 ColorList::Iterator itc;
00394 for (itc = m_Doc->PageColors.begin(); itc != m_Doc->PageColors.end(); ++itc)
00395 {
00396 QDomElement co=docu.createElement("COLOR");
00397 co.setAttribute("NAME",itc.key());
00398 if (m_Doc->PageColors[itc.key()].getColorModel() == colorModelRGB)
00399 co.setAttribute("RGB",m_Doc->PageColors[itc.key()].nameRGB());
00400 else
00401 co.setAttribute("CMYK",m_Doc->PageColors[itc.key()].nameCMYK());
00402 co.setAttribute("Spot",static_cast<int>(m_Doc->PageColors[itc.key()].isSpotColor()));
00403 co.setAttribute("Register",static_cast<int>(m_Doc->PageColors[itc.key()].isRegistrationColor()));
00404 dc.appendChild(co);
00405 }
00406
00407 }
00408
00409 void Scribus134Format::writeHyphenatorLists(QDomDocument &docu)
00410 {
00411 QDomElement dc=docu.documentElement().firstChild().toElement();
00412 QDomElement rde = docu.createElement("HYPHEN");
00413 for (QHash<QString, QString>::Iterator hyit = m_Doc->docHyphenator->specialWords.begin(); hyit != m_Doc->docHyphenator->specialWords.end(); ++hyit)
00414 {
00415 QDomElement hyelm = docu.createElement("EXCEPTION");
00416 hyelm.setAttribute("WORD", hyit.key());
00417 hyelm.setAttribute("HYPHENATED", hyit.value());
00418 rde.appendChild(hyelm);
00419 }
00420 for (QSet<QString>::Iterator hyit2 = m_Doc->docHyphenator->ignoredWords.begin(); hyit2 != m_Doc->docHyphenator->ignoredWords.end(); ++hyit2)
00421 {
00422 QDomElement hyelm2 = docu.createElement("IGNORE");
00423 hyelm2.setAttribute("WORD", (*hyit2));
00424 rde.appendChild(hyelm2);
00425 }
00426 dc.appendChild(rde);
00427 }
00428
00429 void Scribus134Format::writePStyles(QDomDocument & docu)
00430 {
00431 QDomElement dc=docu.documentElement().firstChild().toElement();
00432
00433
00434 {
00435 for (int ff = 0; ff < m_Doc->paragraphStyles().count(); ++ff)
00436 {
00437 QDomElement fo=docu.createElement("STYLE");
00438 putPStyle(docu, fo, m_Doc->paragraphStyles()[ff]);
00439 dc.appendChild(fo);
00440 }
00441 }
00442 }
00443
00444 void Scribus134Format::putPStyle(QDomDocument & docu, QDomElement & fo, const ParagraphStyle & style)
00445 {
00446 if ( ! style.name().isEmpty() )
00447 fo.setAttribute("NAME", style.name());
00448 if ( ! style.parent().isEmpty())
00449 fo.setAttribute("PARENT", style.parent());
00450
00451 if ( ! style.isInhAlignment())
00452 fo.setAttribute("ALIGN", style.alignment());
00453 if ( ! style.isInhLineSpacingMode())
00454 fo.setAttribute("LINESPMode", style.lineSpacingMode());
00455 if ( ! style.isInhLineSpacing())
00456 fo.setAttribute("LINESP", style.lineSpacing());
00457 if ( ! style.isInhLeftMargin())
00458 fo.setAttribute("INDENT", style.leftMargin());
00459 if ( ! style.isInhRightMargin())
00460 fo.setAttribute("RMARGIN", style.rightMargin());
00461 if ( ! style.isInhFirstIndent())
00462 fo.setAttribute("FIRST", style.firstIndent());
00463 if ( ! style.isInhGapBefore())
00464 fo.setAttribute("VOR", style.gapBefore());
00465 if ( ! style.isInhGapAfter())
00466 fo.setAttribute("NACH", style.gapAfter());
00467 if ( ! style.isInhHasDropCap())
00468 fo.setAttribute("DROP", static_cast<int>(style.hasDropCap()));
00469 if ( ! style.isInhDropCapLines())
00470 fo.setAttribute("DROPLIN", style.dropCapLines());
00471 if ( ! style.isInhDropCapOffset())
00472 fo.setAttribute("DROPDIST", style.dropCapOffset());
00473 if ( ! style.isInhOpticalMargins())
00474 fo.setAttribute("OpticalMargins", style.opticalMargins());
00475 if ( ! style.isInhHyphenationMode())
00476 fo.setAttribute("HyphenationMode", style.hyphenationMode());
00477 if ( ! style.isInhMinWordTracking())
00478 fo.setAttribute("MinWordTrack", style.minWordTracking());
00479 if ( ! style.isInhMinGlyphExtension())
00480 fo.setAttribute("MinGlyphShrink", style.minGlyphExtension());
00481 if ( ! style.isInhMaxGlyphExtension())
00482 fo.setAttribute("MaxGlyphExtend", style.maxGlyphExtension());
00483
00484 if ( ! style.isInhTabValues())
00485 {
00486 for (int a = 0; a < style.tabValues().count(); ++a)
00487 {
00488 QDomElement tabs = docu.createElement("Tabs");
00489 tabs.setAttribute("Type", (style.tabValues().at(a)).tabType);
00490 tabs.setAttribute("Pos", (style.tabValues().at(a)).tabPosition);
00491 QString tabCh = "";
00492 if (!(style.tabValues().at(a)).tabFillChar.isNull())
00493 tabCh = QString((style.tabValues().at(a)).tabFillChar);
00494 tabs.setAttribute("Fill", tabCh);
00495 fo.appendChild(tabs);
00496 }
00497 }
00498 if ( ! style.shortcut().isEmpty() )
00499 fo.setAttribute("PSHORTCUT", style.shortcut());
00500
00501 putCStyle(docu, fo, style.charStyle());
00502
00503 }
00504
00505
00506 void Scribus134Format::writeCStyles(QDomDocument & docu)
00507 {
00508 QDomElement dc=docu.documentElement().firstChild().toElement();
00509
00510 for (int ff = 0; ff < m_Doc->charStyles().count(); ++ff)
00511 {
00512 QDomElement fo=docu.createElement("CHARSTYLE");
00513 putCStyle(docu, fo, m_Doc->charStyles()[ff]);
00514 dc.appendChild(fo);
00515 }
00516 }
00517
00518 void Scribus134Format::putCStyle(QDomDocument & docu, QDomElement & fo, const CharStyle & style)
00519 {
00520 if ( ! style.name().isEmpty() )
00521 fo.setAttribute("CNAME", style.name());
00522 if ( ! style.parent().isEmpty() )
00523 fo.setAttribute("CPARENT", style.parent());
00524 if ( ! style.isInhFont())
00525 fo.setAttribute("FONT", style.font().scName());
00526 if ( ! style.isInhFontSize())
00527 fo.setAttribute("FONTSIZE", style.fontSize() / 10.0);
00528 if ( ! style.isInhFeatures())
00529 fo.setAttribute("FEATURES", style.features().join(" "));
00530 if ( ! style.isInhFillColor())
00531 fo.setAttribute("FCOLOR", style.fillColor());
00532 if ( ! style.isInhFillShade())
00533 fo.setAttribute("FSHADE", style.fillShade());
00534 if ( ! style.isInhStrokeColor())
00535 fo.setAttribute("SCOLOR", style.strokeColor());
00536 if ( ! style.isInhStrokeShade())
00537 fo.setAttribute("SSHADE", style.strokeShade());
00538 if ( ! style.isInhShadowXOffset())
00539 fo.setAttribute("TXTSHX", style.shadowXOffset() / 10.0);
00540 if ( ! style.isInhShadowYOffset())
00541 fo.setAttribute("TXTSHY", style.shadowYOffset() / 10.0);
00542 if ( ! style.isInhOutlineWidth())
00543 fo.setAttribute("TXTOUT", style.outlineWidth() / 10.0);
00544 if ( ! style.isInhUnderlineOffset())
00545 fo.setAttribute("TXTULP", style.underlineOffset() / 10.0);
00546 if ( ! style.isInhUnderlineWidth())
00547 fo.setAttribute("TXTULW", style.underlineWidth() / 10.0);
00548 if ( ! style.isInhStrikethruOffset())
00549 fo.setAttribute("TXTSTP", style.strikethruOffset() / 10.0);
00550 if ( ! style.isInhStrikethruWidth())
00551 fo.setAttribute("TXTSTW", style.strikethruWidth() / 10.0);
00552 if ( ! style.isInhScaleH())
00553 fo.setAttribute("SCALEH", style.scaleH() / 10.0);
00554 if ( ! style.isInhScaleV())
00555 fo.setAttribute("SCALEV", style.scaleV() / 10.0);
00556 if ( ! style.isInhBaselineOffset())
00557 fo.setAttribute("BASEO", style.baselineOffset() / 10.0);
00558 if ( ! style.isInhTracking())
00559 fo.setAttribute("KERN", style.tracking() / 10.0);
00560 if ( ! style.isInhWordTracking())
00561 fo.setAttribute("wordTrack", style.wordTracking());
00562 if ( ! style.shortcut().isEmpty() )
00563 fo.setAttribute("SHORTCUT", style.shortcut());
00564 }
00565
00566 void Scribus134Format::writeLayers(QDomDocument & docu)
00567 {
00568 QDomElement dc=docu.documentElement().firstChild().toElement();
00569
00570 uint layerCount=m_Doc->layerCount();
00571 for (uint lay = 0; lay < layerCount; ++lay)
00572 {
00573 QDomElement la = docu.createElement("LAYERS");
00574 la.setAttribute("NUMMER",m_Doc->Layers[lay].LNr);
00575 la.setAttribute("LEVEL",m_Doc->Layers[lay].Level);
00576 la.setAttribute("NAME",m_Doc->Layers[lay].Name);
00577 la.setAttribute("SICHTBAR", static_cast<int>(m_Doc->Layers[lay].isViewable));
00578 la.setAttribute("DRUCKEN", static_cast<int>(m_Doc->Layers[lay].isPrintable));
00579 la.setAttribute("EDIT", static_cast<int>(m_Doc->Layers[lay].isEditable));
00580 la.setAttribute("FLOW", static_cast<int>(m_Doc->Layers[lay].flowControl));
00581 la.setAttribute("TRANS", m_Doc->Layers[lay].transparency);
00582 la.setAttribute("BLEND", m_Doc->Layers[lay].blendMode);
00583 la.setAttribute("OUTL", static_cast<int>(m_Doc->Layers[lay].outlineMode));
00584 la.setAttribute("LAYERC",m_Doc->Layers[lay].markerColor.name());
00585 dc.appendChild(la);
00586 }
00587 }
00588
00589 void Scribus134Format::writePrintOptions(QDomDocument & docu)
00590 {
00591 QDomElement dc=docu.documentElement().firstChild().toElement();
00592
00593 QDomElement pri = docu.createElement("Printer");
00594 pri.setAttribute("firstUse", static_cast<int>(m_Doc->Print_Options.firstUse));
00595 pri.setAttribute("toFile", static_cast<int>(m_Doc->Print_Options.toFile));
00596 pri.setAttribute("useAltPrintCommand", static_cast<int>(m_Doc->Print_Options.useAltPrintCommand));
00597 pri.setAttribute("outputSeparations", static_cast<int>(m_Doc->Print_Options.outputSeparations));
00598 pri.setAttribute("useSpotColors", static_cast<int>(m_Doc->Print_Options.useSpotColors));
00599 pri.setAttribute("useColor", static_cast<int>(m_Doc->Print_Options.useColor));
00600 pri.setAttribute("mirrorH", static_cast<int>(m_Doc->Print_Options.mirrorH));
00601 pri.setAttribute("mirrorV", static_cast<int>(m_Doc->Print_Options.mirrorV));
00602 pri.setAttribute("useICC", static_cast<int>(m_Doc->Print_Options.useICC));
00603 pri.setAttribute("doGCR", static_cast<int>(m_Doc->Print_Options.doGCR));
00604 pri.setAttribute("doClip", static_cast<int>(m_Doc->Print_Options.doClip));
00605 pri.setAttribute("setDevParam", static_cast<int>(m_Doc->Print_Options.setDevParam));
00606 pri.setAttribute("doOverprint", static_cast<int>(m_Doc->Print_Options.doOverprint));
00607 pri.setAttribute("cropMarks", static_cast<int>(m_Doc->Print_Options.cropMarks));
00608 pri.setAttribute("bleedMarks", static_cast<int>(m_Doc->Print_Options.bleedMarks));
00609 pri.setAttribute("registrationMarks", static_cast<int>(m_Doc->Print_Options.registrationMarks));
00610 pri.setAttribute("colorMarks", static_cast<int>(m_Doc->Print_Options.colorMarks));
00611 pri.setAttribute("PSLevel", (m_Doc->Print_Options.prnEngine < WindowsGDI) ? m_Doc->Print_Options.prnEngine : PostScript3);
00612 pri.setAttribute("PDLanguage" , m_Doc->Print_Options.prnEngine);
00613 pri.setAttribute("markOffset" , m_Doc->Print_Options.markOffset);
00614 pri.setAttribute("BleedTop" , m_Doc->Print_Options.bleeds.Top);
00615 pri.setAttribute("BleedLeft" , m_Doc->Print_Options.bleeds.Left);
00616 pri.setAttribute("BleedRight" , m_Doc->Print_Options.bleeds.Right);
00617 pri.setAttribute("BleedBottom", m_Doc->Print_Options.bleeds.Bottom);
00618 pri.setAttribute("printer" , m_Doc->Print_Options.printer);
00619 pri.setAttribute("filename", m_Doc->Print_Options.filename);
00620 pri.setAttribute("separationName", m_Doc->Print_Options.separationName);
00621 pri.setAttribute("printerCommand", m_Doc->Print_Options.printerCommand);
00622 for (int p = 0; p < m_Doc->Print_Options.allSeparations.count(); ++p)
00623 {
00624 QDomElement pri2 = docu.createElement("Separation");
00625 pri2.setAttribute("Name", m_Doc->Print_Options.allSeparations[p]);
00626 pri.appendChild(pri2);
00627 }
00628 dc.appendChild(pri);
00629 }
00630
00631 void Scribus134Format::writePdfOptions(QDomDocument & docu)
00632 {
00633 QDomElement dc=docu.documentElement().firstChild().toElement();
00634
00635 QDomElement pdf = docu.createElement("PDF");
00636 pdf.setAttribute("firstUse", static_cast<int>(m_Doc->PDF_Options.firstUse));
00637 pdf.setAttribute("Thumbnails", static_cast<int>(m_Doc->PDF_Options.Thumbnails));
00638 pdf.setAttribute("Articles", static_cast<int>(m_Doc->PDF_Options.Articles));
00639 pdf.setAttribute("Bookmarks", static_cast<int>(m_Doc->PDF_Options.Bookmarks));
00640 pdf.setAttribute("Compress", static_cast<int>(m_Doc->PDF_Options.Compress));
00641 pdf.setAttribute("CMethod", m_Doc->PDF_Options.CompressMethod);
00642 pdf.setAttribute("Quality", m_Doc->PDF_Options.Quality);
00643 pdf.setAttribute("MirrorH", static_cast<int>(m_Doc->PDF_Options.MirrorH));
00644 pdf.setAttribute("MirrorV", static_cast<int>(m_Doc->PDF_Options.MirrorV));
00645 pdf.setAttribute("Clip", static_cast<int>(m_Doc->PDF_Options.doClip));
00646 pdf.setAttribute("RotateDeg", static_cast<int>(m_Doc->PDF_Options.RotateDeg));
00647 pdf.setAttribute("PresentMode", static_cast<int>(m_Doc->PDF_Options.PresentMode));
00648 pdf.setAttribute("RecalcPic", static_cast<int>(m_Doc->PDF_Options.RecalcPic));
00649 pdf.setAttribute("Grayscale", static_cast<int>(m_Doc->PDF_Options.isGrayscale));
00650 pdf.setAttribute("RGBMo