sw/qa/extras/ooxmlexport/ooxmlexport8.cxx       |    4 ++
 writerfilter/source/dmapper/StyleSheetTable.cxx |   37 +++++-------------------
 2 files changed, 13 insertions(+), 28 deletions(-)

New commits:
commit ab16d43dd649b111e095a06f3b75ab77721830fe
Author: Justin Luth <justin_l...@sil.org>
Date:   Fri Jul 6 16:55:26 2018 +0300

    ~NFC related tdf#102619 writerfilter: use ConvertStyleName()
    
    This cleanup should help simplify and clarify immensely.
    
    An empty followStyle is treated the same as not
    defining it at all, and if a style specifies a follow, why
    not accept any style with that ID, regardless of whether
    a UI name was attached?
    HOWEVER, both this unit test and
    tdf104713_undefinedStyles.docx ignore the w:next
    IN MSO. I tested with 2013, 2010, and 2003 and they all
    revert back to w:next being the same style
    in these broken documents.
    
    Perhaps the existing test of whether sStyleName.isEmpty()
    is not the best test, but that is what it was, so keeping
    it until some proof document comes along.
    
    Change-Id: I28b1a5d67e6feea6b4d1ffdb77ec27bf6c824251
    Reviewed-on: https://gerrit.libreoffice.org/57075
    Tested-by: Jenkins
    Reviewed-by: Justin Luth <justin_l...@sil.org>

diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
index 4b3a9cf3b7d5..e958de434a81 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
@@ -558,6 +558,10 @@ DECLARE_OOXMLEXPORT_TEST(testN780853, "n780853.docx")
     uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, 
uno::UNO_QUERY);
     uno::Reference<container::XIndexAccess> 
xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
+
+    //tdf#102619 - I would have expected this to be "Standard", but MSO 
2013/2010/2003 all give FollowStyle==Date
+    uno::Reference< beans::XPropertySet > 
properties(getStyles("ParagraphStyles")->getByName("Date"), uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL(OUString("Date"), getProperty<OUString>(properties, 
"FollowStyle"));
 }
 
 DECLARE_OOXMLEXPORT_TEST(testN780843, "n780843.docx")
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx 
b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 14c2348fb0d5..263d74881ad5 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -1060,15 +1060,18 @@ void StyleSheetTable::ApplyStyleSheets( const 
FontTablePtr& rFontTable )
                     }
 
                     auto aPropValues = comphelper::sequenceToContainer< 
std::vector<beans::PropertyValue> >(pEntry->pProperties->GetPropertyValues());
-                    bool bAddFollowStyle = false;
-                    if(bParaStyle && !pEntry->sNextStyleIdentifier.isEmpty() )
-                    {
-                        bAddFollowStyle = true;
-                    }
 
                     // remove Left/RightMargin values from TOX heading styles
                     if( bParaStyle )
                     {
+                        // delay adding FollowStyle property: all styles need 
to be created first
+                        if ( !pEntry->sNextStyleIdentifier.isEmpty() )
+                        {
+                            StyleSheetEntryPtr pFollowStyle = 
FindStyleSheetByISTD( pEntry->sNextStyleIdentifier );
+                            if ( pFollowStyle && 
!pFollowStyle->sStyleName.isEmpty() )
+                                aMissingFollow.emplace_back( ConvertStyleName( 
pFollowStyle->sStyleName ), xStyle );
+                        }
+
                         // Set the outline levels
                         const StyleSheetPropertyMap* pStyleSheetProperties = 
dynamic_cast<const StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : 
nullptr);
                         if ( pStyleSheetProperties )
@@ -1113,7 +1116,7 @@ void StyleSheetTable::ApplyStyleSheets( const 
FontTablePtr& rFontTable )
                         }
                     }
 
-                    if(bAddFollowStyle || !aPropValues.empty())
+                    if ( !aPropValues.empty() )
                     {
                         PropValVector aSortedPropVals;
                         for (const beans::PropertyValue& rValue : aPropValues)
@@ -1126,28 +1129,6 @@ void StyleSheetTable::ApplyStyleSheets( const 
FontTablePtr& rFontTable )
                                 aSortedPropVals.Insert(rValue);
                             }
                         }
-                        if(bAddFollowStyle)
-                        {
-                            //find the name of the Next style
-                            std::vector< StyleSheetEntryPtr >::iterator it = 
m_pImpl->m_aStyleSheetEntries.begin();
-                            for (; it != m_pImpl->m_aStyleSheetEntries.end(); 
++it)
-                            {
-                                if (!(*it)->sStyleName.isEmpty() && 
(*it)->sStyleIdentifierD == pEntry->sNextStyleIdentifier)
-                                {
-                                    const OUString sFollowStyle = 
ConvertStyleName((*it)->sStyleName);
-                                    if ( !xStyles->hasByName( sFollowStyle ) )
-                                        aMissingFollow.emplace_back( 
sFollowStyle, xStyle );
-                                    else
-                                    {
-                                        beans::PropertyValue aNew;
-                                        aNew.Name = "FollowStyle";
-                                        aNew.Value <<= sFollowStyle;
-                                        aSortedPropVals.Insert(aNew);
-                                    }
-                                    break;
-                                }
-                            }
-                        }
 
                         try
                         {
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to