4 #include <QXmlContentHandler>
9 /** XML content handler for OPS format. */
10 class OpsHandler: public QXmlContentHandler
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 &) {
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;}
26 bool characters(const QString &ch) {
31 bool endElement(const QString &namespaceUri, const QString &name,
32 const QString &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;
53 bool startElement(const QString &namespaceUri, const QString &name,
54 const QString &qName, const QXmlAttributes &attrs) {
55 Trace t("OpsHandler::startElement " + name);
61 Book::ContentItem item;
62 item.href = book.rootPath() + "/" + attrs.value("href");
63 item.name = QString("Part %1").arg(partCount + 1);
65 QString key = attrs.value("id");
66 book.content[key] = item;
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"));
84 #endif // OPSHANDLER_H