summaryrefslogtreecommitdiff
path: root/sw/qa/extras/rtfexport
diff options
context:
space:
mode:
authorMichael Stahl <Michael.Stahl@cib.de>2019-04-05 19:30:45 +0200
committerMichael Stahl <Michael.Stahl@cib.de>2019-04-10 10:51:51 +0200
commit3d74ddd190a5087e0a54ef7b14d0a43006745ec3 (patch)
treec8af061ae29bc376e1df749d4b730863b3d2a3e4 /sw/qa/extras/rtfexport
parentc602bbaa89784681025ae487ad230ed0e86e9acb (diff)
writerfilter: implement RTF derived styles defaulting
It turns out that the situation fixed in commit 1be0a3fa9ebb22b607c54b47739d4467acfed259 also applies to the definition of the styles themselves. To implement the same style import as Word, the style definitions need to be stored twice: once as read from the file, and another time with attributes defaulted and deduplicated vs. the parent style; the second representation is then sent to the domain mapper. To make this easier, add a bool parameter to cloneAndDeduplicate() to disable the implicit pPr dereferencing that happens when creating the hard formatted paragraph properties (this could potentially be cleaned up further if those paragraph properties would use pPr wrapper themselves). Also implement defaulting of line spacing in getDefaultSPRM(). Change-Id: I4810e917697b3af244e5dbdd7f5a45b4767c93fc Reviewed-on: https://gerrit.libreoffice.org/70320 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'sw/qa/extras/rtfexport')
-rw-r--r--sw/qa/extras/rtfexport/data/para-style-bottom-margin-2.rtf12
-rw-r--r--sw/qa/extras/rtfexport/rtfexport5.cxx27
2 files changed, 39 insertions, 0 deletions
diff --git a/sw/qa/extras/rtfexport/data/para-style-bottom-margin-2.rtf b/sw/qa/extras/rtfexport/data/para-style-bottom-margin-2.rtf
new file mode 100644
index 000000000000..b4261e717070
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/para-style-bottom-margin-2.rtf
@@ -0,0 +1,12 @@
+{\rtf1
+\ansi\ansicpg1252\deff0
+{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2 Times New Roman;}}
+{\stylesheet
+{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \snext0 Normal;}
+{\s15\ql \li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \sbasedon0 \snext15 List Paragraph;}
+}
+\pard\plain \ltrpar\s15\ql \li720\ri0\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace
+\par
+\pard\plain
+\par
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport5.cxx b/sw/qa/extras/rtfexport/rtfexport5.cxx
index a60eb485ccdf..b2b898738d1d 100644
--- a/sw/qa/extras/rtfexport/rtfexport5.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport5.cxx
@@ -194,6 +194,33 @@ DECLARE_RTFEXPORT_TEST(testParaBottomMargin, "para-bottom-margin.rtf")
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), getProperty<sal_Int32>(getParagraph(1), "ParaTopMargin"));
}
+DECLARE_RTFIMPORT_TEST(testParaStyleBottomMargin2, "para-style-bottom-margin-2.rtf")
+{
+ uno::Reference<beans::XPropertySet> xPropertySet(
+ getStyles("ParagraphStyles")->getByName("Standard"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(353), getProperty<sal_Int32>(xPropertySet, "ParaBottomMargin"));
+ CPPUNIT_ASSERT_EQUAL(style::LineSpacingMode::PROP,
+ getProperty<style::LineSpacing>(xPropertySet, "ParaLineSpacing").Mode);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(115),
+ getProperty<style::LineSpacing>(xPropertySet, "ParaLineSpacing").Height);
+
+ // the derived style contains \sa200, as does its parent
+ uno::Reference<beans::XPropertySet> xPropertySet1(
+ getStyles("ParagraphStyles")->getByName("List Paragraph"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(353), getProperty<sal_Int32>(xPropertySet1, "ParaBottomMargin"));
+ CPPUNIT_ASSERT_EQUAL(style::LineSpacingMode::PROP,
+ getProperty<style::LineSpacing>(xPropertySet1, "ParaLineSpacing").Mode);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(115),
+ getProperty<style::LineSpacing>(xPropertySet1, "ParaLineSpacing").Height);
+ // for the paragraph there is no \saN, so it should default to 0
+ auto const xPara(getParagraph(1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xPara, "ParaBottomMargin"));
+ CPPUNIT_ASSERT_EQUAL(style::LineSpacingMode::PROP,
+ getProperty<style::LineSpacing>(xPara, "ParaLineSpacing").Mode);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(115),
+ getProperty<style::LineSpacing>(xPara, "ParaLineSpacing").Height);
+}
+
DECLARE_RTFEXPORT_TEST(testFdo66040, "fdo66040.rtf")
{
uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);