o
    Zh0h+                     @   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r|dur||fS |dur0||dur&|| fS |dur-|fS |fS |durJ|dur>|| |fS | durF| |fS ||fS | dusR|dur\t | ||| |||S t|||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_ratiospecified_widthspecified_heightdefault_widthdefault_height r   P/var/www/html/rh/venv/lib/python3.10/site-packages/weasyprint/layout/replaced.pyr      sB   


r   c                 C      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      	r   c                 C   r   )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?   r   r   c                 C   s8   |d u r| |fS || || kA r|| |fS | | | fS )Nr   )r   r   r
   r   r   r   r   r   L   s
   r   c                 C   s^  | j d }| j d }| j}|| j d | j d \}}}d ||fv r,t| j| j|\}}|dkr8| j| j}}n9|dv rGt| j| j|\}}n|dkrVt| j| j|\}}n|dks^J |||}}|d	krqt||}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
   
draw_widthdraw_heightorigin_x
position_xorigin_y
position_yref_xref_yr   r   r   replacedbox_layoutV   sL   













r9   c                 C   s   ddl m} | j| jd | jd \}}}| j| j  kr"dkr?n n|dur,|| _n|dur?|dur:|| | _n|| | | jdkr^|durP| j| | _dS |durY|| _dS d| _dS dS )z&Set the used width for replaced boxes.r   block_level_widthr   r   r   Ni,  )blockr;   r'   r(   r&   r*   r)   )r.   containing_blockr;   r)   r*   ratior   r   r   replaced_box_width   s$   




r?   c                 C   s   | j | jd | jd \}}}| j| j  krdkr"n n|| _n| jdkr/|r/| j| | _| j| j  kr;dkrFn n	|durF|| _dS |durW| jdkrW| j| | _dS | jdkre|dure|| _dS | jdkrod| _dS dS )z3Compute and set the used height for replaced boxes.r   r   r   N   )r'   r(   r&   r*   r)   )r.   r)   r*   r>   r   r   r   replaced_box_height   s    
$



rA   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.   r=   sider   r   r   inline_replaced_box_layout   s
   rI   c                 C   s\   | j d | j d   krdkr#n nt| | t|  t|  d S t| | t|  d S )Nr)   r*   r   )r&   r?   without_min_maxrA   min_max_auto_replaced)r.   r=   r   r   r   rG      s   $

rG   c                 C   s  | j }| j}| j}| j}t|| j}t|| j}||k rdn||kr$dnd||k r+dn||kr1dndf}|dkr:d}|dkr@d}|dkrS|| _ t|| | || _dS |dkrf|| _ t|| | || _dS |dkryt|| | || _ || _dS |d	krt|| | || _ || _dS |d
kr|| || kr|| _ t||| | | _dS t||| | | _ || _dS |dkr|| || krt||| | | _ || _dS || _ t||| | | _dS |dkr|| _ || _dS |dkr|| _ || _dS dS )zCResolve min/max constraints on replaced elements with 'auto' sizes.r+   max r#   gư>)rL   rM   )r+   rM   )rM   rL   )rM   r+   )rL   rL   )r+   r+   )r+   rL   )rL   r+   N)r)   r*   	min_width
min_heightrL   	max_width
max_heightr+   )r.   r)   r*   rN   rO   rP   rQ   
violationsr   r   r   rK      sX   





rK   c                 C   s   ddl m} ddlm} | }|jd |jd   kr dkrDn n"|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   r:   )avoid_collisionsr)   r*   r   F)outerNany)breakpage)r<   r;   floatrS   copyr&   margin_leftmargin_rightblock_replaced_widthrJ   rA   rK   r4   r6   )contextr.   r=   r;   rS   computed_margins_	resume_at	next_pageadjoining_marginscollapsing_throughr   r   r   block_replaced_box_layout
  s,   $


rd   c                 C   s(   ddl m} t| | || | d S )Nr   r:   )r<   r;   r?   rJ   )r.   r=   r;   r   r   r   r\   '  s   r\   N)__doc__min_maxr   r   percentr   r   r   r   r   r9   r?   rA   rI   rG   rK   rd   r\   r   r   r   r   <module>   s$    '
/
"

8