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 "scfonts.h"
13 #include "scribusstructs.h"
14 #include "styles/styleset.h"
15 
16 #include <QHash>
17 #include <QList>
18 #include <QMap>
19 #include <QProgressBar>
20 #include <QString>
21 
22 class QIODevice;
23 
24 class  ColorList;
25 class  multiLine;
26 class  ScLayer;
27 class  ScribusDoc;
28 //struct ScribusDoc::BookMa;
29 class  ScXmlStreamAttributes;
30 class  ScXmlStreamReader;
31 class  ScXmlStreamWriter;
32 
33 class PLUGIN_API Scribus134Format : public LoadSavePlugin
34 {
35 	Q_OBJECT
36 
37 	public:
38 		// Standard plugin implementation
39 		Scribus134Format();
40 		virtual ~Scribus134Format();
41 
42 		QString fullTrName() const override;
43 		const AboutData* getAboutData() const override;
44 		void deleteAboutData(const AboutData* about) const override;
45 		void languageChange() override;
46 		//Not the same as readSLA. This one only reads max 4k of the file for speed.
47 		bool fileSupported(QIODevice* file, const QString & fileName=QString()) const override;
48 
49 		bool loadFile(const QString & fileName, const FileFormat & fmt, int flags, int index = 0) override;
saveFile(const QString & fileName,const FileFormat & fmt)50 		bool saveFile(const QString & fileName, const FileFormat & fmt) override { return false; };
addToMainWindowMenu(ScribusMainWindow *)51 		void addToMainWindowMenu(ScribusMainWindow *) override {};
52 
53 		// Special features - .sla page extraction support
54 		bool loadPage(const QString & fileName, int pageNumber, bool Mpage, const QString& renamedPageName=QString()) override;
55 		bool readStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles) override;
56 		bool readCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles) override;
57 		bool readLineStyles(const QString& fileName, QHash<QString, multiLine> *Sty) override;
58 		bool readColors(const QString& fileName, ColorList & colors) override;
59 		bool readPageCount(const QString& fileName, int *num1, int *num2, QStringList & masterPageNames) override;
60 		void getReplacedFontData(bool & getNewReplacement, QMap<QString,QString> &getReplacedFonts, QList<ScFace> &getDummyScFaces) override;
61 
62 	private:
63 
64 		enum ItemSelection {
65 			ItemSelectionMaster = 0,
66 			ItemSelectionPage   = 1,
67 			ItemSelectionFrame  = 2,
68 			ItemSelectionPattern= 3,
69 		};
70 
71 		class ItemInfo
72 		{
73 		public:
ItemInfo(void)74 			ItemInfo(void) { groupLastItem = nextItem = ownLink = ownNr = 0; item = nullptr; isGroupFlag = false; };
75 			PageItem* item;
76 			int groupLastItem;
77 			int nextItem;
78 			int ownLink;
79 			int ownNr;
80 			bool isGroupFlag;
81 		};
82 
83 		void registerFormats();
84 
85 		QIODevice* slaReader(const QString & fileName);
86 
87 		void getStyle(ParagraphStyle& style, ScXmlStreamReader& reader, StyleSet<ParagraphStyle> *docParagraphStyles, ScribusDoc* doc, bool equiv);
88 		void getStyle(CharStyle& style, ScXmlStreamReader& reader, StyleSet<CharStyle> *docCharStyles, ScribusDoc* doc, bool equiv);
89 
90 		void readDocAttributes(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
91 		void readCMSSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
92 		void readDocumentInfo(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
93 		void readGuideSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
94 		void readToolSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
95 		void readTypographicSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
96 
97 		bool readArrows(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
98 		bool readBookMark(ScribusDoc::BookMa& bookmark, int& elem, ScXmlStreamAttributes& attrs);
99 		bool readCheckProfile(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
100 		bool readColor(ColorList& colors, ScXmlStreamAttributes& attrs);
101 		void readCharacterStyleAttrs(ScribusDoc *doc, ScXmlStreamAttributes& attrs, CharStyle & newStyle);
102 		void readNamedCharacterStyleAttrs(ScribusDoc *doc, ScXmlStreamAttributes& attrs, CharStyle & newStyle);
103 		bool readDocItemAttributes(ScribusDoc *doc, ScXmlStreamReader& reader);
104 		bool readHyphen(ScribusDoc *doc, ScXmlStreamReader& reader);
105 		bool readItemText(PageItem* item, ScXmlStreamAttributes& attrs, LastStyles* last);
106 		bool readLatexInfo(PageItem_LatexFrame* item, ScXmlStreamReader& reader);
107 		void readLayers(ScLayer& layer, ScXmlStreamAttributes& attrs);
108 		bool readMultiline(multiLine& ml, ScXmlStreamReader& reader);
109 		bool readObject(ScribusDoc* doc, ScXmlStreamReader& reader, ItemInfo& info, const QString& baseDir, bool loadPage, const QString& renamedPageName = QString());
110 		bool readPage(ScribusDoc* doc, ScXmlStreamReader& reader);
111 		bool readPageItemAttributes(PageItem* item, ScXmlStreamReader& reader);
112 		bool readPageSets(ScribusDoc* doc, ScXmlStreamReader& reader);
113 		void readParagraphStyle(ScribusDoc *doc, ScXmlStreamReader& reader, ParagraphStyle& newStyle);
114 		bool readPattern(ScribusDoc* doc, ScXmlStreamReader& reader, const QString& baseDir);
115 		bool readPDFOptions(ScribusDoc* doc, ScXmlStreamReader& reader);
116 		bool readPrinterOptions(ScribusDoc* doc, ScXmlStreamReader& reader);
117 		bool readSections(ScribusDoc* doc, ScXmlStreamReader& reader);
118 		bool readTableOfContents(ScribusDoc* doc, ScXmlStreamReader& reader);
119 
120 		PageItem* pasteItem(ScribusDoc *doc, ScXmlStreamAttributes& attrs, const QString& baseDir, PageItem::ItemKind itemKind, int pagenr = -2 /* currentPage*/);
121 
122 		QMap<QString, QString> charStyleMap;
123 		QMap<QString, QString> parStyleMap;
124 		QMap<uint, QString> legacyStyleMap;
125 		uint legacyStyleCount;
126 
127 		QMap<int, int> groupRemap;
128 		QMap<int, int> itemRemap;
129 		QMap<int, int> itemNext;
130 		QMap<int, int> itemRemapM;
131 		QMap<int, int> itemNextM;
132 		QList<PageItem*> FrameItems;
133 		QList<PDFPresentationData> EffVal;
134 
135 		int itemCount;
136 		int itemCountM;
137 		QFile aFile;
138 };
139 
140 extern "C" PLUGIN_API int scribus134format_getPluginAPIVersion();
141 extern "C" PLUGIN_API ScPlugin* scribus134format_getPlugin();
142 extern "C" PLUGIN_API void scribus134format_freePlugin(ScPlugin* plugin);
143 
144 #endif
145