summaryrefslogtreecommitdiff
path: root/writerfilter/source
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2019-04-26 17:24:38 +0200
committerLászló Németh <nemeth@numbertext.org>2019-05-24 09:12:06 +0200
commit4f279b95efbc113d3c1907a232a4e647e2b4054f (patch)
treedbc48d7c1f20c3f7ddeac1c5d00ab49882509d5b /writerfilter/source
parent88158bb37d1e41fd192dc66db544daebc980df31 (diff)
tdf#123460 DOCX track changes: moveFrom completely
also with the paragraph mark, not leaving an empty paragraph at the original place of the moved text. Note: as desktop version of MSO does, but its online version leaves empty paragraphs interestingly. Change-Id: I03dda8997df3efbc82e936bd31a3813323e6b5ab Reviewed-on: https://gerrit.libreoffice.org/71382 Reviewed-by: László Németh <nemeth@numbertext.org> Tested-by: László Németh <nemeth@numbertext.org> (cherry picked from commit d32d9a2b3c5e3963f4a18f6c7bbf50fab2e9b2be) Reviewed-on: https://gerrit.libreoffice.org/72718 Reviewed-by: Michael Stahl <Michael.Stahl@cib.de> Tested-by: Jenkins
Diffstat (limited to 'writerfilter/source')
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx17
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx4
2 files changed, 20 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index dcacd18b55f7..4a700758a574 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1690,6 +1690,11 @@ void DomainMapper_Impl::appendTextPortion( const OUString& rString, const Proper
}
}
+ // reset moveFrom data of non-terminating runs of the paragraph
+ if ( m_pParaMarkerRedlineMoveFrom.get( ) )
+ {
+ m_pParaMarkerRedlineMoveFrom.clear();
+ }
CheckRedline( xTextRange );
m_bParaChanged = true;
@@ -2062,6 +2067,8 @@ void DomainMapper_Impl::CreateRedline(uno::Reference<text::XTextRange> const& xR
sType = getPropertyName( PROP_INSERT );
break;
case XML_moveFrom:
+ m_pParaMarkerRedlineMoveFrom = pRedline.get();
+ SAL_FALLTHROUGH;
case XML_del:
sType = getPropertyName( PROP_DELETE );
break;
@@ -2100,6 +2107,16 @@ void DomainMapper_Impl::CheckParaMarkerRedline( uno::Reference< text::XTextRange
m_currentRedline.clear();
}
}
+ else if ( m_pParaMarkerRedlineMoveFrom.get( ) )
+ {
+ // terminating moveFrom redline removes also the paragraph mark
+ m_pParaMarkerRedlineMoveFrom->m_nToken = XML_del;
+ CreateRedline( xRange, m_pParaMarkerRedlineMoveFrom );
+ }
+ if ( m_pParaMarkerRedlineMoveFrom.get( ) )
+ {
+ m_pParaMarkerRedlineMoveFrom.clear();
+ }
}
void DomainMapper_Impl::CheckRedline( uno::Reference< text::XTextRange > const& xRange )
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 6006d2465f13..5d6f634bad10 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -505,6 +505,8 @@ private:
RedlineParamsPtr m_currentRedline;
RedlineParamsPtr m_pParaMarkerRedline;
bool m_bIsParaMarkerChange;
+ // redline data of the terminating run, if it's a moveFrom deletion
+ RedlineParamsPtr m_pParaMarkerRedlineMoveFrom;
/// If the current paragraph has any runs.
bool m_bParaChanged;
@@ -574,7 +576,7 @@ public:
}
void SetDocumentSettingsProperty( const OUString& rPropName, const css::uno::Any& rValue );
- static void CreateRedline(css::uno::Reference<css::text::XTextRange> const& xRange, const RedlineParamsPtr& pRedline);
+ void CreateRedline(css::uno::Reference<css::text::XTextRange> const& xRange, const RedlineParamsPtr& pRedline);
void CheckParaMarkerRedline(css::uno::Reference<css::text::XTextRange> const& xRange);