[Libreoffice-commits] core.git: sw/qa writerfilter/source
László Németh (via logerrit)
logerrit at kemper.freedesktop.org
Mon Mar 16 21:24:10 UTC 2020
sw/qa/extras/ooxmlexport/data/tdf128646.docx |binary
sw/qa/extras/ooxmlexport/ooxmlexport5.cxx | 14 ++++++++++
writerfilter/source/dmapper/DomainMapper_Impl.cxx | 30 ++++++++++++++++++++--
3 files changed, 42 insertions(+), 2 deletions(-)
New commits:
commit 2be656908e9f30d0b0f795cc67096f0d673a3a21
Author: László Németh <nemeth at numbertext.org>
AuthorDate: Fri Mar 13 17:08:34 2020 +0100
Commit: László Németh <nemeth at numbertext.org>
CommitDate: Mon Mar 16 22:23:32 2020 +0100
tdf#128646 DOCX import: don't hide shape of hidden paragraph
if the shape is not hidden, but it's anchored to
an empty table cell paragraph.
Change-Id: I97e42431d083d3c70ff67981676e322ca8e7f89d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90568
Tested-by: Jenkins
Reviewed-by: László Németh <nemeth at numbertext.org>
diff --git a/sw/qa/extras/ooxmlexport/data/tdf128646.docx b/sw/qa/extras/ooxmlexport/data/tdf128646.docx
new file mode 100644
index 000000000000..9648df35a2f3
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf128646.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
index 470e47714940..cc4cc8f33bfa 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
@@ -641,6 +641,20 @@ DECLARE_OOXMLEXPORT_TEST(testTdf95033, "tdf95033.docx")
assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[9]/w:tc[2]/w:tcPr/w:tcBorders/w:bottom[@w:val = 'nil']", 0);
}
+DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf128646, "tdf128646.docx")
+{
+ // The problem was that not hidden shapes anchored to empty hidden paragraphs were imported as hidden.
+ xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+
+ assertXPath(pXmlDoc,"/w:document/w:body/w:tbl/w:tr/w:tc/w:p[7]/w:pPr/w:rPr/w:vanish", 1);
+ if (!mbExported)
+ // originally no <w:vanish> (the same as <w:vanish val="false">)
+ assertXPath(pXmlDoc,"/w:document/w:body/w:tbl/w:tr/w:tc/w:p[7]/w:r/w:rPr/w:vanish", 0);
+ else
+ // This was hidden (<w:vanish/>)
+ assertXPath(pXmlDoc,"/w:document/w:body/w:tbl/w:tr/w:tc/w:p[7]/w:r/w:rPr/w:vanish", "val", "false");
+}
+
DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testFdo77129, "fdo77129.docx")
{
// The problem was that text after TOC field was missing if footer reference comes in field.
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 3e87fcb0a2b5..cc4311d0aaff 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1751,10 +1751,11 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
css::uno::Reference<css::beans::XPropertySet> xParaProps(xTextRange, uno::UNO_QUERY);
- // table style has got bigger precedence than docDefault style
- // collect these pending paragraph properties to process in endTable()
+ // table style precedence and not hidden shapes anchored to hidden empty table paragraphs
if (xParaProps && m_nTableDepth > 0)
{
+ // table style has got bigger precedence than docDefault style
+ // collect these pending paragraph properties to process in endTable()
uno::Reference<text::XTextCursor> xCur = xTextRange->getText( )->createTextCursor( );
xCur->gotoEnd(false);
xCur->goLeft(1, false);
@@ -1763,6 +1764,31 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
xParaCursor->gotoStartOfParagraph(false);
TableParagraph aPending{xParaCursor, xCur, pParaContext, xParaProps};
m_aParagraphsToEndTable.push_back(aPending);
+
+ // hidden empty paragraph with a not hidden shape, set as not hidden
+ o3tl::optional<PropertyMap::Property> pHidden;
+ if ( !m_aAnchoredObjectAnchors.empty() && (pHidden = pParaContext->getProperty(PROP_CHAR_HIDDEN)) )
+ {
+ bool bIsHidden;
+ pHidden->second >>= bIsHidden;
+ if (bIsHidden)
+ {
+ bIsHidden = false;
+ pHidden = GetTopContext()->getProperty(PROP_CHAR_HIDDEN);
+ if (pHidden)
+ pHidden->second >>= bIsHidden;
+ if (!bIsHidden)
+ {
+ uno::Reference<text::XTextCursor> xCur3 = xTextRange->getText()->createTextCursorByRange(xParaCursor);
+ xCur3->goRight(1, true);
+ if (xCur3->getString() == SAL_NEWLINE_STRING)
+ {
+ uno::Reference< beans::XPropertySet > xProp( xCur3, uno::UNO_QUERY );
+ xProp->setPropertyValue(getPropertyName(PROP_CHAR_HIDDEN), uno::makeAny(false));
+ }
+ }
+ }
+ }
}
// tdf#118521 set paragraph top or bottom margin based on the paragraph style
More information about the Libreoffice-commits
mailing list