a
    Qh+                     @   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rt | ||| |||S t|||S dS )zDefault 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 )zContain 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 )zCover 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 rt| j| j|\}}n8|dkrt| j| j|\}}n|dksJ ||| }}|d	krt||}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rn 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rd| _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rd}|dkr|| _ t|| | || _nF|dkr|| _ t|| | || _n |dkrt|| | || _ || _n|d	krt|| | || _ || _n|d
krj|| || krN|| _ t||| | | _nt||| | | _ || _n|dkr|| || krt||| | | _ || _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rn 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