
    ,gY                        d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZmZmZ d	d
lmZ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 d	dlmZm Z  d	dl!m"Z"m#Z#m$Z$ d	dl%m&Z& d	dl'm(Z(m)Z) d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1ed        Z2d Z3d Z4d Z5d  Z6d,d!Z7d" Z8d# Z9d$ Z:d% Z;d& Z<d' Z=d( Z>d) Z?d* Z@d+ ZAy)-zLayout for inline-level boxes.    N)inf   )computed_from_cascaded)character_ratiostrut_layout)boxesbuild)can_break_textcreate_layoutsplit_first_line   )AbsolutePlaceholderabsolute_layout)flex_layout)avoid_collisionsfloat_layout)grid_layout)handle_leader)handle_min_max_width)resolve_one_percentageresolve_percentages)inline_min_content_widthshrink_to_fittrailing_whitespace_size)inline_replaced_box_layout)find_in_flow_baselinetable_wrapper_widthc	              #     K   t        ||       |t        |d|j                         nd|_        	 t	        | ||||||||	      \  }	}
|	r&t        | |	|       |	j                  |	j                  z   }|	y|	|
f |
y|
}d|_        d}Vw)zReturn an iterator of ``(line, resume_at)``.

    ``line`` is a laid-out LineBox with as much content as possible that
    fits in the available width.

    Ntext_indentr   )r   r   widthr   get_next_lineboxr   
position_yheight)contextboxr"   bottom_space
skip_stackcontaining_blockabsolute_boxesfixed_boxesfirst_letter_styleline	resume_ats              p/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/weasyprint/layout/inline.pyiter_line_boxesr/      s      -.sM3C3I3IJ
*S*lJnk;MOi '4)9:4;;6J<Io
! s   BBc	                 N   t        ||      }|dk(  ryt        |||      }||_        | j                  r3t	        | ||d      |_        t        |j                  |       \  |_        }	ndx|_        |_        t        | ||d      \  }
}}|j                  }| j                  j                         }	 |
x}|_        |x}|_        |j
                  }|
|z   }|
|j                  z  }
g }g }g }g }g }t        | ||
|||||||||      \  }}}}}}|j
                  |j                  c|_        |_        t        |      r|s	d|_        n8t        | |       t        | ||d      \  }}	}t!        | |||du xs |	      }|j                  d
   dk(  r|dz  }||j
                  z  }t#        |      \  } }!|!J | J |! |_        |!|_        | |!z
  |_        ||!z
  }"d|_        d|_        |j+                  ||"       ||_        |j                  |k  rns|j                  }| j                  }#|| _        t        | ||d      \  }
}}|j                  d
   dk(  r
|
|f||fk(  }$n|
|j
                  z   |f||z   |fk(  }$|$r|#| _        n|j-                  |       |j-                  |       |D ]  }%d|%j                  j.                  d   v r |%j+                  d||%j                  z
         >|%j+                  |j                  |%j                  z
  ||j                  z   |%j                  z
          g }&|j                  |j                  z   }'|D ]D  }(|'|(_        t1        | |(||||d      \  })}*|&j3                  |)       |*s3|(||*f| j4                  |)<   F |&r|xj6                  t9        |&      z  c_        ||fS )zReturn ``(line, resume_at)``.continueNNT)r'   
first_liner   F)outerNlast	directionrtlltrinlinedisplayr'   )skip_first_whitespacefirst_letter_to_boxr"   excluded_shapesr   r    r   styler#   r   copy
position_xr   split_inline_boxis_phantom_lineboxremove_last_whitespace
text_alignline_box_verticalitybaseline
margin_topmargin_bottom	translateextend	specifiedr   appendbroken_out_of_flowchildrentuple)+r$   lineboxr"   r&   r'   r(   r)   r*   r+   _rC   available_widthcandidate_heightr@   original_position_xoriginal_position_yoriginal_widthmax_xline_placeholdersline_absolutes
line_fixedwaiting_floatsline_childrenr,   r-   preserved_line_breakfirst_letterlast_letterfloat_widthnew_position_xnew_available_widthoffset_xbottomtopoffset_ynew_excluded_shapes	conditionplaceholderfloat_childrenwaiting_floats_ywaiting_floatnew_waiting_floatwaiting_float_resume_ats+                                              r.   r!   r!   6   sU    'w
;JZ$Wj:LMJ#G0WF(@ *+*.>*%/9+J
O ~~--224O
3==g03==g0 _,g)))

 &6gz5,
~z;L]&,	#y.	k )-

DKK%w~d#,@DKw-1AW.e2=..T.t#;';> !!+.%7NH

"H*40!!!sl#x* %;;**;;%55"12BT+53:/
J!!+.%7#Z0#%85: :I $djj0*=#n46IBK KI&9G#G J .)z"( C{((229==!!!Z+2H2H%HI !!+"8"88T[[(;+A+AACC N4' J#3 5A]$4n$6822 	/0"/1H=JG&&'89J ~..?    c                    |d}d}n|j                         \  \  }}t        | t        j                        r~|J | j                  d   }| j
                  j                         }|t        |      k(  ry|dv r6||d }|r/|j                  d      r|dz  }|dd }|r|j                  d      r|r|diS dS t        | t        j                  t        j                  f      rq|dk(  r| j                  syt        | j                  |   |      }|dk(  r7|dz  }|t        | j                        k\  ryt        | j                  |   d      }|s|r||iS dS |
J d|         y)	zReturn ``skip_stack`` to start just after removable leading spaces.

    See https://www.w3.org/TR/CSS21/text.html#white-space-model

    Nr   white_spacer1   normalnowrappre-line    r   zunexpected skip inside )items
isinstancer   TextBoxrA   textencodelen
startswithLineBox	InlineBoxrQ   r>   )r%   r'   indexnext_skip_stackrt   r}   results          r.   r>   r>      so    $.$4$4$6! #u}}%&&&ii.xx CI::<D4??40
ABx 4??40 !&t}/4/#u78A:cll&s||E':OLZQJECLL))!*3<<+>EF#(Fv==>!8>>rr   c                 f   g }|}t        |t        j                  t        j                  f      rX|j	                  |       |j
                  sy|j
                  d   }t        |t        j                  t        j                  f      rXt        |t        j                        r|j                  d   dv sy|j                  j                  d      }|rnt        |      t        |j                        k(  ry||_        t        | |dd      \  }}}|J |J |j                  |j                  z
  }|j                  |_        n|j                  }d|_        d|_        |j                  j                  dz  r%|j
                  D ]  }	|	j                  | d	
        |D ]  }
|
xj                  |z  c_         y)zRemove in place space characters at the end of a line.

    This also reduces the width and position of the inline parents of the
    modified text.

    Nr9   rt   ru    r    r   Tdxignore_floats)r{   r   r   r   rO   rQ   r|   rA   r}   rstripr   split_text_boxr    pango_layoutfirst_line_directionrL   )r$   r,   	ancestorsr%   new_textnew_boxresumerT   space_widthchildancestors              r.   rF   rF      sy    I
C
S5==%//:
;||ll2	 S5==%//:
;
 sEMM*IIm$(HHxxs#Hx=CM)+GS$B"""~~ii'--/MM	ii	 ,,q0]] 	AEOO|4O@	A  &+%&rr   c                 R   |r#| j                   rd|d<   d}| j                   d   }t        |t        j                        rt	        i |d      }|j
                  j                  d      rJt        j                  | j
                   d|| j                  |g      }|g| j                   dd | _         |S |j                  rd	}|r.|j                         \  }|r|\  }	|j                  |	d |_	        d}|j                  rS|j                  d   }
t        j                  |
      }|d
vr|rn(d}||
z  }|j                  dd |_	        |j                  rS|j                  d      rx|d   dk(  r|t        j                  | j
                   d|| j                  g       }t        j                  | j
                   d|| j                  |      }|f|_         |g| j                   | _         nt        j                  | j
                   d|| j                  g       }d|_        t        j                   | j
                   d|| j                  g       }|f|_         t        j                  | j
                   d|| j                  |      }|f|_         |g| j                   | _         t#        j$                  |       |r$r"|\  }	|j'                         \  \  }}|	|dz   |ii}|S t        |t        j(                        r.|r|j                         \  }nd}t+        |||      }|r|\  }	|	|i}|S )z-Create a box for the ::first-letter selector.staticpositionr   r   N)cascadedparent_styleelementz::first-letterr   F)PsPePiPfPoT
floatnone)rQ   r{   r   r|   r   element_tagendswithr   r   r}   valuesunicodedatacategorylstripBlockBoxr+   r   r	   process_text_transformrz   	ParentBoxr?   )r%   r'   r+   ra   r   letter_style
letter_boxcharacter_foundchild_skip_stackr   next_letterr   text_boxline_boxchild_indexgrandchild_skip_stacks                   r.   r?   r?     s>   cll *2:&QeU]]+1*<dLL  ))*:;"__'~6KK%*
 ", ?cll12.> ?| { "'(2(9(9(;%$'!1%*ZZ%7
%)
jj"'**Q-K*33K@H'EE*!*. K/L!&ABEJ jj  &&t, *'2f<%*__"/~>.R&A
 $)=="/~>KK$7 08k
+(2'BS\\'B%*^^"/~>.R&A
 9=
5#(=="/~>KK$- 08k
+#(=="/~>KK$7 .6K)(2'BS\\'B00:!&6!+,224 ><&; "K!O5J#K&M
  u/$.$5$5$7! #' 2'); =##%56
rr   c           	      (   t        |t        j                        r3|j                         }t	        ||       |j                         |_        |S t        |t        j                        r|j                  rI|j                  |j                  f}t        | ||       |j                  |j                  |j                  }
}	}t        | ||||||      }|j                  r	
c|_	        |_        |_        |S t        dt!        |      j"                   d      )z7Compute the width and the height of the atomic ``box``.Layout for  not handled yet)r{   r   ReplacedBoxrB   r   margin_heightrI   InlineBlockBoxis_table_wrapperr    r#   r   	min_width	max_widthinline_block_box_layout	TypeErrortype__name__)r$   r%   rC   r'   r(   r)   r*   containing_sizer    r   r   s              r.   
atomic_boxr   b  s     #u(()hhj"3(89((* J 
C--	./557G7N7NOOo>*-))S]]CMMi9E%S*j2BK) 6;Y	3CIs}cm J +d3i&8&8%99IJKKrr   c                 l   ddl m} t        ||       |j                  dk(  rd|_        |j                  dk(  rd|_        |j
                  dk(  rd|_        |j                  dk(  rd|_        t        || |       ||_        d|_	         || |t         |d||d dd 
      \  }}}}}}t        |      |_        |S )Nr   )block_container_layoutautor   TF)r&   r'   page_is_emptyr)   r*   adjoining_marginsdiscard	max_lines)blockr   r   margin_leftmargin_rightrJ   rK   inline_block_widthrC   r"   r   inline_block_baselinerI   )	r$   r%   rC   r'   r(   r)   r*   r   rT   s	            r.   r   r   x  s    --. & 
6!
~~
F"sG%56CNCN/C4J>4	CAq!Q
 )-CLJrr   c                    | j                   r}| j                  D ]m  }t        |t        j                        s|j                  s+|j                  d   j                  sE|j                  d   j                  d   }|j
                  c S  n#| j                  d   dk(  rt        | d      }|r|S | j                  | j                         z   S )zReturn the y position of the baseline for an inline block.

    Position is taken from the top of its margin box.

    https://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align

    r   overflowvisibleTr5   )
r   rQ   r{   r   TableBoxrI   rA   r   r"   r   )r%   r   	first_rowr   s       r.   r   r     s     \\ 	.E%0>>ennQ&7&@&@ %q 1 : :1 =I$---		.
 
:	)	+&s6M>>C--///rr   c                     |j                   | j                  | j                  z   | j                  z   | j                  z   | j
                  z   | j                  z   z
  }| j                   dk(  rt        || |      | _         y y )Nr   )r    r   r   border_left_widthborder_right_widthpadding_leftpadding_rightr   )r%   r$   r(   available_content_widths       r.   r   r     s    .44#***	 # 6 6	7	,,	-. yyF!'30GH	 rr   c                 B   t        ||       ddd}t        |t        j                        r||_        |d}n|j                         \  \  }}|xs d}|J t        |      dk(  }t        | |||z
  ||      \  }}}|d}n|di}|j                  rR|j                  d   }||j                  d   }n|j                  j                         d| j                         d   }ndx}}nt        |t        j                        rK|j                  dk(  rd|_        |j                  dk(  rd|_        t        | |||||||||	|
|      \  }}}}}}nKt        |t        j                        r"t!        | ||||||      }||_        d}d}d}d}nt        |t        j"                        r]||_        d|_        d	D ]%  }t'        |d
|       dk(  st)        |d
| d       ' t+        | |t,         ||d||d	      \  }}}}}d}d}d}nt        |t        j.                        r\||_        d|_        d	D ]%  }t'        |d
|       dk(  st)        |d
| d       ' t1        | |t,         ||d||      \  }}}}}d}d}d}n"t3        dt5        |      j6                   d      ||||||fS )a  Fit as much content as possible from an inline-level box in a width.

    Return ``(new_box, resume_at, preserved_line_break, first_letter,
    last_letter)``. ``resume_at`` is ``None`` if all of the content
    fits. Otherwise it can be passed as a ``skip_stack`` parameter to resume
    where we left off.

    ``new_box`` is non-empty (unless the box is empty) and as big as possible
    while being narrower than ``available_width``, if possible (may overflow
    is no split is possible.)

    r   leftrightNis_line_startr9   r   Fu   ⺀rh   r   rg   r   margin_r   r   )r   r{   r   r|   rC   rz   r   r   r}   r~   decoder   r   r   rD   AtomicInlineLevelBoxr   InlineFlexBoxr"   getattrsetattrr   r   InlineGridBoxr   r   r   r   )r$   r%   rC   rZ   r&   r'   r(   r)   r*   r[   r^   r_   float_widthsskipr   r   r`   r-   ra   rb   siderT   s                         r.   split_inline_levelr     s     -.*L#u}}%#D","2"2"4T:91D%%%M*a/.<S%*,d'/)++ <ItI8888A;L|!hhrl!hhoo/6==?C)--L;	C	)??f$COv% C&6c:ulJ~{<M]',	$)1<	l 
C33	4S*j2BK) (	$  	C,,	-#6 	2DsgdV,-7wtf-q1	2 '2S3$
,<eK'0#Aq!  %	C,,	-#6 	2DsgdV,-7wtf-q1	2 '2S3$
,<eK')#Aq!  %+d3i&8&8%99IJKK0, rr   c           	          |j                         rm||_        t        |      }|j                  |       |j                  |||f       |j                  d   dk(  r|	j                  |       y |
j                  |       y |j                         r||_        t        | ||j                        }||z   D cg c]  \  }}}|j                         s| }}}|r|t        | |d         z  }|||z
  kD  s|r|j                  |       y t        | |||	|
|d       \  }}|r|||f| j                  |<   |j                  |||f       |}t        |j                         d      }||j                  d   xx   |z  cc<   |j                  d   dk(  r t        |t        j                        r||z  }n|j                  d   dk(  r||z  }|D ]r  \  }}|j!                         s|j                  d   dk(  r|j                  d	   d
k(  s&|j                  d   dk(  sN|j                  d	   dk(  sa|j#                  |       t y |j%                         r@|j                  d   d   }| j&                  }| j(                  |   |   j                  |       y y c c}}w )Nr   absoluter9   r=   r   r   r   r   r7   r:   r8   r   r   )is_absolutely_positionedrC   r   rO   rA   
is_floatedr   r    r   r   rP   maxmargin_widthr{   r   r   is_in_normal_flowrL   
is_runningcurrent_pagerunning_elements)r$   r%   r(   r   r   rQ   r_   waiting_childrenr^   r)   r*   r[   r   rZ   rC   r&   rl   rc   rT   child_non_floating_children	new_childfloat_resume_atr   	old_childrunning_namepages                              r.   _out_of_flow_layoutr    s   
 %%'%)%0  -U ;<;;z"j0!!+.{+				%#GU4D4J4JK
 )13C(C!(#q&!$$& !( !( !3.r24 4K ++~ !!%()5 0.+*/&I +_5>**51##UIu$=>E U'')1-BW-."4.{{7#v-c5==1 "$JW%0 - /9 224[[)V3		+.%7[[)W4		+.%7''2'./ 
			{{:.q1##  .t4;;EB 
Y!(s   5J
c                 <   |r
|j                         }|r|j                         \  }}}|j                         rt        |      s2|r
||v r||   }nd }|j                  |j                         z   dz
  }||j                  kD  r?t        | ||j                  |||||||||	      \  }}}}}}|rn|dz  }||j                  kD  r?|
j                  |       | t        |t        j                        sJ ||iS |
j                  |||f       ||iS |
r|
d   d   dz   d iS y )Nr   r9   r   )rB   popr   can_break_insiderC   r   r   rM   r{   r   r|   rO   )r$   r%   rZ   r&   initial_skip_stackr)   r*   r[   r^   r_   rQ   r   waiting_children_copyr   r   original_childr   r   child_resume_atrT   s                       r.   _break_waiting_childrenr
  ]  sh     !1 5 5 7#1F1J1J1L.K**,4DU4K!k5G&G#5k#B #'  $$u'9'9';;a?E%***9K^U-=-=u "2C!2N!	:#6	?Aq!Q
 #
 %*** OO12 !%777  11 i ?@11 Q!#T** rr   c                    |dz  }|du }|}|}t        |t        j                  t        j                  f      sJ |j                  |j
                  z   |j                  z   }|j                  |j                  z   |j                  z   }|}g }g }d}dx}}ddd}d}|j                  d   dk(  rg }|rd}n|j                         \  \  }}t        |j                  |d       D ]  \  }}||z   }|j                  |_        |j                         sGt!        | ||||||||
|||	||||       |j#                         r|dz   }||
vr||j%                         z  }t|t'        |j                        dz
  k(  }|}g }t)        | |||||||||	||      \  } }!}"}#}$}%|j                  d	   d
k(  r|}&||%d   z  }n
|}&||%d   z  }|r&|&r$|!"||&z  }t)        | |||||||||	||      \  } }!}"}#}$}%d}|"rd}d}'|du rd}n|du rd}n|j                  d   dv rd}'|',d||#fv rd}'n#|#dv r|#}'nt+        ||#z   |j                  d         }'|'r|j-                  |       g }||#}|j.                  rd}n|$}| t        |t        j0                        sJ t        |t        j                        r|j3                  || f       t        | t        j0                        xr3 | j4                  xr% t7        j8                  | j4                  d         dk(  }(| j:                  | j%                         z   })|)|kD  r|(st=        | |||||||	|
|||      }*|*r|*}! nV|)}|j3                  || |f       |
j-                  |       |!|j-                  |       ||!i}! n |j-                  |       d}!|j                  d	   d
k(  rt'        |      dkD  rt|D +,cg c]  \  }+},}+|,j                         r|, }-}+},|-d   j:                  }|-ddd   D ]5  }|j?                  ||j:                  z
  d       ||j%                         z  }7 |!du }.|jA                  |D ,+cg c]  \  }},}+|,
 c}+},}      }/|/jC                  | |.        t        |t        j                        rvd|/_"        |/j                  }|/j                  d	   dk(  r|ddd   }|D ]C  }|j                         s|j:                  |j%                         z   |/j:                  z
  |/_"         ny nw||/_        |j                  d   dk(  rd}0n|j                  d	   dk(  r|n|.}0|0r#|/j                  D ]  }|j?                  |        ||z
  |/_"        |/j?                  |d   d       tG        |j                  |       \  }1|/_$        |j                  d   |/_%        |1|/jJ                  z
  dz  }2|2|/jL                  z
  |/jN                  z
  |/_(        |2|/jR                  z
  |/jT                  z
  |/_+        |/j                  d   dk(  r|D ]  }3tY        | |3|/||d        |!t[        t]        |!            }||k  r|di}!|j^                  rd}d}|/|!||||fS c c},}+w c c}+},}w )z$Same behavior as split_inline_level.g0D   ?NFr   r   r   relativer   r7   r8   r   r   Tr       rt   )prerw   )TFlangr9   Zsr   )startendr:   box_decoration_breakcloner   	font_sizer   r=   )0r{   r   r   r   r   r   r   r   r   r   rA   rz   	enumeraterQ   r"   r   r  r   r   r   r   r
   rM   trailing_collapsible_spacer|   rO   r}   r   r   rC   r
  rL   copy_with_childrenremove_decorationr    r   rI   r#   border_top_widthpadding_toprJ   border_bottom_widthpadding_bottomrK   r   nextiter	is_leader)4r$   r%   rC   rZ   r&   r'   r(   r)   r*   r[   r^   r_   is_startinitial_position_xr  left_spacingright_spacingcontent_box_leftrQ   r   r`   ra   rb   r   float_resume_indexr   ir   r   is_last_childrU   child_waiting_floatsr   r-   	preservedfirstr6   new_float_widthsend_spacing	can_breaktrailing_whitespacerd   previous_resume_atrT   	box_childin_flow_childrenis_endr   translation_neededline_heighthalf_leadingabsolute_boxs4                                                       r.   rD   rD     s    
XET!H##cEMM5??;<<<3??*S-B-BB  	C,,,s/E/EE !H !%%L;*L
yy
*(..0zcll4512 f5D>>&&(.uh/->z<	1
 !%*QY".U//11E#cll"3a"77!
O\,nk!#7H 	G	9i6F
 99[!U*&K%f--E'K%g..E[Y-> {*O"UJ 0.+%';]L KIy)UD:J 
#' 	$KE!KYY}%)::IU++!	-'!	*%'V)<>	 OO,-! L++KKeU]]333#u}}-$$eY%789emm4 AA$$Y^^B%78D@   '11I4J4J4LLN%.A%<-ulDV"K1B"M8=M&O" & 2I'J##UIu$=>23 OO,-	*IGfJ 	()	 yy&3x=1+<-5.)!Y**, . . &a(33
%dd+ 	/EOO!1!11$  H%,,..J	/
 $F$$.677*ui79GL&jA#u}}%##==%."~H 	E&&($$u'9'9';;&&'  	 099+,7!%  IIk2e;  )) 1<01"%55\&1F$0G$D!K!YY{+GN'..0A5L 	w///'2E2EE  	w222W5K5KK  }}Z J.* 	!Lw\!	!
 T)_%%%+T2I
}} 	0, . 	8s   4Y8Yc                    t        |t        j                        sJ |j                  d   }|j                  j                         |d }|dk(  s|syt        |j                         |j                  | ||j                  |      \  }}}	}
}}|	dk7  sJ |dkD  r|j                  |j                        }|
|_
        ||_        ||_        t        |j                  |       \  }}||z
  dz  }||_        ||_        ||_        |xj                   |j                  z  c_        nd}|	d}nC|||	 j                         }||	k7  xr |j#                  d      }|rd	}||v sJ d
|d       |	|z  }	||	|fS )av  Keep as much text as possible from a TextBox in a limited width.

    Try not to overflow but always have some text in ``new_box``.

    Return ``(new_box, skip, preserved_line_break)``. ``skip`` is the number of
    UTF-8 bytes to skip form the start of the TextBox for the next line, or
    ``None`` if all of the text fits.

    Also break on preserved line breaks.

    r  Nr   )NNFr   r   Fr   )r   	   u    u    zGot z> between two lines. Expected nothing or a preserved line break)r{   r   r|   rA   r}   r~   r   r   justification_spacingcopy_with_textr    r   r#   r   rJ   rK   rI   strip)r$   r%   rU   r   r   r  r}   layoutlengthresume_indexr    r#   rI   r5  rT   r6  r`   betweenline_breakss                      r.   r   r   e  s    c5==)))		+&I88??TU#DA~T <Lsyy'?!!=@9FFL% 1z  -	!
 
 &cii9Q#f,1%(&$vl+224|#;s); 	 KKk) K@GJK) 	222rr   c           
         g }t        | |d      \  }}|D cg c]*  }|j                         rdnt        ||d      \  }}|||f, }}}}|rF|D cg c]  \  }}}|j                         s||z
   }}}}|rt        |      }	t        |||	z         }|D ]c  \  }}}|j                         r||j                  z
  }
n1|j                  d   dk(  r||z
  }
n|j                  d   dk(  sJ ||z
  }
t        ||
       e ||fS c c}}}w c c}}}w )zHandle ``vertical-align`` within a :class:`LineBox`.

    Place all boxes vertically assuming that the baseline of ``box``
    is at `y = 0`.

    Return ``(max_y, min_y)``, the maximum and minimum vertical position
    of margin boxes.

    r   )
baseline_yr2   vertical_alignrh   rg   )aligned_subtree_verticalityr   r   r"   rA   translate_subtree)r%   top_bottom_subtreesmax_ymin_ysubtree	sub_max_y	sub_min_ysubtrees_with_min_maxsub_positionshighest_subdys              r.   rH   rH     sd    . Q0LE5 +> >#..0L,,< !Iy 
)Y'> >  2G) )-I%%' 	!) ) m,Ku{23E)> '%I+++B]]+,5"B==!12h>>>"B'2&' %<5>)s   /D Dc                     t        | t        j                        rE| xj                  |z  c_        | j                  d   dv r| j
                  D ]  }t        ||        y y | j                  |       y )NrF  rh   rg   rR  )r{   r   r   r"   rA   rQ   rH  rL   )r%   rR  r   s      r.   rH  rH    sc    #u'"99%&*;; -!%,- <
 	rr   c                     t        | ||      \  }}|| j                  z
  }|| j                         z   }|||k  r|}|||kD  r|}||fS N)inline_box_verticalityrI   r   )r%   rI  rE  rJ  rK  rh   rg   s          r.   rG  rG    s`    )#/BJOLE5
s||
#C3$$&&F}e}%<rr   c                 .   d}d}t        | t        j                  t        j                  f      s||fS | j                  D ]P  }|j                         s"|j                         r|j                  |       6|j                  d   }|dk(  r|}n|dk(  rO| j                  d   t        | j                  d      z  }|||j                         z   dz  z
  }	|	|j                  z   }n|dk(  rF|| j                  z
  | j                  z   | j                  z   | j                  z   }	|	|j                  z   }nu|d	k(  rd|| j                  z
  | j                  z   | j                  z   | j                  z   | j                  z   }
|
|j                         z
  |j                  z   }n|d
v rd}n||z
  }||j                  z
  }	t        j                   t        j"                  t        j$                  f}t        ||      r |j'                  |	|j(                  z
         n|	|_        |d
v r|j                  |       |	|j                         z   }
||	|k  r|	}||
|kD  r|
}t        |t        j                        s+t+        |||      \  }}|||k  r|}|H||kD  sO|}S ||fS )zHandle ``vertical-align`` within an :class:`InlineBox`.

    Place all boxes vertically assuming that the baseline of ``box``
    is at `y = baseline_y`.

    Return ``(max_y, min_y)``, the maximum and minimum vertical position
    of margin boxes.

    NrF  rI   middler  xr   ztext-topztext-bottomrT  r   rU  )r{   r   r   r   rQ   r   r   rO   rA   r   r   rI   rJ   r  r  r#   r   r   r   rL   r"   rX  )r%   rI  rE  rJ  rK  r   rF  child_baseline_yone_exrh   rg   	box_typeschildren_max_ychildren_min_ys                 r.   rX  rX    s    EEcEMM5??;<e| ;'&&(!#**51%56Z')x'YY{+ocii.MMF)<)<)> >!CCC"U^^3z),s~~=''(*-//:C"U^^3}, 3<</#..@**+-0__=?BzzJF%(;(;(==N00  !  *N: /))5+>+>@S@ST	eY'OOsU%5%55O6"E ..  &&u-u**,,=C%KE=FUNEeU__--C*,<.>*NN)nu.D&)nu.D&w;'x %<rr   c                 R   |j                   |k\  ry|j                  d   }|r|j                  d   }|dk(  r|n|}|j                  d   dv }|dv r|dk(  |j                  d	   d
k(  z  rd}nd}|dk(  ry||j                   z
  }|dk(  r|rt        | ||       y|dk(  r|dz  S |dk(  sJ |S )z>Return the line horizontal offset according to ``text-align``.r   text_align_alltext_align_lastr   rt   ru   r   r   r7   r8   r  r  justifycenterr   )r    rA   justify_line)r$   r,   rU   r6   align
align_lastspace_collapseoffsets           r.   rG   rG   4  s     zz_$JJ'(EZZ 12
#v-:ZZ. 3( (N!!VO

; 75 @AEEtzz)F	 $/z~~rr   c                 B    t        |      x}rt        | |||z  d       y y )Nr   )count_expandable_spacesadd_word_spacing)r$   r,   extra_width	nb_spacess       r.   rf  rf  Y  s,     -T22	2$i(?C 	3rr   c                 2   t        | t        j                        r7| j                  j	                  d      | j                  j	                  d      z   S t        | t        j
                  t        j                  f      rt        d | j                  D              S y)z;Count expandable spaces (space and nbsp) for justification.r   r  c              3   2   K   | ]  }t        |        y wrW  )rl  .0r   s     r.   	<genexpr>z*count_expandable_spaces.<locals>.<genexpr>f  s     Le*51L   r   )	r{   r   r|   r}   countr   r   sumrQ   )r%   s    r.   rl  rl  `  sd    #u}}%xx~~c"SXX^^H%===	C%--9	:Ls||LLLrr   c                    t        |t        j                        r||_        |xj                  |z  c_        t        |      }|dkD  rdt        |j                  |j                  | d |j                        }|j                          ||z  }||z  }|xj                  |z  c_
        ||_        |S t        |t        j                  t        j                  f      r}|xj                  |z  c_        |}|j                  }|j                  d   dk(  r|d d d   }|D ]!  }	|	j                         st!        | |	||      }# |xj                  ||z
  z  c_
        |S |j#                  |d       |S )Nr   )r   r<  r7   r8   r9   )r{   r   r|   r<  rC   rl  r   r}   rA   
deactivater    r   r   r   rQ   r   rm  rL   )
r$   r%   r<  	x_advancero  r?  extra_spaceprevious_x_advancerQ   r   s
             r.   rm  rm  k  sV   #u}}%$9!)#+C0	q="#))W&)&?&?AF /);K$III$I%C  
C%--9	:)#&<<99[!U*"~H 	FE&&(,U$99F		F 			Y!333	  	i#rr   c                 F   | j                   D ]  }t        |t        j                        rdt	        |      s ydD ]Q  }t        |j                  d|    dd       s0|j                  d| d   s|j                  d|    j                  sP  y |j                         s y y)	NFr   r   valueborder__widthpadding_T)	rQ   r{   r   r   rE   r   rA   r~  r   )rS   r   r   s      r.   rE   rE     s    !! 
eU__-%e,: !EKK'$(897DIgdV6$:;htf$56<< 	!
 $$&
 rr   c                 J   | j                   d   dv }t        | t        j                        ry|r=t        | t        j                        r#t        | j                  | j                   d         S |r6t        | t        j                        rt        d | j                  D              S y)Nrt   )rv   zpre-wraprx   Fr  c              3   2   K   | ]  }t        |        y wrW  )r  rr  s     r.   rt  z#can_break_inside.<locals>.<genexpr>  s     Eu#E*Eru  )
rA   r{   r   r   r|   r
   r}   r   anyrQ   )r%   	text_wraps     r.   r  r    s{    		-(,NNI#u112	z#u}}5chh		&(9::	z#u7EEEErr   )T)B__doc__r   mathr   cssr   css.computed_valuesr   r   formatting_structurer   r	   text.line_breakr
   r   r   r   r   r   flexr   r   r   r   gridr   leaderr   min_maxr   percentr   r   	preferredr   r   r   replacedr   tabler   r   r/   r!   r>   rF   r?   r   r   r   r   r   r  r
  rD   r   rH   rH  rG  rX  rG   rf  rl  rm  rE   r   rr   r.   <module>r     s    $   ( ? / M M :  1  ! ) @ X X 0 ="@{|&R'&fOd,<0, I I]@DCN1+hQh<3~'T
K\"JD> 	rr   