include/xmloff/XMLTrackedChangesImportContext.hxx | 15 +++-- include/xmloff/txtimp.hxx | 23 +++++--- sw/source/filter/xml/XMLRedlineImportHelper.cxx | 48 +++++++++--------- sw/source/filter/xml/XMLRedlineImportHelper.hxx | 18 +++--- sw/source/filter/xml/xmltexti.cxx | 26 +++++---- sw/source/filter/xml/xmltexti.hxx | 9 +-- xmloff/source/text/XMLChangeElementImportContext.cxx | 2 xmloff/source/text/XMLChangeImportContext.cxx | 4 - xmloff/source/text/XMLTrackedChangesImportContext.cxx | 42 +++++++++------ xmloff/source/text/txtimp.cxx | 43 +++++++++++----- xmloff/source/text/txtparai.cxx | 7 ++ 11 files changed, 142 insertions(+), 95 deletions(-)
New commits: commit 45675aed3b9c121266d78e37bccc00dbfbcda09b Author: Rosemary Sebastian <rosemary.s...@gmail.com> Date: Wed Jul 13 06:28:30 2016 +0530 Access aRedlineMap when parsing content.xml - Moved aRedlineMap to global scope. - Made it two-dimensional with the first index indicating the paragraph index and the second indicating the text position within the paragraph. Change-Id: I1c21040e258344c2c42e880fd30dc0efc3689815 diff --git a/include/xmloff/XMLTrackedChangesImportContext.hxx b/include/xmloff/XMLTrackedChangesImportContext.hxx index f19052a..5737e95 100644 --- a/include/xmloff/XMLTrackedChangesImportContext.hxx +++ b/include/xmloff/XMLTrackedChangesImportContext.hxx @@ -57,13 +57,15 @@ public: /// redline date OUString sDate; - /// redline date - OUString sStart; + /// redline start + OUString sStartParaPos; + OUString sStartTextPos; - /// redline date - OUString sEnd; + /// redline end + OUString sEndParaPos; + OUString sEndTextPos; - /// redline date + /// redline type OUString sType; /// merge-last-paragraph flag @@ -89,7 +91,8 @@ public: const OUString& rAuthor, const OUString& rComment, const OUString& rDate, - const sal_uInt32); + const OUString& rStartParaPos, + const OUString& rStartTextPos); /// create redline XText/XTextCursor on demand and register with /// XMLTextImportHelper diff --git a/include/xmloff/txtimp.hxx b/include/xmloff/txtimp.hxx index 12825dd..01045d0 100644 --- a/include/xmloff/txtimp.hxx +++ b/include/xmloff/txtimp.hxx @@ -390,7 +390,6 @@ private: static std::shared_ptr<BackpatcherImpl> MakeBackpatcherImpl(); sal_Int16 nParaIdx = 0; - bool bInsertRedline = false; protected: virtual SvXMLImportContext *CreateTableChildContext( SvXMLImport& rImport, @@ -658,8 +657,6 @@ public: virtual void RedlineAdd( /// redline type (insert, del,... ) const OUString& rType, - /// use to identify this redline - const OUString& rId, /// name of the author const OUString& rAuthor, /// redline comment @@ -668,13 +665,16 @@ public: const css::util::DateTime& rDateTime, /// merge last paras bool bMergeLastParagraph, - const sal_uInt32 nStartParaPos); + /// start position + const OUString& rStartParaPos, + const OUString& rStartTextPos); virtual css::uno::Reference< css::text::XTextCursor> RedlineCreateText( /// needed to get the document css::uno::Reference< css::text::XTextCursor > & rOldCursor, /// ID used to RedlineAdd() call - const OUString& rId); + const OUString& rParaPos, + const OUString& rTextPos); virtual bool CheckRedlineExists( /// ID used to RedlineAdd() call @@ -682,7 +682,8 @@ public: virtual void RedlineSetCursor( /// ID used to RedlineAdd() call - const OUString& rId, + const OUString& rParaPos, + const OUString& rTextPos, /// start or end Cursor bool bStart, /// range is not within <text:p> @@ -695,11 +696,15 @@ public: const css::uno::Sequence<sal_Int8> & rProtectionKey ); /// get the last open redline ID - OUString GetOpenRedlineId(); + OUString GetOpenRedlineParaPos(); + /// get the last open redline ID + OUString GetOpenRedlineTextPos(); + /// modify the last open redline ID + void SetOpenRedlineParaPos( OUString const & rParaPos); /// modify the last open redline ID - void SetOpenRedlineId( OUString const & rId); + void SetOpenRedlineTextPos( OUString const & rTextPos); /// reset the last open redline ID - void ResetOpenRedlineId(); + void ResetOpenRedlinePositions(); /** redlining : Setter to remember the fact we are inside/outside * a <text:deletion> element (deleted redline section) */ diff --git a/sw/source/filter/xml/XMLRedlineImportHelper.cxx b/sw/source/filter/xml/XMLRedlineImportHelper.cxx index 7a8d992..686d606 100644 --- a/sw/source/filter/xml/XMLRedlineImportHelper.cxx +++ b/sw/source/filter/xml/XMLRedlineImportHelper.cxx @@ -45,6 +45,9 @@ using ::com::sun::star::beans::XPropertySetInfo; // collision with tools/DateTime: use UNO DateTime as util::DateTime // using util::DateTime; +typedef ::std::map< OUString, RedlineInfo* > RedlineMapType; +::std::map< OUString, ::std::map< OUString, RedlineInfo* > > aRedlineMap; + // a few helper functions static SwDoc* lcl_GetDocViaTunnel( Reference<XTextCursor> & rCursor ) { @@ -67,6 +70,7 @@ static SwDoc* lcl_GetDocViaTunnel( Reference<XTextRange> & rRange ) return (pXRange) ? &pXRange->GetDoc() : nullptr; } + // XTextRangeOrNodeIndexPosition: store a position into the text // *either* as an XTextRange or as an SwNodeIndex. The reason is that // we must store either pointers to StartNodes (because redlines may @@ -246,7 +250,6 @@ XMLRedlineImportHelper::XMLRedlineImportHelper( sInsertion( GetXMLToken( XML_INSERTION )), sDeletion( GetXMLToken( XML_DELETION )), sFormatChange( GetXMLToken( XML_FORMAT_CHANGE )), - aRedlineMap(), bIgnoreRedlines(bNoRedlinesPlease), xModelPropertySet(rModel), xImportInfoPropertySet(rImportInfo) @@ -287,7 +290,7 @@ XMLRedlineImportHelper::XMLRedlineImportHelper( } XMLRedlineImportHelper::~XMLRedlineImportHelper() -{ +{/* // delete all left over (and obviously incomplete) RedlineInfos (and map) RedlineMapType::iterator aFind = aRedlineMap.begin(); for( ; aRedlineMap.end() != aFind; ++aFind ) @@ -322,7 +325,7 @@ XMLRedlineImportHelper::~XMLRedlineImportHelper() } delete pInfo; } - aRedlineMap.clear(); + aRedlineMap.clear();*/ // set redline mode, either to info property set, or directly to // the document @@ -370,12 +373,12 @@ XMLRedlineImportHelper::~XMLRedlineImportHelper() void XMLRedlineImportHelper::Add( const OUString& rType, - const OUString& rId, const OUString& rAuthor, const OUString& rComment, const util::DateTime& rDateTime, bool bMergeLastPara, - const sal_uInt32 nStartParaPos) + const OUString& rStartParaPos, + const OUString& rStartTextPos) { // we need to do the following: // 1) parse type string @@ -413,13 +416,12 @@ void XMLRedlineImportHelper::Add( pInfo->sComment = rComment; pInfo->aDateTime = rDateTime; pInfo->bMergeLastParagraph = bMergeLastPara; - pInfo->nStartParagraphPos = nStartParaPos; // ad 3) - if (aRedlineMap.end() == aRedlineMap.find(rId)) + if (aRedlineMap.end() == aRedlineMap.find(rStartParaPos) || aRedlineMap[rStartParaPos].end() == aRedlineMap[rStartParaPos].find(rStartTextPos)) { // 3a) insert into map - aRedlineMap[rId] = pInfo; + aRedlineMap[rStartParaPos][rStartTextPos] = pInfo; } else { @@ -429,7 +431,7 @@ void XMLRedlineImportHelper::Add( // find last element RedlineInfo* pInfoChain; - for( pInfoChain = aRedlineMap[rId]; + for( pInfoChain = aRedlineMap[rStartParaPos][rStartTextPos]; nullptr != pInfoChain->pNextRedline; pInfoChain = pInfoChain->pNextRedline) ; // empty loop @@ -440,7 +442,7 @@ void XMLRedlineImportHelper::Add( Reference<XTextCursor> XMLRedlineImportHelper::CreateRedlineTextSection( Reference<XTextCursor> xOldCursor, - const OUString& rId) + const OUString& rParaPos, const OUString& rTextPos) { Reference<XTextCursor> xReturn; @@ -448,8 +450,8 @@ Reference<XTextCursor> XMLRedlineImportHelper::CreateRedlineTextSection( SolarMutexGuard aGuard; // get RedlineInfo - RedlineMapType::iterator aFind = aRedlineMap.find(rId); - if (aRedlineMap.end() != aFind) + RedlineMapType::iterator aFind = aRedlineMap[rParaPos].find(rTextPos); + if (aRedlineMap[rParaPos].end() != aFind) { // get document from old cursor (via tunnel) SwDoc* pDoc = lcl_GetDocViaTunnel(xOldCursor); @@ -491,9 +493,9 @@ Reference<XTextCursor> XMLRedlineImportHelper::CreateRedlineTextSection( } bool XMLRedlineImportHelper::Check( - const OUString& rId) + const OUString& rParaPos) { - RedlineMapType::iterator aFind = aRedlineMap.find(rId); + ::std::map<OUString, ::std::map<OUString, RedlineInfo*>>::iterator aFind = aRedlineMap.find(rParaPos); if (aRedlineMap.end() != aFind) { return true; @@ -502,13 +504,14 @@ bool XMLRedlineImportHelper::Check( } void XMLRedlineImportHelper::SetCursor( - const OUString& rId, + const OUString& rParaPos, + const OUString& rTextPos, bool bStart, Reference<XTextRange> & rRange, bool bIsOutsideOfParagraph) { - RedlineMapType::iterator aFind = aRedlineMap.find(rId); - if (aRedlineMap.end() != aFind) + RedlineMapType::iterator aFind = aRedlineMap[rParaPos].find(rTextPos); + if (aRedlineMap[rParaPos].end() != aFind) { // RedlineInfo found; now set Cursor RedlineInfo* pInfo = aFind->second; @@ -542,7 +545,7 @@ void XMLRedlineImportHelper::SetCursor( if (IsReady(pInfo)) { InsertIntoDocument(pInfo); - aRedlineMap.erase(rId); + aRedlineMap[rParaPos].erase(rTextPos); delete pInfo; } } @@ -550,7 +553,8 @@ void XMLRedlineImportHelper::SetCursor( } void XMLRedlineImportHelper::AdjustStartNodeCursor( - const OUString& rId, /// ID used in RedlineAdd() call + const OUString& rStartParaPos, + const OUString& rStartTextPos, bool /*bStart*/, Reference<XTextRange> & /*rRange*/) { @@ -560,8 +564,8 @@ void XMLRedlineImportHelper::AdjustStartNodeCursor( // start + end nodes are treated the same. For either it's // necessary that the target node already exists. - RedlineMapType::iterator aFind = aRedlineMap.find(rId); - if (aRedlineMap.end() != aFind) + RedlineMapType::iterator aFind = aRedlineMap[rStartParaPos].find(rStartTextPos); + if (aRedlineMap[rStartParaPos].end() != aFind) { // RedlineInfo found; now set Cursor RedlineInfo* pInfo = aFind->second; @@ -572,7 +576,7 @@ void XMLRedlineImportHelper::AdjustStartNodeCursor( if( IsReady(pInfo) ) { InsertIntoDocument(pInfo); - aRedlineMap.erase(rId); + aRedlineMap[rStartParaPos].erase(rStartTextPos); delete pInfo; } } diff --git a/sw/source/filter/xml/XMLRedlineImportHelper.hxx b/sw/source/filter/xml/XMLRedlineImportHelper.hxx index 240c36c..af3f6c9 100644 --- a/sw/source/filter/xml/XMLRedlineImportHelper.hxx +++ b/sw/source/filter/xml/XMLRedlineImportHelper.hxx @@ -36,15 +36,12 @@ namespace com { namespace sun { namespace star { namespace frame { class XModel; } } } } -typedef ::std::map< OUString, RedlineInfo* > RedlineMapType; - class XMLRedlineImportHelper { const OUString sInsertion; const OUString sDeletion; const OUString sFormatChange; - RedlineMapType aRedlineMap; // if true, no redlines should be inserted into document // (This typically happen when a document is loaded in 'insert'-mode.) @@ -72,26 +69,28 @@ public: // and end cursor has been set.) void Add( const OUString& rType, // redline type (insert, del,... ) - const OUString& rId, // use to identify this redline const OUString& rAuthor, // name of the author const OUString& rComment, // redline comment const css::util::DateTime& rDateTime, // date+time bool bMergeLastParagraph, // merge last paragraph? - const sal_uInt32 nStartParaPos); // start paragraph position + const OUString& rStartParaPos, // start paragraph position + const OUString& rStartTextPos); // create a text section for the redline, and return an // XText/XTextCursor that may be used to write into it. css::uno::Reference<css::text::XTextCursor> CreateRedlineTextSection( css::uno::Reference<css::text::XTextCursor> xOldCursor, // needed to get the document - const OUString& rId); // ID used to RedlineAdd() call + const OUString& rParaPos, + const OUString& rTextPos); bool Check( - const OUString& rId); // ID used in RedlineAdd() call + const OUString& rParaPos); // Set start or end position for a redline in the text body. // Accepts XTextRange objects. void SetCursor( - const OUString& rId, // ID used in RedlineAdd() call + const OUString& rParaPos, + const OUString& rTextPos, bool bStart, // start or end Range css::uno::Reference<css::text::XTextRange> & rRange, // the actual XTextRange // text range is (from an XML view) outside of a paragraph @@ -107,7 +106,8 @@ public: * only be considered valid if it points to the next text node * after the position given in a previous SetCursor */ void AdjustStartNodeCursor( - const OUString& rId, // ID used in RedlineAdd() call + const OUString& rStartParaPos, + const OUString& rStartTextPos, bool bStart, // XTextRange _inside_ a table/section css::uno::Reference<css::text::XTextRange> & rRange); diff --git a/sw/source/filter/xml/xmltexti.cxx b/sw/source/filter/xml/xmltexti.cxx index d103310..1c4b2c4 100644 --- a/sw/source/filter/xml/xmltexti.cxx +++ b/sw/source/filter/xml/xmltexti.cxx @@ -972,29 +972,29 @@ void SwXMLTextImportHelper::endAppletOrPlugin( // (override to provide the real implementation) void SwXMLTextImportHelper::RedlineAdd( const OUString& rType, - const OUString& rId, const OUString& rAuthor, const OUString& rComment, const util::DateTime& rDateTime, bool bMergeLastPara, - const sal_uInt32 nStartParaPos) + const OUString& rStartParaPos, + const OUString& rStartTextPos) { // create redline helper on demand OSL_ENSURE(nullptr != pRedlineHelper, "helper should have been created in constructor"); if (nullptr != pRedlineHelper) - pRedlineHelper->Add(rType, rId, rAuthor, rComment, rDateTime, - bMergeLastPara, nStartParaPos); + pRedlineHelper->Add(rType, rAuthor, rComment, rDateTime, + bMergeLastPara, rStartParaPos, rStartTextPos); } uno::Reference<XTextCursor> SwXMLTextImportHelper::RedlineCreateText( uno::Reference<XTextCursor> & rOldCursor, - const OUString& rId) + const OUString& rParaPos, const OUString& rTextPos) { uno::Reference<XTextCursor> xRet; if (nullptr != pRedlineHelper) { - xRet = pRedlineHelper->CreateRedlineTextSection(rOldCursor, rId); + xRet = pRedlineHelper->CreateRedlineTextSection(rOldCursor, rParaPos, rTextPos); } return xRet; @@ -1010,13 +1010,14 @@ bool SwXMLTextImportHelper::CheckRedlineExists( } void SwXMLTextImportHelper::RedlineSetCursor( - const OUString& rId, + const OUString& rParaPos, + const OUString& rTextPos, bool bStart, bool bIsOutsideOfParagraph) { if (nullptr != pRedlineHelper) { uno::Reference<XTextRange> xTextRange( GetCursor()->getStart() ); - pRedlineHelper->SetCursor(rId, bStart, xTextRange, + pRedlineHelper->SetCursor(rParaPos, rTextPos, bStart, xTextRange, bIsOutsideOfParagraph); } // else: ignore redline (wasn't added before, else we'd have a helper) @@ -1025,12 +1026,13 @@ void SwXMLTextImportHelper::RedlineSetCursor( void SwXMLTextImportHelper::RedlineAdjustStartNodeCursor( bool bStart) { - OUString rId = GetOpenRedlineId(); - if ((nullptr != pRedlineHelper) && !rId.isEmpty()) + OUString rParaPos = GetOpenRedlineParaPos(); + OUString rTextPos = GetOpenRedlineTextPos(); + if ((nullptr != pRedlineHelper) && !rParaPos.isEmpty() && !rTextPos.isEmpty()) { uno::Reference<XTextRange> xTextRange( GetCursor()->getStart() ); - pRedlineHelper->AdjustStartNodeCursor(rId, bStart, xTextRange ); - ResetOpenRedlineId(); + pRedlineHelper->AdjustStartNodeCursor(rParaPos, rTextPos, bStart, xTextRange ); + ResetOpenRedlinePositions(); } // else: ignore redline (wasn't added before, or no open redline ID } diff --git a/sw/source/filter/xml/xmltexti.hxx b/sw/source/filter/xml/xmltexti.hxx index 57d334f..4b09805 100644 --- a/sw/source/filter/xml/xmltexti.hxx +++ b/sw/source/filter/xml/xmltexti.hxx @@ -87,19 +87,20 @@ public: // (here is the real implementation) virtual void RedlineAdd( const OUString& rType, /// redline type (insert, del,... ) - const OUString& rId, /// use to identify this redline const OUString& rAuthor, /// name of the author const OUString& rComment, /// redline comment const css::util::DateTime& rDateTime, /// date+time bool bMergeLastPara, /// merge last paragraph - const sal_uInt32 nStartParaPos) override; + const OUString& rStartParaPos, + const OUString& rStartTextPos) override; virtual css::uno::Reference<css::text::XTextCursor> RedlineCreateText( css::uno::Reference<css::text::XTextCursor> & rOldCursor, /// needed to get the document - const OUString& rId) override; /// ID used to RedlineAdd() call + const OUString& rParPos, const OUString& rTextPos) override; /// ID used to RedlineAdd() call virtual bool CheckRedlineExists( const OUString& rId) override; /// ID used to RedlineAdd() call virtual void RedlineSetCursor( - const OUString& rId, /// ID used to RedlineAdd() call + const OUString& rStartParaPos, + const OUString& rStartTextPos, bool bStart, /// start or end Cursor bool bIsOutsideOfParagraph) override; virtual void RedlineAdjustStartNodeCursor( bool bStart) override; diff --git a/xmloff/source/text/XMLChangeElementImportContext.cxx b/xmloff/source/text/XMLChangeElementImportContext.cxx index fad9712..e81bcff 100644 --- a/xmloff/source/text/XMLChangeElementImportContext.cxx +++ b/xmloff/source/text/XMLChangeElementImportContext.cxx @@ -70,7 +70,7 @@ SvXMLImportContext* XMLChangeElementImportContext::CreateChildContext( return pContext; } -void XMLChangeElementImportContext::StartElement( const Reference< XAttributeList >& xAttrList ) +void XMLChangeElementImportContext::StartElement( const Reference< XAttributeList >& ) { if(bAcceptContent) { diff --git a/xmloff/source/text/XMLChangeImportContext.cxx b/xmloff/source/text/XMLChangeImportContext.cxx index f8b863a..f563b31 100644 --- a/xmloff/source/text/XMLChangeImportContext.cxx +++ b/xmloff/source/text/XMLChangeImportContext.cxx @@ -68,7 +68,7 @@ void XMLChangeImportContext::StartElement( rtl::Reference<XMLTextImportHelper> rHelper = GetImport().GetTextImport(); OUString sID = xAttrList->getValueByIndex(nAttr); - +/* // call for bStart and bEnd (may both be true) if (bIsStart) rHelper->RedlineSetCursor(sID, true, bIsOutsideOfParagraph); @@ -79,7 +79,7 @@ void XMLChangeImportContext::StartElement( if (bIsOutsideOfParagraph) { rHelper->SetOpenRedlineId(sID); - } + }*/ } // else: ignore } diff --git a/xmloff/source/text/XMLTrackedChangesImportContext.cxx b/xmloff/source/text/XMLTrackedChangesImportContext.cxx index ffe4659..ccd3f7b 100644 --- a/xmloff/source/text/XMLTrackedChangesImportContext.cxx +++ b/xmloff/source/text/XMLTrackedChangesImportContext.cxx @@ -101,7 +101,7 @@ SvXMLImportContext* XMLTrackedChangesImportContext::CreateChildContext( const Reference<XAttributeList> & xAttrList) { SvXMLImportContext* pContext = nullptr; - sal_uInt32 nStartParaPos, nEndParaPos, nStartTextPos, nEndTextPos; + OUString sStart, sEnd; if (XML_NAMESPACE_TEXT == nPrefix) { @@ -116,7 +116,7 @@ SvXMLImportContext* XMLTrackedChangesImportContext::CreateChildContext( for( sal_Int16 i = 0; i < nLength; i++ ) { OUString sLocalName; - sal_uInt16 nPrefix = GetImport().GetNamespaceMap(). + nPrefix = GetImport().GetNamespaceMap(). GetKeyByAttrName( xAttrList->getNameByIndex(i), &sLocalName ); const OUString sValue = xAttrList->getValueByIndex(i); if (XML_NAMESPACE_C == nPrefix) @@ -124,10 +124,28 @@ SvXMLImportContext* XMLTrackedChangesImportContext::CreateChildContext( if (IsXMLToken(sLocalName, xmloff::token::XML_START)) { sStart = sValue.pData->buffer + 1; + if(sStart.indexOf('/') != -1) + { + sStartParaPos = OUString( sStart.getStr(), sStart.indexOf('/') ); + sStartTextPos = sStart.pData->buffer + sStart.indexOf('/') + 1; + } + else + { + sStartParaPos = sStart; + } } if (IsXMLToken(sLocalName, XML_END)) { - sEnd = sValue; + sEnd = sValue.pData->buffer + 1; + if(sEnd.indexOf('/') != -1) + { + sEndParaPos = OUString(sEnd.getStr(), sEnd.indexOf('/')); + sEndTextPos = sEnd.pData->buffer + sEnd.indexOf('/') + 1; + } + else + { + sEndParaPos = sEnd; + } } } if (XML_NAMESPACE_DC == nPrefix) @@ -138,17 +156,7 @@ SvXMLImportContext* XMLTrackedChangesImportContext::CreateChildContext( } } } - if(sStart.indexOf('/') != -1) - { - sID = OUString(sStart.getStr(), sStart.indexOf('/')); - nStartParaPos = sID.toUInt32(); - } - else - { - nStartParaPos = sStart.toUInt32(); - sID = sStart; - } - SetChangeInfo( rLocalName, sAuthor, sComment, sDate, nStartParaPos ); + SetChangeInfo( rLocalName, sAuthor, sComment, sDate, sStartParaPos, sStartTextPos ); // create XMLChangeElementImportContext for all kinds of changes pContext = new XMLChangeElementImportContext( @@ -178,13 +186,13 @@ SvXMLImportContext* XMLTrackedChangesImportContext::CreateChildContext( return pContext; } -void XMLTrackedChangesImportContext::SetChangeInfo(const OUString& rType, const OUString& rAuthor, const OUString& rComment, const OUString& rDate, const sal_uInt32 nStartParaPos) +void XMLTrackedChangesImportContext::SetChangeInfo(const OUString& rType, const OUString& rAuthor, const OUString& rComment, const OUString& rDate, const OUString& rStartParaPos, const OUString& rStartTextPos) { util::DateTime aDateTime; if (::sax::Converter::parseDateTime(aDateTime, nullptr, rDate)) { GetImport().GetTextImport()->RedlineAdd( - rType, sID, rAuthor, rComment, aDateTime, bMergeLastPara, nStartParaPos); + rType, rAuthor, rComment, aDateTime, bMergeLastPara, rStartParaPos, rStartTextPos); } } @@ -199,7 +207,7 @@ void XMLTrackedChangesImportContext::UseRedlineText() // create Redline and new Cursor Reference<XTextCursor> xNewCursor = - rHelper->RedlineCreateText(xCursor, sID); + rHelper->RedlineCreateText(xCursor, sStartParaPos, sStartTextPos); if (xNewCursor.is()) { diff --git a/xmloff/source/text/txtimp.cxx b/xmloff/source/text/txtimp.cxx index 11fed00..e97901d 100644 --- a/xmloff/source/text/txtimp.cxx +++ b/xmloff/source/text/txtimp.cxx @@ -536,7 +536,8 @@ struct XMLTextImportHelper::Impl BookmarkVector_t m_BookmarkVector; /// name of the last 'open' redline that started between paragraphs - OUString m_sOpenRedlineIdentifier; + OUString m_sOpenRedlineParaPos; + OUString m_sOpenRedlineTextPos; uno::Reference<text::XText> m_xText; uno::Reference<text::XTextCursor> m_xCursor; @@ -2144,6 +2145,7 @@ SvXMLImportContext *XMLTextImportHelper::CreateTextChildContext( const SvXMLTokenMap& rTokenMap = GetTextElemTokenMap(); bool bHeading = false; + bool bInsertRedline = false; bool bContent = true; sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName ); OUString sParaIdx; @@ -2153,6 +2155,10 @@ SvXMLImportContext *XMLTextImportHelper::CreateTextChildContext( bHeading = true; case XML_TOK_TEXT_P: sParaIdx = OUString::number(++nParaIdx); + if( rImport.GetTextImport()->CheckRedlineExists(sParaIdx) ) + { + bInsertRedline = true; + } pContext = new XMLParaContext( rImport, nPrefix, rLocalName, xAttrList, bHeading, bInsertRedline ); @@ -2730,19 +2736,20 @@ void XMLTextImportHelper::endAppletOrPlugin( } // redline helper: dummy implementation to be overridden in sw/filter/xml void XMLTextImportHelper::RedlineAdd( const OUString& /*rType*/, - const OUString& /*rId*/, const OUString& /*rAuthor*/, const OUString& /*rComment*/, const util::DateTime& /*rDateTime*/, bool /*bMergeLastPara*/, - const sal_uInt32 /*nStartParaPos*/) + const OUString& /*rStartParaPos*/, + const OUString& /*rStartTextPos*/) { // dummy implementation: do nothing } Reference<XTextCursor> XMLTextImportHelper::RedlineCreateText( Reference<XTextCursor> & /*rOldCursor*/, - const OUString& /*rId*/) + const OUString& /*rParaPos*/, + const OUString& /*rTextPos*/) { // dummy implementation: do nothing @@ -2751,13 +2758,14 @@ Reference<XTextCursor> XMLTextImportHelper::RedlineCreateText( } bool XMLTextImportHelper::CheckRedlineExists( - const OUString& rId) + const OUString& /*rId*/) { return true; } void XMLTextImportHelper::RedlineSetCursor( - const OUString& /*rId*/, + const OUString& /*rParaPos*/, + const OUString& /*rTextPos*/, bool /*bStart*/, bool /*bIsOutsideOfParagraph*/) { @@ -2784,19 +2792,30 @@ void XMLTextImportHelper::SetChangesProtectionKey(const Sequence<sal_Int8> &) } -OUString XMLTextImportHelper::GetOpenRedlineId() +OUString XMLTextImportHelper::GetOpenRedlineParaPos() +{ + return m_xImpl->m_sOpenRedlineParaPos; +} + +OUString XMLTextImportHelper::GetOpenRedlineTextPos() +{ + return m_xImpl->m_sOpenRedlineTextPos; +} + +void XMLTextImportHelper::SetOpenRedlineParaPos( OUString const & rParaPos) { - return m_xImpl->m_sOpenRedlineIdentifier; + m_xImpl->m_sOpenRedlineParaPos = rParaPos; } -void XMLTextImportHelper::SetOpenRedlineId( OUString const & rId) +void XMLTextImportHelper::SetOpenRedlineTextPos( OUString const & rTextPos) { - m_xImpl->m_sOpenRedlineIdentifier = rId; + m_xImpl->m_sOpenRedlineTextPos = rTextPos; } -void XMLTextImportHelper::ResetOpenRedlineId() +void XMLTextImportHelper::ResetOpenRedlinePositions() { - SetOpenRedlineId(""); + SetOpenRedlineParaPos(""); + SetOpenRedlineTextPos(""); } void diff --git a/xmloff/source/text/txtparai.cxx b/xmloff/source/text/txtparai.cxx index cb3b7b1..86c5736 100644 --- a/xmloff/source/text/txtparai.cxx +++ b/xmloff/source/text/txtparai.cxx @@ -2229,7 +2229,12 @@ void XMLParaContext::Characters( const OUString& rChars ) GetImport().GetTextImport()->ConvertStarFonts( rChars, sStyleName, nStarFontsConvFlags, true, GetImport() ); - GetImport().GetTextImport()->InsertString( sChars, bIgnoreLeadingSpace ); + if(bInsertRedline) + { + GetImport().GetTextImport()->InsertString( sChars, bIgnoreLeadingSpace ); + } + else + GetImport().GetTextImport()->InsertString( sChars, bIgnoreLeadingSpace ); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits