Ë
    o]jØ‰  ã                   ó  — d Z ddlZddlmZ ddlmZ ddl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 d„ Zd#d„Zd#d„Zd„ Zd„ Zd$d„Zd$d„Zd#d„Zd#d„Z	 	 d%d„Zd&d„Zd„ Zd„ Zd#d„Z 	 	 d'd„Z!d„ Z"d#d„Z#d#d„Z$d#d„Z%d#d „Z&d#d!„Z'd"„ Z(y)(a  Preferred and minimum preferred width.

Also known as max-content and min-content width, also known as the
shrink-to-fit algorithm.

Terms used (max-content width, min-content width) are defined in David
Baron's unofficial draft (https://dbaron.org/css/intrinsic/).

é    N)Úcache)Úinfé   )Úresolve_math)Ú
check_math)Úvalidate_non_shorthand)Úboxes)Úcan_break_textÚsplit_first_lineé   )Údefault_image_sizingc           	      ó^   — t        t        t        | |d¬«      |«      t        | |d¬«      «      S )zæReturn the shrink-to-fit width of ``box``.

    *Warning:* both available_content_width and the return value are
    for width of the *content area*, not margin area.

    https://www.w3.org/TR/CSS21/visudet.html#float-width

    F©Úouter)ÚminÚmaxÚmin_content_widthÚmax_content_width)ÚcontextÚboxÚavailable_content_widths      úR/var/www/zogu/zoguvenv/lib/python3.12/site-packages/weasyprint/layout/preferred.pyÚshrink_to_fitr      s6   € ô ÜÜ˜g s°%Ô8Ø#ó	%ô 	˜' 3¨eÔ4ó	6ð 6ó    c                 óà  — |j                   rt        | ||«      d   S t        |t        j                  «      rt        | ||«      S t        |t        j                  t        j                  f«      rt        | ||«      S t        |t        j                  «      rt        | |«      S t        |t        j                  t        j                  f«      rt        | ||d¬«      S t        |t        j                  «      rt        ||«      S t        |t        j                   «      rt#        | ||«      S t        |t        j$                  «      rt        | ||«      S t'        dt)        |«      j*                  › d�«      ‚)zsReturn the min-content width for ``box``.

    This is the width by breaking at every line-break opportunity.

    r   T©Úis_line_startzmin-content width for ú not handled yet)Úis_table_wrapperÚ"table_and_columns_preferred_widthsÚ
isinstancer	   ÚTableCellBoxÚtable_cell_min_content_widthÚBlockContainerBoxÚTableColumnBoxÚblock_min_content_widthÚTableColumnGroupBoxÚcolumn_group_content_widthÚ	InlineBoxÚLineBoxÚinline_min_content_widthÚReplacedBoxÚreplaced_min_content_widthÚFlexContainerBoxÚflex_min_content_widthÚGridContainerBoxÚ	TypeErrorÚtypeÚ__name__©r   r   r   s      r   r   r   '   s+  € ð ×ÒÜ1°'¸3ÀÓFÀqÑIÐIÜ	�Cœ×+Ñ+Ô	,Ü+¨G°S¸%Ó@Ð@Ü	�Cœ%×1Ñ1´5×3GÑ3GÐHÔ	IÜ& w°°UÓ;Ð;Ü	�Cœ×2Ñ2Ô	3Ü)¨'°3Ó7Ð7Ü	�Cœ%Ÿ/™/¬5¯=©=Ð9Ô	:Ü'¨°°eÈ4ÔPÐPÜ	�Cœ×*Ñ*Ô	+Ü)¨#¨uÓ5Ð5Ü	�Cœ×/Ñ/Ô	0Ü% g¨s°EÓ:Ð:Ü	�Cœ×/Ñ/Ô	0ä& w°°UÓ;Ð;äÐ0´°c³×1CÑ1CÐ0DÐDTÐUÓVÐVr   c                 óæ  — |j                   rt        | ||«      d   S t        |t        j                  «      rt        | ||«      d   S t        |t        j                  t        j                  f«      rt        | ||«      S t        |t        j                  «      rt        | |«      S t        |t        j                  t        j                  f«      rt        | ||d¬«      S t        |t        j                  «      rt        ||«      S t        |t        j                   «      rt#        | ||«      S t        |t        j$                  «      rt        | ||«      S t'        dt)        |«      j*                  › d�«      ‚)znReturn the max-content width for ``box``.

    This is the width by only breaking at forced line breaks.

    r   Tr   zmax-content width for r   )r   r    r!   r	   r"   Ú table_cell_min_max_content_widthr$   r%   Úblock_max_content_widthr'   r(   r)   r*   Úinline_max_content_widthr,   Úreplaced_max_content_widthr.   Úflex_max_content_widthr0   r1   r2   r3   r4   s      r   r   r   B   s0  € ð ×ÒÜ1°'¸3ÀÓFÀqÑIÐIÜ	�Cœ×+Ñ+Ô	,Ü/°¸¸eÓDÀQÑGÐGÜ	�Cœ%×1Ñ1´5×3GÑ3GÐHÔ	IÜ& w°°UÓ;Ð;Ü	�Cœ×2Ñ2Ô	3Ü)¨'°3Ó7Ð7Ü	�Cœ%Ÿ/™/¬5¯=©=Ð9Ô	:Ü'¨°°eÈ4ÔPÐPÜ	�Cœ×*Ñ*Ô	+Ü)¨#¨uÓ5Ð5Ü	�Cœ×/Ñ/Ô	0Ü% g¨s°EÓ:Ð:Ü	�Cœ×/Ñ/Ô	0ä& w°°UÓ;Ð;äÐ0´°c³×1CÑ1CÐ0DÐDTÐUÓVÐVr   c                 óp  — |j                   d   }|dk(  st        |«      s|j                  dk(  rC|j                  D �cg c]  }|j	                  «       s || |d¬«      ‘Œ }}|rt        |«      nd}�n4|j                   d   dk(  r|j                  }�n|j                  }d}d	D ]p  }|j                   |   }	|	dk7  sŒt        |	«      rŒ$|	j                  j                  «       d
k(  r||	j                  z  }ŒQ|	j                  dk(  sJ ‚||	j                  z  }Œr |j                   d   dk(  }
|
rt        |d«      r||j                  z  }n||j                   d   z  }|
rt        |d«      r||j                  z  }n||j                   d   z  }dt        d|«      z
  t        d|«      z  dz  }t        |||«      S c c}w )z+Helper to create ``block_*_content_width.``ÚwidthÚautoú%Tr   r   Ú
box_sizingzcontent-box)Úpadding_leftÚpadding_rightÚpxÚborder_collapseÚcollapseÚborder_left_widthÚborder_right_widthéd   )Ústyler   ÚunitÚchildrenÚis_absolutely_positionedr   ÚvalueÚlowerÚhasattrrE   rF   r   Úadjust)r   r   Úfunctionr   r<   ÚchildÚchildren_widthsÚpercentagesrL   Ústyle_valuerD   s              r   Ú_block_content_widthrU   ]   s¾  € à�I‰I�gÑ€EØ�‚œ* UÔ+¨u¯z©z¸SÒ/@ð
 ?B¿l¹lö5Ø5:Ø×1Ñ1Ô3ñ �W˜e¨4Ö0ð5ˆð 5ñ )8”�OÔ$¸QŠØ	�‰�<Ñ	  MÒ	1Ø—‘Šà—‘ˆØˆà6ò 	5ˆEØŸ)™) EÑ*ˆKØ˜fÓ$¬Z¸Õ-DØ×#Ñ#×)Ñ)Ó+¨tÒ3Ø˜[×.Ñ.Ñ.‘Eà&×+Ñ+¨sÒ2Ð2Ð2Ø ;×#4Ñ#4Ñ4‘Kð	5ð —9‘9Ð.Ñ/°:Ñ=ˆÙœ Ð%8Ô9Ø�S×*Ñ*Ñ*‰Eà�S—Y‘YÐ2Ñ3Ñ3ˆEÙœ Ð%9Ô:Ø�S×+Ñ+Ñ+‰Eà�S—Y‘YÐ3Ñ4Ñ4ˆEØ”s˜3 Ó,Ñ,´°A°u³Ñ=ÀÑCˆä�#�u˜eÓ$Ð$ùò?5s   ½"F3c                 óè  — | j                   d   }| j                   d   }t        |«      }t        |«      }|dk(  s|s|j                  dk(  rd}n|j                  }|dk(  s|s|j                  dk(  rt        }n|j                  }t        | t        j                  «      rÁ| j                  j                  d| j                   d   «      \  }}}|�’| j                   d   }| j                   d	   }	t        |«      }t        |	«      }|dk7  r*|s(|j                  dk7  rt        ||j                  |z  «      }|	dk7  r*|s(|	j                  dk7  rt        ||	j                  |z  «      }t        |t        ||«      «      S )
z;Get box width from given width and box min- and max-widths.Ú	min_widthÚ	max_widthr=   r>   r   r   Ú	font_sizeÚ
min_heightÚ
max_height)rH   r   rI   rL   r   r!   r	   r,   ÚreplacementÚget_intrinsic_sizer   r   )
r   r<   rW   rX   Úmin_pendingÚmax_pendingÚ_ÚratiorZ   r[   s
             r   Úmin_maxrb   †   sR  € à—	‘	˜+Ñ&€IØ—	‘	˜+Ñ&€IÜ˜YÓ'€KÜ˜YÓ'€KØ�FÒ™k¨Y¯^©^¸sÒ-BØ‰	à—O‘Oˆ	Ø�FÒ™k¨Y¯^©^¸sÒ-BÜ‰	à—O‘Oˆ	ä�#”u×(Ñ(Ô)Ø—o‘o×8Ñ8Øˆs�y‰y˜Ñ%ó'‰ˆˆ1ˆeàÐØŸ™ <Ñ0ˆJØŸ™ <Ñ0ˆJÜ$ ZÓ0ˆKÜ$ ZÓ0ˆKØ˜VÒ#©K¸J¿O¹OÈsÒ<RÜ 	¨:×+;Ñ+;¸eÑ+CÓD�	Ø˜VÒ#©K¸J¿O¹OÈsÒ<RÜ 	¨:×+;Ñ+;¸eÑ+CÓD�	äˆyœ#˜e YÓ/Ó0Ð0r   c                 ó  — d}|rddgng |rddgng z   D ]p  }| j                   |   }|dk7  sŒt        |«      rŒ$|j                  j                  «       dk(  r||j                  z  }ŒQ|j                  dk(  sJ ‚||j                  z  }Œr | j                   d	   d
k(  }|r0|rt        | d«      r|| j                  z  }n|| j                   d   z  }|r0|rt        | d«      r|| j                  z  }n|| j                   d   z  }|dk  r|d|dz  z
  z  S y)z3Add box paddings, borders and margins to ``width``.r   Úmargin_leftr@   Úmargin_rightrA   r=   rB   r>   rC   rD   rE   rF   rG   r   )rH   r   rI   rM   rL   rN   rE   rF   )r   r<   ÚleftÚrightrS   rL   rT   rD   s           r   Úmargin_widthrh   ¥   sB  € à€Kñ -1ˆ-˜Ñ	(°bÙ.3ˆ.˜/Ñ	*¸ñ	=ò
1ˆð —i‘i Ñ&ˆØ˜&Ó ¬°KÕ)@Ø×Ñ×%Ñ%Ó'¨4Ò/Ø˜×*Ñ*Ñ*‘à"×'Ñ'¨3Ò.Ð.Ð.Ø˜{×0Ñ0Ñ0‘ð
1ð �y‰yÐ*Ñ+¨zÑ9€HÙÙœ Ð%8Ô9ð �S×*Ñ*Ñ*‰Eð �S—Y‘YÐ2Ñ3Ñ3ˆEÙÙœ Ð%9Ô:à�S×+Ñ+Ñ+‰Eð �S—Y‘YÐ3Ñ4Ñ4ˆEà�SÒØ˜˜K¨#Ñ-Ñ-Ñ.Ð.ð r   c                 ó>   — t        | |«      }|rt        | |||«      S |S )z˜Respect min/max and adjust width depending on ``outer``.

    If ``outer`` is set to ``True``, return margin width, else return content
    width.

    )rb   rh   )r   r   r<   rf   rg   Úfixeds         r   rO   rO   Ó   s)   € ô �C˜Ó€EáÜ˜C ¨¨eÓ4Ð4àˆr   c                 ó&   — t        | |t        |«      S )z0Return the min-content width for a ``BlockBox``.)rU   r   r4   s      r   r&   r&   â   s   € äØ�Ô'¨ó0ð 0r   c                 ó&   — t        | |t        |«      S )z0Return the max-content width for a ``BlockBox``.)rU   r   r4   s      r   r7   r7   è   s   € ä ¨Ô.?ÀÓGÐGr   c           	      óp   — t        | |||d||¬«      }|rt        |«      n
t        |«      }t        |||«      S )zÑReturn the min-content width for an ``InlineBox``.

    The width is calculated from the lines from ``skip_stack``. If
    ``first_line`` is ``True``, only the first line minimum width is
    calculated.

    T)ÚminimumÚ
skip_stackÚ
first_line)Úinline_line_widthsÚnextr   rO   )r   r   r   ro   rp   r   Úwidthsr<   s           r   r+   r+   í   s@   € ô  Ø��e˜]°DØ¨*ô6€Fñ 'ŒD�ŒL¬C°«K€EÜ�#�u˜eÓ$Ð$r   c           	      óŽ   — t        t        | |||d¬«      «      }|dxx   t        | |«      z  cc<   t        ||t	        |«      «      S )z2Return the max-content width for an ``InlineBox``.F)rn   éÿÿÿÿ)Úlistrq   Útrailing_whitespace_sizerO   r   )r   r   r   r   rs   s        r   r8   r8   ý   sH   € äÜ˜7 C¨°ÀuÔMóO€Fð ˆ2ƒJÔ*¨7°CÓ8Ñ8ƒJÜ�#�uœc &›kÓ*Ð*r   c                 óÔ   — |j                   d   }|dk(  st        |«      s|j                  dk(  rd}n+|j                  j                  «       dk(  sJ ‚|j                  }t        |d|«      S )z9Return the *-content width for a ``TableColumnGroupBox``.r<   r=   r>   r   rB   F)rH   r   rI   rM   rL   rO   )r   r   r<   s      r   r(   r(     sa   € à�I‰I�gÑ€EØ�‚œ* UÔ+¨u¯z©z¸SÒ/@Ø‰à�z‰z×ÑÓ! TÒ)Ð)Ð)Ø—‘ˆä�#�u˜eÓ$Ð$r   c                 ó¶   — |j                   D �cg c]  }|j                  «       st        | |«      ‘Œ  }}t        |||rt	        |«      «      }|S d«      }|S c c}w )z4Return the min-content width for a ``TableCellBox``.r   )rJ   rK   r   rO   r   )r   r   r   rQ   rR   Úchildren_min_widths         r   r#   r#     sw   € ð —\‘\ö1àØ×-Ñ-Ô/ô 	˜' 5Õ)ð1€Oð 1ô  ØØÙ /ŒˆOÓó8Ðð
 Ðð 67ó8Ðð
 Ðùò1s   �#Ac                 óR   — t        | ||«      }t        |t        | ||«      «      }||fS )z=Return the min- and max-content width for a ``TableCellBox``.)r#   r   r7   )r   r   r   rW   rX   s        r   r6   r6   %  s3   € ô -¨W°c¸5ÓA€IÜ�IÔ6°wÀÀUÓKÓL€IØ�iÐÐr   c           
   #   ó  K  — d}t        |t        j                  «      rŒ|j                  d   }t	        |«      rJt        ||j                  dd¬«      }	t        |	fd«      d   d   }
|
rD|
j                  dk7  r5|
j                  }n(|j                  dk7  r|j                  d   j                  }d}|€d}n|j                  «       \  \  }}|j                  |d D �]¦  }|j                  «       rŒt        |t        j                  «      ršt        | ||||||«      }|rt        |«      xs dg}n|D �cg c]  }|xs d‘Œ
 }}t        |«      dk(  rt!        |||d   xs d«      |d<   �nÅt!        |||d   xs dd¬	«      xs d|d<   t!        |||d
   xs dd¬«      xs d|d
<   �n‰t        |t        j"                  «      �r0|j                  d   }|dv }|dv }|€d}n|j                  «       \  \  }}|�J ‚|j$                  j'                  «       |xs dd }|r|r|j)                  d«      }|rdnd}g }dx}}|�^||z  }t+        ||d j-                  «       |j                  | ||j.                  |d¬«      \  }}}}}}|j1                  |xs d«       |rn|�Œ^|r|r||d   xs dz  } nÝ|j-                  «       d
d }t3        |dz   |j                  d   «      }|rT|rR|rP|j1                  d«       n>|r/|j                  d   dv rdt5        | |«      dg}nt5        | |«      g}nt7        | |«      g}||d   xs dz  }t        |«      dkD  r2||z   –— d}t        |«      dkD  r|dd
 D ]
  }|xs d–— Œ |d
   xs d}|d
   du }d}�Œ© ||z   –— yc c}w ­w)zYield line width for each line.r   Útext_indent)Úrefer_toztext-indentr   r>   NF)rg   ru   )rf   Úwhite_space©ÚnormalÚnowrapúpre-line)r�   zpre-wraprƒ   ó    T)r   rn   ÚaÚlangr   )r!   r	   r*   rH   r   r   r   rI   rL   ÚitemsrJ   rK   r)   rq   rr   ÚlenrO   ÚTextBoxÚtextÚencodeÚlstripr   ÚdecodeÚjustification_spacingÚappendr
   r   r   )r   r   r   r   rn   ro   rp   r}   Úindent_tokenÚresultrL   Úcurrent_lineÚskiprQ   ÚlinesÚliner   Úspace_collapseÚ	text_wrapÚ
child_textrX   Úresume_indexÚnew_resume_indexr`   r<   Úlast_letterÚ	can_breaks                              r   rq   rq   -  sü  è ø€ ð
 €KÜ�#”u—}‘}Ô%Ø—y‘y Ñ/ˆÜ�lÔ#ä! ,°·	±	¸=ÐSTÔUˆFÜ*¨F¨9°mÓDÀQÑGÈÑJˆEÙ˜Ÿ™ sÒ*Ø#Ÿk™k‘Ø×Ñ #Ò%ØŸ)™) MÑ2×8Ñ8ˆKð €LØÐØ‰à(×.Ñ.Ó0ÑÑˆˆzØ—‘˜d˜eÐ$ó Xˆà×)Ñ)Ô+Øô �eœUŸ_™_Ô-ä&Ø˜  }°g¸zÈ:óWˆEáÜ˜e›Ò,¨Ð-‘à27Ö8¨$˜š ™Ð8�Ð8Ü�5‹z˜QŠÜ! %¨°°a±²¸AÓ>��a“ä! %¨°°a±²¸AÀUÔKÒSÈt��a‘Ü" 5¨%°°r±²¸aÀeÔLÒTÐPT��b“	Ü˜œuŸ}™}Õ-àŸ+™+ mÑ4ˆKØ(Ð,LÐLˆNØ#Ð'IÐIˆIØÐ!Ø‘à&0×&6Ñ&6Ó&8Ñ#Ñ"��zØ!Ð)Ð)Ð)ØŸ™×*Ñ*Ó,¨dªi°a¨\Ð:ˆJÙ¡Ø'×.Ñ.¨tÓ4�
Ù$™¨$ˆIØˆEØ./Ð/ˆLÐ+Ø"Ð.ØÐ 0Ñ0�Ü6FØ˜|˜}Ð-×4Ñ4Ó6¸¿¹ÀWÈiØ×/Ñ/¸}Ø ô7"Ñ3��1Ð&¨¨q°!ð —‘˜Uš] dÔ+ÙØð #Ñ.ñ Ñ.à  a¡¢¨AÑ-�Ùà$×+Ñ+Ó-¨b¨cÐ2ˆKÜ& {°SÑ'8¸%¿+¹+ÀfÑ:MÓNˆIÙ™9©à—‘˜TÕ"ñ ð —9‘9˜]Ñ+Ð/QÑQØ!Ô#4°W¸eÓ#DÀdÐK‘Eä.¨w¸Ó>Ð?‘Eä*¨7°EÓ:Ð;�à˜˜a™š AÑ%ˆÜˆu‹:˜Š>à Ñ,Ò,ØˆKÜ�5‹z˜AŠ~Ø! ! B˜Kò $�DØš) !“Oð$à  ™9š>¨ˆLØ˜b™	 TÐ)ˆØŠ
ðqXðr ˜Ñ
$Ó$ùòY 9ùs   ‚D+NÄ-NÄ:ENÊC<Nc                 óž  — | j                   d   }|dk7  r&t        |«      s|j                  dk(  r|j                  nd}| j                   d   }|dk7  r&t        |«      s|j                  dk(  r|j                  nt        }| j                   d   }|dk7  r&t        |«      s|j                  dk(  r|j                  nd}t        |t        ||«      «      S )z~Return the percentage contribution of a cell, column or column group.

    https://dbaron.org/css/intrinsic/#pct-contrib

    rW   r=   r>   r   rX   r<   )rH   r   rI   rL   r   r   r   )r   rW   rX   r<   s       r   Ú_percentage_contributionrž      sË   € ð —	‘	˜+Ñ&€Ià$¨Ò.Ü�yÔ! i§n¡n¸Ò&;ð 	�ŠØABð ð —	‘	˜+Ñ&€Ià$¨Ò.Ü�yÔ! i§n¡n¸Ò&;ð 	�ŠÜADð ð �I‰I�gÑ€Eà ’Ü�uÔ %§*¡*°Ò"3ð 	�ŠØ9:ð 
ô ˆyœ#˜e YÓ/Ó0Ð0r   c                 óP  ‡=‡>— ddl m} |j                  «       }| j                  j	                  |«      }|r||   S d\  }}d}|j
                  D ]e  }	|	j
                  D ]T  }
|
j
                  D ]>  }t        |j                  |j                  z   |«      }t        ||j                  z   |«      }Œ@ |dz  }ŒV Œg t        |«      D �cg c]  }dg|z  ‘Œ
 }}d}|j
                  D ];  }	|	j
                  D ]*  }
|
j
                  D ]  }|||   |j                  <   Œ |dz  }Œ, Œ= t        t        |Ž «      }|j                  d   dk(  rA|dkD  r<|j                  d   d   dt        |D �cg c]  }t        |«      sŒ|‘Œ c}«      z   z  }nd}|dk(  s|dk(  r~g |_        t!        | |d	¬
«      }t#        | |d	¬
«      }t%        |dt!        | |«      ¬«      }t%        |dt#        | |«      ¬«      }g g g g |g f}||g|¢­||g|¢­dœx| j                  |<   }||   S dg|z  }dg|z  }d}|j&                  D ]+  }|j
                  D ]  }|||<   |||<   |dz  }||k(  sŒ n Œ+ n g }t)        «       }dg|z  }dg|z  Š>dg|z  Š=t        |«      D �]  }||fD ]]  }||   x}sŒt        ||   t+        | |«      «      ||<   t        ‰>|   t-        | |«      «      ‰>|<   t        ‰=|   t/        |«      «      ‰=|<   Œ_ ||   D ]’  }|sŒ|j                  dk(  rOt1        | |«      \  }}t        ||   |«      ||<   t        ‰>|   |«      ‰>|<   t        ‰=|   t/        |«      «      ‰=|<   Œd|j3                  |«       |j5                  |j                  dz
  «       Œ” �Œ g }t7        |«      D ]B  \  }}
d} |j3                  g x}!«       t7        |
«      D ]  \  }"}|r|"} |!j3                  | «       Œ ŒD t8        ˆ=ˆ>fd„«       }#t;        |«      D ]�  }$g }%t        |«      D ]y  }‰=|   x}&r|%j3                  |&«       Œt        ||«      D ]>  \  }
}!|!|   x} €Œ|
|    }'|'j                  dz
  |$k7  rŒ& |#|'| ‰>|   «      }(t        |&|(«      }&Œ@ |%j3                  |&«       Œ{ |%Š=Œ� t        |«      D �cg c]  }d	‘Œ })}t        |«      D ]Î  }||   r7||   j                  d   }*|*dk7  r t=        |*«      s|*j>                  dk7  rd|)|<   Œ?||   r7||   j                  d   }*|*dk7  r t=        |*«      s|*j>                  dk7  rd|)|<   Œ{||   D ]L  }|sŒ|j                  dk(  sŒ|j                  d   }*|*dk7  sŒ+t=        |*«      rŒ7|*j>                  dk7  sŒGd|)|<    ŒÎ ŒÐ t7        ‰=«      D ��+cg c]   \  }}+tA        |+dtC        ‰=d| «      z
  «      ‘Œ" c}+}Š=|D ]Ù  }t+        | |«      },t-        | |«      }-tE        |j                  |j                  |j                  z   «      }.tC        ||.   «      }/tC        ‰>|.   «      }0|j                  d   dk(  r#|j                  dz
  |j                  d   d   z  }1nd}1|,|/|1z   kD  r|,|/|1z   z
  }2 || ||2||)‰=‰>|.«       |-|0|1z   kD  sŒÃ|-|0|1z   z
  }2 || ||2‰>|)‰=‰>|.«       ŒÛ t        |«      D �cg c]  }‰=|   r‰>|   ‰=|   dz  z  ‘Œ }3}tC        ˆ=ˆ>fd„t        |«      D «       «      }4dtC        ‰=«      z
  dz  }5|5dk(  r|4dk(  rd}6ntF        jH                  }6n|4|5z  }6|tC        |«      z   }7|t        tC        ‰>«      |6g|3¢«      z   }8|j                  d   }*|*dk7  rDt=        |*«      s9|*j>                  jK                  «       dk(  r|j                  d   jL                  x}9}:n|7}9|8}:t        |7t%        |d	|9¬«      «      }7t        |8t%        |d	|:¬«      «      }8tO        |tO        ||7«      «      };tO        |tO        ||8«      «      }<|‰>‰=|)||f}|7|8g|¢­|;|<g|¢­dœx| j                  |<   }||   S c c}w c c}w c c}w c c}+}w c c}w )ad  Return content widths for the auto layout table and its columns.

    The tuple returned is
    ``(table_min_content_width, table_max_content_width,
       column_min_content_widths, column_max_content_widths,
       column_intrinsic_percentages, constrainedness,
       total_horizontal_border_spacing, grid)``

    https://dbaron.org/css/intrinsic/

    r   )Údistribute_excess_width)r   r   r   NrC   ÚseparateÚborder_spacingFr   T)r   r<   )FTc                 óT  •— t        ||| j                  z   «      }t        ‰|   «      }t        | «      }t	        d||z
  «      }t        ||| j                  z   «      D �cg c]  }‰|   dk(  r‰|   ‘Œ }}t        |«      }	|	dk(  rdt        |«      xs dz  }
||
z  S ||	z  }
||
z  S c c}w )Nr   r   )ÚsliceÚcolspanÚsumrž   r   Úrangerˆ   )Úorigin_cellÚoriginr   Ú
cell_sliceÚbaseline_percentageÚcell_percentage_contributionÚdiffÚjÚother_columns_contributionsÚother_columns_contributions_sumra   Úintrinsic_percentagesÚmax_content_widthss              €€r   Úget_percentage_contributionzGtable_and_columns_preferred_widths.<locals>.get_percentage_contribution.  sâ   ø€ ô ˜6 6¨K×,?Ñ,?Ñ#?Ó@ˆ
Ü!Ð"7¸
Ñ"CÓDÐÜ'?ÀÓ'LÐ$Ü�1Ð2Ð5HÑHÓIˆô ˜6 6¨K×,?Ñ,?Ñ#?Ó@ö'.àØ$ QÑ'¨1Ò,ð ˜qÓ!ð'.Ð#ð '.ô +.Ð.IÓ*JÐ'Ø*¨aÒ/ØœÐ8Ó9Ò>¸QÑ?ˆEð �e‰|Ðð &Ð(GÑGˆEØ�e‰|Ðùò'.s   ÁB%r<   r=   r>   rG   c              3   ó8   •K  — | ]  }‰|   d k(  r‰|   –— Œ y­w)r   N© )Ú.0Úir±   r²   s     €€r   ú	<genexpr>z5table_and_columns_preferred_widths.<locals>.<genexpr>Œ  s+   øè ø€ ò 2*Ø"#Ø  Ñ# qÒ(ð 	˜1Õñ2*ùs   ƒrB   )(Útabler    Úget_wrapped_tableÚtablesÚgetrJ   r   Úgrid_xr¥   Úrowspanr§   rv   ÚziprH   rˆ   Úanyr&   r7   rO   Úcolumn_groupsÚsetr   r   rž   r6   r�   ÚaddÚ	enumerater   Úsortedr   rI   r   r¦   r¤   ÚsysÚmaxsizerM   rL   rh   )?r   r   r   r    r¹   r‘   Ú
grid_widthÚgrid_heightÚ
row_numberÚ	row_groupÚrowÚcellr·   ÚgridÚzipped_gridÚcolumnÚtotal_horizontal_border_spacingrW   rX   Úouter_min_widthÚouter_max_widthrÁ   ÚcolumnsÚcolumn_numberÚcolumn_groupÚcolspan_cellsÚcolspansÚmin_content_widthsÚgroupsÚgroupÚrows_originsÚyr©   Úrow_originsÚxr³   ÚspanÚpercentage_contributionsÚpercentage_contributionr¨   r¬   Úconstrainednessr<   Ú
percentageÚmin_contentÚmax_contentÚcolumn_sliceÚcolumns_min_contentÚcolumns_max_contentÚspacingÚexcess_widthÚsmall_percentage_contributionsÚ'large_percentage_contribution_numeratorÚ)large_percentage_contribution_denominatorÚlarge_percentage_contributionÚtable_min_content_widthÚtable_max_content_widthÚtable_min_widthÚtable_max_widthÚtable_outer_min_content_widthÚtable_outer_max_content_widthr±   r²   s?                                                                @@r   r    r    µ  sI
  ù€ õ /à×!Ñ!Ó#€EØ�^‰^×Ñ Ó&€FÙØ�e‰}Ðð #Ñ€J�Ø€JØ—^‘^ò ˆ	Ø×%Ñ%ò 	ˆCØŸ™ò J�Ü  §¡¨t¯|©|Ñ!;¸ZÓH�
Ü! *¨t¯|©|Ñ";¸[ÓI‘ðJð ˜!‰O‰Jñ		ðô */¨{Ó);Ö< AˆTˆF�ZÓÐ<€DÐ<Ø€JØ—^‘^ò ˆ	Ø×%Ñ%ò 	ˆCØŸ™ò 5�Ø04��ZÑ  §¡Ò-ð5à˜!‰O‰Jñ	ðô ”s˜D�zÓ"€Kð ‡{�{Ð$Ñ%¨Ò3¸
ÀQºà�K‰KÐ(Ñ)¨!Ñ,Ø”¨;ÖF ¼#¸f½+’fÒFÓGÑGñIñ 	(ð +,Ð'à�Q‚˜+¨Ò*ØˆŒÜ+¨G°UÀ%ÔHˆ	Ü+¨G°UÀ%ÔHˆ	Ü Ø�tÔ#:¸7ÀEÓ#JôLˆä Ø�tÔ#:¸7ÀEÓ#JôLˆà�b˜"˜bÐ"AÀ2ÐFˆà˜yÐ2¨6Ñ2Ø" OÐ=°fÑ=ñ*
ð 	
ˆ�‰�uÑ ð �e‰}Ðà�F˜ZÑ'€MØˆf�zÑ!€GØ€MØ×+Ñ+ò 	ˆØ"×+Ñ+ò 	ˆFØ+7ˆM˜-Ñ(Ø%+ˆG�MÑ"Ø˜QÑˆMØ 
Ó*Ùð	ð Ùð	ð €MÜ‹u€Hð ˜˜zÑ)ÐØ˜˜zÑ)ÐØ˜C *Ñ,Ðô �:Óó /ˆØ$ gÐ.ò 	OˆFØ˜q™	Ð!ˆuÑ!Ü(+Ø& qÑ)Ô+<¸WÀeÓ+Ló)NÐ" 1Ñ%ä(+Ø& qÑ)Ô+<¸WÀeÓ+Ló)NÐ" 1Ñ%ä+.Ø)¨!Ñ,Ô.FÀuÓ.Mó,OÐ% aÒ(ð	Oð   ‘Nò 	/ˆDÙØØ�|‰|˜qÒ Ü'GÈÐQUÓ'VÑ$�	˜9Ü(+Ð,>¸qÑ,AÀ9Ó(MÐ" 1Ñ%Ü(+Ð,>¸qÑ,AÀ9Ó(MÐ" 1Ñ%Ü+.Ø)¨!Ñ,Ô.FÀtÓ.Ló,NÐ% aÒ(ð ×$Ñ$ TÔ*Ø—‘˜TŸ\™\¨AÑ-Õ.ò	/ð/ð8 €LÜ˜D“/ò '‰ˆˆ3ØˆØ×Ñ¨2Ð-˜KÔ.Ü  “~ò 	'‰GˆAˆtÙØ�Ø×Ñ˜vÕ&ñ	'ð'ô ôó ðô" �xÓ ò 9ˆØ#%Ð Ü�zÓ"ò 	EˆAØ*?ÀÑ*BÐBÐ&ÐBØ(×/Ñ/Ð0GÔHØÜ$'¨¨lÓ$;ò 	KÑ ��[Ø)¨!™nÐ,�FÐ5ØØ! &™k�Ø×&Ñ&¨Ñ*¨dÒ2ØÙ/JØ Ð);¸AÑ)>ó0@Ð,ä*-Ø+Ð-Ió+KÑ'ð	Kð %×+Ñ+Ð,CÕDð	Eð" !9Ñð'9ô, ',¨JÓ&7Ö8 ’uÐ8€OÐ8Ü�:Óò ˆØ˜ÒØ! !Ñ$×*Ñ*¨7Ñ3ˆEØ˜Š¤z°%Ô'8¸U¿Z¹ZÈ3Ò=NØ%)� Ñ"ØØ�1Š:Ø˜A‘J×$Ñ$ WÑ-ˆEØ˜Š¤z°%Ô'8¸U¿Z¹ZÈ3Ò=NØ%)� Ñ"ØØ ‘Nò 	ˆDÚ˜Ÿ™¨Ó)ØŸ
™
 7Ñ+�Ø˜F“?¬:°eÕ+<ÀÇÁÈsÓARØ)-�O AÑ&Ùñ	ðô( 'Ð'<Ó=÷?áˆAˆzô 	ˆJ˜œcÐ"7¸¸Ð";Ó<Ñ<Õ=ó?Ðð
 ò ˆÜ'¨°Ó6ˆÜ'¨°Ó6ˆÜ˜TŸ[™[¨$¯+©+¸¿¹Ñ*DÓEˆÜ!Ð"4°\Ñ"BÓCÐÜ!Ð"4°\Ñ"BÓCÐØ�;‰;Ð(Ñ)¨ZÒ7Ø—|‘| aÑ'¨5¯;©;Ð7GÑ+HÈÑ+KÑK‰GàˆGàÐ,¨wÑ6Ò6Ø&Ð*=ÀÑ*GÑHˆLÙ#Ø˜ lÐ4FØÐ!6Ð8JØôð
 Ð,¨wÑ6Ó6Ø&Ð*=ÀÑ*GÑHˆLÙ#Ø˜ lÐ4FØÐ!6Ð8JØõð)ô8 �zÓ"ö&%àØ  Ò#ð 	˜1ÑÐ!6°qÑ!9¸CÑ!?Ó@ð&%Ð"ð &%ô /2ô 2*Ü',¨ZÓ'8ô2*ó /*Ð+ð 
ŒsÐ(Ó)Ñ	)¨SÑ0ð .à0°AÒ5Ø2°aÒ7Ø,-Ñ)ô -0¯K©KÑ)ð 4Ø5ñ6ð 	&ð
 	(¬#Ð.@Ó*AÑAð ð 	(¬#ÜÐ"Ó#Ð%Bð/-à+ð/-ó +.ñ 	.ð ð
 �K‰K˜Ñ €EØ�‚œz¨%Ô0°U·Z±Z×5EÑ5EÓ5GÈ4Ò5Oð -2¯K©K¸Ñ,@×,FÑ,FÐFˆ™/à1ˆØ1ˆä!Ø¤Ø˜ oô"7ó8Ðô "Ø¤Ø˜ oô"7ó8Ðô %1ØŒ|˜CÐ!8Ó9ó%;Ð!ä$0ØŒ|˜CÐ!8Ó9ó%;Ð!ð 	Ð.Ð0EØÐ8¸+ðG€Fð (Ð)@ÐJÀ6ÑJØ,Ð.KÐUÈfÑUñ&ð €G‡N�N�5Ñ˜Fð �%‰=Ðùòm =ùò Gùòn 9ùó&?ùò>&%s$   Ã`Å!`Å2`Ò	`Ö %`Ú`#c           	      ó  — | j                   d   }|dk(  rþ| j                   d   }|dk(  st        |«      s|j                  dk(  rd}n+|j                  j                  «       dk(  sJ ‚|j                  }| j                   d   dk7  xr7 t        | j                   d   «       xr | j                   d   j                  dk(  }|rd}n´| j
                  }|j                  | j                   d   | j                   d	   «      \  }}}t        |||d|dd¬
«      \  }}	nbt        | j                   d   «      s| j                   d   j                  dk(  rd}n+|j                  j                  «       dk(  sJ ‚|j                  }t        | ||«      S )z:Return the min-content width for an ``InlineReplacedBox``.r<   r=   Úheightr>   rB   rX   r   Úimage_resolutionrY   ©Údefault_widthÚdefault_height©	rH   r   rI   rM   rL   r\   r]   r   rO   )
r   r   r<   r÷   Úunknown_max_widthÚimageÚintrinsic_widthÚintrinsic_heightÚintrinsic_ratior`   s
             r   r-   r-   Ê  s{  € à�I‰I�gÑ€EØ�‚Ø—‘˜8Ñ$ˆØ�VÒœz¨&Ô1°V·[±[ÀCÒ5GØ‰Fà—;‘;×$Ñ$Ó&¨$Ò.Ð.Ð.Ø—\‘\ˆFà�I‰I�kÑ" fÑ,ò /Ü˜3Ÿ9™9 [Ñ1Ó2Ð2ò/à�I‰I�kÑ"×'Ñ'¨3Ñ.ð 	ñ à‰Eà—O‘OˆEà×(Ñ(Ø—I‘IÐ0Ñ1°3·9±9¸[Ñ3IóKñ ?ˆOÐ-¨ô ,ØÐ!1°?ÀFØ a¸ô;‰HˆE‘1ô 
�C—I‘I˜gÑ&Ô	'¨3¯9©9°WÑ+=×+BÑ+BÀcÒ+Ià‰à�z‰z×ÑÓ! TÒ)Ð)Ð)Ø—‘ˆÜ�#�u˜eÓ$Ð$r   c           	      ód  — | j                   d   }|dk(  r®| j                   d   }|dk(  st        |«      s|j                  dk(  rd}n+|j                  j                  «       dk(  sJ ‚|j                  }| j
                  }|j                  | j                   d   | j                   d   «      \  }}}t        |||d|dd	¬
«      \  }}nbt        | j                   d   «      s| j                   d   j                  dk(  rd}n+|j                  j                  «       dk(  sJ ‚|j                  }t        | ||«      S )z:Return the max-content width for an ``InlineReplacedBox``.r<   r=   r÷   r>   rB   rø   rY   i,  é–   rù   r   rü   )	r   r   r<   r÷   rþ   rÿ   r   r  r`   s	            r   r9   r9   ì  s&  € à�I‰I�gÑ€EØ�‚Ø—‘˜8Ñ$ˆØ�VÒœz¨&Ô1°V·[±[ÀCÒ5GØ‰Fà—;‘;×$Ñ$Ó&¨$Ò.Ð.Ð.Ø—\‘\ˆFØ—‘ˆà×$Ñ$Ø—	‘	Ð,Ñ-¨s¯y©y¸Ñ/EóGñ 	;ˆÐ)¨?ô (ØÐ-¨ÀÈØ¨cô3‰ˆ‰qô 
�C—I‘I˜gÑ&Ô	'¨3¯9©9°WÑ+=×+BÑ+BÀcÒ+Ià‰à�z‰z×ÑÓ! TÒ)Ð)Ð)Ø—‘ˆÜ�#�u˜eÓ$Ð$r   c                 ó@  — |j                   D �cg c]  }|j                  rt        | |«      ‘Œ }}|st        ||d«      S |j                  d   j                  d«      r(|j                  d   dk(  rt        ||t        |«      «      S t        ||t        |«      «      S c c}w )z9Return the min-content width for an ``FlexContainerBox``.r   Úflex_directionrÌ   Ú	flex_wrapr‚   )rJ   Úis_flex_itemr   rO   rH   Ú
startswithr¦   r   )r   r   r   rQ   Úmin_contentss        r   r/   r/     sž   € ð —\‘\ö9à U×%7Ò%7ô 	˜' 5Õ)ð9€Lð 9ñ Ü�c˜5 !Ó$Ð$Ø�	‰	Ð"Ñ#×.Ñ.¨uÔ5Ø�I‰I�kÑ" hÒ.Ü�c˜5¤# lÓ"3Ó4Ð4ä�c˜5¤# lÓ"3Ó4Ð4ùò9s   �Bc                 ó  — |j                   D �cg c]  }|j                  rt        | |«      ‘Œ }}|st        ||d«      S |j                  d   j                  d«      rt        ||t        |«      «      S t        ||t        |«      «      S c c}w )z9Return the max-content width for an ``FlexContainerBox``.r   r  rÌ   )rJ   r  r   rO   rH   r  r¦   r   )r   r   r   rQ   Úmax_contentss        r   r:   r:     s�   € ð —\‘\ö9à U×%7Ò%7ô 	˜' 5Õ)ð9€Lð 9ñ Ü�c˜5 !Ó$Ð$Ø
‡y�yÐ!Ñ"×-Ñ-¨eÔ4Ü�c˜5¤# lÓ"3Ó4Ð4ä�c˜5¤# lÓ"3Ó4Ð4ùò9s   �B	c                 ó¦  — ddl m}m} d}t        |t        j
                  t        j                  f«      rI|j                  sy||j                  d   }}t        |t        j
                  t        j                  f«      rŒIt        |t        j                  «      r|j                  sy|j                  d   dvry|j                  d   dk(  ry|j                  j                  d	«      sy|j                  j                  d	«      x}rgd}|�|} || |d|«      \  }}}	|�ŒsJ ‚|j                  |«      }
 || |
d«      \  }
}}	|
€|j                  S |�J ‚|j                  |
j                  z
  S  ||j                  |j                  | d|j                  «      \  }	}	}	}}	}	|r4t!        |j                  «      d
k\  r|t#        | |j                  d   «      z  }|S )z6Return the size of the trailing whitespace of ``box``.r   )r   Úsplit_text_boxNr   ru   r   r€   rY   ú r   éþÿÿÿ)Úinliner   r  r!   r	   r)   r*   rJ   r‰   rŠ   rH   ÚendswithÚrstripÚcopy_with_textr<   rŽ   rˆ   rw   )r   r   r   r  Úlast_parentÚstripped_textÚresumeÚ
old_resumeÚold_boxr`   Ústripped_boxr<   s               r   rw   rw   %  sÈ  € ç8ð €KÜ
�Sœ5Ÿ?™?¬E¯M©MÐ:Ô
;Ø�|Š|ØØ §¡¨RÑ 0�Sˆô �Sœ5Ÿ?™?¬E¯M©MÐ:Õ
;ô �cœ5Ÿ=™=Ô)°·²àØ	�‰�=Ñ	!Ð)IÑ	IàØ	�‰�;Ñ	 1Ò	$àØ�X‰X×Ñ˜sÔ#àð Ÿ™Ÿ™¨Ó,Ð,€}Ð,àˆØÐ ØˆJÙ!/°¸¸dÀFÓ!KÑˆG�V˜Qð Ñ ñ ˆˆwØ×)Ñ)¨-Ó8ˆÙ"0Ø�\ 4¨ó#5Ñˆ�f˜aàÐà—=‘=Ð ð �>Ð!�>Ø—=‘= <×#5Ñ#5Ñ5Ð5ñ  0Ø�H‰H�c—i‘i ¨$°×0IÑ0Ió KÑˆˆ1ˆa�˜˜1ñ œ3˜{×3Ñ3Ó4¸Ò9ØÔ-¨g°{×7KÑ7KÈBÑ7OÓPÑPˆEØˆr   )T)TT)TNFF)TF)NF))Ú__doc__rÆ   Ú	functoolsr   Úmathr   Úcssr   Úcss.functionsr   Úcss.validationr   Úformatting_structurer	   Útext.line_breakr
   r   Úreplacedr   r   r   r   rU   rb   rh   rO   r&   r7   r+   r8   r(   r#   r6   rq   rž   r    r-   r9   r/   r:   rw   rµ   r   r   ú<module>r#     s³   ðñó Ý Ý å Ý &Ý 3Ý (ß >Ý *ò6ó Wó6Wò6&%òR1ó>+ó\ó0óHð
 CGØ=Bó%ó +ò	%òó$ ð PTØ"'óp%òf1ó*Rój%óD%ó45ó 5ó2r   