From abb9c7db8bcc06f907d39a7811711882161d5803 Mon Sep 17 00:00:00 2001 From: László Németh Date: Fri, 7 Feb 2020 15:06:50 +0100 Subject: tdf#130494: DOCX import: limit paragraph-level character property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit expansion for the whole table paragraph based on the last character context. regression from 2ab481b038b62b1ff576ac4d49d03c1798cd7f84 (tdf#90069 DOCX: fix character style of new table rows) Change-Id: I49da23c268436488ff1537771869c38108113c12 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88199 Tested-by: Jenkins Reviewed-by: László Németh --- sw/qa/extras/ooxmlexport/data/tdf130494.docx | Bin 0 -> 17455 bytes sw/qa/extras/ooxmlexport/ooxmlexport11.cxx | 8 ++++++++ writerfilter/source/dmapper/DomainMapper_Impl.cxx | 19 +++++++++++++++---- 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 sw/qa/extras/ooxmlexport/data/tdf130494.docx diff --git a/sw/qa/extras/ooxmlexport/data/tdf130494.docx b/sw/qa/extras/ooxmlexport/data/tdf130494.docx new file mode 100644 index 000000000000..bc2050feaa55 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf130494.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx index 1bb287351c87..6fe773bbb61a 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx @@ -1052,6 +1052,14 @@ DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf77417, "tdf77417.docx") CPPUNIT_ASSERT_EQUAL(2, getPages()); } +DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf130494, "tdf130494.docx") +{ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:pPr/w:rPr/w:highlight", "val", "yellow"); + // keep direct formatting of table cell paragraph with removed highlighting + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc[1]/w:p/w:r/w:rPr/w:highlight", 0); +} + DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf121597TrackedDeletionOfMultipleParagraphs, "tdf121597.odt") { xmlDocPtr pXmlDoc = parseExport("word/document.xml"); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 2c0472adb068..ebe2aa875709 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1801,14 +1801,25 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con // fix table paragraph properties if ( xParaProps && m_nTableDepth > 0 ) { - uno::Sequence< beans::PropertyValue > aValues = pParaContext->GetPropertyValues(false); + uno::Sequence< beans::PropertyValue > aParaProps = pParaContext->GetPropertyValues(false); // tdf#90069 in tables, apply paragraph level character style also on // paragraph level to support its copy during insertion of new table rows - for( const auto& rProp : std::as_const(aValues) ) + for( const auto& rParaProp : std::as_const(aParaProps) ) { - if ( rProp.Name.startsWith("Char") && rProp.Name != "CharStyleName" && rProp.Name != "CharInteropGrabBag" ) - xParaProps->setPropertyValue( rProp.Name, rProp.Value ); + if ( m_pLastCharacterContext.get() && rParaProp.Name.startsWith("Char") && rParaProp.Name != "CharStyleName" && rParaProp.Name != "CharInteropGrabBag" ) + { + const uno::Sequence< beans::PropertyValue > aLastCharProps = m_pLastCharacterContext->GetPropertyValues( ); + + for( const auto& rLastCharProp : std::as_const(aLastCharProps) ) + { + if ( rLastCharProp == rParaProp ) + { + xParaProps->setPropertyValue( rParaProp.Name, rParaProp.Value ); + break; + } + } + } } // tdf#128959 table paragraphs haven't got window and orphan controls -- cgit v1.2.3