diff --git a/src/acbf/AcbfAuthor.cpp b/src/acbf/AcbfAuthor.cpp --- a/src/acbf/AcbfAuthor.cpp +++ b/src/acbf/AcbfAuthor.cpp @@ -77,17 +77,6 @@ setLanguage(xmlReader->attributes().value("lang").toString()); while(xmlReader->readNextStartElement()) { - if(xmlReader->tokenType() == QXmlStreamReader::EndElement) { - if(xmlReader->name() == "author") { - break; - } - else { - continue; - } - } - if(xmlReader->tokenType() == QXmlStreamReader::Characters) { - continue; - } if(xmlReader->name() == "first-name") { setFirstName(xmlReader->readElementText()); diff --git a/src/acbf/AcbfBody.cpp b/src/acbf/AcbfBody.cpp --- a/src/acbf/AcbfBody.cpp +++ b/src/acbf/AcbfBody.cpp @@ -66,19 +66,8 @@ bool Body::fromXml(QXmlStreamReader *xmlReader) { setBgcolor(xmlReader->attributes().value("bgcolor").toString()); - while(xmlReader->readNext()) + while(xmlReader->readNextStartElement()) { - if(xmlReader->tokenType() == QXmlStreamReader::EndElement) { - if(xmlReader->name() == "body") { - break; - } - else { - continue; - } - } - if(xmlReader->tokenType() == QXmlStreamReader::Characters) { - continue; - } if(xmlReader->name() == "page") { Page* newPage = new Page(document()); diff --git a/src/acbf/AcbfBookinfo.cpp b/src/acbf/AcbfBookinfo.cpp --- a/src/acbf/AcbfBookinfo.cpp +++ b/src/acbf/AcbfBookinfo.cpp @@ -97,7 +97,7 @@ writer->writeEndElement(); } - writer->writeStartElement("character"); + writer->writeStartElement("characters"); writer->writeCharacters(""); Q_FOREACH(const QString& character, d->characters) { writer->writeStartElement("name"); @@ -151,27 +151,15 @@ bool BookInfo::fromXml(QXmlStreamReader *xmlReader) { - while(xmlReader->readNext()) + while(xmlReader->readNextStartElement()) { - if(xmlReader->tokenType() == QXmlStreamReader::EndElement) { - if(xmlReader->name() == "book-info") { - break; - } - else { - continue; - } - } - if(xmlReader->tokenType() == QXmlStreamReader::Characters) { - continue; - } if(xmlReader->name() == "author") { Author* newAuthor = new Author(metadata()); if(!newAuthor->fromXml(xmlReader)) { return false; } d->author.append(newAuthor); - xmlReader->readNext(); } else if(xmlReader->name() == "book-title") { @@ -183,15 +171,14 @@ int match = xmlReader->attributes().value("match").toInt(); d->genre[xmlReader->readElementText(QXmlStreamReader::IncludeChildElements)] = match; } - else if(xmlReader->name() == "characters" || xmlReader->name() == "character") + else if(xmlReader->name() == "characters") { while(xmlReader->readNextStartElement()) { if(xmlReader->name() == "name") { d->characters.append(xmlReader->readElementText(QXmlStreamReader::IncludeChildElements)); - continue; } - if(xmlReader->readNext() == QXmlStreamReader::EndElement && (xmlReader->name() == "characters" || xmlReader->name() == "character")) { - break; + else { + xmlReader->skipCurrentElement(); } } qDebug() << "Created character entries, we now have" << d->characters.count() << "characters"; @@ -203,10 +190,9 @@ while(xmlReader->readNextStartElement()) { if(xmlReader->name() == "p") { paragraphs.append(xmlReader->readElementText(QXmlStreamReader::IncludeChildElements)); - continue; } - if(xmlReader->readNext() == QXmlStreamReader::EndElement && xmlReader->name() == "character") { - break; + else { + xmlReader->skipCurrentElement(); } } d->annotation[language] = paragraphs; @@ -230,8 +216,8 @@ newLanguage->fromXml(xmlReader); d->languages.append(newLanguage); } - if(xmlReader->readNext() == QXmlStreamReader::EndElement && xmlReader->name() == "languages") { - break; + else { + xmlReader->skipCurrentElement(); } } } diff --git a/src/acbf/AcbfDocument.cpp b/src/acbf/AcbfDocument.cpp --- a/src/acbf/AcbfDocument.cpp +++ b/src/acbf/AcbfDocument.cpp @@ -77,15 +77,15 @@ { while(xmlReader.readNextStartElement()) { - if(xmlReader.name() == "body") + if(xmlReader.name() == "meta-data") { - if(!d->body->fromXml(&xmlReader)) { + if(!d->metaData->fromXml(&xmlReader)) { break; } } - else if(xmlReader.name() == "meta-data") + else if(xmlReader.name() == "body") { - if(!d->metaData->fromXml(&xmlReader)) { + if(!d->body->fromXml(&xmlReader)) { break; } } @@ -96,6 +96,10 @@ } } } + else { + qWarning() << Q_FUNC_INFO << "not an ACBF XML document"; + return false; + } } if (xmlReader.hasError()) { qWarning() << Q_FUNC_INFO << "Failed to read ACBF XML document at token" << xmlReader.name() << "(" << xmlReader.lineNumber() << ":" << xmlReader.columnNumber() << ") The reported error was:" << xmlReader.errorString(); diff --git a/src/acbf/AcbfDocumentinfo.cpp b/src/acbf/AcbfDocumentinfo.cpp --- a/src/acbf/AcbfDocumentinfo.cpp +++ b/src/acbf/AcbfDocumentinfo.cpp @@ -99,17 +99,6 @@ { while(xmlReader->readNextStartElement()) { - if(xmlReader->tokenType() == QXmlStreamReader::EndElement) { - if(xmlReader->name() == "document-info") { - break; - } - else { - continue; - } - } - if(xmlReader->tokenType() == QXmlStreamReader::Characters) { - continue; - } if(xmlReader->name() == "author") { Author* newAuthor = new Author(metadata()); @@ -120,16 +109,22 @@ } else if(xmlReader->name() == "creation-date") { - setCreationDate(QDate::fromString(xmlReader->readElementText())); + QString date = xmlReader->attributes().value("value").toString(); + if(date.isEmpty()) { + date = xmlReader->readElementText(); + } else { + xmlReader->skipCurrentElement(); + } + setCreationDate(QDate::fromString(date)); } else if(xmlReader->name() == "source") { while(xmlReader->readNextStartElement()) { if(xmlReader->name() == "p") { d->source.append(xmlReader->readElementText(QXmlStreamReader::IncludeChildElements)); } - if(xmlReader->readNext() == QXmlStreamReader::EndElement && xmlReader->name() == "source") { - break; + else { + xmlReader->skipCurrentElement(); } } } @@ -147,8 +142,8 @@ if(xmlReader->name() == "p") { d->history.append(xmlReader->readElementText(QXmlStreamReader::IncludeChildElements)); } - if(xmlReader->readNext() == QXmlStreamReader::EndElement && xmlReader->name() == "history") { - break; + else { + xmlReader->skipCurrentElement(); } } } diff --git a/src/acbf/AcbfLanguage.cpp b/src/acbf/AcbfLanguage.cpp --- a/src/acbf/AcbfLanguage.cpp +++ b/src/acbf/AcbfLanguage.cpp @@ -59,6 +59,7 @@ { setShow(xmlReader->attributes().value("show").toString().toLower() == "true"); setLanguage(xmlReader->attributes().value("lang").toString()); + xmlReader->skipCurrentElement(); qDebug() << Q_FUNC_INFO << "Created language" << language(); return true; } diff --git a/src/acbf/AcbfMetadata.cpp b/src/acbf/AcbfMetadata.cpp --- a/src/acbf/AcbfMetadata.cpp +++ b/src/acbf/AcbfMetadata.cpp @@ -73,19 +73,8 @@ bool Metadata::fromXml(QXmlStreamReader *xmlReader) { - while(xmlReader->readNext()) + while(xmlReader->readNextStartElement()) { - if(xmlReader->tokenType() == QXmlStreamReader::EndElement) { - if(xmlReader->name() == "meta-data") { - break; - } - else { - continue; - } - } - if(xmlReader->tokenType() == QXmlStreamReader::Characters) { - continue; - } if(xmlReader->name() == "book-info") { if(!d->bookInfo->fromXml(xmlReader)) { diff --git a/src/acbf/AcbfPage.cpp b/src/acbf/AcbfPage.cpp --- a/src/acbf/AcbfPage.cpp +++ b/src/acbf/AcbfPage.cpp @@ -103,26 +103,16 @@ { setBgcolor(xmlReader->attributes().value("bgcolor").toString()); setTransition(xmlReader->attributes().value("transition").toString()); - while(xmlReader->readNext()) + while(xmlReader->readNextStartElement()) { - if(xmlReader->tokenType() == QXmlStreamReader::EndElement) { - if(xmlReader->name() == "page" || xmlReader->name() == "coverpage") { - break; - } - else { - continue; - } - } - if(xmlReader->tokenType() == QXmlStreamReader::Characters) { - continue; - } if(xmlReader->name() == "title") { d->title[xmlReader->attributes().value("lang").toString()] = xmlReader->readElementText(); } else if(xmlReader->name() == "image") { setImageHref(xmlReader->attributes().value("href").toString()); + xmlReader->skipCurrentElement(); } else if(xmlReader->name() == "text-layer") { diff --git a/src/acbf/AcbfPublishinfo.cpp b/src/acbf/AcbfPublishinfo.cpp --- a/src/acbf/AcbfPublishinfo.cpp +++ b/src/acbf/AcbfPublishinfo.cpp @@ -80,19 +80,8 @@ bool PublishInfo::fromXml(QXmlStreamReader *xmlReader) { - while(xmlReader->readNext()) + while(xmlReader->readNextStartElement()) { - if(xmlReader->tokenType() == QXmlStreamReader::EndElement) { - if(xmlReader->name() == "publish-info") { - break; - } - else { - continue; - } - } - if(xmlReader->tokenType() == QXmlStreamReader::Characters) { - continue; - } if(xmlReader->name() == "publisher") { setPublisher(xmlReader->readElementText()); @@ -102,6 +91,8 @@ QString date = xmlReader->attributes().value("value").toString(); if(date.isEmpty()) { date = xmlReader->readElementText(); + } else { + xmlReader->skipCurrentElement(); } setPublishDate(QDate::fromString(date)); } diff --git a/src/acbf/AcbfTextarea.cpp b/src/acbf/AcbfTextarea.cpp --- a/src/acbf/AcbfTextarea.cpp +++ b/src/acbf/AcbfTextarea.cpp @@ -111,19 +111,8 @@ } } - while(xmlReader->readNext()) + while(xmlReader->readNextStartElement()) { - if(xmlReader->tokenType() == QXmlStreamReader::EndElement) { - if(xmlReader->name() == "text-area") { - break; - } - else { - continue; - } - } - if(xmlReader->tokenType() == QXmlStreamReader::Characters) { - continue; - } if(xmlReader->name() == "p") { d->paragraphs.append(xmlReader->readElementText(QXmlStreamReader::IncludeChildElements)); diff --git a/src/acbf/AcbfTextlayer.cpp b/src/acbf/AcbfTextlayer.cpp --- a/src/acbf/AcbfTextlayer.cpp +++ b/src/acbf/AcbfTextlayer.cpp @@ -69,19 +69,8 @@ { setBgcolor(xmlReader->attributes().value("bgcolor").toString()); setLanguage(xmlReader->attributes().value("lang").toString()); - while(xmlReader->readNext()) + while(xmlReader->readNextStartElement()) { - if(xmlReader->tokenType() == QXmlStreamReader::EndElement) { - if(xmlReader->name() == "text-layer") { - break; - } - else { - continue; - } - } - if(xmlReader->tokenType() == QXmlStreamReader::Characters) { - continue; - } if(xmlReader->name() == "text-area") { Textarea* newArea = new Textarea(this);