From 563ee6f98cf92d6a3ac0e370b84c494211bde085 Mon Sep 17 00:00:00 2001 From: Guillaume Ayoub Date: Tue, 25 Jan 2022 15:57:58 +0100 Subject: [PATCH] Handle break-inside: avoid in tr Fix #1547. --- tests/layout/test_table.py | 34 ++++++++++++++++++++++++++++++++++ weasyprint/layout/table.py | 5 +++++ 2 files changed, 39 insertions(+) diff --git a/tests/layout/test_table.py b/tests/layout/test_table.py index ecf1d3ff1b..4c2b0442f6 100644 --- a/tests/layout/test_table.py +++ b/tests/layout/test_table.py @@ -2054,6 +2054,40 @@ def test_table_html_tag(): ''', [1, 2], [30, 0, 40]), + (''' + +

Dummy title

+ + + + +
r1l1
r2l1
r2l2
r3l1
+ ''', + [1, 2], + [30, 0, 80]), + (''' + +

Dummy title

+ + + + + + +
r1l1
r2l1
r2l2
r3l1
+ ''', + [1, 2], + [30, 0, 80]), )) def test_table_page_breaks(html, rows, positions): pages = render_pages(html) diff --git a/weasyprint/layout/table.py b/weasyprint/layout/table.py index 65de0cf3c0..ef38bb723f 100644 --- a/weasyprint/layout/table.py +++ b/weasyprint/layout/table.py @@ -194,6 +194,11 @@ def group_layout(group, position_y, bottom_space, page_is_empty, cell.height = max(cell.height, cell.computed_height) new_row_children.append(cell) + if resume_at and not page_is_empty: + if row.style['break_inside'] in ('avoid', 'avoid-page'): + resume_at = {index_row: {}} + break + row = row.copy_with_children(new_row_children) # Table height algorithm