sw/qa/extras/ooxmlimport/data/tdf109524.docx             |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx                 |   12 ++++++++++++
 writerfilter/source/dmapper/DomainMapperTableHandler.cxx |   13 ++++++++++---
 3 files changed, 22 insertions(+), 3 deletions(-)

New commits:
commit cae5dd9363b68dbabbeb2069f4aee7d057f6b5a8
Author: Mike Kaganski <mike.kagan...@collabora.com>
Date:   Tue Jul 25 16:58:28 2017 +0300

    tdf#109524: use 100% table width when there's no explicit width available
    
    According to ECMA-376-1:2016 17.4.63, 17.18.87, etc, all table widths are
    considered preferred, and actual table layout should be determined using an
    algorithm described in 17.18.87. When w:tblLayout element is omitted, or
    there is no explicit width information given, it is assumed that AutoFit 
Table
    Layout should be used, i.e. using cells content to determine final widths of
    table grid. In the description of the AutoFit Table Layout algorithm, it is
    stated that the table width grows to hold data, but no more than page width.
    
    As a first approach, this commit just sets table width to 100% when there's
    no width data available. TODO is to implement the AutoFit Table Layout
    algorithm properly.
    
    Change-Id: I000c548eb152c70d2c6e053f4d2b1d16e8976c27
    Reviewed-on: https://gerrit.libreoffice.org/40500
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/sw/qa/extras/ooxmlimport/data/tdf109524.docx 
b/sw/qa/extras/ooxmlimport/data/tdf109524.docx
new file mode 100644
index 000000000000..534245b8f907
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf109524.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx 
b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 6b4dc9a81216..fef6d06d0038 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -1418,6 +1418,18 @@ DECLARE_OOXMLIMPORT_TEST(testTdf109306, "tdf109306.docx")
     CPPUNIT_ASSERT_EQUAL(sal_Int16(80), 
getProperty<sal_Int16>(xTables->getByIndex(1), "RelativeWidth"));
 }
 
+DECLARE_OOXMLIMPORT_TEST(testTdf109524, "tdf109524.docx")
+{
+    uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, 
uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> 
xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY);
+    // The table should have a small width (just to hold the short text in its 
single cell).
+    // Until it's correctly implemented, we assign it 100% relative width.
+    // Previously, the table (without explicitly set width) had huge actual 
width
+    // and extended far outside of page's right border.
+    CPPUNIT_ASSERT_EQUAL(true, bool(getProperty<bool>(xTables->getByIndex(0), 
"IsWidthRelative")));
+    CPPUNIT_ASSERT_EQUAL(sal_Int16(100), 
getProperty<sal_Int16>(xTables->getByIndex(0), "RelativeWidth"));
+}
+
 // tests should only be added to ooxmlIMPORT *if* they fail round-tripping in 
ooxmlEXPORT
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx 
b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index 9f73f8cf0641..07742f27563b 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -352,8 +352,6 @@ TableStyleSheetEntry * 
DomainMapperTableHandler::endTableGetTableStyle(TableInfo
         //pPropMap->Insert( PROP_HORI_ORIENT, uno::makeAny( 
text::HoriOrientation::RIGHT ));
         sal_Int32 nGapHalf = 0;
         sal_Int32 nLeftMargin = 0;
-        sal_Int32 nTableWidth = 0;
-        sal_Int32 nTableWidthType = text::SizeType::FIX;
 
         comphelper::SequenceAsHashMap aGrabBag;
 
@@ -587,14 +585,23 @@ TableStyleSheetEntry * 
DomainMapperTableHandler::endTableGetTableStyle(TableInfo
             m_aTableProperties->Insert( PROP_LEFT_MARGIN, uno::makeAny( 
nLeftMargin - nGapHalf ) );
         }
 
+        sal_Int32 nTableWidth = 0;
+        sal_Int32 nTableWidthType = text::SizeType::FIX;
         m_aTableProperties->getValue( TablePropertyMap::TABLE_WIDTH, 
nTableWidth );
         m_aTableProperties->getValue( TablePropertyMap::TABLE_WIDTH_TYPE, 
nTableWidthType );
         if( nTableWidthType == text::SizeType::FIX )
         {
             if( nTableWidth > 0 )
                 m_aTableProperties->Insert( PROP_WIDTH, uno::makeAny( 
nTableWidth ));
+            else
+            {
+                // tdf#109524: If there is no width for the table, make it 
simply 100% by default.
+                // TODO: use cell contents to evaluate width (according to 
ECMA-376-1:2016 17.18.87)
+                nTableWidth = 100;
+                nTableWidthType = text::SizeType::VARIABLE;
+            }
         }
-        else
+        if (nTableWidthType != text::SizeType::FIX)
         {
             m_aTableProperties->Insert( PROP_RELATIVE_WIDTH, uno::makeAny( 
sal_Int16( nTableWidth ) ) );
             m_aTableProperties->Insert( PROP_IS_WIDTH_RELATIVE, uno::makeAny( 
true ) );
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to