sw/qa/extras/ooxmlexport/data/fdo80800.docx              |binary
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx                 |   15 +++++++++++++++
 writerfilter/source/dmapper/DomainMapper.cxx             |   13 ++++++++-----
 writerfilter/source/dmapper/DomainMapperTableHandler.cxx |    9 ---------
 writerfilter/source/dmapper/DomainMapper_Impl.cxx        |    7 -------
 writerfilter/source/dmapper/DomainMapper_Impl.hxx        |    5 -----
 6 files changed, 23 insertions(+), 26 deletions(-)

New commits:
commit a5f9fb720daeb2df8325768b98b8b720abcc2b9b
Author: Pallavi Jadhav <pallavi.jad...@synerzip.com>
Date:   Fri Jul 11 14:27:52 2014 +0530

    fdo#80800 : DOCX: Preservation of Direct Formatting for non first Table 
Cells
    
        Issue :
        - Direct Formatting for non-first Table cells was not getting preserved.
        - In issue file, a table with multiple cells have Line Sapcing = 1.5 
lines.
          But LO was importing only First Table cell with Line Spacing = 1.5 
lines
          whereas for remaining cells LO was applying Line Spacing = Single.
          LO was overriding value from styles.xml
        - Issue was due to at line : 
http://opengrok.libreoffice.org/xref/core/writerfilter/source/dmapper/DomainMapper.cxx#399
          here LO sets only a boolean value for all cells and
          here : 
http://opengrok.libreoffice.org/xref/core/writerfilter/source/dmapper/DomainMapperTableHandler.cxx#769
              we set DirectFormatting to False.
          So we have processed only one cell, hence for remaining cells Direct 
Formatting is not getting applied.
        - So in order to have Direct Formatting for multiple Table Cells, we 
need to preserve Direct Fomatting property
          for respective cells.
          And with present code structure it is not happening as there is only 
a bool variable we are considering.
    
        Implementation :
        - Saved Direct Formatting information in DomainMapper itself.
        - Hence when DomainMapperTableHandler::endTableGetCellProperties() gets 
called,
          Table cells already have correct value stored in it.
          We no more need to erase Default Formatting as Default formatting is 
not
          present instead it's actual values are now available.
            - This has conditionally reverted : 
https://gerrit.libreoffice.org/#/c/9560/
    
    Change-Id: Ie1c82069cd84e9662f33e734bda3ef69c5169e83
    Reviewed-on: https://gerrit.libreoffice.org/10216
    Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk>
    Tested-by: Miklos Vajna <vmik...@collabora.co.uk>

diff --git a/sw/qa/extras/ooxmlexport/data/fdo80800.docx 
b/sw/qa/extras/ooxmlexport/data/fdo80800.docx
new file mode 100644
index 0000000..64ed769
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo80800.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index eb81a06..2ef9160 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -3311,6 +3311,21 @@ DECLARE_OOXMLEXPORT_TEST(testfdo80898, "fdo80898.docx")
                 "/word/embeddings/oleObject1.doc");
 }
 
+DECLARE_OOXMLEXPORT_TEST(testTableCellWithDirectFormatting, "fdo80800.docx")
+{
+    // Issue was Direct Foramatting for non-first Table cells was not getting 
preserved.
+
+    xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+    if (!pXmlDoc)
+       return;
+
+    // Ensure that for Third Table cell Direct Formatting is preserved.
+    // In file, Direct Formatting used for Third Table cell is Line 
Spacing="1.5 lines"
+    // For Line Spacing "1.5 lines" w:line equals 360
+    
assertXPath(pXmlDoc,"/w:document/w:body/w:tbl/w:tr/w:tc[3]/w:p/w:pPr/w:spacing","line","360");
+
+}
+
 DECLARE_OOXMLEXPORT_TEST(test2colHeader, "2col-header.docx")
 {
     // Header was lost on export when the document had multiple columns.
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx 
b/writerfilter/source/dmapper/DomainMapper.cxx
index f007457..27bda6e 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -393,17 +393,20 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
             }
             if( nName == NS_ooxml::LN_CT_Spacing_line )
             {
-                if( m_pImpl->getTableManager().isInCell() )
-                {
-                    // direct formatting is applied for table cell data
-                    m_pImpl->SetIsTableHasDirectFormatting(true);
-                }
                 m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "line", 
OUString::number(nIntValue));
                 //now set the value depending on the Mode
                 if( aSpacing.Mode == style::LineSpacingMode::PROP )
                     aSpacing.Height = sal_Int16(sal_Int32(nIntValue) * 100 / 
SINGLE_LINE_SPACING );
                 else
                     aSpacing.Height = 
sal_Int16(ConversionHelper::convertTwipToMM100( nIntValue ));
+
+                if( m_pImpl->getTableManager().isInCell() )
+                {
+                    // direct formatting is applied for table cell data
+                    TablePropertyMapPtr pTblCellWithDirectFormatting(new 
TablePropertyMap);
+                    pTblCellWithDirectFormatting->insert(std::pair< 
PropertyIds, PropValue >(PROP_PARA_LINE_SPACING, uno::makeAny( aSpacing )));
+                    
m_pImpl->getTableManager().cellProps(pTblCellWithDirectFormatting);
+                }
             }
             else //NS_ooxml::LN_CT_Spacing_lineRule:
             {
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx 
b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index 8243bf6..28e413a 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -759,15 +759,6 @@ CellPropertyValuesSeq_t 
DomainMapperTableHandler::endTableGetCellProperties(Tabl
                 if ( aDefaultRepeatIt != pAllCellProps->end( ) )
                     pAllCellProps->erase( aDefaultRepeatIt );
 
-                if( m_rDMapper_Impl.GetIsTableHasDirectFormatting() )
-                {
-                    // Bug#78883 : direct formatting is applied for table cell 
data
-                    // so we can erase para line spacing property from 
style.xml
-                    aDefaultRepeatIt = 
pAllCellProps->find(PROP_PARA_LINE_SPACING);
-                    if ( aDefaultRepeatIt != pAllCellProps->end( ) )
-                        pAllCellProps->erase( aDefaultRepeatIt );
-                    m_rDMapper_Impl.SetIsTableHasDirectFormatting(false);
-                }
 
                 aDefaultRepeatIt = pAllCellProps->find(PROP_TBL_HEADER);
                 if ( aDefaultRepeatIt != pAllCellProps->end( ) )
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 9d17160..8279958 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -195,7 +195,6 @@ DomainMapper_Impl::DomainMapper_Impl(
         m_bSdt(false),
         m_bIsFirstRun(false),
         m_bIsOutsideAParagraph(true),
-        m_bIsTableHasDirectFormatting(false),
         m_xAnnotationField(),
         m_nAnnotationId( -1 ),
         m_aAnnotationPositions(),
@@ -445,12 +444,6 @@ void DomainMapper_Impl::SetSdt(bool bSdt)
 }
 
 
-void DomainMapper_Impl::SetIsTableHasDirectFormatting(bool 
bIsTableHasDirectFormatting)
-{
-    m_bIsTableHasDirectFormatting = bIsTableHasDirectFormatting;
-}
-
-
 
 void    DomainMapper_Impl::PushProperties(ContextType eId)
 {
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 39cc154..d59306a 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -399,7 +399,6 @@ private:
     bool                            m_bSdt;
     bool                            m_bIsFirstRun;
     bool                            m_bIsOutsideAParagraph;
-    bool                            m_bIsTableHasDirectFormatting;
 
     css::uno::Reference< css::text::XTextCursor > xTOCMarkerCursor;
     css::uno::Reference< css::text::XTextCursor > mxTOCTextCursor;
@@ -487,10 +486,6 @@ public:
     void SetSdt(bool bSdt);
     /// Getter method for m_bSdt.
     bool GetSdt() { return m_bSdt;}
-    /// Getter method for m_bIsTableHasDirectFormatting
-    bool GetIsTableHasDirectFormatting() { return 
m_bIsTableHasDirectFormatting;}
-    /// Setter method for m_bIsTableHasDirectFormatting
-    void SetIsTableHasDirectFormatting(bool bIsTableHasDirectFormatting);
     bool GetParaChanged() { return m_bParaChanged;}
 
     void deferBreak( BreakType deferredBreakType );
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to