i18npool/source/characterclassification/cclass_unicode_parser.cxx
| 18
offapi/com/sun/star/i18n/KParseTokens.idl
| 7
sc/source/core/tool/compiler.cxx
| 6
sw/inc/fesh.hxx
| 2
sw/qa/extras/layout/data/2024-01-19_merged-cells-on-separate-pages-vertical-alignement.odt
|binary
sw/qa/extras/layout/data/table-split-bug.fodt
| 440 ++++++++++
sw/qa/extras/layout/layout.cxx
| 44 +
sw/qa/extras/layout/layout3.cxx
| 66 +
sw/qa/extras/uiwriter/uiwriter9.cxx
| 74 +
sw/source/core/bastyp/calc.cxx
| 2
sw/source/core/doc/DocumentContentOperationsManager.cxx
| 11
sw/source/core/docnode/node2lay.cxx
| 7
sw/source/core/layout/ssfrm.cxx
| 2
sw/source/core/layout/tabfrm.cxx
| 18
sw/source/core/undo/untblk.cxx
| 4
sw/source/ui/misc/bookmark.cxx
| 2
16 files changed, 682 insertions(+), 21 deletions(-)
New commits:
commit 7b723367aa897c562646b5cd28a574b1295c6e46
Author: Michael Stahl <[email protected]>
AuthorDate: Tue Feb 4 10:36:50 2025 +0100
Commit: Michael Stahl <[email protected]>
CommitDate: Wed Feb 5 13:43:31 2025 +0100
tdf#159029 sw: layout: fix cell vertical orientation after split
The vertical alignment of cells is implemented in SwCellFrame::Format(),
but it is disabled if IsRebuildLastLine() is true (apparently since the
time when splitting table rows was first implemented in commit
90b73c7b667b06d42f5e37196d25a85b6c787f33 "INTEGRATION: CWS cellbreak")
which is in 2 different cases:
1. when another line fits on the page, around a call to
lcl_RecalcRow(pLastLine) after RemoveFollowFlowLine() - this is the
relevant case when the paragraph is deleted
This case used to work by accident before commit
068c133ac41c97652909b88c432e3b73010efc3e, when after
RemoveFollowFlowLine() of row 406 the text frame moved to the top, then
a Split of the row after the one containing the last part of the merged
cell with the problem was attempted and failed, and in lcl_RecalcRow()
after the Split the alignment was fixed; this commit changed it so that
the first row frame 6 had an invalid position, which caused an earlier
correction of the position of all the cells and text frames during the
lcl_RecalcRow() after joining the follow, where m_bIsRebuildLastLine was
set.
2. after a successful Split() with bTryToSplit=true, i.e., a row was
split - this is the relevant case on Undo of the paragraph delete
This actually was a problem already before the above mentioned commit,
but then it could be "fixed" by clicking on the cell, which stopped to
work.
Here there is no RemoveFollowFlowLine() at the start, but then again a
failed attempt to Split a row followed by a successful Split between
rows; before the 2nd Split the text frame is correctly positioned and
valid, but then lcl_RecalcSplitLine() calling
lcl_ShrinkCellsAndAllContent() moves the text frame up.
In both cases, explicitly invalidate the PrtArea of cells in the last
row where a vertical orientation is set.
(regression from commit 068c133ac41c97652909b88c432e3b73010efc3e)
Change-Id: I7d2e85bb76a4b77c7871d759abbebd6abeb31282
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181113
Reviewed-by: Michael Stahl <[email protected]>
Tested-by: Jenkins
(cherry picked from commit ee482e856143ee62b37869411a64c36a1d78c7cc)
diff --git a/sw/inc/fesh.hxx b/sw/inc/fesh.hxx
index 974d8120474b..6aff99bb31fe 100644
--- a/sw/inc/fesh.hxx
+++ b/sw/inc/fesh.hxx
@@ -671,7 +671,7 @@ public:
void SetRowSplit( const SwFormatRowSplit &rSz );
std::unique_ptr<SwFormatRowSplit> GetRowSplit() const;
- void SetBoxAlign( sal_uInt16 nOrient );
+ SW_DLLPUBLIC void SetBoxAlign(sal_uInt16 nOrient);
sal_uInt16 GetBoxAlign() const; ///< USHRT_MAX if ambiguous.
bool BalanceRowHeight( bool bTstOnly, const bool bOptimize = false );
diff --git
a/sw/qa/extras/layout/data/2024-01-19_merged-cells-on-separate-pages-vertical-alignement.odt
b/sw/qa/extras/layout/data/2024-01-19_merged-cells-on-separate-pages-vertical-alignement.odt
new file mode 100644
index 000000000000..e316e93fe087
Binary files /dev/null and
b/sw/qa/extras/layout/data/2024-01-19_merged-cells-on-separate-pages-vertical-alignement.odt
differ
diff --git a/sw/qa/extras/layout/layout3.cxx b/sw/qa/extras/layout/layout3.cxx
index 7304935c0189..1ae46f34b8ea 100644
--- a/sw/qa/extras/layout/layout3.cxx
+++ b/sw/qa/extras/layout/layout3.cxx
@@ -292,6 +292,72 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3,
testSectionPageBreaksWithNestedSectionWith
}
}
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf159029)
+{
+
createSwDoc("2024-01-19_merged-cells-on-separate-pages-vertical-alignement.odt");
+
+ {
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc,
"/root/page[1]/body/tab[1]/row[1]/cell[2]/infos/bounds", "top",
+ u"1970"_ustr);
+ assertXPath(pXmlDoc,
"/root/page[1]/body/tab[1]/row[1]/cell[2]/txt[1]/infos/bounds", "top",
+ u"1970"_ustr);
+ discardDumpedLayout();
+ }
+
+ // set vert orient
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->GotoTable("Table1");
+ pWrtShell->Right(SwCursorSkipMode::Cells, /*bSelect=*/false, 1,
/*bBasicCall=*/false);
+ pWrtShell->SetBoxAlign(css::text::VertOrientation::BOTTOM);
+
+ {
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc,
"/root/page[1]/body/tab[1]/row[1]/cell[2]/infos/bounds", "top",
+ u"1970"_ustr);
+ assertXPath(pXmlDoc,
"/root/page[1]/body/tab[1]/row[1]/cell[2]/txt[1]/infos/bounds", "top",
+ u"15494"_ustr);
+ discardDumpedLayout();
+ }
+
+ // delete
+ pWrtShell->SttEndDoc(true);
+ pWrtShell->DelRight();
+
+ {
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc,
"/root/page[1]/body/tab[1]/row[1]/cell[2]/infos/bounds", "top",
+ u"1694"_ustr);
+ // the problem was that this moved to the top of the cell
+ assertXPath(pXmlDoc,
"/root/page[1]/body/tab[1]/row[1]/cell[2]/txt[1]/infos/bounds", "top",
+ u"15494"_ustr);
+ discardDumpedLayout();
+ }
+
+ pWrtShell->Undo();
+
+ {
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc,
"/root/page[1]/body/tab[1]/row[1]/cell[2]/infos/bounds", "top",
+ u"1970"_ustr);
+ // the problem was that this moved to the top of the cell
+ assertXPath(pXmlDoc,
"/root/page[1]/body/tab[1]/row[1]/cell[2]/txt[1]/infos/bounds", "top",
+ u"15494"_ustr);
+ discardDumpedLayout();
+ }
+
+ pWrtShell->Redo();
+
+ {
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc,
"/root/page[1]/body/tab[1]/row[1]/cell[2]/infos/bounds", "top",
+ u"1694"_ustr);
+ assertXPath(pXmlDoc,
"/root/page[1]/body/tab[1]/row[1]/cell[2]/txt[1]/infos/bounds", "top",
+ u"15494"_ustr);
+ discardDumpedLayout();
+ }
+}
+
CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf137523)
{
createSwDoc("tdf137523-1-min.fodt");
diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx
index c88099b31caf..2e9c088c3a40 100644
--- a/sw/source/core/layout/tabfrm.cxx
+++ b/sw/source/core/layout/tabfrm.cxx
@@ -182,6 +182,22 @@ void SwTabFrame::RegistFlys()
}
}
+static void InvalidateVertOrientCells(SwRowFrame & rRow)
+{
+ for (SwFrame * pLower{rRow.Lower()}; pLower != nullptr; pLower =
pLower->GetNext())
+ {
+ SwCellFrame * pCell{static_cast<SwCellFrame *>(pLower)};
+ if (pCell->GetLayoutRowSpan() != 1)
+ {
+ pCell = const_cast<SwCellFrame
*>(&pCell->FindStartEndOfRowSpanCell(true));
+ }
+ if (pCell->GetFormat()->GetVertOrient().GetVertOrient() !=
text::VertOrientation::NONE)
+ { // tdf#159029 force repositioning of content in cell because it
+ pCell->InvalidatePrt(); // was disabled by SetRebuildLastLine()
+ }
+ }
+}
+
static void SwInvalidateAll( SwFrame *pFrame, tools::Long nBottom );
static void lcl_RecalcRow( SwRowFrame& rRow, tools::Long nBottom );
static bool lcl_ArrangeLowers( SwLayoutFrame *pLay, tools::Long lYStart, bool
bInva );
@@ -846,6 +862,7 @@ static bool lcl_RecalcSplitLine( SwRowFrame& rLastLine,
SwRowFrame& rFollowLine,
// Everything looks fine. Splitting seems to be successful. We
invalidate
// rFollowLine to force a new formatting.
::SwInvalidateAll( &rFollowLine, LONG_MAX );
+ InvalidateVertOrientCells(rLastLine);
}
else
{
@@ -2574,6 +2591,7 @@ void SwTabFrame::MakeAll(vcl::RenderContext*
pRenderContext)
::SwInvalidateAll( pLastLine, LONG_MAX );
SetRebuildLastLine( true );
lcl_RecalcRow(*static_cast<SwRowFrame*>(pLastLine), LONG_MAX);
+
InvalidateVertOrientCells(*static_cast<SwRowFrame *>(pLastLine));
SetRebuildLastLine( false );
}
commit 6ef22b387d0517734c9d0740049efde15572e8a6
Author: Michael Stahl <[email protected]>
AuthorDate: Thu Jan 30 18:36:42 2025 +0100
Commit: Michael Stahl <[email protected]>
CommitDate: Wed Feb 5 13:43:31 2025 +0100
tdf#158221 sw: fix performance disaster in SwInsertBookmarkDlg
Moving the shell cursor without Start/EndAction results in formatting
and repainting for every bookmark :(
(regression from commit aa6ec3f79607478213272283b7eb17ec2116173c)
Change-Id: I2eb77a7a6aa48a1f218957245d75399bddb594ff
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180965
Tested-by: Jenkins
Reviewed-by: Michael Stahl <[email protected]>
(cherry picked from commit 163ddd7a841fc4ee2b4a79a5ec5e5635bcc0cbc2)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180983
Reviewed-by: Adolfo Jayme Barrientos <[email protected]>
(cherry picked from commit 5e85d816db0e6c4bf31bdfa84faf0507f277e617)
diff --git a/sw/source/ui/misc/bookmark.cxx b/sw/source/ui/misc/bookmark.cxx
index 6431809c9569..947c9aec00ae 100644
--- a/sw/source/ui/misc/bookmark.cxx
+++ b/sw/source/ui/misc/bookmark.cxx
@@ -345,6 +345,7 @@ void SwInsertBookmarkDlg::PopulateTable()
m_aTableBookmarks.clear();
m_xBookmarksBox->clear();
+ m_rSh.StartAllAction();
IDocumentMarkAccess* const pMarkAccess = m_rSh.getIDocumentMarkAccess();
for (IDocumentMarkAccess::const_iterator_t ppBookmark =
pMarkAccess->getBookmarksBegin();
ppBookmark != pMarkAccess->getBookmarksEnd(); ++ppBookmark)
@@ -355,6 +356,7 @@ void SwInsertBookmarkDlg::PopulateTable()
m_aTableBookmarks.emplace_back(*ppBookmark,
(*ppBookmark)->GetName());
}
}
+ m_rSh.EndAllAction();
m_nLastBookmarksCount = pMarkAccess->getBookmarksCount();
}
commit f354480e8d3e02680862c87154e594f4f564903a
Author: Michael Stahl <[email protected]>
AuthorDate: Thu Jan 30 15:06:34 2025 +0100
Commit: Michael Stahl <[email protected]>
CommitDate: Wed Feb 5 13:43:31 2025 +0100
(tdf#159377 related) sw: fix undo of table pasted in middle of paragraph
The problem is that the !bCanMoveBack path doesn't work if the insert
position's content index isn't 0.
(regression from commit fcd4222d36e1864452163e5c94976eea353bbaf0)
Change-Id: I746db2187ab8f2e24eb694dc94d7eea9f50e2d9f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180948
Tested-by: Jenkins
Reviewed-by: Michael Stahl <[email protected]>
(cherry picked from commit 3227660e55416254463234f35a43268b9b4c2c9e)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180964
Reviewed-by: Adolfo Jayme Barrientos <[email protected]>
(cherry picked from commit d7a0bc8c8d2d2e4fa4c6e2e29e2de09ea9bb56a6)
diff --git a/sw/qa/extras/uiwriter/uiwriter9.cxx
b/sw/qa/extras/uiwriter/uiwriter9.cxx
index b4d8e6662351..0ee6d2216ff4 100644
--- a/sw/qa/extras/uiwriter/uiwriter9.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter9.cxx
@@ -114,6 +114,39 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf159377)
CPPUNIT_ASSERT_EQUAL(SwNodeOffset(28), pDoc->GetNodes().Count());
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testPasteTableInMiddleOfParagraph)
+{
+ createSwDoc();
+
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+
+ SwInsertTableOptions aTableOptions(SwInsertTableFlags::DefaultBorder, 0);
+ pWrtShell->InsertTable(aTableOptions, /*nRows=*/2, /*nCols=*/2);
+ pWrtShell->MoveTable(GotoPrevTable, fnTableStart);
+
+ dispatchCommand(mxComponent, u".uno:SelectTable"_ustr, {});
+ dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
+
+ pWrtShell->Undo();
+
+ pWrtShell->Insert(u"AB"_ustr);
+
+ pWrtShell->Left(SwCursorSkipMode::Chars, /*bSelect=*/false, 1,
/*bBasicCall=*/false);
+
+ dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
+
+ pWrtShell->Undo();
+
+ // the problem was that the A was missing
+ CPPUNIT_ASSERT_EQUAL(OUString("AB"),
+
pWrtShell->GetCursor()->GetPointNode().GetTextNode()->GetText());
+
+ pWrtShell->Redo();
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT_EQUAL(OUString("AB"),
+
pWrtShell->GetCursor()->GetPointNode().GetTextNode()->GetText());
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf159049)
{
// The document contains a shape which has a text with a line break. When
copying the text to
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx
b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index 55daad4e0f03..06d3f606df26 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -5071,7 +5071,9 @@ bool
DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo
// Note this doesn't just check IsStartNode() because SwDoc::AppendDoc()
// intentionally sets it to the body start node, perhaps it should just
// call SplitNode instead?
- if (!pStt->GetNode().IsSectionNode() && !pStt->GetNode().IsTableNode())
+ if ((!pStt->GetNode().IsSectionNode() && !pStt->GetNode().IsTableNode())
+ || (pCopyPam->GetPoint()->GetContentIndex() != 0 // also if node will
split
+ && pCopyPam->GetPoint()->GetContentIndex() !=
pCopyPam->GetPoint()->GetNode().GetContentNode()->Len()))
{
bCanMoveBack = pCopyPam->Move(fnMoveBackward, GoInContent);
}
@@ -5273,7 +5275,7 @@ bool
DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo
--aRg.aEnd;
}
}
- assert(!bCanMoveBack);
+ assert((nDeleteTextNodes.get() != 0) == bCanMoveBack);
}
pDestTextNd = aInsPos.GetNode().GetTextNode();
commit d3ac5fbc5e43a2847a173301f7f46cc29b773507
Author: Michael Stahl <[email protected]>
AuthorDate: Thu Jan 30 14:47:01 2025 +0100
Commit: Michael Stahl <[email protected]>
CommitDate: Wed Feb 5 13:43:31 2025 +0100
tdf#159377 sw: fix undo of paste table into footnote
Tables aren't allowed in footnotes, hence pasting a table into a
footnote will paste only the text nodes in the cells but not the table
nodes.
This code isn't prepared for this situation, so the adjustment of the
position doesn't happen.
if (pCopyPam->GetPoint()->GetNode().IsStartNode())
pCopyPam->GetPoint()->Adjust(SwNodeOffset(-1));
But then the corresponding adjustment in SwUndoInserts::SetInsertRange()
does happen and the stored start node index is wrong.
It looks like both of these adjustments can simply be removed.
(regression from commit fcd4222d36e1864452163e5c94976eea353bbaf0)
Change-Id: Ib419b29da552cf1df7150178924c45e3743cd7d9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180947
Reviewed-by: Michael Stahl <[email protected]>
Tested-by: Jenkins
(cherry picked from commit 3bbbe366e455f1b165f2f913fffd27f3a0e03a2d)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180958
Reviewed-by: Adolfo Jayme Barrientos <[email protected]>
(cherry picked from commit 4f8ba5de916e18e7ae8daf67c7f72fa69d394ad0)
diff --git a/sw/qa/extras/uiwriter/uiwriter9.cxx
b/sw/qa/extras/uiwriter/uiwriter9.cxx
index be341f700cc3..b4d8e6662351 100644
--- a/sw/qa/extras/uiwriter/uiwriter9.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter9.cxx
@@ -27,6 +27,7 @@
#include <wrtsh.hxx>
#include <unotxdoc.hxx>
#include <ndtxt.hxx>
+#include <itabenum.hxx>
#include <toxmgr.hxx>
#include <IDocumentFieldsAccess.hxx>
#include <IDocumentLayoutAccess.hxx>
@@ -73,6 +74,46 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf158785)
CPPUNIT_ASSERT_EQUAL(IsAttrAtPos::NONE, aContentAtPos.eContentAtPos);
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf159377)
+{
+ createSwDoc();
+
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+
+ SwInsertTableOptions aTableOptions(SwInsertTableFlags::DefaultBorder, 0);
+ pWrtShell->InsertTable(aTableOptions, /*nRows=*/2, /*nCols=*/2);
+ pWrtShell->MoveTable(GotoPrevTable, fnTableStart);
+
+ dispatchCommand(mxComponent, u".uno:SelectTable"_ustr, {});
+ dispatchCommand(mxComponent, u".uno:Copy"_ustr, {});
+
+ pWrtShell->InsertFootnote(u""_ustr);
+ CPPUNIT_ASSERT(pWrtShell->IsCursorInFootnote());
+
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(28), pDoc->GetNodes().Count());
+
+ dispatchCommand(mxComponent, u".uno:Paste"_ustr, {});
+
+ // this pasted the 4 text nodes in the table, but no table nodes
+ // as currently tables aren't allowed in footnotes
+
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(32), pDoc->GetNodes().Count());
+
+ pWrtShell->Undo();
+
+ // problem was that this was 29 with an extra text node in the footnote
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(28), pDoc->GetNodes().Count());
+
+ pWrtShell->Redo();
+
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(32), pDoc->GetNodes().Count());
+
+ pWrtShell->Undo();
+
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(28), pDoc->GetNodes().Count());
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf159049)
{
// The document contains a shape which has a text with a line break. When
copying the text to
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx
b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index 234d73aecb05..55daad4e0f03 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -5478,11 +5478,6 @@ bool
DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo
{
// Reset the offset to 0 as it was before the insertion
pCopyPam->GetPoint()->Adjust(SwNodeOffset(+1));
-
- // If the next node is a start node, then step back: SetInsertRange()
- // will add 1 in this case, but that is too much...
- if (pCopyPam->GetPoint()->GetNode().IsStartNode())
- pCopyPam->GetPoint()->Adjust(SwNodeOffset(-1));
}
oInsContentIndex.reset();
pCopyPam->Exchange();
diff --git a/sw/source/core/undo/untblk.cxx b/sw/source/core/undo/untblk.cxx
index c8967178c29a..f8b3f2c59b47 100644
--- a/sw/source/core/undo/untblk.cxx
+++ b/sw/source/core/undo/untblk.cxx
@@ -128,10 +128,6 @@ void SwUndoInserts::SetInsertRange( const SwPaM& rPam,
bool bScanFlys,
m_nSttContent = pTmpPos->GetContentIndex();
m_nDeleteTextNodes = nDeleteTextNodes;
- if (m_nDeleteTextNodes == SwNodeOffset(0)) // if a table selection is
added...
- {
- ++m_nSttNode; // ... then the CopyPam is not fully correct
- }
}
// Fill m_FlyUndos with flys anchored to first and last paragraphs
commit 0dfaaabb93ceecf263aaf231422d34479817786e
Author: Michael Stahl <[email protected]>
AuthorDate: Wed Jan 29 19:54:14 2025 +0100
Commit: Michael Stahl <[email protected]>
CommitDate: Wed Feb 5 13:43:31 2025 +0100
tdf#158867 offapi,i18npool,starmath: fix "," in Math again
This is essentially the same bug that was fixed in commit
2caa9d7ddcff3f6e380c306b737e9b5e9cdaf4c2 "Resolves: tdf#127873 accept
',' comma group separator in number entities again".
The problem is that sw wants to recognize group separators only if there
are 3 digits following so it really looks like a number (see bug
tdf#42518), but starmath really wants to recognize either comma or dot
as a decimal separator and uses the GROUP_SEPARATOR_IN_NUMBER as a hack
to get this behaviour, so the same parser can work in any locale.
Introduce new constant GROUP_SEPARATOR_IN_NUMBER_3 so that sw and
starmath can request different parsing.
sc/source/core/tool/compiler.cxx also uses GROUP_SEPARATOR_IN_NUMBER and
it's unclear to me what is desired there, but there are no known
regression reports so leave the behaviour there unchanged.
(regression from commit 1bd9a51b826015746069fcc0d02a30a2ddc7e7f5)
Change-Id: Icb7662f26d89677cf84ccad07a2ea4c380587ab4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180920
Tested-by: Jenkins
Reviewed-by: Michael Stahl <[email protected]>
(cherry picked from commit ff16c4e3f27efc0fc9ed734b19ae778482566cdb)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180956
Reviewed-by: Eike Rathke <[email protected]>
(cherry picked from commit 055b637ed9bdd02cd857664813a66afde51dfd0a)
diff --git a/i18npool/source/characterclassification/cclass_unicode_parser.cxx
b/i18npool/source/characterclassification/cclass_unicode_parser.cxx
index 9ed95e2f907a..97fae9518adc 100644
--- a/i18npool/source/characterclassification/cclass_unicode_parser.cxx
+++ b/i18npool/source/characterclassification/cclass_unicode_parser.cxx
@@ -23,6 +23,7 @@
#include <rtl/character.hxx>
#include <rtl/math.hxx>
#include <rtl/ustring.hxx>
+#include <sal/log.hxx>
#include <com/sun/star/i18n/KParseTokens.hpp>
#include <com/sun/star/i18n/KParseType.hpp>
#include <com/sun/star/i18n/LocaleData2.hpp>
@@ -441,7 +442,11 @@ void cclass_Unicode::initParserTable( const Locale&
rLocale, sal_Int32 startChar
cDecimalSepAlt = aItem.decimalSeparatorAlternative.toChar();
}
- if (nContTypes & KParseTokens::GROUP_SEPARATOR_IN_NUMBER)
+ SAL_WARN_IF((nContTypes & KParseTokens::GROUP_SEPARATOR_IN_NUMBER)
+ && (nContTypes & KParseTokens::GROUP_SEPARATOR_IN_NUMBER_3),
+ "i18npool", "only one GROUP_SEPARATOR_IN_NUMBER* should be used");
+ if (nContTypes & KParseTokens::GROUP_SEPARATOR_IN_NUMBER
+ || nContTypes & KParseTokens::GROUP_SEPARATOR_IN_NUMBER_3)
{
if ( cGroupSep < nDefCnt )
pTable[cGroupSep] |= ParserFlags::VALUE;
@@ -827,13 +832,20 @@ void cclass_Unicode::parseText( ParseResult& r, const
OUString& rText, sal_Int32
{
if (current == cGroupSep)
{
- // accept only if it is followed by 3 digits
+ // depending or requested nContTypes, accept only if
+ // it is followed by 3 digits
sal_Int32 tempIndex(index);
sal_uInt32 const nextChar2((tempIndex <
rText.getLength()) ? rText.iterateCodePoints(&tempIndex) : 0);
sal_uInt32 const nextChar3((tempIndex <
rText.getLength()) ? rText.iterateCodePoints(&tempIndex) : 0);
- if (getFlags(nextChar, eState) &
ParserFlags::VALUE_DIGIT
+ if ((nContTypes &
KParseTokens::GROUP_SEPARATOR_IN_NUMBER_3)
+ && getFlags(nextChar, eState) &
ParserFlags::VALUE_DIGIT
&& getFlags(nextChar2, eState) &
ParserFlags::VALUE_DIGIT
&& getFlags(nextChar3, eState) &
ParserFlags::VALUE_DIGIT)
+ {
+ nParseTokensType |=
KParseTokens::GROUP_SEPARATOR_IN_NUMBER_3;
+ }
+ else if ((nContTypes &
KParseTokens::GROUP_SEPARATOR_IN_NUMBER_3) == 0
+ && getFlags(nextChar, eState) &
ParserFlags::VALUE_DIGIT)
{
nParseTokensType |=
KParseTokens::GROUP_SEPARATOR_IN_NUMBER;
}
diff --git a/offapi/com/sun/star/i18n/KParseTokens.idl
b/offapi/com/sun/star/i18n/KParseTokens.idl
index f06b9861d6df..bb04c251d82c 100644
--- a/offapi/com/sun/star/i18n/KParseTokens.idl
+++ b/offapi/com/sun/star/i18n/KParseTokens.idl
@@ -93,6 +93,13 @@ published constants KParseTokens
/// Unicode (above 127) other number
const long UNI_OTHER_NUMBER = 0x00080000;
+ /** The same as GROUP_SEPARATOR_IN_NUMBER, but require <em>3</em>
+ digits following the group separator.
+
+ @since LibreOffice 25.2
+ */
+ const long GROUP_SEPARATOR_IN_NUMBER_3 = 0x04000000;
+
/** If this bit is set in <em>nContCharFlags</em> parameters, the
locale's group separator characters in numbers are accepted and
ignored/skipped. Else a group separator in a number ends the
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 3f45f8c7041c..371407ca5c04 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -779,7 +779,7 @@ struct Convention_A1 : public ScCompiler::Convention
static constexpr OUString aAddAllowed(u"?#"_ustr);
return pCharClass->parseAnyToken( rFormula,
nSrcPos, nStartFlags, aAddAllowed,
- (bGroupSeparator ? nContFlags |
KParseTokens::GROUP_SEPARATOR_IN_NUMBER : nContFlags),
+ (bGroupSeparator ? nContFlags |
KParseTokens::GROUP_SEPARATOR_IN_NUMBER_3 : nContFlags),
aAddAllowed );
}
@@ -1404,7 +1404,7 @@ struct ConventionXL_A1 : public Convention_A1, public
ConventionXL
static constexpr OUString aAddAllowed(u"?!"_ustr);
return pCharClass->parseAnyToken( rFormula,
nSrcPos, nStartFlags, aAddAllowed,
- (bGroupSeparator ? nContFlags |
KParseTokens::GROUP_SEPARATOR_IN_NUMBER : nContFlags),
+ (bGroupSeparator ? nContFlags |
KParseTokens::GROUP_SEPARATOR_IN_NUMBER_3 : nContFlags),
aAddAllowed );
}
@@ -1749,7 +1749,7 @@ struct ConventionXL_R1C1 : public ScCompiler::Convention,
public ConventionXL
return pCharClass->parseAnyToken( rFormula,
nSrcPos, nStartFlags, aAddAllowed,
- (bGroupSeparator ? nContFlags |
KParseTokens::GROUP_SEPARATOR_IN_NUMBER : nContFlags),
+ (bGroupSeparator ? nContFlags |
KParseTokens::GROUP_SEPARATOR_IN_NUMBER_3 : nContFlags),
aAddAllowed );
}
diff --git a/sw/source/core/bastyp/calc.cxx b/sw/source/core/bastyp/calc.cxx
index 0c9643317a4e..e492b527ca7c 100644
--- a/sw/source/core/bastyp/calc.cxx
+++ b/sw/source/core/bastyp/calc.cxx
@@ -153,7 +153,7 @@ const sal_Int32 coStartFlags =
// Continuing characters may be any alphanumeric, underscore, or dot.
const sal_Int32 coContFlags =
- (coStartFlags | i18n::KParseTokens::ASC_DOT |
i18n::KParseTokens::GROUP_SEPARATOR_IN_NUMBER)
+ (coStartFlags | i18n::KParseTokens::ASC_DOT |
i18n::KParseTokens::GROUP_SEPARATOR_IN_NUMBER_3)
& ~i18n::KParseTokens::IGNORE_LEADING_WS;
extern "C" {
commit f8005649041fa8eb7500992a8a1803afcf031894
Author: Michael Stahl <[email protected]>
AuthorDate: Wed Jan 29 17:36:41 2025 +0100
Commit: Michael Stahl <[email protected]>
CommitDate: Wed Feb 5 13:43:31 2025 +0100
tdf#156348 sw: fix crash on converting text to table with SwSetExpField
The problem is that the table node only gets a SwFrameFormat assigned at
the end of the operation after all the nodes have been split etc., and
moving a field into a newly split node calls
sw::FindNeighbourFrameForNode() which needs to handle table node without
SwFrameFormat now when going backwards (not when going forwards because
the table node is always before the nodes in the table).
(regression from commit 9dc6e2c9062725ef1f9d7e321cae5f4dbe8ca749)
Change-Id: Ia0c1f7d7b14f525aa8de4a2b6492c39b59f31052
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180914
Reviewed-by: Michael Stahl <[email protected]>
Tested-by: Jenkins
(cherry picked from commit b5967157b37904219865fd847b20938b3ccfbd72)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180919
Reviewed-by: Adolfo Jayme Barrientos <[email protected]>
(cherry picked from commit 23d225dac8f717bea8e960e4c2130963db7f3920)
diff --git a/sw/source/core/docnode/node2lay.cxx
b/sw/source/core/docnode/node2lay.cxx
index 312ce2dff440..3efaea7f08ff 100644
--- a/sw/source/core/docnode/node2lay.cxx
+++ b/sw/source/core/docnode/node2lay.cxx
@@ -115,7 +115,12 @@ static SwNode* GoPreviousWithFrame(SwNodeIndex *pIdx,
SwFlowFrame const**const p
// frame as the caller's one
pFound = SwIterator<SwFrame, SwContentNode,
sw::IteratorMode::UnwrapMulti>(*static_cast<SwContentNode*>(pNd)).First();
else if ( pNd->IsTableNode() )
- pFound =
SwIterator<SwFrame,SwFormat>(*static_cast<SwTableNode*>(pNd)->GetTable().GetFrameFormat()).First();
+ {
+ if (SwFrameFormat *const
pFormat{static_cast<SwTableNode*>(pNd)->GetTable().GetFrameFormat()})
+ {
+ pFound = SwIterator<SwFrame,SwFormat>(*pFormat).First();
+ }
+ }
else if( pNd->IsStartNode() && !pNd->IsSectionNode() )
{
pNd = nullptr;
commit 95cb316e4c7a595fe394da45cd18a5c35402ec5e
Author: Michael Stahl <[email protected]>
AuthorDate: Thu Jan 23 20:07:42 2025 +0100
Commit: Michael Stahl <[email protected]>
CommitDate: Wed Feb 5 13:43:31 2025 +0100
sw: layout: fix bad split table resulting in empty cell
The problem is that the table goes into an infinite loop of splitting
and joining, because there is a temporarily negative PrtArea height in
the top row's cells (-170), because of setting all heights to 0.
This causes an inconsistency where it is first joined because in
ShouldBwdMoved() another line of text in the right column cell can move
backward, but then there isn't enough space for another row as the
negative cell PrtArea height is added to the available space and so the
line won't fit in SwTextFrameBreak::IsInside(); the same situation
occurs until a "Looping Louie" aborts the iteration with a bad result.
This is somehow caused by the hidden section following the table, but
not sure how exactly (the "if (pNxt->IsHiddenNow()) bCalcNxt = false"
suspect code was actually added in a later commit).
Prevent it by preventing negative PrtArea heights.
(regression from commit 0c96119895b347f8eb5bb89f393351bd3c02b9f1)
Change-Id: I36ce8a8bf750cf407cece5ad3cc23374182179de
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180719
Tested-by: Jenkins
Reviewed-by: Michael Stahl <[email protected]>
(cherry picked from commit 225ce4b678f5f0241bf3757d9ab7e5223866c431)
diff --git a/sw/qa/extras/layout/data/table-split-bug.fodt
b/sw/qa/extras/layout/data/table-split-bug.fodt
new file mode 100644
index 000000000000..935899af2a82
--- /dev/null
+++ b/sw/qa/extras/layout/data/table-split-bug.fodt
@@ -0,0 +1,440 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:officeooo="http://openoffice.org/2009/office"
xmlns:css3t="http://www.w3.org/TR/css3-text/"
xmlns:grddl="http://www.w3.org/2003/g/data-view#"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
xmlns:rpt="http://openoffice.org/2005/report"
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2"
xmlns:dc="http://purl.org/dc/eleme
nts/1.1/" xmlns:ooo="http://openoffice.org/2004/office"
xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0"
xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0"
xmlns:drawooo="http://openoffice.org/2010/draw"
xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0"
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
xmlns:ooow="http://openoffice.org/2004/writer"
xmlns:oooc="http://openoffice.org/2004/calc"
xmlns:tableooo="http://openoffice.org/2009/table"
xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0"
xmlns:math="http://www.w3.org/1998/Math/MathML"
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0
" xmlns:dom="http://www.w3.org/2001/xml-events"
xmlns:xforms="http://www.w3.org/2002/xforms" office:version="1.2"
office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ViewAreaTop"
config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaLeft"
config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaWidth"
config:type="long">21987</config:config-item>
+ <config:config-item config:name="ViewAreaHeight"
config:type="long">17704</config:config-item>
+ <config:config-item config:name="ShowRedlineChanges"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="InBrowseMode"
config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId"
config:type="string">view2</config:config-item>
+ <config:config-item config:name="ViewLeft"
config:type="long">3401</config:config-item>
+ <config:config-item config:name="ViewTop"
config:type="long">11201</config:config-item>
+ <config:config-item config:name="VisibleLeft"
config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleTop"
config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleRight"
config:type="long">21985</config:config-item>
+ <config:config-item config:name="VisibleBottom"
config:type="long">17702</config:config-item>
+ <config:config-item config:name="ZoomType"
config:type="short">3</config:config-item>
+ <config:config-item config:name="ViewLayoutColumns"
config:type="short">0</config:config-item>
+ <config:config-item config:name="ViewLayoutBookMode"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ZoomFactor"
config:type="short">84</config:config-item>
+ <config:config-item config:name="IsSelectedFrame"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy"
config:type="boolean">true</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="PrintProspect"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintReversed"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintSingleJobs"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintLeftPages"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintTables"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintControls"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintPageBackground"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintDrawings"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintBlackFonts"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintAnnotationMode"
config:type="short">0</config:config-item>
+ <config:config-item config:name="PrintTextPlaceholder"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ProtectFields"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectBookmarks"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmptyDbFieldHidesPara"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DisableOffPagePositioning"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SubtractFlysAnchoredAtFlys"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PropLineSpacingShrinksFirstLine"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyParagraphMarkFormatToNumbering"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TreatSingleColumnBreakAsPageBreak"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedSystemFonts"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedAsianScriptFonts"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ContinuousEndnotes"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedFonts"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClippedPictures"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FloattableNomargins"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnbreakableNumberings"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HeaderSpacingBelowLastPara"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AllowPrintJobCancel"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldPrinterMetrics"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverMargin"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabsRelativeToIndent"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldNumbering"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InvertBorderSpacing"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintPaperFromSetup"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UpdateFromTemplate"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommandType"
config:type="int">0</config:config-item>
+ <config:config-item config:name="LinkUpdateMode"
config:type="short">1</config:config-item>
+ <config:config-item config:name="AddParaSpacingToTableCells"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommand"
config:type="string">ADRESSEN</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout"
config:type="string">high-resolution</config:config-item>
+ <config:config-item config:name="ApplyUserData"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintFaxName" config:type="string"/>
+ <config:config-item config:name="CurrentDatabaseDataSource"
config:type="string">Adreßbuch</config:config-item>
+ <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveThumbnail"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerTextWrapping"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddExternalLeading"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaTableSpacing"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="StylesNoDefault"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ChartAutoUpdate"
config:type="boolean">true</config:config-item>
+ <config:config-item-map-indexed config:name="ForbiddenCharacters">
+ <config:config-item-map-entry>
+ <config:config-item config:name="Language"
config:type="string">de</config:config-item>
+ <config:config-item config:name="Country"
config:type="string">DE</config:config-item>
+ <config:config-item config:name="Variant" config:type="string"/>
+ <config:config-item config:name="BeginLine" config:type="string"/>
+ <config:config-item config:name="EndLine" config:type="string"/>
+ </config:config-item-map-entry>
+ <config:config-item-map-entry>
+ <config:config-item config:name="Language"
config:type="string">en</config:config-item>
+ <config:config-item config:name="Country"
config:type="string">US</config:config-item>
+ <config:config-item config:name="Variant" config:type="string"/>
+ <config:config-item config:name="BeginLine" config:type="string"/>
+ <config:config-item config:name="EndLine" config:type="string"/>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ <config:config-item config:name="AddParaTableSpacingAtStart"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="Rsid"
config:type="int">15857532</config:config-item>
+ <config:config-item config:name="EmbeddedDatabaseName"
config:type="string"/>
+ <config:config-item config:name="FieldAutoUpdate"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="OutlineLevelYieldsNumbering"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AlignTabStopPosition"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="CharacterCompressionType"
config:type="short">0</config:config-item>
+ <config:config-item config:name="SaveGlobalDocumentLinks"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterPaperFromSetup"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerLineSpacing"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaLineSpacingToTableCells"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerObjectPositioning"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintGraphics"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SurroundTextWrapSmall"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ConsiderTextWrapOnObjPos"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompTrailingBlanks"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabAtLeftIndentForParagraphsInList"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintRightPages"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IgnoreFirstLineIndentInNumbering"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="RedlineProtectionKey"
config:type="base64Binary"/>
+ <config:config-item config:name="DoNotJustifyLinesWithManualBreak"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintProspectRTL"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintEmptyPages"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DoNotResetParaAttrsForNumFont"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddFrameOffsets"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LoadReadonly"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotCaptureDrawObjsOnPage"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddVerticalFrameOffsets"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnxForceZeroExtLeading"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsLabelDocument"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TableRowKeep"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RsidRoot"
config:type="int">691202</config:config-item>
+ <config:config-item config:name="PrintHiddenText"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectForm"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompMinLineHeightByFly"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="BackgroundParaOverDrawings"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MathBaselineAlignment"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SmallCapsPercentage66"
config:type="boolean">true</config:config-item>
+ <config:config-item config:name="CollapseEmptyCellPara"
config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverflow"
config:type="boolean">false</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:font-face-decls>
+ <style:font-face style:name="Arial" svg:font-family="Arial"
style:font-pitch="variable"/>
+ <style:font-face style:name="Arial Unicode MS" svg:font-family="'Arial
Unicode MS'" style:font-pitch="variable"/>
+ <style:font-face style:name="HG Mincho Light J" svg:font-family="'HG Mincho
Light J'" style:font-pitch="variable"/>
+ <style:font-face style:name="Thorndale" svg:font-family="Thorndale"
style:font-family-generic="roman" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <draw:gradient draw:name="gradient" draw:style="linear"
draw:start-color="#000000" draw:end-color="#ffffff" draw:start-intensity="100%"
draw:end-intensity="100%" draw:angle="0" draw:border="0%"/>
+ <draw:hatch draw:name="hatch" draw:style="single" draw:color="#3465a4"
draw:distance="0.02cm" draw:rotation="0"/>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#808080"
draw:fill-color="#cfe7f5" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm"
draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm"
draw:start-line-spacing-vertical="0.283cm"
draw:end-line-spacing-horizontal="0.283cm"
draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="true"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha"
style:line-break="strict" style:writing-mode="lr-tb"
style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties fo:color="#000000" style:font-name="Thorndale"
fo:font-size="12pt" fo:language="de" fo:country="DE" style:font-name-asian="HG
Mincho Light J" style:font-size-asian="12pt" style:language-asian="zxx"
style:country-asian="none" style:font-name-complex="Arial Unicode MS"
style:font-size-complex="12pt" style:language-complex="zxx"
style:country-complex="none"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:hyphenation-ladder-count="no-limit"
style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging"
style:line-break="strict" style:tab-stop-distance="1.27cm"
style:writing-mode="lr-tb"/>
+ <style:text-properties fo:color="#000000" style:font-name="Thorndale"
fo:font-size="12pt" fo:language="de" fo:country="DE" style:font-name-asian="HG
Mincho Light J" style:font-size-asian="12pt" style:language-asian="zxx"
style:country-asian="none" style:font-name-complex="Arial Unicode MS"
style:font-size-complex="12pt" style:language-complex="zxx"
style:country-complex="none" fo:hyphenate="false"
fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"
loext:hyphenation-no-caps="false"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="separating"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="always"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph"
style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm"
loext:contextual-spacing="false"/>
+ <style:text-properties style:font-name="Arial" fo:font-family="Arial"
style:font-pitch="variable" fo:font-weight="350"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body"
style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm"
loext:contextual-spacing="false" fo:hyphenation-ladder-count="no-limit"/>
+ <style:text-properties style:font-name="Arial" fo:font-family="Arial"
style:font-pitch="variable" fo:hyphenate="true"
fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"
loext:hyphenation-no-caps="false"/>
+ </style:style>
+ <style:style style:name="Footer" style:family="paragraph"
style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties>
+ <style:tab-stops>
+ <style:tab-stop style:position="8.5cm" style:type="center"/>
+ <style:tab-stop style:position="17.002cm" style:type="right"/>
+ </style:tab-stops>
+ </style:paragraph-properties>
+ </style:style>
+ <style:style style:name="Table_20_Contents" style:display-name="Table
Contents" style:family="paragraph" style:parent-style-name="Text_20_body"
style:class="extra">
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm"
fo:margin-top="0cm" fo:margin-bottom="0cm" loext:contextual-spacing="false"
fo:text-indent="0cm" style:auto-text-indent="false"/>
+ </style:style>
+ <style:style style:name="TVS_20_Standard" style:display-name="TVS Standard"
style:family="paragraph" style:master-page-name="">
+ <style:paragraph-properties fo:hyphenation-ladder-count="no-limit"
style:page-number="auto"/>
+ <style:text-properties style:font-name="Arial" fo:font-family="Arial"
style:font-pitch="variable" fo:hyphenate="true"
fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4"
loext:hyphenation-no-caps="false"/>
+ </style:style>
+ <style:style style:name="TVS_20_KopfzeileFKB_5f_S2" style:display-name="TVS
KopfzeileFKB_S2" style:family="paragraph"
style:parent-style-name="TVS_20_Standard">
+ <style:paragraph-properties fo:text-align="center"
style:justify-single-word="false"/>
+ <style:text-properties fo:font-size="8pt"/>
+ </style:style>
+ <style:style style:name="TVS_20_Anrede" style:display-name="TVS Anrede"
style:family="paragraph" style:parent-style-name="TVS_20_Standard"
style:next-style-name="TVS_20_Freitext">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.42cm"
loext:contextual-spacing="false" fo:line-height="150%"/>
+ </style:style>
+ <style:style style:name="TVS_20_Freitext" style:display-name="TVS Freitext"
style:family="paragraph" style:parent-style-name="TVS_20_Standard">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm"
loext:contextual-spacing="false" fo:line-height="150%" fo:text-align="justify"
style:justify-single-word="false"/>
+ </style:style>
+ <style:style style:name="TVS_20_Betreff" style:display-name="TVS Betreff"
style:family="paragraph" style:parent-style-name="TVS_20_Standard"
style:next-style-name="TVS_20_Anrede" style:master-page-name="">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="1.06cm"
loext:contextual-spacing="false" fo:line-height="150%"
style:page-number="auto"/>
+ <style:text-properties fo:font-weight="bold"/>
+ </style:style>
+ <style:style style:name="Fließtext" style:family="paragraph"
style:parent-style-name="Text_20_body" style:default-outline-level="">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.635cm"
loext:contextual-spacing="false"/>
+ </style:style>
+ <style:style style:name="Footnote_20_Symbol" style:display-name="Footnote
Symbol" style:family="text"/>
+ <style:style style:name="Endnote_20_Symbol" style:display-name="Endnote
Symbol" style:family="text"/>
+ <style:style style:name="TVS_20_Fett" style:display-name="TVS Fett"
style:family="text">
+ <style:text-properties fo:font-weight="bold"/>
+ </style:style>
+ <style:style style:name="Footnote_20_anchor" style:display-name="Footnote
anchor" style:family="text">
+ <style:text-properties style:text-position="super 58%"/>
+ </style:style>
+ <style:style style:name="Endnote_20_anchor" style:display-name="Endnote
anchor" style:family="text">
+ <style:text-properties style:text-position="super 58%"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote"
text:citation-style-name="Footnote_20_Symbol"
text:citation-body-style-name="Footnote_20_anchor"
text:master-page-name="Standard" style:num-format="1" text:start-value="0"
text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote"
text:citation-style-name="Endnote_20_Symbol"
text:citation-body-style-name="Endnote_20_anchor"
text:master-page-name="Endnote" style:num-format="1" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false"
text:offset="0.499cm" style:num-format="1" text:number-position="left"
text:increment="5"/>
+ <style:default-page-layout>
+ <style:page-layout-properties style:writing-mode="lr-tb"
style:layout-grid-standard-mode="true"/>
+ </style:default-page-layout>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="Tabelle19" style:family="table">
+ <style:table-properties style:width="16.302cm" table:align="margins"/>
+ </style:style>
+ <style:style style:name="Tabelle19.A" style:family="table-column">
+ <style:table-column-properties style:column-width="0.504cm"
style:rel-column-width="2028*"/>
+ </style:style>
+ <style:style style:name="Tabelle19.B" style:family="table-column">
+ <style:table-column-properties style:column-width="15.797cm"
style:rel-column-width="63507*"/>
+ </style:style>
+ <style:style style:name="Tabelle19.1" style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:style>
+ <style:style style:name="Tabelle19.A1" style:family="table-cell">
+ <style:table-cell-properties fo:padding-left="0.101cm"
fo:padding-right="0.101cm" fo:padding-top="0.101cm" fo:padding-bottom="0.199cm"
fo:border="none" style:writing-mode="page"/>
+ </style:style>
+ <style:style style:name="P13" style:family="paragraph"
style:parent-style-name="TVS_20_Freitext" style:master-page-name="">
+ <loext:graphic-properties draw:fill-hatch-name="hatch"/>
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm"
loext:contextual-spacing="false" fo:text-align="justify"
style:justify-single-word="false" style:page-number="auto"/>
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P24" style:family="paragraph"
style:parent-style-name="Fließtext">
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm"
fo:margin-top="0cm" fo:margin-bottom="0cm" loext:contextual-spacing="false"
fo:line-height="150%" fo:text-align="start" style:justify-single-word="false"
fo:text-indent="0cm" style:auto-text-indent="false" style:writing-mode="lr-tb"/>
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P26" style:family="paragraph"
style:parent-style-name="Fließtext">
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm"
fo:margin-top="0cm" fo:margin-bottom="0.212cm" loext:contextual-spacing="false"
fo:line-height="150%" fo:text-align="start" style:justify-single-word="false"
fo:text-indent="0cm" style:auto-text-indent="false" style:writing-mode="lr-tb"/>
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P27" style:family="paragraph"
style:parent-style-name="TVS_20_Freitext">
+ <loext:graphic-properties draw:fill="none" draw:fill-hatch-name="hatch"/>
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm"
fo:margin-top="0cm" fo:margin-bottom="0.42cm" loext:contextual-spacing="false"
fo:line-height="150%" fo:text-align="justify" style:justify-single-word="false"
fo:hyphenation-ladder-count="no-limit" fo:text-indent="0cm"
style:auto-text-indent="false" fo:background-color="transparent">
+ <style:tab-stops>
+ <style:tab-stop style:position="0.499cm"/>
+ </style:tab-stops>
+ </style:paragraph-properties>
+ <style:text-properties fo:hyphenate="true"
fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4"
loext:hyphenation-no-caps="false"/>
+ </style:style>
+ <style:style style:name="P28" style:family="paragraph"
style:parent-style-name="Table_20_Contents">
+ <style:paragraph-properties fo:text-align="justify"
style:justify-single-word="false"/>
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P30" style:family="paragraph"
style:parent-style-name="TVS_20_Freitext">
+ <style:paragraph-properties fo:text-align="justify"
style:justify-single-word="false"/>
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P31" style:family="paragraph"
style:parent-style-name="TVS_20_Freitext">
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P37" style:family="paragraph"
style:parent-style-name="TVS_20_Freitext">
+ <loext:graphic-properties draw:fill-gradient-name="gradient"
draw:fill-hatch-name="hatch"/>
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.42cm"
loext:contextual-spacing="false"/>
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P38" style:family="paragraph"
style:parent-style-name="TVS_20_Freitext">
+ <loext:graphic-properties draw:fill-gradient-name="gradient"
draw:fill-hatch-name="hatch"/>
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.42cm"
loext:contextual-spacing="false" fo:text-align="justify"
style:justify-single-word="false"/>
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P39" style:family="paragraph"
style:parent-style-name="TVS_20_Freitext">
+ <loext:graphic-properties draw:fill-gradient-name="gradient"
draw:fill-hatch-name="hatch"/>
+ <style:paragraph-properties fo:margin-top="0.42cm"
fo:margin-bottom="0.42cm" loext:contextual-spacing="false"
fo:text-align="center" style:justify-single-word="false"/>
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P40" style:family="paragraph"
style:parent-style-name="TVS_20_Freitext">
+ <loext:graphic-properties draw:fill-hatch-name="hatch"/>
+ <style:paragraph-properties fo:margin-top="0.42cm" fo:margin-bottom="0cm"
loext:contextual-spacing="false" fo:text-align="justify"
style:justify-single-word="false"/>
+ <style:text-properties style:font-name="Arial"/>
+ </style:style>
+ <style:style style:name="P41" style:family="paragraph"
style:parent-style-name="TVS_20_Freitext" style:master-page-name="">
+ <loext:graphic-properties draw:fill-hatch-name="hatch"/>
+ <style:paragraph-properties fo:margin-top="0.42cm" fo:margin-bottom="0cm"
loext:contextual-spacing="false" fo:text-align="justify"
style:justify-single-word="false" style:page-number="auto"
fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Arial"/>
+ </style:style>
+ <style:style style:name="P46" style:family="paragraph"
style:parent-style-name="TVS_20_Betreff" style:master-page-name="FABrief_5f_S1">
+ <style:paragraph-properties style:page-number="auto"/>
+ </style:style>
+ <style:style style:name="T7" style:family="text">
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold"
style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Sect1" style:family="section">
+ <style:section-properties style:editable="false">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ </style:section-properties>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm"
fo:page-height="29.7cm" style:num-format="1" style:paper-tray-name="[From
printer settings]" style:print-orientation="portrait" fo:margin-top="2cm"
fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm"
fo:border="none" fo:padding="0cm" style:shadow="none"
fo:background-color="transparent" style:writing-mode="lr-tb"
style:layout-grid-color="#c0c0c0" style:layout-grid-lines="44"
style:layout-grid-base-height="0.55cm" style:layout-grid-ruby-height="0cm"
style:layout-grid-mode="none" style:layout-grid-ruby-below="false"
style:layout-grid-print="true" style:layout-grid-display="true"
style:layout-grid-base-width="0.37cm" style:layout-grid-snap-to="true"
draw:fill="none" draw:fill-color="#cfe7f5" style:footnote-max-height="0cm">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:footnote-sep style:width="0.018cm"
style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm"
style:line-style="none" style:adjustment="left" style:rel-width="25%"
style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:page-layout style:name="pm2" style:page-usage="mirrored">
+ <style:page-layout-properties fo:page-width="21.001cm"
fo:page-height="29.7cm" style:num-format="1" style:paper-tray-name="[From
printer settings]" style:print-orientation="portrait" fo:margin-top="1.3cm"
fo:margin-bottom="1.799cm" fo:margin-left="2.9cm" fo:margin-right="1.799cm"
fo:border="none" fo:padding="0cm" style:shadow="none"
fo:background-color="transparent" style:writing-mode="lr-tb"
style:layout-grid-color="#c0c0c0" style:layout-grid-lines="44"
style:layout-grid-base-height="0.55cm" style:layout-grid-ruby-height="0cm"
style:layout-grid-mode="none" style:layout-grid-ruby-below="false"
style:layout-grid-print="true" style:layout-grid-display="true"
style:layout-grid-base-width="0.37cm" style:layout-grid-snap-to="true"
draw:fill="none" draw:fill-color="#cfe7f5" style:footnote-max-height="0cm">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:footnote-sep style:width="0.018cm"
style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm"
style:line-style="none" style:adjustment="left" style:rel-width="25%"
style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style>
+ <style:header-footer-properties svg:height="1.9cm" fo:margin-left="0cm"
fo:margin-right="0cm" fo:margin-bottom="1.401cm" fo:border="none"
fo:padding="0cm" style:shadow="none" fo:background-color="transparent"
style:dynamic-spacing="false" draw:fill="none" draw:fill-color="#cfe7f5"/>
+ </style:header-style>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:page-layout style:name="pm4">
+ <style:page-layout-properties fo:page-width="21.001cm"
fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait"
fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm"
fo:margin-right="2cm" style:writing-mode="lr-tb"
style:layout-grid-color="#c0c0c0" style:layout-grid-lines="44"
style:layout-grid-base-height="0.55cm" style:layout-grid-ruby-height="0cm"
style:layout-grid-mode="none" style:layout-grid-ruby-below="false"
style:layout-grid-print="true" style:layout-grid-display="true"
style:layout-grid-base-width="0.37cm" style:layout-grid-snap-to="true"
style:footnote-max-height="0cm">
+ <style:footnote-sep style:line-style="none" style:adjustment="left"
style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:page-layout style:name="pm7">
+ <style:page-layout-properties fo:page-width="21.001cm"
fo:page-height="29.7cm" style:num-format="1" style:paper-tray-name="[From
printer settings]" style:print-orientation="portrait" fo:margin-top="10.7cm"
fo:margin-bottom="2.2cm" fo:margin-left="2.9cm" fo:margin-right="1.799cm"
fo:border="none" fo:padding="0cm" style:shadow="none"
fo:background-color="transparent" style:writing-mode="lr-tb"
style:layout-grid-color="#c0c0c0" style:layout-grid-lines="44"
style:layout-grid-base-height="0.55cm" style:layout-grid-ruby-height="0cm"
style:layout-grid-mode="none" style:layout-grid-ruby-below="false"
style:layout-grid-print="true" style:layout-grid-display="true"
style:layout-grid-base-width="0.37cm" style:layout-grid-snap-to="true"
draw:fill="none" draw:fill-color="#cfe7f5" style:footnote-max-height="0cm">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:footnote-sep style:width="0.018cm"
style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm"
style:line-style="none" style:adjustment="left" style:rel-width="25%"
style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style>
+ <style:header-footer-properties svg:height="2.401cm" fo:margin-left="0cm"
fo:margin-right="0cm" fo:margin-top="0.3cm" fo:border="none" fo:padding="0cm"
style:shadow="none" fo:background-color="transparent"
style:dynamic-spacing="false" draw:fill="none" draw:fill-color="#cfe7f5"/>
+ </style:footer-style>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ <style:master-page style:name="FABrief_5f_S2"
style:display-name="FABrief_S2" style:page-layout-name="pm2">
+ <style:header>
+ <text:p text:style-name="TVS_20_KopfzeileFKB_5f_S2">- <text:page-number
text:select-page="current">3</text:page-number><text:s/>-</text:p>
+ </style:header>
+ </style:master-page>
+ <style:master-page style:name="Endnote" style:page-layout-name="pm4"/>
+ <style:master-page style:name="FABrief_5f_S1"
style:display-name="FABrief_S1" style:page-layout-name="pm7"
style:next-style-name="FABrief_5f_S2">
+ <style:footer>
+ <text:p text:style-name="Footer"/>
+ </style:footer>
+ </style:master-page>
+ </office:master-styles>
+ <office:body>
+ <office:text text:use-soft-page-breaks="true">
+
+ <text:section text:style-name="Sect1" text:name="CopyA">
+ <text:p text:style-name="P46"><text:span
text:style-name="TVS_20_Fett">Herrn Diego Säbelzahn</text:span></text:p>
+ <text:p text:style-name="TVS_20_Betreff"><text:line-break/></text:p>
+ <text:p text:style-name="TVS_20_Anrede">Sehr geehrte Damen und
Herren,</text:p>
+ <text:section text:style-name="Sect1" text:name="CopyESt">
+ <text:p
text:style-name="P37"><text:line-break/><text:line-break/></text:p>
+ </text:section>
+ <text:p text:style-name="P13"/>
+ <text:p text:style-name="P39"><text:span text:style-name="T7">bis zum
</text:span></text:p>
+ <text:p text:style-name="P38">ein:</text:p>
+ <table:table table:name="Tabelle19" table:style-name="Tabelle19">
+ <table:table-column table:style-name="Tabelle19.A"/>
+ <table:table-column table:style-name="Tabelle19.B"/>
+ <table:table-row table:style-name="Tabelle19.1">
+ <table:table-cell table:style-name="Tabelle19.A1"
office:value-type="string">
+ <text:p text:style-name="P28">-</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle19.A1"
office:value-type="string">
+ <text:p text:style-name="P31">Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla
Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla
Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla
Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla
Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla
Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla
Bla Bla Bla Bla Bla Bla Bla Bla</text:p>
+ <text:p text:style-name="P31">A</text:p>
+ <text:p text:style-name="P31">B</text:p>
+ <text:p text:style-name="P24">C</text:p>
+ <text:p text:style-name="P24">D</text:p>
+ <text:p text:style-name="P24">E</text:p>
+ <text:p text:style-name="P24">F</text:p>
+ <text:p text:style-name="P24">G</text:p>
+ <text:p text:style-name="P24">H</text:p>
+ <text:p text:style-name="P26">I</text:p>
+ <text:p text:style-name="P31">J</text:p>
+ <text:p text:style-name="P31">K</text:p>
+ </table:table-cell>
+ </table:table-row>
+ </table:table>
+ <text:section text:style-name="Sect1" text:name="CopyFreitext"
text:display="none">
+ <text:p text:style-name="P30">- <text:placeholder
text:placeholder-type="text"><TEXT></text:placeholder></text:p>
+ </text:section>
+ <text:p text:style-name="P40">Sie</text:p>
+ <text:p text:style-name="P41">Das</text:p>
+ <text:p text:style-name="P27">Be</text:p>
+ </text:section>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx
index 8407a73599d1..23552e7b181f 100644
--- a/sw/qa/extras/layout/layout.cxx
+++ b/sw/qa/extras/layout/layout.cxx
@@ -353,6 +353,50 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TestTdf136588)
"portion"_ostr, "effectively by modern-day small to ");
}
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTableSplitBug)
+{
+ createSwDoc("table-split-bug.fodt");
+
+ {
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc,
+
"/root/page[1]/body/section[3]/tab[1]/row[1]/cell[1]//txt[1]/infos/bounds",
+ "height", u"276"_ustr);
+ assertXPath(pXmlDoc,
"/root/page[1]/body/section[3]/tab[1]/row[1]/cell[1]/infos/bounds",
+ "height", u"1274"_ustr);
+ discardDumpedLayout();
+ }
+
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->Down(false, 1);
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/true, 1,
/*bBasicCall=*/false);
+ pWrtShell->Delete();
+
+ {
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ // the problem was that the paragraph in the left cell had height 0
+ assertXPath(pXmlDoc,
+
"/root/page[1]/body/section[3]/tab[1]/row[1]/cell[1]//txt[1]/infos/bounds",
+ "height", u"276"_ustr);
+ assertXPath(pXmlDoc,
"/root/page[1]/body/section[3]/tab[1]/row[1]/cell[1]/infos/bounds",
+ "height", u"1688"_ustr);
+ discardDumpedLayout();
+ }
+
+ pWrtShell->Undo();
+
+ {
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ // the problem was that the paragraph in the left cell had height 0
+ assertXPath(pXmlDoc,
+
"/root/page[1]/body/section[3]/tab[1]/row[1]/cell[1]//txt[1]/infos/bounds",
+ "height", u"276"_ustr);
+ assertXPath(pXmlDoc,
"/root/page[1]/body/section[3]/tab[1]/row[1]/cell[1]/infos/bounds",
+ "height", u"1274"_ustr);
+ discardDumpedLayout();
+ }
+}
+
CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineFlysInBody)
{
createSwDoc();
diff --git a/sw/source/core/layout/ssfrm.cxx b/sw/source/core/layout/ssfrm.cxx
index c36a7de33e5f..ab216a53beda 100644
--- a/sw/source/core/layout/ssfrm.cxx
+++ b/sw/source/core/layout/ssfrm.cxx
@@ -174,7 +174,7 @@ void SwFrame::SetTopBottomMargins( tools::Long nTop,
tools::Long nBot )
{
SwFrameAreaDefinition::FramePrintAreaWriteAccess aPrt(*this);
aPrt.Top( nTop );
- aPrt.Height( getFrameArea().Height() - nTop - nBot );
+ aPrt.Height(::std::max<decltype(nTop)>(0, getFrameArea().Height() - nTop -
nBot));
}
void SwFrame::SetLeftRightMargins( tools::Long nLeft, tools::Long nRight)