
    ,g+                         d Z ddlmZmZ ddlmZ d Zd Zd Zd Z	d Z
ed	        Zed
        Zd Zd Zd Zd Zed        Zy)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           	          |dk(  rd}|dk(  rd}||||fS |||||z  fS ||fS |fS ||||z  |fS | | |fS ||fS | |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_heights          r/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/weasyprint/layout/replaced.pyr   r      s    & 6!"'7'C 000		$1@1LOo-! 	!%5%A!! 	!  ! 	! 
	%2A2M. 	 	$3$?	 	 	 	 &*:*F'!1?!1=   
 3~@ @    c                      t        | ||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   s      r   r	   r	   2   s     $+_EK Kr   c                      t        | ||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   s      r   cover_constraint_image_sizingr   ?   s     $+_DJ Jr   c                 @    || |fS || ||z  kD  z  r||z  |fS | | |z  fS )N )r   r   r   r   s       r   r   r   L   sJ    !222	"%6%HH	I ?24EEE!1O!CCCr   c                 F   | j                   d   }| j                   d   }| j                  }|j                  | j                   d   | j                   d         \  }}}d ||fv r$t        | j                  | j
                  |      \  }}|dk(  r| j                  | j
                  }}n|dv r%t        | j                  | j
                  |      \  }}n:|dk(  r%t        | j                  | j
                  |      \  }}n|dk(  sJ |       ||}}|d	k(  rt        ||      }t        ||      }|d
   \  }	}
}}| j                  |z
  }| j
                  |z
  }t        |
|      }
t        ||      }|	dk(  r||
z
  }
|dk(  r||z
  }|
| j                         z  }
|| j                         z  }|||
|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_ys                  r   replacedbox_layoutr>   V   s   <(Jyy*+HOOE  II()399[+A	C 7O% !122,KIIszz?-4)) V"%))SZZK
22&E		3::'8#J7"&C		3::'8#J '33'&57GJ%Z9Jk+;<K19!.Hj(JII
"EJJ$EJ.JJ.J7Z'
8Z'
###%%J###%%J{J
::r   c                 |   ddl m} | j                  j                  | j                  d   | j                  d         \  }}}| j
                  | j                  cxk(  rdk(  r%n n"||| _        n||||z  | _        n	 || |       | j                  dk(  r)|| j
                  |z  | _        y||| _        yd| _        yy)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'=?E65
 zzSYY(&(CI!"UN	 "#'78
yyF

U*CICI CI r   c                    | j                   j                  | j                  d   | j                  d         \  }}}| j                  | j                  cxk(  rdk(  rn n|| _        n%| j                  dk(  r|r| j                  |z  | _        | j                  | j                  cxk(  rdk(  rn n
||| _        y|$| j                  dk(  r| j                  |z  | _        y| j                  dk(  r
||| _        y| j                  dk(  rd| _        yy)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'=?E65 zzSYY(&(
	v	%YY&

zzSYY(&(V-?
		szzV3YY&
	v	&"4
	v	
 
r   c                 p    dD ]%  }t        | d|       dk(  st        | d| d       ' t        | |       y)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      sG    2 .3'$()V3C74&)1-. %S*:;r   c                     | j                   d   | j                   d   cxk(  rdk(  r:n n7t        j                  | |       t        j                  |        t	        |        y t        | |       t        |        y )Nr.   r/   r   )r+   rE   without_min_maxrH   min_max_auto_replaced)r3   rC   s     r   rO   rO      s[    
yySYYx0:F:**30@A++C0c"3 01C r   c                    | j                   }| j                  }| j                  }| j                  }t	        || j
                        }t	        || j                        }||k  rdn||kD  rdnd||k  rdn||kD  rdndf}|dk(  rd}|dk(  rd}|dk(  r|| _         t	        ||z  |z  |      | _        y|dk(  r|| _         t        ||z  |z  |      | _        y|dk(  rt	        ||z  |z  |      | _         || _        y|d	k(  rt        ||z  |z  |      | _         || _        y|d
k(  rI||z  ||z  k  r|| _         t	        |||z  |z        | _        yt	        |||z  |z        | _         || _        y|dk(  rI||z  ||z  k  rt        |||z  |z        | _         || _        y|| _         t        |||z  |z        | _        y|dk(  r|| _         || _        y|dk(  r|| _         || _        yy)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Is}}-IZ0J "1B*$6J3F%BPJ z{ [ 	V+e3Z@
	{	"	V+e3Z@
	{	"
U*V3Y?	
	{	"
U*V3Y?	
	~	%u
V 33!CIZV);e)CDCJIzE'9F'BCCI#CJ	~	%u
V 33IzE'9F'BCCI#CJ!CIZV);e)CDCJ	~	%	
	~	%	
 
&r   c                    ddl m} ddlm} |j	                         }|j
                  d   |j
                  d   cxk(  rdk(  rsn np|j                  |j                  f}t        j                  ||       t        j                  |       t        |       |\  |_        |_        |j                  ||       nt        ||       t        |        || ||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)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"23C  )9&e)5%CNCNAI.I	9&79KKKr   c                 `    ddl m} t        j                  | |       |j                  | |       y )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   