Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


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 <vmiklos@suse.cz>

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.