Kaydet (Commit) e04d21af authored tarafından Miklos Vajna's avatar Miklos Vajna

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
üst 37441c60
...@@ -1533,6 +1533,14 @@ DECLARE_OOXMLIMPORT_TEST(lineWpsOnly, "line-wps-only.docx") ...@@ -1533,6 +1533,14 @@ DECLARE_OOXMLIMPORT_TEST(lineWpsOnly, "line-wps-only.docx")
CPPUNIT_ASSERT_EQUAL(sal_Int32(210), xShape->getPosition().X); 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") DECLARE_OOXMLIMPORT_TEST(testFdo70457, "fdo70457.docx")
{ {
// The document contains a rotated bitmap // The document contains a rotated bitmap
......
...@@ -2197,6 +2197,12 @@ OOXMLFastContextHandlerShape::lcl_createFastChildContext ...@@ -2197,6 +2197,12 @@ OOXMLFastContextHandlerShape::lcl_createFastChildContext
break; 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; return xContextHandler;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment