diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2020-10-07 15:53:15 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2020-10-07 16:30:45 +0200 |
commit | aff70ac6ce3362fb76a74aa0d732a979bd047537 (patch) | |
tree | 230ddcbb8c01e859054e454ba381a8a5fe8411a5 | |
parent | cc6941e8ce4a22cd7bdcdf1db72da02546b35fd2 (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.rtf | 21 | ||||
-rw-r--r-- | sw/qa/extras/rtfimport/rtfimport.cxx | 29 | ||||
-rw-r--r-- | sw/source/filter/rtf/swparrtf.cxx | 8 |
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(); } } |