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

Miklos Vajna vmiklos at kemper.freedesktop.org
Mon Aug 13 03:36:38 PDT 2012


 sw/qa/extras/rtfimport/data/fdo47495.rtf       |  164 +++++++++++++++++++++++++
 sw/qa/extras/rtfimport/rtfimport.cxx           |    9 +
 sw/qa/extras/swmodeltestbase.hxx               |   15 ++
 writerfilter/source/rtftok/rtfdocumentimpl.cxx |    5 
 4 files changed, 192 insertions(+), 1 deletion(-)

New commits:
commit ad72a47dbd16f65316432df71dffe3b9b835fcc7
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Mon Aug 13 12:23:05 2012 +0200

    fdo#47495 fix RTF import of multiple shapes inside textframes
    
    Change-Id: Iee8541ff9e88139648d45f08968476f2b1d4e1b3

diff --git a/sw/qa/extras/rtfimport/data/fdo47495.rtf b/sw/qa/extras/rtfimport/data/fdo47495.rtf
new file mode 100644
index 0000000..d7a7ca6
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/fdo47495.rtf
@@ -0,0 +1,164 @@
+{\rtf1\adeflang1025\ansi\ansicpg1251\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang1049\deflangfe1049\themelang1049\themelangfe0\themelangcs0
+\pard \ltrpar\qc \li0\ri0\nowidctlpar\pvpg\phpg\posx632\posy2159\absh-139\absw10653\wrapdefault\faauto\rin0\lin0\itap0 
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1024\langfe1024\noproof\insrsid2168934 
+{\shp
+{\*\shpinst\shpleft420\shptop16200\shpright11460\shpbottom16200\shpfhdr0\shpbxpage\shpbxignore\shpbypage\shpbyignore\shpwr3\shpwrk0\shpfblwtxt1\shpz0\shplid1026
+{\sp
+{\sn shapeType}
+{\sv 20}
+}
+{\sp
+{\sn fFlipH}
+{\sv 0}
+}
+{\sp
+{\sn fFlipV}
+{\sv 0}
+}
+{\sp
+{\sn lineWidth}
+{\sv 0}
+}
+{\sp
+{\sn fShadow}
+{\sv 0}
+}
+{\sp
+{\sn posrelh}
+{\sv 1}
+}
+{\sp
+{\sn posrelv}
+{\sv 1}
+}
+{\sp
+{\sn fLayoutInCell}
+{\sv 0}
+}
+{\sp
+{\sn fBehindDocument}
+{\sv 1}
+}
+{\sp
+{\sn fPseudoInline}
+{\sv 0}
+}
+{\sp
+{\sn fLayoutInCell}
+{\sv 0}
+}
+}
+{\shprslt
+{\*\do\dobxpage\dobypage\dodhgt0\dpline\dpptx0\dppty0\dpptx11040\dppty0\dpx420\dpy16200\dpxsize11040\dpysize0\dplinew0\dplinecor0\dplinecog0\dplinecob0}
+}
+}
+{\shp
+{\*\shpinst\shpleft476\shptop4742\shpright11298\shpbottom4952\shpfhdr0\shpbxpage\shpbxignore\shpbypage\shpbyignore\shpwr3\shpwrk0\shpfblwtxt1\shpz1\shplid1027
+{\sp
+{\sn shapeType}
+{\sv 1}
+}
+{\sp
+{\sn fFlipH}
+{\sv 0}
+}
+{\sp
+{\sn fFlipV}
+{\sv 0}
+}
+{\sp
+{\sn fFilled}
+{\sv 0}
+}
+{\sp
+{\sn lineWidth}
+{\sv 0}
+}
+{\sp
+{\sn fShadow}
+{\sv 0}
+}
+{\sp
+{\sn posrelh}
+{\sv 1}
+}
+{\sp
+{\sn posrelv}
+{\sv 1}
+}
+{\sp
+{\sn fLayoutInCell}
+{\sv 0}
+}
+{\sp
+{\sn fBehindDocument}
+{\sv 1}
+}
+{\sp
+{\sn fPseudoInline}
+{\sv 0}
+}
+{\sp
+{\sn fLayoutInCell}
+{\sv 0}
+}
+}
+{\shprslt
+{\*\do\dobxpage\dobypage\dodhgt1\dprect\dpx476\dpy4742\dpxsize10822\dpysize210
+\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinew0\dplinecor0\dplinecog0\dplinecob0}
+}
+}
+{\shp
+{\*\shpinst\shpleft8626\shptop4742\shpright8626\shpbottom4953\shpfhdr0\shpbxpage\shpbxignore\shpbypage\shpbyignore\shpwr3\shpwrk0\shpfblwtxt1\shpz2\shplid1028
+{\sp
+{\sn shapeType}
+{\sv 20}
+}
+{\sp
+{\sn fFlipH}
+{\sv 0}
+}
+{\sp
+{\sn fFlipV}
+{\sv 0}
+}
+{\sp
+{\sn lineWidth}
+{\sv 0}
+}
+{\sp
+{\sn fShadow}
+{\sv 0}
+}
+{\sp
+{\sn posrelh}
+{\sv 1}
+}
+{\sp
+{\sn posrelv}
+{\sv 1}
+}
+{\sp
+{\sn fLayoutInCell}
+{\sv 0}
+}
+{\sp
+{\sn fBehindDocument}
+{\sv 1}
+}
+{\sp
+{\sn fPseudoInline}
+{\sv 0}
+}
+{\sp
+{\sn fLayoutInCell}
+{\sv 0}
+}
+}
+{\shprslt
+{\*\do\dobxpage\dobypage\dodhgt2\dpline\dpptx0\dppty0\dpptx0\dppty211\dpx8626\dpy4742\dpxsize0\dpysize211\dplinew0\dplinecor0\dplinecog0\dplinecob0}
+}
+}
+}
+\pard \par
+}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 92d306c..e153f01 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -103,6 +103,7 @@ public:
     void testFdo36089();
     void testFdo49892();
     void testFdo48446();
+    void testFdo47495();
 
     CPPUNIT_TEST_SUITE(Test);
 #if !defined(MACOSX) && !defined(WNT)
@@ -148,6 +149,7 @@ public:
     CPPUNIT_TEST(testFdo36089);
     CPPUNIT_TEST(testFdo49892);
     CPPUNIT_TEST(testFdo48446);
+    CPPUNIT_TEST(testFdo47495);
 #endif
     CPPUNIT_TEST_SUITE_END();
 
@@ -896,6 +898,13 @@ void Test::testFdo48446()
     getParagraph(1, aExpected);
 }
 
+void Test::testFdo47495()
+{
+    load("fdo47495.rtf");
+    // Used to have 4 paragraphs, as a result the original bugdoc had 2 pages instead of 1.
+    CPPUNIT_ASSERT_EQUAL(2, getParagraphs());
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/qa/extras/swmodeltestbase.hxx b/sw/qa/extras/swmodeltestbase.hxx
index 9210fa8..11669fb 100644
--- a/sw/qa/extras/swmodeltestbase.hxx
+++ b/sw/qa/extras/swmodeltestbase.hxx
@@ -162,6 +162,21 @@ protected:
         return data;
     }
 
+    /// Get number of paragraphs of the document.
+    int getParagraphs()
+    {
+        uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+        uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY);
+        uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+        int nRet = 0;
+        while (xParaEnum->hasMoreElements())
+        {
+            xParaEnum->nextElement();
+            nRet++;
+        }
+        return nRet;
+    }
+
     // Get paragraph (counted from 1), optionally check it contains the given text.
     uno::Reference< text::XTextRange > getParagraph( int number, OUString content = OUString() ) const
     {
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 2d66ed3..f27050a 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -3621,6 +3621,8 @@ int RTFDocumentImpl::popState()
     {
         m_aStates.top().resetFrame();
         parBreak();
+        // Save this state for later use, so we only reset frame status only for the first shape inside a frame.
+        aState = m_aStates.top();
         m_bNeedPap = true;
     }
     break;
@@ -3863,7 +3865,8 @@ int RTFDocumentImpl::popState()
         m_aStates.top().aCharacterAttributes = aState.aCharacterAttributes;
     }
     else if (aState.nDestinationState == DESTINATION_FLYMAINCONTENT ||
-            aState.nDestinationState == DESTINATION_SHPPICT)
+            aState.nDestinationState == DESTINATION_SHPPICT ||
+            aState.nDestinationState == DESTINATION_SHAPE)
         m_aStates.top().aFrame = aState.aFrame;
     if (m_pCurrentBuffer == &m_aSuperBuffer)
     {


More information about the Libreoffice-commits mailing list