void InsertProjectTester::testExistingResourceRequest() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addCalendar( part ); addResourceGroup( part ); addResource( part ); addTask( part ); addGroupRequest( part ); addResourceRequest( part ); QDomDocument doc = part.saveXML(); Project &p = part.getProject(); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); Project &p2 = part2.getProject(); QVERIFY( p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ) != 0 ); KoXmlDocument xdoc; xdoc.setContent( doc.toString() ); part.loadXML( xdoc, 0 ); part2.insertProject( part.getProject(), 0, 0 ); QVERIFY( p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ) != 0 ); QVERIFY( p2.childNode( 1 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ) != 0 ); }
KoShape *SvgShapeFactory::createShapeFromOdf(const KoXmlElement &element, KoShapeLoadingContext &context) { const KoXmlElement & imageElement(KoXml::namedItemNS(element, KoXmlNS::draw, "image")); if (imageElement.isNull()) { kError(30006) << "svg image element not found"; return 0; } if (imageElement.tagName() == "image") { kDebug(30006) << "trying to create shapes form svg image"; QString href = imageElement.attribute("href"); if (href.isEmpty()) return 0; // check the mimetype if (href.startsWith("./")) { href.remove(0,2); } QString mimetype = context.odfLoadingContext().mimeTypeForPath(href); kDebug(30006) << mimetype; if (mimetype != "image/svg+xml") return 0; if (!context.odfLoadingContext().store()->open(href)) return 0; KoStoreDevice dev(context.odfLoadingContext().store()); KoXmlDocument xmlDoc; int line, col; QString errormessage; const bool parsed = xmlDoc.setContent(&dev, &errormessage, &line, &col); context.odfLoadingContext().store()->close(); if (! parsed) { kError(30006) << "Error while parsing file: " << "at line " << line << " column: " << col << " message: " << errormessage << endl; return 0; } SvgParser parser(context.documentResourceManager()); QList<KoShape*> shapes = parser.parseSvg(xmlDoc.documentElement()); if (shapes.isEmpty()) return 0; if (shapes.count() == 1) return shapes.first(); KoShapeGroup *svgGroup = new KoShapeGroup; KoShapeGroupCommand cmd(svgGroup, shapes); cmd.redo(); return svgGroup; } return 0; }
KoShape* StencilShapeFactory:: createFromSvg(QIODevice* in, KoDocumentResourceManager* documentRes) const { if (!in->open(QIODevice::ReadOnly)) { qDebug() << "svg file open error"; return 0; } int line, col; QString errormessage; KoXmlDocument inputDoc; const bool parsed = inputDoc.setContent(in, &errormessage, &line, &col); in->close(); if (!parsed) { qDebug() << "Error while parsing file: " << "at line " << line << " column: " << col << " message: " << errormessage << endl; return 0; } SvgParser parser(documentRes); parser.setXmlBaseDir(id()); QList<KoShape*> shapes = parser.parseSvg(inputDoc.documentElement()); if (shapes.isEmpty()) return 0; if (shapes.count() == 1) return shapes.first(); KoShapeGroup *svgGroup = new KoShapeGroup; KoShapeGroupCommand cmd(svgGroup, shapes); cmd.redo(); return svgGroup; }
KoXmlDocument CellTest::xmlDocument(const QString &content) { KoXmlDocument document; QString xml = "<table:table-cell xmlns:text=\"urn:oasis:names:tc:opendocument:xmlns:text:1.0\" xmlns:table=\"urn:oasis:names:tc:opendocument:xmlns:table:1.0\" xmlns:draw=\"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\" xmlns:style=\"urn:oasis:names:tc:opendocument:xmlns:style:1.0\" xmlns:number=\"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\" >" + content + "</table:table-cell>"; bool ok = document.setContent(xml, true); return ok ? document : KoXmlDocument(); }
void TestKoShapeFactory::testOdfElement() { KoShapeFactoryBase * factory = new KoPathShapeFactory(QStringList()); QVERIFY(factory->odfElements().front().second.contains("path")); QVERIFY(factory->odfElements().front().second.contains("line")); QVERIFY(factory->odfElements().front().second.contains("polyline")); QVERIFY(factory->odfElements().front().second.contains("polygon")); QVERIFY(factory->odfElements().front().first == KoXmlNS::draw); QBuffer xmldevice; xmldevice.open(QIODevice::WriteOnly); QTextStream xmlstream(&xmldevice); xmlstream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; xmlstream << "<office:document-content xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" xmlns:meta=\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\" xmlns:config=\"urn:oasis:names:tc:opendocument:xmlns:config:1.0\" xmlns:text=\"urn:oasis:names:tc:opendocument:xmlns:text:1.0\" xmlns:table=\"urn:oasis:names:tc:opendocument:xmlns:table:1.0\" xmlns:draw=\"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\" xmlns:presentation=\"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\" xmlns:dr3d=\"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\" xmlns:chart=\"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\" xmlns:form=\"urn:oasis:names:tc:opendocument:xmlns:form:1.0\" xmlns:script=\"urn:oasis:names:tc:opendocument:xmlns:script:1.0\" xmlns:style=\"urn:oasis:names:tc:opendocument:xmlns:style:1.0\" xmlns:number=\"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\" xmlns:math=\"http://www.w3.org/1998/Math/MathML\" xmlns:svg=\"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\" xmlns:fo=\"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\" xmlns:koffice=\"http://www.koffice.org/2005/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">"; xmlstream << "<office:body>"; xmlstream << "<office:text>"; xmlstream << "<text:p text:style-name=\"P1\"><?opendocument cursor-position?></text:p>"; xmlstream << "<draw:path svg:d=\"M10,10L100,100\"></draw:path>"; xmlstream << "</office:text>"; xmlstream << "</office:body>"; xmlstream << "</office:document-content>"; xmldevice.close(); KoXmlDocument doc; QString errorMsg; int errorLine = 0; int errorColumn = 0; QCOMPARE(doc.setContent(&xmldevice, true, &errorMsg, &errorLine, &errorColumn), true); QCOMPARE(errorMsg.isEmpty(), true); QCOMPARE(errorLine, 0); QCOMPARE(errorColumn, 0); KoXmlElement contentElement = doc.documentElement(); KoXmlElement bodyElement = contentElement.firstChild().toElement(); // XXX: When loading is implemented, these no doubt have to be // sensibly filled. KoOdfStylesReader stylesReader; KoOdfLoadingContext odfContext(stylesReader, 0); KoShapeLoadingContext shapeContext(odfContext, 0); KoXmlElement textElement = bodyElement.firstChild().firstChild().toElement(); QVERIFY(textElement.tagName() == "p"); QCOMPARE(factory->supports(textElement, shapeContext), false); KoXmlElement pathElement = bodyElement.firstChild().lastChild().toElement(); QVERIFY(pathElement.tagName() == "path"); QCOMPARE(factory->supports(pathElement, shapeContext), true); KoShape *shape = factory->createDefaultShape(); QVERIFY(shape); QVERIFY(shape->loadOdf(pathElement, shapeContext)); delete shape; delete factory; }
bool Context::setContent( const QString &str ) { KoXmlDocument doc; if ( doc.setContent( str ) ) { return load( doc ); } return false; }
void InsertProjectTester::testExistingTeamResourceRequest() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addCalendar( part ); addResourceGroup( part ); Resource *r = addResource( part ); r->setName( "R1" ); r->setType( Resource::Type_Team ); ResourceGroup *tg = addResourceGroup( part ); tg->setName( "TG" ); Resource *t1 = addResource( part, tg ); t1->setName( "T1" ); r->addTeamMemberId( t1->id() ); Resource *t2 = addResource( part, tg ); t2->setName( "T2" ); r->addTeamMemberId( t2->id() ); addTask( part ); addGroupRequest( part ); addResourceRequest( part ); QDomDocument doc = part.saveXML(); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); Project &p2 = part2.getProject(); part2.insertProject( part.getProject(), 0, 0 ); ResourceRequest *rr = p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QCOMPARE( rr->resource()->teamMembers().count(), 2 ); QCOMPARE( rr->resource()->teamMembers().at( 0 ), t1 ); QCOMPARE( rr->resource()->teamMembers().at( 1 ), t2 ); KoXmlDocument xdoc; xdoc.setContent( doc.toString() ); part.loadXML( xdoc, 0 ); part2.insertProject( part.getProject(), 0, 0 ); QCOMPARE( p2.numChildren(), 2 ); QVERIFY( ! p2.childNode( 0 )->requests().isEmpty() ); rr = p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QCOMPARE( rr->resource()->teamMembers().count(), 2 ); QCOMPARE( rr->resource()->teamMembers().at( 0 ), t1 ); QCOMPARE( rr->resource()->teamMembers().at( 1 ), t2 ); QVERIFY( ! p2.childNode( 1 )->requests().isEmpty() ); rr = p2.childNode( 1 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QCOMPARE( rr->resource()->teamMembers().count(), 2 ); QCOMPARE( rr->resource()->teamMembers().at( 0 ), t1 ); QCOMPARE( rr->resource()->teamMembers().at( 1 ), t2 ); }
KoFilterEffectStack * FilterEffectResource::toFilterStack() const { KoFilterEffectStack * filterStack = new KoFilterEffectStack(); if (!filterStack) return 0; QByteArray data = m_data.toByteArray(); KoXmlDocument doc; doc.setContent(data); KoXmlElement e = doc.documentElement(); // only allow obect bounding box units if (e.hasAttribute("filterUnits") && e.attribute("filterUnits") != "objectBoundingBox") return 0; if (e.attribute("primitiveUnits") != "objectBoundingBox") return 0; // parse filter region rectangle QRectF filterRegion; filterRegion.setX(fromPercentage(e.attribute("x", "-0.1"))); filterRegion.setY(fromPercentage(e.attribute("y", "-0.1"))); filterRegion.setWidth(fromPercentage(e.attribute("width", "1.2"))); filterRegion.setHeight(fromPercentage(e.attribute("height", "1.2"))); filterStack->setClipRect(filterRegion); KoFilterEffectLoadingContext context(QString("")); KoFilterEffectRegistry * registry = KoFilterEffectRegistry::instance(); // create the filter effects and add them to the shape for (KoXmlNode n = e.firstChild(); !n.isNull(); n = n.nextSibling()) { KoXmlElement primitive = n.toElement(); KoFilterEffect * filterEffect = registry->createFilterEffectFromXml(primitive, context); if (!filterEffect) { qWarning() << "filter effect" << primitive.tagName() << "is not implemented yet"; continue; } // parse subregion qreal x = fromPercentage(primitive.attribute("x", "0")); qreal y = fromPercentage(primitive.attribute("y", "0")); qreal w = fromPercentage(primitive.attribute("width", "1")); qreal h = fromPercentage(primitive.attribute("height", "1")); QRectF subRegion(QPointF(x, y), QSizeF(w, h)); if (primitive.hasAttribute("in")) filterEffect->setInput(0, primitive.attribute("in")); if (primitive.hasAttribute("result")) filterEffect->setOutput(primitive.attribute("result")); filterEffect->setFilterRect(subRegion); filterStack->appendFilterEffect(filterEffect); } return filterStack; }
static QRectF layout(BasicElement* element, const QString& input) { KoXmlDocument doc; doc.setContent( input ); element->readMathML(doc.documentElement()); AttributeManager am; element->layout( &am ); return element->boundingRect(); }
KoOasisSettings::KoOasisSettings(const KoXmlDocument& doc) : m_settingsElement(KoXml::namedItemNS(doc.documentElement(), KoXmlNS::office, "settings")), m_configNsUri(KoXmlNS::config) , d(0) { const KoXmlElement contents = doc.documentElement(); if (m_settingsElement.isNull()) kDebug(30003) << " document doesn't have tag 'office:settings'"; }
KoOasisSettings::KoOasisSettings(const KoXmlDocument& doc, const char* officeNSURI, const char* configNSURI) : m_settingsElement(KoXml::namedItemNS(doc.documentElement(), officeNSURI, "settings")), m_configNsUri(configNSURI) , d(0) { const KoXmlElement contents = doc.documentElement(); if (m_settingsElement.isNull()) kDebug(30003) << " document doesn't have tag 'office:settings'"; }
bool KoDocumentInfo::load(const KoXmlDocument& doc) { if (!loadAboutInfo(doc.documentElement())) return false; if (!loadAuthorInfo(doc.documentElement())) return false; return true; }
bool KraConverter::loadXML(const KoXmlDocument &doc, KoStore *store) { Q_UNUSED(store); KoXmlElement root; KoXmlNode node; if (doc.doctype().name() != "DOC") { m_doc->setErrorMessage(i18n("The format is not supported or the file is corrupted")); return false; } root = doc.documentElement(); int syntaxVersion = root.attribute("syntaxVersion", "3").toInt(); if (syntaxVersion > 2) { m_doc->setErrorMessage(i18n("The file is too new for this version of Krita (%1).", syntaxVersion)); return false; } if (!root.hasChildNodes()) { m_doc->setErrorMessage(i18n("The file has no layers.")); return false; } m_kraLoader = new KisKraLoader(m_doc, syntaxVersion); // Legacy from the multi-image .kra file period. for (node = root.firstChild(); !node.isNull(); node = node.nextSibling()) { if (node.isElement()) { if (node.nodeName() == "IMAGE") { KoXmlElement elem = node.toElement(); if (!(m_image = m_kraLoader->loadXML(elem))) { if (m_kraLoader->errorMessages().isEmpty()) { m_doc->setErrorMessage(i18n("Unknown error.")); } else { m_doc->setErrorMessage(m_kraLoader->errorMessages().join(".\n")); } return false; } return true; } else { if (m_kraLoader->errorMessages().isEmpty()) { m_doc->setErrorMessage(i18n("The file does not contain an image.")); } return false; } } } return false; }
bool KraConverter::oldLoadAndParse(KoStore *store, const QString &filename, KoXmlDocument &xmldoc) { //dbgUI <<"Trying to open" << filename; if (!store->open(filename)) { warnUI << "Entry " << filename << " not found!"; m_doc->setErrorMessage(i18n("Could not find %1", filename)); return false; } // Error variables for QDomDocument::setContent QString errorMsg; int errorLine, errorColumn; bool ok = xmldoc.setContent(store->device(), &errorMsg, &errorLine, &errorColumn); store->close(); if (!ok) { errUI << "Parsing error in " << filename << "! Aborting!" << endl << " In line: " << errorLine << ", column: " << errorColumn << endl << " Error message: " << errorMsg << endl; m_doc->setErrorMessage(i18n("Parsing error in %1 at line %2, column %3\nError message: %4" , filename , errorLine, errorColumn , QCoreApplication::translate("QXml", errorMsg.toUtf8(), 0, QCoreApplication::UnicodeUTF8))); return false; } dbgUI << "File" << filename << " loaded and parsed"; return true; }
void InsertProjectTester::testExistingRequiredResourceRequest() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addCalendar( part ); addResourceGroup( part ); Resource *r = addResource( part ); ResourceGroup *g = addResourceGroup( part ); g->setType( ResourceGroup::Type_Material ); QList<Resource*> m; m << addResource( part, g ); m.first()->setType( Resource::Type_Material ); r->setRequiredIds( QStringList() << m.first()->id() ); addTask( part ); addGroupRequest( part ); addResourceRequest( part ); QDomDocument doc = part.saveXML(); Project &p = part.getProject(); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); Project &p2 = part2.getProject(); ResourceRequest *rr = p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QVERIFY( ! rr->requiredResources().isEmpty() ); QCOMPARE( rr->requiredResources().at( 0 ), m.first() ); KoXmlDocument xdoc; xdoc.setContent( doc.toString() ); part.loadXML( xdoc, 0 ); part2.insertProject( part.getProject(), 0, 0 ); rr = p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QVERIFY( ! rr->requiredResources().isEmpty() ); QCOMPARE( rr->requiredResources().at( 0 ), m.first() ); rr = p2.childNode( 1 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QVERIFY( ! rr->requiredResources().isEmpty() ); QCOMPARE( rr->requiredResources().at( 0 ), m.first() ); }
void TestKoShapeRegistry::testCreateFramedShapes() { QBuffer xmldevice; xmldevice.open(QIODevice::WriteOnly); QTextStream xmlstream(&xmldevice); xmlstream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; xmlstream << "<office:document-content xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" xmlns:meta=\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\" xmlns:config=\"urn:oasis:names:tc:opendocument:xmlns:config:1.0\" xmlns:text=\"urn:oasis:names:tc:opendocument:xmlns:text:1.0\" xmlns:table=\"urn:oasis:names:tc:opendocument:xmlns:table:1.0\" xmlns:draw=\"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\" xmlns:presentation=\"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\" xmlns:dr3d=\"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\" xmlns:chart=\"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\" xmlns:form=\"urn:oasis:names:tc:opendocument:xmlns:form:1.0\" xmlns:script=\"urn:oasis:names:tc:opendocument:xmlns:script:1.0\" xmlns:style=\"urn:oasis:names:tc:opendocument:xmlns:style:1.0\" xmlns:number=\"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\" xmlns:math=\"http://www.w3.org/1998/Math/MathML\" xmlns:svg=\"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\" xmlns:fo=\"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\" xmlns:calligra=\"http://www.calligra.org/2005/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">"; xmlstream << "<office:body>"; xmlstream << "<office:text>"; xmlstream << "<draw:path svg:d=\"M0,0L100,100\"></draw:path>"; xmlstream << "</office:text>"; xmlstream << "</office:body>"; xmlstream << "</office:document-content>"; xmldevice.close(); KoXmlDocument doc; QString errorMsg; int errorLine = 0; int errorColumn = 0; QCOMPARE(doc.setContent(&xmldevice, true, &errorMsg, &errorLine, &errorColumn), true); QCOMPARE(errorMsg.isEmpty(), true); QCOMPARE(errorLine, 0); QCOMPARE(errorColumn, 0); KoXmlElement contentElement = doc.documentElement(); KoXmlElement bodyElement = contentElement.firstChild().toElement(); KoShapeRegistry * registry = KoShapeRegistry::instance(); // XXX: When loading is implemented, these no doubt have to be // sensibly filled. KoOdfStylesReader stylesReader; KoOdfLoadingContext odfContext(stylesReader, 0); KoShapeLoadingContext shapeContext(odfContext, 0); KoShape * shape = registry->createShapeFromOdf(bodyElement, shapeContext); QVERIFY(shape == 0); KoXmlElement pathElement = bodyElement.firstChild().firstChild().toElement(); shape = registry->createShapeFromOdf(pathElement, shapeContext); QVERIFY(shape != 0); QVERIFY(shape->shapeId() == KoPathShapeId); }
KoScriptingOdfManifestReader::KoScriptingOdfManifestReader(KoScriptingOdfStore *store, const KoXmlDocument &doc) : KoScriptingOdfReader(store, doc) { KoXmlElement elem = doc.documentElement(); KoXmlElement e; forEachElement(e, elem) if (e.tagName() == "manifest:file-entry") m_entries << QPair<QString,QString>(e.attribute("manifest:media-type"), e.attribute("manifest:full-path")); }
void KisKraLoadVisitor::loadNodeKeyframes(KisNode *node) { if (!m_keyframeFilenames.contains(node)) return; node->enableAnimation(); const QString &location = getLocation(m_keyframeFilenames[node]); if (!m_store->open(location)) { m_errorMessages << i18n("Could not load keyframes from %1.", location); return; } QString errorMsg; int errorLine; int errorColumn; KoXmlDocument doc = KoXmlDocument(true); bool ok = doc.setContent(m_store->device(), &errorMsg, &errorLine, &errorColumn); m_store->close(); if (!ok) { m_errorMessages << i18n("parsing error in the keyframe file %1 at line %2, column %3\nError message: %4", location, errorLine, errorColumn, i18n(errorMsg.toUtf8())); return; } QDomDocument dom; KoXml::asQDomElement(dom, doc.documentElement()); QDomElement root = dom.firstChildElement(); for (QDomElement child = root.firstChildElement(); !child.isNull(); child = child.nextSiblingElement()) { if (child.nodeName().toUpper() == "CHANNEL") { QString id = child.attribute("name"); KisKeyframeChannel *channel = node->getKeyframeChannel(id, true); if (!channel) { m_errorMessages << i18n("unknown keyframe channel type: %1 in %2", id, location); continue; } channel->loadXML(child); } } }
int ZefaniaLex::buildIndex() { QFile file(m_modulePath); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::critical(0, QObject::tr("Error"), QObject::tr("Can not read the file")); myWarning() << "can't read the file"; return 1; } KoXmlDocument xmlDoc; QString error; int l; int c; if(!xmlDoc.setContent(&file, &error, &l, &c)) { QMessageBox::critical(0, QObject::tr("Error"), QObject::tr("The file is not valid. Errorstring: %1 in Line %2 at Position %3").arg(error).arg(l).arg(c)); myWarning() << "the file isn't valid"; return 1; } return buildIndexFromXmlDoc(&xmlDoc).name().isEmpty() ? 2 : 0; }
/** Load a Zefania XML Lex file the first time. Generates an index for fast access. */ MetaInfo ZefaniaLex::buildIndexFromData(const QString &fileData, const QString &fileName) { DEBUG_FUNC_NAME m_modulePath = fileName; KoXmlDocument xmldoc; QString errorMsg; int eLine; int eCol; if(!xmldoc.setContent(fileData, &errorMsg, &eLine, &eCol)) { QMessageBox::critical(0, QObject::tr("Error"), QObject::tr("The file is not valid")); myWarning() << "the file isn't valid , error = " << errorMsg << " line = " << eLine << " column = " << eCol; return MetaInfo(); } return buildIndexFromXmlDoc(&xmldoc); }
KoFilter::ConversionStatus MpxjImport::convert(const QByteArray& from, const QByteArray& to) { kDebug(planMpxjDbg()) << from << to; if ( to != "application/x-vnd.kde.plan" || ! mimeTypes().contains( from ) ) { kDebug(planMpxjDbg())<<"Bad mime types:"<<from<<"->"<<to; return KoFilter::BadMimeType; } bool batch = false; if ( m_chain->manager() ) { batch = m_chain->manager()->getBatchMode(); } if (batch) { //TODO kDebug(planMpxjDbg()) << "batch mode not implemented"; return KoFilter::NotImplemented; } KoDocument *part = m_chain->outputDocument(); if ( ! part ) { kDebug(planMpxjDbg()) << "could not open document"; return KoFilter::InternalError; } QString inputFile = m_chain->inputFile(); kDebug(planMpxjDbg())<<"Import from:"<<inputFile; QTemporaryDir *tmp = new QTemporaryDir(); QString outFile( tmp->path() + "/maindoc.xml" ); kDebug(planMpxjDbg())<<"Temp file:"<<outFile; KoFilter::ConversionStatus sts = doImport( inputFile.toUtf8(), outFile.toUtf8() ); kDebug(planMpxjDbg())<<"doImport returned:"<<(sts == KoFilter::OK); if ( sts == KoFilter::OK ) { QFile file( outFile ); KoXmlDocument doc; if ( ! doc.setContent( &file ) ) { kDebug(planMpxjDbg()) << "could not read maindoc.xml"; sts = KoFilter::InternalError; } else if ( ! part->loadXML( doc, 0 ) ) { kDebug(planMpxjDbg()) << "failed to load maindoc.xml"; sts = KoFilter::InternalError; } } delete tmp; return sts; }
// static bool PasteCommand::unknownShiftDirection(const QMimeData *mimeData) { if (!mimeData) { return false; } QByteArray byteArray; if (mimeData->hasFormat("application/x-kspread-snippet")) { byteArray = mimeData->data("application/x-kspread-snippet"); } else { return false; } QString errorMsg; int errorLine; int errorColumn; KoXmlDocument d; if (!d.setContent(byteArray, false, &errorMsg, &errorLine, &errorColumn)) { // an error occurred kDebug() << "An error occurred." << "line:" << errorLine << "col:" << errorColumn << errorMsg; return false; } KoXmlElement e = d.documentElement(); if (!e.namedItem("columns").toElement().isNull()) { return false; } if (!e.namedItem("rows").toElement().isNull()) { return false; } KoXmlElement c = e.firstChild().toElement(); for (; !c.isNull(); c = c.nextSibling().toElement()) { if (c.tagName() == "cell") { return true; } } return false; }
bool KoOdfLoadingContext::parseManifest(const KoXmlDocument &manifestDocument) { // First find the manifest:manifest node. KoXmlNode n = manifestDocument.firstChild(); kDebug(30006) << "Searching for manifest:manifest " << n.toElement().nodeName(); for (; !n.isNull(); n = n.nextSibling()) { if (!n.isElement()) { kDebug(30006) << "NOT element"; continue; } else { kDebug(30006) << "element"; } kDebug(30006) << "name:" << n.toElement().localName() << "namespace:" << n.toElement().namespaceURI(); if (n.toElement().localName() == "manifest" && n.toElement().namespaceURI() == KoXmlNS::manifest) { kDebug(30006) << "found manifest:manifest"; break; } } if (n.isNull()) { kDebug(30006) << "Could not find manifest:manifest"; return false; } // Now loop through the children of the manifest:manifest and // store all the manifest:file-entry elements. const KoXmlElement manifestElement = n.toElement(); for (n = manifestElement.firstChild(); !n.isNull(); n = n.nextSibling()) { if (!n.isElement()) continue; KoXmlElement el = n.toElement(); if (!(el.localName() == "file-entry" && el.namespaceURI() == KoXmlNS::manifest)) continue; QString fullPath = el.attributeNS(KoXmlNS::manifest, "full-path", QString()); QString mediaType = el.attributeNS(KoXmlNS::manifest, "media-type", QString("")); QString version = el.attributeNS(KoXmlNS::manifest, "version", QString()); // Only if fullPath is valid, should we store this entry. // If not, we don't bother to find out exactly what is wrong, we just skip it. if (!fullPath.isNull()) { d->manifestEntries.insert(fullPath, new KoOdfManifestEntry(fullPath, mediaType, version)); } } return true; }
void SchedulerTester::test() { QString dir = QString::fromLatin1( KDESRCDIR ) + "data/"; foreach ( const QString &fname, data() ) { qDebug()<<"Testing file:"<<fname; QFile file( dir + fname ); QVERIFY2( file.open( QIODevice::ReadOnly ), fname.toLatin1() ); KoXmlDocument doc; QString error; bool setContent; int line, column; if ( ! ( setContent = doc.setContent( &file, &error, &line, &column ) ) ) { file.close(); QString s = QString( "%1: %2 Line %3, column %4" ).arg( fname ).arg( error ).arg( line ).arg( column ); QVERIFY2( setContent, s.toLatin1() ); } file.close(); testProject( fname, doc ); }
MetaInfo ZefaniaLex::buildIndexFromFile(const QString &fileName) { KoXmlDocument xmldoc; QString errorMsg; int eLine; int eCol; QFile file(fileName); if(!file.open(QIODevice::ReadOnly)) return MetaInfo(); if(!xmldoc.setContent(&file, &errorMsg, &eLine, &eCol)) { QMessageBox::critical(0, QObject::tr("Error"), QObject::tr("The file is not valid")); myWarning() << "the file isn't valid , error = " << errorMsg << " line = " << eLine << " column = " << eCol; return MetaInfo(); } const MetaInfo ret = buildIndexFromXmlDoc(&xmldoc); file.close(); return ret; }
void InsertProjectTester::testExistingResourceCalendar() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); Calendar *c = addCalendar( part ); Project &p = part.getProject(); QVERIFY( p.calendarCount() == 1 ); addResourceGroup( part ); Resource *r = addResource( part ); part.addCommand( new ModifyResourceCalendarCmd( r, c ) ); QVERIFY( p.resourceGroupAt( 0 )->numResources() == 1 ); QDomDocument doc = part.saveXML(); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->numResources() == 1 ); QCOMPARE( part2.getProject().allCalendars().count(), 1 ); QVERIFY( part2.getProject().allCalendars().contains( c ) ); QCOMPARE( part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->calendar( true ), c ); part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->setCalendar( 0 ); KoXmlDocument xdoc; xdoc.setContent( doc.toString() ); part.loadXML( xdoc, 0 ); part2.insertProject( part.getProject(), 0, 0 ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->numResources() == 1 ); QCOMPARE( part2.getProject().allCalendars().count(), 1 ); QVERIFY( part2.getProject().allCalendars().contains( c ) ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->calendar( true ) == 0 ); }
QObject *KoScriptingOdfStore::open(const QString &fileName) { delete m_reader; m_reader = 0; KoStore *store = getReadStore(); if (! store) return 0; if (store->isOpen()) store->close(); if (! store->open(fileName)) { kWarning(32010) <<"KoScriptingOdfStore::openFile() Failed to open file:"<<fileName; return 0; } //kDebug(32010) <<"KoScriptingOdfStore::openFile() fileName="<<fileName<<" store->isOpen="<<store->isOpen()<<endl; Q_ASSERT(store->device()); //KoOasisStore oasisStore(store); KoXmlDocument doc; QString errorMsg; int errorLine, errorColumn; if (! doc.setContent(store->device(), &errorMsg, &errorLine, &errorColumn)) { kWarning(32010) << "Parse-Error message" << errorMsg << "line" << errorLine << "col" << errorColumn; return 0; } const QString tagName = doc.documentElement().tagName(); kDebug(32010) <<"KoScriptingOdfStore::open documentElement.tagName="<<tagName; if (tagName == "office:document-content") m_reader = new KoScriptingOdfContentReader(this, doc); if (tagName == "office:document-styles") m_reader = new KoScriptingOdfStylesReader(this, doc); else if (tagName == "manifest:manifest") m_reader = new KoScriptingOdfManifestReader(this, doc); else m_reader = new KoScriptingOdfReader(this, doc); return m_reader; }
void InsertProjectTester::testExistingResourceAccount() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addResourceGroup( part ); Resource *r = addResource( part ); Account *a = addAccount( part ); part.addCommand( new ResourceModifyAccountCmd( *r, r->account(), a ) ); Project &p = part.getProject(); QVERIFY( p.resourceGroupAt( 0 )->numResources() == 1 ); QDomDocument doc = part.saveXML(); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->numResources() == 1 ); QVERIFY( part2.getProject().accounts().allAccounts().contains( a ) ); QCOMPARE( part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->account(), a ); part2.addCommand( new ResourceModifyAccountCmd( *(part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )), part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->account(), 0 ) ); KoXmlDocument xdoc; xdoc.setContent( doc.toString() ); part.loadXML( xdoc, 0 ); part2.insertProject( part.getProject(), 0, 0 ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->numResources() == 1 ); QVERIFY( part2.getProject().accounts().allAccounts().contains( a ) ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->account() == 0 ); }
void KoOdfStylesReader::createStyleMap(const KoXmlDocument& doc, bool stylesDotXml) { const KoXmlElement docElement = doc.documentElement(); // We used to have the office:version check here, but better let the apps do that KoXmlElement fontStyles = KoXml::namedItemNS(docElement, KoXmlNS::office, "font-face-decls"); if (!fontStyles.isNull()) { //kDebug(30003) <<"Starting reading in font-face-decls..."; insertStyles(fontStyles, stylesDotXml ? AutomaticInStyles : AutomaticInContent); }// else // kDebug(30003) <<"No items found"; //kDebug(30003) <<"Starting reading in office:automatic-styles. stylesDotXml=" << stylesDotXml; KoXmlElement autoStyles = KoXml::namedItemNS(docElement, KoXmlNS::office, "automatic-styles"); if (!autoStyles.isNull()) { insertStyles(autoStyles, stylesDotXml ? AutomaticInStyles : AutomaticInContent); }// else // kDebug(30003) <<"No items found"; //kDebug(30003) <<"Reading in master styles"; KoXmlNode masterStyles = KoXml::namedItemNS(docElement, KoXmlNS::office, "master-styles"); if (!masterStyles.isNull()) { KoXmlElement master; forEachElement(master, masterStyles) { if (master.localName() == "master-page" && master.namespaceURI() == KoXmlNS::style) { const QString name = master.attributeNS(KoXmlNS::style, "name", QString()); kDebug(30003) << "Master style: '" << name << "' loaded"; d->masterPages.insert(name, new KoXmlElement(master)); } else if (master.localName() == "layer-set" && master.namespaceURI() == KoXmlNS::draw) { kDebug(30003) << "Master style: layer-set loaded"; d->layerSet = master; } else // OASIS docu mentions style:handout-master and draw:layer-set here kWarning(30003) << "Unknown tag " << master.tagName() << " in office:master-styles"; } }
bool Doc::loadXML(const KoXmlDocument& doc, KoStore*) { QPointer<KoUpdater> updater; if (progressUpdater()) { updater = progressUpdater()->startSubtask(1, "KSpread::Doc::loadXML"); updater->setProgress(0); } d->spellListIgnoreAll.clear(); // <spreadsheet> KoXmlElement spread = doc.documentElement(); if (spread.attribute("mime") != "application/x-kspread" && spread.attribute("mime") != "application/vnd.kde.kspread") { setErrorMessage(i18n("Invalid document. Expected mimetype application/x-kspread or application/vnd.kde.kspread, got %1" , spread.attribute("mime"))); return false; } bool ok = false; int version = spread.attribute("syntaxVersion").toInt(&ok); map()->setSyntaxVersion(ok ? version : 0); if (map()->syntaxVersion() > CURRENT_SYNTAX_VERSION) { int ret = KMessageBox::warningContinueCancel( 0, i18n("This document was created with a newer version of Calligra Sheets (syntax version: %1)\n" "When you open it with this version of Calligra Sheets, some information may be lost.", map()->syntaxVersion()), i18n("File Format Mismatch"), KStandardGuiItem::cont()); if (ret == KMessageBox::Cancel) { setErrorMessage("USER_CANCELED"); return false; } } // <locale> KoXmlElement loc = spread.namedItem("locale").toElement(); if (!loc.isNull()) static_cast<Localization*>(map()->calculationSettings()->locale())->load(loc); if (updater) updater->setProgress(5); KoXmlElement defaults = spread.namedItem("defaults").toElement(); if (!defaults.isNull()) { double dim = defaults.attribute("row-height").toDouble(&ok); if (!ok) return false; map()->setDefaultRowHeight(dim); dim = defaults.attribute("col-width").toDouble(&ok); if (!ok) return false; map()->setDefaultColumnWidth(dim); } KoXmlElement ignoreAll = spread.namedItem("SPELLCHECKIGNORELIST").toElement(); if (!ignoreAll.isNull()) { KoXmlElement spellWord = spread.namedItem("SPELLCHECKIGNORELIST").toElement(); spellWord = spellWord.firstChild().toElement(); while (!spellWord.isNull()) { if (spellWord.tagName() == "SPELLCHECKIGNOREWORD") { d->spellListIgnoreAll.append(spellWord.attribute("word")); } spellWord = spellWord.nextSibling().toElement(); } } if (updater) updater->setProgress(40); // In case of reload (e.g. from konqueror) qDeleteAll(map()->sheetList()); map()->sheetList().clear(); KoXmlElement styles = spread.namedItem("styles").toElement(); if (!styles.isNull()) { if (!map()->styleManager()->loadXML(styles)) { setErrorMessage(i18n("Styles cannot be loaded.")); return false; } } // <map> KoXmlElement mymap = spread.namedItem("map").toElement(); if (mymap.isNull()) { setErrorMessage(i18n("Invalid document. No map tag.")); return false; } if (!map()->loadXML(mymap)) { return false; } // named areas const KoXmlElement areaname = spread.namedItem("areaname").toElement(); if (!areaname.isNull()) map()->namedAreaManager()->loadXML(areaname); //Backwards compatibility with older versions for paper layout if (map()->syntaxVersion() < 1) { KoXmlElement paper = spread.namedItem("paper").toElement(); if (!paper.isNull()) { loadPaper(paper); } } if (updater) updater->setProgress(85); KoXmlElement element(spread.firstChild().toElement()); while (!element.isNull()) { QString tagName(element.tagName()); if (tagName != "locale" && tagName != "map" && tagName != "styles" && tagName != "SPELLCHECKIGNORELIST" && tagName != "areaname" && tagName != "paper") { // belongs to a plugin, load it and save it for later use QDomDocument doc; KoXml::asQDomElement(doc, element); d->savedDocParts[ tagName ] = doc; } element = element.nextSibling().toElement(); } if (updater) updater->setProgress(90); initConfig(); if (updater) updater->setProgress(100); return true; }