a
    ¥Q•h@y  ã                   @   s  d Z ddlZddlm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d8dd„Zd9dd„Zdd„ Zdd„ Zd:dd„Zd;dd„Zd<dd„Zd=dd„Zd>dd„Zd?d d!„Zd"d#„ Zd$d%„ Zd@d&d'„ZdAd(d)„Zd*d+„ ZdBd,d-„ZdCd.d/„ZdDd0d1„ZdEd2d3„Z dFd4d5„Z!d6d7„ Z"dS )Ga  Preferred and minimum preferred width.

Also known as max-content and min-content width, also known as the
shrink-to-fit algorithm.

Terms used (max-content width, min-content width) are defined in David
Baron's unofficial draft (https://dbaron.org/css/intrinsic/).

é    N)Úcache)Úinfé   )Úboxes)Úcan_break_textÚsplit_first_lineé   )Údefault_image_sizingc                 C   s$   t tt| |dd�|ƒt| |dd�ƒS )zæReturn the shrink-to-fit width of ``box``.

    *Warning:* both available_content_width and the return value are
    for width of the *content area*, not margin area.

    https://www.w3.org/TR/CSS21/visudet.html#float-width

    F©Úouter)ÚminÚmaxÚmin_content_widthÚmax_content_width)ÚcontextÚboxZavailable_content_width© r   úT/var/www/sistema_ama/venv/lib/python3.9/site-packages/weasyprint/layout/preferred.pyÚshrink_to_fit   s    	þür   Tc                 C   sä   |j rt| ||ƒd S t|tjƒr.t| ||ƒS t|tjtjfƒrLt| ||ƒS t|tj	ƒrbt
| |ƒS t|tjtjfƒr„t| ||dd�S t|tjƒršt||ƒS t|tjƒr²t| ||ƒS t|tjƒrÊt| ||ƒS tdt|ƒj› d�ƒ‚dS )zsReturn the min-content width for ``box``.

    This is the width by breaking at every line-break opportunity.

    r   T©Úis_line_startzmin-content width for ú not handled yetN)Úis_table_wrapperÚ"table_and_columns_preferred_widthsÚ
isinstancer   ÚTableCellBoxÚtable_cell_min_content_widthÚBlockContainerBoxÚTableColumnBoxÚblock_min_content_widthÚTableColumnGroupBoxÚcolumn_group_content_widthÚ	InlineBoxÚLineBoxÚinline_min_content_widthÚReplacedBoxÚreplaced_min_content_widthÚFlexContainerBoxÚflex_min_content_widthÚGridContainerBoxÚ	TypeErrorÚtypeÚ__name__©r   r   r   r   r   r   r   $   s"    

r   c                 C   sè   |j rt| ||ƒd S t|tjƒr2t| ||ƒd S t|tjtjfƒrPt| ||ƒS t|tj	ƒrft
| |ƒS t|tjtjfƒrˆt| ||dd�S t|tjƒržt||ƒS t|tjƒr¶t| ||ƒS t|tjƒrÎt| ||ƒS tdt|ƒj› d�ƒ‚dS )znReturn the max-content width for ``box``.

    This is the width by only breaking at forced line breaks.

    r   Tr   zmax-content width for r   N)r   r   r   r   r   Ú table_cell_min_max_content_widthr   r   Úblock_max_content_widthr    r!   r"   r#   Úinline_max_content_widthr%   Úreplaced_max_content_widthr'   Úflex_max_content_widthr)   r*   r+   r,   r-   r   r   r   r   ?   s"    

r   c                    sd   |j d }|dks|jdkrD‡ ‡fdd„|jD ƒ}|r>t|ƒnd}n|jdksRJ ‚|j}t|||ƒS )z+Helper to create ``block_*_content_width.``ÚwidthÚautoú%c                    s"   g | ]}|  ¡ sˆˆ |d d�‘qS )Tr
   )Úis_absolutely_positioned©Ú.0Úchild©r   Úfunctionr   r   Ú
<listcomp>a   s   ÿz(_block_content_width.<locals>.<listcomp>r   Úpx)ÚstyleÚunitÚchildrenr   ÚvalueÚadjust)r   r   r;   r   r3   Úchildren_widthsr   r:   r   Ú_block_content_widthZ   s    
ÿrD   c                 C   sæ   | j d }| j d }|dks&|jdkr,d}n|j}|dksD|jdkrJt}n|j}t| tjƒrÖ| j d| j d ¡\}}}|durÖ| j d	 }|dkrª|jdkrªt	||j| ƒ}| j d
 }|dkrÖ|jdkrÖt
||j| ƒ}t	|t
||ƒƒS )z;Get box width from given width and box min- and max-widths.Ú	min_widthÚ	max_widthr4   r5   r   r   Ú	font_sizeNÚ
min_heightÚ
max_height)r>   r?   rA   r   r   r   r%   ÚreplacementÚget_intrinsic_sizer   r   )r   r3   rE   rF   Ú_ÚratiorH   rI   r   r   r   Úmin_maxl   s(    


ÿ


rN   c                 C   sð   d}|rddgng |rddgng  D ]D}| j | }|dkr$|jdkrP||j7 }q$|jdks^J ‚||j7 }q$| j d	 d
k}|r¤|r–t| dƒr–|| j7 }n|| j d 7 }|rÐ|rÂt| dƒrÂ|| j7 }n|| j d 7 }|dk rè|d|d   S dS dS )z3Add box paddings, borders and margins to ``width``.r   Úmargin_leftÚpadding_leftÚmargin_rightÚpadding_rightr4   r=   r5   Úborder_collapseÚcollapseÚborder_left_widthÚborder_right_widthéd   r   N)r>   r?   rA   ÚhasattrrU   rV   )r   r3   ÚleftÚrightÚpercentagesrA   Zstyle_valuerT   r   r   r   Úmargin_width‡   s.    ÿÿ

r\   c                 C   s$   t | |ƒ}|rt| |||ƒS |S dS )z˜Respect min/max and adjust width depending on ``outer``.

    If ``outer`` is set to ``True``, return margin width, else return content
    width.

    N)rN   r\   )r   r   r3   rY   rZ   Úfixedr   r   r   rB   µ   s    
rB   c                 C   s   t | |t|ƒS )z0Return the min-content width for a ``BlockBox``.)rD   r   r-   r   r   r   r   Ä   s    ÿr   c                 C   s   t | |t|ƒS )z0Return the max-content width for a ``BlockBox``.)rD   r   r-   r   r   r   r/   Ê   s    r/   Fc              	   C   s6   t | |||d||d�}|r"t|ƒnt|ƒ}t|||ƒS )zÑReturn the min-content width for an ``InlineBox``.

    The width is calculated from the lines from ``skip_stack``. If
    ``first_line`` is ``True``, only the first line minimum width is
    calculated.

    T)ÚminimumÚ
skip_stackÚ
first_line)Úinline_line_widthsÚnextr   rB   )r   r   r   r_   r`   r   Úwidthsr3   r   r   r   r$   Ï   s    	
þr$   c                 C   s<   t t| |||dd�ƒ}|d  t| |ƒ8  < t||t|ƒƒS )z2Return the max-content width for an ``InlineBox``.F)r^   éÿÿÿÿ)Úlistra   Útrailing_whitespace_sizerB   r   )r   r   r   r   rc   r   r   r   r0   ß   s
    ÿr0   c                 C   sB   |j d }|dks|jdkr"d}n|jdks0J ‚|j}t|d|ƒS )z9Return the *-content width for a ``TableColumnGroupBox``.r3   r4   r5   r   r=   F)r>   r?   rA   rB   )r   r   r3   r   r   r   r!   é   s    
r!   c                    s0   ‡ fdd„|j D ƒ}t|||r&t|ƒndƒ}|S )z4Return the min-content width for a ``TableCellBox``.c                    s   g | ]}|  ¡ stˆ |ƒ‘qS r   )r6   r   r7   ©r   r   r   r<   û   s   þz0table_cell_min_content_width.<locals>.<listcomp>r   )r@   rB   r   )r   r   r   rC   Zchildren_min_widthr   rg   r   r   õ   s    
þýr   c                 C   s&   t | ||ƒ}t|t| ||ƒƒ}||fS )z=Return the min- and max-content width for a ``TableCellBox``.)r   r   r/   )r   r   r   rE   rF   r   r   r   r.     s    r.   c              
   c   sì  t |tjƒr*|jd jdkr*|jd j}nd}d}|d u r@d}	n| ¡ \\}	}|j|	d … D �]~}
|
 ¡ rlq\t |
tj	ƒrút
| |
|||||ƒ}|rœt|ƒg}nt|ƒ}t|ƒdkrÆt|
||d ƒ|d< n0t|
||d dd�|d< t|
||d dd�|d< �nzt |
tjƒ�rP|
jd	 d
v }|
jd	 dv }|d u �r4d}	n| ¡ \\}	}|d u �sPJ ‚|
j ¡ |	�p`dd … }|�r~|�r~| d¡}|�rˆdnd }g }d }}|d u�rô||7 }t||d …  ¡ |
j| ||
j|dd�\}}}}}}| |¡ |�r˜�qô�q˜|�r|�r||d 7 } �qÞt| ¡ dd … d |
jd ƒ}|�rt|�rt|�rt| d¡ n$|�rhdt| |
ƒdg}nt| |
ƒg}||d 7 }t|ƒdk�rÌ|| V  d}t|ƒdk�rÄ|dd… D ]}|V  �q¶|d }|d dk}d }q\|| V  d S )NÚtext_indentr5   r   r   F)rZ   rd   )rY   Úwhite_space©ÚnormalÚnowrapúpre-line)rk   zpre-wraprm   ó    T)r   r^   ÚaÚlangr   )r   r   r#   r>   r?   rA   Úitemsr@   r6   r"   ra   rb   re   ÚlenrB   ÚTextBoxÚtextÚencodeÚlstripr   ÚdecodeÚjustification_spacingÚappendr   r   r   )r   r   r   r   r^   r_   r`   rh   Úcurrent_lineÚskipr9   ÚlinesÚspace_collapseÚ	text_wrapZ
child_textrF   Úresume_indexZnew_resume_indexrL   r3   Ú	can_breakÚliner   r   r   ra     s†    þ


ý
ÿ	

ra   c                 C   sš   | j d dkr*| j d jdkr*| j d jnd}| j d dkrX| j d jdkrX| j d jnt}| j d dkr†| j d jdkr†| j d jnd}t|t||ƒƒS )z~Return the percentage contribution of a cell, column or column group.

    https://dbaron.org/css/intrinsic/#pct-contrib

    rE   r4   r5   r   rF   r3   )r>   r?   rA   r   r   r   )r   rE   rF   r3   r   r   r   Ú_percentage_contributiong  s     ÿþÿþÿþr‚   c           :   
      s¢  ddl m} | ¡ }| j |¡}|r,|| S d\‰ }d}|jD ]F}|jD ]:}	|	jD ]&}
t|
j|
j ˆ ƒ‰ t||
j	 |ƒ}qR|d7 }qHq>‡ fdd„t
|ƒD ƒ}d}|jD ]2}|jD ]&}	|	jD ]}
|
|| |
j< qº|d7 }q°q¦tt|Ž ƒ}|jd dk�r&ˆ dk�r&|jd	 d dtd
d„ |D ƒƒ  }nd}ˆ dk�s>|dk�rÈg |_t| |dd�}t| |dd�}t|dt| |ƒd�}t|dt| |ƒd�}g g g g |g f}||g|¢R ||g|¢R dœ | j|< }|| S dgˆ  }dgˆ  }d}|jD ]F}|jD ].}|||< |||< |d7 }|ˆ k�rð �q$�qð�qæ �q.�qæg }tƒ }dgˆ  }dgˆ  ‰dgˆ  ‰t
ˆ ƒD ]ô}||fD ]Z}||  }�rjt|| t| |ƒƒ||< tˆ| t| |ƒƒˆ|< tˆ| t|ƒƒˆ|< �qj|| D ]€}
|
�sÜ�qÎ|
jdk�r2t| |
ƒ\}}t|| |ƒ||< tˆ| |ƒˆ|< tˆ| t|
ƒƒˆ|< n| |
¡ | |
jd ¡ �qÎ�q^g }t|ƒD ]D\}}	d}| g  } ¡ t|	ƒD ]\}!}
|
�r”|!}|  |¡ �q‚�q`t‡‡fdd„ƒ}"t|ƒD ]¦}#g }$t
ˆ ƒD ]Ž}ˆ|  }%�rð|$ |%¡ �qÐt||ƒD ]V\}	} | |  }du �r�qú|	| }&|&jd |#k�r4�qú|"|&|ˆ| ƒ}'t|%|'ƒ}%�qú|$ |%¡ �qÐ|$‰�qÀdd„ t
ˆ ƒD ƒ}(t
ˆ ƒD ]Ø}|| �rÆ|| jd dk�rÆ|| jd jdk�rÆd|(|< �q‚|| �r|| jd dk�r|| jd jdk�rd|(|< �q‚|| D ]H}
|
�r|
jdk�r|
jd dk�r|
jd jdk�rd|(|<  �q‚�q�q‚‡fdd„tˆƒD ƒ‰|D ]Ô}
t| |
ƒ})t| |
ƒ}*t|
j|
j|
j ƒ}+t||+ ƒ},tˆ|+ ƒ}-|jd dk�rä|
jd |jd	 d  }.nd}.|)|,|. k�r|)|,|.  }/|| ||/||(ˆˆ|+ƒ |*|-|. k�rv|*|-|.  }/|| ||/ˆ|(ˆˆ|+ƒ �qv‡‡fdd„t
ˆ ƒD ƒ}0t‡‡fdd„t
ˆ ƒD ƒƒ}1dtˆƒ d }2|2dk�r²|1dk�rªd}3nt j!}3n|1|2 }3|t|ƒ }4|ttˆƒ|3g|0¢ƒ }5|jd dk�r|jd jdk�r|jd j" }6}7n|4}6|5}7t|4t|d|6d�ƒ}4t|5t|d|7d�ƒ}5t#|t#||4ƒƒ}8t#|t#||5ƒƒ}9|ˆˆ|(||f}|4|5g|¢R |8|9g|¢R dœ | j|< }|| S )ad  Return content widths for the auto layout table and its columns.

    The tuple returned is
    ``(table_min_content_width, table_max_content_width,
       column_min_content_widths, column_max_content_widths,
       column_intrinsic_percentages, constrainedness,
       total_horizontal_border_spacing, grid)``

    https://dbaron.org/css/intrinsic/

    r   )Údistribute_excess_width)r   r   r   c                    s   g | ]}d gˆ  ‘qS )Nr   ©r8   Úi)Ú
grid_widthr   r   r<   •  ó    z6table_and_columns_preferred_widths.<locals>.<listcomp>rS   ÚseparateÚborder_spacingc                 S   s   g | ]}t |ƒr|‘qS r   )Úany)r8   Úcolumnr   r   r   r<   £  r‡   Fr
   T)r   r3   )FTNc           
         s„   t ||| j ƒ}tˆ | ƒ}t| ƒ}td|| ƒ}‡ ‡fdd„t||| j ƒD ƒ}t|ƒ}|dkrtdt|ƒpnd }	n|| }	||	 S )Nr   c                    s    g | ]}ˆ | d krˆ| ‘qS )r   r   )r8   Új©Úintrinsic_percentagesÚmax_content_widthsr   r   r<   ù  s   þz[table_and_columns_preferred_widths.<locals>.get_percentage_contribution.<locals>.<listcomp>r   )ÚsliceÚcolspanÚsumr‚   r   Úrangerr   )
Úorigin_cellÚoriginr   Z
cell_sliceZbaseline_percentageÚcell_percentage_contributionÚdiffZother_columns_contributionsZother_columns_contributions_sumrM   r�   r   r   Úget_percentage_contributionò  s    þzGtable_and_columns_preferred_widths.<locals>.get_percentage_contributionc                 S   s   g | ]}d ‘qS )Fr   r„   r   r   r   r<     r‡   r3   r4   r5   c              	      s*   g | ]"\}}t |d tˆ d|… ƒ ƒ‘qS )rW   N)r   r’   )r8   r…   Ú
percentage)rŽ   r   r   r<   +  s   ÿc                    s(   g | ] }ˆ | rˆ| ˆ | d   ‘qS )rW   r   r„   r�   r   r   r<   J  s   þc                 3   s"   | ]}ˆ | d krˆ| V  qdS )r   Nr   r„   r�   r   r   Ú	<genexpr>N  s   ÿz5table_and_columns_preferred_widths.<locals>.<genexpr>rW   r=   )$Útablerƒ   Úget_wrapped_tableÚtablesÚgetr@   r   Úgrid_xr‘   Úrowspanr“   re   Úzipr>   rr   r   r/   rB   Úcolumn_groupsÚsetr   r   r‚   r.   ry   ÚaddÚ	enumerater   Úsortedr?   r�   r’   ÚsysÚmaxsizerA   r\   ):r   r   r   rƒ   r›   ÚresultÚgrid_heightZ
row_numberÚ	row_groupÚrowÚcellÚgridZzipped_gridÚtotal_horizontal_border_spacingrE   rF   Zouter_min_widthZouter_max_widthr¢   ÚcolumnsZcolumn_numberÚcolumn_groupr‹   Zcolspan_cellsZcolspansZmin_content_widthsr…   ÚgroupsÚgroupZrows_originsÚyr•   Zrow_originsÚxr˜   ÚspanZpercentage_contributionsZpercentage_contributionr”   r–   ÚconstrainednessZmin_contentZmax_contentÚcolumn_sliceZcolumns_min_contentZcolumns_max_contentÚspacingÚexcess_widthZsmall_percentage_contributionsZ'large_percentage_contribution_numeratorZ)large_percentage_contribution_denominatorZlarge_percentage_contributionÚtable_min_content_widthÚtable_max_content_widthZtable_min_widthZtable_max_widthZtable_outer_min_content_widthZtable_outer_max_content_widthr   )r†   rŽ   r�   r   r   y  s¤   





ÿÿÿÿþ









ÿÿÿÿ



ÿÿÿÿÿþ
þ

ýýþÿÿ

ÿÿ
ÿÿþÿ"ÿÿÿÿ
ÿ
ÿþþr   c           	   	   C   sô   | j d }|dkr¾| j d }|dks.|jdkr4d}n|jdksBJ ‚|j}| j d dkrl| j d jdkrld}qè| j}| | j d | j d	 ¡\}}}|r¢|s¢|s¢d}qèt|||d|d
dd�\}}n*| j d jdkrÔd}n|jdksâJ ‚|j}t| ||ƒS )z:Return the min-content width for an ``InlineReplacedBox``.r3   r4   Úheightr5   r=   rF   r   Úimage_resolutionrG   é,  é–   ©Zdefault_widthZdefault_height©r>   r?   rA   rJ   rK   r	   rB   ©	r   r   r3   r½   ÚimageZintrinsic_widthZintrinsic_heightZintrinsic_ratiorL   r   r   r   r&   ‹  s6    

ÿÿÿþr&   c           	   	   C   s¾   | j d }|dkrˆ| j d }|dks.|jdkr4d}n|jdksBJ ‚|j}| j}| | j d | j d ¡\}}}t|||d|dd	d
�\}}n*| j d jdkržd}n|jdks¬J ‚|j}t| ||ƒS )z:Return the max-content width for an ``InlineReplacedBox``.r3   r4   r½   r5   r=   r¾   rG   r¿   rÀ   rÁ   r   rÂ   rÃ   r   r   r   r1   ­  s*    

ÿÿ
þr1   c                    sf   ‡ fdd„|j D ƒ}|s$t||dƒS |jd  d¡rR|jd dkrRt||t|ƒƒS t||t|ƒƒS dS )	z9Return the min-content width for an ``FlexContainerBox``.c                    s   g | ]}|j rtˆ |ƒ‘qS r   )Úis_flex_itemr   r7   rg   r   r   r<   Ë  s   ÿz*flex_min_content_width.<locals>.<listcomp>r   Úflex_directionr¬   Ú	flex_wraprl   N©r@   rB   r>   Ú
startswithr’   r   )r   r   r   Zmin_contentsr   rg   r   r(   Ç  s    
þÿr(   c                    sX   ‡ fdd„|j D ƒ}|s$t||dƒS |jd  d¡rDt||t|ƒƒS t||t|ƒƒS dS )z9Return the max-content width for an ``FlexContainerBox``.c                    s   g | ]}|j rtˆ |ƒ‘qS r   )rÅ   r   r7   rg   r   r   r<   Û  s   ÿz*flex_max_content_width.<locals>.<listcomp>r   rÆ   r¬   NrÈ   )r   r   r   Zmax_contentsr   rg   r   r2   ×  s    
þr2   c                 C   s0  ddl m}m} t|tjtjfƒr8|js,dS |jd }qt|tjƒrX|j	rX|j
d dv s\dS |j	 d¡}|j
d dksˆt|ƒt|j	ƒkrŒdS |�rd}|d	ur¸|}|| |d	|ƒ\}}}q–|sÀJ ‚| |¡}	|| |	d	|ƒ\}	}}|	d	u rì|jS |d	u søJ ‚|j|	j S n&||j	|j
| d	|jƒ\}}}}
}}|
S d	S )
z6Return the size of the trailing whitespace of ``box``.r   )r   Úsplit_text_boxr   rd   ri   rj   ú rG   N)Úinliner   rÊ   r   r   r"   r#   r@   rs   rt   r>   Úrstriprr   Úcopy_with_textr3   rx   )r   r   r   rÊ   Zstripped_textÚresumeZ
old_resumeZold_boxrL   Zstripped_boxr3   r   r   r   rf   æ  s<    ÿ 
ÿ
ÿrf   )T)T)TT)TT)T)T)TNFF)TF)T)NF)T)T)T)T)T)#Ú__doc__r§   Ú	functoolsr   Úmathr   Úformatting_structurer   Ztext.line_breakr   r   Úreplacedr	   r   r   r   rD   rN   r\   rB   r   r/   r$   r0   r!   r   r.   ra   r‚   r   r&   r1   r(   r2   rf   r   r   r   r   Ú<module>   sD   



.


  ÿ



  ÿ
X
  
"


