sw/qa/extras/layout/data/tdf125893.docx |binary sw/qa/extras/layout/layout.cxx | 10 +++++++++- sw/source/core/layout/flowfrm.cxx | 18 ++++++++++++++---- 3 files changed, 23 insertions(+), 5 deletions(-)
New commits: commit 92116520d0dd157e4db43ce2fc2e1627b9c25948 Author: László Németh <[email protected]> AuthorDate: Wed Jun 24 17:18:31 2020 +0200 Commit: Gabor Kelemen <[email protected]> CommitDate: Sun Sep 13 12:40:45 2020 +0200 tdf#125893 DOCX import: fix "half" contextual paragraph spacing Always ignore own top margin setting of the actual paragraph with contextual spacing, if the previous paragraph is identical. I.e. in that case, too, when the previous paragraph has no contextual spacing, like MSO does. Note: PARA_SPACE_MAX mode hasn't included this modification, yet, so only ODT documents converted from DOCX use it at the default setting. See also commit ba18832ceeda21f047a664b71a4333a54737e6c8 (tdf#75221: make margin collapsing implementation conform OASIS proposal) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97081 Tested-by: Jenkins Reviewed-by: László Németh <[email protected]> (cherry picked from commit e318d5d8146d18e2c76e23f2e3c39527f2af9f36) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97065 Reviewed-by: Adolfo Jayme Barrientos <[email protected]> (cherry picked from commit 461634632d796fc719e941d925021ae48a210e59) Change-Id: Ida9d12b2c511fcd5e38ade7eb5f4650387c65813 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102557 Tested-by: Gabor Kelemen <[email protected]> Reviewed-by: Gabor Kelemen <[email protected]> diff --git a/sw/qa/extras/layout/data/tdf125893.docx b/sw/qa/extras/layout/data/tdf125893.docx new file mode 100644 index 000000000000..f46f9af05ac3 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf125893.docx differ diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx index a7ca6a279258..83aad11bf537 100644 --- a/sw/qa/extras/layout/layout.cxx +++ b/sw/qa/extras/layout/layout.cxx @@ -3037,6 +3037,14 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf128611) assertXPath(pXmlDoc, "//tab/row/cell[1]/txt/Text", "Portion", "Abcd efghijkl"); } +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf125893) +{ + createDoc("tdf125893.docx"); + xmlDocPtr pXmlDoc = parseLayoutDump(); + // This was 400. The paragraph must have zero top border. + assertXPath(pXmlDoc, "/root/page/body/txt[4]/infos/prtBounds", "top", "0"); +} + CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf117188) { createDoc("tdf117188.docx"); @@ -3537,7 +3545,7 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf130218) std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile(); MetafileXmlDump dumper; - xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + xmlDocPtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); CPPUNIT_ASSERT(pXmlDoc); // This failed, if hanging first line was hidden diff --git a/sw/source/core/layout/flowfrm.cxx b/sw/source/core/layout/flowfrm.cxx index 466e0e1855bc..85ae13a6dcf9 100644 --- a/sw/source/core/layout/flowfrm.cxx +++ b/sw/source/core/layout/flowfrm.cxx @@ -1426,7 +1426,15 @@ SwTwips SwFlowFrame::CalcUpperSpace( const SwBorderAttrs *pAttrs, && lcl_getContextualSpacing(pPrevFrame) && lcl_IdenticalStyles(pPrevFrame, &m_rThis); - // OD 2004-03-10 #i11860# - use new method to determine needed spacing + // tdf#125893 always ignore own top margin setting of the actual paragraph + // with contextual spacing, if the previous paragraph is identical + const bool bHalfContextualSpacing = !bContextualSpacing + && pAttrs->GetULSpace().GetContext() + && !lcl_getContextualSpacing(pPrevFrame) + && lcl_getContextualSpacing(&m_rThis) + && lcl_IdenticalStyles(pPrevFrame, &m_rThis); + + // i#11860 - use new method to determine needed spacing // values of found previous frame and use these values. SwTwips nPrevLowerSpace = 0; SwTwips nPrevLineSpacing = 0; @@ -1437,6 +1445,7 @@ SwTwips SwFlowFrame::CalcUpperSpace( const SwBorderAttrs *pAttrs, bPrevLineSpacingPorportional ); if( rIDSA.get(DocumentSettingId::PARA_SPACE_MAX) ) { + // FIXME: apply bHalfContextualSpacing for better portability? nUpper = bContextualSpacing ? 0 : nPrevLowerSpace + pAttrs->GetULSpace().GetUpper(); SwTwips nAdd = nPrevLineSpacing; // OD 07.01.2004 #i11859# - consideration of the line spacing @@ -1480,9 +1489,10 @@ SwTwips SwFlowFrame::CalcUpperSpace( const SwBorderAttrs *pAttrs, } else { - nUpper = bContextualSpacing ? 0 : std::max(static_cast<long>(nPrevLowerSpace), - static_cast<long>(pAttrs->GetULSpace().GetUpper()) ); - // OD 07.01.2004 #i11859# - consideration of the line spacing + nUpper = bContextualSpacing ? 0 : std::max(static_cast<long>(nPrevLowerSpace), bHalfContextualSpacing + ? 0 : static_cast<long>(pAttrs->GetULSpace().GetUpper()) ); + + // i#11859 - consideration of the line spacing // for the upper spacing of a text frame if ( bUseFormerLineSpacing ) { _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
