Scribus
Open source desktop publishing at your fingertips
scribus150format.h
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 #ifndef SCRIBUS134FORMAT_H
8 #define SCRIBUS134FORMAT_H
9 
10 #include "pluginapi.h"
11 #include "loadsaveplugin.h"
12 #include "notesstyles.h"
13 #include "scfonts.h"
14 #include "scribusstructs.h"
15 #include "styles/styleset.h"
16 #include "selection.h"
17 
18 #include <QList>
19 #include <QMap>
20 #include <QProgressBar>
21 #include <QString>
22 
23 class QIODevice;
24 
25 class ColorList;
26 class multiLine;
27 class ScLayer;
28 class ScribusDoc;
29 //struct ScribusDoc::BookMa;
31 class ScXmlStreamReader;
32 class ScXmlStreamWriter;
33 class StoryText;
34 
35 class PLUGIN_API Scribus150Format : public LoadSavePlugin
36 {
37  Q_OBJECT
38 
39  public:
40  // Standard plugin implementation
42  virtual ~Scribus150Format();
43  virtual const QString fullTrName() const;
44  virtual const AboutData* getAboutData() const;
45  virtual void deleteAboutData(const AboutData* about) const;
46  virtual void languageChange();
47  //Not the same as readSLA. This one only reads max 4k of the file for speed.
48  virtual bool fileSupported(QIODevice* file, const QString & fileName=QString::null) const;
49 
50  virtual bool loadFile(const QString & fileName, const FileFormat & fmt, int flags, int index = 0);
51  virtual bool saveFile(const QString & fileName, const FileFormat & fmt);
52  virtual bool savePalette(const QString & fileName);
53  virtual QString saveElements(double xp, double yp, double wp, double hp, Selection* selection, QByteArray &prevData);
54  virtual bool loadPalette(const QString & fileName);
55  virtual bool loadElements(const QString & data, QString fileDir, int toLayer, double Xp_in, double Yp_in, bool loc);
57 
58  // Special features - .sla page extraction support
59  virtual bool loadPage(const QString & fileName, int pageNumber, bool Mpage, QString renamedPageName=QString::null);
60  virtual bool readStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles);
61  virtual bool readCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles);
62  virtual bool readLineStyles(const QString& fileName, QHash<QString, multiLine> *Sty);
63  virtual bool readColors(const QString& fileName, ColorList & colors);
64  virtual bool readPageCount(const QString& fileName, int *num1, int *num2, QStringList & masterPageNames);
65  virtual void getReplacedFontData(bool & getNewReplacement, QMap<QString,QString> &getReplacedFonts, QList<ScFace> &getDummyScFaces);
66 
67  private:
68 
69  enum ItemSelection {
70  ItemSelectionMaster = 0,
71  ItemSelectionPage = 1,
72  ItemSelectionFrame = 2,
73  ItemSelectionPattern= 3,
74  ItemSelectionGroup = 4,
75  ItemSelectionElements = 5
76  };
77 
78  class ItemInfo
79  {
80  public:
81  ItemInfo(void) { groupLastItem = nextItem = ownLink = ownWeld = ownNr = itemID = 0; item = NULL; isGroupFlag = isWeldFlag = false; };
82  PageItem* item;
83  int groupLastItem;
84  int nextItem;
85  int ownLink;
86  int ownWeld;
87  int ownNr;
88  int itemID;
89  bool isGroupFlag;
90  bool isWeldFlag;
91  };
92 
93  void registerFormats();
94 
95  QIODevice* slaReader(const QString & fileName);
96 
97  void getStyle(ParagraphStyle& style, ScXmlStreamReader& reader, StyleSet<ParagraphStyle> *docParagraphStyles, ScribusDoc* doc, bool fl);
98 
99  void readDocAttributes(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
100  void readCMSSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
101  void readDocumentInfo(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
102  void readGuideSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
103  void readToolSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
104  void readTypographicSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
105 
106  bool readArrows(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
107  bool readBookMark(ScribusDoc::BookMa& bookmark, int& elem, ScXmlStreamAttributes& attrs);
108  bool readCheckProfile(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
109  bool readColor(ColorList& colors, ScXmlStreamAttributes& attrs);
110  bool readGradient(ScribusDoc *doc, VGradient &gra, ScXmlStreamReader& reader);
111  void readCharacterStyleAttrs(ScribusDoc *doc, ScXmlStreamAttributes& attrs, CharStyle & newStyle);
112  void readNamedCharacterStyleAttrs(ScribusDoc *doc, ScXmlStreamAttributes& attrs, CharStyle & newStyle);
113  bool readDocItemAttributes(ScribusDoc *doc, ScXmlStreamReader& reader);
114  bool readHyphen(ScribusDoc *doc, ScXmlStreamReader& reader);
115  bool readStoryText(ScribusDoc *doc, ScXmlStreamReader& reader, PageItem* item);
116  bool readItemText(PageItem* item, ScXmlStreamAttributes& attrs, LastStyles* last);
117  bool readItemTableData(PageItem_Table* item, ScXmlStreamReader& reader, ScribusDoc *doc);
118  bool readItemTableCell(PageItem_Table* item, ScXmlStreamReader& reader, ScribusDoc *doc);
119  bool readLatexInfo(PageItem_LatexFrame* item, ScXmlStreamReader& reader);
120  void readLayers(ScLayer& layer, ScXmlStreamAttributes& attrs);
121  bool readMultiline(multiLine& ml, ScXmlStreamReader& reader);
122  bool readObject(ScribusDoc* doc, ScXmlStreamReader& reader, ItemInfo& info, const QString& baseDir, bool loadPage);
123  bool readPage(ScribusDoc* doc, ScXmlStreamReader& reader);
124  bool readPageItemAttributes(PageItem* item, ScXmlStreamReader& reader);
125  bool readPageSets(ScribusDoc* doc, ScXmlStreamReader& reader);
126  void readParagraphStyle(ScribusDoc *doc, ScXmlStreamReader& reader, ParagraphStyle& newStyle);
127  void readTableStyle(ScribusDoc *doc, ScXmlStreamReader& reader, TableStyle& newStyle);
128  void readCellStyle(ScribusDoc *doc, ScXmlStreamReader& reader, CellStyle& newStyle);
129  bool readPattern(ScribusDoc* doc, ScXmlStreamReader& reader, const QString& baseDir);
130  bool readPDFOptions(ScribusDoc* doc, ScXmlStreamReader& reader);
131  bool readPrinterOptions(ScribusDoc* doc, ScXmlStreamReader& reader);
132  bool readSections(ScribusDoc* doc, ScXmlStreamReader& reader);
133  bool readTableOfContents(ScribusDoc* doc, ScXmlStreamReader& reader);
134  bool readNotes(ScribusDoc* doc, ScXmlStreamReader& reader);
135  bool readNotesStyles(ScribusDoc* doc, ScXmlStreamReader& reader);
136  bool readNotesFrames(ScXmlStreamReader &reader);
137  bool readMarks(ScribusDoc* doc, ScXmlStreamReader& reader);
138 
139  //lists of items and marks with names only, which need update to pointers
140  QMap<Mark*, int> markeredItemsMap;
141  QMap<Mark*, QMap<QString, MarkType> > markeredMarksMap;
142  QMap<QString, int> nsetRangeItemNamesMap;
143  QMap<QString, TextNote*> notesMasterMarks;
144  QMap<TextNote*, QString> notesNSets;
145  struct NoteFrameData {
146  QString NSname;
147  int myID;
148  int itemID;
149  int index;
150  NumerationRange NSrange;
151  };
152  QList<NoteFrameData> notesFramesData;
153  QList<PDFPresentationData> EffVal;
154 
155  void updateNames2Ptr(); //after document load items pointers should be updated in markeredItemList
156 
157  PageItem* pasteItem(ScribusDoc *doc, ScXmlStreamAttributes& attrs, const QString& baseDir, int pagenr = -2 /* currentPage*/);
158 
159  void writeCheckerProfiles(ScXmlStreamWriter& docu);
160  void writeLinestyles(ScXmlStreamWriter& docu);
161  void writeJavascripts(ScXmlStreamWriter& docu);
162  void writeBookmarks(ScXmlStreamWriter& docu);
163  void writeColors(ScXmlStreamWriter& docu, bool part = false);
164  void writeGradients(ScXmlStreamWriter & docu, bool part = false);
165  void writeHyphenatorLists(ScXmlStreamWriter& docu);
166  void writePStyles(ScXmlStreamWriter& docu);
167  void writeCStyles(ScXmlStreamWriter& docu);
168  void writeTableStyles(ScXmlStreamWriter& docu);
169  void writeCellStyles(ScXmlStreamWriter& docu);
170  void putPStyle(ScXmlStreamWriter& docu, const ParagraphStyle & style, const QString &nodeName);
171  void putCStyle(ScXmlStreamWriter& docu, const CharStyle & style);
172  void putNamedCStyle(ScXmlStreamWriter& docu, const CharStyle & style);
173  void putTableStyle(ScXmlStreamWriter& docu, const TableStyle & style);
174  void putCellStyle(ScXmlStreamWriter& docu, const CellStyle & style);
175  void writeStoryText(ScribusDoc *doc, ScXmlStreamWriter&, PageItem* item);
176  void writeITEXTs(ScribusDoc *doc, ScXmlStreamWriter&, PageItem* item);
177  void writeLayers(ScXmlStreamWriter& docu);
178  void writePrintOptions(ScXmlStreamWriter& docu);
179  void writePdfOptions(ScXmlStreamWriter& docu);
180  void writeDocItemAttributes(ScXmlStreamWriter& docu);
181  void writeTOC(ScXmlStreamWriter& docu);
182  void writeMarks(ScXmlStreamWriter & docu);
183  void writeNotesStyles(ScXmlStreamWriter & docu);
184  void writeNotesFrames(ScXmlStreamWriter & docu);
185  void writeNotes(ScXmlStreamWriter & docu);
186  void writePageSets(ScXmlStreamWriter& docu);
187  void writeSections(ScXmlStreamWriter& docu);
188  void writePatterns(ScXmlStreamWriter& docu, const QString& baseDir, bool part = false, Selection* selection = 0);
189  void writeContent(ScXmlStreamWriter& docu, const QString& baseDir);
190 
191  void WritePages(ScribusDoc *doc, ScXmlStreamWriter& docu, QProgressBar *dia2, uint maxC, bool master);
192  void WriteObjects(ScribusDoc *doc, ScXmlStreamWriter& docu, const QString& baseDir, QProgressBar *dia2, uint maxC, ItemSelection master, QList<PageItem*> *items = 0);
193  void SetItemProps(ScXmlStreamWriter& docu, PageItem* item, const QString& baseDir);
194 
195  QMap<QString, QString> parStyleMap;
196 
197  QMap<int, int> itemRemap;
198  QMap<int, int> itemNext;
199  QMap<int, int> itemRemapF;
200  QMap<int, int> itemNextF;
201  QMap<int, int> itemRemapM;
202  QMap<int, int> itemNextM;
203  QMap<int,PageItem*> LinkID;
204  QList<PageItem*> FrameItems;
205  QMap<PageItem*, QString> itemsWeld; //item* and master name
206 
207  int itemCount;
208  int itemCountM;
209  bool layerFound;
210  int LayerToPaste;
211  double Xp;
212  double GrX;
213  double Yp;
214  double GrY;
215  QString clipPath;
216  bool isNewFormat;
217  QFile aFile;
218 };
219 
220 extern "C" PLUGIN_API int scribus150format_getPluginAPIVersion();
221 extern "C" PLUGIN_API ScPlugin* scribus150format_getPlugin();
222 extern "C" PLUGIN_API void scribus150format_freePlugin(ScPlugin* plugin);
223 
224 #endif
Definition: storytext.h:71
Definition: charstyle.h:78
Definition: tablestyle.h:30
Definition: loadsaveplugin.h:190
virtual const QString fullTrName() const =0
Plug-in's human-readable, translated name.
Displays all kinds of content generated by external programs. Named LatexFrame because it initally on...
Definition: pageitem_latexframe.h:43
Abstract super class for all Scribus plug-ins.
Definition: scplugin.h:90
This Class is the base class for your application. It sets up the main window and providing a menubar...
Definition: scribus.h:123
virtual void languageChange()=0
Update all user-visible text to reflect current UI language.
Definition: vgradient.h:78
Definition: paragraphstyle.h:27
Definition: sccolor.h:155
Definition: scxmlstreamreader.h:36
the Document Class
Definition: scribusdoc.h:90
Definition: cellstyle.h:32
virtual void addToMainWindowMenu(ScribusMainWindow *)
Allow plugins to add to a main menu.
Definition: scribus150format.h:56
Definition: scxmlstreamreader.h:15
ScPlugin provides an interface to ask plugins for information about themselves.
Definition: scplugin.h:103
Definition: sclayer.h:17
Definition: scxmlstreamwriter.h:15
Definition: scribus150format.h:35
Superclass for all file import/export/load/save plugins.
Definition: loadsaveplugin.h:33
virtual const AboutData * getAboutData() const =0
Return descriptive information about the plug-in.
Definition: pageitem.h:92
Definition: scribusdoc.h:1322
Definition: scribusstructs.h:250
Definition: pageitem_table.h:49
Definition: scribusstructs.h:338
Definition: selection.h:34