a
    ¥Q•hª+  ã                   @   s�   d 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
edd„ ƒZedd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZdS )zcLayout for images and other replaced elements.

See https://drafts.csswg.org/css-images-3/#sizing

é   )Úhandle_min_max_heightÚhandle_min_max_width)Ú
percentagec                 C   s¼   |dkrd}|dkrd}|dur0|dur0||fS |dur\||durJ|| n|durV|n|fS |durˆ|durt|| n| dur€| n||fS | dus˜|dur¬t | ||| |||ƒS t|||ƒS dS )z¶Default sizing algorithm for the concrete object size.

    Return a ``(concrete_width, concrete_height)`` tuple.

    See https://drafts.csswg.org/css-images-3/#default-sizing

    ÚautoN)Údefault_image_sizingÚcontain_constraint_image_sizing)Úintrinsic_widthÚintrinsic_heightÚintrinsic_ratioZspecified_widthZspecified_heightÚdefault_widthÚdefault_height© r   úS/var/www/sistema_ama/venv/lib/python3.9/site-packages/weasyprint/layout/replaced.pyr      s6    
ýüýÿr   c                 C   s   t | ||dd�S )zÅContain constraint sizing algorithm for the concrete object size.

    Return a ``(concrete_width, concrete_height)`` tuple.

    See https://drafts.csswg.org/css-images-3/#contain-constraint

    F©Úcover©Ú_constraint_image_sizing©Úconstraint_widthÚconstraint_heightr
   r   r   r   r   2   s    	ÿr   c                 C   s   t | ||dd�S )zÁCover constraint sizing algorithm for the concrete object size.

    Return a ``(concrete_width, concrete_height)`` tuple.

    See https://drafts.csswg.org/css-images-3/#cover-constraint

    Tr   r   r   r   r   r   Úcover_constraint_image_sizing?   s    	ÿr   c                 C   s<   |d u r| |fS || || kA r,|| |fS | | | fS d S )Nr   )r   r   r
   r   r   r   r   r   L   s
    r   c                 C   sb  | j d }| j d }| j}| | j d | j d ¡\}}}d ||fv rXt| j| j|ƒ\}}|dkrp| j| j }}nr|dv rŽt| j| j|ƒ\}}n8|dkr¬t| j| j|ƒ\}}n|dks¼J |ƒ‚|| }}|d	krât||ƒ}t||ƒ}|d
 \}	}
}}| j| }| j| }t|
|ƒ}
t||ƒ}|	dk�r,||
 }
|dk�r>|| }|
|  	¡ 7 }
||  
¡ 7 }|||
|fS )NÚ
object_fitÚobject_positionÚimage_resolutionÚ	font_sizeÚfill)Úcontainú
scale-downr   Únoner   é    ÚrightÚbottom)ÚstyleÚreplacementÚget_intrinsic_sizer   ÚwidthÚheightr   Úminr   Úcontent_box_xÚcontent_box_y)Úboxr   ÚpositionÚimager   r	   r
   Z
draw_widthZdraw_heightÚorigin_xÚ
position_xÚorigin_yÚ
position_yZref_xZref_yr   r   r   Úreplacedbox_layoutV   sL    

ÿÿ
ÿ
ÿ

ÿ









r1   c                 C   s¸   ddl m} | j | jd | jd ¡\}}}| j| j  krDdkr~n n6|durX|| _n&|dur~|durt|| | _n
|| |ƒ | jdkr´|durž| j| | _n|dur®|| _nd| _dS )z&Set the used width for replaced boxes.r   ©Úblock_level_widthr   r   r   Ni,  )Úblockr3   r#   r$   r"   r&   r%   )r*   Úcontaining_blockr3   r%   r&   Úratior   r   r   Úreplaced_box_width…   s"    ÿ


r7   c                 C   sØ   | j  | jd | jd ¡\}}}| j| j  kr8dkrDn n|| _n| jdkr^|r^| j| | _| j| j  krvdkrŠn n|durŠ|| _nJ|durª| jdkrª| j| | _n*| jdkrÄ|durÄ|| _n| jdkrÔd| _dS )z3Compute and set the used height for replaced boxes.r   r   r   Né–   )r#   r$   r"   r&   r%   )r*   r%   r&   r6   r   r   r   Úreplaced_box_height¨   s    ÿ
$
r9   c                 C   s>   dD ]*}t | d|› �ƒdkrt| d|› �dƒ qt| |ƒ dS )z5Lay out an inline :class:`boxes.ReplacedBox` ``box``.)Útopr    r!   ÚleftÚmargin_r   r   N)ÚgetattrÚsetattrÚ inline_replaced_box_width_height)r*   r5   Úsider   r   r   Úinline_replaced_box_layoutÀ   s    rA   c                 C   sZ   | j d | j d   kr dkrDn n t | |¡ t | ¡ t| ƒ nt| |ƒ t| ƒ d S )Nr%   r&   r   )r"   r7   Úwithout_min_maxr9   Úmin_max_auto_replaced)r*   r5   r   r   r   r?   È   s    $


r?   c                 C   sð  | j }| j}| j}| j}t|| jƒ}t|| jƒ}||k r<dn||krHdnd||k rVdn||krbdndf}|dkrtd}|dkr€d}|dkr¦|| _ t|| | |ƒ| _�nF|dkrÌ|| _ t|| | |ƒ| _�n |dkrðt|| | |ƒ| _ || _nü|d	k�rt|| | |ƒ| _ || _nÖ|d
k�rj|| || k�rN|| _ t||| | ƒ| _nt||| | ƒ| _ || _n‚|dk�r¾|| || k�r¢t||| | ƒ| _ || _n|| _ t||| | ƒ| _n.|dk�rÖ|| _ || _n|dk�rì|| _ || _dS )zCResolve min/max constraints on replaced elements with 'auto' sizes.r'   ÚmaxÚ r   g�íµ ÷Æ°>)rD   rE   )r'   rE   )rE   rD   )rE   r'   )rD   rD   )r'   r'   )r'   rD   )rD   r'   N)r%   r&   Ú	min_widthÚ
min_heightrD   Ú	max_widthÚ
max_heightr'   )r*   r%   r&   rF   rG   rH   rI   Ú
violationsr   r   r   rC   Ò   sV    þ




rC   c                 C   sØ   ddl m} ddlm} | ¡ }|jd |jd   kr@dkrˆn nD|j|jf}t 	||¡ t
 	|¡ t|ƒ |\|_|_| 	||¡ nt||ƒ t
|ƒ || ||dd�\|_|_}d	}d
d	dœ}g }	d}
||||	|
fS )z5Lay out the block :class:`boxes.ReplacedBox` ``box``.r   r2   )Úavoid_collisionsr%   r&   r   F)ÚouterNÚany)ÚbreakÚpage)r4   r3   ÚfloatrK   Úcopyr"   Úmargin_leftÚmargin_rightÚblock_replaced_widthrB   r9   rC   r.   r0   )Úcontextr*   r5   r3   rK   Zcomputed_marginsÚ_Ú	resume_atÚ	next_pageÚadjoining_marginsÚcollapsing_throughr   r   r   Úblock_replaced_box_layout
  s,    $ÿ

ÿ
r[   c                 C   s(   ddl m} t | |¡ | | |¡ d S )Nr   r2   )r4   r3   r7   rB   )r*   r5   r3   r   r   r   rT   '  s    rT   N)Ú__doc__Úmin_maxr   r   Úpercentr   r   r   r   r   r1   r7   r9   rA   r?   rC   r[   rT   r   r   r   r   Ú<module>   s"   '
/
"

8