a
    ¥Q•hG¹  ã                   @   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|
|	 ‰ˆ�rædˆ_dˆ_d}ˆ�rªˆ ¡ \\}}|�r€| ¡ \\}}|�r„d}nd}ˆjd|… D ]}|t|jƒ7 }�q’nd}|�sæˆ�sæˆj\}}|�ræt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 �s¸J ‚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   úP/var/www/sistema_ama/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|› �¡  �q’t |ˆ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�r†t|j|jƒ|_| |¡ qè|�rì|�sìˆ|jd ˆ	ƒ�pÈt‡‡	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 |�r®t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�r�t || ƒ 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}'|�rŠt&d$d„ |jD ƒƒ�r†t'}&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   )Ú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   )Ú
is_floatedÚis_in_normal_flow©r   Úchildr   r   r   r   Ì   s   ÿÚbreak_insidec                 3   s   | ]}ˆ |j d  ˆƒV  qdS )r8   N)Ústyle©r   Úcell)r
   Úcontextr   r   r   Ø   s   ÿÚvertical_align)ÚtopÚmiddleÚbottomÚbaselinec                 s   s   | ]}|j V  qd S r   )rA   r:   r   r   r   r   ÷   r'   c                 s   s   | ]}|j | ¡  V  qd S r   )Ú
position_yÚborder_heightr:   r   r   r   r     s   ÿc                 s   s   | ]}|  ¡ V  qd S r   )rC   )r   Zrow_cellr   r   r   r     s   r@   r?   r   ©Údyc                 s   s   | ]}|j V  qd S r   )Úemptyr6   r   r   r   r   3  r'   c                 s   s   | ]}|  ¡ |j V  qd S r   )Úcontent_box_yr-   r:   r   r   r   r   q  s   ÿ)*r   Ú
position_xrB   r   ÚchildrenÚitemsÚ	enumerateÚindexÚgrid_xÚcolspanÚlenr   Úwarningr9   Ú
margin_topÚmargin_leftÚborder_widthÚsumÚmaxÚskip_cell_border_topr-   Zcomputed_heightÚcopyÚcopy_with_childrenÚremove_decorationr   rF   Zcontent_heightÚappendr=   Úcell_baselinerA   Úadd_top_paddingÚrowspanÚpoprC   Úpadding_bottomÚ	translateÚallr   Úoverflows_pageÚskip_cell_border_bottom),ÚgrouprB   Ú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_cellr;   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_shiftr7   Znext_position_yZ
break_cellÚoverflowZprevious_rowÚearlier_page_breakÚabort)r/   r
   r   r   Úborder_spacing_xÚborder_spacing_yr   Úcolumn_positionsÚcolumn_widthsr<   r   r0   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)rJ   rK   rI   Ú	is_headerÚ	is_footerrL   rZ   r-   )rf   rB   re   r.   ri   Únew_table_childrenrg   rh   Úird   Zindex_grouprj   Z	new_groupZprevious_grouprn   )
r/   r
   r   rq   r<   r   r0   r   ry   rx   r   r   Úbody_groups_layout}  sT    


ÿ


ÿ


z(table_layout.<locals>.body_groups_layoutc                 S   s   g | ]}|j s|js|‘qS r   )rz   r{   r6   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ˆ }q˜d }nd }ˆ
r¤ˆ
\}nd}d}ˆj|d … D ]$}	|	jsº|	jsºˆ |	jd ˆƒ} qàqº|�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)rf   r.   r   r8   )r.   rD   )r   rI   r-   rz   r{   r9   r`   rB   )Zheader_footer_bottom_spacer+   rg   rh   Zheader_heightÚfooterZfooter_heightri   Zavoid_breaksrd   r|   Zend_position_y)r
   r~   rq   re   r<   ry   rt   ru   r.   rB   rf   rx   Ú
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   )rI   rM   )r   Ú	row_groupr%   r;   )Úcolumnr   r   r&   $  s
   

üzLtable_layout.<locals>.get_column_cells.<locals>.<lambda>.<locals>.<listcomp>©rI   r   ©rƒ   rx   r   r   Ú<lambda>$  s   
þz8table_layout.<locals>.get_column_cells.<locals>.<lambda>r   )rx   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#   Úrtlr8   )$Úblockr
   r   r   r   r   r   rI   rz   r{   r9   rY   rs   rr   Úcontent_box_xrZ   r   rV   rc   rJ   rO   Úcollapsed_border_gridrU   Úborder_top_widthrG   rX   ÚtupleÚcolumn_groupsÚskipped_rowsr-   r   rM   rH   rB   Ú	get_cellsÚreverse)$r<   rx   re   rf   r$   r.   r/   r0   Zremove_start_decorationrH   Zrows_xr   Zsplit_cellsZskipped_groupsZgroup_skip_stackr‘   Zcells_skip_stackrd   r   Úhorizontal_bordersZinitial_position_yr�   r‡   r+   r|   r   rg   rh   r1   Zcollapsing_throughZremove_end_decorationZcolumns_heightrƒ   ÚfirstÚlastrk   r   )r/   r
   r   r   r~   rp   rq   re   r   rr   rs   r<   r   r0   r   ry   rt   ru   r.   rB   r   rv   rw   rf   rx   r€   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.

    rD   N)Úpadding_toprI   r`   )ÚboxZextra_paddingr7   r   r   r   r\   r  s    
r\   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 ]}|||< �qàn|D ]}d||< �qö|jt|ƒ | }|dk�r2| j|8  _n |�rR|| ‰ ‡ fdd„|D ƒ}||_dS )z„Run 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   )rN   r:   r   r   r   r   Ž  r'   z%fixed_table_layout.<locals>.<genexpr>Nr   r   Ú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   r}   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�   rI   rU   rO   rT   rK   r   r9   r   rS   rN   ÚrangerZ   rs   )r™   rx   Zall_columnsZfirst_rowgroupZfirst_row_cellsZnum_columnsrs   r}   rƒ   rp   r   r;   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Ä||_|sÒg |_	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 )z‚Run 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,   Néd   r   g0¸D   ð?g¡�vÿÿÿï?c                    s   g | ]}ˆ| ˆ |  ‘qS r   r   ©r   r}   )Ú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	   rR   Úmargin_rightÚpadding_leftÚpadding_rightÚborder_left_widthÚborder_right_widthr   rs   rŸ   rO   rU   rT   Údistribute_excess_width)r<   r™   r$   rx   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guessesr}   Ú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   r9   r   r¡   rµ   rS   )r<   Úwrapperr$   rx   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 )z�Return 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   ÚLineBoxÚTableRowBoxÚfind_in_flow_baselinerB   rŽ   r˜   r-   )r;   r¹   Úresultr   r   r   r[   ?  s
    
r[   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)	Ú
isinstancerB   rA   r   ÚTableCaptionBoxÚreversedrI   r5   r¼   )r™   r–   r¹   rI   r7   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  < q–d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 ƒ}|�r–t‡ fdd„|D ƒƒ}|| }
|D ]}||  ˆ | |
 7  < �qrdS dd„ t || |jd�D ƒ}|�rà|D ]}||  |t|ƒ 7  < �q¼d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   r}   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   r}   rƒ   r   r   r   r&   š  s   ÿc                 S   s   g | ]\}}|‘qS r   r   rÂ   r   r   r   r&   £  r'   )rK   r)   rT   rO   )r<   r²   r´   rs   r±   r°   r¯   Zcolumn_sliceÚcolumnsZsum_max_content_widthsÚratior}   Zsum_intrinsic_percentagesr   rÃ   r   r®   b  s\    	ÿÿÿÿÿÿr®   Ú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 }qÒqÆd}ˆjD ],}|jD ]}||d|ˆ dƒ |d7 }�qì�qâd}ˆ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|| | || �p’dƒ}|| | || | �p°dƒ}|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ÚdoubleÚsolidÚdashedÚdottedÚridgeÚoutsetÚgrooveÚinsetÚnonec                 S   s   i | ]\}}||“qS r   r   )r   Úscorer9   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Ú_widthÚ_colorrÈ   r   r   )Z
draw.colorrØ   Úget)Zborder_gridZ	box_styleÚsiderM   Úgrid_yrØ   r9   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r†t||| ƒD ](}ˆˆ|d||ƒ ˆˆ|d|| |ƒ q"t||| ƒD ](}ˆˆ |d||ƒ ˆˆ |d||| ƒ qZn‚t||| ƒD ]0}ˆˆ|dd| | |ƒ ˆˆ|dd| |ƒ q”td| d| | dƒD ](}ˆˆ |d||ƒ ˆˆ |d||| ƒ qÞd S )Nr   r   ÚleftÚrightr>   r@   r   )r9   rŸ   )r™   ÚxÚyrœ   Úhr9   ÚyyÚxx)r”   rã   rx   Ú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>©rU   )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ç   Úx2)r”   r   r   Úmax_horizontal_width-  s    z4collapse_table_borders.<locals>.max_horizontal_widthNr>   r@   rä   rå   )rÀ   rK   ÚTRANSPARENTrŸ   rI   rM   rN   r]   r9   rO   r�   Úspan)rx   rÖ   Úgrid_heightÚstylesrì   Zstrong_null_borderrß   r‚   r%   r;   rM   rN   r]   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â   rx   rë   r×   r   Úcollapse_table_borders«  s°    
ÿ
ÿ







ÿ

ÿrþ   )Ú__doc__Úmathr   Útinycss2.color4Útinycss2Úformatting_structurer   Úloggerr   Úpercentr   r   Ú	preferredr	   r—   r\   r¡   rµ   r¸   r[   rº   r¼   Úslicer®   Úcolor4Úparse_colorrú   rþ   r   r   r   r   Ú<module>   s*       iV_þ
F