#ifndef OPSHANDLER_H
#define OPSHANDLER_H
-#include <QXmlContentHandler>
-
+#include "xmlhandler.h"
#include "book.h"
+#include "trace.h"
/** XML content handler for OPS format. */
-class OpsHandler: public QXmlContentHandler
+class OpsHandler: public XmlHandler
{
public:
OpsHandler(Book &b): book(b), partCount(0) {}
- bool endDocument() {return true;}
- bool endPrefixMapping(const QString &) {return true;}
- QString errorString() const {return "";}
- bool ignorableWhitespace(const QString &) {return true;}
- bool processingInstruction(const QString &, const QString &) {
- return true;
- }
- void setDocumentLocator(QXmlLocator *) {}
- bool skippedEntity(const QString &) {return true;}
- bool startDocument() {return true;}
- bool startPrefixMapping(const QString &, const QString &) {return true;}
-
- bool characters(const QString &ch)
- {
- currentText += ch;
- return true;
- }
bool endElement(const QString &namespaceUri, const QString &name,
- const QString &qName)
- {
+ const QString &qName) {
(void)namespaceUri;
(void)qName;
- if (currentText != "") {
+ if (currentText.size()) {
if (name == "title") {
book.title = currentText;
- }
- else if (name == "creator") {
+ } else if (name == "creator") {
book.creators.append(currentText);
- }
- else if (name == "publisher") {
+ } else if (name == "publisher") {
book.publisher = currentText;
- }
- else if (name == "subject") {
+ } else if (name == "subject") {
book.subject = currentText;
- }
- else if (name == "source") {
+ } else if (name == "source") {
book.source = currentText;
- }
- else if (name == "rights") {
+ } else if (name == "rights") {
book.rights = currentText;
}
}
}
bool startElement(const QString &namespaceUri, const QString &name,
- const QString &qName, const QXmlAttributes &attrs)
- {
+ const QString &qName, const QXmlAttributes &attrs) {
(void)namespaceUri;
(void)qName;
currentText = "";
if (name == "item") {
Book::ContentItem item;
- item.href = book.rootPath() + "/" + attrs.value("href");
+ item.href = attrs.value("href");
item.name = QString("Part %1").arg(partCount + 1);
+ item.size = 0;
QString key = attrs.value("id");
book.content[key] = item;
partCount++;
- }
- else if (name == "itemref") {
- book.toc.append(attrs.value("idref"));
+ } else if (name == "itemref") {
+ book.parts.append(attrs.value("idref"));
}
return true;
}
private:
Book &book;
- QString currentText;
int partCount;
};