a
    [XhG                     @   s   d Z ddlmZ ddlZddlmZ ddlmZ ddl	m
Z
mZ dd	lmZ d
d Zdd Zdd Zdd Zdd Zdd ZdejffddZeddfddZejdZdd ZdS )z+Layout for tables and internal table boxes.    )infN   )boxes)LOGGER   )resolve_one_percentageresolve_percentages)"table_and_columns_preferred_widthsc           $         s  ddl mmmmmm jo0jd jjoBjd j	j
d dkduo^ }j|dd	 r|d nj
d
 \j
g  	_  j
d dkr }	|	 }

D ]}|	7 }		|	 |	|7 }	q|	|
 nD j }	|	 }

D ] }|	8 }	|	|8 }		|	 q|
|	 rd_d_d}r \\}}|r| \\}}|rd}nd}jd| D ]}|t|j7 }qnd}|ssj\}}|rtdd || D d _ 	
fdd f
dd du rN7 }dd jD fdd}dd }| \}}}}}|du r|du sJ dg }d}||||fS |dur|gng | |dur|gng  tdd jD _|duo( }|| rB|_tjdkrVjnd  _| }jr|8 }jD ]}|jD ]x} t| d | jt	k rֈ	| j | _ || _!
| j | _|| _nd| _ d| _!d| _d| _t|d || | _"q|jd }!|jd }"|!j |_ ||_!|"j |"j |!j  |_||_qj
d dkrj
#  	#  j
d }#|rs|#rg  dd}g }d}||||fS ) zLayout for a table box.r   )avoid_page_breakblock_container_layoutblock_level_page_breakfind_earlier_page_breakforce_page_breakremove_placeholdersr   border_collapsecollapseNF)endborder_spacing	directionltrTc                 s   s   | ]\}\}}}|V  qd S N .0_widthr   r   \/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/weasyprint/layout/table.py	<genexpr>J   s   ztable_layout.<locals>.<genexpr>r   c           ,         s@  d }dd d}|}t | d | _|| _| _g }dd | jD }	|d u }
|
rVd}n| \\}}t| j|d  |dD ]\}}||_|r|d |}|	r||d	< |d i} qlt |d |_||_|_g }t|jD ]\}}|jd  d |j	 }t
||_	|j	dkrZ|j|}|j|d  }td
t
| d|   qt |d jd dkr|j |_n|j|j	 d  |_|j|_d|_d|_d|_| }t||j	d   | |_|r||v r|| }nt
|jd i}nd }|r`r`rZjd j}|r`|d jr`| jtdd |d jD 7  _nd_|j|_d|_|j}|jd dkr|j }d|d< ||_	|||| d dd d
\}}}}}}||_|d u r|g }	|||dg g d dd d
\}}}}}}dd i}n|}|j|d udd |rJ|d u r>|i i}||| |< tdd |jD  |_|j|_|jdkrt|j|j|_|| q|r|s|jd 	pt	fdd|jD }|r|i i}	|   ql|r|D ]}|jddd q||}g }|jD ]<}|jd }|dv r@||_nd|_t||_|| q |rtdd |D |_|D ]0}|j|j } |j|jkr|| r|t ||  q||jD ]}|	|j!d  | q|	"d}!|!r<|jdkrtdd |!D }"t|"|j d|_n(t|jtdd |!D |_|j|j }"n|j}"d|_|sT|"|_|!D ]}|j|#  }#|"|# } | r|jd krt ||  n<|jd!kr| d" } t ||  | j$| 7  _$n| j$| 7  _$|jdkrXd}$|jd!kr|j|j d" }$n|jd kr|j|j }$|$dkrX|jD ]}%|%j%|$d# q"qX|j|j }&|d u rX|&7 }&d}'|rt&d$d |jD rt'}&d}d }nd}'	(||&}(|s,|(r,	|j  |r|d })|)|}|	r
	| }*|*r|*\}} qln|d i} ql|r|d i}nd d |f  S  ql|| |&}d}d }|'rZrZsZd_)|'sd|rz qlqz|o| o| jd 	p| }+|+r	|  d d |fS | |} | j|
 |d ud | jD ]>}|jd u r|jr
td%d |jD |j |_nd|_q|| j | _| jr6|  j8  _| ||fS )&Nanybreakpagecontaining_blockc                 S   s   g | ]}g qS r   r   )r   rowr   r   r   
<listcomp>Z       z6table_layout.<locals>.group_layout.<locals>.<listcomp>r   startr   r!   z8This table row has more columns than the table, ignored z cells: r   r   r   c                 s   s   | ]}|j V  qd S r   )Zborder_bottom_width)r   headerr   r   r   r      s   z5table_layout.<locals>.group_layout.<locals>.<genexpr>TautoheightF)page_is_emptyabsolute_boxesfixed_boxesadjoining_marginsdiscard	max_lines)r)   r   c                 s   s   | ]}|  p| V  qd S r   )Z
is_floatedis_in_normal_flowr   childr   r   r   r      s   break_insidec                 3   s   | ]} |j d  V  qdS )r6   N)styler   cell)r
   contextr   r   r      s   vertical_align)topmiddlebottombaselinec                 s   s   | ]}|j V  qd S r   )r?   r8   r   r   r   r      r'   c                 s   s   | ]}|j |  V  qd S r   )
position_yborder_heightr8   r   r   r   r     s   c                 s   s   | ]}|  V  qd S r   )rA   )r   Zrow_cellr   r   r   r     s   r>   r=   r   Zdyc                 s   s   | ]}|j V  qd S r   )emptyr4   r   r   r   r   3  r'   c                 s   s   | ]}|  |j V  qd S r   )content_box_yr,   r8   r   r   r   r   q  s   )*r   
position_xr@   r   childrenitems	enumerateindexgrid_xcolspanlenr   warningr7   Z
margin_topmargin_leftborder_widthsummaxskip_cell_border_topr,   Zcomputed_heightcopycopy_with_childrenremove_decorationr   rC   Zcontent_heightappendr;   cell_baseliner?   add_top_paddingrowspanpoprA   Zpadding_bottom	translateallr   Zoverflows_pageskip_cell_border_bottom),groupr@   bottom_spacer-   
skip_stack	resume_at	next_pageZoriginal_page_is_emptyZnew_group_childrenZending_cells_by_rowZis_group_startskipZ	index_rowr%   
page_breakZnew_row_childrenZ
index_cellr9   Zspanned_widthsZ
cell_indexZignored_cellsZborders_plus_paddingZcell_skip_stackZheader_rowsZoriginal_styleZ
style_copyZnew_cellZcell_resume_atr   avoid_breakZbaseline_cellsr;   extraZending_cellsZrow_bottom_yZcell_bottom_yZvertical_align_shiftr5   Znext_position_yZ
break_cellZoverflowZprevious_rowearlier_page_breakabort)r.   r
   r   r   border_spacing_xborder_spacing_yr   column_positionscolumn_widthsr:   r   r/   r   
has_footer
has_headerr   rows_left_x
rows_widthtabler   r   group_layoutP   s   
 








 



















z"table_layout.<locals>.group_layoutc                    sb  | d u rd}n|   \\}} g }d }dd d}t	j|d  D ]\}}	|	js@|	jrXq@|| }
|
|	_|r|d |	}|r||d< |
d i} qV|	|||| \}}}d } |d u r&|r|d }||	}|r| }|d ur|\}} qV|
d i}nd d ||f  S  qV|| ||j 7 }d}|r@|
|i} qVq@||||fS )Nr   r   r    r   r!   F)rG   rH   rF   	is_header	is_footerrI   rV   r,   )r`   r@   r_   r-   rc   new_table_childrenra   rb   ir^   index_grouprd   Z	new_groupZprevious_grouprg   )
r.   r
   r   rj   r:   r   r/   r   rr   rq   r   r   body_groups_layout}  sT    








z(table_layout.<locals>.body_groups_layoutc                 S   s   g | ]}|j s|js|qS r   )rs   rt   r4   r   r   r   r&     s   z table_layout.<locals>.<listcomp>c                     s8  r
} nt  } rPjd }|	| d dd\}}}|rJ|sJ|j }qTd }nd }rjd }|	| d dd\}}}|r|s|j }qd }nd }
r
\}nd}d}j|d  D ]$}	|	js|	js |	jd } qq|rL|rL
	| | |d\}
}}}|
srsH|j||j d ||7 }||
||||fS d }|r|s
	| |d\}
}}}|
srs||
||||fS d }|r|s
	| |d\}
}}}|
sԈrԈs|j||j d ||7 }||
||||fS d }|s|rJ 
	\}
}}}||
||||fS )Nr   F)r`   r-   r   r6   )r-   rB   )r   rF   r,   rs   rt   r7   r[   r@   )Zheader_footer_bottom_spacer*   ra   rb   Zheader_heightfooterZfooter_heightrc   Zavoid_breaksr^   ru   Zend_position_y)r
   rx   rj   r_   r:   rr   rm   rn   r-   r@   r`   rq   
table_rowsr   r   all_groups_layout  s    	










z'table_layout.<locals>.all_groups_layoutc                    s    fddS )z(Return closure getting the column cells.c                      s    fddj D S )Nc                    s4   g | ],}|j D ] }|j D ]}|j jkr|qqqS r   )rF   rJ   )r   	row_groupr%   r9   )columnr   r   r&   $  s
   

zLtable_layout.<locals>.get_column_cells.<locals>.<lambda>.<locals>.<listcomp>rF   r   r}   rq   r   r   <lambda>$  s   
z8table_layout.<locals>.get_column_cells.<locals>.<lambda>r   )rq   r}   r   r   r   get_column_cells"  s    z&table_layout.<locals>.get_column_cellsc                 s   s   | ]}|  V  qd S r   )deepcopy)r   column_groupr   r   r   r   9  s   r+   r#   rtlr6   )$blockr
   r   r   r   r   r   rF   rs   rt   r7   rU   rl   rk   Zcontent_box_xrV   r   rR   r]   rG   rL   Zcollapsed_border_gridrQ   border_top_widthrD   rT   tuplecolumn_groupsskipped_rowsr,   r   rJ   rE   r@   Z	get_cellsreverse)$r:   rq   r_   r`   r$   r-   r.   r/   Zremove_start_decorationrE   Zrows_xr   Zsplit_cellsZskipped_groupsZgroup_skip_stackr   Zcells_skip_stackr^   r   horizontal_bordersZinitial_position_yr{   r   r*   ru   ry   ra   rb   r0   Zcollapsing_throughZremove_end_decorationZcolumns_heightr}   firstlastre   r   )r.   r
   r   r   rx   ri   rj   r_   r   rk   rl   r:   r   r/   r   rr   rm   rn   r-   r@   r   ro   rp   r`   rq   rz   r   table_layout   s     





0  /7
$f








r   c                 C   s*   |  j |7  _ | jD ]}|j|d qdS )zPIncrease the top padding of a box.

    This also translates the children.

    rB   N)padding_toprF   r[   )boxZextra_paddingr5   r   r   r   rX   r  s    
rX   c                    s\  |   }|jdksJ dd |jD }|jrP|jd jrP|jd }|jd j}ng }tt|tdd |D }dg| }t|D ]*\}}t|d|j |jdkr|j||< q|j	d	 d
kr|j	d \}	}
nd}	d}|D ]}t
|| |jdkrt| }||	|jd  8 }g }t|||j D ],}|| du r>|| n||| 8 }q |rt|t| }|D ]}|||< qd||j7 }q|	|d  }tdd |D | }dd t|D }|r|j|kr|j| }|t| }|D ]}|||< qn|D ]}d||< q|jt| | }|dkr2| j|8  _n |rR||   fdd|D }||_dS )zRun the fixed table layout and return a list of column widths.

    https://www.w3.org/TR/CSS21/tables.html#fixed-table-layout

    r+   c                 S   s   g | ]}|j D ]}|qqS r   r~   )r   r   r}   r   r   r   r&     s   
z&fixed_table_layout.<locals>.<listcomp>r   c                 s   s   | ]}|j V  qd S r   )rK   r8   r   r   r   r     r'   z%fixed_table_layout.<locals>.<genexpr>Nr   r   Zseparater   r   c                 s   s   | ]}|d ur|V  qd S r   r   r   wr   r   r   r     r'   c                 S   s   g | ]\}}|d u r|qS r   r   )r   rv   r   r   r   r   r&     s   c                    s   g | ]}|  qS r   r   r   Zextra_per_columnr   r   r&     r'   )get_wrapped_tabler   r   rF   rQ   rL   rP   rH   r   r7   r   rO   rK   rangerV   rl   )r   rq   Zall_columnsZfirst_rowgroupZfirst_row_cellsZnum_columnsrl   rv   r}   ri   r   r9   r   Zcolumns_without_widthjZwidth_per_columnZall_border_spacingZmin_table_widthZremaining_widthZextra_widthr   r   r   fixed_table_layout}  sj    





r   c                    s  |  }t| |dd\}}}}}}	}
}d}|jdkr>||j7 }|jdkrR||j7 }|j|j }|j|j }|\}}|| | | }|jdkr||kr||_q||k r||_q||_n|j|k r||_|sg |_	dS |j|
 }|dd }|dd }|dd }|dd }||||f}t
t|D ]^}|| rjt|| d | || ||< || ||< || ||< n|	| r$|| ||< q$|t|k rd|d |d |D ]$}t||d kr|n q̐q|ddd D ]$}t||d	 kr|n q qڈkr|_	nPfd
dt
t|D  |t t   fddt
t|D |_	n(||_	|t| }t| |||j	|	|| dS )zRun the auto table layout and return a list of column widths.

    https://www.w3.org/TR/CSS21/tables.html#auto-table-layout

    F)outerr   r+   Nd   r   g0D   ?gv?c                    s   g | ]}|  |  qS r   r   r   rv   )lower_guessupper_guessr   r   r&   $  s   z%auto_table_layout.<locals>.<listcomp>c                    s    g | ]}|  |   qS r   r   r   )added_widthsavailable_ratior   r   r   r&   '  s   )r   r	   rN   Zmargin_rightZpadding_leftZpadding_rightZborder_left_widthZborder_right_widthr   rl   r   rL   rQ   rP   distribute_excess_width)r:   r   r$   rq   Ztable_min_content_widthZtable_max_content_widthZcolumn_min_content_widthscolumn_max_content_widthscolumn_intrinsic_percentagesconstrainednessZtotal_horizontal_border_spacinggridZmarginsZpaddingsZbordersZcb_widthr   Zavailable_widthZassignable_widthZmin_content_guessZmin_content_percentage_guessZmin_content_specified_guessZmax_content_guessZguessesrv   guessexcess_widthr   )r   r   r   r   r   auto_table_layout  s    














r   c                 C   sN   |  }t|| |jd dkr4|jdkr4t| nt| || | |_dS )z;Find the width of each column and derive the wrapper width.r   fixedr+   N)r   r   r7   r   r   r   rO   )r:   wrapperr$   rq   r   r   r   table_wrapper_width2  s    

r   c                 C   s@   t jt jf}t| |d}|dur*|| j S | j| j | j S dS )zReturn the y position of a cell baseline from the top of its border box.

    See https://www.w3.org/TR/CSS21/tables.html#height-layout

    )baseline_typesN)r   LineBoxZTableRowBoxfind_in_flow_baseliner@   r   r   r,   )r9   r   resultr   r   r   rW   ?  s
    
rW   Fc                 C   sl   t | |r| j| j S t | tjr&dS |r4t| jn| j}|D ](}| r>t|||}|dur>|  S q>dS )u   Return the absolute y position for the first (or last) in-flow baseline.

    If there’s no in-flow baseline, return None.

    N)	
isinstancer@   r?   r   ZTableCaptionBoxreversedrF   r3   r   )r   r   r   rF   r5   r   r   r   r   r   N  s    
r   c                    s$   fddt || |jdD }|rltfdd|D }	||	 }
|D ]}||  | |
 7  < qJdS  fddt || |jdD }|r|D ]}||  |t| 7  < qdS  fddt || |jdD }|r(tfd	d|D }	||	 }
|D ]}||  | |
 7  < qdS  fd
dt || |jdD }|rt fdd|D }|| }
|D ]}||   | |
 7  < qrdS dd t || |jdD }|r|D ]}||  |t| 7  < qdS dd t || |jdD }|D ]}||  |t| 7  < q dS )zwDistribute available width to columns.

    See https://www.w3.org/TR/css-tables-3/#distributing-width-to-columns

    c                    s4   g | ],\}}| s | d kr| d kr|qS r   r   r   rv   r   r   r   r   r   r   r&   k  s
   z+distribute_excess_width.<locals>.<listcomp>r(   c                 3   s   | ]} | V  qd S r   r   r   r   r   r   r   q  r'   z*distribute_excess_width.<locals>.<genexpr>Nc                    s(   g | ] \}}| s | d kr|qS r   r   r   )r   r   r   r   r&   x  s   c                    s4   g | ],\}}| r | d kr| d kr|qS r   r   r   r   r   r   r&     s
   c                 3   s   | ]} | V  qd S r   r   r   r   r   r   r     r'   c                    s,   g | ]$\}} | d kr| d kr|qS r   r   r   )r   r   r   r   r&     s   c                 3   s   | ]} | V  qd S r   r   r   )r   r   r   r     s   c                 S   s   g | ]\}}|r|qS r   r   )r   rv   r}   r   r   r   r&     s   c                 S   s   g | ]\}}|qS r   r   r   r   r   r   r&     r'   )rH   r)   rP   rL   )r:   r   r   rl   r   r   r   Zcolumn_slicecolumnsZsum_max_content_widthsZratiorv   Zsum_intrinsic_percentagesr   r   r   r   b  s\    	r   Ztransparentc              	      s   r|sg g fS t g d}dd t|D dddddd fddtff fd	d
t|D  fdd
t|d D fddfdd}ddd fddtff}d}jD ]}|jD ] }|jD ]}	|	j|	j|	j  }
}}jd dkr*t|
d |
| }t|
|
| }n0td|
 d|
 | d}td|
 d|
 | d}|D ](}t||| D ]}|| |< qpq^|D ],}t|d || D ]}|| |< qq||	|
||| q|d7 }qqd}jD ],}|jD ]}||d| d |d7 }qqd}jD ](}t	|j}||d| | ||7 }qj
D ]&}|jD ]}|||jdd| qTqJj
D ]}|||jd|j| qx|dd | dd fdd}fdd}fdd}d}jD ]F}|| |jD ].}|| |jD ]}	|	j| }}|	j|	j }}jd dkr|||||| }|||| || }||||| }||| ||| }nd|| | || pd}|| | || | pd}|d| | ||| }|d| ||| }|	d| |	d | |	d!| |	d"| q|d7 }qqڈj
D ]$}|| |jD ]}|| q<q*d|dd  d |d|  d!|ddd d"| dd fS )#a  Resolve border conflicts for a table in the collapsing border model.

    Take a :class:`TableBox`; set appropriate border widths on the table,
    column group, column, row group, row, and cell boxes; and return
    a data structure for the resolved collapsed border grid.

    )
hiddendoubleZsolidZdashedZdottedridgeoutsetgrooveinsetnonec                 S   s   i | ]\}}||qS r   r   )r   scorer7   r   r   r   
<dictcomp>  r'   z*collapse_table_borders.<locals>.<dictcomp>r   r   )r   r   r   r   c                    s   g | ]}g d   qS )r   r   r   r   
grid_widthweak_null_borderr   r   r&     s   z*collapse_table_borders.<locals>.<listcomp>c                    s   g | ]}g  qS r   r   r   r   r   r   r&     s   r   c                    s   ddl m} |d| d }|d| d }||d| d}|dkrJdnd	|| f}	 ||}| | | \}
}|
|	k r|	|||ff| | |< d S )
Nr   )	get_colorborder__style_widthZ_colorr   r   r   )Z
draw.colorr   get)Zborder_gridZ	box_stylesiderJ   grid_yr   r7   r   colorr   Zprevious_scorer   )	style_mapstyle_scoresr   r   set_one_border  s    z.collapse_table_borders.<locals>.set_one_borderc                    s  | j }j d dkrt||| D ](}|d|| |d|| | q"t||| D ](} |d||  |d|||  qZnt||| D ]0}|dd| | | |dd| | qtd| d| | dD ](} |d||  |d|||  qd S )Nr   r   leftrightr<   r>   r   )r7   r   )r   xyr   hr7   yyxx)r   r   rq   vertical_bordersr   r   set_borders  s    z+collapse_table_borders.<locals>.set_bordersr   r   r   r   c                 S   s    d| d}t | ||d  d S )Nr   r   r   )setattr)r   r   Ztwice_widthpropr   r   r   set_border_used_width   s    z5collapse_table_borders.<locals>.set_border_used_widthc                    s4    | dd  | dd  | dd  | dd d S )Nr<   r   r   r>   r   r   )r   )r   r   r   remove_borders$  s    z.collapse_table_borders.<locals>.remove_bordersc                    s   t  fdd|| D S )Nc                 3   s   | ]}|  d  d  V  qdS )r   Nr   )r   Zgrid_rowr   r   r   r   +  r'   zEcollapse_table_borders.<locals>.max_vertical_width.<locals>.<genexpr>rQ   )r   y1y2)r   r   r   max_vertical_width*  s    z2collapse_table_borders.<locals>.max_vertical_widthc                    s   t dd  | | | D S )Nc                 s   s   | ]\}\}}}|V  qd S r   r   r   r   r   r   r   .  r'   zGcollapse_table_borders.<locals>.max_horizontal_width.<locals>.<genexpr>r   )x1r   Zx2)r   r   r   max_horizontal_width-  s    z4collapse_table_borders.<locals>.max_horizontal_widthNr<   r>   r   r   )r   rH   TRANSPARENTr   rF   rJ   rK   rY   r7   rL   r   span)rq   r   Zgrid_heightZstylesr   Zstrong_null_borderr   r|   r%   r9   rJ   rK   rY   Zvertical_x_rangeZhorizontal_x_ranger   r   r   r}   r   r   r   r   r   r<   r>   r   r   r   )	r   r   r   r   r   r   rq   r   r   r   collapse_table_borders  s    











r   )__doc__mathr   Ztinycss2.color4Ztinycss2Zformatting_structurer   loggerr   percentr   r   	preferredr	   r   rX   r   r   r   rW   r   r   slicer   Zcolor4Zparse_colorr   r   r   r   r   r   <module>   s*       iV_
F