diff options
-rw-r--r-- | sw/qa/extras/ww8export/ww8export.cxx | 30 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8par2.cxx | 54 |
2 files changed, 0 insertions, 84 deletions
diff --git a/sw/qa/extras/ww8export/ww8export.cxx b/sw/qa/extras/ww8export/ww8export.cxx index a89798408c3c..f5fffee106f2 100644 --- a/sw/qa/extras/ww8export/ww8export.cxx +++ b/sw/qa/extras/ww8export/ww8export.cxx @@ -1251,39 +1251,9 @@ DECLARE_WW8EXPORT_TEST(testTableKeep, "tdf91083.odt") //emulate table "keep with next" -do not split table CPPUNIT_ASSERT_EQUAL( OUString("Row 1"), parseDump("/root/page[3]/body/tab[1]/row[2]/cell[1]/txt[1]") ); CPPUNIT_ASSERT_EQUAL( OUString("Row 1"), parseDump("/root/page[6]/body/tab[1]/row[2]/cell[1]/txt[1]") ); - - // detect and re-enable keep-with-next and dont-split-table settings - uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY); - uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); - uno::Reference<text::XTextTable> xTable (xTables->getByIndex(0), uno::UNO_QUERY); - CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xTable, "Split")); } #endif -DECLARE_WW8EXPORT_TEST(testTdf91083_tableKeep, "tdf91083_tableKeep.doc") -{ - // detect and re-enable keep-with-next and dont-split-table settings - uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY); - uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); - - // single-row table - kept with next - uno::Reference<text::XTextTable> xTable (xTables->getByIndex(0), uno::UNO_QUERY); - CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xTable, "Split")); - // I don't know how to test for SvxFormatKeepItem - - // complex table - kept with next - xTables->getByIndex(1) >>= xTable; - CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xTable, "Split")); - - //single row table - do not split - xTables->getByIndex(3) >>= xTable; - CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xTable, "Split")); - - //multi-row table - do not split - xTables->getByIndex(4) >>= xTable; - CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xTable, "Split")); -} - DECLARE_WW8EXPORT_TEST(testTdf76349_textboxMargins, "tdf76349_textboxMargins.doc") { // textboxes without borders were losing their spacing items in round-tripping diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx index ecd2326968a4..f4f054ba1d4c 100644 --- a/sw/source/filter/ww8/ww8par2.cxx +++ b/sw/source/filter/ww8/ww8par2.cxx @@ -2735,60 +2735,6 @@ void WW8TabDesc::FinishSwTable() m_pIo->m_pFormatOfJustInsertedApo = nullptr; m_MergeGroups.clear(); } - - // since Word formats don't have table "keep with next paragraph" and "don't split table" settings, - // they were emulated in MSWordExportBase::OutputTextNode. Now we need to re-create those settings, reversing that logic. - // bKeep: if first paragraph of EVERY row is marked keep-with-next (implies bDontSplit). - bool bKeep = true; - // bDontSplit table: if first paragraph of every row EXCEPT the last one is kept. - bool bDontSplit = false; - sal_uInt32 nRow=0; - std::vector< SwTextNode* > vEmulatedNodes; - while( bKeep && nRow < m_pTabLines->size() ) - { - const SwTableLine* pIterTableRow = (*m_pTabLines)[ nRow ]; - const SwTableBoxes& rIterTableBoxes = pIterTableRow->GetTabBoxes(); - const SwTableBox* pIterFirstCell = rIterTableBoxes.empty() ? nullptr : rIterTableBoxes.front(); - // only for non-complex tables - if( pIterFirstCell && !pIterTableRow->GetUpper() ) - { - // check the first paragraph from each row - SwPaM aPam( *pIterFirstCell->GetSttNd(), 0 ); - aPam.GetPoint()->nNode++; - SwNode & rNode = aPam.GetPoint()->nNode.GetNode(); - SwTextNode* pFirstParagraphNode = nullptr; - if( rNode.IsTextNode() ) - pFirstParagraphNode = rNode.GetTextNode(); - - if( pFirstParagraphNode ) - { - if( !pFirstParagraphNode->GetSwAttrSet().GetKeep().GetValue() ) - bKeep = false; - // all rows except the last one have been kept - else if ( nRow == m_pTabLines->size() - 2 ) - bDontSplit = true; - - // save the node, so the paragraph's keep-with-next-paragraph setting can be removed later if it was added for the emulation - vEmulatedNodes.push_back( pFirstParagraphNode ); - } - } - ++nRow; - } - - if( bDontSplit || (bKeep && !vEmulatedNodes.empty()) ) - { - // clear the emulated row's paragraph property - while( !vEmulatedNodes.empty() ) - { - vEmulatedNodes.back()->ResetAttr( RES_KEEP ); - vEmulatedNodes.pop_back(); - } - - // Set the table properties - m_pTable->GetFrameFormat()->SetFormatAttr(SwFormatLayoutSplit( false )); - if( bKeep ) - m_pTable->GetFrameFormat()->SetFormatAttr(SvxFormatKeepItem( true, RES_KEEP )); - } } // browse m_MergeGroups, detect the index of the first fitting group or -1 otherwise |