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 }