
    3vjA)                         d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ dd	lmZ dd
lmZ ed        Zd Zd ZddZddZy)zLayout for floating boxes.    )inf   )boxes   )handle_min_max_width)resolve_percentagesresolve_position_percentages)shrink_to_fit) inline_replaced_box_width_height)table_wrapper_widthc                 \    | j                   dk(  rt        || |j                         | _         y y )Nauto)widthr
   )boxcontextcontaining_blocks      J/root/.hermes/venv/lib/python3.12/site-packages/weasyprint/layout/float.pyfloat_widthr      s,     yyF!'30@0F0FG	     c                 f   ddl m} ddlm} ddlm}	 |j                  |j                  }}
t        ||
|f       |dk(  r|j                  |j                         z
  }t        ||
|f       |j                  dk(  rd|_        |j                  dk(  rd|_        |j                  dk(  rd|_        |j                  dk(  rd|_        t!        | ||j"                  d         }||xj                  |z  c_	        t%        |t&        j(                        rt+        ||       n|j                  dk(  rt-        || |       |j.                  rt1        | ||
|f       t%        |t&        j2                        r || |||d	||dddd
d      \  }}}}}}nt%        |t&        j4                        r || ||||d	||d
	      \  }}}}}nOt%        |t&        j6                        r |	| ||||d	||      \  }}}}}nt%        |t&        j(                        sJ d}t9        | ||      }| j:                  j=                  |       ||fS )z/Set the width and position of floating ``box``.r   )block_container_layout)flex_layout)grid_layoutr   r   	directionNTF)
bottom_space
skip_stackpage_is_emptyabsolute_boxesfixed_boxesadjoining_marginsfirst_letter_stylefirst_line_stylediscard	max_lines)r   r   r   r   r   r   r#   )r   r   r   r   r   r   )blockr   flexr   gridr   r   heightr   
position_ycontent_box_yr	   margin_leftmargin_right
margin_topmargin_bottomget_clearancestyle
isinstancer   BlockReplacedBoxr   r   is_table_wrapperr   BlockContainerBoxFlexContainerBoxGridContainerBoxfind_float_positionexcluded_shapesappend)r   r   r   r   r   r   r   r   r   r   cb_width	cb_height	clearance	resume_at_s                  r   float_layoutr?      s:    .!!+113C3J3JiHh	23 F$//2B2P2P2RR	 x&;<
& 
6!
~~
F"gs,<,B,B;,OPI)##u--.(.>?	f	C"23
GS8Y*?@#u../%;S|
~;"tdT	&+"Y1a
 
C//	0"-S|!4D~#U	#4Y1a
 
C//	0"-S|!4D~#	#%Y1a #u55666	
gs,<
=C""3'	>r   c                    | j                   rG| j                   d   j                  }|j                  |k  r|j                  d||j                  z
         t        | ||      \  }}}|j                  d   dk(  xsN |j                  d   dk(  xr |j                  d   dk(  xs& |j                  d   dk(  xr |j                  d   d	k(  }|r|||j                         z
  z  }|j                  ||j                  z
  ||j                  z
         |S )
z,Get the right position of the float ``box``.r   floatrightr   ltr
inline-endrtlinline-start)r8   r)   	translateavoid_collisionsr0   margin_width
position_x)r   r   r   	highest_yrK   r)   available_widthfloat_rights           r   r7   r7   W   s    ++B/::	>>I%MM!Y78 /?&/(+J
O 			'g% 	S	;	5	(	OSYYw-?<-O	S	;	5	(	QSYYw-?>-Q  o(8(8(:::
MM*s~~-zCNN/JKJr   c                    fd}| j                   D ]>  }|j                         s ||j                  d   |j                  d         s8t        c S  d}|j                  |z   }| j
                  D ]a  } ||j                  d   |j                  d         s'|j                  |j                         }
}	||	|
z   k  sLt        |xs d|	|
z   |z
        }c |S )zDReturn None if there is no clearance, otherwise the clearance value.c                     | dk(  r	dk(  rdnd} | dk(  r	dk(  rdnd} |dk(  r	dk(  rdnd}|dk(  r	dk(  rdnd}| |dfv S )z7Closure returning whether clear and float values match.rG   rD   leftrC   rE   rF   both )clear_valuefloat_valuer   s     r   clearzget_clearance.<locals>.clearz   sk    .($-$6&GK,&$-$6&GK.($-$6&GK,&$-$6&GK{F333r   rV   rB   Nr   )broken_out_of_flow
is_floatedr0   r   r)   r8   margin_heightmax)r   r   r   collapsed_marginrV   broken_shaper<   hypothetical_positionexcluded_shapeyhs     `        r   r/   r/   w   s    
4  22 ""$SYYw'););G)DE

 INN-==!11 Q7#^%9%9'%BC!,,n.J.J.LqA$q1u,a!a%:O2OP		Q
 r   c                     | j                   }|r|j                  n|j                         }|r|j                         n|j	                         }|r|j                         n|j                         }|j                         dk(  r|j                         rdd|j                  fS dg}dg}	|j                  d   dk(  r#|j                  d       |	j                  d       n"|j                  d       |	j                  d       	 g }
|D ]d  }|j                  }|j                         }||cxk  r||z   k  s'n |||z   cxk  r||z   k  sn ||k\  sH||z   ||z   k  sT|
j                  |       f |
D cg c]0  }|j                  d   |v r|j                  |j                         z   2 }}|
D cg c]  }|j                  d   |	v r|j                  ! }}|j                         }||j                  z   }|s||j                  z  }||j                  z  }|s|rQ|rt        t        |      |      }|rt!        t!        |      |      }|||z
  kD  rt!        d	 |
D              }||kD  r|}e	 |j                         sRt#        |t$        j&                        s8|j(                  s,t#        |t$        j*                        s|j-                         sJ |}|j                  d   d
k(  rr|j                  d   dk(  r`t#        |t$        j&                        r|}nC|j(                  r||z
  }n1t#        |t$        j*                        s|j-                         sJ ||z
  }||z
  }|s||j                  z  }||j.                  z  }|||fS c c}w c c}w )Nr   rQ   rC   r   rD   rG   rE   rB   c              3   V   K   | ]!  }|j                   |j                         z    # y w)N)r)   rY   ).0shapes     r   	<genexpr>z#avoid_collisions.<locals>.<genexpr>   s,      %3 $$u':':'<<%3s   ')nonerF   )r8   r)   border_box_yrJ   border_widthrY   border_heightrX   r   r0   r9   rK   content_box_xr+   r,   rZ   minr1   r   LineBoxr3   r2   establishes_formatting_contextr-   )r   r   r   outerr8   r)   	box_width
box_heightleft_keywordsright_keywordscolliding_shapesrd   shape_position_yshape_margin_heightleft_boundsright_boundsmax_left_boundmax_right_boundnew_position_yrK   rM   s                        r   rI   rI      s   --O#(c.>.>.@J&+  "1A1A1CI(-""$33D3D3FJ
aCNN$4!%++++HMYNk*e3^,l+\*n-
$ 	/E$//"'"5"5"7!J 8!$778!J$; 8!$778!Z/!$77j() ''.	/ *6{{7#}4 u11336 6 *7{{7#~5 7 7 *779(+;+A+AAcoo-Ns///O ,!$S%5~!F"%c,&7"I ?^;;!$ %3!1%3 "3 "J.!/J 	3&3../**,.	-  J
yyV#!!+.%7#u}}- -
%% -y8

 sE$:$:;668:9,y8
%6Ocoo%
cnn$
z?22[67s   .5M6)$M;N)r   )T)__doc__mathr   formatting_structurer   min_maxr   percentr   r	   	preferredr
   replacedr   tabler   r   r?   r7   r/   rI   rS   r   r   <module>r      sJ       ( ) F $ 6 & H H?D@>n3r   