diff options
author | László Németh <nemeth@numbertext.org> | 2019-04-26 17:24:38 +0200 |
---|---|---|
committer | László Németh <nemeth@numbertext.org> | 2019-05-24 09:12:06 +0200 |
commit | 4f279b95efbc113d3c1907a232a4e647e2b4054f (patch) | |
tree | dbc48d7c1f20c3f7ddeac1c5d00ab49882509d5b /writerfilter/source | |
parent | 88158bb37d1e41fd192dc66db544daebc980df31 (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.cxx | 17 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.hxx | 4 |
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); |