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

Miklos Vajna vmiklos at collabora.co.uk
Fri Nov 22 06:30:17 PST 2013


 sw/qa/extras/ooxmlimport/data/textbox-wps-only.docx   |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx              |    8 ++++++++
 writerfilter/source/ooxml/OOXMLFastContextHandler.cxx |    6 ++++++
 3 files changed, 14 insertions(+)

New commits:
commit e04d21afee4a286d63f836e7375d573dd4b7f73a
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Fri Nov 22 13:01:53 2013 +0100

    DOCX drawingML shape filter: import wps:txbx inside the shape
    
    The problem was that previously the shape text was imported normally, and the
    shape itself was simply appended after the text.
    
    In case of the VML import, the following mechanism made it possible to have the
    shape earlier: OOXMLFastContextHandlerShape::sendShape() is called twice, early
    in OOXMLFastContextHandlerWrapper::lcl_createFastChildContext(), in case the
    shape had text, and later in
    OOXMLFastContextHandlerShape::lcl_endFastElement(), in case the shape didn't
    have text. This works because the parent element of v:textbox (v:shape) is
    already something that isn't handled in writerfilter, so the parent of the
    w:txbxContent's parent was a OOXMLFastContextHandlerWrapper.
    
    In case of WPS, the problem was that the parent of w:txbxContent is wps:txbx,
    and the parent of that is wps:wsp, which is something (unlike v:shape) we do
    handle in writerfilter. Fix this by adding an early call to sendShape() in
    OOXMLFastContextHandlerShape::lcl_createFastChildContext() as well.
    
    Change-Id: Ia24678871d7bbad89d18b1d5f468c17f68feec10

diff --git a/sw/qa/extras/ooxmlimport/data/textbox-wps-only.docx b/sw/qa/extras/ooxmlimport/data/textbox-wps-only.docx
new file mode 100755
index 0000000..897dcbc
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/textbox-wps-only.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 9095610..ea6f8e6 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -1533,6 +1533,14 @@ DECLARE_OOXMLIMPORT_TEST(lineWpsOnly, "line-wps-only.docx")
     CPPUNIT_ASSERT_EQUAL(sal_Int32(210), xShape->getPosition().X);
 }
 
+DECLARE_OOXMLIMPORT_TEST(textboxWpsOnly, "textbox-wps-only.docx")
+{
+    uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY);
+    uno::Reference<text::XTextRange> xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL(OUString("Hello world!"), xFrame->getString());
+}
+
 DECLARE_OOXMLIMPORT_TEST(testFdo70457, "fdo70457.docx")
 {
     // The document contains a rotated bitmap
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
index 2b9be07..35a6326 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -2197,6 +2197,12 @@ OOXMLFastContextHandlerShape::lcl_createFastChildContext
             break;
     }
 
+    // VML import of shape text is already handled by
+    // OOXMLFastContextHandlerWrapper::lcl_createFastChildContext(), here we
+    // handle the WPS import of shape text, as there the parent context is a
+    // Shape one, so a different situation.
+    if (Element == static_cast<sal_Int32>(NS_wps | OOXML_txbx))
+        sendShape(Element);
 
     return xContextHandler;
 }


More information about the Libreoffice-commits mailing list