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

Adam Co rattles2013 at gmail.com
Wed Jul 31 09:19:41 PDT 2013


 sw/qa/extras/ooxmlexport/data/fdo67013.docx  |binary
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx     |   53 ++++++++++++++++++++++-----
 sw/source/filter/ww8/docxattributeoutput.cxx |    3 +
 sw/source/filter/ww8/docxattributeoutput.hxx |    6 +++
 sw/source/filter/ww8/docxexport.cxx          |    6 +++
 5 files changed, 59 insertions(+), 9 deletions(-)

New commits:
commit a4b4bde0a28b06f150ec80a65e322491a547f803
Author: Adam Co <rattles2013 at gmail.com>
Date:   Mon Jul 29 19:37:33 2013 +0300

    fdo#67013 : fix for borders in headers and footers
    
    Change-Id: I45d71348a64b8e79c34e24829cceadedd0d8f6a9
    Reviewed-on: https://gerrit.libreoffice.org/5170
    Reviewed-by: Fridrich Strba <fridrich at documentfoundation.org>
    Tested-by: Fridrich Strba <fridrich at documentfoundation.org>

diff --git a/sw/qa/extras/ooxmlexport/data/fdo67013.docx b/sw/qa/extras/ooxmlexport/data/fdo67013.docx
new file mode 100644
index 0000000..5512550
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo67013.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index f4932ff..0b4003e 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -105,6 +105,7 @@ public:
     void testFdo60990();
     void testFdo65718();
     void testFdo64350();
+    void testFdo67013();
 
     CPPUNIT_TEST_SUITE(Test);
 #if !defined(MACOSX) && !defined(WNT)
@@ -186,6 +187,7 @@ void Test::run()
         {"fdo60990.odt", &Test::testFdo60990},
         {"fdo65718.docx", &Test::testFdo65718},
         {"fdo64350.docx", &Test::testFdo64350},
+        {"fdo67013.docx", &Test::testFdo67013},
     };
     // Don't test the first import of these, for some reason those tests fail
     const char* aBlacklist[] = {
@@ -998,14 +1000,12 @@ void Test::testFdo66929()
 
 void Test::testPageBorderSpacingExportCase2()
 {
-    /*
-     * The problem was that the exporter didn't mirror the workaround of the
-     * importer, regarding the page border's spacing : the <w:pgBorders w:offsetFrom="page">
-     * and the inner nodes like <w:top w:space="24" .... />
-     *
-     * The exporter ALWAYS exported 'w:offsetFrom="text"' even when the spacing values where too large
-     * for Word to handle (larger than 31 points)
-     */
+     // The problem was that the exporter didn't mirror the workaround of the
+     // importer, regarding the page border's spacing : the <w:pgBorders w:offsetFrom="page">
+     // and the inner nodes like <w:top w:space="24" .... />
+     //
+     // The exporter ALWAYS exported 'w:offsetFrom="text"' even when the spacing values where too large
+     // for Word to handle (larger than 31 points)
 
     xmlDocPtr pXmlDoc = parseExport();
 
@@ -1097,6 +1097,43 @@ void Test::testFdo64350()
     CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location);
 }
 
+void Test::testFdo67013()
+{
+    /*
+     * The problem was that borders inside headers \ footers were not exported
+     * This was checked in xray using these commands:
+     *
+     * xHeaderText = ThisComponent.getStyleFamilies().getByName("PageStyles").getByName("Standard").HeaderText
+     * xHeaderEnum = xHeaderText.createEnumeration()
+     * xHeaderFirstParagraph = xHeaderEnum.nextElement()
+     * xHeaderBottomBorder = xHeaderFirstParagraph.BottomBorder
+     *
+     * xFooterText = ThisComponent.getStyleFamilies().getByName("PageStyles").getByName("Standard").FooterText
+     * xFooterEnum = xFooterText.createEnumeration()
+     * xFooterFirstParagraph = xFooterEnum.nextElement()
+     * xFooterTopBorder = xFooterFirstParagraph.TopBorder
+     */
+    uno::Reference<text::XText> xHeaderText = getProperty< uno::Reference<text::XText> >(getStyles("PageStyles")->getByName(DEFAULT_STYLE), "HeaderText");
+    uno::Reference< text::XTextRange > xHeaderParagraph = getParagraphOfText( 1, xHeaderText );
+    table::BorderLine2 aHeaderBottomBorder = getProperty<table::BorderLine2>(xHeaderParagraph, "BottomBorder");
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(0x622423), aHeaderBottomBorder.Color);
+    CPPUNIT_ASSERT_EQUAL(sal_Int16(106), aHeaderBottomBorder.InnerLineWidth);
+    CPPUNIT_ASSERT_EQUAL(sal_Int16(26), aHeaderBottomBorder.LineDistance);
+    CPPUNIT_ASSERT_EQUAL(sal_Int16(7), aHeaderBottomBorder.LineStyle);
+    CPPUNIT_ASSERT_EQUAL(sal_uInt32(159), aHeaderBottomBorder.LineWidth);
+    CPPUNIT_ASSERT_EQUAL(sal_Int16(26), aHeaderBottomBorder.OuterLineWidth);
+
+    uno::Reference<text::XText> xFooterText = getProperty< uno::Reference<text::XText> >(getStyles("PageStyles")->getByName(DEFAULT_STYLE), "FooterText");
+    uno::Reference< text::XTextRange > xFooterParagraph = getParagraphOfText( 1, xFooterText );
+    table::BorderLine2 aFooterTopBorder = getProperty<table::BorderLine2>(xFooterParagraph, "TopBorder");
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(0x622423), aFooterTopBorder.Color);
+    CPPUNIT_ASSERT_EQUAL(sal_Int16(26), aFooterTopBorder.InnerLineWidth);
+    CPPUNIT_ASSERT_EQUAL(sal_Int16(26), aFooterTopBorder.LineDistance);
+    CPPUNIT_ASSERT_EQUAL(sal_Int16(4), aFooterTopBorder.LineStyle);
+    CPPUNIT_ASSERT_EQUAL(sal_uInt32(159), aFooterTopBorder.LineWidth);
+    CPPUNIT_ASSERT_EQUAL(sal_Int16(106), aFooterTopBorder.OuterLineWidth);
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 820d06c..55de9c9 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -5126,7 +5126,7 @@ void DocxAttributeOutput::FormatBox( const SvxBoxItem& rBox )
 
     OutputBorderOptions aOutputBorderOptions = lcl_getBoxBorderOptions();
 
-    if ( m_bOpenedSectPr )
+    if ( m_bOpenedSectPr && GetWritingHeaderFooter() == false)
     {
         // Inside a section
 
@@ -5330,6 +5330,7 @@ DocxAttributeOutput::DocxAttributeOutput( DocxExport &rExport, FSHelperPtr pSeri
       m_pRedlineData( NULL ),
       m_nRedlineId( 0 ),
       m_bOpenedSectPr( false ),
+      m_bWritingHeaderFooter( false ),
       m_sFieldBkm( ),
       m_nNextMarkId( 0 ),
       m_bPostitStart(false),
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx
index 02aeb45..e02eaae 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -629,6 +629,9 @@ private:
     /// Flag indicating that the section properties are being written
     bool m_bOpenedSectPr;
 
+    /// Flag indicating that the header \ footer are being written
+    bool m_bWritingHeaderFooter;
+
     /// Field data to remember in the text run
     std::vector< FieldInfos > m_Fields;
     String m_sFieldBkm;
@@ -734,6 +737,9 @@ public:
     virtual oox::drawingml::DrawingML& GetDrawingML();
 
     void BulletDefinition(int nId, const Graphic& rGraphic, Size aSize) SAL_OVERRIDE;
+
+    void SetWritingHeaderFooter( bool bWritingHeaderFooter )    {   m_bWritingHeaderFooter = bWritingHeaderFooter;   }
+    bool GetWritingHeaderFooter( )  {   return m_bWritingHeaderFooter;  }
 };
 
 #endif // _DOCXATTRIBUTEOUTPUT_HXX_
diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx
index 99c6460..24c573b 100644
--- a/sw/source/filter/ww8/docxexport.cxx
+++ b/sw/source/filter/ww8/docxexport.cxx
@@ -195,6 +195,9 @@ bool DocxExport::DisallowInheritingOutlineNumbering( const SwFmt& rFmt )
 void DocxExport::WriteHeadersFooters( sal_uInt8 nHeadFootFlags,
         const SwFrmFmt& rFmt, const SwFrmFmt& rLeftFmt, const SwFrmFmt& rFirstPageFmt, sal_uInt8 /*nBreakCode*/ )
 {
+    // Turn ON flag for 'Writing Headers \ Footers'
+    m_pAttrOutput->SetWritingHeaderFooter( true );
+
     // headers
     if ( nHeadFootFlags & nsHdFtFlags::WW8_HEADER_EVEN )
         WriteHeaderFooter( rLeftFmt, true, "even" );
@@ -218,6 +221,9 @@ void DocxExport::WriteHeadersFooters( sal_uInt8 nHeadFootFlags,
     if ( nHeadFootFlags & ( nsHdFtFlags::WW8_FOOTER_EVEN | nsHdFtFlags::WW8_HEADER_EVEN ))
         settings.evenAndOddHeaders = true;
 
+    // Turn OFF flag for 'Writing Headers \ Footers'
+    m_pAttrOutput->SetWritingHeaderFooter( false );
+
 #if OSL_DEBUG_LEVEL > 1
     fprintf( stderr, "DocxExport::WriteHeadersFooters() - nBreakCode introduced, but ignored\n" );
 #endif


More information about the Libreoffice-commits mailing list