
    Bh+                         S r SSKJrJr  SSKJr  S rS rS rS r	S r
\S	 5       r\S
 5       rS rS rS rS r\S 5       rg)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           	          US:X  a  SnUS:X  a  SnUb  Ub  X44$ Ub  UUb  X2-  4$ Ub  U4$ U4$ Ub  Ub  XB-  U4$ U b  U U4$ UU4$ U c  Ub  [        XUXUU5      $ [        XVU5      $ )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_heights          L/var/www/html/env/lib/python3.13/site-packages/weasyprint/layout/replaced.pyr   r      s     & 6!"'7'C00		$1@1LO-! 	!%5%A!! 	!  ! 	! 
	%2A2M. 	 	$3$?	 	 	 	 &*:*F'?=   
 3@ @    c                     [        XUSS9$ )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   s      r   r	   r	   2   s     $_EK Kr   c                     [        XUSS9$ )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   s      r   cover_constraint_image_sizingr   ?   s     $_DJ Jr   c                 B    Uc  X4$ X0X-  :  -  (       a  X-  U4$ X U-  4$ )N )r   r   r   r   s       r   r   r   L   s=    22	%6%HH	I 24EEEO!CCCr   c                 2   U R                   S   nU R                   S   nU R                  nUR                  U R                   S   U R                   S   5      u  pEnS XE4;   a#  [        U R                  U R
                  U5      u  pEUS:X  a  U R                  U R
                  pOUS;   a$  [        U R                  U R
                  U5      u  pxO9US:X  a$  [        U R                  U R
                  U5      u  pxOUS:X  d   U5       eXEpUS	:X  a  [        Xt5      n[        X5      nUS
   u  ppU R                  U-
  nU R
                  U-
  n[        X5      n
[        X5      nU	S:X  a  X-
  n
US:X  a  X-
  nXR                  5       -  n
XR                  5       -  nXxX4$ )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_ys                  r   replacedbox_layoutr>   V   s   <(Jyy*+HOOE  II()399[+A	C 7O 22,KIIszz?-4) V"%))SZZK22&E		3::'8#J7"&C		3::'8#J '33'&5%Z9Jk<K19!.H(II
"EJJ$EJ.JJ.J7'
8'
##%%J##%%JJ::r   c                    SSK Jn  U R                  R                  U R                  S   U R                  S   5      u  p4nU R
                  U R                  s=:X  a  S:X  a%  O  O"Ub  X0l        OUb  Ub
  XE-  U l        OU" X5        U R                  S:X  a*  Ub  U R
                  U-  U l        gUb  X0l        gSU l        gg)z&Set the used width for replaced boxes.r   block_level_widthr"   r#   r   Ni,  )blockrA   r,   r-   r+   r/   r.   )r3   containing_blockrA   r.   r/   ratios         r   replaced_box_widthrE      s     )??==		$%syy'=?E5
 zzSYY(&(I!"N	 "#8
yyF

U*CII CI r   c                 2   U R                   R                  U R                  S   U R                  S   5      u  pnU R                  U R                  s=:X  a  S:X  a
  O  OX l        O+U R                  S:X  a  U(       a  U R                  U-  U l        U R                  U R                  s=:X  a  S:X  a  O  O
Ub  X l        gUb%  U R                  S:X  a  U R                  U-  U l        gU R                  S:X  a
  Ub  X l        gU R                  S:X  a  SU l        gg)z3Compute and set the used height for replaced boxes.r"   r#   r   N   )r,   r-   r+   r/   r.   )r3   r.   r/   rD   s       r   replaced_box_heightrH      s     ??==		$%syy'=?E5 zzSYY(&(
	v	%YY&

zzSYY(&(V-?
		szzV3YY&
	v	&"4
	v	
 
r   c                 v    S H(  n[        U SU 35      S:X  d  M  [        U SU 3S5        M*     [        X5        g)z5Lay out an inline :class:`boxes.ReplacedBox` ``box``.)topr)   r*   leftmargin_r   r(   N)getattrsetattr inline_replaced_box_width_height)r3   rC   sides      r   inline_replaced_box_layoutrQ      s?    23'$()V3C74&)1- 3 %S;r   c                     U R                   S   U R                   S   s=:X  a  S:X  a9  O  O6[        R                  X5        [        R                  U 5        [	        U 5        g [        X5        [        U 5        g )Nr.   r/   r   )r+   rE   without_min_maxrH   min_max_auto_replaced)r3   rC   s     r   rO   rO      sU    
yySYYx0:F:**3A++C0c"31C r   c                    U R                   nU R                  nU R                  nU R                  n[	        X0R
                  5      n[	        X@R                  5      nX:  a  SOX:  a  SOSX$:  a  SOX&:  a  SOS4nUS:X  a  SnUS:X  a  SnUS:X  a  XPl         [	        XR-  U-  U5      U l        gUS:X  a  X0l         [        X2-  U-  U5      U l        gUS:X  a  [	        Xa-  U-  U5      U l         X`l        gUS	:X  a  [        XA-  U-  U5      U l         X@l        gUS
:X  aD  XQ-  Xb-  ::  a  XPl         [	        XEU-  U-  5      U l        g[	        X6U-  U-  5      U l         X`l        gUS:X  aD  X1-  XB-  ::  a  [        XTU-  U-  5      U l         X@l        gX0l         [        XcU-  U-  5      U l        gUS:X  a  X0l         X`l        gUS:X  a  XPl         X@l        gg)zCResolve min/max constraints on replaced elements with 'auto' sizes.r0   max r(   gư>)rV   rW   )r0   rW   )rW   rV   )rW   r0   )rV   rV   )r0   r0   )r0   rV   )rV   r0   N)r.   r/   	min_width
min_heightrV   	max_width
max_heightr0   )r3   r.   r/   rX   rY   rZ   r[   
violationss           r   rT   rT      s   IIEZZFIJI}}-IZ0J "1B$63F%BPJ z{ [ 	+e3Z@
	{	"	+e3Z@
	{	"
*V3Y?	
	{	"
*V3Y?	
	~	%
 33!IZV);e)CDCJIE'9F'BCCI#J	~	%
 33IE'9F'BCCI#J!IZV);e)CDCJ	~	%	
	~	%	
 
&r   c                    SSK Jn  SSKJn  UR	                  5       nUR
                  S   UR
                  S   s=:X  a  S:X  aq  O  OnUR                  UR                  4n[        R                  X5        [        R                  U5        [        U5        Uu  Ul        Ul        UR                  X5        O[        X5        [        U5        U" XUSS9u  Ul        Ul        nS	nS
S	S.n/ n	Sn
XXU
4$ )z5Lay out the block :class:`boxes.ReplacedBox` ``box``.r   r@   )avoid_collisionsr.   r/   r   F)outerNany)breakpage)rB   rA   floatr^   copyr+   margin_leftmargin_rightblock_replaced_widthrS   rH   rT   r9   r;   )contextr3   rC   rA   r^   computed_margins_	resume_at	next_pageadjoining_marginscollapsing_throughs              r   block_replaced_box_layoutro   
  s    ('
((*C
yySYYx0:F:??C,<,<<,,	#++C0c",<))))#@S3C  )9&e)5%CNCNAI.I99KKKr   c                 \    SSK Jn  [        R                  X5        UR                  X5        g )Nr   r@   )rB   rA   rE   rS   )r3   rC   rA   s      r   rg   rg   '  s#    ( &&s=%%c<r   N)__doc__min_maxr   r   percentr   r   r	   r   r   r>   rE   rH   rQ   rO   rT   ro   rg   r   r   r   <module>rt      s    A $@N
K
JD,;^  D  .<!5 pL: = =r   