Warning, file /office/calligra/filters/libodfreader/OdfParser.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /* This file is part of the KDE project
0002 
0003    SPDX-FileCopyrightText: 2013 Inge Wallin <inge@lysator.liu.se>
0004 
0005    SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 
0009 // Own
0010 #include "OdfParser.h"
0011 
0012 // Calligra
0013 #include <KoStore.h>
0014 #include <KoXmlReader.h>
0015 #include <KoXmlNS.h>
0016 
0017 #include "OdfReaderDebug.h"
0018 
0019 OdfParser::OdfParser()
0020 {
0021 }
0022 
0023 OdfParser::~OdfParser()
0024 {
0025 }
0026 
0027 
0028 KoFilter::ConversionStatus OdfParser::parseMetadata(KoStore &odfStore,
0029                                                     // out parameters:
0030                                                     QHash<QString, QString> *metadata)
0031 {
0032     if (!odfStore.open("meta.xml")) {
0033         debugOdfReader << "Cannot open meta.xml";
0034         return KoFilter::FileNotFound;
0035     }
0036 
0037     // FIXME: Convert this to the KoXmlStreamReader.
0038     KoXmlDocument doc;
0039     QString errorMsg;
0040     int errorLine;
0041     int errorColumn;
0042     if (!doc.setContent(odfStore.device(), true, &errorMsg, &errorLine, &errorColumn)) {
0043         debugOdfReader << "Error occurred while parsing meta.xml "
0044                  << errorMsg << " in Line: " << errorLine
0045                  << " Column: " << errorColumn;
0046         odfStore.close();
0047         return KoFilter::ParsingError;
0048     }
0049 
0050     KoXmlNode childNode = doc.documentElement();
0051     childNode = KoXml::namedItemNS(childNode, KoXmlNS::office, "meta");
0052     KoXmlElement element;
0053     forEachElement (element, childNode) {
0054         metadata->insert(element.tagName(), element.text());
0055     }
0056 
0057     odfStore.close();
0058     return KoFilter::OK;
0059 }
0060 
0061 
0062 KoFilter::ConversionStatus OdfParser::parseManifest(KoStore &odfStore,
0063                                                     // out parameters:
0064                                                     QHash<QString, QString> *manifest)
0065 {
0066     if (!odfStore.open("META-INF/manifest.xml")) {
0067         debugOdfReader << "Cannot to open manifest.xml.";
0068         return KoFilter::FileNotFound;
0069     }
0070 
0071     // FIXME: Convert this to the KoXmlStreamReader.
0072     KoXmlDocument doc;
0073     QString errorMsg;
0074     int errorLine, errorColumn;
0075     if (!doc.setContent(odfStore.device(), true, &errorMsg, &errorLine, &errorColumn)) {
0076         debugOdfReader << "Error occurred while parsing meta.xml "
0077                  << errorMsg << " in Line: " << errorLine
0078                  << " Column: " << errorColumn;
0079         return KoFilter::ParsingError;
0080     }
0081 
0082     KoXmlNode childNode = doc.documentElement();
0083     KoXmlElement nodeElement;
0084     forEachElement (nodeElement, childNode) {
0085         // Normalize the file name, i.e. remove trailing slashes.
0086         QString path = nodeElement.attribute("full-path");
0087         if (path.endsWith(QLatin1Char('/')))
0088             path.chop(1);
0089         QString type = nodeElement.attribute("media-type");
0090 
0091         manifest->insert(path, type);
0092     }
0093 
0094     odfStore.close();
0095     return KoFilter::OK;
0096 }