sw/qa/extras/layout/data/tdf106234.fodt | 31 +++++++++++++++++++++++++++++++ sw/qa/extras/layout/layout.cxx | 21 +++++++++++++++++++++ sw/source/core/text/itradj.cxx | 17 ++++++++++++++++- 3 files changed, 68 insertions(+), 1 deletion(-)
New commits: commit 0d963060b612977139138d25b9e4649f84800a28 Author: László Németh <nem...@numbertext.org> AuthorDate: Tue Jun 16 08:13:19 2020 +0200 Commit: Adolfo Jayme Barrientos <fit...@ubuntu.com> CommitDate: Wed Jun 17 05:25:25 2020 +0200 tdf#106234 sw: don't justify after centered tabs (also after right-aligned and decimal-aligned tabs) before manual line break in a justified paragraph. Justify only after left-aligned tabs, like MSO does. Regression from commit 07dcbed5fb6d88f69d84313ddede81c222a5a7a6 (INTEGRATION: CWS fmebugs01 (1.15.104); FILE MERGED 2004/02/09 15:13:57 fme 1.15.104.1: #i13507# Justified alignment for lines containing manual breaks). See also commit 5d7b3475278f59a423c2139ae51f9b4849621890 (INTEGRATION: CWS swqbf34 (1.17.96); FILE MERGED 2005/06/29 12:12:25 fme 1.17.96.2: #i49277# New compatibility option bDoNotJustifyLinesWithManualBreak). Change-Id: Ib92e301aaf46eec283c0850d23549b1b54106068 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96438 Tested-by: László Németh <nem...@numbertext.org> Reviewed-by: László Németh <nem...@numbertext.org> (cherry picked from commit d5325013c4f71595dc4edd08e3957d27bc5e0d9b) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96426 Tested-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/sw/qa/extras/layout/data/tdf106234.fodt b/sw/qa/extras/layout/data/tdf106234.fodt new file mode 100644 index 000000000000..18667c4ab152 --- /dev/null +++ b/sw/qa/extras/layout/data/tdf106234.fodt @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:styles> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + <style:default-style style:family="paragraph"> + <style:text-properties fo:language="rn" fo:country="US"/> + </style:default-style> + </office:styles> + <office:automatic-styles> + <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:text-align="justify" style:justify-single-word="false"> + <style:tab-stops> + <style:tab-stop style:position="2.554cm"/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:text-align="justify" style:justify-single-word="false"> + <style:tab-stops> + <style:tab-stop style:position="2.554cm" style:type="center"/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + </office:automatic-styles> + <office:body> + <office:text> + <text:p text:style-name="P1"><text:tab/>Lorem ipsum<text:line-break/>dolor sit amet, consectetur adipiscing elit. (Justify after left-aligned tab)</text:p> + <text:p text:style-name="P2"><text:span text:style-name="T1"><text:tab/>Lorem ipsum<text:line-break/>dolor sit amet, consectetur adipiscing elit. (Don’t justify after centered tab!)</text:span></text:p> + </office:text> + </office:body> +</office:document> diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx index 96c6edc51634..cbf995ec1acf 100644 --- a/sw/qa/extras/layout/layout.cxx +++ b/sw/qa/extras/layout/layout.cxx @@ -3071,6 +3071,27 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf120287) assertXPath(pXmlDoc, "/root/page/body/txt[1]/LineBreak", 1); } +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf106234) +{ + createDoc("tdf106234.fodt"); + // Ensure that all text portions are calculated before testing. + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwViewShell* pViewShell + = pTextDoc->GetDocShell()->GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell(); + CPPUNIT_ASSERT(pViewShell); + pViewShell->Reformat(); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // In justified paragraphs, there is justification between left tabulators and page breaks + assertXPath(pXmlDoc, "/root/page/body/txt[1]/Special", "nType", "PortionType::Margin"); + assertXPathNoAttribute(pXmlDoc, "/root/page/body/txt[1]/Special", "nWidth"); + // but not after centered, right and decimal tabulators + assertXPath(pXmlDoc, "/root/page/body/txt[2]/Special", "nType", "PortionType::Margin"); + // This was a justified line, without nWidth + assertXPath(pXmlDoc, "/root/page/body/txt[2]/Special", "nWidth", "7881"); +} + CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf120287b) { createDoc("tdf120287b.fodt"); diff --git a/sw/source/core/text/itradj.cxx b/sw/source/core/text/itradj.cxx index e3c24e6cf5ca..64a53c3c4481 100644 --- a/sw/source/core/text/itradj.cxx +++ b/sw/source/core/text/itradj.cxx @@ -287,18 +287,33 @@ void SwTextAdjuster::CalcNewBlock( SwLineLayout *pCurrent, // #i49277# const bool bDoNotJustifyLinesWithManualBreak = GetTextFrame()->GetDoc().getIDocumentSettingAccess().get(DocumentSettingId::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK); + bool bDoNotJustifyTab = false; SwLinePortion *pPos = pCurrent->GetNextPortion(); while( pPos ) { - if ( bDoNotJustifyLinesWithManualBreak && + if ( ( bDoNotJustifyLinesWithManualBreak || bDoNotJustifyTab ) && pPos->IsBreakPortion() && !IsLastBlock() ) { pCurrent->FinishSpaceAdd(); break; } + switch ( pPos->GetWhichPor() ) + { + case PortionType::TabCenter : + case PortionType::TabRight : + case PortionType::TabDecimal : + bDoNotJustifyTab = true; + break; + case PortionType::TabLeft : + case PortionType::Break: + bDoNotJustifyTab = false; + break; + default: break; + } + if ( pPos->InTextGrp() ) nGluePortion = nGluePortion + static_cast<SwTextPortion*>(pPos)->GetSpaceCnt( GetInfo(), nCharCnt ); else if( pPos->IsMultiPortion() ) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits