summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2020-10-07 15:53:15 +0200
committerMiklos Vajna <vmiklos@collabora.com>2020-10-07 16:30:45 +0200
commitaff70ac6ce3362fb76a74aa0d732a979bd047537 (patch)
tree230ddcbb8c01e859054e454ba381a8a5fe8411a5
parentcc6941e8ce4a22cd7bdcdf1db72da02546b35fd2 (diff)
RTF import: copy direct para formatting for first para in insert mode
This is really similar to commit ae9fe9d7107b2e25c9316033651e49c08537c0e9 (ODT import: copy direct para formatting for first para in insert mode, 2020-10-02), except that was for the ODT import. Change-Id: I5f4e82162f1c18335f472c004c742e0e0f0664f9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104060 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
-rw-r--r--sw/qa/extras/rtfimport/data/paste-first-para-direct-format.rtf21
-rw-r--r--sw/qa/extras/rtfimport/rtfimport.cxx29
-rw-r--r--sw/source/filter/rtf/swparrtf.cxx8
3 files changed, 58 insertions, 0 deletions
diff --git a/sw/qa/extras/rtfimport/data/paste-first-para-direct-format.rtf b/sw/qa/extras/rtfimport/data/paste-first-para-direct-format.rtf
new file mode 100644
index 000000000000..d04e5a300592
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/paste-first-para-direct-format.rtf
@@ -0,0 +1,21 @@
+{\rtf1\ansi\deff3\adeflang1025
+{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\fswiss\fprq2\fcharset0 Liberation Sans{\*\falt Arial};}{\f5\fnil\fprq2\fcharset0 Tahoma;}{\f6\fnil\fprq2\fcharset0 Lucida Sans;}{\f7\fswiss\fprq0\fcharset0 Lucida Sans;}}
+{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
+{\stylesheet{\s0\snext0\hich\af3\dbch\af5\langfe2052\dbch\af6\afs24\alang1081\nowidctlpar\hyphpar0\aspalpha\ltrpar\cf0\loch\f3\fs24\lang1038\kerning1 Normal;}
+{\s15\sbasedon0\snext16\dbch\af5\dbch\af6\afs28\sb240\sa120\keepn\loch\f4\fs28 Heading;}
+{\s16\sbasedon0\snext16\sl276\slmult1\sb0\sa140 Text Body;}
+{\s17\sbasedon16\snext17\dbch\af7\sl276\slmult1\sb0\sa140 List;}
+{\s18\sbasedon0\snext18\dbch\af7\afs24\ai\sb120\sa120\noline\fs24\i Caption;}
+{\s19\sbasedon0\snext19\dbch\af7\noline Index;}
+}{\*\generator LibreOfficeDev/7.1.0.0.alpha0$Linux_X86_64 LibreOffice_project/698e5d54182d96a1fd0c3b864ba0e618f82dd1f1}{\info{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr0\mo0\dy0\hr0\min0}{\printim\yr0\mo0\dy0\hr0\min0}}{\*\userprops}\deftab709
+\hyphauto1\viewscale100
+{\*\pgdsctbl
+{\pgdsc0\pgdscuse451\pgwsxn12240\pghsxn15840\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Default Page Style;}}
+\formshade\paperh15840\paperw12240\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgndec\sftnnar\saftnnrlc\sectunlocked1\pgwsxn12240\pghsxn15840\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
+{\*\ftnsep\chftnsep}\pgndec\pard\plain \s0\hich\af3\dbch\af5\langfe2052\dbch\af6\afs24\alang1081\nowidctlpar\hyphpar0\aspalpha\ltrpar\cf0\loch\f3\fs24\lang1038\kerning1\qc\ltrpar{\loch
+First paragraph}
+\par \pard\plain \s0\hich\af3\dbch\af5\langfe2052\dbch\af6\afs24\alang1081\nowidctlpar\hyphpar0\aspalpha\ltrpar\cf0\loch\f3\fs24\lang1038\kerning1\qc\ltrpar{\loch
+Second paragraph}
+\par \pard\plain \s0\hich\af3\dbch\af5\langfe2052\dbch\af6\afs24\alang1081\nowidctlpar\hyphpar0\aspalpha\ltrpar\cf0\loch\f3\fs24\lang1038\kerning1\qc\ltrpar\loch
+
+\par } \ No newline at end of file
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 3c6e6cb370e4..e1c940a00e7f 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -47,6 +47,7 @@
#include <com/sun/star/text/XTextDocument.hpp>
#include <com/sun/star/text/XTextSectionsSupplier.hpp>
#include <com/sun/star/beans/XPropertyState.hpp>
+#include <com/sun/star/document/XDocumentInsertable.hpp>
#include <o3tl/cppunittraitshelper.hxx>
#include <tools/UnitConversion.hxx>
@@ -1013,6 +1014,34 @@ CPPUNIT_TEST_FIXTURE(Test, testFdo85179)
getProperty<table::BorderLine2>(getShape(1), "TopBorder").LineWidth);
}
+CPPUNIT_TEST_FIXTURE(Test, testPasteFirstParaDirectFormat)
+{
+ // Create a new document.
+ mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument");
+ {
+ // Set some direct formatting on the first paragraph, but leave paragraph adjust at its
+ // default (left).
+ uno::Reference<beans::XPropertySet> xParagraph(getParagraph(1), uno::UNO_QUERY);
+ xParagraph->setPropertyValue("PageNumberOffset", uno::makeAny(static_cast<sal_Int16>(0)));
+ }
+
+ // Paste from RTF.
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<document::XDocumentInsertable> xCursor(
+ xText->createTextCursorByRange(xText->getStart()), uno::UNO_QUERY);
+ xCursor->insertDocumentFromURL(
+ m_directories.getURLFromSrc(mpTestDocumentPath) + "paste-first-para-direct-format.rtf", {});
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 3 (center)
+ // - Actual : 0 (left)
+ // i.e. the inserted document's first paragraph's paragraph formatting was lost.
+ uno::Reference<beans::XPropertySet> xParagraph(getParagraph(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(style::ParagraphAdjust_CENTER),
+ getProperty<sal_Int16>(xParagraph, "ParaAdjust"));
+}
+
CPPUNIT_TEST_FIXTURE(Test, testFdo82512)
{
load(mpTestDocumentPath, "fdo82512.rtf");
diff --git a/sw/source/filter/rtf/swparrtf.cxx b/sw/source/filter/rtf/swparrtf.cxx
index b6ae62bf6bf9..214322ebafa7 100644
--- a/sw/source/filter/rtf/swparrtf.cxx
+++ b/sw/source/filter/rtf/swparrtf.cxx
@@ -136,7 +136,15 @@ ErrCode SwRTFReader::Read(SwDoc& rDoc, const OUString& /*rBaseURL*/, SwPaM& rPam
if (pTextNode->GetText().getLength())
pDelNd->FormatToTextAttr(pTextNode);
else
+ {
pTextNode->ChgFormatColl(pDelNd->GetTextColl());
+ if (!pDelNd->GetNoCondAttr(RES_PARATR_LIST_ID, /*bInParents=*/false))
+ {
+ // Lists would need manual merging, but copy paragraph direct formatting
+ // otherwise.
+ pDelNd->CopyCollFormat(*pTextNode);
+ }
+ }
pTextNode->JoinNext();
}
}