[Libreoffice-commits] .: 2 commits - sw/qa writerfilter/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Sep 21 08:32:04 PDT 2012


 sw/qa/extras/ooxmlimport/data/n780563.docx               |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx                 |   13 ++++++++
 writerfilter/source/dmapper/DomainMapperTableManager.cxx |   24 ++++++++-------
 writerfilter/source/dmapper/DomainMapperTableManager.hxx |    2 -
 writerfilter/source/dmapper/DomainMapper_Impl.cxx        |    1 
 5 files changed, 28 insertions(+), 12 deletions(-)

New commits:
commit 207aebf733cc568845cea5c2aeff78493e056b9a
Author: Cédric Bosdonnat <cedric.bosdonnat at free.fr>
Date:   Fri Sep 21 17:17:33 2012 +0200

    n#780563: Fixed table import in shapes table handler was missing
    
    Change-Id: I7720cfc706d9612fcc1e8a53b13a31f22b91d99e

diff --git a/sw/qa/extras/ooxmlimport/data/n780563.docx b/sw/qa/extras/ooxmlimport/data/n780563.docx
new file mode 100644
index 0000000..508dc74
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/n780563.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 6b1c425..34581e5 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -92,6 +92,7 @@ public:
     void testN779834();
     void testN779627();
     void testFdo55187();
+    void testN780563();
 
     CPPUNIT_TEST_SUITE(Test);
 #if !defined(MACOSX) && !defined(WNT)
@@ -130,6 +131,7 @@ public:
     CPPUNIT_TEST(testN779834);
     CPPUNIT_TEST(testN779627);
     CPPUNIT_TEST(testFdo55187);
+    CPPUNIT_TEST(testN780563);
 #endif
     CPPUNIT_TEST_SUITE_END();
 
@@ -894,6 +896,17 @@ void Test::testFdo55187()
     getParagraph(1, OUString("lupčka", 7, RTL_TEXTENCODING_UTF8));
 }
 
+void Test::testN780563()
+{
+    /*
+     * Make sure we have the table in the fly frame created
+     */
+    load("n780563.docx");
+    uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount( ));
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index e144f6e..112b837 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1598,6 +1598,7 @@ void DomainMapper_Impl::PushShapeContext( const uno::Reference< drawing::XShape
         }
 
         appendTableManager( );
+        appendTableHandler( );
         getTableManager().startLevel();
     }
     catch ( const uno::Exception& e )
commit b14b0f2b953b68612b8c230dbf3cabc15247c72d
Author: Cédric Bosdonnat <cedric.bosdonnat.ooo at free.fr>
Date:   Thu Sep 20 13:28:37 2012 +0200

    n#779627: fixed writerfilter import of grid when there are nested tables
    
    When a nested table is ended, it resets the m_nCell to 0... and thus the
    filter forgets about the previous cells of the outer table row it is
    importing. Using a vector to store the m_nCell values for each table
    solves the problem
    
    Change-Id: I8007960f4c95d713bfedc6b815d5783a5d25af23

diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
index bdcaa70..2753d7f 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
@@ -42,7 +42,7 @@ using namespace ::std;
 
 DomainMapperTableManager::DomainMapperTableManager(bool bOOXML, bool bImplicitMerges) :
     m_nRow(0),
-    m_nCell(0),
+    m_nCell(),
     m_nGridSpan(1),
     m_nCellBorderIndex(0),
     m_nHeaderRepeat(0),
@@ -343,6 +343,7 @@ void DomainMapperTableManager::startLevel( )
     IntVectorPtr pNewSpans( new vector<sal_Int32> );
     m_aTableGrid.push_back( pNewGrid );
     m_aGridSpans.push_back( pNewSpans );
+    m_nCell.push_back( 0 );
     m_nTableWidth = 0;
 }
 
@@ -350,6 +351,7 @@ void DomainMapperTableManager::endLevel( )
 {
     m_aTableGrid.pop_back( );
     m_aGridSpans.pop_back( );
+    m_nCell.pop_back( );
     m_nTableWidth = 0;
 
     DomainMapperTableManager_Base_t::endLevel( );
@@ -373,7 +375,7 @@ void DomainMapperTableManager::endOfCellAction()
 
     getCurrentSpans()->push_back(m_nGridSpan);
     m_nGridSpan = 1;
-    ++m_nCell;
+    ++m_nCell.back( );
 }
 
 
@@ -416,10 +418,10 @@ void DomainMapperTableManager::endOfRowAction()
     }
 
     IntVectorPtr pCurrentSpans = getCurrentSpans( );
-    if( pCurrentSpans->size() < m_nCell)
+    if( pCurrentSpans->size() < m_nCell.back( ) )
     {
         //fill missing elements with '1'
-        pCurrentSpans->insert( pCurrentSpans->end( ), m_nCell - pCurrentSpans->size(), 1 );
+        pCurrentSpans->insert( pCurrentSpans->end( ), m_nCell.back( ) - pCurrentSpans->size(), 1 );
     }
 
 #ifdef DEBUG_DOMAINMAPPER
@@ -450,15 +452,15 @@ void DomainMapperTableManager::endOfRowAction()
     double nFullWidth = m_nTableWidth;
     //the positions have to be distibuted in a range of 10000
     const double nFullWidthRelative = 10000.;
-    if( pTableGrid->size() == nGrids && m_nCell > 0 )
+    if( pTableGrid->size() == nGrids && m_nCell.back( ) > 0 )
     {
-        uno::Sequence< text::TableColumnSeparator > aSeparators( m_nCell - 1 );
+        uno::Sequence< text::TableColumnSeparator > aSeparators( m_nCell.back( ) - 1 );
         text::TableColumnSeparator* pSeparators = aSeparators.getArray();
         sal_Int16 nLastRelPos = 0;
         sal_uInt32 nBorderGridIndex = 0;
 
         ::std::vector< sal_Int32 >::const_iterator aSpansIter = pCurrentSpans->begin( );
-        for( sal_uInt32 nBorder = 0; nBorder < m_nCell - 1; ++nBorder )
+        for( sal_uInt32 nBorder = 0; nBorder < m_nCell.back( ) - 1; ++nBorder )
         {
             sal_Int32 nGridCount = *aSpansIter;
             double fGridWidth = 0.;
@@ -489,14 +491,14 @@ void DomainMapperTableManager::endOfRowAction()
     {
         // 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 - 1);
+        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; i > 1 && nSizeTableGrid >= i; i--)
+        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
@@ -515,7 +517,7 @@ void DomainMapperTableManager::endOfRowAction()
     }
 
     ++m_nRow;
-    m_nCell = 0;
+    m_nCell.back( ) = 0;
     m_nCellBorderIndex = 0;
     pCurrentSpans->clear();
 
@@ -527,7 +529,7 @@ void DomainMapperTableManager::endOfRowAction()
 
 void DomainMapperTableManager::clearData()
 {
-    m_nRow = m_nCell = m_nCellBorderIndex = m_nHeaderRepeat = m_nTableWidth = 0;
+    m_nRow = m_nCellBorderIndex = m_nHeaderRepeat = m_nTableWidth = 0;
     m_sTableStyleName = OUString();
     m_sTableVertAnchor = OUString();
     m_pTableStyleTextProperies.reset();
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.hxx b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
index a005c2e..e9255f7 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.hxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
@@ -35,7 +35,7 @@ class DomainMapperTableManager : public DomainMapperTableManager_Base_t
     typedef boost::shared_ptr< std::vector<sal_Int32> > IntVectorPtr;
 
     sal_uInt32      m_nRow;
-    sal_uInt32      m_nCell;
+    ::std::vector< sal_uInt32 > m_nCell;
     sal_uInt32      m_nGridSpan;
     sal_uInt32      m_nCellBorderIndex; //borders are provided for all cells and need counting
     sal_Int32       m_nHeaderRepeat; //counter of repeated headers - if == -1 then the repeating stops


More information about the Libreoffice-commits mailing list