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

Justin Luth justin_luth at sil.org
Mon Dec 19 08:44:05 UTC 2016


 sw/qa/extras/ooxmlexport/data/tdf104713_undefinedStyles.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx                     |    7 +++++
 writerfilter/source/dmapper/StyleSheetTable.cxx              |   13 +++++++++--
 3 files changed, 18 insertions(+), 2 deletions(-)

New commits:
commit b8fa395288a1f3a24a4fca392afdf3a9b58373ea
Author: Justin Luth <justin_luth at sil.org>
Date:   Fri Dec 16 19:51:55 2016 +0300

    tdf#104713 writerfilter: parentless styles - only if default defined
    
    LibreOffice's default paragraph style is very different from Word's normal
    style? Anyway, if normal is not defined in styles.xml, then don't
    re-assign any other automatic styles to be based off of it, since that
    indicates that the style information being imported is not complete.
    
    avoids regression from commit b79b5e0df6dc5a0ba18054b0503d6fa804b69f02
    
    Change-Id: I1bfa8505d6b89b2bba255ad727ebadbacc8d3651
    Reviewed-on: https://gerrit.libreoffice.org/32103
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Justin Luth <justin_luth at sil.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/sw/qa/extras/ooxmlexport/data/tdf104713_undefinedStyles.docx b/sw/qa/extras/ooxmlexport/data/tdf104713_undefinedStyles.docx
new file mode 100644
index 0000000..5114a06
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104713_undefinedStyles.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index ef5857a..a767a6e 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -357,6 +357,13 @@ DECLARE_OOXMLEXPORT_TEST(testTdf53856_conflictingStyle, "tdf53856_conflictingSty
     CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xStyle, "CharPosture"));
 }
 
+DECLARE_OOXMLEXPORT_TEST(testTdf104713_undefinedStyles, "tdf104713_undefinedStyles.docx")
+{
+    // Normal paragraph style was not defined, so don't replace conflicting styles
+    uno::Reference<beans::XPropertySet> xStyle(getStyles("ParagraphStyles")->getByName("Heading 1"), uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(212), getProperty<sal_Int32>(xStyle, "ParaBottomMargin"));
+}
+
 DECLARE_OOXMLEXPORT_TEST(testDrawingmlFlipv, "drawingml-flipv.docx")
 {
     // The problem was that the shape had vertical flip only, but then we added rotation as well on export.
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index c9ef060..e2ee7b6 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -267,6 +267,7 @@ struct StyleSheetTable_Impl
     /// Style names which should not be used without a " (user)" suffix.
     std::set<OUString>                      m_aReservedStyleNames;
     ListCharStylePropertyVector_t           m_aListCharStylePropertyVector;
+    bool                                    m_bHasImportedDefaultParaStyle;
     bool                                    m_bIsNewDoc;
 
     StyleSheetTable_Impl(DomainMapper& rDMapper, uno::Reference< text::XTextDocument> const& xTextDocument, bool bIsNewDoc);
@@ -289,6 +290,7 @@ StyleSheetTable_Impl::StyleSheetTable_Impl(DomainMapper& rDMapper,
             m_pCurrentEntry(),
             m_pDefaultParaProps(new PropertyMap),
             m_pDefaultCharProps(new PropertyMap),
+            m_bHasImportedDefaultParaStyle(false),
             m_bIsNewDoc(bIsNewDoc)
 {
     //set font height default to 10pt
@@ -456,6 +458,9 @@ void StyleSheetTable::lcl_attribute(Id Name, Value & val)
         break;
         case NS_ooxml::LN_CT_Style_default:
             m_pImpl->m_pCurrentEntry->bIsDefaultStyle = (nIntValue != 0);
+            if (m_pImpl->m_pCurrentEntry->bIsDefaultStyle && m_pImpl->m_pCurrentEntry->nStyleTypeCode == STYLE_TYPE_PARA)
+                m_pImpl->m_bHasImportedDefaultParaStyle = true;
+
             if (m_pImpl->m_pCurrentEntry->nStyleTypeCode != STYLE_TYPE_UNKNOWN)
             {
                 beans::PropertyValue aValue;
@@ -946,9 +951,13 @@ void StyleSheetTable::ApplyStyleSheets( const FontTablePtr& rFontTable )
                         {
                             StyleSheetTable_Impl::SetPropertiesToDefault(xStyle);
 
-                            // resolve import conflicts with built-in styles
-                            if( pEntry->sBaseStyleIdentifier.isEmpty() && !xStyle->getParentStyle().isEmpty() )
+                            // resolve import conflicts with built-in styles (only if normal style has been defined)
+                            if( m_pImpl->m_bHasImportedDefaultParaStyle
+                                && pEntry->sBaseStyleIdentifier.isEmpty()
+                                && !xStyle->getParentStyle().isEmpty() )
+                            {
                                 xStyle->setParentStyle( "Standard" );
+                            }
                         }
                     }
                     else


More information about the Libreoffice-commits mailing list