a
    [Xh+                     @   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_heightZdefault_widthZdefault_height r   _/var/www/viveiro_mudafortebrasil/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_fitZobject_positionimage_resolution	font_sizefill)Zcontain
scale-downr   noner       rightbottom)stylereplacementget_intrinsic_sizer   widthheightr   minr   Zcontent_box_xZcontent_box_y)boxr   positionimager   r	   r
   Z
draw_widthZdraw_heightZorigin_x
position_xZorigin_y
position_yZref_xZref_yr   r   r   replacedbox_layoutV   sL    















r)   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,  )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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"   r.   r   r   r   replaced_box_height   s    
$
r1   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   leftZmargin_r   r   N)getattrsetattr inline_replaced_box_width_height)r$   r-   Zsider   r   r   inline_replaced_box_layout   s    r7   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   r/   without_min_maxr1   min_max_auto_replaced)r$   r-   r   r   r   r6      s    $


r6   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ư>)r:   r;   )r#   r;   )r;   r:   )r;   r#   )r:   r:   )r#   r#   )r#   r:   )r:   r#   N)r!   r"   	min_width
min_heightr:   	max_width
max_heightr#   )r$   r!   r"   r<   r=   r>   r?   Z
violationsr   r   r   r9      sV    




r9   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   r*   )avoid_collisionsr!   r"   r   F)outerNany)breakpage)r,   r+   floatr@   copyr   Zmargin_leftZmargin_rightblock_replaced_widthr8   r1   r9   r'   r(   )contextr$   r-   r+   r@   Zcomputed_margins_Z	resume_atZ	next_pageZadjoining_marginsZcollapsing_throughr   r   r   block_replaced_box_layout
  s,    $


rJ   c                 C   s(   ddl m} t| | || | d S )Nr   r*   )r,   r+   r/   r8   )r$   r-   r+   r   r   r   rG   '  s    rG   N)__doc__Zmin_maxr   r   percentr   r   r   r   r   r)   r/   r1   r7   r6   r9   rJ   rG   r   r   r   r   <module>   s"   '
/
"

8