diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-03-05 22:09:39 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2018-03-15 16:49:57 +0100 |
commit | 0edb7585c7bdf5f01dcf31f106477c959f107a84 (patch) | |
tree | 6694af2f65f0ee68cb287fddf86e7b50b59f86e5 | |
parent | 15443038c4b8d4c1e7d1aa32df72f41ba93b5b8b (diff) |
tdf#115861 DOCX import: avoid last-paragraph removal when discarding footer
Discarding header/footer is necessary when the document or section
settings request to ignore first or even headers/footers. In the bugdoc
case settings.xml didn't opt-in for different even/odd footers, but
there was an even footer to be ignored.
Handle this state at two more places, so we don't end up in a situation
where we ignore the footer but not its "remove last (empty) paragraph at
the end of the footer" action.
Also make the debug dumper for text ranges more robust to have a working
token dump when we try to get the string for a table.
(cherry picked from commit 49cf733effc56c09c5e2eb023120c2d3532b5b3d)
Change-Id: I6395f37aa40c42304e2c918d87dadecb21e9d378
Reviewed-on: https://gerrit.libreoffice.org/50884
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/tdf115861.docx | bin | 0 -> 15035 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport11.cxx | 7 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 6 | ||||
-rw-r--r-- | writerfilter/source/dmapper/util.cxx | 14 |
4 files changed, 26 insertions, 1 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf115861.docx b/sw/qa/extras/ooxmlexport/data/tdf115861.docx Binary files differnew file mode 100644 index 000000000000..f42a7bad2cfa --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf115861.docx diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx index 0fd64733e700..35bf52ee25af 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx @@ -81,6 +81,13 @@ DECLARE_OOXMLEXPORT_TEST(testTdf112694, "tdf112694.docx") CPPUNIT_ASSERT(!getProperty<bool>(aPageStyle, "HeaderIsOn")); } +DECLARE_OOXMLEXPORT_TEST(testTdf115861, "tdf115861.docx") +{ + // Second item in the paragraph enumeration was a table, 2nd paragraph was + // lost. + CPPUNIT_ASSERT_EQUAL(OUString("(k)"), getParagraph(2)->getString()); +} + DECLARE_OOXMLEXPORT_TEST(testTdf67207_MERGEFIELD, "mailmerge.docx") { uno::Reference<beans::XPropertySet> xTextField = getProperty< uno::Reference<beans::XPropertySet> >(getRun(getParagraph(1), 2), "TextField"); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 13f8c4313894..b5ec69a98304 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -388,6 +388,9 @@ void DomainMapper_Impl::AddDummyParaForTableInSection() void DomainMapper_Impl::RemoveLastParagraph( ) { + if (m_bDiscardHeaderFooter) + return; + if (m_aTextAppendStack.empty()) return; uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend; @@ -1061,6 +1064,9 @@ void DomainMapper_Impl::CheckUnregisteredFrameConversion( ) void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap ) { + if (m_bDiscardHeaderFooter) + return; + #ifdef DEBUG_WRITERFILTER TagLogger::getInstance().startElement("finishParagraph"); #endif diff --git a/writerfilter/source/dmapper/util.cxx b/writerfilter/source/dmapper/util.cxx index e721d6cecb9b..378e30b08a9d 100644 --- a/writerfilter/source/dmapper/util.cxx +++ b/writerfilter/source/dmapper/util.cxx @@ -34,7 +34,19 @@ std::string XTextRangeToString(uno::Reference< text::XTextRange > const & textRa #ifdef DEBUG_WRITERFILTER if (textRange.get()) { - OUString aOUStr = textRange->getString(); + OUString aOUStr; + + try + { + aOUStr = textRange->getString(); + } + catch (const uno::Exception& rException) + { + result += "(exception: "; + result += rException.Message.toUtf8().getStr(); + result += ")"; + } + OString aOStr(aOUStr.getStr(), aOUStr.getLength(), RTL_TEXTENCODING_ASCII_US ); result = aOStr.getStr(); |