
    3vjS                     J   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mZmZ ddlmZ ddlmZ ddlmZmZmZ ddlmZ ddlmZmZ 	 	 	 d&dZd Z d Z!d'dZ" ee"d      e"_#        d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d  Z-d! Z.d" Z/d# Z0d$ Z1d% Z2y)(zCPage breaking and layout for block-level and block-container boxes.    )partial)inf   )boxes   )AbsolutePlaceholderabsolute_layout)columns_layout)flex_layout)avoid_collisionsfloat_layoutget_clearance)grid_layout)iter_line_boxes)
percentageresolve_percentagesresolve_position_percentages)block_replaced_box_layout)table_layouttable_wrapper_widthNFc                    |g n|}|g n|}|g n|}t        |t        j                        st        ||       |j                  dk(  rd|_        |j
                  dk(  rd|_        | j                  dkD  rS|rQ|j                  xs |}|r?|j                  d   dk(  rd|_        n%|j                  d   dk(  r| j                  sd|_        t        g ||j                        }|j                  d   }t        | |||      |_        |j                  2|j                  |z   |j                  z   }||j                  z
  |_        g }t        | |||||||||	|
||      S )z Lay out the block-level ``box``.autor   r   margin_breakdiscard	direction)
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_marginsfirst_letter_stylefirst_line_styler   	max_linescollapse_with_pagecollapsed_marginr   top_border_edges                    J/root/.hermes/venv/lib/python3.12/site-packages/weasyprint/layout/block.pyblock_level_layoutr8      sq   
 *1R~N#+"K/7=Nc5>>*C!12>>V#CN& !C!# !44I8I !99^,	9%&CNYY~.&8"//)**+O->+O+OP$**;7	%gsI?OP==$!nn/??#--OO,s~~=CN "$lJ0@-%68J'9. .    c                    t        |t        j                        rt        | |||||||      }nt        |t        j                        rt        | |||||||||	|
||      S t        |t        j                        rt        | ||      }n}t        |t        j                        rt        | ||||||||	      }nOt        |t        j                        rt        | |||||||      }n"t        dt        |      j                   d      g |dS )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/   r0   r1   r2   r   r3   results                 r7   r'   r'   A   s   
 #u~~&S,
4D>;8 
C	(S,
4D>;8I 0'9F 	F 
C//	0*7C9IJ	C	'S,
4D>;A 
C	'S,
4D>;8 +d3i&8&8%99IJKKV?T?r9   c                    |j                   d   dk7  s|j                   d   dk7  ryt        | |||||||||	|
      }|d   }|V|d   }|j                  |j                  z   |j                  z   }|r)t        | |g||       ||z  }t        | |||||||||	|
      }g |dS |j                  r#t        | ||j                  |j                  f       t        ||       t        | ||||||||	|
||      }|d   x}r|j                  s|j                  r|S |j                  s|j                         r?t        | ||d      \  }}}|j!                  ||j"                  z
  ||j$                  z
         |S )	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/   r0   r1   r2   r   r3   rC   	resume_atnew_boxcolumns_bottom_spacerT   r&   _s                       r7   r<   r<   ^   s   
 			.!V+IIn%/S,
4DmK):<N 1I	QiG%%(>(>>++, ! $#gYE 44'S,
<L!>;@Q&(8: 			S+113C3J3JK	Mc+,#lJ~&(:<LgF ay G W%6%6':N:N7#I#I#K %5W.e%=!
J+++Z':L:L-L	NMr9   c                    t        |t        j                        r|j                  }|j                  d   }n|d   }d}| j
                  | j                  z   | j                  z   | j                  z   }| j                  dk(  rf||z
  | _        | j                  dk7  r| xj                  | j                  z  c_        | j                  dk7  r| xj                  | j                  z  c_        |r9t        | j                  t        | j                  | j                              | _        || j                  z   }| j                  dk7  r|| j                  z  }| j                  dk7  r|| j                  z  }||kD  r,| j                  dk(  rd| _	        | j                  dk(  rd| _
        |dk(  r| j                  s| xj                   ||z
  | j                  z
  z  c_        | j                  dk7  r| xj                   | j                  z  c_        | j                  dk7  r| xj                   | j                  z  c_        ||z
  | j                  z
  }| j                  | j                  cxk(  rdk(  rn n|dz  | _	        |dz  | _
        y| j                  dk(  r$| j                  dk7  r|| j                  z
  | _	        y| j                  dk7  r%| j                  dk(  r|| j                  z
  | _
        yyy)zSet the ``box`` width.r   r   ltrr   rtlr   N)r   r   BoxrL   r"   padding_leftpadding_rightborder_left_widthborder_right_widthmargin_leftmargin_rightmax	min_widthmin	max_widthrP   rT   )r)   r,   with_min_maxcb_widthr   padding_plus_bordermargin_width
margin_sums           r7   rN   rN      s{    "EII.#))$**;7	#A&	 	3,,,	 # 6 6	7  yyF22	??f$II(Iv%II)))Is3==#))'DE	 '2L
& '
6!(((h??f$COv% C E#--(%88399DD??f$NNcoo-Nv%NNc...N //#));J
#**4f4$q.%>	F	"s'7'76'A$s'7'77	F	"s'7'76'A%7 (B	"r9   )rg   c                 v   | j                   d   dk(  rt        | |       | j                  dk7  r<| j                  dk7  r-| j                   d   dk(  r| j                  }nI| j                   }n;| j                  dk7  r| j                  }n| j                  dk7  r| j                   }nd}| j                  dk7  r| j                  }n| j
                  dk7  r| j
                   }nd}| j                  ||       t        | t        j                  t        j                  f      r| j                  D ]  }t        ||        yy)z5Translate the ``box`` if it is relatively positioned.positionrelativer   r   rZ   r   N)r"   r   leftrighttopbottomrS   r   r   	InlineBoxLineBoxchildrenrelative_positioning)r)   r,   translate_xtranslate_ychilds        r7   rv   rv      s   
yy
*$S*:;88v#))v"5yy%.!hh"yyjXX((KYY& 99*KK77f''KZZ6!::+KKk;/#78\\ 	:E (89	: 9r9   c
           	      p   d}
d }d }d }|xj                   t        |      z  c_         |j                         r]t        |      x}}||_        |j                  |       |j                  d   dk(  r|j                  |       n1|j                  |       n|j                         rt        | |||||	d       \  }}| j                  |	|j                   |j                  z         }|xr | xs | xs |j                         }|r||_        |j                  |       nt        |      }t        ||      }|d i}d }d}
|rvt        ||       rjt        | |||      }|rZ|\  |d d  }d }nO|j!                         r?|j                  d   d   }| j"                  }| j$                  |   |   j                  |       |
|||fS )NFrm   absoluter+   Tr   )r&   r$   is_absolutely_positionedr   indexappendr"   
is_floatedr   overflows_pagerM   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~   ry   new_childrenr-   r.   r/   r0   r*   stoprU   	new_childout_of_flow_resume_atplaceholderpage_overflow	add_childlast_in_flow_child
page_breakrC   running_namepages                         r7   _out_of_flow_layoutr      s    DII 
 
(9:: %%'"5e"<<	K!K(;;z"j0!!+.{+ 
			+7UCl,(	(
  ..)..1A1AAC /</    	 #IO	* "9!F/0BEJJI$(!D 0W E0\>;H17.LOY $I 
			{{:.q1##  .t4;;EBI'<<<r9   c                 f   t        |      |j                  d   z
  }|dk  r|st        | |j                  |	|
       dd|fS ||kD  r|st        | |j                  |	|
       dd|fS |r.||k  r)|| d D ]  }t        | |j                  |	|
        || d= t        | |j                  |	|
       dd||ifS )z[Break line where allowed by orphans and widows.

    Return (abort, stop, resume_at).

    orphansr   TFN)lenr"   rJ   ru   )r(   r)   liner   neededr-   r~   r+   rU   r.   r/   over_orphansry   s                r7   _break_liner   0  s     |$syy';;La 	GT]]NKPUI%% ]GT]]NKPUI%%&L(!6'(+ 	FEF	F &"L$
+++r9   c                 l    dx}}d }g }t        |j                        dk(  sJ d       |r|
t        |      z  }
|}t         ||
|	||||||
      }t	        |      D ]=  \  }\  }}|$|dk(  r|j
                  d   |d   _         n|dz  }||_        |j                  |j                  z   }||d u z  }|r|j                  |j                  z   }nd}|xs | xr  j                  |	||z         }|rJdx}}|j
                  d   dz
  }|D ]  }|dz  }|dk(  s n t        |      dz   |j
                  d	   k  rd}n|dk\  rd}t        |      |j
                  d	   k  rd}n|dkD  rd}t        d|      } j                   xr |xr | }d} |rg j                  r[ j!                   j                  d          | dz  }  j                  |	||z         s|j#                  |       d}n(|r j                  r[t%         ||||||||||      \  }}}| d
k\  r& j&                  d|  dz
  d   }!|! j&                  |  d   na|rE j                  |	|      r3||j(                  z  }|j+                  d|j(                          d|_         j,                  rd}" fd|j/                         D        }#|#D ]  }$ j1                  |$      }|j#                  |$       |xs#  j&                  xs  j                  |	||z         }|sO j!                  |$       |s|re|$j
                  d   dk(  rD|j
                  d   dz
  x}r|D ]  }|dz  }|dk(  s n t%         ||||||||||      \  }}}d}" n|$j
                  d   dk(  sdx}}" n |"r n|j#                  |       |}
|}@ |r||d   j                  i}||||
||fS )NFr   z$line box with siblings before layoutr   block_ellipsisTwidowsr   r   c              3   f   K   | ](  }|j                   j                  v r|j                    * y wN)footnote	footnotes).0
descendantr(   s     r7   	<genexpr>z"_linebox_layout.<locals>.<genexpr>  s3      =(2&&'*;*;; ##=s   .1footnote_policyr   block)r   ru   r$   r   	enumerater"   r   rU   r&   rM   rI   rH   r   rc   	in_columncurrent_page_footnotesreport_footnoter   r   reported_footnotesr   rS   r   descendantslayout_footnote)%r(   r)   r~   ry   r   r-   r.   r/   r0   r*   r&   r+   r1   r2   draw_bottom_decorationr3   abortr   rU   new_footnotesnew_containing_blocklines_iteratorir   new_position_yoffset_yoverflowcould_break_beforecan_break_nowr   rX   reportr   extrabreak_lineboxr   r   s%   `                                    r7   _linebox_layoutr   N  s    EDIMs||!I#II!o&788
$
L*>R%79IKN !*. 9 vD) A~25))<L2MR /NI #4;;6 	)t"33!..1C1CCHH
 .. L""<(1JK 	  265YYx(1,F# !R<	
 < 1$syy';; %1 %< 399Y#77%*"!%*"F^F ***W}WEWAWF!"W;;''(F(Fr(JK"a'"--lNX<UV ''-D W;; *5S$fmU	>;*H&tY "Q&2227I6I!6KB3NOCH**,>+>+?@ w55lNS cnn,NNN1s~~o.CN!M=6:6F6F6H=I & ""228<$$X. T..T**<(9RS  ++H5
 $=#>>*;<F),8)<q)@@v@)7 !.A$*aKF'-{(-	!.
 6A 'dL&- %z9n +6-2E4 -1M!%^^,=>'I488EM!;"< D!#

mvp L,667	$	:}iGGr9   c                 	   dx}}t        |      }|Nt        ||      }t        ||      }|st        ||       r*|j	                         d   }||d}|d i}d}||||
||||fS d}|j
                  s*t        ||       ||j                         r
t        |      }|j                  }|dk(  rd}nF| j                  dkD  r7|r5|j                  d   dk(  rd}n |j                  d   dk(  r| j                  sd}t        g ||      }||z
  }|D ]  }|j                  |	        |j                  d
   }t        | |||      }|Y|D ]  }|j                  | 	        t        |      }|xj                  ||j                  z
  z  c_        g }|j!                         }
|r|j
                  r#t        |      }|xj                  |z  c_        g }nt#        |t$        j&                        sy|j                  d   dk(  rd}n.t)        |j                  d   |j                  |j*                        }|j-                  |       t        |      |z
  } |xj                  | z  c_        g }|xr t/        d |D               }!|j0                  |j                  f}"t3        | ||	|||!|||||||      \  }#}}}$}%}|#|%s.|#j!                         |#j4                  z   }&| j7                  |	|&      }'|	|#j8                  |#j:                  z   z  }	|j=                         s|	|#j>                  z  }	|#jA                         |#jC                         z   }(| j7                  |	|(      })|!xs |jE                          }*|*r|'rtG        | |#g||       d }#nf|*rb|)r`tG        | |#g||       |"\  |_        |_        t3        | ||	|||!|||||||      \  }#}}}$}%}|#r$|#jA                         |#jC                         z   }
n|(}
|$}|#r|j-                  |#j>                         |#r-|#jH                  r!|#jA                         |#jC                         z   }
|#rtK        ||       r/tM        | |||      }+|+r|+\  }}d}||||
||||fS |sd}||||
||||fS tO        d |D              rtG        | |||       g }|r|d i}d}nd}||||
||||fS ||#_(        |j-                  |#       |||i}d}||||
||||fS )NFr   breakr   Tr   r   r   r   )dyr   r   c              3   @   K   | ]  }t        |t              s|  y wr   )r   r   r   ry   s     r7   r   z"_in_flow_layout.<locals>.<genexpr>)  s#      ?7%!45 	?7s   c              3   <   K   | ]  }|j                           y wr   )r}   r   s     r7   r   z"_in_flow_layout.<locals>.<genexpr>z  s     JEu--/Js   ))r   r   block_level_page_nameforce_page_breakpage_valuesrK   r   top_margin_collapsesr$   r   r    r"   r#   rS   r   r&   content_box_yr   r   r;   r   rL   r   anyrT   r8   rM   r   rH   rI   bottom_margin_collapsesr   border_box_yborder_heightr   rJ   r%   r   r   allr~   ),r(   r)   r~   ry   r   r-   r.   r/   r0   r*   r&   r+   r1   r2   r   	next_pager3   r   r   r   r   	page_namerU   old_collapsed_marginchild_margin_topnew_collapsed_margincollapsed_margin_differenceprevious_new_childr   r%   r5   r   r   page_is_empty_with_no_childrenchild_positionr   next_adjoining_marginscollapsing_throughnew_content_position_ycontent_page_overflowr   border_page_overflow	can_breakrC   s,                                               r7   _in_flow_layoutr     s    ED 1>%+,>F
)*<eD	(W=))+A.I",i@IIDtY
4E<4 4 
 E3'%#*B*B*D $33D#E   %//6)#$ %%)m99^,	9'($YY~.&8"//+,(#26#6%56$8  %';; (&2 M"",,0K,LM		+.I%guiAUVI$*6 9&&0077 1 99 $33D#E "2S^^"CC$&! ..0
 ./@A 00 "E5>>2{{<(F2
'KK-u{{CIIG
$$Z0&'89JFH( "%2 &73 ?7'?7 <7 87" %%u'7'77N&8	%z38V	&79K	7I'/$Y	9&< !%.%<%<%>AQAQ%Q"$+$:$:4%6!
 I44y7T7TTTL..0	 7 77&335	8O8O8QQN#*#9#9,#W ;Rs?P?P?RSI2#Gi[.+V 	3 $Gi[.+V5C2 %"22De\:s3^[&(:<Li	3)0Iy2H#Y
 !*!7!7!9I<S<S<U!UJ+
 3$$Y%<%<= ,,"//1I4K4K4MMJJ0,~{DF*0'i4J8I|Y8 8
 % !EtY
<M!<< < J\JJ  ~{SLID E4J0A9)% 	% IO	"I&	 	tY
,=yi! !r9   c                    t        |t        j                        sJ |j                         r| j	                  |       |du }|j                  | d       |
|j                  d   dk(  z  }
|
xs |j                  d   dk(  }|g }|r)||j                  |j                  z   |j                  z   z  }|j                  |j                         |}|j                         r|j                  }n=|xj                  t        |      |j                  z
  z  c_        g }|j                         }|j!                         }|j                  d   d	k(  rg }g }d
dd}|j                  d   dk7  r!t#        |j                  d   |xs t$              }|j&                  ;|j&                  j(                  D ci c]  }||j&                  |    }}|	|}	n|	|z  }	|j*                  ;|j*                  j(                  D ci c]  }||j*                  |    }}||}n||z  }|rd}n|j-                         \  \  }}t/        |j0                  |d |xs d      D ]x  \  }}||_        ||_        g }|j5                         sd}t7        | |||||||||
      \  }}}}|r| j9                  ||||       |j:                  rK|j=                         |_        |j                  d   dk(  r#|xj2                  |j>                  |j@                  z   z  c_        nt        |t        jB                        r/tE        | |||||||||||||	||      \  }}}}}}||du z  }g }dx}}	ntG        | |||||||||||||	|
||      \  }}}}}}}}d}dx}}	d||fvr}|}|dk  rvd}||j0                  d   k(  } | s`|}!|!r\|!d   } t        | t        jB                        r|j                  d   | _$        n't        | t        jJ                        r| j0                  }!]	 |rs|jM                         d   }"tO        | |j0                  |d ||       |D ]  }#| jQ                  |#        |j                         r| jS                          ddd
|"dg d|fc S |s)|jT                  dk7  r?|j                  |jW                         z   }$t        |      }%| jY                  |$||%z
        rd}g } n d}|duxs |jZ                  }&|j                  d   dk(  rd}|&ret]        |j                  d   |       rL|sJtO        | g ||j0                  |d ||       |j                         r| jS                          ddd
ddg d|fS |j                         r+|xj                  t        |      |j                  z
  z  c_        t_        |      }'d}(|'t        |      })|j                  d   }*|jT                  dv rZta        | ||*|)      Ltc        d |jd                  |jf                  |jh                  |j                  |j                  fD              rd}(n||)z  }g }n|jT                  dk7  rg }|jk                         s|t        |      z  }g }|&r5|r3|d   } t        | t        jB                        r|j                  d   | _$        |jm                  |      }+|+j                  | |&xr |
        |+jT                  dk(  r| jn                  r:|+j                  d   dk7  r(tq        d | jn                  D              },tq        |,|      }||+j                         cxk(  r	t$        k(  rn nd|+_*        n||+j                         z
  |+_*        |+j                  d   d	k(  r|D ]  }-ts        | |-|+||d        |+j0                  D ]$  }tu        ||+j>                  |+jT                  f       & |j                         r| jS                  |+       |
s|&s:tq        t#        |+jT                  |+jv                        |+jd                        |+_*        n|t$         kD  r|+jx                  s| jz                  |z
  |+j                  z
  |+j}                         |+jT                  z
  z
  }.|.|+jT                  kD  rB|.|+_*        |r9|+xjT                  |j                  |j                  z   |j                  z   z  c_*        |d   |+jM                         d   |d<   |+||||(|fS c c}w c c}w )zSet the ``box`` height.NF)startendcontinuer   box_decoration_breakclonerm   rn   r   r   r3   noner   )r   r   r[   Tr   r   r   break_inside)r   r   c              3   &   K   | ]	  }|d k(    ywr   N )r   values     r7   r   z)block_container_layout.<locals>.<genexpr>O  s      >u
 >s   r   visiblec              3   V   K   | ]!  }|j                   |j                         z    # y wr   )r&   margin_height)r   	float_boxs     r7   r   z)block_container_layout.<locals>.<genexpr>q  s,      ': $$y'>'>'@@':s   ')r|   r   r   )?r   r   BlockContainerBoxrR   create_block_formatting_contextremove_decorationr"   rH   rI   r   r   r   r   r&   r$   r   content_box_xre   r   r2   cascadedr1   itemsr   ru   rT   is_in_normal_flowr   add_broken_out_of_flowis_outside_markerborder_box_xrL   r^   rt   r   r   r   	ParentBoxr   rJ   unlayout_footnotefinish_block_formatting_contextrM   r   	overflowsforce_fragmentationr   r   r   r   
min_heightborder_top_widthpadding_topr   copy_with_childrenexcluded_shapesrc   r	   rv   
max_heightrP   page_bottomr   )/r(   r)   r*   r+   r-   r.   r/   r0   r1   r2   r   r3   is_startr   this_box_adjoining_marginsr&   rT   r   r   keybox_first_line_stylebox_first_letter_styleskipr~   ry   r   r   r   rU   r   r   new_max_lines
last_childru   r   r   
box_bottombottom_marginbox_is_fragmentedr   r   r5   r   rV   max_float_position_yabsolute_boxnew_box_heights/                                                  r7   rO   rO     s	    c522333
))+//4 T!HH%8syy$	11G$T		2H(IW(T **S-D-DDsGXGXXXS^^,!2
! ^^
/*;<s~~MM&&(
""$J
yy
*L.I
yy'		+.	0@SA	
'696J6J6S6S U/2C%%c** U  U#3 44
)8;8N8N8W8W"Y14C'',,"Y "Y%!7"88 (..0z!#,,tu"5diaI Xu%%&&(E#S%m"K1BLR >D)Y(= %..uc+@B&&'*'7'7'9	$;;{+u4((CII8I8I,II(u}}- *9eUL-->J(:<L&		*3'UD)ZI
 #i4&77" "488!1
 8G#ue\=.?Z);=M)Y	805UD)Z1Bm
 J488!1 M955)	>D"'3<<+;";J% $0&)1"J)*emmD<?IIFV<W
 9!+J!H+5+>+> (!$$&q)Dde,nkK) 4))(34113779deT:B  zzV# ^^c.?.?.AA
 /0A B$$Zm1KL !%I "kXp 	!-H1H1H
yy	)	SYY~6@:|:cll45&9:NK	Y--/335TUD92uiOO
!/*DEVV 1>!*+<=IIk*	JJ+%'3	3CDL > 4 4coo''););)= > > "& **J " :: "&&(o&788
 \!"%
j%--0(+		2B(CJ%$$\2Gl 1 A'k  C ~~""w}}Z'@I'M#& ':!(!8!8': $:  1:>J..07C7GN''*?*?*AAGN}}Z J.* 	!Lw\!	!
 !! EUW]]GNN$CDE ))+//8'  2 23W5G5GI		W%6%6 ,.1C1CC""$w~~57 	 GNN*+GN%&&)@)@@%%&'  #//1!4	& 	I'8:L i U"Ys   )c0cc                 |    dg}|j                  |        d |D        }d |D        }t        |      t        |      z   S )zCGet the amount of collapsed margin for a list of adjoining margins.r   c              3   ,   K   | ]  }|d k\  s	|  ywr   r   r   ms     r7   r   z"collapse_margin.<locals>.<genexpr>       .qqAv.   
c              3   ,   K   | ]  }|d k  s	|  ywr   r   r  s     r7   r   z"collapse_margin.<locals>.<genexpr>  r  r  )extendrc   re   )r0   margins	positives	negativess       r7   r$   r$     s=    cGNN$%.G.I.G.Iy>C	N**r9   c                    g }t         j                  t         j                  t         j                  f}| }t	        ||      rG|j                  |j                  d          |j                  sn|j                  d   }t	        ||      rG|j                          |}t	        ||      rG|j                  |j                  d          |j                  sn|j                  d   }t	        ||      rGd}|D ]  }|dv s||fdv s|} |S )a  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   )ro   rp   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"   ru   reverse)sibling_beforesibling_aftervaluesblock_parallel_box_typesr)   rC   r   s          r7   r   r     s   " F 	U33U5F5F H C
S2
3cii./||ll2	 S2
3
 NN
C
S2
3cii/0||ll1o	 S2
3 F 77E6? O* <* F Mr9   c                 ^    | j                         d   }|j                         d   }||k7  r|S y)zBReturn the next page name when siblings don't have the same names.r   r   N)r   )r,  r-  before_page
after_pages       r7   r   r     s;     ,,.q1K**,Q/Jj  !r9   c                 `   |rt        |d   t        j                        rc|d   j                  d   }|d   j                  d   }t	        |      |z
  }||k  ry|d| }d|d   j
                  i}t        | ||d ||       ||fS d}	t        |      D ]  \  }}
t        |
t        j                        r|
j                  s|
j                  r:|
j                  rG|
j                         r9t        |
|	      }|	)t        ||       s|dz  }|d| }||   j                  di} n|
}	|
j                         st        |
j                  d   |       rt        j                   t        j"                  t        j                  f}t        |
|      st%        | |
j&                  ||      }|s|\  }}|
j)                  |      }g |d| |}t        |
t        j                        r(||d D ]   }|j                  s|j+                  |       " |j                  |i}|dz  } n yt        | ||d ||       ||fS )aq  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   rt   r"   r   rU   rJ   reversed_enumerater)  	is_header	is_footerrP   r   r   r   r~   r;   r   r   ru   r  r   )r(   ru   r.   r/   r   r   r~   r   rU   previous_in_flowry   r   breakable_box_typesrC   new_grand_childrenr   
next_childs                    r7   r   r     s]    Jx{EMM: 1+##I.!""8,H&7?'R(223	Xef%~{	DY&&*84 ,ueU3345??__""$/7GHJ+(W=
'/%e_22D9	$""$$U[[%@'J0F0F#H%!450U^^^[J4:1&	 % 8 89K LI#AXfu%5#Ay#AL "%)?)?@*256*: @J)33 , 3 3J ?@
 "+) <IQJEU,X  %&!1>;O""r9   c                 L    t        |       D ]  }|j                         s|c S  y)z=Find and return the last in-flow child of given ``children``.N)reversedr   )ru   ry   s     r7   r   r   8  s'    (# ""$Lr9   c           	      b    t        t        t        t        |                   t        |             S )zBLike reversed(list(enumerate(seq))) without copying the whole seq.)zipr<  ranger   )seqs    r7   r4  r4  ?  s     xc#h((3-88r9   c                    |D ]  }t        |t        j                        rt        | |j                  ||       |j
                  d   dk(  r||v r|j                  |       n'|j
                  d   dk(  r||v r|j                  |       |j                  r| j                  |j                         || j                  v s| j                  j                  |        y)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.

    rm   r{   fixedN)r   r   r   rJ   ru   r"   remover   r   broken_out_of_flowpop)r(   box_listr.   r/   r)   s        r7   rJ   rJ   D  s      0c5??+~{D99Z J.3.3H!!#&YYz"g-#2Ds#<<%%cll3',,,&&**3/0r9   c                 *    |j                   r| dv S | dv S )z$Test whether we should avoid breaks.)r$  r%  r&  )r$  r%  r   r   r(   s     r7   r   r   [  s#    DDD000r9   c                 *    |j                   r| dv S | dv S )z$Test whether we should force breaks.)r   ro   rp   r"  r#  r'  )r   ro   rp   r"  r#  rH  rI  s     r7   r   r   b  s,     A A 	ADDDr9   )TNNNNNFN)T)3__doc__	functoolsr   mathr   formatting_structurer   r{   r   r	   r'  r
   flexr   floatr   r   r   gridr   inliner   percentr   r   r   replacedr   tabler   r   r8   r'   r<   rN   without_min_maxrv   r   r   r   r   rO   r$   r   r   r   r   r4  rJ   r   r   r   r9   r7   <module>rW     s    I   ( : "  @ @  # R R / 4 MQBFGK,.^:/d98x %,,=E$R  !:>?=D,<KH\z!zEP+5pK#\9
0.1Er9   