Subversion Repositories Scribus

Rev

Rev 24307 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
For general Scribus (>=1.3.2) copyright and licensing information please refer
to the COPYING file provided with the program. Following this notice may exist
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/

#ifndef SCRIBUS134FORMAT_H
#define SCRIBUS134FORMAT_H

#include "pluginapi.h"
#include "loadsaveplugin.h"
#include "scfonts.h"
#include "scribusstructs.h"
#include "styles/styleset.h"

#include <QHash>
#include <QList>
#include <QMap>
#include <QProgressBar>
#include <QString>

class QIODevice;

class  ColorList;
class  multiLine;
class  ScLayer;
class  ScribusDoc;
//struct ScribusDoc::BookMa;
class  ScXmlStreamAttributes;
class  ScXmlStreamReader;
class  ScXmlStreamWriter;

class PLUGIN_API Scribus134Format : public LoadSavePlugin
{
        Q_OBJECT

        public:
                // Standard plugin implementation
                Scribus134Format();
                virtual ~Scribus134Format();

                QString fullTrName() const override;
                const AboutData* getAboutData() const override;
                void deleteAboutData(const AboutData* about) const override;
                void languageChange() override;
                //Not the same as readSLA. This one only reads max 4k of the file for speed.
                bool fileSupported(QIODevice* file, const QString & fileName=QString()) const override;

                bool loadFile(const QString & fileName, const FileFormat & fmt, int flags, int index = 0) override;
                bool saveFile(const QString & fileName, const FileFormat & fmt) override { return false; };
                void addToMainWindowMenu(ScribusMainWindow *) override {};

                // Special features - .sla page extraction support
                bool loadPage(const QString & fileName, int pageNumber, bool Mpage, const QString& renamedPageName=QString()) override;
                bool readStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles) override;
                bool readCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles) override;
                bool readLineStyles(const QString& fileName, QHash<QString, multiLine> *Sty) override;
                bool readColors(const QString& fileName, ColorList & colors) override;
                bool readPageCount(const QString& fileName, int *num1, int *num2, QStringList & masterPageNames) override;
                void getReplacedFontData(bool & getNewReplacement, QMap<QString,QString> &getReplacedFonts, QList<ScFace> &getDummyScFaces) override;

        private:

                enum ItemSelection {
                        ItemSelectionMaster = 0,
                        ItemSelectionPage   = 1,
                        ItemSelectionFrame  = 2,
                        ItemSelectionPattern= 3,
                };

                class ItemInfo
                {
                public:
                        ItemInfo(void) { groupLastItem = nextItem = ownLink = ownNr = 0; item = nullptr; isGroupFlag = false; };
                        PageItem* item;
                        int groupLastItem;
                        int nextItem;
                        int ownLink;
                        int ownNr;
                        bool isGroupFlag;
                };

                void registerFormats();
               
                QIODevice* slaReader(const QString & fileName);

                void getStyle(ParagraphStyle& style, ScXmlStreamReader& reader, StyleSet<ParagraphStyle> *docParagraphStyles, ScribusDoc* doc, bool equiv);
                void getStyle(CharStyle& style, ScXmlStreamReader& reader, StyleSet<CharStyle> *docCharStyles, ScribusDoc* doc, bool equiv);

                void readDocAttributes(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
                void readCMSSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
                void readDocumentInfo(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
                void readGuideSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
                void readToolSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
                void readTypographicSettings(ScribusDoc* doc, ScXmlStreamAttributes& attrs);

                bool readArrows(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
                bool readBookMark(ScribusDoc::BookMa& bookmark, int& elem, ScXmlStreamAttributes& attrs);
                bool readCheckProfile(ScribusDoc* doc, ScXmlStreamAttributes& attrs);
                bool readColor(ColorList& colors, ScXmlStreamAttributes& attrs);
                void readCharacterStyleAttrs(ScribusDoc *doc, ScXmlStreamAttributes& attrs, CharStyle & newStyle);
                void readNamedCharacterStyleAttrs(ScribusDoc *doc, ScXmlStreamAttributes& attrs, CharStyle & newStyle);
                bool readDocItemAttributes(ScribusDoc *doc, ScXmlStreamReader& reader);
                bool readHyphen(ScribusDoc *doc, ScXmlStreamReader& reader);
                bool readItemText(PageItem* item, ScXmlStreamAttributes& attrs, LastStyles* last);
                bool readLatexInfo(PageItem_LatexFrame* item, ScXmlStreamReader& reader);
                void readLayers(ScLayer& layer, ScXmlStreamAttributes& attrs);
                bool readMultiline(multiLine& ml, ScXmlStreamReader& reader);
                bool readObject(ScribusDoc* doc, ScXmlStreamReader& reader, ItemInfo& info, const QString& baseDir, bool loadPage, const QString& renamedPageName = QString());
                bool readPage(ScribusDoc* doc, ScXmlStreamReader& reader);
                bool readPageItemAttributes(PageItem* item, ScXmlStreamReader& reader);
                bool readPageSets(ScribusDoc* doc, ScXmlStreamReader& reader);
                void readParagraphStyle(ScribusDoc *doc, ScXmlStreamReader& reader, ParagraphStyle& newStyle);
                bool readPattern(ScribusDoc* doc, ScXmlStreamReader& reader, const QString& baseDir);
                bool readPDFOptions(ScribusDoc* doc, ScXmlStreamReader& reader);
                bool readPrinterOptions(ScribusDoc* doc, ScXmlStreamReader& reader);
                bool readSections(ScribusDoc* doc, ScXmlStreamReader& reader);
                bool readTableOfContents(ScribusDoc* doc, ScXmlStreamReader& reader);

                PageItem* pasteItem(ScribusDoc *doc, ScXmlStreamAttributes& attrs, const QString& baseDir, PageItem::ItemKind itemKind, int pagenr = -2 /* currentPage*/);
               
                QMap<QString, QString> charStyleMap;
                QMap<QString, QString> parStyleMap;
                QMap<uint, QString> legacyStyleMap;
                uint legacyStyleCount;

                QMap<int, int> groupRemap;
                QMap<int, int> itemRemap;
                QMap<int, int> itemNext;
                QMap<int, int> itemRemapM;
                QMap<int, int> itemNextM;
                QList<PageItem*> FrameItems;
                QList<PDFPresentationData> pdfPresEffects;

                int itemCount;
                int itemCountM;
                QFile aFile;
};

extern "C" PLUGIN_API int scribus134format_getPluginAPIVersion();
extern "C" PLUGIN_API ScPlugin* scribus134format_getPlugin();
extern "C" PLUGIN_API void scribus134format_freePlugin(ScPlugin* plugin);

#endif