[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.3' - sw/qa writerfilter/source
Miklos Vajna
vmiklos at collabora.co.uk
Fri Jun 23 14:40:54 UTC 2017
sw/qa/extras/ooxmlexport/data/tdf108682.docx |binary
sw/qa/extras/ooxmlexport/ooxmlexport9.cxx | 11 +++++++++++
writerfilter/source/dmapper/DomainMapper.cxx | 16 +++++++++++++---
3 files changed, 24 insertions(+), 3 deletions(-)
New commits:
commit 6f93c2519940b8e0afb7c50cacf06b2addfc873b
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Thu Jun 22 13:41:30 2017 +0200
tdf#108682 DOCX import: fix <w:spacing w:line=...> for negative values
I didn't find UI in Word to create
<w:spacing w:line="-260" w:lineRule="auto"/>
the equivalent markup when you set line spacing to exactly 13pt for new
documents is:
<w:spacing w:line="260" w:lineRule="exact"/>
The OOXML spec and Microsoft's implementer notes ([MS-OI29500]) is also
pretty silent about what a negative value means. However, if this markup
is converted to WW8 by Word, then the WW8 LPSD structure is like this
(as presented by doc-dumper):
<lspd type="LSPD" offset="5086">
<dyaLine value="0xfefc"/>
<fMultLinespace value="0x1"/>
</lspd>
For the 0xfefc value the [MS-DOC] spec clearly states that means the
type of the spacing is "exactly", with the value of 0x10000-0xfefc, i.e.
the same 260 twips.
Change-Id: I84b485d02dea49c610b6df2e06ccce03e1d29d21
Reviewed-on: https://gerrit.libreoffice.org/39091
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
(cherry picked from commit f575f70b8303ba187f6989920281ff02e7a431c9)
Reviewed-on: https://gerrit.libreoffice.org/39162
Reviewed-by: Andras Timar <andras.timar at collabora.com>
Tested-by: Andras Timar <andras.timar at collabora.com>
diff --git a/sw/qa/extras/ooxmlexport/data/tdf108682.docx b/sw/qa/extras/ooxmlexport/data/tdf108682.docx
new file mode 100644
index 000000000000..1364025b826c
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf108682.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
index 4877c57639c2..ba0e5a207d21 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
@@ -22,6 +22,8 @@
#include <com/sun/star/text/HoriOrientation.hpp>
#include <com/sun/star/text/RelOrientation.hpp>
#include <com/sun/star/view/XViewSettingsSupplier.hpp>
+#include <com/sun/star/style/LineSpacing.hpp>
+#include <com/sun/star/style/LineSpacingMode.hpp>
#include <sfx2/docfile.hxx>
#include <sfx2/docfilt.hxx>
@@ -351,6 +353,15 @@ DECLARE_OOXMLEXPORT_TEST(testTdf107889, "tdf107889.docx")
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), xDrawPage->getCount());
}
+DECLARE_OOXMLEXPORT_TEST(testTdf108682, "tdf108682.docx")
+{
+ auto aLineSpacing = getProperty<style::LineSpacing>(getParagraph(1), "ParaLineSpacing");
+ // This was style::LineSpacingMode::PROP.
+ CPPUNIT_ASSERT_EQUAL(style::LineSpacingMode::FIX, aLineSpacing.Mode);
+ // 260 twips in mm100, this was a negative value.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(459), aLineSpacing.Height);
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 08c6bfd7f820..ee9f30dbf66b 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -454,9 +454,19 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
if( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_LineSpacingRule_auto)
{
m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "lineRule", "auto");
- aSpacing.Mode = style::LineSpacingMode::PROP;
- //reinterpret the already set value
- aSpacing.Height = sal_Int16( aSpacing.Height * 100 / ConversionHelper::convertTwipToMM100( nSingleLineSpacing ));
+ if (aSpacing.Height >= 0)
+ {
+ aSpacing.Mode = style::LineSpacingMode::PROP;
+ //reinterpret the already set value
+ aSpacing.Height = sal_Int16( aSpacing.Height * 100 / ConversionHelper::convertTwipToMM100( nSingleLineSpacing ));
+ }
+ else
+ {
+ // Negative value still means a positive height,
+ // just the mode is "exact".
+ aSpacing.Mode = style::LineSpacingMode::FIX;
+ aSpacing.Height *= -1;
+ }
}
else if( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_LineSpacingRule_atLeast)
{
More information about the Libreoffice-commits
mailing list