summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/qa/extras/ooxmlexport/data/tdf121597.odtbin0 -> 10592 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport11.cxx15
-rw-r--r--sw/source/filter/ww8/ww8atr.cxx31
3 files changed, 18 insertions, 28 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf121597.odt b/sw/qa/extras/ooxmlexport/data/tdf121597.odt
new file mode 100644
index 000000000000..760b46e76379
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf121597.odt
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
index 2728c75b51be..c7e6bac3a8ea 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
@@ -826,6 +826,21 @@ DECLARE_OOXMLEXPORT_TEST(testTdf58944RepeatingTableHeader, "tdf58944-repeating-t
parseDump("/root/page[2]/body/tab/row[2]/cell[1]/txt/text()"));
}
+DECLARE_OOXMLEXPORT_TEST(testTdf121597TrackedDeletionOfMultipleParagraphs, "tdf121597.odt")
+{
+ xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+ if (!pXmlDoc)
+ return;
+
+ // check paragraphs with removed paragraph mark
+ assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:rPr/w:del");
+ assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:rPr/w:del");
+ assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:pPr/w:rPr/w:del");
+ assertXPath(pXmlDoc, "/w:document/w:body/w:p[5]/w:pPr/w:rPr/w:del");
+ assertXPath(pXmlDoc, "/w:document/w:body/w:p[7]/w:pPr/w:rPr/w:del");
+ assertXPath(pXmlDoc, "/w:document/w:body/w:p[10]/w:pPr/w:rPr/w:del");
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx
index d8411eed8796..b911ef83b6a7 100644
--- a/sw/source/filter/ww8/ww8atr.cxx
+++ b/sw/source/filter/ww8/ww8atr.cxx
@@ -5505,37 +5505,12 @@ const SwRedlineData* AttributeOutputBase::GetParagraphMarkerRedline( const SwTex
if ( pRedl->GetRedlineData().GetType() != aRedlineType )
continue;
- const SwPosition* pCheckedEnd = pRedl->End();
- const SwPosition* pCheckedStt = pRedl->Start();
- sal_uLong uStartNodeIndex = pCheckedStt->nNode.GetIndex();
- sal_uLong uStartCharIndex = pCheckedStt->nContent.GetIndex();
- sal_uLong uEndNodeIndex = pCheckedEnd->nNode.GetIndex();
- sal_uLong uEndCharIndex = pCheckedEnd->nContent.GetIndex();
+ sal_uLong uStartNodeIndex = pRedl->Start()->nNode.GetIndex();
+ sal_uLong uEndNodeIndex = pRedl->End()->nNode.GetIndex();
sal_uLong uNodeIndex = rNode.GetIndex();
if( uStartNodeIndex <= uNodeIndex && uNodeIndex < uEndNodeIndex )
- {
- // Maybe add here a check that also the start & end of the redline is the entire paragraph
- if ( ( uStartNodeIndex < uEndNodeIndex ) &&
- // check start:
- // 1. start in the same node
- (( uStartNodeIndex == uNodeIndex &&
- uStartCharIndex == static_cast<sal_uLong>(rNode.Len()) ) ||
- // 2. or in a previous node
- uStartNodeIndex < uNodeIndex
- ) &&
- // check end:
- // 1. end in the same node
- (( uEndNodeIndex == (uNodeIndex + 1) &&
- uEndCharIndex == 0) ||
- // 2. or end in after that
- uEndNodeIndex > (uNodeIndex + 1)
- )
- )
- {
- return &( pRedl->GetRedlineData() );
- }
- }
+ return &( pRedl->GetRedlineData() );
}
return nullptr;
}