[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.3' - sw/qa writerfilter/source
Tamás Zolnai
tamas.zolnai at collabora.com
Fri Jul 14 13:04:37 UTC 2017
sw/qa/extras/ooxmlimport/data/tdf109053.docx |binary
sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 8 ++++++++
writerfilter/source/dmapper/PropertyMap.cxx | 23 +++++++++++++++--------
3 files changed, 23 insertions(+), 8 deletions(-)
New commits:
commit b85c798c7f5cd85f814122c76b3bb4f13f8b54be
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
Date: Wed Jul 12 16:07:10 2017 +0200
tdf#109053: DOCX: Multipage table is not imported properly
An other use case when converting to a "floating table" is
not a good idea. In this case we can check whether next to
the table anything fits in the text area. If not then we
can avoid floating table conversion.
Reviewed-on: https://gerrit.libreoffice.org/39811
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Tamás Zolnai <tamas.zolnai at collabora.com>
(cherry picked from commit fc55711f01af172eb3a034454405fa941454c781)
Change-Id: I798a2f4c7a9dfe6aecbe4a73e3162b49ea5f0adc
Reviewed-on: https://gerrit.libreoffice.org/39930
Reviewed-by: Andras Timar <andras.timar at collabora.com>
Tested-by: Andras Timar <andras.timar at collabora.com>
diff --git a/sw/qa/extras/ooxmlimport/data/tdf109053.docx b/sw/qa/extras/ooxmlimport/data/tdf109053.docx
new file mode 100755
index 000000000000..f700c4d6a48d
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf109053.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index bdeae3b3aaac..3778c52d7a50 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -1484,6 +1484,14 @@ DECLARE_OOXMLIMPORT_TEST(testTdf108545_embeddedDocxIcon, "tdf108545_embeddedDocx
CPPUNIT_ASSERT_EQUAL(embed::Aspects::MSOLE_ICON, xSupplier->getAspect());
}
+
+DECLARE_OOXMLIMPORT_TEST(testTdf109053, "tdf109053.docx")
+{
+ // Table was imported into a text frame which led to a one page document
+ // Originally the table takes two pages, so Writer should import it accordingly.
+ CPPUNIT_ASSERT_EQUAL(getPages(), 2);
+}
+
// tests should only be added to ooxmlIMPORT *if* they fail round-tripping in ooxmlEXPORT
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
index 89492db7f002..9f263ab22630 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -1099,21 +1099,28 @@ bool SectionPropertyMap::FloatingTableConversion(DomainMapper_Impl& rDM_Impl, Fl
}
}
- // If the table is wider than the text area, then don't create a fly
- // for the table: no wrapping will be performed anyway, but multi-page
- // tables will be broken.
// It seems Word has a limit here, so that in case the table width is quite
// close to the text area width, then it won't perform a wrapping, even in
// case the content (e.g. an empty paragraph) would fit. The magic constant
// here represents this limit.
- if ((nTableWidth + 469) < nTextAreaWidth)
- return true;
+ const sal_Int32 nMagicNumber = 469;
- // If the position is relative to the edge of the page, then we always
- // create the fly.
- if (rInfo.getPropertyValue("HoriOrientRelation") == text::RelOrientation::PAGE_FRAME)
+ // If the table's with is smaller than the text area width, text might
+ // be next to the table and so it should behave as a floating table.
+ if ( (nTableWidth + nMagicNumber) < nTextAreaWidth )
return true;
+ // If the position is relative to the edge of the page, then we need to check the whole
+ // page width to see whether text can fit next to the table.
+ if ( rInfo.getPropertyValue( "HoriOrientRelation" ) == text::RelOrientation::PAGE_FRAME )
+ {
+ // If the table is wide enough to that no text fits next to it, then don't create a fly
+ // for the table: no wrapping will be performed anyway, but multi-page
+ // tables will be broken.
+ if ((nTableWidth + nMagicNumber) < (nPageWidth - std::min(GetLeftMargin(), GetRightMargin())))
+ return true;
+ }
+
// If there are columns, always create the fly, otherwise the columns would
// restrict geometry of the table.
if (ColumnCount() + 1 >= 2)
More information about the Libreoffice-commits
mailing list