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

Miklos Vajna vmiklos at collabora.co.uk
Wed Mar 12 08:12:01 PDT 2014


 sw/qa/extras/ooxmlimport/ooxmlimport.cxx                 |    6 ++++--
 writerfilter/source/dmapper/DomainMapperTableManager.cxx |    3 +++
 writerfilter/source/dmapper/DomainMapperTableManager.hxx |    7 +++++++
 writerfilter/source/dmapper/TablePropertiesHandler.cxx   |   12 ++++++++----
 4 files changed, 22 insertions(+), 6 deletions(-)

New commits:
commit 970160f78ef6cc7abacfa252daa8451e1f0117bb
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Mar 12 15:13:47 2014 +0100

    bnc#865381 DOCX import: fix w:trHeight for cells with btLr text direction
    
    Also extend testcase: I made sure that the new version fails without
    this fix and without the fix from
    48b5b7641d0df960558082e8948da8598f801264 as well.
    
    Change-Id: If33aa6d33cdc287620c12b84ad3f50279568bc8d

diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 809e763..535ebf8 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -1106,8 +1106,10 @@ DECLARE_OOXMLIMPORT_TEST(testBnc865381, "bnc865381.docx")
     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);
-    // Second row has a vertically merged cell, make sure size type is MIN in that case (otherwise B2 is not readable).
-    CPPUNIT_ASSERT_EQUAL(text::SizeType::MIN, getProperty<sal_Int16>(xTableRows->getByIndex(1), "SizeType"));
+    // Second row has a vertically merged cell, make sure size type is not FIX in that case (otherwise B2 is not readable).
+    CPPUNIT_ASSERT(text::SizeType::FIX != getProperty<sal_Int16>(xTableRows->getByIndex(1), "SizeType"));
+    // Explicit size of 41 mm100 was set, so the vertical text in A2 was not readable.
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xTableRows->getByIndex(1), "Height"));
 }
 
 DECLARE_OOXMLIMPORT_TEST(testFdo53985, "fdo53985.docx")
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
index 773da17..e463ff1 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
@@ -54,6 +54,7 @@ DomainMapperTableManager::DomainMapperTableManager(bool bOOXML) :
     m_aTmpTableProperties(),
     m_bPushCurrentWidth(false),
     m_bRowSizeTypeInserted(false),
+    m_bHasBtlrCell(false),
     m_bTableSizeTypeInserted(false),
     m_nLayoutType(0),
     m_nMaxFixedWidth(0),
@@ -354,6 +355,7 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
                             m_bRowSizeTypeInserted = true;
                             insertRowProps(pRowPropMap);
                         }
+                        m_bHasBtlrCell = true;
                         }
                         break;
                     case 4: // lrTbV
@@ -758,6 +760,7 @@ void DomainMapperTableManager::endOfRowAction()
 
     m_nGridBefore = m_nGridAfter = 0;
     m_bRowSizeTypeInserted = false;
+    m_bHasBtlrCell = false;
     m_bTableSizeTypeInserted = false;
 
 #ifdef DEBUG_DOMAINMAPPER
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.hxx b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
index f36ac5d2..e9e9779 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.hxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
@@ -58,6 +58,8 @@ class DomainMapperTableManager : public DomainMapperTableManager_Base_t
     ::std::vector< IntVectorPtr >  m_aCellWidths;
     /// Remember if a cell already set this, then it should not be set at a row level.
     bool m_bRowSizeTypeInserted;
+    /// At least one cell in the current row has the btLr text direction.
+    bool m_bHasBtlrCell;
     /// Remember if table width was already set, when we lack a w:tblW, it should be set manually at the end.
     bool m_bTableSizeTypeInserted;
     /// Table layout algorithm, IOW if we should consider fixed column width or not.
@@ -130,6 +132,11 @@ public:
         return m_bRowSizeTypeInserted;
     }
 
+    bool HasBtlrCell() const
+    {
+        return m_bHasBtlrCell;
+    }
+
     bool IsTableSizeTypeInserted() const
     {
         return m_bTableSizeTypeInserted;
diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.cxx b/writerfilter/source/dmapper/TablePropertiesHandler.cxx
index b9b456b..d71e9ae 100644
--- a/writerfilter/source/dmapper/TablePropertiesHandler.cxx
+++ b/writerfilter/source/dmapper/TablePropertiesHandler.cxx
@@ -96,12 +96,16 @@ namespace dmapper {
                     pProperties->resolve(*pMeasureHandler);
                     TablePropertyMapPtr pPropMap( new TablePropertyMap );
 
-                    // In case a cell already wanted fixed size, we should not overwrite it here.
                     DomainMapperTableManager* pManager = dynamic_cast<DomainMapperTableManager*>(m_pTableManager);
-                    if (!pManager || !pManager->IsRowSizeTypeInserted())
-                        pPropMap->Insert( PROP_SIZE_TYPE, uno::makeAny( pMeasureHandler->GetRowHeightSizeType() ), false);
+                    // In case any of the cells has the btLr cell direction, then an explicit minimal size will just hide the whole row, don't do that.
+                    if (pMeasureHandler->GetRowHeightSizeType() != text::SizeType::MIN || !pManager->HasBtlrCell())
+                    {
+                        // In case a cell already wanted fixed size, we should not overwrite it here.
+                        if (!pManager || !pManager->IsRowSizeTypeInserted())
+                            pPropMap->Insert( PROP_SIZE_TYPE, uno::makeAny( pMeasureHandler->GetRowHeightSizeType() ), false);
 
-                    pPropMap->Insert( PROP_HEIGHT, uno::makeAny(pMeasureHandler->getMeasureValue() ));
+                        pPropMap->Insert( PROP_HEIGHT, uno::makeAny(pMeasureHandler->getMeasureValue() ));
+                    }
                     insertRowProps(pPropMap);
                 }
             }


More information about the Libreoffice-commits mailing list