
    ,gL                     4   d 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 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!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  Z.d! Z/d" Z0d# Z1y)%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                    |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                        }t        | ||      |_        |j                  2|j                  |z   |j                  z   }||j                  z
  |_        g }t        | |||||||||	|
      S )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                 o/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/weasyprint/layout/block.pyblock_level_layoutr5      s^   
 *1R~N#+"K/7=Nc5>>*C!12>>V#CN& !C!# !44 "!  "99^,	9%&CNYY~.&8"//)**+O->+O+OP%gs4DE==$!nn/??#--OO,s~~=CN "$lJ0@~{4Ew     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.   r/   r   r0   results               r4   r&   r&   A   s   
 #u~~&S,
4D>;8 
C	(S,
4D>;8IY  	  
C//	0*7C9IJ	C	'S,
4D>;A 
C	'S,
4D>;8 +d3i&8&8%99IJKKV?T?r6   c                    |j                   d   dk7  s|j                   d   dk7  rut        | ||||||||	      }|d   }|T|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.   r/   r   r0   r@   	resume_atnew_boxcolumns_bottom_spacerQ   r%   _s                     r4   r9   r9   ^   s    			.!V+IIn%/S,
4D>;8IK 1I	QiG%%(>(>>++, ! $#gYE 44'S,
$m^!24 			S+113C3J3JK	Mc+,#lJ%6LF
 ay G W%6%6':N:N7#I#I#K %5W.e%=!
J+++Z':L:L-L	NMr6   c                 b   t        |t        j                        r|j                  }|j                  d   }n|d   }d}| j
                  }| j                  }| j                  }| j                  }| j                  }| j                  }	| j                  }
||z   |z   |	z   }| j                  dk7  r:||
z   }|dk7  r||z  }|dk7  r||z  }||kD  r|dk(  r	dx}| _        |dk(  r	dx}| _        |
dk7  r<|dk7  r7|dk7  r2|dk(  r-| j                  s!| xj                  ||z
  |
z
  |z
  |z
  z  c_        |
dk(  r.|dk(  r	dx}| _        |dk(  r	dx}| _        |||z   |z   z
  x}
| _        ||z
  |
z
  }||cxk(  rdk(  rn n|dz  | _        |dz  | _        y|dk(  r|dk7  r||z
  | _        y|dk7  r|dk(  r||z
  | _        yyy)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XEvXE86!-..3?6!.//3+8v-(f2DcmmNN00588ChNPN v)**Hsv*++Hs'$!H,x79 	9	11E9J8%v%$q.%>	V	F 2$x/	V	F 2%0 !3	r6   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   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\\ 	:E (89	: 9r6   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 )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!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'<<<r6   c                    t        |      |j                  d   z
  }|dk  r|st        | |j                  |	|
       dd|fS |j                  d   dz
  }|r|D ]  }|dz  }|dk(  s n ||kD  r|st        | |j                  |	|
       dd|fS |r.||k  r)|| d  D ]  }t        | |j                  |	|
        || d = t        | |j                  |	|
       dd||ifS )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 	GT]]NKPUI%% YYx 1$F 	AaKF{	 ]GT]]NKPUI%%&L(!6'(+ 	FEF	F &"L$
+++r6   c                     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         }|rt         ||||||||||      \  }}} n:|rE j                  |	|      r3||j                  z  }|j                  d|j                          d|_         j                   rd} fd|j#                         D        }|D ]  } j%                  |      }|j'                  |       |xs#  j(                  xs  j                  |	||z         }|sO j+                  |       |s|re|j
                  d   d	k(  r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_ellipsisc              3   f   K   | ](  }|j                   j                  v r|j                    * y wN)footnote	footnotes).0
descendantr'   s     r4   	<genexpr>z"_linebox_layout.<locals>.<genexpr>  s3      =(2&&'*;*;; ##=s   .1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*nk;MON !*. 9 RD) A~25))<L2MR /NI #4;;6 	)t"33!..1C1CCHH .. L""<(1JK 	 %0dL.uj)^&"E4  w55n . cnn,NNN1s~~o.CN!M=6:6F6F6H=I & ""228<$$X. A..A**$nx&?A 
 ++H5
 $=#>>*;<F5@ 'dL .u *I~ +	6-2E4
 -1M!%^^,=>'I488EM!3"4 D!#

eRh L,667	$	:}iGGr6   c                    dx}}t        |      }|Nt        ||      }t        ||      }|st        ||       r*|j	                         d   }||d}|d i}d}||||
||||fS d}|}|j
                  s
t        ||       ||rt        |      }|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                  |	        t        | ||      }|Y|D ]  }|j                  | 	        t        |      }|xj                  ||j                  z
  z  c_        g }|j                         }
|r|j
                  r(t        |      }|xj                  |z  c_        |
|z  }
g }nt!        |t"        j$                        ss|j                  d
   dk(  rd} n#t'        |j                  d
   |j(                        } |j+                  |        t        |      | z
  }!|xj                  |!z  c_        |
|!z  }
g }|xr t-        d |D               }"t/        |dd       s||_        t3        | ||	|||"|||||      \  }#}}}$}%}|#N|%s|#j                         |#j4                  z   }&|#j7                         |#j9                         z   }'| j;                  |	|&      }(| j;                  |	|'      })|"xs |j=                          }*|*r|(rt?        | |#g||       d }#nq|*rm|)rkt?        | |#g||       |	|#j@                  |#jB                  z   z  }	t3        | ||	|||"|||||      \  }#}}}$}%}|#r$|#j7                         |#j9                         z   }
n|'}
|$}|#r|j+                  |#jD                         |#r-|#jF                  r!|#j7                         |#j9                         z   }
d }|#rtI        ||       r/tK        | |||      }+|+r|+\  }}d}||||
||||fS |sd}||||
||||fS tM        d |D              rt?        | |||       g }|r|d i}d}nd}||||
||||fS ||#_'        |j+                  |#       |||i}d}||||
||||fS )NFr   breakr   Tr   r   r   r   )dyr   c              3   @   K   | ]  }t        |t              s|  y wr   )r   r   r   rx   s     r4   r   z"_in_flow_layout.<locals>.<genexpr>  s#      ?7%!45 	?7s   r   c              3   <   K   | ]  }|j                           y wr   )r|   r   s     r4   r   z"_in_flow_layout.<locals>.<genexpr>Y  s     JEu--/Js   )(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
4E<4 4 
00E#78%*B $33D#E   %//6)#$ %%)m99^,	9'($YY~.&8"//+,(#26#6%56$8  %';; (&2 M"",,0K,LM%gu6JKI$*6 9&&0077 1 99 $33D#E "2S^^"CC$&! ..0
 ./@A 00**J "E5>>2{{<(F2
'L(A399M
$$Z0&'89JFH(("J "%2 &73 ?7'?7 <7 87" 5.5#5 &8	%z	=~	')'=$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e\:)+I#[2CW	3 0Iy2H#Y
 !..093J3J3LL  ,
2$$Y%<%<=,,"//1I4K4K4MMJJJ0,~{DF*0'i4J8I|Y8 8
 % !EtY
<M!<< < J\JJ  ~{DLID E4J0A9)% 	% IO	"I&	 	tY
,=yi! !r6   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                  xsH |j                  xs: |j                  xs, |j                  xs |j                         xs |j                    }|r|j"                  }n=|xj"                  t%        |      |j                  z
  z  c_        g }|j'                         }|j)                         }|j                  d   d	k(  rg }g }d
dd}g }i }d}|j                  d   dk7  r!t+        |j                  d   |	xs t,              }	|
rd}t/        |dd      }n|j1                         \  \  }}d}t3        |j4                  |d |xs d      D ]  \  }}||_        ||_        g }|j9                         s&d}t;        | |||||||||
      \  }}}}|r|||f||<   nt        |t        j<                        r/t?        | ||||||||||||||	      \  }}}}}}	||du z  }g }||z  }ntA        | |||||||||||||||||	      \  }}}}}}}}d}d||	fvr}|}	|	dk  rvd}||j4                  d   k(  } | s`|}!|!r\|!d   } t        | t        j<                        r|j                  d   | _!        n't        | t        jD                        r| j4                  }!]	 |rS|jG                         d   }"tI        | |j4                  |d ||       |D ]  }#| jK                  |#        ddd
|"dg d|	fc S |s|jL                  dk7  r/| jO                  |j"                  |jQ                         z   |      rd}g } n d}|du}$|j                  d   dk(  rd}|$rEtS        |j                  d   |       r,|s*tI        | g ||j4                  |d ||       ddd
ddg d|	fS |j1                         D ]  \  }%}&|&| jT                  |%<    |r+|xj"                  t%        |      |j                  z
  z  c_        tW        |      }d}'|zt%        |      }(|jL                  dv rYtY        | ||(      Lt[        d |j\                  |j                  |j                  |j                  |j                  fD              rd}'n||(z  }g }n|jL                  dk7  rg }|j                  s4|j                  s(|j                         s|j                   s|j^                  r|t%        |      z  }g }|$r5|r3|d   } t        | t        j<                        r|j                  d   | _!        |ja                  |      })|)j                  |
 |$xr |        |)jL                  dk(  r^| jb                  r:|)j                  d   dk7  r(te        d | jb                  D              }*te        |*|      }||)j'                         z
  |)_&        |)j                  d   d	k(  r|D ]  }+tg        | |+|)||d        |)j4                  D ]$  }ti        ||)jj                  |)jL                  f       & |)j                         r| jm                  |)       |s|$s:te        t+        |)jL                  |)jn                        |)j\                        |)_&        n|t,         kD  r|)jp                  s| jr                  |z
  |)j"                  z
  |)ju                         |)jL                  z
  z
  },|,|)jL                  kD  rB|,|)_&        |r9|)xjL                  |j                  |j                  z   |j                  z   z  c_&        |d   |)jG                         d   |d<   |)||||'|	fS )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   &   K   | ]	  }|d k(    ywr   N )r   values     r4   r   z)block_container_layout.<locals>.<genexpr>  s      >u
 >s   r   visiblec              3   V   K   | ]!  }|j                   |j                         z    # y wr   )r%   margin_height)r   	float_boxs     r4   r   z)block_container_layout.<locals>.<genexpr>>  s,      ': $$y'>'>'@@':s   ')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
))+//1 T!HH%8syy$	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 Iu%%&&(E#S%m"K1B " >D)Y(=
 %3 517"9- u}}-)8eUL-->J(:&		*3'UD)ZI
 #i4&77" "]*M 8G#ue\=.?Z);')A7I8'5UD)Z1Bm JM955)	>D"'3<<+;";J%#/&)1"J)*emmD$'II.>$? !+ 9!+J!H+5+>+> (!$$&q)Dde,nkK) 4))(34 deT:B  zzV#$$S^^c6G6G6I%I:V !%I "MIR 	!-
yy	)	SYY~6@:|:cll45&9:NK	YTUD92uiOO(..0 0
U*/""3'0  67#..H	J 1>!*+<=JJ+%'3(89A > 4 4coo''););)= > > "&**J " :: "..0##  o&788
 \!"%
j%--0(+		2B(CJ%$$\2Gl 1 A'k  C ~~""w}}Z'@I'M#& ':!(!8!8': $:  1:>J#g&;&;&==}}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 r6   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     r4   r   z"collapse_margin.<locals>.<genexpr>o       .qqAv.   
c              3   ,   K   | ]  }|d k  s	|  ywr   r   r  s     r4   r   z"collapse_margin.<locals>.<genexpr>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                    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   )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2
3cii./||ll2	 S2
3
 NN
C
S2
3cii/0||ll1o	 S2
3 F 77E6? O* <* F Mr6   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       r4   r   r     s;     ,,.q1K**,Q/Jj  !r6   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   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     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""r6   c                 L    t        |       D ]  }|j                         s|c S  y)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    t        t        t        t        |                   t        |             S )zBLike reversed(list(enumerate(seq))) without copying the whole seq.)zipr1  ranger   )seqs    r4   r)  r)  	  s     xc#h((3-88r6   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.

    rl   rz   fixedN)r   r   r   rG   rt   r!   remover   r   r   pop)r'   box_listr-   r.   r(   s        r4   rG   rG     s      0c5??+~{D99Z J.3.3H!!#&YYz"g-#2Ds#<<%%cll3',,,&&**3/0r6   c                 *    |j                   r| dv S | dv 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                 *    |j                   r| dv S | dv S )z$Test whether we should force breaks.)r   rn   ro   r  r  r  )r   rn   ro   r  r  r<  r>  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>rK     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   