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