diff options
author | Michael Stahl <michael.stahl@allotropia.de> | 2024-01-17 16:56:38 +0100 |
---|---|---|
committer | Michael Stahl <michael.stahl@allotropia.de> | 2024-01-18 13:04:58 +0100 |
commit | ab7893544dc6be6dc192dffefd57cd5ddd421c35 (patch) | |
tree | e155187c722dba8c3c2c4189f3641a2a9fc5affb /sw | |
parent | 6e08c83530bc54a47c10408a8472e95d1a4147ec (diff) |
sw: layout: prevent bad page break in table with 0-height rows
The bugdoc contains a table with most rows having a hidden-paragraph
field in every paragraph, and no cell border or padding.
The SwTabFrame is initially split across 6 pages, which should all be
joined, as there are only 3 visible rows, but the last follow is never
joined.
This is because SwTabFrame::Join() of the next-to-last follow doesn't
invalidate the SwTabFrame, because Grow(0) doesn't invalidate, and
later formatting anything in the moved SwRowFrame doesn't invalidate
either as it is all height 0.
Try to fix this by guessing that the row will have height 0 (even if
it's not formatted yet).
Change-Id: Ic8246ac91c741f5a215f89dc159c44d7c7cf2ce1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162203
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/qa/extras/layout/data/table-0-height-rows.fodt | 630 | ||||
-rw-r--r-- | sw/qa/extras/layout/layout3.cxx | 14 | ||||
-rw-r--r-- | sw/source/core/layout/tabfrm.cxx | 118 |
3 files changed, 761 insertions, 1 deletions
diff --git a/sw/qa/extras/layout/data/table-0-height-rows.fodt b/sw/qa/extras/layout/data/table-0-height-rows.fodt new file mode 100644 index 000000000000..f32e2fbe996e --- /dev/null +++ b/sw/qa/extras/layout/data/table-0-height-rows.fodt @@ -0,0 +1,630 @@ +<?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/elements/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:font-face-decls> + <style:font-face style:name="Times New Roman" svg:font-family="'Times New Roman'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Times New Roman1" svg:font-family="'Times New Roman'" style:font-adornments="Standard" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Arial" svg:font-family="Arial" style:font-adornments="Standard" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="Arial Unicode MS" svg:font-family="'Arial Unicode MS'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <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="false"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties fo:color="#000000" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Arial Unicode MS" style:font-size-asian="12pt" style:language-asian="en" style:country-asian="US" style:font-name-complex="Tahoma" style:font-size-complex="12pt" style:language-complex="en" style:country-complex="US"/> + </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.997cm" style:writing-mode="page"/> + <style:text-properties fo:color="#000000" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Arial Unicode MS" style:font-size-asian="12pt" style:language-asian="en" style:country-asian="US" style:font-name-complex="Tahoma" style:font-size-complex="12pt" style:language-complex="en" style:country-complex="US" 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="collapsing"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + <style:style style:name="Schrift1" style:family="paragraph"> + <style:paragraph-properties> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:font-name="Arial" fo:font-family="Arial" style:font-style-name="Standard" style:font-family-generic="swiss" style:font-pitch="variable"/> + </style:style> + <style:style style:name="Schrift2" style:family="paragraph" style:master-page-name=""> + <style:paragraph-properties style:page-number="auto"/> + <style:text-properties style:font-name="Times New Roman1" fo:font-family="'Times New Roman'" style:font-style-name="Standard" style:font-family-generic="roman" style:font-pitch="variable"/> + </style:style> + <style:style style:name="TextNormal" style:family="paragraph" style:parent-style-name="Schrift2" style:master-page-name=""> + <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" loext:contextual-spacing="false" fo:line-height="150%" fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:page-number="auto"/> + <style:text-properties 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="Vfg2" style:family="paragraph" style:parent-style-name="TextNormal" style:list-style-name="Numbering_20_1" style:master-page-name=""> + <style:paragraph-properties fo:line-height="100%" style:page-number="auto" text:number-lines="true" text:line-number="2"/> + </style:style> + <style:style style:name="Header_20_and_20_Footer" style:display-name="Header and Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"> + <style:tab-stops> + <style:tab-stop style:position="9.5cm" style:type="center"/> + <style:tab-stop style:position="19.001cm" style:type="right"/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Header" style:family="paragraph" style:parent-style-name="Header_20_and_20_Footer" style:class="extra"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"> + <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="Footnote_20_Symbol" style:display-name="Footnote Symbol" style:family="text"/> + <style:style style:name="Numbering_20_Symbols" style:display-name="Numbering Symbols" style:family="text"/> + <style:style style:name="Endnote_20_Symbol" style:display-name="Endnote Symbol" style:family="text"/> + <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:list-style style:name="Numbering_20_1" style:display-name="Numbering 1"> + <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="2" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="3" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="4" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="5" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="6" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="7" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="8" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="9" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="10" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/> + </text:list-level-style-number> + </text:list-style> + <text:notes-configuration text:note-class="footnote" text:citation-style-name="Footnote_20_Symbol" text:citation-body-style-name="Footnote_20_anchor" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="page"/> + <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"/> + </office:styles> + <office:automatic-styles> + <style:style style:name="Tabelle4" style:family="table"> + <style:table-properties style:width="17.002cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.499cm" table:align="margins" border-model="collapsing"/> + </style:style> + <style:style style:name="Tabelle4.A" style:family="table-column"> + <style:table-column-properties style:column-width="12.702cm" style:rel-column-width="48961*"/> + </style:style> + <style:style style:name="Tabelle4.B" style:family="table-column"> + <style:table-column-properties style:column-width="2.147cm" style:rel-column-width="8272*"/> + </style:style> + <style:style style:name="Tabelle4.C" style:family="table-column"> + <style:table-column-properties style:column-width="2.154cm" style:rel-column-width="8302*"/> + </style:style> + <style:style style:name="Tabelle4.1" style:family="table-row"> + <style:table-row-properties style:row-height="0.501cm"/> + </style:style> + <style:style style:name="Tabelle4.A1" style:family="table-cell"> + <style:table-cell-properties fo:padding="0cm" fo:border="none"/> + </style:style> + <style:style style:name="Tabelle4.B1" style:family="table-cell"> + <style:table-cell-properties style:vertical-align="middle" fo:padding="0cm" fo:border="none"/> + </style:style> + <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Schrift1"> + <style:paragraph-properties> + <style:tab-stops> + <style:tab-stop style:position="17cm" style:type="right"/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name=""> + <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.101cm" loext:contextual-spacing="false" fo:line-height="100%" fo:text-align="start" style:justify-single-word="false" fo:hyphenation-ladder-count="no-limit" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="auto"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" fo:font-weight="normal" style:font-size-asian="10pt" style:font-size-complex="10pt" 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="P4" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:line-height="100%"/> + <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="P5" style:family="paragraph" style:parent-style-name="Standard"> + <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="P6" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/> + <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="P7" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/> + <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="P8" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:text-align="end" style:justify-single-word="false"/> + <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="P9" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/> + <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt" text:display="true"/> + </style:style> + <style:style style:name="P10" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/> + <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" fo:font-weight="normal" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="P11" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/> + <style:text-properties style:text-position="0% 100%" style:font-name="Times New Roman" fo:font-size="10pt" fo:font-weight="bold" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="P12" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/> + <style:text-properties style:text-position="0% 100%" style:font-name="Times New Roman" fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="P13" style:family="paragraph" style:parent-style-name="TextNormal"> + <style:paragraph-properties fo:line-height="100%"/> + <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="P14" style:family="paragraph" style:parent-style-name="TextNormal"> + <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.499cm" loext:contextual-spacing="false"/> + <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="P15" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.101cm" loext:contextual-spacing="false" fo:line-height="100%"/> + <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="P16" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:line-height="100%" fo:break-before="auto" fo:break-after="auto"/> + <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="P17" style:family="paragraph" style:parent-style-name="TextNormal"> + <style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" loext:contextual-spacing="false" fo:line-height="100%" fo:text-align="start" style:justify-single-word="false"/> + <style:text-properties fo:font-size="10pt" fo:font-weight="normal" style:font-size-asian="10pt" style:font-weight-asian="normal" style:font-size-complex="10pt" style:font-weight-complex="normal"/> + </style:style> + <style:style style:name="P20" style:family="paragraph" style:parent-style-name="Vfg2" style:list-style-name=""> + <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> + </style:style> + <style:style style:name="T1" style:family="text"> + <style:text-properties fo:font-size="10pt"/> + </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:print-orientation="portrait" fo:margin-top="1cm" fo:margin-bottom="1cm" fo:margin-left="2.499cm" fo:margin-right="1.499cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm"> + <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style> + <style:header-footer-properties fo:min-height="0cm" fo:margin-bottom="0.499cm"/> + </style:header-style> + <style:footer-style> + <style:header-footer-properties svg:height="0.9cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.3cm"/> + </style:footer-style> + </style:page-layout> + <style:page-layout style:name="pm2"> + <style:page-layout-properties fo:page-width="20.999cm" fo:page-height="29.699cm" 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="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm"> + <style:footnote-sep style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="pm1"> + <style:header> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + <text:p text:style-name="Header"/> + </style:header> + <style:footer> + <text:p text:style-name="P1"><text:tab/><text:span text:style-name="T1"><text:page-continuation text:string-value="- " text:select-page="next"/></text:span><text:span text:style-name="T1"><text:page-number text:select-page="current" text:page-adjust="1"/></text:span><text:span text:style-name="T1"><text:page-continuation text:string-value=" -" text:select-page="next"/></text:span></text:p> + </style:footer> + </style:master-page> + <style:master-page style:name="Endnote" style:page-layout-name="pm2"/> + </office:master-styles> + <office:body> + <office:text> + <office:forms form:automatic-focus="false" form:apply-design-mode="false"/> + <text:sequence-decls> + <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/> + <text:sequence-decl text:display-outline-level="0" text:name="Table"/> + <text:sequence-decl text:display-outline-level="0" text:name="Text"/> + <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> + <text:sequence-decl text:display-outline-level="0" text:name="Figure"/> + </text:sequence-decls> + <text:p text:style-name="P14"/> + <text:p text:style-name="P14"/> + <text:p text:style-name="P13"/> + <text:p text:style-name="P17"/> + <text:p text:style-name="P13"/> + <text:p text:style-name="P13"/> + <text:p text:style-name="P13"/> + <text:p text:style-name="P13"/> + <table:table table:name="Tabelle4" table:style-name="Tabelle4"> + <table:table-column table:style-name="Tabelle4.A"/> + <table:table-column table:style-name="Tabelle4.B"/> + <table:table-column table:style-name="Tabelle4.C"/> + <table:table-header-rows> + <table:table-row table:style-name="Tabelle4.1"> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P5">dfghdfgnhdfgnhdbhfghndhgbhdfbh</text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.B1" office:value-type="string"> + <text:p text:style-name="P11">von</text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.B1" office:value-type="string"> + <text:p text:style-name="P11">bis</text:p> + </table:table-cell> + </table:table-row> + </table:table-header-rows> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P12"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P12"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P3"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P10"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P10"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P3"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P10"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P10"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P8"><text:hidden-paragraph text:condition="ooow:1"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" table:number-columns-spanned="2" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1"/></text:p> + </table:table-cell> + <table:covered-table-cell/> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P9"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P9"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P9"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P9"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P9"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P9"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P6">fgdhgfhdfbhfbhfbhfgbfdbhdfbhfgbnfdbhdfbg</text:p> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"/> + </table:table-cell> + <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string"> + <text:p text:style-name="P7"/> + </table:table-cell> + </table:table-row> + </table:table> + <text:p text:style-name="P15"/> + <text:p text:style-name="P15"/> + <text:p text:style-name="P15"/> + <text:p text:style-name="P4"/> + <text:p text:style-name="P4"/> + <text:p text:style-name="P4"/> + <text:p text:style-name="P20"/> + <text:p text:style-name="P16"/> + <text:p text:style-name="P4"/> + </office:text> + </office:body> +</office:document> diff --git a/sw/qa/extras/layout/layout3.cxx b/sw/qa/extras/layout/layout3.cxx index 33c52a6dbcf7..24b90d5da19b 100644 --- a/sw/qa/extras/layout/layout3.cxx +++ b/sw/qa/extras/layout/layout3.cxx @@ -1575,6 +1575,20 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf145826) assertXPath(pXmlDoc, "/root/page/body/section/column[2]/ftncont/ftn"_ostr, 3); } +CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTable0HeightRows) +{ + createSwDoc("table-0-height-rows.fodt"); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT(pXmlDoc); + + // the problem was that the table was erroneously split across 2 or 3 pages + assertXPath(pXmlDoc, "/root/page[1]/body/tab"_ostr, 1); + assertXPath(pXmlDoc, "/root/page[1]/body/tab/row"_ostr, 28); + assertXPath(pXmlDoc, "/root/page[1]/body/tab/row/infos/bounds[@height='0']"_ostr, 25); + assertXPath(pXmlDoc, "/root/page"_ostr, 1); +} + CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf105481) { createSwDoc("tdf105481.odt"); diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx index 12f27d749c04..033f692f47cc 100644 --- a/sw/source/core/layout/tabfrm.cxx +++ b/sw/source/core/layout/tabfrm.cxx @@ -1451,7 +1451,102 @@ namespace return true; } -} + + auto IsAllHiddenSection(SwSectionFrame const& rSection) -> bool + { + for (SwFrame const* pFrame = rSection.Lower(); pFrame; pFrame = pFrame->GetNext()) + { + if (pFrame->IsColumnFrame()) + { + return false; // adds some padding + } + else if (pFrame->IsSctFrame()) + { + assert(false); // these aren't nested? + if (!IsAllHiddenSection(*static_cast<SwSectionFrame const*>(pFrame))) + { + return false; + } + } + else if (pFrame->IsTabFrame()) + { + return false; // presumably + } + else if (pFrame->IsTextFrame()) + { + if (!static_cast<SwTextFrame const*>(pFrame)->IsHiddenNow()) + { + return false; + } + } + } + return true; + } + + auto IsAllHiddenRow(SwRowFrame const& rRow, SwTabFrame const& rTab) -> bool; + + auto IsAllHiddenCell(SwCellFrame const& rCell, SwRowFrame const& rRow, SwTabFrame const& rTab) -> bool + { + for (SwFrame const* pFrame = rCell.Lower(); pFrame; pFrame = pFrame->GetNext()) + { + if (pFrame->IsRowFrame()) + { + if (!IsAllHiddenRow(*static_cast<SwRowFrame const*>(pFrame), rTab)) + { + return false; + } + } + else if (pFrame->IsSctFrame()) + { + if (!IsAllHiddenSection(*static_cast<SwSectionFrame const*>(pFrame))) + { + return false; + } + } + else if (pFrame->IsTabFrame()) + { + return false; // presumably + } + else if (pFrame->IsTextFrame()) + { + if (!static_cast<SwTextFrame const*>(pFrame)->IsHiddenNow()) + { + return false; + } + } + } + if (rTab.IsCollapsingBorders() && !rCell.Lower()->IsRowFrame()) + { + if (rRow.GetTopMarginForLowers() != 0 + || rRow.GetBottomMarginForLowers() != 0) + { + return false; + } + } + else + { + SwBorderAttrAccess border(SwFrame::GetCache(), &rCell); + if (border.Get()->CalcTop() != 0 || border.Get()->CalcBottom() != 0) + { + return false; + } + } + return true; + } + + auto IsAllHiddenRow(SwRowFrame const& rRow, SwTabFrame const& rTab) -> bool + { + for (SwFrame const* pCell = rRow.Lower(); pCell; pCell = pCell->GetNext()) + { + if (!IsAllHiddenCell(*static_cast<SwCellFrame const*>(pCell), rRow, rTab)) + { + return false; + } + } + return true; + } + +} // namespace void SwTabFrame::Join() { @@ -1471,11 +1566,20 @@ void SwTabFrame::Join() SwFrame* pPrv = GetLastLower(); SwTwips nHeight = 0; //Total height of the inserted rows as return value. + bool isAllHidden(true); while ( pRow ) { pNxt = pRow->GetNext(); nHeight += aRectFnSet.GetHeight(pRow->getFrameArea()); + if (nHeight != 0) + { + isAllHidden = false; + } + if (isAllHidden) + { + isAllHidden = IsAllHiddenRow(*static_cast<SwRowFrame *>(pRow), *this); + } pRow->RemoveFromLayout(); pRow->InvalidateAll_(); pRow->InsertBehind( this, pPrv ); @@ -1489,6 +1593,18 @@ void SwTabFrame::Join() SwFrame::DestroyFrame(pFoll); Grow( nHeight ); + + // In case the row does not have a height, Grow(nHeight) did nothing. + // If this is not invalidated, subsequent follows may never be joined. + // Try to guess if the height of the row will be 0. If the document + // was just loaded, it will be 0 in any case, but probably it's not a good + // idea to join *all* follows for a newly loaded document, it would be + // easier not to split the table in the first place; presumably it is split + // because that improves performance. + if (isAllHidden) + { + InvalidateSize_(); + } } static void SwInvalidatePositions( SwFrame *pFrame, tools::Long nBottom ) |