[Libreoffice-commits] core.git: sw/qa sw/source
Balazs Santha (via logerrit)
logerrit at kemper.freedesktop.org
Fri Aug 27 09:28:17 UTC 2021
sw/qa/extras/uiwriter/data/tdf143904.odt |binary
sw/qa/extras/uiwriter/uiwriter2.cxx | 23 +++++++++++++++++++++++
sw/source/core/table/swtable.cxx | 14 ++++----------
3 files changed, 27 insertions(+), 10 deletions(-)
New commits:
commit 72590c55ad6c699b34dc404542abc3f60bc32a09
Author: Balazs Santha <santha.balazs at simonyi.bme.hu>
AuthorDate: Wed Aug 18 09:30:41 2021 +0200
Commit: Michael Stahl <michael.stahl at allotropia.de>
CommitDate: Fri Aug 27 11:27:44 2021 +0200
tdf#143904 fix direct character formatting copied into paragraph level
Currently, Writer copied the direct character formattings, and applied them on paragraph level, when inserting a new row in a table.
This bug is a regression from 498d2b82187ec3ff58f076e0d15741e64c0505ba .
Explanation, why this regression happened:
MSO Word uses a paragraph mark symbol (i.e the control character than can be configured to be shown), which is imported in Writer as a 0-length hint.
To fasten up the import of DOCX tables, the core applies the formattings from this 0-length attribute on paragraph level, directly before inserting a new row.
All in all, to solve this bug, we needed to make sure, that we only copy the formattings, if it is from a 0-length hint.
Change-Id: Iba52e9318cc588feda559339e42897568d009806
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120624
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl at allotropia.de>
diff --git a/sw/qa/extras/uiwriter/data/tdf143904.odt b/sw/qa/extras/uiwriter/data/tdf143904.odt
new file mode 100644
index 000000000000..5a1d28664c31
Binary files /dev/null and b/sw/qa/extras/uiwriter/data/tdf143904.odt differ
diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx
index 70d63e36871a..2b263a7849dd 100644
--- a/sw/qa/extras/uiwriter/uiwriter2.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter2.cxx
@@ -4440,6 +4440,29 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testOfz18563)
TestImportDOCX(aFileStream);
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf143904)
+{
+ SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf143904.odt");
+
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ CPPUNIT_ASSERT(pWrtShell);
+
+ sal_uLong nIndex = pWrtShell->GetCursor()->GetNode().GetIndex();
+
+ dispatchCommand(mxComponent, ".uno:InsertRowsAfter", {});
+ pWrtShell->Down(false);
+ pWrtShell->Insert("foo");
+
+ SwTextNode* pTextNodeA1 = static_cast<SwTextNode*>(pDoc->GetNodes()[nIndex]);
+ CPPUNIT_ASSERT(pTextNodeA1->GetText().startsWith("Insert"));
+ nIndex = pWrtShell->GetCursor()->GetNode().GetIndex();
+ SwTextNode* pTextNodeA2 = static_cast<SwTextNode*>(pDoc->GetNodes()[nIndex]);
+ CPPUNIT_ASSERT_EQUAL(OUString("foo"), pTextNodeA2->GetText());
+ CPPUNIT_ASSERT_EQUAL(false, pTextNodeA2->GetSwAttrSet().HasItem(RES_CHRATR_FONT));
+ OUString sFontName = pTextNodeA2->GetSwAttrSet().GetItem(RES_CHRATR_FONT)->GetFamilyName();
+ CPPUNIT_ASSERT_EQUAL(OUString("Liberation Serif"), sFontName);
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf90069)
{
SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf90069.docx");
diff --git a/sw/source/core/table/swtable.cxx b/sw/source/core/table/swtable.cxx
index ad10eccc7d92..fb5839ea687b 100644
--- a/sw/source/core/table/swtable.cxx
+++ b/sw/source/core/table/swtable.cxx
@@ -145,17 +145,11 @@ void InsTableBox( SwDoc& rDoc, SwTableNode* pTableNd,
if( pCNd->GetpSwAttrSet() )
{
SwAttrSet aAttrSet( *pCNd->GetpSwAttrSet() );
- SwTextNode* pTNd = static_cast<SwTextNode*>(pCNd);
- SwpHints * pSwpHints = pTNd->GetpSwpHints();
- if(pSwpHints && pSwpHints->Count()!=0)
+ if(pCNd->GetSwAttrSet().HasItem(RES_PARATR_LIST_AUTOFMT))
{
- SwTextAttr* textAttr = pSwpHints->Get(pSwpHints->Count()-1);
- if(textAttr->Which() == RES_TXTATR_AUTOFMT )
- {
- SwFormatAutoFormat& format = static_cast<SwFormatAutoFormat&>(textAttr->GetAttr());
- const std::shared_ptr<SfxItemSet>& handle = format.GetStyleHandle();
- aAttrSet.Put(*handle);
- }
+ SwFormatAutoFormat format = aAttrSet.Get(RES_PARATR_LIST_AUTOFMT);
+ const std::shared_ptr<SfxItemSet>& handle = format.GetStyleHandle();
+ aAttrSet.Put(*handle);
}
if( pBox->GetSaveNumFormatColor() )
{
More information about the Libreoffice-commits
mailing list