Welcome to mirror list, hosted at ThFree Co, Russian Federation.

fb2read.hpp « source - github.com/lintest/fb2edit.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 9c39dbd8c3000ce796abae043fabf02f1680ebfe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#ifndef FB2READ_H
#define FB2READ_H

#include "fb2xml.h"

#include <QByteArray>
#include <QMutex>
#include <QThread>
#include <QXmlDefaultHandler>

class FbNetworkAccessManager;

class FbReadThread : public QThread
{
    Q_OBJECT

public:
    static void execute(QObject *parent, QXmlInputSource *source, QIODevice *device);
    ~FbReadThread();

signals:
    void binary(const QString &name, const QByteArray &data);
    void html(QObject *temp, const QString &html);

protected:
    void run();

private:
    explicit FbReadThread(QObject *parent, QXmlInputSource *source, QIODevice *device);
    bool parse();

private:
    QIODevice *m_device;
    QXmlInputSource *m_source;
    FbNetworkAccessManager *m_temp;
    QString m_html;
};

class FbReadHandler : public QObject, public FbXmlHandler
{
    Q_OBJECT

public:
    static bool load(QObject *page, QXmlInputSource &source, QString &html);
    explicit FbReadHandler(QXmlStreamWriter &writer);
    virtual ~FbReadHandler();
    virtual bool comment(const QString& ch);
    QXmlStreamWriter & writer() { return m_writer; }

private:
    class BaseHandler : public NodeHandler
    {
    public:
        explicit BaseHandler(FbReadHandler &owner, const QString &name)
            : NodeHandler(name), m_owner(owner) {}
    protected:
        QXmlStreamWriter & writer() { return m_owner.writer(); }
    protected:
        FbReadHandler &m_owner;
    };

    class RootHandler : public BaseHandler
    {
        FB2_BEGIN_KEYLIST
            Style,
            Descr,
            Body,
            Binary,
       FB2_END_KEYLIST
    public:
        explicit RootHandler(FbReadHandler &owner, const QString &name);
    protected:
        virtual NodeHandler * NewTag(const QString & name, const QXmlAttributes &atts);
        virtual void EndTag(const QString &name);
    private:
        void writeScript(const QString &src);
        void writeHeader();
    private:
        QString m_style;
        bool m_head;
    };

    class StyleHandler : public BaseHandler
    {
    public:
        explicit StyleHandler(FbReadHandler &owner, const QString &name, QString &text);
    protected:
        virtual void TxtTag(const QString &text);
    private:
        QString &m_text;
    };

    class TextHandler : public BaseHandler
    {
        FB2_BEGIN_KEYLIST
            Origin,
            Anchor,
            Image,
            Parag,
            Style,
            Strong,
            Emphas,
            Strike,
            Sub,
            Sup,
            Code,
       FB2_END_KEYLIST
    public:
        explicit TextHandler(FbReadHandler &owner, const QString &name, const QXmlAttributes &atts, const QString &tag);
        explicit TextHandler(TextHandler *parent, const QString &name, const QXmlAttributes &atts, const QString &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 QString &name, const QXmlAttributes &atts);
        bool isNotes() const;
    protected:
        TextHandler *m_parent;
        QString m_tag;
        QString m_style;
        bool m_empty;
    };

    class BinaryHandler : public BaseHandler
    {
    public:
        explicit BinaryHandler(FbReadHandler &owner, const QString &name, const QXmlAttributes &atts);
    protected:
        virtual void TxtTag(const QString &text);
        virtual void EndTag(const QString &name);
    private:
        QString m_file;
        QString m_text;
    };

signals:
    void binary(const QString &name, const QByteArray &data);

protected:
    virtual NodeHandler * CreateRoot(const QString &name, const QXmlAttributes &atts);

private:
    void addFile(const QString &name, const QByteArray &data);

private:
    typedef QHash<QString, QString> StringHash;
    QXmlStreamWriter &m_writer;
    StringHash m_hash;
};

#endif // FB2READ_H