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

Jan Holesovsky kendy at collabora.com
Fri Feb 21 05:33:56 PST 2014


 writerfilter/source/dmapper/DomainMapper_Impl.cxx |   88 ++++++----------------
 writerfilter/source/dmapper/DomainMapper_Impl.hxx |    3 
 2 files changed, 28 insertions(+), 63 deletions(-)

New commits:
commit 07338e20663f9a52f819d0d0c93e8599406d1ff2
Author: Jan Holesovsky <kendy at collabora.com>
Date:   Fri Feb 21 13:56:18 2014 +0100

    Kill copy'n'paste.
    
    Change-Id: I3d457efc89873ca92a4458b1ac0a125848c942a8

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index a5f839c..b66b7f3 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1337,14 +1337,18 @@ uno::Reference< beans::XPropertySet > DomainMapper_Impl::appendTextSectionAfter(
     return xRet;
 }
 
-
-void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType)
+void DomainMapper_Impl::PushPageHeaderFooter(bool bHeader, SectionPropertyMap::PageType eType)
 {
+    const PropertyIds ePropIsOn = bHeader? PROP_HEADER_IS_ON: PROP_FOOTER_IS_ON;
+    const PropertyIds ePropShared = bHeader? PROP_HEADER_IS_SHARED: PROP_FOOTER_IS_SHARED;
+    const PropertyIds ePropTextLeft = bHeader? PROP_HEADER_TEXT_LEFT: PROP_FOOTER_TEXT_LEFT;
+    const PropertyIds ePropText = bHeader? PROP_HEADER_TEXT: PROP_FOOTER_TEXT;
+
     m_bInHeaderFooterImport = true;
 
     //get the section context
     PropertyMapPtr pContext = DomainMapper_Impl::GetTopContextOfType(CONTEXT_SECTION);
-    //ask for the header name of the given type
+    //ask for the header/footer name of the given type
     SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
     if(pSectionContext)
     {
@@ -1362,21 +1366,22 @@ void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType)
             {
                 PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
 
-                //switch on header use
+                //switch on header/footer use
                 xPageStyle->setPropertyValue(
-                        rPropNameSupplier.GetName(PROP_HEADER_IS_ON),
-                        uno::makeAny(sal_True) );
+                        rPropNameSupplier.GetName(ePropIsOn),
+                        uno::makeAny(sal_True));
 
                 // If the 'Different Even & Odd Pages' flag is turned on - do not ignore it
-                // Even if the 'Even' header is blank - the flag should be imported (so it would look in LO like in Word)
+                // Even if the 'Even' header/footer is blank - the flag should be imported (so it would look in LO like in Word)
                 if (GetSettingsTable()->GetEvenAndOddHeaders())
-                    xPageStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_HEADER_IS_SHARED), uno::makeAny( false ));
+                    xPageStyle->setPropertyValue(rPropNameSupplier.GetName(ePropShared), uno::makeAny(false));
 
                 //set the interface
-                uno::Reference< text::XText > xHeaderText;
-                xPageStyle->getPropertyValue(rPropNameSupplier.GetName( bLeft ? PROP_HEADER_TEXT_LEFT : PROP_HEADER_TEXT) ) >>= xHeaderText;
-                m_aTextAppendStack.push( TextAppendContext(uno::Reference< text::XTextAppend >( xHeaderText, uno::UNO_QUERY_THROW),
-                            m_bIsNewDoc ? uno::Reference<text::XTextCursor>() : m_xBodyText->createTextCursorByRange(xHeaderText->getStart())));
+                uno::Reference< text::XText > xText;
+                xPageStyle->getPropertyValue(rPropNameSupplier.GetName(bLeft? ePropTextLeft: ePropText)) >>= xText;
+
+                m_aTextAppendStack.push(TextAppendContext(uno::Reference< text::XTextAppend >(xText, uno::UNO_QUERY_THROW),
+                            m_bIsNewDoc? uno::Reference<text::XTextCursor>(): m_xBodyText->createTextCursorByRange(xText->getStart())));
             }
             else
             {
@@ -1389,59 +1394,16 @@ void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType)
     }
 }
 
+void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType)
+{
+    PushPageHeaderFooter(/* bHeader = */ true, eType);
+}
 
 void DomainMapper_Impl::PushPageFooter(SectionPropertyMap::PageType eType)
 {
-    m_bInHeaderFooterImport = true;
-
-    //get the section context
-    PropertyMapPtr pContext = DomainMapper_Impl::GetTopContextOfType(CONTEXT_SECTION);
-    //ask for the footer name of the given type
-    SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
-    if(pSectionContext)
-    {
-        uno::Reference< beans::XPropertySet > xPageStyle =
-                pSectionContext->GetPageStyle(
-                    GetPageStyles(),
-                    m_xTextFactory,
-                    eType == SectionPropertyMap::PAGE_FIRST );
-        if (!xPageStyle.is())
-            return;
-        try
-        {
-            bool bLeft = eType == SectionPropertyMap::PAGE_LEFT;
-            if ((!bLeft && !GetSettingsTable()->GetEvenAndOddHeaders()) || (GetSettingsTable()->GetEvenAndOddHeaders()))
-            {
-                PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
-
-                //switch on footer use
-                xPageStyle->setPropertyValue(
-                        rPropNameSupplier.GetName(PROP_FOOTER_IS_ON),
-                        uno::makeAny(sal_True) );
-
-                // If the 'Different Even & Odd Pages' flag is turned on - do not ignore it
-                // Even if the 'Even' footer is blank - the flag should be imported (so it would look in LO like in Word)
-                if (GetSettingsTable()->GetEvenAndOddHeaders())
-                    xPageStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_FOOTER_IS_SHARED), uno::makeAny( false ));
-
-                //set the interface
-                uno::Reference< text::XText > xFooterText;
-                xPageStyle->getPropertyValue(rPropNameSupplier.GetName( bLeft ? PROP_FOOTER_TEXT_LEFT : PROP_FOOTER_TEXT) ) >>= xFooterText;
-                m_aTextAppendStack.push(TextAppendContext(uno::Reference< text::XTextAppend >( xFooterText, uno::UNO_QUERY_THROW ),
-                            m_bIsNewDoc ? uno::Reference<text::XTextCursor>() : m_xBodyText->createTextCursorByRange(xFooterText->getStart())));
-            }
-            else
-            {
-                m_bDiscardHeaderFooter = true;
-            }
-        }
-        catch( const uno::Exception& )
-        {
-        }
-    }
+    PushPageHeaderFooter(/* bHeader = */ false, eType);
 }
 
-
 void DomainMapper_Impl::PopPageHeaderFooter()
 {
     //header and footer always have an empty paragraph at the end
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 18d768c..758dcaa 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -755,6 +755,9 @@ public:
     /// ST_PositivePercentage values we received
     std::queue<OUString> m_aPositivePercentages;
     bool isInIndexContext() { return m_bStartIndex;}
+
+private:
+    void PushPageHeaderFooter(bool bHeader, SectionPropertyMap::PageType eType);
 };
 } //namespace dmapper
 } //namespace writerfilter
commit fd859ee5802d6fa353526e632b49a8208444769e
Author: Jan Holesovsky <kendy at collabora.com>
Date:   Fri Feb 21 13:29:42 2014 +0100

    Related fdo#38054: Don't crash when opening this document.
    
    The document itself is (I think) corrupted, but we shouldn't crash anyway.
    
    Change-Id: I7ecfaed7003de2976e47992c89bb695a5cdffda4

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 70b7320..a5f839c 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1358,7 +1358,7 @@ void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType)
         try
         {
             bool bLeft = eType == SectionPropertyMap::PAGE_LEFT;
-            if ((!bLeft && !m_pSettingsTable->GetEvenAndOddHeaders()) || (m_pSettingsTable->GetEvenAndOddHeaders()))
+            if ((!bLeft && !GetSettingsTable()->GetEvenAndOddHeaders()) || (GetSettingsTable()->GetEvenAndOddHeaders()))
             {
                 PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
 
@@ -1369,7 +1369,7 @@ void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType)
 
                 // If the 'Different Even & Odd Pages' flag is turned on - do not ignore it
                 // Even if the 'Even' header is blank - the flag should be imported (so it would look in LO like in Word)
-                if( m_pSettingsTable->GetEvenAndOddHeaders() )
+                if (GetSettingsTable()->GetEvenAndOddHeaders())
                     xPageStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_HEADER_IS_SHARED), uno::makeAny( false ));
 
                 //set the interface
@@ -1410,7 +1410,7 @@ void DomainMapper_Impl::PushPageFooter(SectionPropertyMap::PageType eType)
         try
         {
             bool bLeft = eType == SectionPropertyMap::PAGE_LEFT;
-            if ((!bLeft && !m_pSettingsTable->GetEvenAndOddHeaders()) || (m_pSettingsTable->GetEvenAndOddHeaders()))
+            if ((!bLeft && !GetSettingsTable()->GetEvenAndOddHeaders()) || (GetSettingsTable()->GetEvenAndOddHeaders()))
             {
                 PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
 
@@ -1421,7 +1421,7 @@ void DomainMapper_Impl::PushPageFooter(SectionPropertyMap::PageType eType)
 
                 // If the 'Different Even & Odd Pages' flag is turned on - do not ignore it
                 // Even if the 'Even' footer is blank - the flag should be imported (so it would look in LO like in Word)
-                if( m_pSettingsTable->GetEvenAndOddHeaders() )
+                if (GetSettingsTable()->GetEvenAndOddHeaders())
                     xPageStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_FOOTER_IS_SHARED), uno::makeAny( false ));
 
                 //set the interface
@@ -4061,7 +4061,7 @@ void DomainMapper_Impl::ResetParaMarkerRedline( )
 
 void DomainMapper_Impl::ApplySettingsTable()
 {
-    if( m_pSettingsTable && m_xTextFactory.is() )
+    if (m_pSettingsTable && m_xTextFactory.is())
     {
         try
         {


More information about the Libreoffice-commits mailing list