More naming fixes.
[dorian] / model / opshandler.h
1 #ifndef OPSHANDLER_H
2 #define OPSHANDLER_H
3
4 #include <QXmlContentHandler>
5
6 #include "book.h"
7 #include "trace.h"
8
9 /** XML content handler for OPS format. */
10 class OpsHandler: public QXmlContentHandler
11 {
12 public:
13     OpsHandler(Book &b): book(b), partCount(0) {}
14     bool endDocument() {return true;}
15     bool endPrefixMapping(const QString &) {return true;}
16     QString errorString() const {return QString();}
17     bool ignorableWhitespace(const QString &) {return true;}
18     bool processingInstruction(const QString &, const QString &) {
19         return true;
20     }
21     void setDocumentLocator(QXmlLocator *) {}
22     bool skippedEntity(const QString &) {return true;}
23     bool startDocument() {return true;}
24     bool startPrefixMapping(const QString &, const QString &) {return true;}
25
26     bool characters(const QString &ch) {
27         currentText += ch;
28         return true;
29     }
30
31     bool endElement(const QString &namespaceUri, const QString &name,
32                     const QString &qName) {
33         (void)namespaceUri;
34         (void)qName;
35         if (currentText.size()) {
36             if (name == "title") {
37                 book.title = currentText;
38             } else if (name == "creator") {
39                 book.creators.append(currentText);
40             } else if (name == "publisher") {
41                 book.publisher = currentText;
42             } else if (name == "subject") {
43                 book.subject = currentText;
44             } else if (name == "source") {
45                 book.source = currentText;
46             } else if (name == "rights") {
47                 book.rights = currentText;
48             }
49         }
50         return true;
51     }
52
53     bool startElement(const QString &namespaceUri, const QString &name,
54                       const QString &qName, const QXmlAttributes &attrs) {
55         Trace t("OpsHandler::startElement " + name);
56         (void)namespaceUri;
57         (void)qName;
58         currentText = "";
59
60         if (name == "item") {
61             Book::ContentItem item;
62             item.href = book.rootPath() + "/" + attrs.value("href");
63             item.name = QString("Part %1").arg(partCount + 1);
64             item.size = 0;
65             QString key = attrs.value("id");
66             book.content[key] = item;
67             partCount++;
68             t.trace(QString("name: ") + item.name);
69             t.trace(QString("href: ") + attrs.value("href"));
70             t.trace(QString("id: ") + key);
71         } else if (name == "itemref") {
72             t.trace(QString("id: ") + attrs.value("idref"));
73             book.parts.append(attrs.value("idref"));
74         }
75         return true;
76     }
77
78 private:
79     Book &book;
80     QString currentText;
81     int partCount;
82 };
83
84 #endif // OPSHANDLER_H