[Libreoffice-commits] core.git: sw/qa sw/source

Attila Bakos (via logerrit) logerrit at kemper.freedesktop.org
Thu Sep 24 11:55:08 UTC 2020


 sw/qa/extras/layout/data/tdf136588.docx |binary
 sw/qa/extras/layout/layout.cxx          |   11 +++++++++++
 sw/source/core/text/portxt.cxx          |    3 +--
 sw/source/core/txtnode/fntcache.cxx     |    7 +++++++
 4 files changed, 19 insertions(+), 2 deletions(-)

New commits:
commit 0d28097fadf44ed58cb5e3e9b9c04a65a7a33fd6
Author:     Attila Bakos <bakos.attilakaroly at nisz.hu>
AuthorDate: Tue Sep 22 16:37:22 2020 +0200
Commit:     László Németh <nemeth at numbertext.org>
CommitDate: Thu Sep 24 13:54:23 2020 +0200

    tdf#136588 sw: fix line break regression with small caps
    
    Regression from commit 1b03a449161af225302e4b4dd2bb2e69c6d8d170
    (tdf#112290 sw: fix missing line break in small capital).
    
    This replaces the previous commit with a better solution.
    
    Change-Id: I7510b78cd6520f260e6a3804ec69e0364b93440f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103178
    Tested-by: László Németh <nemeth at numbertext.org>
    Reviewed-by: László Németh <nemeth at numbertext.org>

diff --git a/sw/qa/extras/layout/data/tdf136588.docx b/sw/qa/extras/layout/data/tdf136588.docx
new file mode 100644
index 000000000000..606931286470
Binary files /dev/null and b/sw/qa/extras/layout/data/tdf136588.docx differ
diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx
index 5c7bfdab7ab3..4a348bdd7f09 100644
--- a/sw/qa/extras/layout/layout.cxx
+++ b/sw/qa/extras/layout/layout.cxx
@@ -192,6 +192,17 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineFootnotes)
     CheckRedlineFootnotesHidden();
 }
 
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TestTdf136588)
+{
+    load(DATA_DIRECTORY, "tdf136588.docx");
+    auto pXMLLayoutDump = parseLayoutDump();
+    CPPUNIT_ASSERT(pXMLLayoutDump);
+
+    //there was a bad line break before, the correct break layout is this:
+    assertXPath(pXMLLayoutDump, "/root/page/body/txt[2]/LineBreak[2]", "Line",
+                "effectively by modern-day small to ");
+}
+
 CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineFlysInBody)
 {
     loadURL("private:factory/swriter", nullptr);
diff --git a/sw/source/core/text/portxt.cxx b/sw/source/core/text/portxt.cxx
index 398b26e6706b..ace126870b54 100644
--- a/sw/source/core/text/portxt.cxx
+++ b/sw/source/core/text/portxt.cxx
@@ -344,8 +344,7 @@ bool SwTextPortion::Format_( SwTextFormatInfo &rInf )
         Insert( aGuess.ReleaseHangingPortion() );
     }
     // breakPos >= index
-    else if (aGuess.BreakPos() >= rInf.GetIdx() && aGuess.BreakPos() != TextFrameIndex(COMPLETE_STRING)
-        && rInf.GetFont()->GetCaseMap() != SvxCaseMap::SmallCaps )
+    else if (aGuess.BreakPos() >= rInf.GetIdx() && aGuess.BreakPos() != TextFrameIndex(COMPLETE_STRING))
     {
         // case B1
         if( aGuess.HyphWord().is() && aGuess.BreakPos() > rInf.GetLineStart()
diff --git a/sw/source/core/txtnode/fntcache.cxx b/sw/source/core/txtnode/fntcache.cxx
index 5d7188a0f4a1..b55821032936 100644
--- a/sw/source/core/txtnode/fntcache.cxx
+++ b/sw/source/core/txtnode/fntcache.cxx
@@ -2536,6 +2536,13 @@ TextFrameIndex SwFont::GetTextBreak(SwDrawTextInfo const & rInf, long nTextWidth
             ? TextFrameIndex(COMPLETE_STRING)
             : nTextBreak;
 
+    // tdf112290 tdf136588 Break the line correctly only if there is an image inline,
+    // and the image wider than the line...
+    if (GetCaseMap() == SvxCaseMap::SmallCaps && TextFrameIndex(COMPLETE_STRING) == nTextBreak2 &&
+        ! bCompress && nTextWidth == 0)
+        // If nTextWidth == 0 means the line is full, we have to break it
+        nTextBreak2 = TextFrameIndex(1);
+
     if ( ! bCompress )
         return nTextBreak2;
 


More information about the Libreoffice-commits mailing list