
    BhL                     6   S r SSKJr  SSKJr  SSKJrJr  SSKJ	r	  SSK
Jr  SS	KJrJrJr  SS
KJr  SSKJr  SSKJr  SSKJrJrJr  SSKJr  SSKJrJr     S$S jrS r S r!\S 5       r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S  r.S! r/S" r0S# r1g)%zCPage breaking and layout for block-level and block-container boxes.    )inf   )boxes   )AbsolutePlaceholderabsolute_layout)columns_layout)flex_layout)avoid_collisionsfloat_layoutget_clearance)grid_layout)iter_line_boxes)handle_min_max_width)
percentageresolve_percentagesresolve_position_percentages)block_replaced_box_layout)table_layouttable_wrapper_widthNc                    Uc  / OUnUc  / OUnUc  / OUn[        U[        R                  5      (       Gd  [        X5        UR                  S:X  a  SUl        UR
                  S:X  a  SUl        U R                  S:  ai  U(       ab  UR                  =(       d    UnU(       aF  UR                  S   S:X  a  SUl        O+UR                  S   S:X  a  U R                  (       d  SUl        [        / UQUR                  P5      n[        XU5      Ul        UR                  b1  UR                  U-   UR                  -   nXR                  -
  Ul        / n[        XX#UXVXxU	U
5      $ )z Lay out the block-level ``box``.autor   r   margin_breakdiscard)
isinstancer   TableBoxr   
margin_topmargin_bottomcurrent_pageis_for_root_elementstyleforced_breakcollapse_marginr   	clearance
position_yblock_level_layout_switch)contextboxbottom_space
skip_stackcontaining_blockpage_is_emptyabsolute_boxesfixed_boxesadjoining_marginsr   	max_linescollapse_with_pagecollapsed_margintop_border_edges                 I/var/www/html/env/lib/python3.13/site-packages/weasyprint/layout/block.pyblock_level_layoutr5      sQ   
 *1R~N#+"K/7=Nc5>>**C2>>V#CN& !C!# !44 "!  "99^,	9%&CNYY~.&8"//)**+O->+O+OP%g4DE==$!nn/??#--OO,~~=CN "$l0@{w     c                 $   [        U[        R                  5      (       a  [        XX#UXVU5      nO[        U[        R                  5      (       a  [        XX#UXVXxX5      $ [        U[        R                  5      (       a  [        XU5      nO[        U[        R                  5      (       a  [        XX#UXVXy5	      nOQ[        U[        R                  5      (       a  [        XX#UXVU5      nO"[        S[        U5      R                   S35      e/ UQSP7$ )z;Call the layout function corresponding to the ``box`` type.zLayout for z not handled yetN)r   r   r   r   BlockBoxblock_box_layoutBlockReplacedBoxr   FlexBoxr
   GridBoxr   	TypeErrortype__name__)r'   r(   r)   r*   r+   r,   r-   r.   r/   r   r0   results               r4   r&   r&   A   s   
 #u~~&&,4D;8 
C	(	(,4D;  	  
C//	0	0*79IJ	C	'	',4D;A 
C	'	',4D;8 +d3i&8&8%99IJKKV?T?r6   c                    UR                   S   S:w  d  UR                   S   S:w  ap  [        XX#UXVXx5	      nUS   nUcR  US   nUR                  UR                  -   UR                  -   nU(       a   [        X/Xg5        X.-  n[        XX#XEUXx5	      n/ UQSP7$ UR                  (       a"  [        XUR                  UR                  45        [        X5        [        XX#UXgXU
5
      nUS   =n(       a"  UR                  (       d  UR                  (       a  U$ UR                  (       d  UR                  5       (       a:  [        XUSS9u  nnnUR!                  XR"                  -
  UUR$                  -
  5        U$ )	zLay out the block ``box``.column_widthr   column_countr   Nr   F)outer)r!   r	   r   padding_bottomborder_bottom_widthremove_placeholdersis_table_wrapperr   widthheightblock_level_widthblock_container_layout	is_columnis_flex_itemestablishes_formatting_contextr   	translate
position_xr%   )r'   r(   r)   r*   r+   r,   r-   r.   r/   r   r0   r@   	resume_atnew_boxcolumns_bottom_spacerQ   r%   _s                     r4   r9   r9   ^   s    			.!V+IIn%/,4D;K 1I	QiG%%(>(>>++, ! $#YE4',$^4 			+113C3J3JK	Mc,#l%6LF
 ay G W%6%6':N:N7#I#I#K#K %5.e%=!
J+++Z':L:L-L	NMr6   c                 |   [        U[        R                  5      (       a  UR                  nUR                  S   nOUS   nSnU R
                  nU R                  nU R                  nU R                  nU R                  nU R                  n	U R                  n
Xg-   U-   U	-   nU R                  S:w  a9  X-   nUS:w  a  X-  nUS:w  a  X-  nX:  a  US:X  a  S=o@l        US:X  a  S=oPl        U
S:w  aC  US:w  a=  US:w  a7  US:X  a1  U R                  (       d   U =R                  X+-
  U
-
  U-
  U-
  -  sl        U
S:X  a,  US:X  a  S=o@l        US:X  a  S=oPl        UX-   U-   -
  =ol        X+-
  U
-
  nXEs=:X  a  S:X  a  O  OUS-  U l        US-  U l        gUS:X  a  US:w  a
  X-
  U l        gUS:w  a  US:X  a
  X-
  U l        ggg)zSet the ``box`` width.	directionr   ltrr   rtlr   N)r   r   BoxrI   r!   margin_leftmargin_rightpadding_leftpadding_rightborder_left_widthborder_right_widthrM   rQ   )r(   r+   cb_widthrW   margin_lmargin_r	padding_l	padding_rborder_lborder_rrI   paddings_plus_borderstotal
margin_sums                 r4   rK   rK      s    "EII..#))$**;7	#A&	
 HH  I!!I$$H%%HIIE &1H<xG
yyF%-vEvE6!-..?6!.//+8v-(f2DcmmNN0588ChNPN v)**Hv*++H'$!,x79 	9	1E9J%v%$q.%>	V	F 2$/	V	F 2%0 !3	r6   c                    U R                   S   S:X  a  [        X5        U R                  S:w  a>  U R                  S:w  a.  U R                   S   S:X  a  U R                  nOKU R                  * nO=U R                  S:w  a  U R                  nO U R                  S:w  a  U R                  * nOSnU R                  S:w  a  U R                  nO U R
                  S:w  a  U R
                  * nOSnU R                  X#5        [        U [        R                  [        R                  45      (       a  U R                   H  n[        XA5        M     gg)z5Translate the ``box`` if it is relatively positioned.positionrelativer   rW   rX   r   N)r!   r   leftrighttopbottomrP   r   r   	InlineBoxLineBoxchildrenrelative_positioning)r(   r+   translate_xtranslate_ychilds        r4   ru   ru      s    
yy
*$S;88v#))v"5yy%.!hh"yyjXX((KYY& 99*KK77f''KZZ6!::+KKk/#788\\E 9 " 9r6   c
           
         Sn
S nS nS nU=R                   [        U5      -  sl         UR                  5       (       a\  [        U5      =pX.l        UR                  U5        UR                  S   S:X  a  UR                  U5        GO[UR                  U5        GOHUR                  5       (       a  [        XXXyS S9u  pU R                  XR                   UR                  -   5      nU=(       a    U(       + =(       d    U(       + =(       d    UR                  5       nU(       a  X,l        UR                  U5        O[        U5      n[        UU5      nUS 0nS nSn
U(       a.  [        UU 5      (       a  [        XXg5      nU(       a
  Uu  US S & nS nOTUR!                  5       (       a?  UR                  S   S   nU R"                  nU R$                  U   U   R                  U5        XX4$ )NFrl   absoluter*   Tr   )r%   r#   is_absolutely_positionedr   indexappendr!   
is_floatedr   overflows_pagerJ   is_monolithicfind_last_in_flow_childblock_level_page_breakavoid_page_breakfind_earlier_page_break
is_runningr   running_elements)r'   r(   r}   rx   new_childrenr,   r-   r.   r/   r)   stoprR   	new_childout_of_flow_resume_atplaceholderpage_overflow	add_childlast_in_flow_child
page_breakr@   running_namepages                         r4   _out_of_flow_layoutr      s    DII 
 
(9:: %%''"5e"<<	!K(;;z"j0!!+.{+ 
				+7C,(	
  ....1A1AAC /</    	 #O	* "9!F/0BEJJI$(!D 0W E E0>H17.LOY $I 
				{{:.q1##  .t4;;EBI<<r6   c                    [        U5      UR                  S   -
  nUS:  a"  U(       d  [        XR                  X5        SSU4$ UR                  S   S-
  nU(       a  U H  nUS-  nUS:X  d  M    O   X:  a"  U(       d  [        XR                  X5        SSU4$ U(       a,  X::  a'  X<* S   H  n[        XR                  X5        M     X<* S 2	 [        XR                  X5        SSXg04$ )Norphansr   TFwidowsr   )lenr!   rG   rt   )r'   r(   liner   lines_iteratorr,   r}   r*   rR   r-   r.   over_orphansneededrU   rx   s                  r4   _break_liner   -  s     |$syy';;La 	G]]NPUI%% YYx 1$FAaKF{   ]G]]NPUI%%&(!'(+EF , "L$+++r6   c                 h  ^  S=nnS n/ n[        UR                  5      S:X  d   S5       eU(       a  U
[        U5      -  n
Un[        T X:XUXgU5	      n[	        U5       GH4  u  nu  nnUb%  US:X  a  UR
                  S   US   l          GOUS-  nUUl        UR                  UR                  -   nUUS L -  nU(       a  UR                  UR                  -   nOSnU=(       d    U(       + =(       a    T R                  U	UU-   5      nU(       a  [        T UUUUXRUUUU5      u  nnn  GOoU(       aJ  T R                  U	U5      (       a3  UUR                  -  nUR                  SUR                  * 5        SUl        T R                   (       a  SnU 4S jUR#                  5        5       nU H  nT R%                  U5      nUR'                  U5        U=(       d(    T R(                  =(       d    T R                  U	UU-   5      nU(       d  M_  T R+                  U5        U(       d	  U(       a  M  UR
                  S   S	:X  a  [        T UUUUXRUUUU5      u  nnnS
n  OUR
                  S   S:X  d  M  S
=nn  O   U(       a    OUR'                  U5        Un
UnGM7     U(       a  X$S   R                  0nUUUU
UU4$ )NFr   z$line box with siblings before layoutr   block_ellipsisc              3   t   >#    U  H-  nUR                   TR                  ;   d  M  UR                   v   M/     g 7fN)footnote	footnotes).0
descendantr'   s     r4   	<genexpr>"_linebox_layout.<locals>.<genexpr>  s4      =6H
&&'*;*;; $
##6Hs   88footnote_policyr   Tblock)r   rt   r#   r   	enumerater!   r   rR   r%   rJ   rF   rE   r   r   r   rP   r   descendantslayout_footnoter~   reported_footnotesreport_footnote)r'   r(   r}   rx   r   r,   r-   r.   r/   r)   r%   r*   first_letter_styledraw_bottom_decorationr0   abortr   rR   new_footnotesnew_containing_blockr   ir   new_position_yoffset_yoverflowbreak_lineboxr   r   s   `                            r4   _linebox_layoutr   M  s    EDIMs||!I#II!o&788
$Ln;MON !*. 9D) A~25))<L2MR /NI #4;;6 	)t"33!..1C1CCHH .. L""<(1JK 	 %0dL.j)^&"E4  w55n .  . cnn,NNN1s~~o.CN!M=6:6F6F6H=I &"228<$$X. A..A**$nx&?A 
 8++H5
 $==#>>*;<F5@ 'dL . *I~ +	6-2E4
 -1M!%^^,=>'I488EM!3 &4 D!#

e !:h ,667	$	:}iGGr6   c                 	   S=nn[        U5      nUbX  [        UU5      n[        UU5      nU(       d  [        UU 5      (       a'  UR	                  5       S   nUUS.nUS 0nSnUUUXUUU4$ OSnUnUR
                  (       Gd  [        UU5        UGc  U(       Ga  [        U5      nUR                  nUS:X  a  SnOSU R                  S:  aC  U(       a<  UR                  S   S:X  a  SnO&UR                  S   S:X  a  U R                  (       d  Sn[        / UQUP5      nUU-
  nU H  nUR                  US	9  M     [        XU5      nUbX  U H  nUR                  U* S	9  M     [        U5      nU=R                  UUR                  -
  -  sl        / nUR                  5       n
U(       a  UR
                  (       a(  [        U5      nU=R                  U-  sl        U
U-  n
/ nO[!        U["        R$                  5      (       dt  UR                  S
   S:X  a  Sn O#['        UR                  S
   UR(                  5      n UR+                  U 5        [        U5      U -
  n!U=R                  U!-  sl        U
U!-  n
/ nU=(       a    [-        S U 5       5      (       + n"[/        USS 5      (       d  Xl        [3        XXUU"UXxUU5      u  n#nnn$n%nU#Gb  U%(       Gd  U#R                  5       U#R4                  -   n&U#R7                  5       U#R9                  5       -   n'U R;                  U	U&5      n(U R;                  U	U'5      n)U"=(       d    UR=                  5       (       + n*U*(       a  U((       a  [?        U U#/Xg5        S n#O{U*(       ar  U)(       ak  [?        U U#/Xg5        U	U#R@                  U#RB                  -   -  n	[3        XXUU"XgXU5      u  n#nnn$n%nU#(       a!  U#R7                  5       U#R9                  5       -   n
OU'n
U$nU#(       a  UR+                  U#RD                  5        U#(       a2  U#RF                  (       a!  U#R7                  5       U#R9                  5       -   n
S nU#c  [I        UU 5      (       a5  [K        XXg5      n+U+(       a  U+u  nnSnUUUXUUU4$ U(       d  SnUUUXUUU4$ [M        S U 5       5      (       a  [?        XXg5        / nU(       a  US 0nSnOSnUUUXUUU4$ UU#l'        UR+                  U#5        Ub  UU0nSnUUUXUUU4$ )NFr   breakr   Tr   r   r   r   )dyr   c              3   T   #    U  H  n[        U[        5      (       a  M  Uv   M      g 7fr   )r   r   r   rx   s     r4   r   "_in_flow_layout.<locals>.<genexpr>  s#      ?7'%%!45 	<s   (	(r   c              3   @   #    U  H  oR                  5       v   M     g 7fr   )r|   r   s     r4   r   r   Y  s     J\E--//\s   )(r   r   block_level_page_nameforce_page_breakpage_valuesrH   r   r#   r   r   r!   r"   rP   r   r%   content_box_yr   r   r8   r   rI   r~   anygetattrr   r5   rJ   border_box_yborder_heightr   r   rG   rE   rF   r   r$   r   r   allr}   ),r'   r(   r}   rx   r   r,   r-   r.   r/   r)   r%   r*   r   r   collapsing_with_childrenr   	next_pager0   r   r   r   r   	page_namerR   r   old_collapsed_marginchild_margin_topnew_collapsed_margincollapsed_margin_differenceprevious_new_childr$   r2   r   r   page_is_empty_with_no_childrenr   next_adjoining_marginscollapsing_throughnew_content_position_yr   content_page_overflowborder_page_overflow	can_breakr@   s,                                               r4   _in_flow_layoutr     s   
 ED0>%+,>F
)*<eD	(W==))+A.I",i@IIDtY
<4 4 > 
000E#78%*B $33D#E   %//6)#$ %%)m99^,	9'($YY~.&8"//+,(#26#6%56$8  %';; (&2"",,0K,L '3%g6JKI$*6&&0077 1 9 +7 $33D#E "2S^^"CC$&! ..0
 ./@A 00**J "E5>>22{{<(F2
'L(A399M
$$Z0&'89JFH(("J "%2 &73 ?7'?7 <7 87" 5.55#5 &8		=~	)'=$Y	9&<
 !'')I,<,<< # &&(9+B+B+DD $+$:$:4%6!#*#9#9n$.  /E#2C2C2EGI2 $i[.G 	3 $i[.G,,y/L/LLN 3E\)+I#2C	3 0Iy2H#Y
 !..093J3J3LL  ,
2$$Y%<%<=,,"//1I4K4K4MMJJJ00,~DF*0'i4J|Y8 8
 % !EtY
!<< < J\JJJ  ~DLID E4J9)% 	% IO	"I&	 	tY
yi! !r6   c
                    [        U[        R                  5      (       d   eUR                  5       (       a  U R	                  5         USL n
UR                  U
(       + SS9  XR                  S   S:H  -  nU=(       d    UR                  S   S:H  nUc  / nU(       a)  UUR                  UR                  -   UR                  -   -  nUR                  UR                  5        UnUR                  =(       d\    UR                  =(       dI    UR                  =(       d6    UR                  =(       d#    UR                  5       =(       d    UR                   (       + nU(       a  UR"                  nO=U=R"                  [%        U5      UR                  -
  -  sl        / nUR'                  5       nUR)                  5       nUR                  S   S	:X  a  / n/ nS
SS.n/ n0 nSnUR                  S   S:w  a&  [+        UR                  S   U	=(       d    [,        5      n	U
(       a  Sn[/        USS5      nOUR1                  5       u  u  nnSn[3        UR4                  US U=(       d    SS9 GH  u  nnUUl        UUl        / nUR9                  5       (       d*  Sn[;        XUUUUXVUU5
      u  nnnnU(       a  UUU4UU'   GO[        U[        R<                  5      (       a*  [?        XUUUUXVXrXUX5      u  nnnnnn	UUSL -  n/ nUU-  nO[A        XUUUUXVXrXUXUUU	5      u  nnnpnnnSnSUU	4;  a  Un	U	S::  a  SnUUR4                  S   :H  n U (       dp  Un!U!(       ag  U!S   n [        U [        R<                  5      (       a  UR                  S   U l!        O-[        U [        RD                  5      (       a  U R4                  n!Mm   U(       aS  URG                  5       S   n"[I        XR4                  US XV5        U H  n#U RK                  U#5        M     SSS
U"S./ SU	4s  $ U(       d  GM  URL                  S:w  a4  U RO                  UR"                  URQ                  5       -   U5      (       a  Sn/ n  O   SnUSLn$UR                  S   S:X  a  SnU$(       aN  [S        UR                  S   U 5      (       a0  U(       d)  [I        U / UQUR4                  US QXV5        SSS
SS./ SU	4$ UR1                  5        H  u  n%n&U&U RT                  U%'   M     U(       a+  U=R"                  [%        U5      UR                  -
  -  sl        [W        U5      nSn'Uc  [%        U5      n(URL                  S;   a^  [Y        XU(5      cQ  [[        S UR\                  UR                  UR                  UR                  UR                  4 5       5      (       a  Sn'OUU(-  n/ nOURL                  S:w  a  / nUR                  (       dH  UR                  (       d7  UR                  5       (       d"  UR                   (       d  UR^                  (       a  U[%        U5      -  n/ nU$(       a?  U(       a8  US   n [        U [        R<                  5      (       a  UR                  S   U l!        URa                  U5      n)U)R                  U
(       + U$=(       a    U(       + S9  U)RL                  S:X  ad  U Rb                  (       a;  U)R                  S   S:w  a(  [e        S U Rb                   5       5      n*[e        U*U5      nUU)R'                  5       -
  U)l&        U)R                  S   S	:X  a  U H  n+[g        U U+U)XbSS9  M     U)R4                   H%  n[i        UU)Rj                  U)RL                  45        M'     U)R                  5       (       a  U Rm                  U)5        U(       d  U$(       d:  [e        [+        U)RL                  U)Rn                  5      U)R\                  5      U)l&        OU[,        * :  a  U)Rp                  (       d  U Rr                  U-
  U)R"                  -
  U)Ru                  5       U)RL                  -
  -
  n,U,U)RL                  :  aG  U,U)l&        U(       a9  U)=RL                  UR                  UR                  -   UR                  -   -  sl&        US   c  U)RG                  5       S   US'   U)UUUU'U	4$ )zSet the ``box`` height.NF)startendcontinuer   box_decoration_breakclonerl   rm   r   r   r0   noner   r   )r   Tr   r   r   break_inside)r   r   c              3   *   #    U  H	  oS :H  v   M     g7fr   N )r   values     r4   r   )block_container_layout.<locals>.<genexpr>  s      > )=u
 )=s   r   visiblec              3   \   #    U  H"  nUR                   UR                  5       -   v   M$     g 7fr   )r%   margin_height)r   	float_boxs     r4   r   r   >  s+      ':!8I $$y'>'>'@@!8s   *,r{   r   r   );r   r   BlockContainerBoxrO   create_block_formatting_contextremove_decorationr!   rE   rF   r   r~   r   border_top_widthpadding_toprN   is_grid_itemr    r%   r#   r   content_box_xminr   r   itemsr   rt   rQ   is_in_normal_flowr   rs   r   r   r   	ParentBoxr   rG   unlayout_footnoterJ   	overflowsr   r   broken_out_of_flowr   r   r   
min_heightrH   copy_with_childrenexcluded_shapesmaxr   ru   rI   finish_block_formatting_context
max_heightrM   page_bottomr   )-r'   r(   r)   r*   r,   r-   r.   r/   r   r0   is_startr   this_box_adjoining_marginsr   r%   rQ   r   r   all_footnotesr   r   skipr   r}   rx   r   r   r   rR   r   r   new_max_lines
last_childrt   r   r   box_is_fragmentedkeyr   r   r2   rS   max_float_position_yabsolute_boxnew_box_heights-                                                r4   rL   rL   x  s    c5223333
))++//1 T!HH%8yy$	11G?39934?   !8!883;L;LL	N S^^,!2 	 	  	 33C3C 	 	 >>@	  !   ^^
/*;<s~~MM&&(
""$J
yy
*L.IM
yy'		+.	0@SA	$S*>E(..0z!!#,,tu"5diaIu%%&&((E#%m"1B " >D)Y(=
 %3 517"9- u}}--)8eUL-->(:&	*3'UD)ZI
 #i4&77" "]*M 8Gue\=.?);'7I8'5UD)Zm JM955)	>D"'3<<+;";J%#/&)1"J)*emmDD$'II.>$? !+ 9!+J!H!H+5+>+> (!$$&q)Dde,nK)))(3 * deT:B  TzzV#$$S^^c6G6G6I%I:VV !%I "M JR 	!-
yy	)	SYY~6@@:|:cll45&9:N	YTUD92uiOO(..0
U*/""3' 1  67#..H	J 1>!*+<=JJ+%'(89A > 4 4coo''););)= > > > "&**J " :: "..00##  o&788
 \!"%
j%--00(+		2B(CJ%$$\2Gl 1 A'k  C ~~""w}}Z'@I'M#& ':!(!8!8': $:  1:>J#g&;&;&==}}Z J.*Lw! +
 !!UW]]GNN$CD " --////8'  2 23W5G5GI		W%6%6 ,.1C1CC""$w~~57 	 GNN*+GN%&&)@)@@%%&'  #//1!4	& 	I'8:L r6   c                 |    S/nUR                  U 5        S U 5       nS U 5       n[        U5      [        U5      -   $ )zCGet the amount of collapsed margin for a list of adjoining margins.r   c              3   4   #    U  H  oS :  d  M
  Uv   M     g7fr   r   r   ms     r4   r   "collapse_margin.<locals>.<genexpr>o       .GqAvG   		c              3   4   #    U  H  oS ::  d  M
  Uv   M     g7fr   r   r  s     r4   r   r  p  r  r  )extendr   r   )r/   margins	positives	negativess       r4   r#   r#   k  s=    cGNN$%.G.I.G.Iy>C	N**r6   c                 L   / n[         R                  [         R                  [         R                  4nU n[	        XC5      (       aQ  UR                  UR                  S   5        UR                  (       d  O!UR                  S   n[	        XC5      (       a  MQ  UR                  5         Un[	        XC5      (       aQ  UR                  UR                  S   5        UR                  (       d  O!UR                  S   n[	        XC5      (       a  MQ  SnU H  nUS;   d	  Xe4S;   d  M  UnM     U$ )ag  Get the correct page break value between siblings.

Return the value of ``page-break-before`` or ``page-break-after`` that
"wins" for boxes that meet at the margin between two sibling boxes.

For boxes before the margin, the 'page-break-after' value is considered;
for boxes after the margin the 'page-break-before' value is considered.

* 'avoid' takes priority over 'auto'
* 'page' takes priority over 'avoid' or 'auto'
* 'left' or 'right' take priority over 'always', 'avoid' or 'auto'
* Among 'left' and 'right', later values in the tree take priority.

See https://drafts.csswg.org/css-page-3/#allowed-pg-brk

break_afterr   break_beforer   r   )rn   ro   rectoverso))r   r   )r   avoid)r   
avoid-page)r   avoid-column)columnr   )r   r  )r   r  )r   r  )r  r   )r  r   )r  r   )	r   BlockLevelBoxTableRowGroupBoxTableRowBoxr   r~   r!   rt   reverse)sibling_beforesibling_aftervaluesblock_parallel_box_typesr(   r@   r   s          r4   r   r   t  s   " F 	U33U5F5F H C
S
3
3cii./||ll2	 S
3
3
 NN
C
S
3
3cii/0||ll1o	 S
3
3 F77E? O* <* F  Mr6   c                 ^    U R                  5       S   nUR                  5       S   nX#:w  a  U$ g)zBReturn the next page name when siblings don't have the same names.r   r   N)r   )r%  r&  before_page
after_pages       r4   r   r     s9     ,,.q1K**,Q/J  !r6   c                    U(       a  [        US   [        R                  5      (       a`  US   R                  S   nUS   R                  S   n[	        U5      U-
  nXd:  a  gUSU nSUS   R
                  0n[        XUS X#5        Xx4$ Sn	[        U5       GH  u  pj[        U
[        R                  5      (       a$  U
R                  (       d  U
R                  (       a  MI  U
R                  (       a  M\  U
R                  5       (       a=  [        X5      nU	b-  [        X5      (       d  US-  nUSU nX   R                  S0n  GOU
n	U
R                  5       (       d  M  [        U
R                  S   U 5      (       a  M  [        R                   [        R"                  [        R                  4n[        X5      (       d  GM'  [%        X
R&                  X#5      nU(       d  GMG  Uu  pU
R)                  U5      n/ USU QUPn[        U
[        R                  5      (       a/  XS  H'  nUR                  (       d  M  UR+                  U5        M)     UR                  U0nUS-  n  O   g[        XUS X#5        Xx4$ )aY  Find the last possible page break in ``children``.

Because of a `page-break-before: avoid` or a `page-break-after: avoid` we
need to find an earlier page break opportunity inside `children`.

Absolute or fixed placeholders removed from children should also be
removed from `absolute_boxes` or `fixed_boxes`.

Return (new_children, resume_at).

r   r   r   Nr   r   r   )r   r   rs   r!   r   rR   rG   reversed_enumerater"  	is_header	is_footerrM   r   r   r   r}   r8   r   r   rt   r   r~   )r'   rt   r-   r.   r   r   r}   r   rR   previous_in_flowrx   r   breakable_box_typesr@   new_grand_childrenr   
next_childs                    r4   r   r     sL    Jx{EMM:: 1+##I.!""8,H&?'R(223	ef%~	D&&*84eU33445??__""$$/HJ+(==
'/%_22D9	$""$$$U[[%@'JJ0F0F#H%550^^^J64:1& % 8 89K LI#AXfu%5#Ay#AL "%)?)?@@*26*:J)333 , 3 3J ? +;
 "+) <IQJEU 5X  %&!1>O""r6   c                 Z    [        U 5       H  nUR                  5       (       d  M  Us  $    g)z=Find and return the last in-flow child of given ``children``.N)reversedr   )rt   rx   s     r4   r   r     s%    (#""$$L $r6   c           	      b    [        [        [        [        U 5      5      5      [        U 5      5      $ )zBLike reversed(list(enumerate(seq))) without copying the whole seq.)zipr5  ranger   )seqs    r4   r-  r-  	  s     xc#h((3-88r6   c                    U H  n[        U[        R                  5      (       a  [        XR                  X#5        UR
                  S   S:X  a  XB;   a  UR                  U5        O)UR
                  S   S:X  a  XC;   a  UR                  U5        UR                  (       a  U R                  UR                  5        X@R                  ;   d  M  U R                  R                  U5        M     g)zRemove placeholders from absolute and fixed lists.

For boxes that have been removed in find_earlier_page_break(), remove the
matching placeholders in absolute_boxes and fixed_boxes.

Also takes care of removed footnotes and floats.

rl   rz   fixedN)r   r   r   rG   rt   r!   remover   r   r   pop)r'   box_listr-   r.   r(   s        r4   rG   rG     s     c5??++~D99Z J.33H!!#&YYz"g-#2Ds#<<%%cll3,,,&&**3/ r6   c                 8    UR                   (       a  U S;   $ U S;   $ )z$Test whether we should avoid breaks.)r  r  r  )r  r  	in_columnr   r'   s     r4   r   r   %  s#    DDD000r6   c                 8    UR                   (       a  U S;   $ U S;   $ )z$Test whether we should force breaks.)r   rn   ro   r  r  r   )r   rn   ro   r  r  r@  rB  s     r4   r   r   ,  s,     A A 	ADDDr6   )TNNNFN)2__doc__mathr   formatting_structurer   rz   r   r   r   r	   flexr
   floatr   r   r   gridr   inliner   min_maxr   percentr   r   r   replacedr   tabler   r   r5   r&   r9   rK   ru   r   r   r   r   rL   r#   r   r   r   r   r-  rG   r   r   r   r6   r4   <module>rO     s    I  ( : "  @ @  # ) R R / 4 8<8<HL,^:,^ ;1 ;1|:>?=D,@gHT~!Bpf+5pK#\9
0.1Er6   