[Libreoffice-commits] .: 3 commits - sw/qa sw/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Jan 22 00:35:56 PST 2013


 sw/qa/extras/ooxmlexport/data/textframes.odt |binary
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx     |   10 +++
 sw/source/filter/ww8/docxattributeoutput.cxx |   68 ++++++++++++++++++++++-----
 sw/source/filter/ww8/docxattributeoutput.hxx |    2 
 4 files changed, 68 insertions(+), 12 deletions(-)

New commits:
commit 4a787e2078ca1a19e065cb356fc80f421213ad87
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Tue Jan 22 09:36:00 2013 +0100

    sw: DOCX export of TextFrames testcase
    
    Change-Id: Ie46a2627d247fb293606c6deab3254113b741336

diff --git a/sw/qa/extras/ooxmlexport/data/textframes.odt b/sw/qa/extras/ooxmlexport/data/textframes.odt
new file mode 100644
index 0000000..301744a
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/textframes.odt differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index a6a7783..c1fd412 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -68,6 +68,7 @@ public:
     void testFdo51550();
     void testN789482();
     void test1Table1Page();
+    void testTextFrames();
 
     CPPUNIT_TEST_SUITE(Test);
 #if !defined(MACOSX) && !defined(WNT)
@@ -107,6 +108,7 @@ void Test::run()
         {"fdo51550.odt", &Test::testFdo51550},
         {"n789482.docx", &Test::testN789482},
 //      {"1-table-1-page.docx", &Test::test1Table1Page}, // doesn't work on openSUSE12.2 at least
+        {"textframes.odt", &Test::testTextFrames},
     };
     // Don't test the first import of these, for some reason those tests fail
     const char* aBlacklist[] = {
@@ -509,6 +511,14 @@ void Test::test1Table1Page()
     CPPUNIT_ASSERT_EQUAL(sal_Int16(1), xCursor->getPage());
 }
 
+void Test::testTextFrames()
+{
+    // The frames were simply missing, so let's check if all 3 frames were imported back.
+    uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xIndexAccess->getCount());
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
commit a2bee4547a4997759e41aed8de0f2af95460a732
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Mon Jan 21 16:47:34 2013 +0100

    sw: DOCX export of TextFrame size/position
    
    Change-Id: Ie830fe9f7276fbc8f20e7d37424116d6653a6931

diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index ca11d99..416063a 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -272,9 +272,14 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT
 
         m_rExport.mpParentFrame = pParentFrame;
 
+        m_bTextFrameSyntax = true;
+        m_aTextFrameStyle = "position:absolute";
+        m_rExport.OutputFormat( pParentFrame->GetFrmFmt(), false, false, true );
+        m_bTextFrameSyntax = false;
+
         m_pSerializer->startElementNS( XML_w, XML_r, FSEND );
         m_pSerializer->startElementNS( XML_w, XML_pict, FSEND );
-        m_pSerializer->startElementNS( XML_v, XML_rect, FSEND );
+        m_pSerializer->startElementNS( XML_v, XML_rect, XML_style, m_aTextFrameStyle.makeStringAndClear(), FSEND );
         m_pSerializer->startElementNS( XML_v, XML_textbox, FSEND );
         m_pSerializer->startElementNS( XML_w, XML_txbxContent, FSEND );
         m_rExport.WriteText( );
@@ -4168,7 +4173,12 @@ void DocxAttributeOutput::ParaSnapToGrid( const SvxParaGridItem& rGrid )
 
 void DocxAttributeOutput::FormatFrameSize( const SwFmtFrmSize& rSize )
 {
-    if ( m_rExport.bOutFlyFrmAttrs )
+    if (m_bTextFrameSyntax)
+    {
+        m_aTextFrameStyle.append(";width:").append(double(rSize.GetWidth()) / 20);
+        m_aTextFrameStyle.append("pt;height:").append(double(rSize.GetHeight()) / 20).append("pt");
+    }
+    else if ( m_rExport.bOutFlyFrmAttrs )
     {
         if ( !m_pFlyAttrList )
             m_pFlyAttrList = m_pSerializer->createAttrList( );
@@ -4212,7 +4222,10 @@ void DocxAttributeOutput::FormatLRSpace( const SvxLRSpaceItem& rLRSpace )
 {
     bool bEcma = m_rExport.GetFilter().getVersion( ) == oox::core::ECMA_DIALECT;
 
-    if ( m_rExport.bOutFlyFrmAttrs )
+    if (m_bTextFrameSyntax)
+    {
+    }
+    else if ( m_rExport.bOutFlyFrmAttrs )
     {
         if ( !m_pFlyAttrList )
             m_pFlyAttrList = m_pSerializer->createAttrList();
@@ -4260,7 +4273,10 @@ void DocxAttributeOutput::FormatLRSpace( const SvxLRSpaceItem& rLRSpace )
 void DocxAttributeOutput::FormatULSpace( const SvxULSpaceItem& rULSpace )
 {
 
-    if ( m_rExport.bOutFlyFrmAttrs )
+    if (m_bTextFrameSyntax)
+    {
+    }
+    else if ( m_rExport.bOutFlyFrmAttrs )
     {
         if ( !m_pFlyAttrList )
             m_pFlyAttrList = m_pSerializer->createAttrList();
@@ -4320,7 +4336,10 @@ void DocxAttributeOutput::FormatULSpace( const SvxULSpaceItem& rULSpace )
 
 void DocxAttributeOutput::FormatSurround( const SwFmtSurround& rSurround )
 {
-    if ( m_rExport.bOutFlyFrmAttrs )
+    if (m_bTextFrameSyntax)
+    {
+    }
+    else if ( m_rExport.bOutFlyFrmAttrs )
     {
         if ( !m_pFlyAttrList )
             m_pFlyAttrList = m_pSerializer->createAttrList();
@@ -4348,7 +4367,11 @@ void DocxAttributeOutput::FormatSurround( const SwFmtSurround& rSurround )
 
 void DocxAttributeOutput::FormatVertOrientation( const SwFmtVertOrient& rFlyVert )
 {
-    if ( m_rExport.bOutFlyFrmAttrs )
+    if (m_bTextFrameSyntax)
+    {
+        m_aTextFrameStyle.append(";margin-top:").append(double(rFlyVert.GetPos()) / 20).append("pt");
+    }
+    else if ( m_rExport.bOutFlyFrmAttrs )
     {
         if ( !m_pFlyAttrList )
             m_pFlyAttrList = m_pSerializer->createAttrList();
@@ -4406,7 +4429,11 @@ void DocxAttributeOutput::FormatVertOrientation( const SwFmtVertOrient& rFlyVert
 
 void DocxAttributeOutput::FormatHorizOrientation( const SwFmtHoriOrient& rFlyHori )
 {
-    if ( m_rExport.bOutFlyFrmAttrs )
+    if (m_bTextFrameSyntax)
+    {
+        m_aTextFrameStyle.append(";margin-left:").append(double(rFlyHori.GetPos()) / 20).append("pt");
+    }
+    else if ( m_rExport.bOutFlyFrmAttrs )
     {
         if ( !m_pFlyAttrList )
             m_pFlyAttrList = m_pSerializer->createAttrList();
@@ -4478,6 +4505,8 @@ void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush )
 
 void DocxAttributeOutput::FormatBox( const SvxBoxItem& rBox )
 {
+    if (m_bTextFrameSyntax)
+        return;
 
     if ( !m_bOpenedSectPr )
     {
@@ -4663,6 +4692,7 @@ DocxAttributeOutput::DocxAttributeOutput( DocxExport &rExport, FSHelperPtr pSeri
       m_bParagraphOpened( false ),
       m_nColBreakStatus( COLBRK_NONE ),
       m_pParentFrame( NULL ),
+      m_bTextFrameSyntax( false ),
       m_closeHyperlinkInThisRun( false ),
       m_closeHyperlinkInPreviousRun( false ),
       m_startedHyperlink( false ),
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx
index f42ffdf..26b43ac 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -601,6 +601,8 @@ private:
     DocxColBreakStatus m_nColBreakStatus;
 
     sw::Frame *m_pParentFrame;
+    bool m_bTextFrameSyntax;
+    OStringBuffer m_aTextFrameStyle;
     // close of hyperlink needed
     bool m_closeHyperlinkInThisRun;
     bool m_closeHyperlinkInPreviousRun;
commit 736c25a9d372dd1761d3352240164c969fd3ed1d
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Mon Jan 21 12:48:19 2013 +0100

    sw: initial DOCX export of TextFrames as VML rectangles
    
    Change-Id: I0b204e9a81aad3e4f5fafc17bbd0c3935eb5cdb5

diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index ae4770a..ca11d99 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -255,12 +255,6 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT
 {
     // write the paragraph properties + the run, already in the correct order
     m_pSerializer->mergeTopMarks();
-    m_pSerializer->endElementNS( XML_w, XML_p );
-
-    // Check for end of cell, rows, tables here
-    FinishTableRowCell( pTextNodeInfoInner );
-
-    m_bParagraphOpened = false;
 
     // Write the anchored frame if any
     if ( m_pParentFrame )
@@ -278,12 +272,32 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT
 
         m_rExport.mpParentFrame = pParentFrame;
 
+        m_pSerializer->startElementNS( XML_w, XML_r, FSEND );
+        m_pSerializer->startElementNS( XML_w, XML_pict, FSEND );
+        m_pSerializer->startElementNS( XML_v, XML_rect, FSEND );
+        m_pSerializer->startElementNS( XML_v, XML_textbox, FSEND );
+        m_pSerializer->startElementNS( XML_w, XML_txbxContent, FSEND );
         m_rExport.WriteText( );
+        m_pSerializer->endElementNS( XML_w, XML_txbxContent );
+        m_pSerializer->endElementNS( XML_v, XML_textbox );
+        m_pSerializer->endElementNS( XML_v, XML_rect );
+        m_pSerializer->endElementNS( XML_w, XML_pict );
+        m_pSerializer->endElementNS( XML_w, XML_r );
 
         m_rExport.RestoreData();
 
+        m_rExport.mpParentFrame = NULL;
+
         delete pParentFrame;
     }
+
+    m_pSerializer->endElementNS( XML_w, XML_p );
+
+    // Check for end of cell, rows, tables here
+    FinishTableRowCell( pTextNodeInfoInner );
+
+    m_bParagraphOpened = false;
+
 }
 
 void DocxAttributeOutput::FinishTableRowCell( ww8::WW8TableNodeInfoInner::Pointer_t pInner, bool bForceEmptyParagraph )


More information about the Libreoffice-commits mailing list