From d129099624d2b646d975c9567541ed9c18adb7ef Mon Sep 17 00:00:00 2001 From: Justin Luth Date: Sat, 22 Oct 2016 15:20:38 +0300 Subject: tdf#89377 writerfilter: table honors ParaStyle break-before-page .doc format handled in prior patch. This import .docx patch checks to see if the very first paragraph style in a table is set with a page-break, and if so, then transfers that setting to the table itself. Change-Id: Ibb87eeb0fbdb7fdd84ef43dd1d7e0a6f8e1f8ad5 Reviewed-on: https://gerrit.libreoffice.org/30161 Tested-by: Jenkins Reviewed-by: Justin Luth --- writerfilter/source/dmapper/DomainMapper.cxx | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'writerfilter') diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index b93a96511449..f37025f1e32a 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2533,7 +2533,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) } break; case NS_ooxml::LN_tblStart: - + { /* * Hack for Importing Section Properties * LO is not able to import section properties if first element in the @@ -2545,8 +2545,31 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) { m_pImpl->AddDummyParaForTableInSection(); } - m_pImpl->m_nTableDepth++; + // if first paragraph style in table has break-before-page, transfer that setting to the table itself. + if( m_pImpl->m_nTableDepth == 0 ) + { + const uno::Any aBreakType = uno::makeAny(style::BreakType_PAGE_BEFORE); + const PropertyMapPtr pParagraphProps = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH); + if( pParagraphProps && pParagraphProps->isSet(PROP_PARA_STYLE_NAME) ) + { + StyleSheetEntryPtr pStyle = nullptr; + OUString sStyleName; + pParagraphProps->getProperty(PROP_PARA_STYLE_NAME)->second >>= sStyleName; + if( !sStyleName.isEmpty() && GetStyleSheetTable() ) + pStyle = GetStyleSheetTable()->FindStyleSheetByStyleName( sStyleName ); + + if( pStyle && pStyle->pProperties + && pStyle->pProperties->isSet(PROP_BREAK_TYPE) + && pStyle->pProperties->getProperty(PROP_BREAK_TYPE)->second == aBreakType ) + { + pParagraphProps->Insert(PROP_BREAK_TYPE, aBreakType); + } + } + } + + m_pImpl->m_nTableDepth++; + } break; case NS_ooxml::LN_tblEnd: m_pImpl->m_nTableDepth--; -- cgit