summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCédric Bosdonnat <cedricbosdo@openoffice.org>2011-03-31 12:43:00 +0200
committerCédric Bosdonnat <cedricbosdo@openoffice.org>2011-03-31 12:43:07 +0200
commit976e2c074b7abf9ad500a0cc7664110820512312 (patch)
treeb2c8ed7035f73e62eb7374121313b5f0e4ca6458
parentecd0148ba550cf033adf7781492c8821d841992e (diff)
fdo#34489: fix the docx import of comments, properly resolve all ids
Comment, footnote and endnote ids are integer values, not strings. The code was using string though the comments ids where defined as integers in the model.xml. All are changed to integer values from now.
-rw-r--r--writerfilter/inc/ooxml/OOXMLDocument.hxx10
-rw-r--r--writerfilter/source/ooxml/Handler.cxx6
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.cxx30
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.hxx14
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.cxx26
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.hxx12
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx6
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx4
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.cxx6
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.hxx6
-rw-r--r--writerfilter/source/ooxml/model.xml16
11 files changed, 68 insertions, 68 deletions
diff --git a/writerfilter/inc/ooxml/OOXMLDocument.hxx b/writerfilter/inc/ooxml/OOXMLDocument.hxx
index 0566e191a..ab25fb5b2 100644
--- a/writerfilter/inc/ooxml/OOXMLDocument.hxx
+++ b/writerfilter/inc/ooxml/OOXMLDocument.hxx
@@ -160,7 +160,7 @@ public:
*/
virtual void resolveFootnote(Stream & rStream,
const Id & rNoteType,
- const rtl::OUString & rNoteId) = 0;
+ const sal_Int32 nNoteId) = 0;
/**
Resolves an endnote to a stream handler.
@@ -173,7 +173,7 @@ public:
*/
virtual void resolveEndnote(Stream & rStream,
const Id & rNoteType,
- const rtl::OUString & rNoteId) = 0;
+ const sal_Int32 NoteId) = 0;
/**
Resolves a comment to a stream handler.
@@ -182,7 +182,7 @@ public:
@param rComment id of the comment to resolve
*/
virtual void resolveComment(Stream & rStream,
- const rtl::OUString & rCommentId) = 0;
+ const sal_Int32 nCommentId) = 0;
/**
Resolves a picture to a stream handler.
@@ -241,8 +241,8 @@ public:
virtual uno::Reference<io::XInputStream> getStorageStream() = 0;
virtual uno::Reference<io::XInputStream> getInputStreamForId
(const ::rtl::OUString & rId) = 0;
- virtual void setXNoteId(const rtl::OUString & rId) = 0;
- virtual const ::rtl::OUString & getXNoteId() const = 0;
+ virtual void setXNoteId(const sal_Int32 nId) = 0;
+ virtual sal_Int32 getXNoteId() const = 0;
virtual void setXNoteType(const Id & nId) = 0;
virtual const Id & getXNoteType() const = 0;
virtual const ::rtl::OUString & getTarget() const = 0;
diff --git a/writerfilter/source/ooxml/Handler.cxx b/writerfilter/source/ooxml/Handler.cxx
index af0616a8f..cad510a6e 100644
--- a/writerfilter/source/ooxml/Handler.cxx
+++ b/writerfilter/source/ooxml/Handler.cxx
@@ -51,7 +51,7 @@ void OOXMLFootnoteHandler::attribute(Id name, Value & val)
switch (name)
{
case NS_ooxml::LN_CT_FtnEdnRef_id:
- mpFastContext->resolveFootnote(val.getString());
+ mpFastContext->resolveFootnote(sal_Int32(val.getInt()));
break;
default:
break;
@@ -79,7 +79,7 @@ void OOXMLEndnoteHandler::attribute(Id name, Value & val)
switch (name)
{
case NS_ooxml::LN_CT_FtnEdnRef_id:
- mpFastContext->resolveEndnote(val.getString());
+ mpFastContext->resolveEndnote(sal_Int32(val.getInt()));
break;
default:
break;
@@ -107,7 +107,7 @@ void OOXMLCommentHandler::attribute(Id name, Value & val)
switch (name)
{
case NS_ooxml::LN_CT_Markup_id:
- mpFastContext->resolveComment(val.getString());
+ mpFastContext->resolveComment(val.getInt());
break;
default:
;
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
index 596ac0ccd..73403d2d1 100644
--- a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
@@ -76,7 +76,7 @@ void OOXMLDocumentImpl::resolveFastSubStream(Stream & rStreamHandler,
new OOXMLFastDocumentHandler(xContext);
pDocHandler->setStream(&rStreamHandler);
pDocHandler->setDocument(this);
- pDocHandler->setXNoteId(msXNoteId);
+ pDocHandler->setXNoteId(mnXNoteId);
uno::Reference < xml::sax::XFastDocumentHandler > xDocumentHandler
(pDocHandler);
@@ -107,14 +107,14 @@ void OOXMLDocumentImpl::resolveFastSubStreamWithId(Stream & rStream,
rStream.substream(nId, pStream);
}
-void OOXMLDocumentImpl::setXNoteId(const rtl::OUString & rId)
+void OOXMLDocumentImpl::setXNoteId(const sal_Int32 nId)
{
- msXNoteId = rId;
+ mnXNoteId = nId;
}
-const rtl::OUString & OOXMLDocumentImpl::getXNoteId() const
+sal_Int32 OOXMLDocumentImpl::getXNoteId() const
{
- return msXNoteId;
+ return mnXNoteId;
}
void OOXMLDocumentImpl::setXNoteType(const Id & nId)
@@ -148,18 +148,18 @@ OOXMLDocumentImpl::getSubStream(const rtl::OUString & rId)
writerfilter::Reference<Stream>::Pointer_t
OOXMLDocumentImpl::getXNoteStream(OOXMLStream::StreamType_t nType, const Id & rType,
- const rtl::OUString & rId)
+ const sal_Int32 nId)
{
#ifdef DEBUG_ELEMENT
debug_logger->startElement("getXNoteStream");
- debug_logger->attribute("id", rId);
+ debug_logger->attribute("id", nId);
debug_logger->endElement();
#endif
OOXMLStream::Pointer_t pStream =
(OOXMLDocumentFactory::createStream(mpStream, nType));
OOXMLDocumentImpl * pDocument = new OOXMLDocumentImpl(pStream);
- pDocument->setXNoteId(rId);
+ pDocument->setXNoteId(nId);
pDocument->setXNoteType(rType);
return writerfilter::Reference<Stream>::Pointer_t(pDocument);
@@ -167,10 +167,10 @@ OOXMLDocumentImpl::getXNoteStream(OOXMLStream::StreamType_t nType, const Id & rT
void OOXMLDocumentImpl::resolveFootnote(Stream & rStream,
const Id & rType,
- const rtl::OUString & rNoteId)
+ const sal_Int32 nNoteId)
{
writerfilter::Reference<Stream>::Pointer_t pStream =
- getXNoteStream(OOXMLStream::FOOTNOTES, rType, rNoteId);
+ getXNoteStream(OOXMLStream::FOOTNOTES, rType, nNoteId);
Id nId;
switch (rType)
@@ -189,10 +189,10 @@ void OOXMLDocumentImpl::resolveFootnote(Stream & rStream,
void OOXMLDocumentImpl::resolveEndnote(Stream & rStream,
const Id & rType,
- const rtl::OUString & rNoteId)
+ const sal_Int32 nNoteId)
{
writerfilter::Reference<Stream>::Pointer_t pStream =
- getXNoteStream(OOXMLStream::ENDNOTES, rType, rNoteId);
+ getXNoteStream(OOXMLStream::ENDNOTES, rType, nNoteId);
Id nId;
switch (rType)
@@ -210,10 +210,10 @@ void OOXMLDocumentImpl::resolveEndnote(Stream & rStream,
}
void OOXMLDocumentImpl::resolveComment(Stream & rStream,
- const rtl::OUString & rId)
+ const sal_Int32 nId)
{
writerfilter::Reference<Stream>::Pointer_t pStream =
- getXNoteStream(OOXMLStream::COMMENTS, 0, rId);
+ getXNoteStream(OOXMLStream::COMMENTS, 0, nId);
resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_annotation);
}
@@ -325,7 +325,7 @@ void OOXMLDocumentImpl::resolve(Stream & rStream)
new OOXMLFastDocumentHandler(xContext);
pDocHandler->setStream(&rStream);
pDocHandler->setDocument(this);
- pDocHandler->setXNoteId(msXNoteId);
+ pDocHandler->setXNoteId(mnXNoteId);
pDocHandler->setIsSubstream( mbIsSubstream );
uno::Reference < xml::sax::XFastDocumentHandler > xDocumentHandler
(pDocHandler);
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
index 8ad46154c..194dccea3 100644
--- a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
@@ -43,7 +43,7 @@ using namespace ::com::sun::star;
class OOXMLDocumentImpl : public OOXMLDocument
{
OOXMLStream::Pointer_t mpStream;
- rtl::OUString msXNoteId;
+ sal_Int32 mnXNoteId;
Id mXNoteType;
uno::Reference<frame::XModel> mxModel;
@@ -66,7 +66,7 @@ protected:
writerfilter::Reference<Stream>::Pointer_t
getXNoteStream(OOXMLStream::StreamType_t nType,
const Id & rType,
- const rtl::OUString & rNoteId);
+ const sal_Int32 nNoteId);
void setIsSubstream( bool bSubstream ) { mbIsSubstream = bSubstream; };
@@ -80,10 +80,10 @@ public:
virtual void resolveFootnote(Stream & rStream,
const Id & rType,
- const rtl::OUString & rNoteId);
+ const sal_Int32 nNoteId);
virtual void resolveEndnote(Stream & rStream,
const Id & rType,
- const rtl::OUString & rNoteId);
+ const sal_Int32 nNoteId);
virtual void resolveHeader(Stream & rStream,
const sal_Int32 type,
const rtl::OUString & rId);
@@ -91,7 +91,7 @@ public:
const sal_Int32 type,
const rtl::OUString & rId);
- virtual void resolveComment(Stream & rStream, const rtl::OUString & rId);
+ virtual void resolveComment(Stream & rStream, const sal_Int32 nId);
virtual OOXMLPropertySet * getPicturePropSet
(const ::rtl::OUString & rId);
@@ -106,8 +106,8 @@ public:
virtual uno::Reference<io::XInputStream> getInputStream();
virtual uno::Reference<io::XInputStream> getStorageStream();
virtual uno::Reference<io::XInputStream> getInputStreamForId(const rtl::OUString & rId);
- virtual void setXNoteId(const rtl::OUString & rId);
- virtual const ::rtl::OUString & getXNoteId() const;
+ virtual void setXNoteId(const sal_Int32 nId);
+ virtual sal_Int32 getXNoteId() const;
virtual void setXNoteType(const Id & rId);
virtual const Id & getXNoteType() const;
virtual const ::rtl::OUString & getTarget() const;
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
index 765385baf..685528b35 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -1020,37 +1020,37 @@ bool OOXMLFastContextHandler::isForwardEvents() const
return mpParserState->isForwardEvents();
}
-void OOXMLFastContextHandler::setXNoteId(const ::rtl::OUString & rId)
+void OOXMLFastContextHandler::setXNoteId(const sal_Int32 nId)
{
- mpParserState->setXNoteId(rId);
+ mpParserState->setXNoteId(nId);
}
void OOXMLFastContextHandler::setXNoteId(OOXMLValue::Pointer_t pValue)
{
- mpParserState->setXNoteId(pValue->getString());
+ mpParserState->setXNoteId(sal_Int32(pValue->getInt()));
}
-const rtl::OUString & OOXMLFastContextHandler::getXNoteId() const
+sal_Int32 OOXMLFastContextHandler::getXNoteId() const
{
return mpParserState->getXNoteId();
}
void OOXMLFastContextHandler::resolveFootnote
-(const rtl::OUString & rId)
+(const sal_Int32 nId)
{
mpParserState->getDocument()->resolveFootnote
- (*mpStream, 0, rId);
+ (*mpStream, 0, nId);
}
-void OOXMLFastContextHandler::resolveEndnote(const rtl::OUString & rId)
+void OOXMLFastContextHandler::resolveEndnote(const sal_Int32 nId)
{
mpParserState->getDocument()->resolveEndnote
- (*mpStream, 0, rId);
+ (*mpStream, 0, nId);
}
-void OOXMLFastContextHandler::resolveComment(const rtl::OUString & rId)
+void OOXMLFastContextHandler::resolveComment(const sal_Int32 nId)
{
- mpParserState->getDocument()->resolveComment(*mpStream, rId);
+ mpParserState->getDocument()->resolveComment(*mpStream, nId);
}
void OOXMLFastContextHandler::resolvePicture(const rtl::OUString & rId)
@@ -1634,7 +1634,7 @@ void OOXMLFastContextHandlerXNote::lcl_startFastElement
{
mbForwardEventsSaved = isForwardEvents();
- if (msMyXNoteId.compareTo(getXNoteId()) == 0)
+ if (mnMyXNoteId == getXNoteId())
setForwardEvents(true);
else
setForwardEvents(false);
@@ -1655,12 +1655,12 @@ void OOXMLFastContextHandlerXNote::checkId(OOXMLValue::Pointer_t pValue)
{
#ifdef DEBUG_ELEMENT
debug_logger->startElement("checkId");
- debug_logger->attribute("myId", pValue->getString());
+ debug_logger->attribute("myId", sal_Int32(pValue->getInt()));
debug_logger->attribute("id", getXNoteId());
debug_logger->endElement();
#endif
- msMyXNoteId = pValue->getString();
+ mnMyXNoteId = sal_Int32(pValue->getInt());
}
/*
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
index 357081b0f..7d17b77c2 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
@@ -146,9 +146,9 @@ public:
void mark(const Id & rId, OOXMLValue::Pointer_t pVal);
- void resolveFootnote(const rtl::OUString & rId);
- void resolveEndnote(const rtl::OUString & rId);
- void resolveComment(const rtl::OUString & rId);
+ void resolveFootnote(const sal_Int32 nId);
+ void resolveEndnote(const sal_Int32 nId);
+ void resolveComment(const sal_Int32 nId);
void resolvePicture(const rtl::OUString & rId);
void resolveHeader(const sal_Int32 type,
const rtl::OUString & rId);
@@ -166,8 +166,8 @@ public:
void setDocument(OOXMLDocument * pDocument);
OOXMLDocument * getDocument();
void setXNoteId(OOXMLValue::Pointer_t pValue);
- void setXNoteId(const ::rtl::OUString & rId);
- const rtl::OUString & getXNoteId() const;
+ void setXNoteId(const sal_Int32 nId);
+ sal_Int32 getXNoteId() const;
void setForwardEvents(bool bForwardEvents);
bool isForwardEvents() const;
virtual void setParent(OOXMLFastContextHandler * pParent);
@@ -432,7 +432,7 @@ public:
private:
bool mbForwardEventsSaved;
- ::rtl::OUString msMyXNoteId;
+ sal_Int32 mnMyXNoteId;
virtual void lcl_startFastElement
(Token_t Element,
diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
index 782e31726..c0252f491 100644
--- a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
@@ -131,7 +131,7 @@ OOXMLFastDocumentHandler::getContextHandler() const
(new OOXMLFastContextHandler(m_xContext));
mpContextHandler->setStream(mpStream);
mpContextHandler->setDocument(mpDocument);
- mpContextHandler->setXNoteId(msXNoteId);
+ mpContextHandler->setXNoteId(mnXNoteId);
mpContextHandler->setForwardEvents(true);
}
@@ -218,9 +218,9 @@ void OOXMLFastDocumentHandler::setDocument(OOXMLDocument * pDocument)
mpDocument = pDocument;
}
-void OOXMLFastDocumentHandler::setXNoteId(const ::rtl::OUString & rXNoteId)
+void OOXMLFastDocumentHandler::setXNoteId(const sal_Int32 nXNoteId)
{
- msXNoteId = rXNoteId;
+ mnXNoteId = nXNoteId;
}
void OOXMLFastDocumentHandler::setIsSubstream( bool bSubstream )
diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
index e76003ee7..e980191d8 100644
--- a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
+++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
@@ -94,7 +94,7 @@ public:
void setStream(Stream * pStream);
void setDocument(OOXMLDocument * pDocument);
- void setXNoteId(const ::rtl::OUString & rXNoteId);
+ void setXNoteId(const sal_Int32 nXNoteId);
void setIsSubstream( bool bSubstream );
@@ -109,7 +109,7 @@ private:
Stream::Pointer_t mpTmpStream;
#endif
OOXMLDocument * mpDocument;
- ::rtl::OUString msXNoteId;
+ sal_Int32 mnXNoteId;
mutable boost::shared_ptr<OOXMLFastContextHandler> mpContextHandler;
boost::shared_ptr<OOXMLFastContextHandler> getContextHandler() const;
};
diff --git a/writerfilter/source/ooxml/OOXMLParserState.cxx b/writerfilter/source/ooxml/OOXMLParserState.cxx
index 1e935104b..dcf7cc1e4 100644
--- a/writerfilter/source/ooxml/OOXMLParserState.cxx
+++ b/writerfilter/source/ooxml/OOXMLParserState.cxx
@@ -128,12 +128,12 @@ OOXMLDocument * OOXMLParserState::getDocument() const
return mpDocument;
}
-void OOXMLParserState::setXNoteId(const rtl::OUString & rId)
+void OOXMLParserState::setXNoteId(const sal_Int32 nId)
{
- mpDocument->setXNoteId(rId);
+ mpDocument->setXNoteId(nId);
}
-const rtl::OUString & OOXMLParserState::getXNoteId() const
+sal_Int32 OOXMLParserState::getXNoteId() const
{
return mpDocument->getXNoteId();
}
diff --git a/writerfilter/source/ooxml/OOXMLParserState.hxx b/writerfilter/source/ooxml/OOXMLParserState.hxx
index 3bc244ffa..5bbd90c9d 100644
--- a/writerfilter/source/ooxml/OOXMLParserState.hxx
+++ b/writerfilter/source/ooxml/OOXMLParserState.hxx
@@ -53,7 +53,7 @@ class OOXMLParserState
unsigned int mnContexts;
unsigned int mnHandle;
OOXMLDocument * mpDocument;
- rtl::OUString msXNoteId;
+ sal_Int32 mnXNoteId;
rtl::OUString msTarget;
OOXMLPropertySet::Pointer_t mpCharacterProps;
stack<OOXMLPropertySet::Pointer_t> mCellProps;
@@ -90,8 +90,8 @@ public:
void setDocument(OOXMLDocument * pDocument);
OOXMLDocument * getDocument() const;
- void setXNoteId(const rtl::OUString & rId);
- const rtl::OUString & getXNoteId() const;
+ void setXNoteId(const sal_Int32 rId);
+ sal_Int32 getXNoteId() const;
const rtl::OUString & getTarget() const;
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index a394b2fd4..12ac0c4a9 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -18155,13 +18155,13 @@
</attribute>
</optional>
<attribute name="id">
- <text/>
+ <ref name="ST_DecimalNumber"/>
<xs:documentation>Footnote/Endnote ID Reference</xs:documentation>
</attribute>
</define>
<define name="CT_FtnEdnSepRef">
<attribute name="id">
- <text/>
+ <ref name="ST_DecimalNumber"/>
<xs:documentation>Footnote/Endnote ID</xs:documentation>
</attribute>
</define>
@@ -18176,7 +18176,7 @@
</attribute>
</optional>
<attribute name="id">
- <text/>
+ <ref name="ST_DecimalNumber"/>
<xs:documentation>Footnote/Endnote ID</xs:documentation>
</attribute>
</define>
@@ -20433,9 +20433,9 @@
</define>
<define name="CT_Charset">
<optional>
- <attribute name="val">
- <ref name="CT_UcharHexNumber"/>
- </attribute>
+ <attribute name="val">
+ <ref name="CT_UcharHexNumber"/>
+ </attribute>
</optional>
<optional>
<attribute name="characterSet">
@@ -21152,7 +21152,7 @@
<resource name="ST_EighthPointMeasure" resource="Integer"/>
<resource name="ST_PointMeasure" resource="Integer"/>
<resource name="ST_String" resource="String"/>
- <resource name="CT_String" resource="Value" tag="attribute" >
+ <resource name="CT_String" resource="Value" tag="attribute">
<attribute name="val" tokenid="ooxml:CT_String_val" action="setValue"/>
<action name="start" action="setDefaultStringValue"/>
</resource>
@@ -22625,7 +22625,7 @@
<element name="sdtContent" tokenid="ooxml:CT_SdtContentBlock"/>
</resource>
<resource name="CT_SdtContentBlock" resource="Properties"/>
- <resource name="EG_PContent" resource="Properties" tag ="content">
+ <resource name="EG_PContent" resource="Properties" tag="content">
<element name="fldSimple" tokenid="ooxml:EG_PContent_fldSimple"/>
<element name="hyperlink" tokenid="ooxml:EG_PContent_hyperlink"/>
<element name="subDoc" tokenid="ooxml:EG_PContent_subDoc"/>