1
1
mirror of https://github.com/Kozea/WeasyPrint.git synced 2024-10-05 08:27:22 +03:00

Fix table paddings and minor regressions

This commit is contained in:
Guillaume Ayoub 2016-01-29 18:50:51 +01:00
parent c42bf6a803
commit c32375982e
2 changed files with 42 additions and 20 deletions

View File

@ -49,7 +49,7 @@ def min_content_width(context, box, outer=True):
boxes.BlockContainerBox, boxes.TableColumnBox,
boxes.TableColumnGroupBox)):
if box.is_table_wrapper:
return table_and_columns_preferred_widths(context, box, outer)[1]
return table_and_columns_preferred_widths(context, box, outer)[0]
else:
return block_min_content_width(context, box, outer)
elif isinstance(box, (boxes.InlineBox, boxes.LineBox)):
@ -277,7 +277,7 @@ def table_and_columns_preferred_widths(context, box, outer=True):
table = box.get_wrapped_table()
result = TABLE_CACHE.get(table)
if result:
return result
return result[outer]
# Create the grid
grid_width, grid_height = 0, 0
@ -308,12 +308,20 @@ def table_and_columns_preferred_widths(context, box, outer=True):
if grid_width == 0 or grid_height == 0:
table.children = []
min_width = block_min_content_width(context, table)
max_width = block_max_content_width(context, table)
TABLE_CACHE[table] = result = (
min_width, max_width, [], [], [], [],
total_horizontal_border_spacing, [])
return result
min_width = block_min_content_width(context, table, outer=False)
max_width = block_max_content_width(context, table, outer=False)
outer_min_width = adjust(
box, outer=True, width=block_min_content_width(
context, table, outer=True))
outer_max_width = adjust(
box, outer=True, width=block_max_content_width(
context, table, outer=True))
result = ([], [], [], [], total_horizontal_border_spacing, [])
TABLE_CACHE[table] = result = {
False: (min_width, max_width) + result,
True: (outer_min_width, outer_max_width) + result,
}
return result[outer]
column_groups = [None] * grid_width
columns = [None] * grid_width
@ -507,17 +515,32 @@ def table_and_columns_preferred_widths(context, box, outer=True):
else:
table_min_width = table_min_content_width
table_max_width = table_max_content_width
table_min_content_width = max(
adjust(table, outer, table_min_width), table_min_content_width)
table_max_content_width = max(
adjust(table, outer, table_max_width), table_max_content_width)
table_min_content_width = adjust(
table, outer=False,
width=max(table_min_width, table_min_content_width))
table_max_content_width = adjust(
table, outer=False,
width=max(table_max_width, table_max_content_width))
table_outer_min_content_width = adjust(
box, outer=True, width=adjust(
table, outer=True,
width=max(table_min_width, table_min_content_width)))
table_outer_max_content_width = adjust(
box, outer=True, width=adjust(
table, outer=True,
width=max(table_max_width, table_max_content_width)))
result = (
table_min_content_width, table_max_content_width,
min_content_widths, max_content_widths, intrinsic_percentages,
constrainedness, total_horizontal_border_spacing, zipped_grid)
TABLE_CACHE[table] = result
return result
TABLE_CACHE[table] = result = {
False: (table_min_content_width, table_max_content_width) + result,
True: (
(table_outer_min_content_width, table_outer_max_content_width) +
result),
}
return result[outer]
def replaced_min_content_width(box, outer=True):

View File

@ -202,7 +202,7 @@ def table_layout(context, table, max_position_y, skip_stack,
for child in cell.children:
child.translate(dy=vertical_align_shift)
next_position_y = position_y + row.height + border_spacing_y
next_position_y = row.position_y + row.height + border_spacing_y
# Break if this row overflows the page, unless there is no
# other content on the page.
if next_position_y > max_position_y and not page_is_empty:
@ -530,9 +530,10 @@ def auto_table_layout(context, box, containing_block):
margins += box.margin_left
if box.margin_right != 'auto':
margins += box.margin_right
paddings = table.padding_left + table.padding_right
cb_width, _ = containing_block
available_width = cb_width - margins
available_width = cb_width - margins - paddings
if table.width == 'auto':
if available_width <= table_min_content_width:
@ -593,9 +594,7 @@ def auto_table_layout(context, box, containing_block):
# Distribute available width to columns
# http://dbaron.org/css/intrinsic/#distributetocols
table.column_widths = max_content_guess
excess_width = (
assignable_width - sum(max_content_guess) -
table.padding_left - table.padding_right)
excess_width = assignable_width - sum(max_content_guess)
# First group
columns = [