fb2save.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #ifndef Fb2Save_H
  2. #define Fb2Save_H
  3. #include "fb2xml.h"
  4. #include <QByteArray>
  5. #include <QHash>
  6. #include <QList>
  7. #include <QMutex>
  8. #include <QThread>
  9. #include <QXmlDefaultHandler>
  10. #include <QXmlStreamWriter>
  11. class Fb2WebView;
  12. class Fb2SaveWriter : public QXmlStreamWriter
  13. {
  14. public:
  15. explicit Fb2SaveWriter(Fb2WebView &view, QIODevice *device);
  16. explicit Fb2SaveWriter(Fb2WebView &view, QByteArray *array);
  17. explicit Fb2SaveWriter(Fb2WebView &view, QString *string);
  18. virtual ~Fb2SaveWriter();
  19. QString getFile(const QString &path);
  20. QString getData(const QString &name);
  21. void writeFiles();
  22. private:
  23. void Init();
  24. private:
  25. Fb2WebView &m_view;
  26. typedef QHash<QString, QString> StringHash;
  27. typedef QList<QString> StringList;
  28. StringHash m_files;
  29. StringList m_names;
  30. };
  31. class Fb2SaveHandler : public Fb2XmlHandler
  32. {
  33. public:
  34. explicit Fb2SaveHandler(Fb2WebView &view, QIODevice *device);
  35. explicit Fb2SaveHandler(Fb2WebView &view, QByteArray *array);
  36. explicit Fb2SaveHandler(Fb2WebView &view, QString *string);
  37. private:
  38. class BodyHandler : public NodeHandler
  39. {
  40. FB2_BEGIN_KEYLIST
  41. Section,
  42. Anchor,
  43. Table,
  44. Image,
  45. Parag,
  46. Strong,
  47. Emphas,
  48. Strike,
  49. Sub,
  50. Sup,
  51. Code,
  52. FB2_END_KEYLIST
  53. public:
  54. explicit BodyHandler(Fb2SaveWriter &writer, const QString &name, const QXmlAttributes &atts, const QString &tag, const QString &style = QString());
  55. explicit BodyHandler(BodyHandler *parent, const QString &name, const QXmlAttributes &atts, const QString &tag, const QString &style = QString());
  56. const QString & tag() { return m_tag; }
  57. protected:
  58. virtual NodeHandler * NewTag(const QString &name, const QXmlAttributes &atts);
  59. virtual void TxtTag(const QString &text);
  60. virtual void EndTag(const QString &name);
  61. protected:
  62. void Init(const QXmlAttributes &atts);
  63. protected:
  64. Fb2SaveWriter &m_writer;
  65. QString m_tag;
  66. QString m_style;
  67. };
  68. class RootHandler : public BodyHandler
  69. {
  70. public:
  71. explicit RootHandler(Fb2SaveWriter &writer, const QString &name, const QXmlAttributes &atts);
  72. protected:
  73. virtual void EndTag(const QString &name);
  74. };
  75. class AnchorHandler : public BodyHandler
  76. {
  77. public:
  78. explicit AnchorHandler(BodyHandler *parent, const QString &name, const QXmlAttributes &atts);
  79. };
  80. class ImageHandler : public BodyHandler
  81. {
  82. public:
  83. explicit ImageHandler(BodyHandler *parent, const QString &name, const QXmlAttributes &atts);
  84. protected:
  85. virtual void EndTag(const QString &name) { Q_UNUSED(name); }
  86. };
  87. class ParagHandler : public BodyHandler
  88. {
  89. public:
  90. explicit ParagHandler(BodyHandler *parent, const QString &name, const QXmlAttributes &atts);
  91. protected:
  92. virtual NodeHandler * NewTag(const QString &name, const QXmlAttributes &atts);
  93. virtual void TxtTag(const QString &text);
  94. virtual void EndTag(const QString &name);
  95. private:
  96. void start();
  97. private:
  98. const QString m_parent;
  99. bool m_empty;
  100. };
  101. protected:
  102. virtual NodeHandler * CreateRoot(const QString &name, const QXmlAttributes &atts);
  103. private:
  104. Fb2SaveWriter m_writer;
  105. };
  106. #endif // Fb2Save_H