123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- #ifndef Fb2Save_H
- #define Fb2Save_H
- #include "fb2xml.h"
- #include "fb2temp.hpp"
- #include <QByteArray>
- #include <QFileDialog>
- #include <QStringList>
- #include <QXmlStreamWriter>
- QT_BEGIN_NAMESPACE
- class QComboBox;
- class QLabel;
- QT_END_NAMESPACE
- #include "fb2temp.hpp"
- class Fb2WebView;
- class Fb2SaveDialog : public QFileDialog
- {
- Q_OBJECT
- public:
- explicit Fb2SaveDialog(QWidget *parent, Qt::WindowFlags f);
- explicit Fb2SaveDialog(QWidget *parent = 0,
- const QString &caption = QString(),
- const QString &directory = QString(),
- const QString &filter = QString());
- QString fileName() const;
- QString codec() const;
- private:
- void init();
- private:
- QComboBox * combo;
- QLabel * label;
- };
- class Fb2HtmlHandler : public QObject, public Fb2XmlHandler
- {
- Q_OBJECT
- public:
- explicit Fb2HtmlHandler() {}
- public slots:
- void onAttr(const QString &name, const QString &value);
- void onNew(const QString &name);
- void onEnd(const QString &name);
- void onTxt(const QString &text);
- void onCom(const QString &text);
- private:
- static QString local(const QString &name);
- private:
- QXmlAttributes m_atts;
- };
- class Fb2SaveWriter : public QXmlStreamWriter
- {
- public:
- explicit Fb2SaveWriter(Fb2WebView &view, QByteArray *array);
- explicit Fb2SaveWriter(Fb2WebView &view, QIODevice *device);
- explicit Fb2SaveWriter(Fb2WebView &view, QString *string);
- Fb2WebView & view() { return m_view; }
- QString getFileName(const QString &src);
- void writeStartElement(const QString &name, int level);
- void writeEndElement(int level);
- void writeComment(const QString &ch);
- void writeLineEnd();
- void writeFiles();
- private:
- QByteArray downloadFile(const QUrl &url);
- void writeContentType(QByteArray &data);
- private:
- Fb2WebView &m_view;
- QStringList m_names;
- };
- class Fb2SaveHandler : public Fb2HtmlHandler
- {
- public:
- explicit Fb2SaveHandler(Fb2SaveWriter &writer);
- virtual bool comment(const QString& ch);
- bool save();
- private:
- class TextHandler : public NodeHandler
- {
- FB2_BEGIN_KEYLIST
- Section,
- Anchor,
- Table,
- Image,
- Span,
- Parag,
- Strong,
- Emphas,
- Strike,
- Sub,
- Sup,
- Code,
- FB2_END_KEYLIST
- public:
- explicit TextHandler(Fb2SaveWriter &writer, const QString &name, const QXmlAttributes &atts, const QString &tag);
- explicit TextHandler(TextHandler *parent, const QString &name, const QXmlAttributes &atts, const QString &tag);
- const QString & tag() { return m_tag; }
- protected:
- virtual NodeHandler * NewTag(const QString &name, const QXmlAttributes &atts);
- virtual void TxtTag(const QString &text);
- virtual void EndTag(const QString &name);
- protected:
- void Init(const QXmlAttributes &atts);
- virtual int nextLevel() const;
- protected:
- Fb2SaveWriter &m_writer;
- const QString m_tag;
- const int m_level;
- private:
- bool m_hasChild;
- };
- class RootHandler : public NodeHandler
- {
- public:
- explicit RootHandler(Fb2SaveWriter &writer, const QString &name);
- protected:
- virtual NodeHandler * NewTag(const QString &name, const QXmlAttributes &atts);
- protected:
- Fb2SaveWriter &m_writer;
- };
- class BodyHandler : public TextHandler
- {
- public:
- explicit BodyHandler(Fb2SaveWriter &writer, const QString &name, const QXmlAttributes &atts);
- protected:
- virtual void EndTag(const QString &name);
- };
- class SpanHandler : public TextHandler
- {
- public:
- explicit SpanHandler(TextHandler *parent, const QString &name, const QXmlAttributes &atts);
- };
- class AnchorHandler : public TextHandler
- {
- public:
- explicit AnchorHandler(TextHandler *parent, const QString &name, const QXmlAttributes &atts);
- };
- class ImageHandler : public TextHandler
- {
- public:
- explicit ImageHandler(TextHandler *parent, const QString &name, const QXmlAttributes &atts);
- protected:
- virtual void EndTag(const QString &name) { Q_UNUSED(name); }
- };
- class ParagHandler : public TextHandler
- {
- public:
- explicit ParagHandler(TextHandler *parent, const QString &name, const QXmlAttributes &atts);
- protected:
- virtual NodeHandler * NewTag(const QString &name, const QXmlAttributes &atts);
- virtual void TxtTag(const QString &text);
- virtual void EndTag(const QString &name);
- private:
- virtual int nextLevel() const { return 0; }
- void start();
- private:
- const QString m_parent;
- bool m_empty;
- };
- protected:
- virtual NodeHandler * CreateRoot(const QString &name, const QXmlAttributes &atts);
- private:
- Fb2SaveWriter & m_writer;
- };
- #endif // Fb2Save_H
|