Ë
    o]jˆÇ  ã                   óž  — d Z ddl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	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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l(m)Z)m*Z*m+Z+m,Z,m-Z- d„ Z.d„ Z/d„ Z0d„ Z1d„ Z2d„ Z3d„ Z4d„ Z5ed„ «       Z6d„ Z7d„ Z8d„ Z9d „ Z:d!„ Z;d-d"„Z<d#„ Z=d$„ Z>d%„ Z?d&„ Z@d'„ ZAd(„ ZBd)„ ZCd*„ ZDd+„ ZEd,„ ZFy).zLayout for inline-level boxes.é    N)Úinfé   )ÚAnonymousStyleÚPendingÚ
check_math)Ú	INHERITED)ÚboxesÚbuildé   )ÚAbsolutePlaceholderÚabsolute_layout)Úflex_layout)Úavoid_collisionsÚfloat_layout)Úgrid_layout)Úhandle_leader)Úhandle_min_max_width)Ú
percentageÚ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_width)Úcan_break_textÚcharacter_ratioÚcreate_layoutÚsplit_first_lineÚstrutc
              #   ó  K  — t        ||«       |€t        |d|j                  «       nd|_        	 t	        | |||||||||	«
      \  }
}d}	|
r&t        | |
|«       |
j                  |
j                  z   }|
€y|
|f–— |€y|}d|_        d}ŒY­w)z�Return 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Úfirst_line_styleÚlineÚ	resume_ats               úO/var/www/zogu/zoguvenv/lib/python3.12/site-packages/weasyprint/layout/inline.pyÚiter_line_boxesr4      sº   è ø€ ô ˜Ð-Ô.ØÐä˜s MÐ3C×3IÑ3IÕJàˆŒØ
Ü*Ø�S˜* l°JÐ@PØ˜KÐ);Ð=MóO‰ˆˆið  ÐÙÜ˜' 4Ð)9Ô:ØŸ™¨4¯;©;Ñ6ˆJØˆ<ØØ�IˆoÒØÐØØˆ
ØˆŒØ!Ðð ùs   ‚BB
c
                 ój  — t        ||«      }|dk(  ryt        |||«      }||_        | j                  r2t	        | ||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|_        �nÃt        | |«       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nþ|j                  }| j                  }$|| _        t        | ||d¬«      \  }}}|	r‰|j-                  |j.                  «      }%|%xj0                  dz  c_        |%j                  j                  «       |%_        |	j3                  «       D ]  \  }&}'|'|%j                  |&<   Œ |%g|_        t5        |%«       |j                  d
   dk(  r
||f||fk(  }(n||j
                  z   |f||z   |fk(  }(|(r|$| _        n�ŒW|j7                  |«       |j7                  |«       |D ]€  })d|)j                  j8                  d   v r |)j+                  d||)j                  z
  «       Œ>|)j+                  |j                  |)j                  z
  ||j                  z   |)j                  z
  «       Œ‚ g }*|j                  |j                  z   }+|D ]F  },|+|,_        t;        | |,||||d¬«      \  }-}.|*j=                  |-«       |.sŒ3| j?                  |-|,||.«       ŒH |*r|xj.                  tA        |*«      z  c_        ||fS )zöReturn next line from given linebox.

    Return ``(line, resume_at)``, where ``line`` is a new linebox copied from the
    original one, with replaced children.

    This function takes care of excluded floating shapes to avoid collisions.

    Úcontinue©NNT)r+   Ú
first_liner   F)ÚouterN©ÚlastÚ	directionÚrtléÿÿÿÿz::first-lineÚ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Úcopy_with_childrenÚchildrenÚelement_tagÚitemsÚ_adjust_line_heightÚextendÚ	specifiedr   ÚappendÚadd_broken_out_of_flowÚtuple)/r(   Úlineboxr&   r*   r+   r,   r-   r.   r/   r0   Ú_rH   Úavailable_widthÚcandidate_heightrE   Úoriginal_position_xÚoriginal_position_yÚoriginal_widthÚmax_xÚline_placeholdersÚline_absolutesÚ
line_fixedÚwaiting_floatsÚline_childrenr1   r2   Úpreserved_line_breakÚfirst_letterÚlast_letterÚfloat_widthÚnew_position_xÚnew_available_widthÚoffset_xÚbottomÚtopÚoffset_yÚnew_excluded_shapesÚfirst_line_boxÚkeyÚvalueÚ	conditionÚplaceholderÚfloat_childrenÚwaiting_floats_yÚwaiting_floatÚnew_waiting_floatÚwaiting_float_resume_ats/                                                  r3   r%   r%   9   sÓ  € ô ' w°
Ó;€JØ�ZÒØä$ W¨jÐ:LÓM€Jà#€GÔà×Òä0Ø�W¨ÀôFˆŒä! '§-¡-Ó0ÑˆŒ™ð *+Ð*ˆŒ˜œÜ.>Ø�Ð*°%ô/9Ñ+€J�
˜Oð —~‘~Ðà×-Ñ-×2Ñ2Ó4€Oà
Ø3=Ð=Ð˜gÔ0Ø3=Ð=Ð˜gÔ0Ø Ÿ™ˆØ˜_Ñ,ˆØ�g×)Ñ)Ñ)ˆ
àÐØˆØˆ
ØˆØˆô &6Ø�g˜z¨5°,À
Ø˜~¨zÐ;LØ˜]Ð,>Ð@Pó&Rñ	#ˆˆyÐ.°Ø	�kð )-¯
©
°D·K±KÐ%ˆŒ�w”~ä˜dÔ#Ñ,@ØˆDŒKÙä˜w¨Ô-ä1AØ�WÐ.°eô2=Ñ.ˆ˜Ð.äØ�TÐ.Ø˜tÐ#Ò;Ð';ô>ˆð ×!Ñ! +Ñ.°%Ò7Ø˜‰NˆHØ˜Ÿ
™
Ñ"ˆHä*¨4Ó0‰ˆ�ØˆÐˆØÐ!Ð!Ð!Ø˜ˆŒØˆŒØ˜s‘lˆŒØ Ñ#ˆØˆŒØˆÔà�‰�x Ô*ð %ˆŒà�;‰;Ð*Ò*ØØŸ;™;Ðà%×5Ñ5ÐØ"1ˆÔÜ2BØ�TÐ+°5ô3:Ñ/ˆ
�J ñ Ø!×4Ñ4°T·]±]ÓCˆNØ×&Ò&¨.Ñ8Õ&Ø#1×#7Ñ#7×#<Ñ#<Ó#>ˆNÔ Ø.×4Ñ4Ó6ò 2‘
��UØ,1�×$Ñ$ SÒ)ð2à+Ð,ˆDŒMÜ Ô/à×!Ñ! +Ñ.°%Ò7Ø# ZÐ0Ø#Ð%8ð5:ñ :‰Ið $ d§j¡jÑ0°*Ð=Ø# nÑ4Ð6IðBKñ KˆIáØ&9ˆGÔ#Øñ[ ð^ ×Ñ˜.Ô)Ø×Ñ�zÔ"à(ò CˆØ�{×(Ñ(×2Ñ2°9Ñ=Ñ=à×!Ñ! ! Z°+×2HÑ2HÑ%HÕIð ×!Ñ!Ø—‘ +×"8Ñ"8Ñ8Ø˜TŸ[™[Ñ(¨;×+AÑ+AÑAõCðCð €NØ—‘¨¯©Ñ4ÐØ'ò 	)ˆØ#3ˆÔ Ü5AØ�]Ð$4°nØ˜°$ô68Ñ2ÐÐ2ð 	×ÑÐ/Ô0Ú"Ø×*Ñ*Ø! =Ð2BØ'õ)ð	)ñ Ø�Šœ˜~Ó.Ñ.�à�ˆ?Ðó    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)	zŠReturn ``skip_stack`` to start just after removable leading spaces.

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

    Nr   Úwhite_spacer6   ©ÚnormalÚnowrapúpre-lineó    r   zunexpected skip inside )rU   Ú
isinstancer	   ÚTextBoxrF   ÚtextÚencodeÚlenÚ
startswithÚLineBoxÚ	InlineBoxrS   rC   )r)   r+   ÚindexÚnext_skip_stackr€   rˆ   Úresults          r3   rC   rC   Ê   so  € ð ÐØˆØ‰à$.×$4Ñ$4Ó$6Ñ!Ñ ˆ�ä�#”u—}‘}Ô%ØÐ&Ð&Ð&Ø—i‘i Ñ.ˆØ�x‰x�‰Ó ˆØ”C˜“IÒàØÐ:Ñ:Ø˜˜�<ˆDÙ˜4Ÿ?™?¨4Ô0Ø˜‘
�Ø˜A˜B�x�ñ ˜4Ÿ?™?¨4Õ0ñ !&��tˆ}Ð/¨4Ð/ä�#œŸ™¤u§¡Ð7Ô8Ø�AŠ:˜cŸlšlØÜ& s§|¡|°EÑ':¸OÓLˆØ�ZÒØ�Q‰JˆEØœ˜CŸL™LÓ)Ò)Ø!Ü*¨3¯<©<¸Ñ+>ÀÓEˆFÙ#(©F��vˆÐ=¸Ð=àÐÐ>Ð!8¸¸Ð>Ó>ÐØr~   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)zšRemove 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.

    Nr>   r€   r�   ú r   Ú r   T©ÚdxÚignore_floats)r†   r	   rŒ   r�   rY   rS   r‡   rF   rˆ   ÚrstriprŠ   Úsplit_text_boxr$   Úpango_layoutÚfirst_line_directionrQ   )r(   r1   Ú	ancestorsr)   Únew_textÚnew_boxÚresumer]   Úspace_widthÚchildÚancestors              r3   rK   rK   ó   sy  € ð €IØ
€CÜ
�Sœ5Ÿ=™=¬%¯/©/Ð:Ô
;Ø×Ñ˜ÔØ�|Š|ØØ�l‰l˜2Ñˆô	 �Sœ5Ÿ=™=¬%¯/©/Ð:Õ
;ô
 �sœEŸM™MÔ*Ø�I‰I�mÑ$Ð(HÑHØØ�x‰x�‰˜sÓ#€HÙÜˆx‹=œC §¡›MÒ)ØØˆŒÜ+¨G°S¸$ÀÓBÑˆ�˜ØÐ"Ð"Ð"Øˆ~Ðˆ~Ø—i‘i '§-¡-Ñ/ˆØ—M‘Mˆ�	à—i‘iˆØˆŒ	ØˆŒð ×Ñ×,Ñ,¨qÒ0Ø—]‘]ò 	AˆEØ�O‰O ˜|¸4ˆOÕ@ð	Að ò &ˆØ�Š˜+Ñ%Žñ&r~   c                 ó¬  — |�rP| j                   �rCd|d<   d}| j                   d   }t        |t        j                  «      �rÊ| j                  j                  «       }|j                  «       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«      �r|t!        |«      }|d   dk(  r|t        j                  | j                  › d�|| j                  g «      }t        j                  | j                  › d�|| j                  |«      }|f|_         |g| j                   ¢­| _         n²t        j"                  | j                  › d�|| j                  g «      }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   z::first-letterr   NF)ÚPsÚPeÚPiÚPfÚPoTú
ÚfloatÚnone)rS   r†   r	   r‡   rF   rG   rU   rT   Úendswithr�   Úelementrˆ   ÚvaluesÚunicodedataÚcategoryÚlstripr   ÚBlockBoxrŒ   r
   Úprocess_text_transformÚ	ParentBoxrD   )r)   r+   r/   rj   r    Úletter_styleru   rv   Ú
letter_boxÚcharacter_foundÚchild_skip_stackrŽ   Únext_letterr±   Úchildren_styleÚtext_boxÚline_boxÚchild_indexÚgrandchild_skip_stacks                      r3   rD   rD   &  sZ  € â˜cŸl›lð *2Ð˜:Ñ&àˆØ—‘˜Q‘ˆÜ�eœUŸ]™]Õ+ØŸ9™9Ÿ>™>Ó+ˆLØ0×6Ñ6Ó8ò *‘
��UØ$)�˜SÒ!ð*à× Ñ ×)Ñ)Ð*:Ô;Ü"Ÿ_™_Ø—‘Ð' ~Ð6¸Ø—K‘K % ó*�
ð ",Ð ?¨c¯l©l¸1¸2Ð.>Ñ ?�”ðx Ððw —“Ø"'�ÙØ(2×(9Ñ(9Ó(;Ñ%Ð$Ù'Ø!1™˜Ø%*§Z¡Z°°Ð%7˜œ
Ø%)˜
Ø—j’jØ"'§*¡*¨Q¡-�KÜ*×3Ñ3°KÓ@�HØÐ'EÑEÙ*Ø!Ø*.˜Ø  KÑ/�LØ!&§¡¨A¨B �E”Jð —j“jð  ×&Ñ& tÕ,ô &4°LÓ%A�NØ# GÑ,°Ò6Ü%*§_¡_Ø"Ÿ™Ð/¨~Ð>Ø(¨#¯+©+°ró&;˜
ô $)§=¡=Ø"Ÿ™Ð/¨~Ð>ÀØŸK™K¨ó$7˜ð 08¨k˜
Ô+Ø(2Ð'B°S·\±\Ñ'B˜�ä%*§^¡^Ø"Ÿ™Ð/¨~Ð>Ø(¨#¯+©+°ró&;˜
ô $)§=¡=Ø"Ÿ™Ð/¨~Ð>ÀØŸK™K¨ó$-˜ð 08¨k˜
Ô+Ü#(§=¡=Ø"Ÿ™Ð/¨~Ð>ÀØŸK™K¨ó$7˜ð .6¨K˜Ô)Ø(2Ð'B°S·\±\Ñ'B˜œÜ×0Ñ0°Ô:Ù!Ñ&6Ø!+™˜Ø@P×@VÑ@VÓ@XÑ=Ñ<˜Ð&;Ø&+¨k¸A©oÐ?TÐ-UÐ%V˜
ð Ðô ˜œuŸ™Ô/ÙØ$.×$5Ñ$5Ó$7Ñ!Ñ à#'Ð Ü2ØÐ'Ð);ó =ÐáØ#‘�Ø#Ð%5Ð6�
ØÐr~   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	   ÚReplacedBoxrG   r   Úmargin_heightrN   ÚInlineBlockBoxÚis_table_wrapperr$   r'   r   Ú	min_widthÚ	max_widthÚinline_block_box_layoutÚ	TypeErrorÚtypeÚ__name__)r(   r)   rH   r+   r,   r-   r.   Úcontaining_sizer$   rÇ   rÈ   s              r3   Ú
atomic_boxrÎ   w  sý   € ô �#”u×(Ñ(Ô)Ø�h‰h‹jˆÜ" 3Ð(8Ô9Ø×(Ñ(Ó*ˆŒð €Jô 
�Cœ×-Ñ-Ô	.Ø×ÒØ/×5Ñ5Ð7G×7NÑ7NÐOˆOÜ ¨¨oÔ>Ø*-¯)©)°S·]±]ÀCÇMÁM˜i�9ˆEÜ%Ø�S˜* jÐ2BØ˜Kó)ˆð ×ÒØ6;¸YÈ	Ð3ˆCŒI�s”} c¤mð €Jô ˜+¤d¨3£i×&8Ñ&8Ð%9Ð9IÐJÓKÐKr~   c                 óp  — 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 dd ¬«      \  }}}}}}t        |«      |_        |S )Nr   )Úblock_container_layoutÚautor   TF)
r*   r+   Úpage_is_emptyr-   r.   Úadjoining_marginsr/   r0   ÚdiscardÚ	max_lines)ÚblockrÐ   r   Úmargin_leftÚmargin_rightrO   rP   Úinline_block_widthrH   r&   r   Úinline_block_baselinerN   )	r(   r)   rH   r+   r,   r-   r.   rÐ   r]   s	            r3   rÉ   rÉ   �  sÉ   € å-ä˜Ð-Ô.ð ‡�˜&Ò ØˆŒØ
×Ñ˜6Ò!ØˆÔà
‡~�~˜ÒØˆŒØ
×Ñ˜FÒ"ØˆÔä�s˜GÐ%5Ô6à€C„NØ€C„NÙ/Ø�¤C 4°JÈdØ%°;ÐRVØ°$ÀÐQUôWÑ€CˆˆAˆq�!�Qô )¨Ó-€C„LØ€Jr~   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 )z¼Return 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ÚvisibleTr:   )
rÆ   rS   r†   r	   ÚTableBoxrN   rF   r   r&   rÄ   )r)   r    Ú	first_rowr�   s       r3   rÚ   rÚ   ª  sª   € ð ×Òà—\‘\ò 	.ˆEÜ˜%¤§¡Õ0Ø—>“> e§n¡n°QÑ&7×&@Ó&@Ø %§¡¨qÑ 1× :Ñ :¸1Ñ =�IØ$×-Ñ-Ò-ñ		.ð
 
�‰�:Ñ	 )Ò	+Ü& s°Ô6ˆÙØˆMØ�>‰>˜C×-Ñ-Ó/Ñ/Ð/r~   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       r3   rÙ   rÙ   À  s�   € à.×4Ñ4Ø�‰˜#×*Ñ*Ñ*Ø×Ññ	Ø #× 6Ñ 6ñ	7à×Ññ	à×,Ñ,ñ	-ñ.Ðð ‡y�y�FÒÜ! '¨3Ð0GÓHˆ�	ð r~   c                 ó2  — |rt|j                  «       }|j                  j                  «       |_        |j                  «       D ]  \  }}|t        v sŒ||j                  |<   Œ t	        j
                  |«       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   }�n¸dx}}�n²t        |t        j                   «      rM|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 ]%  }t1        |d
|› �«      dk(  sŒt3        |d
|› �d«       Œ' t5        | |t6         ||d||d«	      \  }}}}}d}d}d}n˜t        |t        j8                  «      r\||_
        d|_        d	D ]%  }t1        |d
|› �«      dk(  sŒt3        |d
|› �d«       Œ' t;        | |t6         ||d||«      \  }}}}}d}d}d}n"t=        dt?        |«      j@                  › 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 respecting ``max_x``, if possible (may overflow is no split is possible.)

    r   ©ÚleftÚrightN©Úis_line_startr>   rÑ   Fu   âº€©rq   ré   rp   rè   Úmargin_rÁ   rÂ   )!rG   rF   rU   r   r
   r´   r   r†   r	   r‡   rH   rŠ   r˜   rˆ   r‰   Údecoder�   r×   rØ   rI   ÚAtomicInlineLevelBoxrÎ   ÚInlineFlexBoxr&   ÚgetattrÚsetattrr   r   ÚInlineGridBoxr   rÊ   rË   rÌ   )r(   r)   rH   rc   r*   r+   r,   r-   r.   rd   rg   rh   r/   r0   ru   rv   Úfloat_widthsÚskiprë   r�   ri   r2   rj   rk   Úsider]   s                             r3   Úsplit_inline_levelr÷   Ê  s‡  € ñ Ø�h‰h‹jˆØ—I‘I—N‘NÓ$ˆŒ	Ø*×0Ñ0Ó2ò 	'‰JˆC�Ø”iÒØ!&�—	‘	˜#’ð	'ô 	×$Ñ$ SÔ)Ü˜Ð-Ô.Ø¨Ñ*€LÜ�#”u—}‘}Ô%Ø#ˆŒØÐØ‰Dà",×"2Ñ"2Ó"4ÑÑˆT�:Ø’9˜1ˆDØÐ%Ð%Ð%ä˜MÓ*¨aÑ/ˆÜ.<Ø�S˜% *Ñ,¨dØ'ô/)Ñ+ˆ�Ð+ð ˆ<Ø‰Ià˜t˜ˆIØ�8Š8ØŸ8™8 A™;ˆLØˆ|Ø!Ÿh™h r™l’à!Ÿh™hŸo™oÓ/°°Ð6×=Ñ=Ó?ÀÑC’à)-Ð-ˆLš;Ü	�CœŸ™Ô	)Ø�?‰?˜fÒ$ØˆCŒOØ×Ñ˜vÒ%Ø ˆCÔä&6Ø�c˜: u¨l¸JØ˜~¨{Ð<MØ˜]Ð,>Ð@Pó'Rñ	$ˆ�)Ð1°<Ø	’lô 
�Cœ×3Ñ3Ô	4ÜØ�S˜* jÐ2BØ˜Kó)ˆð (ˆÔØˆ	Ø$Ðð  ˆØŠÜ	�Cœ×,Ñ,Ô	-Ø#ˆŒØˆŒØ6ò 	2ˆDÜ�s˜g d VÐ,Ó-°Ó7Ü˜˜w t fÐ-¨qÕ1ð	2ô '2Ø�Sœ3˜$ 
Ð,<¸eØ˜K¨ó'0Ñ#ˆ�˜A˜q !ð  %ÐØˆØ‰Ü	�Cœ×,Ñ,Ô	-Ø#ˆŒØˆŒØ6ò 	2ˆDÜ�s˜g d VÐ,Ó-°Ó7Ü˜˜w t fÐ-¨qÕ1ð	2ô '2Ø�Sœ3˜$ 
Ð,<¸eØ˜Kó')Ñ#ˆ�˜A˜q !ð  %ÐØˆØ‰ä˜+¤d¨3£i×&8Ñ&8Ð%9Ð9IÐJÓKÐKà�Ð0°,ÀØðð r~   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| j                  ||||«       |j                  |||f«       |}t        |j                  «       d«      }||j                  d   xx   |z  cc<   |j                  d   dk(  }|j                  d   dk(  }|j                  d	   d
k(  r)|j                  d   dk(  rd}|j                  d   dk(  r+d}n(|j                  d   dk(  rd}|j                  d   dk(  rd}|r t        |t        j                  «      r||z  }n|r||z  }|D ]Y  \  }}|j!                  «       sŒ|xr |j                  d	   d
k(  xs |xr |j                  d	   dk(  }|sŒH|j#                  |¬«       Œ[ y |j%                  «       r@|j                  d   d   }| j&                  }| j(                  |   |   j                  |«       y y c c}}w )Nr¤   Úabsoluter>   rB   r   r«   rè   ré   r<   r?   zinline-startTz
inline-endr=   ©r•   r   )Úis_absolutely_positionedrH   r   rY   rF   Ú
is_floatedr   r$   r   r   rZ   ÚmaxÚmargin_widthr†   r	   rŒ   Úis_in_normal_flowrQ   Ú
is_runningÚcurrent_pageÚrunning_elements)r(   r)   r,   rŽ   r    rS   rh   Úwaiting_childrenrg   r-   r.   rd   rô   rc   rH   r*   rx   rl   r]   Úchild_Únon_floating_childrenÚ	new_childÚfloat_resume_atr•   Ú
float_leftÚfloat_rightÚ	old_childÚfloat_alignÚrunning_nameÚpages                                 r3   Ú_out_of_flow_layoutr  /  s  € ð
 ×%Ñ%Ô'Ø%ˆÔÜ)¨%Ó0ˆØ× Ñ  Ô-Ø×Ñ ¨°UÐ ;Ô<Ø�;‰;�zÑ" jÒ0Ø×!Ñ! +Õ.à×Ñ˜{Õ+à	×	Ñ	Õ	Ø%ˆÔÜ# G¨UÐ4D×4JÑ4JÓKˆð
 )1Ð3CÑ(C÷!(Ù#�q˜& !Ø×$Ñ$Ô&ò ð!(Ðñ !(ñ !ØÔ3ØÐ.¨rÑ2ó4ñ 4ˆKð ˜ Ñ+Ò+©~ð ×!Ñ! %Õ(ä)5Ø˜Ð 0°.À+Ø¨ô*/Ñ&ˆI�ñ Ø×.Ñ.Ø˜5Ð"2°OôEà×#Ñ# U¨I°uÐ$=Ô>ØˆEô �U×'Ñ'Ó)¨1Ó-ˆBØ˜Ÿ™ WÑ-Ó.°"Ñ4Ó.àŸ™ WÑ-°Ñ7ˆJØŸ+™+ gÑ.°'Ñ9ˆKØ�y‰y˜Ñ%¨Ò.Ø—;‘;˜wÑ'¨>Ò9Ø!%�JØ—;‘;˜wÑ'¨<Ò7Ø"&‘Kà—;‘;˜wÑ'¨>Ò9Ø"&�KØ—;‘;˜wÑ'¨<Ò7Ø!%�JáÜ˜c¤5§=¡=Ô1ð  "Ñ$‘JÙà˜‘�Ø -ò /‘��9Ø ×2Ñ2Ô4ØàÒC C§I¡I¨kÑ$:¸eÑ$Cò FØ ÒD S§Y¡Y¨{Ñ%;¸uÑ%Dð ò Ø×'Ñ'¨2Ð'Õ.ñ/ð 
×	Ñ	Ô	Ø—{‘{ :Ñ.¨qÑ1ˆØ×#Ñ#ˆØ× Ñ  Ñ.¨tÑ4×;Ñ;¸EÕBð 
ùóu!(s   Â5Kc                 ó@  — |�r|j                  «       }|rú|j                  «       \  }}}|j                  «       rt        |«      sŒ2|r
||v r||   }nd }|j                  |j                  «       z   dz
  }||j                  kD  rAt        | ||j                  |||||||||	||«      \  }}}}}}|rn|dz  }||j                  kD  rŒAŒ±|
j                  |«       |€ t        |t        j                  «      sJ ‚||iS |
j                  |||f«       ||iS |
r|
d   d   dz   d iS y )Nr   r>   r   )rG   Úpoprÿ   Úcan_break_insiderH   rþ   r÷   rW   r†   r	   r‡   rY   )r(   r)   rc   r*   Úinitial_skip_stackr-   r.   rd   rg   rh   rS   r  r/   r0   Úwaiting_children_copyr¾   r    Úoriginal_childr¹   r  Úchild_resume_atr]   s                         r3   Ú_break_waiting_childrenr  „  so  € ò ð !1× 5Ñ 5Ó 7ÐÙ#Ø1F×1JÑ1JÓ1LÑ.ˆK˜ Ø×*Ñ*Ô,Ô4DÀUÔ4KØá! kÐ5GÑ&GØ#5°kÑ#BÑ à#'Ð ð ×$Ñ$ u×'9Ñ'9Ó';Ñ;¸aÑ?ˆEØ˜%×*Ñ*Ò*Ü9KØ˜^¨U×-=Ñ-=¸uØ Ð"2°C¸ØÐ!2°NØ!Ð#5Ð7Gó	:IÑ6�	˜?¨A¨q°!°Qñ
 #ØØ˜‘
�ð ˜%×*Ñ*Ó*ð à�O‰OÐ1Ô2ØÐ ä! %¬¯©Ô7Ð7Ð7ð   Ð1Ð1ð —‘ ¨i¸Ð ?Ô@à Ð1Ð1áð ˜‘˜Q‘ !Ñ# TÐ*Ð*ð r~   c                 ó  — t        | j                  «      \  }| _        | j                  d   | _        || j                  z
  dz  }|| j                  z
  | j
                  z
  | _        || j                  z
  | j                  z
  | _	        y)z“Set margins to the half leading to respect line height.

    Also compensate for borders and padding, we want margin_height() == line_height.

    Ú	font_sizer   N)
r!   rF   rN   r'   Úborder_top_widthÚpadding_toprO   Úborder_bottom_widthÚpadding_bottomrP   )r)   Úline_heightÚhalf_leadings      r3   rV   rV   ¸  su   € ô !& c§i¡iÓ 0Ñ€K�”Ø—‘˜;Ñ'€C„JØ #§*¡*Ñ,°Ñ1€LØ! C×$8Ñ$8Ñ8¸3¿?¹?ÑJ€C„NØ$ s×'>Ñ'>Ñ>À×ASÑASÑS€CÕr~   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)        | ||| ||||||	|!|||«      \  }"}#}$}%}&}'t+        |d   |'d   «      |d<   t+        |d   |'d   «      |d<   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 }|€|%}|j0                  rd}n|&}|"€t        |t        j2                  «      s’J ‚t        |t        j                  «      r|j5                  ||"f«       |"j6                  |"j%                  «       z   }*|*t9        | |"«      z
  |kD  rt;        | |||||||	|
|||||«      }+|+r|+}# nV|*}|j5                  ||"|f«       |
j/                  |!«       |#€�Œq|j/                  |«       ||#i}# n |j/                  |«       d}#|j                  d	   d
k(  r‚t'        |«      dkD  rt|D �,�-cg c]  \  },}-},|-j                  «       r|-‘Œ }.},}-|.d   j6                  }|.ddd…   D ]5  }|j=                  ||j6                  z
  d¬«       ||j%                  «       z  }Œ7 |#du }/|j?                  |D ��-�,cg c]  \  }}-},|-‘Œ
 c},}-}«      }0|0jA                  | |/ ¬«       t        |t        j                  «      rvd|0_!        |0j                  }|0j                  d	   dk(  r|ddd…   }|D ]C  }|j                  «       sŒ|j6                  |j%                  «       z   |0j6                  z
  |0_!         ny nw||0_        |j                  d   dk(  rd}1n|j                  d	   dk(  r|n|/}1|1r#|0j                  D ]  }|j=                  |¬«       Œ ||z
  |0_!        |0j=                  |d   d¬«       tE        |0«       |0j                  d   dk(  r|D ]  }2tG        | |2|0||d¬«       Œ |#�tI        tK        |#«      «      }||k  r|di}#|jL                  rd}d}|0|#||||fS c c}-},w c c},}-}w )aš  Fit as much content as possible from an inline 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
    respecting ``max_x``, if possible (may overflow is no split is possible.)

    This is the recursive step that loops over the children of the box; base steps of
    recursion are handled by ``split_inline_level()``.

    In this phase, excluded floating shapes are ignored.

    g0¸D   ð?NFr   rç   r¤   Úrelativer   r<   r=   rè   ré   Tr’   õ   Â r€   )Úprerƒ   )TFÚlangr>   r”   )ÚstartÚendr?   Úbox_decoration_breakÚclonerú   rB   )'r†   r	   rŒ   r�   rã   r×   rá   rä   rØ   râ   rF   rU   Ú	enumeraterS   r&   rÿ   r  rü   rþ   rŠ   r÷   rý   r   rW   Útrailing_collapsible_spacer‡   rY   rH   r   r  rQ   rR   Úremove_decorationr$   rV   r   ÚnextÚiterÚ	is_leader)3r(   r)   rH   rc   r*   r+   r,   r-   r.   rd   rg   rh   r/   r0   Úis_startÚinitial_position_xr  Úleft_spacingÚright_spacingÚcontent_box_leftrS   r  ri   rj   rk   rô   Úfloat_resume_indexrõ   Úir    rŽ   Úis_last_childr^   Úchild_waiting_floatsr  r2   Ú	preservedÚfirstr;   Únew_float_widthsÚend_spacingÚ	can_breakrm   Úprevious_resume_atr]   Ú	box_childÚin_flow_childrenÚis_endr�   Útranslation_neededÚabsolute_boxs3                                                      r3   rI   rI   Å  s3  € ð4 
ˆXÑ€Eà˜TÐ!€HØ#ÐØ#ÐÜ�cœEŸM™M¬5¯?©?Ð;Ô<Ð<Ð<à×Ñ˜3Ÿ?™?Ñ*¨S×-BÑ-BÑBð ð 	×Ñ˜C×,Ñ,Ñ,¨s×/EÑ/EÑEð à!Ðà€HØÐØ ÐØ!%Ð%€L�;Ø¨Ñ*€LØÐà
‡y�y�Ñ 
Ò*ØˆáØ‰à(×.Ñ.Ó0ÑÑˆˆzä˜cŸl™l¨4¨5Ð1Ó2ó k‰ˆˆ5Ø�D‘ˆØŸ>™>ˆÔà×&Ñ&Ô(ÜØ˜Ð.°°u¸hØÐ/°Ø Ð->ÀØ�z <ô	1ð
 ×ÑÔ!Ø%*¨Q¡YÐ"Ø Ñ.Ø˜U×/Ñ/Ó1Ñ1�EØà¤# c§l¡lÓ"3°aÑ"7Ñ7ˆØˆØ!ÐäØ˜ 
¨O¸\ØÐ,¨n¸kØ!Ð#7¸Ø"Ð$4ó	6ñ 	Gˆ	�9˜i¨°Ð6Fð �9‰9�[Ñ! UÒ*Ø&ˆKØÐ% fÑ-Ñ-‰Eà'ˆKØÐ% gÑ.Ñ.ˆEÙ™[¨YÐ->ð ˜{Ñ*ˆOä"Ø˜U J°ÀØÐ 0°.À+Ø%Ð';¸]Ø&Ð(8ó	:ñ KˆI�y )¨U°DÐ:Jô  # <°Ñ#7Ð9IÈ&Ñ9QÓRˆ�VÑÜ # L°Ñ$9Ð;KÈGÑ;TÓ Uˆ�WÑàˆ
ÙØ#'Ð àˆ	Ø˜$ÑØ‰KØ˜EÑ!Ø‰KØ�Y‰Y�}Ñ%Ð):Ñ:ØˆIØÐØ˜ UÐ+Ñ+Ø!‘	Ø˜-Ñ'Ø!‘	ä*Ø %Ñ'¨¯©°VÑ)<ó>�	ñ Ø�O‰OÐ,Ô-Ø!ÐàÐØ ˆLØ×+Ò+Ø‰KàˆKàÐä˜e¤U§]¡]Ô3Ð3Ð3ô ˜#œuŸ}™}Ô-Ø×$Ñ$ e¨YÐ%7Ô8ð '×1Ñ1°I×4JÑ4JÓ4LÑLˆNØÔ 8¸À)Ó LÑLÈuÒTä%<ØÐ-¨u°lÐDVØ" KÐ1BÀNØ! 8Ð-=Ð?QØ$ó	&&Ð"ñ
 &Ø 2�IÙà'ˆJØ×#Ñ# U¨I°uÐ$=Ô>à×ÑÐ2Ô3ØÒ Ø�O‰OÐ,Ô-Ø 	Ð*ˆIÙðQkðT 	�‰Ð(Ô)Øˆ	ð ‡y�y�Ñ Ò&¬3¨x«=¸1Ò+<à-5÷.Ù)˜!˜Y¨Ø×*Ñ*Ô,ò ð.Ðñ .ð & aÑ(×3Ñ3ˆ
Ø%¡d¨ dÑ+ò 	/ˆEØ�O‰OØ ×!1Ñ!1Ñ1À$ð ô Hà˜%×,Ñ,Ó.Ñ.‰Jð	/ð
 ˜$Ð€FØ×$Ñ$Ø.6×7Ð7Ñ*�u˜i¨ŠÔ7ó9€Gà×Ñ¨ L¸&°jÐÔAÜ�#”u—}‘}Ô%àˆŒØ×#Ñ#ˆØ�=‰=˜Ñ%¨Ò.Ø¡ " ‘~ˆHØò 	ˆEØ×&Ñ&Õ(à×$Ñ$ u×'9Ñ'9Ó';Ñ;Ø×&Ñ&ñ'ð ”ñ ñ	ð 0ˆÔØ�9‰9Ð+Ñ,°Ò7Ø!%Ñð  ŸI™I kÑ2°eÒ;‘Àð áØ ×)Ñ)ò 1�Ø—‘ <�Õ0ð1à"Ð%5Ñ5ˆŒØ×Ñ˜\¨&Ñ1ÀÐÔFä˜Ô à‡}�}�ZÑ  JÒ.Ø*ò 	!ˆLÜØ˜ w°¸\Øö!ð	!ð
 ÐÜ”T˜)“_Ó%ˆØÐ%Ò%Ø+¨TÐ2ˆIà
‡}‚}ØˆØˆð 	�Ð0°,ÀØðð ùóo.ùô 	8s   Î WÐ$W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‡   rF   rˆ   r‰   r    rî   Újustification_spacingÚcopy_with_textr$   r™   r'   r!   rO   rP   rN   Ústrip)r(   r)   r^   rõ   rë   r  rˆ   ÚlayoutÚlengthÚresume_indexr$   r'   rN   r  r]   r  ri   ÚbetweenÚline_breakss                      r3   r˜   r˜   ¥  s“  € ô �cœ5Ÿ=™=Ô)Ð)Ð)Ø—	‘	˜+Ñ&€IØ�8‰8�?‰?Ó˜T˜UÐ#€DØ�A‚~™TØ Ü<LØ�‰‹�s—y‘y '¨?Ø×!Ñ!°ô=@Ñ9€FˆF�L %¨°ð ˜1ÒÐÐà�‚zØ× Ñ  §¡Ó-ˆØˆŒ	Ø!ˆÔð
 ˆŒ
ô ˜sŸy™yÓ)‰ˆ�QØ# fÑ,°Ñ1ˆØ%ˆŒØ(ˆÔàˆŒà�Š˜Ÿ™Ñ&ŽàˆàÐØ$Ñà�v˜lÐ+×2Ñ2Ó4ˆà�|Ñ#Ò;¨¯©°sÓ);ð 	áð KˆKØ˜kÑ)ñ Kâ@GðJóKÐ)ð 	˜Ñˆà�Ð2Ð2Ð2r~   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 )zòHandle ``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_yr7   Úvertical_alignrq   rp   )Úaligned_subtree_verticalityrü   rý   r&   rF   Ú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              r3   rM   rM   ä  sd  € ð ÐÜ.ØÐ ¨Qô0�L€Eˆ5ð +÷>ð >àà#×.Ñ.Ô0‰LÜ,ØÐ,¸ô<ñ !ˆI�yð 
�)˜YÒ'ð>Ðò >ñ ð 2G÷)ð )á-�˜ IØ×%Ñ%Ô'ð ˜	Ó!ð)ˆò )ñ Ü˜mÓ,ˆKÜ˜˜u {Ñ2Ó3ˆEà)>ò 'Ñ%ˆ�˜IØ×ÑÔØ˜×+Ñ+Ñ+‰BØ�]‰]Ð+Ñ,°Ò5Ø˜Ñ"‰Bà—=‘=Ð!1Ñ2°hÒ>Ð>Ð>Ø˜Ñ"ˆ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 )NrP  ©rq   rp   ©r\  )r†   r	   r�   r&   rF   rS   rR  rQ   )r)   r\  r    s      r3   rR  rR    sc   € Ü�#”u—‘Ô'Ø�Š˜"Ñ�Ø�9‰9Ð%Ñ&Ð*;Ñ;ØŸ™ò -�Ü! %¨Õ,ñ-ð <ð
 	�‰˜ˆÕr~   c                 ó’   — t        | ||«      \  }}|| j                  z
  }|| j                  «       z   }|�||k  r|}|�||kD  r|}||fS ©N)Úinline_box_verticalityrN   rÄ   )r)   rS  rO  rT  rU  rq   rp   s          r3   rQ  rQ    s`   € Ü)¨#Ð/BÀJÓO�L€Eˆ5à
�s—|‘|Ñ
#€CØ�3×$Ñ$Ó&Ñ&€FØ€}˜˜ešØˆØ€}˜ šØˆà�%ˆ<Ðr~   c                 óÌ  — d}d}t        | t        j                  t        j                  f«      s||fS | j                  D �]Ÿ  }|j                  «       s"|j                  «       r|j                  |«       Œ6|j                  d   }|dk(  r|}�nc|dk(  rP| 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   }nÃ|d	k(  rd|| j                  z
  | j                  z   | j                  z   | j                  z   | j                  z   }
|
|j                  «       z
  |j                  z   }nZ|d
v rd}nSt        |t         «      st#        |«      r3t%        | j                  «      \  }}|t'        || j                  |«      z
  }n||z
  }||j                  z
  }	t        j(                  t        j*                  t        j,                  f}t        ||«      r |j/                  |	|j0                  z
  ¬«       n|	|_        |d
v r|j                  |«       �Œ9|	|j                  «       z   }
|�|	|k  r|	}|�|
|kD  r|
}t        |t        j                  «      s�Œzt3        |||«      \  }}|�||k  r|}|€�Œ—||kD  s�Œž|}�Œ¢ ||fS )zþHandle ``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.

    NrP  rN   Úmiddler  Úexr   ztext-topztext-bottomr^  r   r_  )r†   r	   rŒ   r�   rS   rÿ   rü   rY   rF   r   rÄ   rN   rO   r  r  r'   r   r   r!   r   rÅ   rð   ró   rQ   r&   rb  )r)   rS  rO  rT  rU  r    rP  Úchild_baseline_yÚone_exrq   rp   r'   r]   Ú	box_typesÚchildren_max_yÚchildren_min_ys                   r3   rb  rb  &  så  € ð €EØ€EÜ�cœEŸM™M¬5¯?©?Ð;Ô<Ø�eˆ|Ðà—‘ó ?'ˆØ×&Ñ&Ô(Ø×ÑÔ!Ø#×*Ñ*¨5Ô1ØØŸ™Ð%5Ñ6ˆØ˜ZÒ'Ø)ÒØ˜xÒ'Ø—Y‘Y˜{Ñ+¬o¸c¿i¹iÈÓ.NÑNˆFØ ¨×)<Ñ)<Ó)>Ñ >À!ÑCÑCˆCØ" U§^¡^Ñ3ÒØ˜zÒ)à §¡Ñ,¨s¯~©~Ñ=Ø×'Ñ'ñ(Ø*-¯/©/ñ:ˆCà" U§^¡^Ñ3ÑØ˜}Ò,à  3§<¡<Ñ/°#·.±.Ñ@Ø×*Ñ*ñ+Ø-0¯_©_ñ=Ø?B¿z¹zñJˆFà%¨×(;Ñ(;Ó(=Ñ=ÀÇÁÑNÑØÐ0Ñ0ð  !ÑÜ˜¬Ô0´J¸~Ô4NÜ˜cŸi™iÓ(‰IˆF�AØ)¬JØ §	¡	¨6ó-3ñ  3Ñð
  *¨NÑ:Ðð  §¡Ñ/ˆÜ×)Ñ)¬5×+>Ñ+>Ä×@SÑ@SÐTˆ	Ü�e˜YÔ'à�O‰O˜s U×%5Ñ%5Ñ5ˆOÕ6à"ˆEÔð Ð.Ñ.ð  ×&Ñ& uÔ-Ùà�u×*Ñ*Ó,Ñ,ˆØˆ=˜C %šKØˆEØˆ=˜F UšNØˆEÜ�eœUŸ_™_Ö-Ü-CØÐ*Ð,<ó.>Ñ*ˆN˜NàÐ)¨n¸uÒ.DØ&�ØÒ)¨n¸uÔ.DØ&’ð?'ð@ �%ˆ<Ðr~   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Ñ   r€   r�   rç   rè   r<   r=   r$  r%  ÚjustifyÚcenterr   )r$   rF   Újustify_line)r(   r1   r^   r;   ÚalignÚ
align_lastÚspace_collapseÚoffsets           r3   rL   rL   x  sß   € ð ‡z�z�_Ò$Øà�J‰JÐ'Ñ(€EÙØ—Z‘ZÐ 1Ñ2ˆ
Ø# vÒ-‘°:ˆØ—Z‘Z Ñ.ð 3(ð (€NàÐ!Ñ!Ø�V‰O §
¡
¨;Ñ 7¸5Ñ @ÒAØ‰EàˆEØ�ÒØØ˜tŸz™zÑ)€FØ�	ÒÙô ˜ $¨Ô/ØØ�ÒØ˜‰zÐà˜Š~Ðˆ~Øˆr~   c                 óB   — t        |«      x}rt        | |||z  d«       y y )Nr   )Úcount_expandable_spacesÚadd_word_spacing)r(   r1   Úextra_widthÚ	nb_spacess       r3   rp  rp  �  s,   € ô -¨TÓ2Ð2ˆ	Ð2Ü˜ $¨°iÑ(?ÀÕCð 	3r~   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ra  )rv  ©Ú.0r    s     r3   ú	<genexpr>z*count_expandable_spaces.<locals>.<genexpr>ª  s   è ø€ ÒL°eÔ*¨5×1ÑLùó   ‚r   )	r†   r	   r‡   rˆ   ÚcountrŒ   r�   ÚsumrS   )r)   s    r3   rv  rv  ¤  sd   € ä�#”u—}‘}Ô%à�x‰x�~‰~˜cÓ" S§X¡X§^¡^°HÓ%=Ñ=Ð=Ü	�Cœ%Ÿ-™-¬¯©Ð9Ô	:ÜÑL¸s¿|¹|ÔLÓLÐLàr~   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È   rF  r<   r=   r>   )r†   r	   r‡   rF  rH   rv  r   rˆ   rF   Ú
deactivater$   r™   rŒ   r�   rS   rÿ   rw  rQ   )
r(   r)   rF  Ú	x_advancery  rI  Úextra_spaceÚprevious_x_advancerS   r    s
             r3   rw  rw  ¯  sV  € Ü�#”u—}‘}Ô%Ø$9ˆÔ!Ø�Š˜)Ñ#�Ü+¨CÓ0ˆ	Ø�qŠ=Ü"Ø—‘˜#Ÿ)™) W¸Ø&)×&?Ñ&?ôAˆFð ×ÑÔØ/°)Ñ;ˆKØ˜Ñ$ˆIØ�IŠI˜Ñ$�IØ%ˆCÔð Ðô 
�Cœ%Ÿ-™-¬¯©Ð9Ô	:Ø�Š˜)Ñ#�Ø&ÐØ—<‘<ˆØ�9‰9�[Ñ! UÒ*Ø¡ " ‘~ˆHØò 	FˆEØ×&Ñ&Õ(Ü,Ø˜UÐ$9¸9óF‘	ð	Fð 	�	Š	�YÐ!3Ñ3Ñ3�	ð Ðð 	�‰�i Ô#ØÐr~   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í   rv   Úborder_Ú_widthÚpadding_T)	rS   r†   r	   r�   rJ   rñ   rF   rv   rÿ   )r\   r    rö   s      r3   rJ   rJ   Î  s¢   € à×!Ñ!ò 
ˆÜ�eœUŸ_™_Ô-Ü% eÔ,ÙØ:ò !�Ü˜EŸK™K¨'°$°Ð(8Ñ9¸7ÀDÔIØŸ™ g¨d¨V°6Ð$:Ò;ØŸ™ h¨t¨fÐ$5Ñ6×<Ó<Ú ñ	!ð
 ×$Ñ$Õ&Ùð
ð r~   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)Nr€   )r‚   zpre-wrapr„   Fr#  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wra  )r  r|  s     r3   r~  z#can_break_inside.<locals>.<genexpr>æ  s   è ø€ ÒE¨uÔ# E×*ÑEùr  )
rF   r†   r	   rï   r‡   r   rˆ   rµ   ÚanyrS   )r)   Ú	text_wraps     r3   r  r  Þ  s{   € à—	‘	˜-Ñ(Ð,NÐN€IÜ�#”u×1Ñ1Ô2ØÙ	”z #¤u§}¡}Ô5Ü˜cŸh™h¨¯	©	°&Ñ(9Ó:Ð:Ù	”z #¤u§¡Ô7ÜÑE¸¿¹ÔEÓEÐEØr~   )T)GÚ__doc__r°   Úmathr   Úcssr   r   r   Úcss.propertiesr   Úformatting_structurer	   r
   rù   r   r   Úflexr   r«   r   r   Úgridr   Úleaderr   Úmin_maxr   Úpercentr   r   r   Ú	preferredr   r   r   Úreplacedr   Útabler   r   Útext.line_breakr   r   r   r    r!   r4   r%   rC   rK   rD   rÎ   rÉ   rÚ   rÙ   r÷   r  r  rV   rI   r˜   rM   rR  rQ  rb  rL   rp  rv  rw  rJ   r  © r~   r3   ú<module>rž     sî   ðÙ $ã Ý ç 5Ñ 5Ý &ß /ß :Ý ß 1Ý Ý !Ý )ß LÑ Lß XÑ XÝ 0ß =÷Mõ Mò"òBNòb&òR'&òfNòbò,ò:0ð, ñIó ðIòbòJRCòj1+òh
Tò]ó@<3ò~'òTò
òOòd"òJDòòò>ó 	r~   