[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: =?utf-8?q?=5Bcalligra=5D_libs/kotext/opendocument=3A_Fix_invalid?=
From: Pierre Ducroquet <pinaraf () pinaraf ! info>
Date: 2011-04-25 12:00:28
Message-ID: 20110425120028.81A27A60A4 () git ! kde ! org
[Download RAW message or body]
Git commit 6082115c052f113165a233e4cf27595126b56070 by Pierre Ducroquet.
Committed on 25/04/2011 at 14:01.
Pushed by ducroquet into branch 'master'.
Fix invalid XML generation with RDF and changetracking
M +30 -2 libs/kotext/opendocument/KoTextWriter.cpp
http://commits.kde.org/calligra/6082115c052f113165a233e4cf27595126b56070
diff --git a/libs/kotext/opendocument/KoTextWriter.cpp \
b/libs/kotext/opendocument/KoTextWriter.cpp index 76b33e8..bfb2151 100644
--- a/libs/kotext/opendocument/KoTextWriter.cpp
+++ b/libs/kotext/opendocument/KoTextWriter.cpp
@@ -68,6 +68,7 @@
#include <changetracker/KoFormatChangeInformation.h>
#include <KoGenChange.h>
#include <KoGenChanges.h>
+#include <KoXmlWriter.h>
#include <rdf/KoDocumentRdfBase.h>
#include <KoTableOfContentsGeneratorInfo.h>
@@ -176,11 +177,13 @@ public:
QTextBlock& saveList(QTextBlock &block, QHash<QTextList *, QString> &listStyles, \
int level);
void saveTableOfContents(QTextDocument *document, int from, int to, \
QHash<QTextList *, QString> &listStyles, QTextTable *currentTable, QTextFrame *toc); \
void writeBlocks(QTextDocument *document, int from, int to, QHash<QTextList *, \
QString> &listStyles, QTextTable *currentTable = 0, QTextFrame *currentFrame = 0, \
QTextList *currentList = 0); + void saveInlineRdf(KoTextInlineRdf *rdf, \
TagInformation *tagInfos); int checkForBlockChange(const QTextBlock &block);
int checkForListItemChange(const QTextBlock &block);
int checkForListChange(const QTextBlock &block);
int checkForTableRowChange(int position);
int checkForTableColumnChange(int position);
+
KoShapeSavingContext &context;
KoTextSharedSavingData *sharedData;
KoXmlWriter *writer;
@@ -812,6 +815,29 @@ QHash<QTextList *, QString> \
KoTextWriter::Private::saveListStyles(QTextBlock blo return listStyles;
}
+void KoTextWriter::Private::saveInlineRdf(KoTextInlineRdf* rdf, \
KoTextWriter::TagInformation* tagInfos) +{
+ QBuffer rdfXmlData;
+ KoXmlWriter *rdfXmlWriter = new KoXmlWriter(&rdfXmlData);
+ rdfXmlWriter->startDocument("rdf");
+ rdfXmlWriter->startElement("rdf");
+ rdf->saveOdf(context, rdfXmlWriter);
+ rdfXmlWriter->endElement();
+ rdfXmlWriter->endDocument();
+ KoXmlDocument *xmlReader = new KoXmlDocument;
+ xmlReader->setContent(rdfXmlData.data(), true);
+ KoXmlElement mainElement = xmlReader->documentElement();
+ QPair<QString, QString> attributeNameNS;
+ foreach (attributeNameNS, mainElement.attributeFullNames()) {
+ QString attributeName = \
QString("%1:%2").arg(KoXmlNS::nsURI2NS(attributeNameNS.first)) + \
.arg(attributeNameNS.second); + if (attributeName.startsWith(':'))
+ attributeName.prepend("xml");
+ tagInfos->addAttribute(attributeName, \
mainElement.attribute(attributeNameNS.second)); + }
+ delete(rdfXmlWriter);
+}
+
void KoTextWriter::Private::saveParagraph(const QTextBlock &block, int from, int to)
{
QTextCursor cursor(block);
@@ -1005,7 +1031,8 @@ void KoTextWriter::Private::saveParagraph(const QTextBlock \
&block, int from, int
if (KoTextInlineRdf* inlineRdf = \
KoTextInlineRdf::tryToGetInlineRdf(charFormat)) { // Write xml:id here for Rdf
kDebug(30015) << "have inline rdf xmlid:" << \
inlineRdf->xmlId();
- inlineRdf->saveOdf(context, writer);
+ saveInlineRdf(inlineRdf, &fragmentTagInformation);
+ //inlineRdf->saveOdf(context, writer);
}
} else if (!styleName.isEmpty() /*&& !identical*/) {
fragmentTagInformation.setTagName("text:span");
@@ -1013,7 +1040,8 @@ void KoTextWriter::Private::saveParagraph(const QTextBlock \
&block, int from, int
if (KoTextInlineRdf* inlineRdf = \
KoTextInlineRdf::tryToGetInlineRdf(charFormat)) { // Write xml:id here for Rdf
kDebug(30015) << "have inline rdf xmlid:" << \
inlineRdf->xmlId();
- inlineRdf->saveOdf(context, writer);
+ saveInlineRdf(inlineRdf, &fragmentTagInformation);
+ //inlineRdf->saveOdf(context, writer);
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic