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

Miklos Vajna vmiklos at collabora.co.uk
Tue Mar 29 21:29:19 UTC 2016


 sw/qa/extras/ooxmlimport/data/tdf98882.docx     |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx        |    8 ++
 writerfilter/source/dmapper/StyleSheetTable.cxx |   72 +++++++++++++++---------
 3 files changed, 53 insertions(+), 27 deletions(-)

New commits:
commit 226af96743f8ce5f00f34ee726a1218c2274e3a2
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Tue Mar 29 14:03:00 2016 +0200

    tdf#98882 DOCX import: set default para properties on the Standard para style
    
    That's what the DOC import does, and that's the reason e.g. the strange
    unwanted crop of the as-char anchored picture doesn't happen there.
    
    This also needs the "reset all existing style properties back to
    default" logic to be adapted: the Standard style has to be reset before
    the default are set, and later it should be left alone, otherwise the
    defaults are lost.
    
    Conflicts:
    	sw/qa/extras/ooxmlimport/ooxmlimport.cxx
    
    (cherry picked from commit eae2331f83bd58bacccd898d60f6c5f54856c036)
    
    Change-Id: Ie422a0b64b80a826fa4f469145a26283fb32d734
    Reviewed-on: https://gerrit.libreoffice.org/23597
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Andras Timar <andras.timar at collabora.com>

diff --git a/sw/qa/extras/ooxmlimport/data/tdf98882.docx b/sw/qa/extras/ooxmlimport/data/tdf98882.docx
new file mode 100644
index 0000000..53c1098
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf98882.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index fec79d3..a634825 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -3079,6 +3079,14 @@ DECLARE_OOXMLIMPORT_TEST(testTdf97371, "tdf97371.docx")
     CPPUNIT_ASSERT(nDiff < 10);
 }
 
+DECLARE_OOXMLIMPORT_TEST(testTdf98882, "tdf98882.docx")
+{
+    sal_Int32 nFlyHeight = parseDump("//fly/infos/bounds", "height").toInt32();
+    sal_Int32 nContentHeight = parseDump("//notxt/infos/bounds", "height").toInt32();
+    // The content height was 600, not 360, so the frame and the content height did not match.
+    CPPUNIT_ASSERT_EQUAL(nFlyHeight, nContentHeight);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 8389e8b..4476b89 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -298,6 +298,8 @@ struct StyleSheetTable_Impl
 
     /// Appends the given key-value pair to the list of latent style properties of the current entry.
     void AppendLatentStyleProperty(const OUString& aName, Value& rValue);
+    /// Sets all properties of xStyle back to default.
+    void SetPropertiesToDefault(const uno::Reference<style::XStyle>& xStyle);
 };
 
 
@@ -372,6 +374,35 @@ void StyleSheetTable_Impl::AppendLatentStyleProperty(const OUString& aName, Valu
     m_pCurrentEntry->aLatentStyles.push_back(aValue);
 }
 
+void StyleSheetTable_Impl::SetPropertiesToDefault(const uno::Reference<style::XStyle>& xStyle)
+{
+    // See if the existing style has any non-default properties. If so, reset them back to default.
+    uno::Reference<beans::XPropertySet> xPropertySet(xStyle, uno::UNO_QUERY);
+    uno::Reference<beans::XPropertySetInfo> xPropertySetInfo = xPropertySet->getPropertySetInfo();
+    uno::Sequence<beans::Property> aProperties = xPropertySetInfo->getProperties();
+    std::vector<OUString> aPropertyNames;
+    for (sal_Int32 i = 0; i < aProperties.getLength(); ++i)
+    {
+        aPropertyNames.push_back(aProperties[i].Name);
+    }
+
+    uno::Reference<beans::XPropertyState> xPropertyState(xStyle, uno::UNO_QUERY);
+    uno::Sequence<beans::PropertyState> aStates = xPropertyState->getPropertyStates(comphelper::containerToSequence(aPropertyNames));
+    for (sal_Int32 i = 0; i < aStates.getLength(); ++i)
+    {
+        if (aStates[i] == beans::PropertyState_DIRECT_VALUE)
+        {
+            try
+            {
+                xPropertyState->setPropertyToDefault(aPropertyNames[i]);
+            }
+            catch(const uno::Exception& rException)
+            {
+                SAL_INFO("writerfilter", "setPropertyToDefault(" << aPropertyNames[i] << ") failed: " << rException.Message);
+            }
+        }
+    }
+}
 
 StyleSheetTable::StyleSheetTable(DomainMapper& rDMapper,
         uno::Reference< text::XTextDocument> const& xTextDocument,
@@ -932,32 +963,9 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
                         }
                         xStyles->getByName( sConvertedStyleName ) >>= xStyle;
 
-                        // See if the existing style has any non-default properties. If so, reset them back to default.
-                        uno::Reference<beans::XPropertySet> xPropertySet(xStyle, uno::UNO_QUERY);
-                        uno::Reference<beans::XPropertySetInfo> xPropertySetInfo = xPropertySet->getPropertySetInfo();
-                        uno::Sequence<beans::Property> aProperties = xPropertySetInfo->getProperties();
-                        std::vector<OUString> aPropertyNames;
-                        for (sal_Int32 i = 0; i < aProperties.getLength(); ++i)
-                        {
-                            aPropertyNames.push_back(aProperties[i].Name);
-                        }
-
-                        uno::Reference<beans::XPropertyState> xPropertyState(xStyle, uno::UNO_QUERY);
-                        uno::Sequence<beans::PropertyState> aStates = xPropertyState->getPropertyStates(comphelper::containerToSequence(aPropertyNames));
-                        for (sal_Int32 i = 0; i < aStates.getLength(); ++i)
-                        {
-                            if (aStates[i] == beans::PropertyState_DIRECT_VALUE)
-                            {
-                                try
-                                {
-                                    xPropertyState->setPropertyToDefault(aPropertyNames[i]);
-                                }
-                                catch(const uno::Exception& rException)
-                                {
-                                    SAL_INFO("writerfilter", "setPropertyToDefault(" << aPropertyNames[i] << ") failed: " << rException.Message);
-                                }
-                            }
-                        }
+                        // Standard is handled already in applyDefaults().
+                        if (sConvertedStyleName != "Standard")
+                            m_pImpl->SetPropertiesToDefault(xStyle);
                     }
                     else
                     {
@@ -1485,12 +1493,22 @@ void StyleSheetTable::applyDefaults(bool bParaProperties)
         }
         if( bParaProperties && m_pImpl->m_pDefaultParaProps.get())
         {
+            uno::Reference<style::XStyleFamiliesSupplier> xStylesSupplier(m_pImpl->m_xTextDocument, uno::UNO_QUERY);
+            uno::Reference<container::XNameAccess> xStyleFamilies = xStylesSupplier->getStyleFamilies();
+            uno::Reference<container::XNameAccess> xParagraphStyles;
+            xStyleFamilies->getByName("ParagraphStyles") >>= xParagraphStyles;
+            uno::Reference<beans::XPropertySet> xStandard;
+            xParagraphStyles->getByName("Standard") >>= xStandard;
+
+            uno::Reference<style::XStyle> xStyle(xStandard, uno::UNO_QUERY);
+            m_pImpl->SetPropertiesToDefault(xStyle);
+
             uno::Sequence< beans::PropertyValue > aPropValues = m_pImpl->m_pDefaultParaProps->GetPropertyValues();
             for( sal_Int32 i = 0; i < aPropValues.getLength(); ++i )
             {
                 try
                 {
-                    m_pImpl->m_xTextDefaults->setPropertyValue( aPropValues[i].Name, aPropValues[i].Value );
+                    xStandard->setPropertyValue(aPropValues[i].Name, aPropValues[i].Value);
                 }
                 catch( const uno::Exception& )
                 {


More information about the Libreoffice-commits mailing list