
    BhY                        S r SSKrSSKJr  SSKJr  SSKJrJr  SSK	J
r
Jr  SSKJrJrJr  S	S
KJrJr  S	SKJr  S	SKJrJr  S	SKJr  S	SKJr  S	SKJr  S	SKJrJ r   S	SK!J"r"J#r#J$r$  S	SK%J&r&  S	SK'J(r(J)r)  S r*S r+S r,S r-S r.S r/S r0S r1\S 5       r2S r3S r4S r5S  r6S,S! jr7S" r8S# r9S$ r:S% r;S& r<S' r=S( r>S) r?S* r@S+ rAg)-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	              #     #    [        X5        Uc  [        USUR                  5        OSUl         [	        XX#UXVXx5	      u  pU	(       a%  [        X	U5        U	R                  U	R                  -   nU	c  gX4v   U
c  gU
nSUl        SnMW  7f)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              J/var/www/html/env/lib/python3.13/site-packages/weasyprint/layout/inline.pyiter_line_boxesr/      s      .sM3C3I3IJ
**JkO ')9:4;;6J<o
! s   BBc	                 h   [        X5      nUS:X  a  g[        XU5      nX!l        U R                  (       a/  [	        XUSS9Ul        [        UR                  U 5      u  Ul        n	OS=Ul        Ul        [        XUSS9u  pnUR                  nU R                  R                  5       n U
=ol        U=ol        UR
                  nX-   nXR                  -  n
/ n/ n/ n/ n/ n[        XU
UX4UUUUUU5      u  nnnnnnUR
                  UR                  sUl        Ul        [        U5      (       a  U(       d	  SUl        GO:[        U U5        [        XUSS9u  nn	n[!        U UUUSL =(       d    US	9nUR                  S
   S:X  a  US-  nUUR
                  -  n[#        U5      u  n n!U!c   eU c   eU!* Ul        U!Ul        U U!-
  Ul        UU!-
  n"SUl        SUl        UR+                  UU"5        UUl        UR                  U::  a  OsUR                  nU R                  n#Xl        [        U UUSS9u  pnUR                  S
   S:X  a  X4X4:H  n$OU
UR
                  -   U4UU-   U4:H  n$U$(       a  U#U l        OGM  UR-                  U5        UR-                  U5        U H  n%SU%R                  R.                  S   ;   a!  U%R+                  SUU%R                  -
  5        MA  U%R+                  UR                  U%R                  -
  UUR                  -   U%R                  -
  5        M     / n&UR                  UR                  -   n'U HF  n(U'U(l        [1        U U(XVXsSS9u  n)n*U&R3                  U)5        U*(       d  M4  U(UU*4U R4                  U)'   MH     U&(       a  U=R6                  [9        U&5      -  sl        UU4$ )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   s&    'w;JZ$W:LMJ#0F(@ *+*.>*%/9+JO ~~--224O
3==03==0 ,)))

 &6z5,~z;L]&,	#y.	k )-

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

"H*40!!!sl#x* %;;**;;%55"12BT+53:/
!!+.%7#0#5: :I $djj0*=#n46IBK KI&9G#G J .)z"({((229==!!!Z+2H2H%HI !!+"8"88T[[(;+A+AAC ) N4'#3 5A]$4$6822 	/0""/1H=JG&&'89 ( ~..?    c                 ,   Uc  SnSnOUR                  5       u  u  p#[        U [        R                  5      (       a  Ub   eU R                  S   nU R
                  R                  5       nU[        U5      :X  a  gUS;   aJ  XRS nU(       a?  UR                  S5      (       a)  US-  nUSS nU(       a  UR                  S5      (       a  M)  U(       a  US0$ S$ [        U [        R                  [        R                  45      (       a  US:X  a  U R                  (       d  g[        U R                  U   U5      nUS:X  a8  US-  nU[        U R                  5      :  a  g[        U R                  U   S5      nU(       d  U(       a  X&0$ S$ Ub
   SU  35       eg)	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>      su    $.$4$4$6! #u}}%%&&&ii.xx CI::<D4??400
ABx 4??400 !&t}/4/#u788A:cll&s||E':OLZQJECLL))!*3<<+>EF#(F==>!8>>rr   c                    / nUn[        U[        R                  [        R                  45      (       ac  UR	                  U5        UR
                  (       d  gUR
                  S   n[        U[        R                  [        R                  45      (       a  Mc  [        U[        R                  5      (       a  UR                  S   S;   d  gUR                  R                  S5      nU(       an  [        U5      [        UR                  5      :X  a  gXCl        [        XSS5      u  pVnUc   eUb   eUR                  UR                  -
  nUR                  Ul        OUR                  nSUl        SUl        UR                  R                  S-  (       a$  UR
                   H  n	U	R                  U* S	S
9  M     U H  n
U
=R                  U-  sl        M     g)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      sp    I
C
S5==%//:
;
;||ll2	 S5==%//:
;
;
 sEMM**IIm$(HHxxs#Hx=CM)+G$B"""~~ii'--/MM	ii	 ,,q0]]EOO|4O@ # +% rr   c                    U(       Gap  U R                   (       Ga^  SUS'   SnU R                   S   n[        U[        R                  5      (       Ga  [	        0 USS9nUR
                  R                  S5      (       aK  [        R                  " U R
                   S3UU R                  U/5      nU/U R                   SS Q7U l         U$ UR                  (       GaI  S	nU(       a3  UR                  5       u  nU(       a  Uu  n	UR                  U	S Ul	        SnUR                  (       a`  UR                  S   n
[        R                  " U
5      nUS
;  a
  U(       a  O-SnX:-  nUR                  SS Ul	        UR                  (       a  M`  UR                  S5      (       Ga  US   S:X  a}  [        R                  " U R
                   S3X R                  / 5      n[        R                  " U R
                   S3UU R                  U5      nU4Ul         U/U R                   Q7U l         O[        R                  " U R
                   S3X R                  / 5      nSUl        [        R                   " U R
                   S3UU R                  / 5      nU4Ul         [        R                  " U R
                   S3UU R                  U5      nU4Ul         U/U R                   Q7U l         ["        R$                  " U5        U(       a'  W(       a   Uu  n	UR'                  5       u  u  pXS-   U00nU$ [        U[        R(                  5      (       a6  U(       a  UR                  5       u  nOSn[+        XHU5      nU(       a  Uu  n	X0nU$ )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?   clll *2:&QeU]]++1*<dLL  ))*:;;"__'~6KK%*
 ", ?cll12.> ?| { "'(2(9(9(;%$'!1%*ZZ%7
%)
jj"'**Q-K*33K@H'EE*!*. /L!&ABEJ jjj  &&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 >< "!O5J#K&M
  u//$.$5$5$7! #' 2); =##6
rr   c           	      D   [        U[        R                  5      (       a2  UR                  5       n[	        X5        UR                  5       Ul        U$ [        U[        R                  5      (       a  UR                  (       aG  UR                  UR                  4n[        XU5        UR                  UR                  UR                  pn[        XX#UXV5      nUR                  (       a  WW	W
sUl	        Ul        Ul        U$ [        S[!        U5      R"                   S35      e)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9((* J 
C--	.	./557G7N7NOOo>*-))S]]CMMiE%*2B) 6;Y	3CIs}cm J +d3i&8&8%99IJKKrr   c                 f   SSK Jn  [        X5        UR                  S:X  a  SUl        UR                  S:X  a  SUl        UR
                  S:X  a  SUl        UR                  S:X  a  SUl        [        XU5        X!l        SUl	        U" X[        * USUUS SS S9
u  n        n[        U5      Ul        U$ )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"s%56NCN/C4J>4	CAq!Q
 )-CLJrr   c                    U R                   (       a  U R                   H  n[        U[        R                  5      (       d  M$  UR                  (       d  M7  UR                  S   R                  (       d  MW  UR                  S   R                  S   nUR
                  s  $    O&U R                  S   S:X  a  [        U SS9nU(       a  U$ U R                  U R                  5       -   $ )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0>>>ennQ&7&@&@&@ %q 1 : :1 =I$---	 "
 
:	)	+&s6M>>C--///rr   c                     UR                   U R                  U R                  -   U R                  -   U R                  -   U R
                  -   U R                  -   -
  nU R                   S:X  a  [        XU5      U l         g g )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!'0GH	 rr   c                 n   [        X5        SSS.n[        U[        R                  5      (       a  X!l        Uc  SnO$UR                  5       u  u  pU=(       d    SnUb   e[        U5      S:H  n[        XX2-
  UUS9u  pnUc  SnOUS0nUR                  (       aS  UR                  S   nUc  UR                  S   nGOUR                  R                  5       SU R                  5       S   nGOS=nnGO[        U[        R                  5      (       aG  UR                  S:X  a  SUl        UR                  S:X  a  SUl        [        XX#XEXgXX5      u  nnnnnnGOV[        U[        R                  5      (       a  [!        XX%UXx5      nX/l        SnSnSnSnGO[        U[        R"                  5      (       a]  X!l        SUl        S	 H(  n['        US
U 35      S:X  d  M  [)        US
U 3S5        M*     [+        X[,        * XVSXxS5	      u  nn    nSnSnSnO[        U[        R.                  5      (       a\  X!l        SUl        S	 H(  n['        US
U 35      S:X  d  M  [)        US
U 3S5        M*     [1        X[,        * XVSXx5      u  nn    nSnSnSnO"[3        S[5        U5      R6                   S35      eUUUUUU4$ )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/.<%,d'/)++ <ItI8888A;L|!hhrl!hhoo/6==?C)--L;	C	)	)??f$COv% C&6:l{',	$)1<	l 
C33	4	4*2B) (	$  	C,,	-	-#6DsgdV,-7wtf-q1 7 '23$
e'0#Aq!  %	C,,	-	-#6DsgdV,-7wtf-q1 7 '23$
e')#Aq!  %+d3i&8&8%99IJKK0, rr   c           
         UR                  5       (       am  Xl        [        U5      nUR                  U5        UR                  UUU45        UR                  S   S:X  a  U	R                  U5        g U
R                  U5        g UR                  5       (       Ga  Xl        [        XUR                  5      nXW-    VVs/ s H   u  nnnUR                  5       (       a  M  UPM"     nnnU(       a  U[        U US   5      -  nUX-
  :  d  U(       a  UR                  U5        g [        XX)U
US S9u  nnU(       a  XBU4U R                  U'   UR                  UUU45        Un[        UR                  5       S5      nXR                  S   ==   U-  ss'   UR                  S   S:X  a%  [        U[        R                  5      (       a  UU-  nOUR                  S   S:X  a  UU-  nU H|  u  nnUR!                  5       (       d  M  UR                  S   S:X  a  UR                  S	   S
:X  d*  UR                  S   S:X  d  MX  UR                  S	   S:X  d  Mm  UR#                  US9  M~     g UR%                  5       (       a@  UR                  S   S   nU R&                  nU R(                  U   U   R                  U5        g g s  snnf )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!!+.{+					%#G4D4J4JK
 )1(C!((C|q&!$$& (C 	 !( !3.r24 4K ++~ !!%()5 0+*/&I _5>**51##UIu$=>E U'')1-BW-."4.{{7#v-c5==11 "$JW%0 -9 2244[[)V3		+.%7[[)W4		+.%7''2'. !. 
				{{:.q1##  .t4;;EB 
Y!(s   <J:J:c                    U(       Ga*  UR                  5       nU(       Ga  UR                  5       u  pnUR                  5       (       a  [        U5      (       d  MB  U(       a
  X;   a  XM   nOS nUR                  UR                  5       -   S-
  nX.R                  :  aB  [        XUR                  UUUXXgUU	5      u  nn      nU(       a  OUS-  nX.R                  :  a  MB  M  U
R                  U5        Uc&  [        U[        R                  5      (       d   e UU0$ U
R                  UUU45        UU0$ U
(       a  U
S   S   S-   S 0$ g )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
  ]  s_     !1 5 5 7#1F1J1J1L.K**,,4DU4K4K!k&G#5#B #'  $$u'9'9';;a?E***9KU-=-=u "2CN!	:#6	?Aq!Q
 #
 *** OO12 !%7777  11 i ?@11 Q!#T** rr   c                    US-  nUSL nUnUn[        U[        R                  [        R                  45      (       d   eUR                  UR
                  -   UR                  -   nUR                  UR                  -   UR                  -   nUn/ n/ nSnS=nnSSS.nSnUR                  S   S:X  a  / nU(       a  SnOUR                  5       u  u  nn[        UR                  US 5       GH  u  nnUU-   nUR                  Ul        UR                  5       (       dL  [!        XUUUUUUU
XxU	UX2U5        UR#                  5       (       a  US-   nUU
;  a  UUR%                  5       -  nM~  U['        UR                  5      S-
  :H  nUn/ n[)        U UUUUXVXxU	UU5      u  n n!n"n#n$n%UR                  S	   S
:X  a  Un&UU%S   -  nO
Un&UU%S   -  nU(       a*  U&(       a#  U!c   UU&-  n[)        U UUUUXVXxU	UU5      u  n n!n"n#n$n%SnU"(       a  SnSn'USL a  SnOUSL a  SnOUR                  S   S;   a  Sn'U'c0  SUU#4;   a  Sn'O%U#S;   a  U#n'O[+        UU#-   UR                  S   5      n'U'(       a  UR-                  U5        / nUc  U#nUR.                  (       a  SnOU$nU c"  [        U[        R0                  5      (       d   eO[        U[        R                  5      (       a  UR3                  UU 45        [        U [        R0                  5      =(       a9    U R4                  =(       a&    [6        R8                  " U R4                  S   5      S:H  n(U R:                  U R%                  5       -   n)U)U:  a$  U((       d  [=        XX4UXxU	XUU5      n*U*(       a  U*n!  OYU)nUR3                  UU U45        U
R-                  U5        U!c  GM  UR-                  U5        UU!0n!  O   UR-                  U5        Sn!UR                  S	   S
:X  a  ['        U5      S:  a}  U V+V,s/ s H   u  n+n,n+U,R                  5       (       d  M  U,PM"     n-n+n,U-S   R:                  nU-SSS2    H3  nUR?                  UUR:                  -
  SS9  UUR%                  5       -  nM5     U!SL n.URA                  U VV,V+s/ s H	  u  nn,n+U,PM     sn+n,n5      n/U/RC                  U(       + U.(       + S9  [        U[        R                  5      (       a~  SU/l"        U/R                  nU/R                  S	   S:X  a  USSS2   nU HI  nUR                  5       (       d  M  UR:                  UR%                  5       -   U/R:                  -
  U/l"          O}   OzUU/l        UR                  S   S:X  a  Sn0OUR                  S	   S:X  a  UOU.n0U0(       a"  U/R                   H  nUR?                  US9  M     UU-
  U/l"        U/R?                  US   SS9  [G        UR                  U 5      u  n1U/l$        UR                  S   U/l%        U1U/RJ                  -
  S-  n2U2U/RL                  -
  U/RN                  -
  U/l(        U2U/RR                  -
  U/RT                  -
  U/l+        U/R                  S   S:X  a  U H  n3[Y        U U3U/XSS9  M     U!b  [[        []        U!5      5      nUU:  a  US0n!UR^                  (       a  SnSnU/U!UUUU4$ s  sn,n+f s  sn+n,nf )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5D>>&&((.uh/-><	1
 !!%*QY".U//11E#cll"3a"77!
O\n!#7H 	G	9i6F
 99[!U*&K%f--E'K%g..E[Y-> {*O"UJ.%';]L KIy)UD:J 
#' 	$KE!KYY}%)::IU++!	-'!	*%'V)<>	 OO,-! L++KKeU]]3333#u}}--$$eY%789emm4 AA$$Y^^B%78D@   '11I4J4J4LLN%.A%<uDV"1B"8=M&O" & 2I'J##UIu$=>23 OO,-	*IG 3J 	()	 yy&3x=1+<-5.-5/!Y**, X 	 . &a(33
%dd+EOO!1!11$  H%,,..J ,
 $F$$.67h*uih79GL&jA#u}}%%##==%."~HE&&(($$u'9'9';;&&'    099+,7!%  IIk2e;  ))<0 *"%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   [.[[c           	         [        U[        R                  5      (       d   eUR                  S   nUR                  R                  5       US nUS:X  d  U(       d  g[        UR                  5       UR                  XUR                  US9u  pxppU	S:w  d   eUS:  a~  UR                  UR                  5      nXl
        Xql        Xl        [        UR                  U 5      u  pX-
  S-  nXl        Xl        Xl        U=R                   UR                  -  sl        OSnU	c  SnOMXhU	 R                  5       nX:g  =(       a    UR#                  S5      nU(       a  S	nUU;   d   S
U< S35       eX-  n	XU4$ )a^  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  sx    c5==))))		+&I88??TU#DA~T <Lsyy'!!=@9FL 1z  -	!
 
 &cii9#,1%(&$l+224#;s); 	 KKk) K@GJK) 	222rr   c                 @   / n[        XSS9u  p#U VVVs/ s H*  nUR                  5       (       a  SO	[        XASS9u  pVXEU4PM,     nnnnU(       aR  U VVVs/ s H!  u  pEnUR                  5       (       a  M  XV-
  PM#     nnnnU(       a  [        U5      n	[        X#U	-   5      nU Hf  u  pEnUR                  5       (       a  X4R                  -
  n
O1UR                  S   S:X  a  X6-
  n
OUR                  S   S:X  d   eX%-
  n
[        XJ5        Mh     X#4$ s  snnnf s  snnnf )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     sE    .Q0LE +>*G#..00L,< !I 
Y'*  >  2G)1F-I%%' "I!1F 	 ) m,K{23E)>%I+++B]]+,5"B==!12h>>>"B'& *? <5>)s   1DD7Dc                     [        U [        R                  5      (       aH  U =R                  U-  sl        U R                  S   S;   a  U R
                   H  n[        X!5        M     g g U R                  US9  g )NrF  rh   rg   rR  )r{   r   r   r"   rA   rQ   rH  rL   )r%   rR  r   s      r.   rH  rH    s_    #u''"99%&*;;!%, & <
 	rr   c                     [        XU5      u  p4X R                  -
  nXPR                  5       -   nUb  XT:  a  UnUb  Xc:  a  UnX44$ N)inline_box_verticalityrI   r   )r%   rI  rE  rJ  rK  rh   rg   s          r.   rG  rG    sQ    )#JOLE
||
#C$$&&F}}<rr   c                 `   SnSn[        U [        R                  [        R                  45      (       d  X44$ U R                   GHe  nUR                  5       (       d(  UR                  5       (       a  UR                  U5        MA  UR                  S   nUS:X  a  UnGOUS:X  aM  U R                  S   [        U R                  S5      -  nX(UR                  5       -   S-  -
  n	XR                  -   nOUS:X  aD  X R                  -
  U R                  -   U R                  -   U R                  -   n	XR                  -   nOuUS	:X  ab  X R                  -
  U R                  -   U R                  -   U R                  -   U R                  -   n
XR                  5       -
  UR                  -   nOUS
;   a  SnOX&-
  nXuR                  -
  n	[        R                   [        R"                  [        R$                  4n[        X[5      (       a  UR'                  XR(                  -
  S9  OXl        US
;   a  UR                  U5        GM  XR                  5       -   n
Ub  X:  a  U	nUb  X:  a  U
n[        U[        R                  5      (       d  GM=  [+        XQU5      u  pUb  X:  a  UnUc  GM[  X:  d  GMc  UnGMh     X44$ )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??;<<|&&((!!#**51%56Z')x'YY{+ocii.MMF)<)<)> >!CCC"^^3z),s~~=''(*-//:C"^^3}, <</#..@**+-0__=?BzzJF%(;(;(==N00  !  *: /))5+>+>@S@ST	e''OOs%5%55O6" ..  &&u-**,,=CKE=FNEeU__---C,<.>*N)n.D&)n.D&w x <rr   c                 ~   UR                   U:  a  gUR                  S   nU(       a  UR                  S   nUS:X  a  UOUnUR                  S   S;   nUS;   a"  US:H  UR                  S	   S
:H  -  (       a  SnOSnUS:X  a  gX!R                   -
  nUS:X  a  U(       a  [        XU5        gUS:X  a  US-  $ US:X  d   eU$ )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zz)F	 /z~~rr   c                 H    [        U5      =n(       a  [        XX#-  S5        g g )Nr   )count_expandable_spacesadd_word_spacing)r$   r,   extra_width	nb_spacess       r.   rf  rf  Y  s(     -T22	2(?C 	3rr   c                 F   [        U [        R                  5      (       a7  U R                  R	                  S5      U R                  R	                  S5      -   $ [        U [        R
                  [        R                  45      (       a  [        S U R                   5       5      $ g)z;Count expandable spaces (space and nbsp) for justification.r   r  c              3   8   #    U  H  n[        U5      v   M     g 7frW  )rl  .0r   s     r.   	<genexpr>*count_expandable_spaces.<locals>.<genexpr>f  s     L|e*511|   r   )	r{   r   r|   r}   countr   r   sumrQ   )r%   s    r.   rl  rl  `  sj    #u}}%%xx~~c"SXX^^H%===	C%--9	:	:Ls||LLLrr   c                    [        U[        R                  5      (       a  X!l        U=R                  U-  sl        [        U5      nUS:  a^  [        UR                  UR                  U S UR                  S9nUR                  5         X$-  nX6-  nU=R                  U-  sl
        XQl        U$ [        U[        R                  [        R                  45      (       a  U=R                  U-  sl        UnUR                  nUR                  S   S:X  a  US S S2   nU H&  n	U	R                  5       (       d  M  [!        X	X#5      nM(     U=R                  X7-
  -  sl
        U$ UR#                  US5        U$ )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  sI   #u}}%%$9!)#+C0	q="#))W&)&?&?AF /;K$III$I%  
C%--9	:	:)#&<<99[!U*"~HE&&((,$9F	  			Y33	  	i#rr   c                    U R                    H  n[        U[        R                  5      (       a{  [	        U5      (       d    gS Ha  n[        UR                  SU 3   SS 5      (       d;  UR                  SU S3   (       d#  UR                  SU 3   R                  (       d  M`      g   M  UR                  5       (       d  M    g   g)	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IgdV6$:;htf$56<<< 	 ;
 $$&& " rr   c                 ~   U R                   S   S;   n[        U [        R                  5      (       a  gU(       aB  [        U [        R                  5      (       a#  [        U R                  U R                   S   5      $ U(       a;  [        U [        R                  5      (       a  [        S U R                   5       5      $ g)Nrt   )rv   zpre-wraprx   Fr  c              3   8   #    U  H  n[        U5      v   M     g 7frW  )r  rr  s     r.   rt  #can_break_inside.<locals>.<genexpr>  s     Eu#E**rv  )
rA   r{   r   r   r|   r
   r}   r   anyrQ   )r%   	text_wraps     r.   r  r    s    		-(,NNI#u1122	z#u}}55chh		&(9::	z#u7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   