[Libreoffice-commits] core.git: Branch 'libreoffice-4-0' - sw/qa writerfilter/source

Miklos Vajna vmiklos at suse.cz
Tue Mar 26 09:46:22 PDT 2013


 sw/qa/extras/ooxmlimport/data/fdo59273.docx              |binary
 sw/qa/extras/ooxmlimport/data/n780645.docx               |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx                 |   12 +++++++++
 writerfilter/source/dmapper/DomainMapperTableManager.cxx |   10 +++++--
 writerfilter/source/dmapper/DomainMapperTableManager.hxx |    7 +++++
 writerfilter/source/dmapper/TablePropertiesHandler.cxx   |    8 ++++++
 writerfilter/source/ooxml/model.xml                      |   19 ++++++++-------
 7 files changed, 45 insertions(+), 11 deletions(-)

New commits:
commit 0dd9158a1fe48dee192a954a8ea24c2efcd64a86
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Tue Mar 26 12:15:03 2013 +0100

    fdo#59273 import w:tblLayout of DOCX tables
    
    Also add missing <w:tblLayout w:type=fixed/> to the bnc#780645 testcase
    to avoid breaking the build.
    
    (cherry picked from commits 7329df74df134a77d078f47d5c8b70d54c5d1edb and
    4821d894f849a4939bbe6fb0a9a5ddd9e10b0467)
    
    Conflicts:
    	writerfilter/source/dmapper/DomainMapperTableManager.cxx
    	writerfilter/source/dmapper/DomainMapperTableManager.hxx
    
    Change-Id: I9af50a4c176168e2794eaa9b0e8eaeb6b9d06b13
    Reviewed-on: https://gerrit.libreoffice.org/3058
    Reviewed-by: Luboš Luňák <l.lunak at suse.cz>
    Tested-by: Luboš Luňák <l.lunak at suse.cz>

diff --git a/sw/qa/extras/ooxmlimport/data/fdo59273.docx b/sw/qa/extras/ooxmlimport/data/fdo59273.docx
new file mode 100644
index 0000000..fcdfd77
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/fdo59273.docx differ
diff --git a/sw/qa/extras/ooxmlimport/data/n780645.docx b/sw/qa/extras/ooxmlimport/data/n780645.docx
index 12ffa38..35ad11f 100755
Binary files a/sw/qa/extras/ooxmlimport/data/n780645.docx and b/sw/qa/extras/ooxmlimport/data/n780645.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 51ce241..aeda333 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -115,6 +115,7 @@ public:
     void testFdo59638();
     void testFdo61343();
     void testFdo60922();
+    void testFdo59273();
 
     CPPUNIT_TEST_SUITE(Test);
 #if !defined(MACOSX) && !defined(WNT)
@@ -182,6 +183,7 @@ void Test::run()
         {"fdo59638.docx", &Test::testFdo59638},
         {"fdo61343.docx", &Test::testFdo61343},
         {"fdo60922.docx", &Test::testFdo60922},
+        {"fdo59273.docx", &Test::testFdo59273},
     };
     for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i)
     {
@@ -1140,6 +1142,16 @@ void Test::testFdo60922()
     CPPUNIT_ASSERT_EQUAL(sal_Int32(100), getProperty<sal_Int32>(getRun(getParagraph(1), 1), "CharEscapementHeight"));
 }
 
+void Test::testFdo59273()
+{
+    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);
+    // Was 9997, so the 4th column had ~zero width
+    CPPUNIT_ASSERT_EQUAL(sal_Int16(7498), getProperty< uno::Sequence<text::TableColumnSeparator> >(xTableRows->getByIndex(0), "TableColumnSeparators")[2].Position);
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
index d81aea7..0298690 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
@@ -51,6 +51,7 @@ DomainMapperTableManager::DomainMapperTableManager(bool bOOXML) :
     m_nTableWidth(0),
     m_bOOXML( bOOXML ),
     m_bPushCurrentWidth(false),
+    m_nLayoutType(0),
     m_pTablePropsHandler( new TablePropertiesHandler( bOOXML ) )
 {
     m_pTablePropsHandler->SetTableManager( this );
@@ -395,6 +396,7 @@ void DomainMapperTableManager::startLevel( )
     m_aTablePositions.push_back( pNewPositionHandler );
     m_nCell.push_back( 0 );
     m_nTableWidth = 0;
+    m_nLayoutType = 0;
 
     // And push it back to the right level.
     if (oCurrentWidth)
@@ -408,6 +410,7 @@ void DomainMapperTableManager::endLevel( )
     m_aCellWidths.pop_back( );
     m_nCell.pop_back( );
     m_nTableWidth = 0;
+    m_nLayoutType = 0;
 
 
     DomainMapperTableManager_Base_t::endLevel( );
@@ -548,12 +551,13 @@ void DomainMapperTableManager::endOfRowAction()
 #endif
         insertRowProps(pPropMap);
     }
-    else if (pCellWidths->size() > 0)
+    else if (pCellWidths->size() > 0 && m_nLayoutType == NS_ooxml::LN_Value_wordprocessingml_ST_TblLayout_fixed)
     {
         // If we're here, then the number of cells does not equal to the amount
         // defined by the grid, even after taking care of
         // gridSpan/gridBefore/gridAfter. Handle this by ignoring the grid and
-        // providing the separators based on the provided cell widths.
+        // providing the separators based on the provided cell widths, as long
+        // as we have a fixed layout.
         uno::Sequence< text::TableColumnSeparator > aSeparators(pCellWidths->size() - 1);
         text::TableColumnSeparator* pSeparators = aSeparators.getArray();
         sal_Int16 nSum = 0;
@@ -593,7 +597,7 @@ void DomainMapperTableManager::endOfRowAction()
 
 void DomainMapperTableManager::clearData()
 {
-    m_nRow = m_nCellBorderIndex = m_nHeaderRepeat = m_nTableWidth = 0;
+    m_nRow = m_nCellBorderIndex = m_nHeaderRepeat = m_nTableWidth = m_nLayoutType = 0;
     m_sTableStyleName = OUString();
     m_pTableStyleTextProperies.reset();
 }
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.hxx b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
index d3164ea..0488de4 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.hxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
@@ -54,6 +54,8 @@ class DomainMapperTableManager : public DomainMapperTableManager_Base_t
     bool            m_bPushCurrentWidth;
     /// Individual table cell width values, used only in case the number of cells doesn't match the table grid.
     ::std::vector< IntVectorPtr >  m_aCellWidths;
+    /// Table layout algorithm, IOW if we should consider fixed column width or not.
+    sal_uInt32 m_nLayoutType;
 
     TablePropertiesHandler   *m_pTablePropsHandler;
     PropertyMapPtr            m_pStyleProps;
@@ -119,6 +121,11 @@ public:
            DomainMapperTableManager_Base_t::insertTableProps( pProps );
     };
 
+    void SetLayoutType(sal_uInt32 nLayoutType)
+    {
+        m_nLayoutType = nLayoutType;
+    }
+
 };
 
 }}
diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.cxx b/writerfilter/source/dmapper/TablePropertiesHandler.cxx
index b1d560c..92c5bbb 100644
--- a/writerfilter/source/dmapper/TablePropertiesHandler.cxx
+++ b/writerfilter/source/dmapper/TablePropertiesHandler.cxx
@@ -24,6 +24,7 @@
 #include "MeasureHandler.hxx"
 #include "TablePropertiesHandler.hxx"
 #include "TDefTableHandler.hxx"
+#include "DomainMapperTableManager.hxx"
 
 #include <ooxml/resourceids.hxx>
 #include <doctok/sprmids.hxx>
@@ -155,6 +156,13 @@ namespace dmapper {
                 }
             }
             break;
+            case NS_ooxml::LN_CT_TblPrBase_tblLayout:
+            {
+                DomainMapperTableManager* pManager = dynamic_cast<DomainMapperTableManager*>(m_pTableManager);
+                if (pManager)
+                    pManager->SetLayoutType(static_cast<sal_uInt32>(nIntValue));
+            }
+            break;
             case NS_ooxml::LN_CT_TcPrBase_tcBorders ://cell borders
             //contains CT_TcBorders_left, right, top, bottom
             {
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index 27c46a4..1886188 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -17882,7 +17882,7 @@
           <xs:documentation>Revision Identifier for Table Row Properties</xs:documentation>
         </attribute>
       </define>
-      <define name="ST_TblLayoutType">
+      <define name="ST_TblLayout">
         <list>
           <xs:documentation>Table Layout Type</xs:documentation>
           <choice>
@@ -17893,9 +17893,9 @@
           </choice>
         </list>
       </define>
-      <define name="CT_TblLayoutType">
+      <define name="CT_TblLayout">
         <attribute name="type">
-          <text/>
+          <ref name="ST_TblLayout"/>
           <xs:documentation>Table Layout Setting</xs:documentation>
         </attribute>
       </define>
@@ -18095,7 +18095,7 @@
         </optional>
         <optional>
           <element name="tblLayout">
-            <ref name="CT_TblLayoutType"/>
+            <ref name="CT_TblLayout"/>
           </element>
         </optional>
         <optional>
@@ -18150,7 +18150,7 @@
         </optional>
         <optional>
           <element name="tblLayout">
-            <ref name="CT_TblLayoutType"/>
+            <ref name="CT_TblLayout"/>
           </element>
         </optional>
         <optional>
@@ -22943,9 +22943,12 @@
       <action name="end" action="sendTableProperties"/>
       <action name="end" action="endRow"/>
     </resource>
-    <resource name="ST_TblLayoutType" resource="List" generated="yes">
-      <value name="fixed" tokenid="ooxml:Value_wordprocessingml_ST_TblLayoutType_fixed">fixed</value>
-      <value name="autofit" tokenid="ooxml:Value_wordprocessingml_ST_TblLayoutType_autofit">autofit</value>
+    <resource name="ST_TblLayout" resource="List">
+      <value tokenid="ooxml:Value_wordprocessingml_ST_TblLayout_fixed">fixed</value>
+      <value tokenid="ooxml:Value_wordprocessingml_ST_TblLayout_autofit">autofit</value>
+    </resource>
+    <resource name="CT_TblLayout" resource="Value" tag="table">
+      <attribute name="type" tokenid="ooxml:CT_TblLayout_type" action="setValue"/>
     </resource>
     <resource name="ST_TblOverlap" resource="List">
       <value tokenid="ooxml:Value_ST_TblOverlap_never">never</value>


More information about the Libreoffice-commits mailing list