[Libreoffice-commits] core.git: 2 commits - sw/qa sw/source
Miklos Vajna
vmiklos at collabora.co.uk
Wed Mar 19 06:16:37 PDT 2014
sw/qa/extras/ooxmlexport/data/FDO76248.docx |binary
sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 8 +
sw/source/filter/ww8/docxsdrexport.cxx | 159 ++++++++++++++--------------
3 files changed, 89 insertions(+), 78 deletions(-)
New commits:
commit 3e92847d75e8703d0537d5411d1f98bd1cd0402a
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed Mar 19 14:09:51 2014 +0100
fdo#76248 make the test fail without the fix
Change-Id: I26d27bfaafb83ee3ae74ce64bf72146b157ed7db
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 6a50def..ee6c511 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -2880,11 +2880,11 @@ DECLARE_OOXMLEXPORT_TEST(testSimpleSdts, "simple-sdts.docx")
DECLARE_OOXMLEXPORT_TEST(testFDO76248, "FDO76248.docx")
{
- uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
- uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(xModel->getCurrentController(), uno::UNO_QUERY);
- uno::Reference<text::XPageCursor> xCursor(xTextViewCursorSupplier->getViewCursor(), uno::UNO_QUERY);
- xCursor->jumpToLastPage();
- CPPUNIT_ASSERT_EQUAL(sal_Int16(3), xCursor->getPage());
+ xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+ if (!pXmlDoc)
+ return;
+ // In two cases the a:graphicData elements had no children, which is invalid.
+ assertXPath(pXmlDoc, "//a:graphicData[not(*)]", 0);
}
#endif
commit 79747314d368ab253e171877209d7172fd993c74
Author: Rohit Deshmukh <rohit.deshmukh at synerzip.com>
Date: Mon Mar 17 15:08:04 2014 +0530
fdo#76248: Fix for file corruption which contains Polyline shape.
Reviewed on:
https://gerrit.libreoffice.org/8623
Change-Id: I042eeb0829c55d6a0fd5d85c1712c7b1cddc8c96
diff --git a/sw/qa/extras/ooxmlexport/data/FDO76248.docx b/sw/qa/extras/ooxmlexport/data/FDO76248.docx
new file mode 100644
index 0000000..c7b868e
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FDO76248.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 0a77ab5..6a50def 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -2878,6 +2878,14 @@ DECLARE_OOXMLEXPORT_TEST(testSimpleSdts, "simple-sdts.docx")
}
+DECLARE_OOXMLEXPORT_TEST(testFDO76248, "FDO76248.docx")
+{
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(xModel->getCurrentController(), uno::UNO_QUERY);
+ uno::Reference<text::XPageCursor> xCursor(xTextViewCursorSupplier->getViewCursor(), uno::UNO_QUERY);
+ xCursor->jumpToLastPage();
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(3), xCursor->getPage());
+}
#endif
diff --git a/sw/source/filter/ww8/docxsdrexport.cxx b/sw/source/filter/ww8/docxsdrexport.cxx
index be0baa1..0e62973 100644
--- a/sw/source/filter/ww8/docxsdrexport.cxx
+++ b/sw/source/filter/ww8/docxsdrexport.cxx
@@ -536,95 +536,98 @@ void DocxSdrExport::writeVMLDrawing(const SdrObject* sdrObj, const SwFrmFmt& rFr
void DocxSdrExport::writeDMLDrawing(const SdrObject* pSdrObject, const SwFrmFmt* pFrmFmt, int nAnchorId)
{
- sax_fastparser::FSHelperPtr pFS = m_pImpl->m_pSerializer;
- Size aSize(pSdrObject->GetLogicRect().GetWidth(), pSdrObject->GetLogicRect().GetHeight());
- startDMLAnchorInline(pFrmFmt, aSize);
-
- sax_fastparser::FastAttributeList* pDocPrAttrList = pFS->createAttrList();
- pDocPrAttrList->add(XML_id, OString::number(nAnchorId).getStr());
- pDocPrAttrList->add(XML_name, OUStringToOString(pSdrObject->GetName(), RTL_TEXTENCODING_UTF8));
- if (!pSdrObject->GetTitle().isEmpty())
- pDocPrAttrList->add(XML_title, OUStringToOString(pSdrObject->GetTitle(), RTL_TEXTENCODING_UTF8));
- if (!pSdrObject->GetDescription().isEmpty())
- pDocPrAttrList->add(XML_descr, OUStringToOString(pSdrObject->GetDescription(), RTL_TEXTENCODING_UTF8));
- sax_fastparser::XFastAttributeListRef xDocPrAttrListRef(pDocPrAttrList);
- pFS->singleElementNS(XML_wp, XML_docPr, xDocPrAttrListRef);
-
uno::Reference<drawing::XShape> xShape(const_cast<SdrObject*>(pSdrObject)->getUnoShape(), uno::UNO_QUERY_THROW);
- uno::Reference<lang::XServiceInfo> xServiceInfo(xShape, uno::UNO_QUERY_THROW);
- uno::Reference< beans::XPropertySet > xPropertySet(xShape, uno::UNO_QUERY);
- uno::Reference< beans::XPropertySetInfo > xPropSetInfo;
- if (xPropertySet.is())
- xPropSetInfo = xPropertySet->getPropertySetInfo();
-
- bool bLockedCanvas = false;
- if (xPropSetInfo.is() && xPropSetInfo->hasPropertyByName("InteropGrabBag"))
+ if (m_pImpl->isSupportedDMLShape(xShape))
{
- uno::Sequence< beans::PropertyValue > propList;
- xPropertySet->getPropertyValue("InteropGrabBag") >>= propList;
- for (sal_Int32 nProp=0; nProp < propList.getLength(); ++nProp)
+ sax_fastparser::FSHelperPtr pFS = m_pImpl->m_pSerializer;
+ Size aSize(pSdrObject->GetLogicRect().GetWidth(), pSdrObject->GetLogicRect().GetHeight());
+ startDMLAnchorInline(pFrmFmt, aSize);
+
+ sax_fastparser::FastAttributeList* pDocPrAttrList = pFS->createAttrList();
+ pDocPrAttrList->add(XML_id, OString::number(nAnchorId).getStr());
+ pDocPrAttrList->add(XML_name, OUStringToOString(pSdrObject->GetName(), RTL_TEXTENCODING_UTF8));
+ if (!pSdrObject->GetTitle().isEmpty())
+ pDocPrAttrList->add(XML_title, OUStringToOString(pSdrObject->GetTitle(), RTL_TEXTENCODING_UTF8));
+ if (!pSdrObject->GetDescription().isEmpty())
+ pDocPrAttrList->add(XML_descr, OUStringToOString(pSdrObject->GetDescription(), RTL_TEXTENCODING_UTF8));
+ sax_fastparser::XFastAttributeListRef xDocPrAttrListRef(pDocPrAttrList);
+ pFS->singleElementNS(XML_wp, XML_docPr, xDocPrAttrListRef);
+
+ uno::Reference<lang::XServiceInfo> xServiceInfo(xShape, uno::UNO_QUERY_THROW);
+ uno::Reference< beans::XPropertySet > xPropertySet(xShape, uno::UNO_QUERY);
+ uno::Reference< beans::XPropertySetInfo > xPropSetInfo;
+ if (xPropertySet.is())
+ xPropSetInfo = xPropertySet->getPropertySetInfo();
+
+ bool bLockedCanvas = false;
+ if (xPropSetInfo.is() && xPropSetInfo->hasPropertyByName("InteropGrabBag"))
{
- OUString propName = propList[nProp].Name;
- if (propName == "LockedCanvas")
+ uno::Sequence< beans::PropertyValue > propList;
+ xPropertySet->getPropertyValue("InteropGrabBag") >>= propList;
+ for (sal_Int32 nProp=0; nProp < propList.getLength(); ++nProp)
{
- /*
- * Export as Locked Canvas only if the drawing
- * was originally a Locked Canvas and is now inside a Text Frame.
- */
+ OUString propName = propList[nProp].Name;
+ if (propName == "LockedCanvas")
+ {
+ /*
+ * Export as Locked Canvas only if the drawing
+ * was originally a Locked Canvas and is now inside a Text Frame.
+ */
- bLockedCanvas = m_pImpl->m_bIsInDMLTextFrame;
- break;
+ bLockedCanvas = m_pImpl->m_bIsInDMLTextFrame;
+ break;
+ }
}
}
- }
- const char* pNamespace = "http://schemas.microsoft.com/office/word/2010/wordprocessingShape";
- if (xServiceInfo->supportsService("com.sun.star.drawing.GroupShape"))
- pNamespace = "http://schemas.microsoft.com/office/word/2010/wordprocessingGroup";
- else if (xServiceInfo->supportsService("com.sun.star.drawing.GraphicObjectShape"))
- pNamespace = "http://schemas.openxmlformats.org/drawingml/2006/picture";
- pFS->startElementNS(XML_a, XML_graphic,
- FSNS(XML_xmlns, XML_a), "http://schemas.openxmlformats.org/drawingml/2006/main",
- FSEND);
- pFS->startElementNS(XML_a, XML_graphicData,
- XML_uri, pNamespace,
- FSEND);
-
- if (bLockedCanvas)
- pFS->startElementNS(XML_lc, XML_lockedCanvas,
- FSNS(XML_xmlns, XML_lc), "http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas",
+ const char* pNamespace = "http://schemas.microsoft.com/office/word/2010/wordprocessingShape";
+ if (xServiceInfo->supportsService("com.sun.star.drawing.GroupShape"))
+ pNamespace = "http://schemas.microsoft.com/office/word/2010/wordprocessingGroup";
+ else if (xServiceInfo->supportsService("com.sun.star.drawing.GraphicObjectShape"))
+ pNamespace = "http://schemas.openxmlformats.org/drawingml/2006/picture";
+ pFS->startElementNS(XML_a, XML_graphic,
+ FSNS(XML_xmlns, XML_a), "http://schemas.openxmlformats.org/drawingml/2006/main",
+ FSEND);
+ pFS->startElementNS(XML_a, XML_graphicData,
+ XML_uri, pNamespace,
FSEND);
- m_pImpl->m_rExport.OutputDML(xShape);
+ if (bLockedCanvas)
+ pFS->startElementNS(XML_lc, XML_lockedCanvas,
+ FSNS(XML_xmlns, XML_lc), "http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas",
+ FSEND);
- if (bLockedCanvas)
- pFS->endElementNS(XML_lc, XML_lockedCanvas);
- pFS->endElementNS(XML_a, XML_graphicData);
- pFS->endElementNS(XML_a, XML_graphic);
+ m_pImpl->m_rExport.OutputDML(xShape);
- // Relative size of the drawing.
- if (pSdrObject->GetRelativeWidth())
- {
- // At the moment drawinglayer objects are always relative from page.
- pFS->startElementNS(XML_wp14, XML_sizeRelH,
- XML_relativeFrom, (pSdrObject->GetRelativeWidthRelation() == text::RelOrientation::FRAME ? "margin" : "page"),
- FSEND);
- pFS->startElementNS(XML_wp14, XML_pctWidth, FSEND);
- pFS->writeEscaped(OUString::number(*pSdrObject->GetRelativeWidth() * 100 * oox::drawingml::PER_PERCENT));
- pFS->endElementNS(XML_wp14, XML_pctWidth);
- pFS->endElementNS(XML_wp14, XML_sizeRelH);
- }
- if (pSdrObject->GetRelativeHeight())
- {
- pFS->startElementNS(XML_wp14, XML_sizeRelV,
- XML_relativeFrom, (pSdrObject->GetRelativeHeightRelation() == text::RelOrientation::FRAME ? "margin" : "page"),
- FSEND);
- pFS->startElementNS(XML_wp14, XML_pctHeight, FSEND);
- pFS->writeEscaped(OUString::number(*pSdrObject->GetRelativeHeight() * 100 * oox::drawingml::PER_PERCENT));
- pFS->endElementNS(XML_wp14, XML_pctHeight);
- pFS->endElementNS(XML_wp14, XML_sizeRelV);
- }
+ if (bLockedCanvas)
+ pFS->endElementNS(XML_lc, XML_lockedCanvas);
+ pFS->endElementNS(XML_a, XML_graphicData);
+ pFS->endElementNS(XML_a, XML_graphic);
- endDMLAnchorInline(pFrmFmt);
+ // Relative size of the drawing.
+ if (pSdrObject->GetRelativeWidth())
+ {
+ // At the moment drawinglayer objects are always relative from page.
+ pFS->startElementNS(XML_wp14, XML_sizeRelH,
+ XML_relativeFrom, (pSdrObject->GetRelativeWidthRelation() == text::RelOrientation::FRAME ? "margin" : "page"),
+ FSEND);
+ pFS->startElementNS(XML_wp14, XML_pctWidth, FSEND);
+ pFS->writeEscaped(OUString::number(*pSdrObject->GetRelativeWidth() * 100 * oox::drawingml::PER_PERCENT));
+ pFS->endElementNS(XML_wp14, XML_pctWidth);
+ pFS->endElementNS(XML_wp14, XML_sizeRelH);
+ }
+ if (pSdrObject->GetRelativeHeight())
+ {
+ pFS->startElementNS(XML_wp14, XML_sizeRelV,
+ XML_relativeFrom, (pSdrObject->GetRelativeHeightRelation() == text::RelOrientation::FRAME ? "margin" : "page"),
+ FSEND);
+ pFS->startElementNS(XML_wp14, XML_pctHeight, FSEND);
+ pFS->writeEscaped(OUString::number(*pSdrObject->GetRelativeHeight() * 100 * oox::drawingml::PER_PERCENT));
+ pFS->endElementNS(XML_wp14, XML_pctHeight);
+ pFS->endElementNS(XML_wp14, XML_sizeRelV);
+ }
+
+ endDMLAnchorInline(pFrmFmt);
+ }
}
void DocxSdrExport::Impl::textFrameShadow(const SwFrmFmt& rFrmFmt)
@@ -669,7 +672,7 @@ bool DocxSdrExport::Impl::isSupportedDMLShape(uno::Reference<drawing::XShape> xS
bool supported = true;
uno::Reference<lang::XServiceInfo> xServiceInfo(xShape, uno::UNO_QUERY_THROW);
- if (xServiceInfo->supportsService("com.sun.star.drawing.PolyPolygonShape"))
+ if (xServiceInfo->supportsService("com.sun.star.drawing.PolyPolygonShape") || xServiceInfo->supportsService("com.sun.star.drawing.PolyLineShape"))
supported = false;
return supported;
More information about the Libreoffice-commits
mailing list