sw/qa/extras/layout/data/tdf164499.docx |binary sw/qa/extras/layout/layout3.cxx | 28 +++++++++++++++++++++++----- sw/source/core/text/portxt.cxx | 2 ++ 3 files changed, 25 insertions(+), 5 deletions(-)
New commits: commit ed7fbfce0b434f7d2a5542483d2838af51958e34 Author: László Németh <nem...@numbertext.org> AuthorDate: Tue Feb 11 01:22:42 2025 +0100 Commit: László Németh <nem...@numbertext.org> CommitDate: Tue Feb 11 18:26:23 2025 +0100 tdf#164499 sw smart justify: disable in tabulated lines to fix ToC Calculated extra text content without shrinking resulted overhanging text lines, e.g page numbers over the margin in ToC. Fix it by skipping space shrinking completely in tabulated lines, restoring also interoperability. Regression since commit 53de98b29548ded88e0a44c80256fc5e340d551e "tdf#158333 sw smart justify: fix multiple text portions". Change-Id: I390a254b8a47c6563d2c01a2f818f5ac6122e2ac Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181397 Tested-by: Jenkins Reviewed-by: László Németh <nem...@numbertext.org> diff --git a/sw/qa/extras/layout/data/tdf164499.docx b/sw/qa/extras/layout/data/tdf164499.docx new file mode 100644 index 000000000000..d970bb29affa Binary files /dev/null and b/sw/qa/extras/layout/data/tdf164499.docx differ diff --git a/sw/qa/extras/layout/layout3.cxx b/sw/qa/extras/layout/layout3.cxx index af6dac583f29..5460eae5199a 100644 --- a/sw/qa/extras/layout/layout3.cxx +++ b/sw/qa/extras/layout/layout3.cxx @@ -479,12 +479,10 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf161810) auto pTextArrayAction = static_cast<MetaTextArrayAction*>(pAction); auto pDXArray = pTextArrayAction->GetDXArray(); - // There should be 73 chars on the first line - CPPUNIT_ASSERT_EQUAL(size_t(73), pDXArray.size()); + // There should be 70 chars on the first line + // (tdf#164499 no space shrinking in lines with tabulation) + CPPUNIT_ASSERT_EQUAL(size_t(70), pDXArray.size()); - // Assert we are using the expected position for the last char - // This was 9369, now 9165, according to the fixed space shrinking - CPPUNIT_ASSERT_LESS(sal_Int32(9300), sal_Int32(pDXArray[72])); break; } } @@ -535,6 +533,26 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf163149) } } +CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf164499) +{ + createSwDoc("tdf164499.docx"); + + // Ensure that all text portions are calculated before testing. + SwViewShell* pViewShell = getSwDoc()->getIDocumentLayoutAccess().GetCurrentViewShell(); + CPPUNIT_ASSERT(pViewShell); + pViewShell->Reformat(); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + // no shrinking in tabulated text lines + + // This was 1 (no line break in heading 2.5.5) + assertXPath(pXmlDoc, "/root/page[1]/body/section/txt[18]/SwParaPortion/SwLineLayout", 2); + // line break in heading 2.5.5: the second line contains only the page number + assertXPath(pXmlDoc, "/root/page[1]/body/section/txt[18]/SwParaPortion/SwLineLayout[2]", + "portion", u"*1"); +} + CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf132599_always) { uno::Reference<linguistic2::XHyphenator> xHyphenator = LinguMgr::GetHyphenator(); diff --git a/sw/source/core/text/portxt.cxx b/sw/source/core/text/portxt.cxx index ff8f05e28197..8f453531d4f3 100644 --- a/sw/source/core/text/portxt.cxx +++ b/sw/source/core/text/portxt.cxx @@ -333,6 +333,8 @@ bool SwTextPortion::Format_( SwTextFormatInfo &rInf ) pGuess->BreakPos() != TextFrameIndex(COMPLETE_STRING) && rInf.GetTextFrame()->GetDoc().getIDocumentSettingAccess().get( DocumentSettingId::JUSTIFY_LINES_WITH_SHRINKING) && + // tdf#164499 no shrinking in tabulated line + ( !rInf.GetLast() || !rInf.GetLast()->InTabGrp() ) && // tdf#158436 avoid shrinking at underflow, e.g. no-break space after a // very short word resulted endless loop !rInf.IsUnderflow() )