Hi, I have submitted a patch for review:
https://gerrit.libreoffice.org/1947 To pull it, you can do: git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/47/1947/1 fdo#59393 fdo#44053 fix this again and this time add a testcase as well This was about importing RTF tables where different rows had different number of cells. In the meantime, a better implementation was added for DOCX, just using that for RTF fixes the import of this bugdoc. Also fixes a crasher while loading ooo43817-1.rtf. (cherry picked from commit d276d3f3ae112a11c8cb5768650d147cbb94275e) Change-Id: I0970275272eca7f33a442bd6acc97a4f8d9dabeb --- A sw/qa/extras/rtfimport/data/fdo44053.rtf M sw/qa/extras/rtfimport/rtfimport.cxx M writerfilter/source/dmapper/DomainMapperTableManager.cxx M writerfilter/source/dmapper/DomainMapperTableManager.hxx M writerfilter/source/dmapper/DomainMapper_Impl.hxx 5 files changed, 31 insertions(+), 33 deletions(-) diff --git a/sw/qa/extras/rtfimport/data/fdo44053.rtf b/sw/qa/extras/rtfimport/data/fdo44053.rtf new file mode 100644 index 0000000..ef5f975 --- /dev/null +++ b/sw/qa/extras/rtfimport/data/fdo44053.rtf @@ -0,0 +1,15 @@ +{\rtf1 +Title\par +\trowd \cellx550\cellx7000 +0000000\cell +Name\cell +\pard +\trowd \cellx550\cellx7000\row +\trowd \cellx550\cellx1650\cellx5550\cellx7000 +\cell +\pard \intbl +Cell1\cell\cell\cell +\pard +\trowd \cellx550\cellx1650\cellx5550\cellx7000\row +\pard\par +} diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx index 3dc2f1b..d2a5c31 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -136,6 +136,7 @@ void testFdo45183(); void testFdo54612(); void testFdo58933(); + void testFdo44053(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) @@ -222,6 +223,7 @@ {"fdo45183.rtf", &Test::testFdo45183}, {"fdo54612.rtf", &Test::testFdo54612}, {"fdo58933.rtf", &Test::testFdo58933}, + {"fdo44053.rtf", &Test::testFdo44053}, }; for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i) { @@ -1052,6 +1054,17 @@ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTable->getCellNames().getLength()); } +void Test::testFdo44053() +{ + uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); + uno::Reference<text::XTextTable> xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference<table::XTableRows> xTableRows(xTextTable->getRows(), uno::UNO_QUERY); + // The with of the table's A1 and A2 cell should equal. + CPPUNIT_ASSERT_EQUAL(getProperty< uno::Sequence<text::TableColumnSeparator> >(xTableRows->getByIndex(0), "TableColumnSeparators")[0].Position, + getProperty< uno::Sequence<text::TableColumnSeparator> >(xTableRows->getByIndex(1), "TableColumnSeparators")[0].Position); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx index afe9d6c..448d6e1 100644 --- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx @@ -41,7 +41,7 @@ using namespace ::std; -DomainMapperTableManager::DomainMapperTableManager(bool bOOXML, bool bImplicitMerges) : +DomainMapperTableManager::DomainMapperTableManager(bool bOOXML) : m_nRow(0), m_nCell(), m_nGridSpan(1), @@ -51,7 +51,6 @@ m_nHeaderRepeat(0), m_nTableWidth(0), m_bOOXML( bOOXML ), - m_bImplicitMerges(bImplicitMerges), m_bPushCurrentWidth(false), m_pTablePropsHandler( new TablePropertiesHandler( bOOXML ) ) { @@ -525,34 +524,6 @@ TablePropertyMapPtr pPropMap( new TablePropertyMap ); pPropMap->Insert( PROP_TABLE_COLUMN_SEPARATORS, false, uno::makeAny( aSeparators ) ); -#ifdef DEBUG_DOMAINMAPPER - dmapper_logger->startElement("rowProperties"); - pPropMap->dumpXml( dmapper_logger ); - dmapper_logger->endElement(); -#endif - insertRowProps(pPropMap); - } - else if (m_bImplicitMerges && pTableGrid->size()) - { - // More grid than cells definitions? Then take the last ones. - // This feature is used by the RTF implicit horizontal cell merges. - uno::Sequence< text::TableColumnSeparator > aSeparators(m_nCell.back( ) - 1); - text::TableColumnSeparator* pSeparators = aSeparators.getArray(); - - sal_Int16 nSum = 0; - sal_uInt32 nPos = 0; - sal_uInt32 nSizeTableGrid = pTableGrid->size(); - // Ignoring the i=0 case means we assume that the width of the last cell matches the table width - for (sal_uInt32 i = m_nCell.back( ); i > 1 && nSizeTableGrid >= i; i--) - { - nSum += (*pTableGrid.get())[pTableGrid->size() - i]; // Size of the current cell - pSeparators[nPos].Position = nSum * nFullWidthRelative / nFullWidth; // Relative position - pSeparators[nPos].IsVisible = sal_True; - nPos++; - } - - TablePropertyMapPtr pPropMap( new TablePropertyMap ); - pPropMap->Insert( PROP_TABLE_COLUMN_SEPARATORS, false, uno::makeAny( aSeparators ) ); #ifdef DEBUG_DOMAINMAPPER dmapper_logger->startElement("rowProperties"); pPropMap->dumpXml( dmapper_logger ); diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.hxx b/writerfilter/source/dmapper/DomainMapperTableManager.hxx index e7965bd..bba5b5e 100644 --- a/writerfilter/source/dmapper/DomainMapperTableManager.hxx +++ b/writerfilter/source/dmapper/DomainMapperTableManager.hxx @@ -43,7 +43,6 @@ sal_Int32 m_nHeaderRepeat; //counter of repeated headers - if == -1 then the repeating stops sal_Int32 m_nTableWidth; //might be set directly or has to be calculated from the column positions bool m_bOOXML; - bool m_bImplicitMerges; OUString m_sTableStyleName; OUString m_sTableVertAnchor; PropertyMapPtr m_pTableStyleTextProperies; @@ -62,7 +61,7 @@ public: - DomainMapperTableManager(bool bOOXML, bool bImplicitMerges); + DomainMapperTableManager(bool bOOXML); virtual ~DomainMapperTableManager(); // use this method to avoid adding the properties for the table diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 5857455..20065e7 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -588,7 +588,7 @@ void appendTableManager( ) { boost::shared_ptr< DomainMapperTableManager > pMngr( - new DomainMapperTableManager( m_eDocumentType == DOCUMENT_OOXML || m_eDocumentType == DOCUMENT_RTF, m_eDocumentType == DOCUMENT_RTF ) ); + new DomainMapperTableManager( m_eDocumentType == DOCUMENT_OOXML || m_eDocumentType == DOCUMENT_RTF ) ); m_aTableManagers.push( pMngr ); } -- To view, visit https://gerrit.libreoffice.org/1947 To unsubscribe, visit https://gerrit.libreoffice.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0970275272eca7f33a442bd6acc97a4f8d9dabeb Gerrit-PatchSet: 1 Gerrit-Project: core Gerrit-Branch: libreoffice-4-0 Gerrit-Owner: Miklos Vajna <vmik...@suse.cz> _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice