§
    ¥”j{ä  ã                   óN  — d Z ddlZddl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 i dej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        i¥Zd„  edd¦  «        D ¦   «         Z e  !                    d d!d"œ¦  «          ej"        d#¦  «        Z# ej"        d$¦  «        Z$ ej"        d%¦  «        Z%d&„ Z&d'„ Z'd(„ Z(	 dId)„Z)d*„ Z*d+„ Z+	 	 	 dJd,„Z,	 dKd-„Z-d.„ Z.d/„ Z/d0„ Z0d1„ Z1 ej"        d2¦  «        j2        fd3„Z3dId4„Z4d5„ Z5d6„ Z6d7„ Z7d8„ Z8d9„ Z9d:„ Z:d;„ Z;d<„ Z<dLd>„Z=d?„ Z>d@„ Z?dA„ Z@dB„ ZAdC„ ZBdD„ ZCdIdE„ZDdF„ ZEdG„ ZFdH„ ZGdS )Mz’Turn an element tree with style into a "before layout" box tree.

This includes creating anonymous boxes and processing whitespace as necessary.

é    Né   )Úhtml)Ú
propertiesÚtargets)Úcollapse_table_borders)ÚLOGGER)Úget_lang_quotesé   )Úboxes©ÚblockÚflow©Úinliner   )r   ú	flow-root)r   r   )r   Útable)r   r   )r   Úflex)r   r   )r   Úgrid)r   r   )z	table-row)ztable-row-group©ztable-header-group©ztable-footer-group)ztable-column)ztable-column-group)z
table-cell)ztable-captionc                 ó4   — i | ]}|t          |d z   ¦  «        “ŒS )iàþ  )Úchr)Ú.0Úis     út/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/weasyprint/formatting_structure/build.pyú
<dictcomp>r   -   s$   € Ð?Ð?Ð?¨�•C˜˜F™
‘O”OÐ?Ð?Ð?ó    é!   é   u   ã€€u   âˆ’)é    é-   z
?z[	 ]*
[	 ]*z[	 ]+c                 óœ   — t          | ¦  «        } t          | ¦  «        } t          | ¦  «        } t          | ¦  «        } t	          | ¦  «        } | S )zDCreate anonymous boxes in box descendants according to layout rules.)Úanonymous_table_boxesÚ
flex_boxesÚ
grid_boxesÚinline_in_blockÚblock_in_inline©Úboxs    r   Úcreate_anonymous_boxesr*   5   sD   € å
 Ñ
$Ô
$€CÝ
�S‰/Œ/€CÝ
�S‰/Œ/€CÝ
˜#Ñ
Ô
€CÝ
˜#Ñ
Ô
€CØ€Jr   c           	      ó,  ‡ ‡— t          ‰ ‰|||||¦  «        }|r|\  }ndˆ ˆfd„	}	t          ‰ |	|||||¦  «        \  }|                     ¦   «          t          |¦  «         t          |¦  «         d|_        t          |¦  «        }t          |¦  «        }|S )z=Build a formatting structure (box tree) from an element tree.Nc                 óF   •—  ‰| |¦  «        }|�| ‰k    rd|d<   nd|d<   |S )Nr   Údisplay©Únone© )ÚelementÚpseudo_typeÚstyleÚelement_treeÚ	style_fors      €€r   Úroot_style_forz2build_formatting_structure.<locals>.root_style_forJ   sA   ø€ Ø�I˜g {Ñ3Ô3ˆEØÐ Ø˜lÒ*Ð*Ø'8�E˜)Ñ$Ð$à'0�E˜)Ñ$ØˆLr   T©N)Úelement_to_boxÚcheck_pending_targetsÚprocess_whitespaceÚprocess_text_transformÚis_for_root_elementr*   Úset_viewport_overflow)
r4   r5   Úget_image_from_uriÚbase_urlÚtarget_collectorÚcounter_styleÚ	footnotesÚbox_listr)   r6   s
   ``        r   Úbuild_formatting_structurerD   ?   s×   øø€ õ Ø�iÐ!3°XØ˜-¨ñ4ô 4€Hð ð 8Ø‰ˆˆð	ð 	ð 	ð 	ð 	ð 	ð 	õ Ø˜.Ð*<¸hØ˜m¨Yñ8ô 8‰ˆð ×*Ò*Ñ,Ô,Ð,Ý�sÑÔÐÝ˜3ÑÔÐà"€CÔå
  Ñ
%Ô
%€CÝ
 Ñ
$Ô
$€CØ€Jr   c                 óN   — t          |d         d d…                  | |||¦  «        S )Nr-   r   )ÚBOX_TYPE_FROM_DISPLAY)Úelement_tagr3   Úcontentr1   s       r   Úmake_boxrI   a   s0   € Ý   yÔ!1°"°1°"Ô!5Ô6Ø�U˜G Wñ.ô .ð .r   c                 óæ  — t          | j        t          ¦  «        sg S  || ¦  «        }|d         }	|	dk    rg S |d         dk    r|d         dk    rd|d<   nd|d<   t          | j        |g | ¦  «        }
 || d	¦  «        |
_         || d
¦  «        |
_        |€dgddgidhgg f}|\  }}}}t          ||¦  «         g }|                     t          ¦   «         ¦  «         g }d|d         v r7t          t          | ||||||¦  «        ¦  «        }|                     |¦  «         |                     t          | d|||||¦  «        ¦  «         |d         r|                     |d         ||
¦  «         | j        }|r3|                     t          j                             |
|¦  «        ¦  «         | D �]D}t%          ||||||||¦  «        }|r—|d         j        d         dk    r€|d         }d|j        d<   |                     |¦  «          ||j        d¦  «        }t          |j        j        › d�|g |j        ¦  «        }t+          |||||||¦  «        |_        ||_        |g}|                     |¦  «         |j        }|rtt          j                             |
|¦  «        }|r=t          |d         t          j        ¦  «        r|d         xj        |j        z  c_        �Œ/|                     |¦  «         �ŒF|                     t          | d|||||¦  «        ¦  «         |                     ¦   «         D ]9}||                              ¦   «          ||         s|                     |¦  «         Œ:||
_        t5          | |
||||¦  «         |r\t7          |
j        ¦  «        dk    rD|d         dk    r8|
j                             t          j                             |
d¦  «        ¦  «         |d         dk    rq|d         dxx         dz  cc<    || d¦  «        }t          | j        › d�|g | ¦  «        }t+          |||||||¦  «        |_        |
j                             d|¦  «         t;          j        | |
||¦  «        S )a!  Convert an element and its children into a box with children.

    Return a list of boxes. Most of the time the list will have one item but
    may have zero or more than one.

    Eg.::

        <p>Some <em>emphasised</em> text.</p>

    gives (not actual syntax)::

        BlockBox[
            TextBox['Some '],
            InlineBox[
                TextBox['emphasised'],
            ],
            TextBox[' text.'],
        ]

    ``TextBox``es are anonymous inline boxes:
    See https://www.w3.org/TR/CSS21/visuren.html#anonymous

    r-   r.   ÚfloatÚfootnoteÚfootnote_displayr   r   r   úfirst-letterz
first-lineNr   ú	list-itemÚbeforeÚanchorr/   zfootnote-callz::footnote-calléÿÿÿÿÚafterr
   Úlist_style_positionÚoutsideu   â€‹zfootnote-markerz::footnote-marker)Ú
isinstanceÚtagÚstrrI   Úfirst_letter_styleÚfirst_line_styleÚupdate_countersÚappendÚsetÚlistÚmarker_to_boxÚextendÚbefore_after_to_boxÚstore_targetÚtextr   ÚTextBoxÚanonymous_fromr8   r3   r1   Úcontent_to_boxesÚchildrenrL   ÚtailÚpopÚset_content_listsÚlenÚinsertr   Úhandle_element)r1   r5   r>   r?   r@   rA   rB   Ústater3   r-   r)   Úquote_depthÚcounter_valuesÚcounter_scopesÚ_page_groupsrg   Úmarker_boxesrc   Úchild_elementÚchild_boxesrL   Ú
call_styleÚfootnote_callÚtext_boxÚnameÚmarker_styleÚmarkers                              r   r8   r8   f   sR  € õ2 �g”k¥3Ñ'Ô'ð àˆ	àˆI�gÑÔ€Eð �IÔ€GØ�)ÒÐØˆ	àˆW„~˜Ò#Ð#ØÐ#Ô$¨Ò/Ð/Ø0ˆE�)ÑÐð  2ˆE�)Ñå
�7”;  r¨7Ñ
3Ô
3€CØ&˜Y w°Ñ?Ô?€CÔØ$˜9 W¨lÑ;Ô;€CÔà€}ð ˆCà˜!˜ÐØˆ\ˆNØð
ˆð AFÑ=€K� °å�E˜5Ñ!Ô!Ð!à€Hð ×Ò�#™%œ%Ñ Ô Ð à€LØ�e˜IÔ&Ð&Ð&Ý�MØ�U˜E 9Ð.@Ø˜mñ-ô -ñ .ô .ˆð 	�Š˜Ñ%Ô%Ð%à‡O‚OÕ'Ø�˜5 )Ð-?Ø˜-ñ)ô )ñ *ô *ð *ð ˆX„ð LØ×%Ò% e¨H¤o°~ÀsÑKÔKÐKàŒ<€DØð AØ�Š�œ×4Ò4°S¸$Ñ?Ô?Ñ@Ô@Ð@à ð *ñ *ˆÝ$Ø˜9Ð&8¸(Ø˜m¨Y¸ñ?ô ?ˆð ð 	*˜; qœ>Ô/°Ô8¸JÒFÐFØ" 1”~ˆHØ&,ˆHŒN˜7Ñ#Ø×Ò˜XÑ&Ô&Ð&Ø"˜ 8Ô#3°_ÑEÔEˆJÝ$ØÔ#Ô'Ð8Ð8Ð8¸*ÀbØÔ ñ"ô "ˆMõ &6Ø˜M¨;¸Ø"Ð$4°mñ&Eô &EˆMÔ"ð &.ˆMÔ"Ø(˜/ˆKà�Š˜Ñ$Ô$Ð$ØÔ!ˆØð 	*Ý”}×3Ò3°C¸Ñ>Ô>ˆHØð *�J x°¤|µU´]ÑCÔCð *Ø˜”Ð!Ô! X¤]Ñ2Ð!Ô!Ñ!à—’ Ñ)Ô)Ð)ùà‡O‚OÕ'Ø�˜% Ð,>Ø˜-ñ)ô )ñ *ô *ð *ð
 ×"Ò"Ñ$Ô$ð %ð %ˆØ�tÔ× Ò Ñ"Ô"Ð"Ø˜dÔ#ð 	%Ø×Ò˜tÑ$Ô$Ð$øà€C„LÝØ��e˜^Ð-=¸}ñNô Nð Nð ð J�˜CœLÑ)Ô)¨QÒ.Ð.ð Ð&Ô'¨9Ò4Ð4ØŒL×Ò¥¤× <Ò <¸SÀ%Ñ HÔ HÑIÔIÐIàˆW„~˜Ò#Ð#Ø�zÔ" 2Ð&Ð&Ô&¨!Ñ+Ð&Ð&Ñ&Ø �y Ð*;Ñ<Ô<ˆÝØŒ{Ð-Ð-Ð-¨|¸RÀñJô Jˆå*Ø˜& +¨~Ð?QØ˜mñ-ô -ˆŒð 	Œ×Ò˜A˜vÑ&Ô&Ð&õ Ô˜w¨Ð-?ÀÑJÔJÐJr   c                 ó   —  || |¦  «        }|r|€g S |d         }|dk    rg S |d         }	|	dv rg S t          | j        › d|› �|g | ¦  «        }
|\  }}}}t          ||¦  «         g }d|v r7t          t	          | ||||||¦  «        ¦  «        }|                     |¦  «         |                     t          ||
|||||¦  «        ¦  «         ||
_        |d         d	k    r!|\  }}}}t          | |
|d
         |||¦  «         |
gS )z8Return the boxes for ::before or ::after pseudo-element.Nr-   r.   rH   )ÚnormalÚinhibitr/   ú::rO   Úbookmark_levelr/   Úbookmark_label)	rI   rW   r[   r^   r_   r`   rf   rg   Úcompute_bookmark_label)r1   r2   rn   r5   r>   r@   rA   r3   r-   rH   r)   ro   rp   Ú_counter_scopesrr   rg   rs   Ú_quote_depths                     r   ra   ra     s}  € ð ˆI�g˜{Ñ+Ô+€EØð �u�}ð ˆ	ð
 �IÔ€GØ�)ÒÐØˆ	Ø�IÔ€GØÐ/Ð/Ð/Øˆ	Ý
�g”kÐ2Ð2 [Ð2Ð2°E¸2¸wÑ
GÔ
G€CàAFÑ>€K� °,Ý�E˜5Ñ!Ô!Ð!à€Hà�gÐÐÝ�MØ�U˜E 9Ð.@Ø˜mñ-ô -ñ .ô .ˆð 	�Š˜Ñ%Ô%Ð%à‡O‚OÕ$Øˆs�K Ð1CØ˜-ñ)ô )ñ *ô *ð *ð €C„Lð ÐÔ &Ò(Ð(ØFKÑCˆ�n o°|ÝØ�S˜%Ð 0Ô1°>Ø˜mñ	-ô 	-ð 	-ð ˆ5€Lr   c              #   ó€  K  —  || d¦  «        }g }|\  }	}
}}t          | j        › d�||| ¦  «        }|d         dk    rdS |d         \  }}|d         dvr)|                     t          |||	|
|||¦  «        ¦  «         nÚ|d	k    rJ |||d
         ¬¦  «        }|�5t          j                             ||¦  «        }|                     |¦  «         |sˆ|d         dk    r||
                     ddg¦  «        d         }|d         }| 	                    ||¦  «        x}r?t          j
                             ||¦  «        }d|j        d<   |                     |¦  «         |sdS |d         dk    r2t          j                             ||¦  «        }d|j        d<   d|_        n t          j                             ||¦  «        }|V — dS )zyYield the box for ::marker pseudo-element if there is one.

    https://drafts.csswg.org/css-lists-3/#marker-pseudo

    r{   ú::markerr-   r.   NÚlist_style_imagerH   )r}   r~   ÚurlÚimage_orientation©rˆ   ÚorientationÚlist_style_typer/   rO   r   rR   zpre-wrapÚwhite_spacerT   rU   ÚabsoluteÚpositionT)rI   rW   r`   rf   r   ÚInlineReplacedBoxre   r\   ÚgetÚrender_markerrd   r3   ÚBlockBoxÚis_outside_markerÚ	InlineBox)r1   rn   Úparent_styler5   r>   r@   rA   r3   rg   ro   rp   rƒ   rr   r)   Ú
image_typeÚimageÚcounter_valueÚcounter_typeÚmarker_textÚ
marker_boxs                       r   r_   r_   4  s(  è è € ð ˆI�g˜xÑ(Ô(€Eà€Hð
 BGÑ>€K� °,å
�g”kÐ+Ð+Ð+¨U°H¸gÑ
FÔ
F€CàˆYÔ˜9Ò$Ð$ØˆàÐ0Ô1Ñ€J�àˆYÔÐ4Ð4Ð4Ø�ŠÕ(Ø�3˜ ^Ð5GØ˜mñ-ô -ñ 	.ô 	.ð 	.ð 	.ð
 ˜ÒÐà&Ð&Ø uÐ-@Ô'AðCñ Cô CˆEàÐ ÝÔ-×<Ò<¸SÀ%ÑHÔH�Ø—’ Ñ$Ô$Ð$àð 	%˜EÐ"3Ô4¸Ò>Ð>Ø*×.Ò.¨{¸Q¸CÑ@Ô@ÀÔDˆMØ Ð!2Ô3ˆLØ+×9Ò9¸,ÈÑVÔVÐVˆ{ð %Ý”m×2Ò2°3¸ÑDÔD�Ø+5�”	˜-Ñ(Ø—’ Ñ$Ô$Ð$àð ØˆàÐ)Ô*¨iÒ7Ð7Ý”^×2Ò2°3¸ÑAÔAˆ
ð (2ˆ
Ô˜Ñ$Ø'+ˆ
Ô$Ð$å”_×3Ò3°C¸ÑBÔBˆ
Ø
ÐÐÐÐÐr   c                 ó  ‡‡‡.‡/‡0— g Š.t          ¦   «         Š0ˆ.ˆ0ˆfd„}g }i }|duo|du}|j        o| }‰j        €#d„ |                     ¦   «         D ¦   «         ‰_        | D �]�\  }}|dk    r ||¦  «         Œ|dk    r\|�Z|\  }}|dk    rŒ, ||‰j        d         ¬¦  «        }|�3‰.                     t          j                             ‰|¦  «        ¦  «         Œz|d	k    rt          |‰¦  «        } ||¦  «         Œœ|d
k    rC|s)t          j        dd                     |¦  «        ¦  «         ŒÍ | |j        |g|¢R Ž ¦  «         Œå|dv rÊ|d         |d         c}Š/‰/dk    r�Œ|r)|t          |¦  «        |z   vr|                     |¦  «         |dk    r4|                     |dg¦  «        d         }‰                     |‰/¦  «        }n?|d         }|                     ˆˆ/fd„|                     |dg¦  «        D ¦   «         ¦  «        } ||¦  «         �Œ³|dv �rd|dd…         |d         c\  }}Š/‰/dk    r�ŒÖ|                     |‰||¦  «        }|j        dk    r �n“|j        j        }|rG||vrCt)          j        |¦  «        } |                     | g ¦  «        }||vr|                     |¦  «         |j                             ¦   «         }!|!                     |¦  «         |dk    r4|!                     |dg¦  «        d         }‰                     |‰/¦  «        }nV|d         }|d         dk    r �n¿|d         }"|"                     ˆˆ/fd„|!                     |dg¦  «        D ¦   «         ¦  «        } ||¦  «         �Œ|dk    rO|\  }}#|                     |‰||¦  «        }|j        dk    r$|j        }$t          |#|$¦  «        } ||¦  «         �Œn �n|dk    r³d||	fvr­d|v }%|                     d¦  «         o|	dk    }&|%st7          d|d         dz
  ¦  «        |d<   |&rY|	dk    rt9          |
¦  «        \  }'}(n|	\  }'}(|%r|'n|(}) ||)t;          |d         t=          |)¦  «        dz
  ¦  «                 ¦  «         |%r|dxx         dz  cc<   �Œ*|dk    rÖ|s*t          j        dd                     |¦  «        ¦  «         �Œ\ |j        |g|¢R Ž }*|*€�Œn|*                      ¦   «         }*d |*j        d!<   tC          |*t          j"        ¦  «        rI|* #                    ¦   «         D ]4}+|+j        d"         d#v rŒtI          |+j        |+||||‰||¬$¦	  «	        |+_%        Œ5‰.                     |*¦  «         �Œ|d%k    r�|d         s�Œt          j&                             ‰|d         ¦  «        },t          j'                             ‰|,f¦  «        }-d&|-j        d'<   d&|,j        d'<   d(|-_(        ‰.                     |-¦  «         �Œ�‰0s‰.r| )                    ‰||||¦  «         ‰.S dS ))ae  Compute and return the boxes corresponding to the ``content_list``.

    ``parse_again`` is called to compute the ``content_list`` again when
    ``target_collector.lookup_target()`` detected a pending target.

    ``build_formatting_structure`` calls
    ``target_collector.check_pending_targets()`` after the first pass to do
    required reparsing.

    c                 ó  •— ‰                      d¦  «         | ro‰r8t          ‰d         t          j        ¦  «        r‰d         xj        | z  c_        d S ‰                     t          j                             ‰| ¦  «        ¦  «         d S d S )NTrR   )ÚaddrV   r   rd   rc   r\   re   )rc   Úcontent_boxesÚhas_textÚ
parent_boxs    €€€r   Úadd_textz&compute_content_list.<locals>.add_text†  s§   ø€ Ø�Š�TÑÔÐØð 	DØð D¥¨M¸"Ô,=½u¼}Ñ!MÔ!Mð DØ˜bÔ!Ð&Ô&¨$Ñ.Ð&Ô&Ð&Ð&à×$Ò$Ý”M×0Ò0°¸TÑBÔBñDô Dð Dð Dð Dð		Dð 	Dr   Nc                 ó>   — i | ]\  }}||                      ¦   «         “ŒS r0   )Úcopy)r   ÚkeyÚvalues      r   r   z(compute_content_list.<locals>.<dictcomp>š  s9   € ð ,Hð ,Hð ,HÙ", # uˆC�—’‘”ð,Hð ,Hð ,Hr   Ústringrˆ   Úexternalr‰   rŠ   z	content()zstring()z,"string(%s)" is only allowed in page marginsú )ú	counter()z
counters()r   rR   r/   r«   r
   c              3   óD   •K  — | ]}‰                      |‰¦  «        V — Œd S r7   ©Úrender_value©r   r™   rA   rš   s     €€r   ú	<genexpr>z'compute_content_list.<locals>.<genexpr>Á  sO   øè è € ð &Pð &Pà%ð "×.Ò.¨}¸lÑKÔKð&Pð &Pð &Pð &Pð &Pð &Pr   )útarget-counter()ztarget-counters()r   z
up-to-dater±   c              3   óD   •K  — | ]}‰                      |‰¦  «        V — Œd S r7   r­   r¯   s     €€r   r°   z'compute_content_list.<locals>.<genexpr>à  sO   øè è € ð -Pð -Pà%ð "×.Ò.¨}¸lÑKÔKð-Pð -Pð -Pð -Pð -Pð -Pr   ztarget-text()ÚquoteÚopenzno-Úautoz	element()z-"element(%s)" is only allowed in page marginsÚstaticr�   rH   )r}   r/   )ÚcontextÚpagezleader()Úprer�   T)*r]   Ú
collectingÚcached_counter_valuesÚitemsr3   r\   r   r�   re   Úextract_textr   ÚwarningÚjoinÚget_string_set_forr^   r‘   r®   Úlookup_targetrn   Ú
target_boxr   Úanchor_name_from_tokenÚ
setdefaultÚcached_page_counter_valuesr¥   ÚupdateÚ
startswithÚmaxr	   Úminrk   Úget_running_element_forÚdeepcopyrV   Ú	ParentBoxÚdescendantsrf   rg   rd   r•   Ú	is_leaderÚcollect_missing_counters)1Úcontent_listr¢   rp   Ú	css_tokenÚparse_againr@   rA   r>   ro   Úquote_styleÚlangr·   r¸   r1   r£   Úmissing_countersÚmissing_target_countersÚin_page_contextÚneed_collect_missingÚtype_r§   ÚoriginÚurir˜   Ú
added_textÚcounter_namer™   rc   Ú	separatorÚanchor_tokenrÁ   Útarget_valuesÚanchor_nameÚlocal_countersÚseparator_stringÚ
text_stylerÂ   Úis_openrl   Úopen_quotesÚclose_quotesÚquotesÚnew_boxÚchildrx   Ú
leader_boxr    rš   r¡   s1    `    `                                       @@@r   Úcompute_content_listrì   o  s  øøøøø€ ð( €MÝ‰uŒu€HðDð Dð Dð Dð Dð Dð Dð ÐØ ÐØ TÐ)Ð>¨d¸$Ð.>€Oð ,Ô6ÐN¸Ð;NÐàÔ'Ð/ð,Hð ,HØ0>×0DÒ0DÑ0FÔ0Fð,Hñ ,Hô ,Hˆ
Ô(à$ð A-ñ A-‰ˆˆuØ�HÒÐØˆH�U‰OŒOˆOˆOØ�eŠ^ˆ^Ð 2Ð >Ø‰KˆF�CØ˜Ò#Ð#àØ&Ð&Ø ZÔ%5Ð6IÔ%JðLñ Lô LˆEàÐ Ø×$Ò$ÝÔ+×:Ò:¸:ÀuÑMÔMñOô Oð Oøà�kÒ!Ð!Ý% e¨ZÑ8Ô8ˆJØˆH�ZÑ Ô Ð Ð Ø�jÒ Ð Ø"ð õ ”ØBØ—H’H˜U‘O”Oñ%ô %ð %ð ØˆHÐ/�WÔ/°Ð=°uÐ=Ð=Ð=Ñ>Ô>Ð>Ð>ØÐ1Ð1Ð1Ø).¨q¬°5¸´9Ð&ˆL˜,Ø˜vÒ%Ð%ÙØ#ð :Ø¥t¨NÑ';Ô';Ð>NÑ'NÐNÐNØ$×+Ò+¨LÑ9Ô9Ð9Ø˜Ò#Ð#Ø .× 2Ò 2°<À!ÀÑ EÔ EÀbÔ I�Ø$×1Ò1°-ÀÑNÔN��à! !œH�	Ø —~’~ð &Pð &Pð &Pð &Pð &Pà)7×);Ò);¸LÈ1È#Ñ)NÔ)Nð&Pñ &Pô &Pñ Pô P�ð ˆH�T‰NŒNˆN‰NØÐ?Ð?Ñ?Ø9>¸rÀ¸r¼ÀEÈ"ÄIÐ6Ñ(ˆ\˜<¨,Ø˜vÒ%Ð%ÙØ,×:Ò:Ø˜j¨)°[ñBô BˆMàÔ" lÒ2Ð2Ø‘Ø)Ô4ÔJˆMØ#ð :¨¸MÐ(IÐ(IÝ%Ô<¸\ÑJÔJ�Ø#:×#EÒ#EØ ñ$%ô $%Ð àÐ'7Ð7Ð7Ø$×+Ò+¨LÑ9Ô9Ð9ð +ÔE×JÒJÑLÔLˆNØ×!Ò! -Ñ0Ô0Ð0ØÐ*Ò*Ð*Ø .× 2Ò 2°<À!ÀÑ EÔ EÀbÔ I�Ø$×1Ò1°-ÀÑNÔN��à! !œH�	Ø˜Q”< 8Ò+Ð+Ø‘EØ#,¨Q¤<Ð Ø'×,Ò,ð -Pð -Pð -Pð -Pð -Pà)7×);Ò);¸LÈ1È#Ñ)NÔ)Nð-Pñ -Pô -Pñ Pô P�ð ˆH�T‰NŒNˆN‰NØ�oÒ%Ð%Ø',Ñ$ˆL˜*Ø,×:Ò:Ø˜j¨)°[ñBô BˆMàÔ" lÒ2Ð2Ø*Ô5�
õ $ J°
Ñ;Ô;�Ø�˜‘”�‘à‘Ø�gÒÐ $¨{¸KÐ.HÐ"HÐ"HØ �oˆGØ×)Ò)¨%Ñ0Ô0Ð0ÐJ°[ÀFÒ5JˆFØð <Ý!$ Q¨°A¬¸Ñ(:Ñ!;Ô!;�˜A‘Øð GØ &Ò(Ð(Ý0?ÀÑ0EÔ0EÑ-�K  à0;Ñ-�K Ø(/ÐA˜˜°\�Ø�˜¥ K°¤NµC¸±K´KÀ!±OÑ DÔ DÔEÑFÔFÐFØð $Ø˜A��” !Ñ#��‘ùØ�kÒ!Ð!Ø"ð Ý”ØCØ—H’H˜U‘O”Oñ%ô %ð %ñ Ø5�gÔ5°dÐC¸UÐCÐCÐCˆGØˆÙØ×&Ò&Ñ(Ô(ˆGØ(0ˆGŒM˜*Ñ%Ý˜'¥5¤?Ñ3Ô3ð 4Ø$×0Ò0Ñ2Ô2ð 4ð 4�EØ”{ 9Ô-Ð1CÐCÐCØ Ý%5Øœ U¨K¸Ø*Ð,<¸mØ '¨dð&4ñ &4ô &4�E”N�Nð × Ò  Ñ)Ô)Ð)Ñ)Ø�jÒ Ð Ø˜”8ð ÙÝ”}×3Ò3°JÀÀaÄÑIÔIˆHÝœ×7Ò7Ø˜X˜Kñ)ô )ˆJð /4ˆJÔ˜]Ñ+à,1ˆHŒN˜=Ñ)Ø#'ˆJÔ Ø× Ò  Ñ,Ô,Ð,ùàð �=ð à×1Ò1Ø˜	 ;Ð0@Ø#ñ	%ô 	%ð 	%ð Ððð r   c	                 óº   ‡ ‡‡‡‡‡— dˆˆˆˆˆ ˆfd„	}	‰ d         dk    rg S |dd…         Šd}
t          ‰ d         ‰||
|	‰‰‰|‰ d         ‰ d         ||¦  «        }|pg S )z:Take the value of a ``content`` property and return boxes.Nc                 ór  •— | €i }n|                       ¦   «         }|                     ‰j        ¦  «         g }|                     t	          ‰‰‰|‰‰‰¦  «        ¦  «         t          ‰j        ¦  «        dk    r9t          ‰j        d         t          j	        ¦  «        r|‰j        d         _        dS |‰_        dS )z9Closure to parse the ``parent_boxes`` children all again.Nr
   r   )
r¥   rÆ   r»   r`   rf   rk   rg   rV   r   ÚLineBox)	Úmixin_pagebased_countersrâ   Úlocal_childrenrA   r>   Úorig_quote_depthr¢   r3   r@   s	      €€€€€€r   rÒ   z%content_to_boxes.<locals>.parse_again+  sÓ   ø€ ð
 $Ð+ØˆNˆNà5×:Ò:Ñ<Ô<ˆNØ×Ò˜jÔ>Ñ?Ô?Ð?àˆØ×ÒÕ.Ø�:Ð/°ØÐ 0°-ñAô Añ 	Bô 	Bð 	Bõ �
Ô#Ñ$Ô$¨Ò)Ð)Ý˜:Ô.¨qÔ1µ5´=ÑAÔAð *à.<ˆJÔ Ô"Ô+Ð+Ð+à"0ˆJÔÐÐr   rH   r~   rè   rÔ   r7   )rì   )r3   r¢   ro   rp   r>   r@   rA   r·   r¸   rÒ   rÑ   rC   rò   s   ``  ```     @r   rf   rf   '  s¯   øøøøøø€ ð1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð4 ˆYÔ˜9Ò$Ð$Øˆ	à" 1 1 1”~ÐØ€IÝ#ØˆiÔ˜* n°iÀØ˜-Ð);¸[ØˆhŒ˜˜vœ¨°ñ7ô 7€Hð ˆ>�rÐr   c           
      óB  ‡ ‡‡‡‡‡— dˆˆˆˆ ˆˆfd„	}d‰› �}t          ‰‰|||‰‰‰ ¬¦  «        }	|	�od                     d„ |	D ¦   «         ¦  «        }
‰j        D ]*}|d         ‰k    r‰j                             |¦  «          nŒ+‰j                             ‰|
f¦  «         dS dS )	zCParse the content-list value of ``string_name`` for ``string-set``.Nc           	      ó˜   •— | €i }n|                       ¦   «         }|                     ‰j        ¦  «         t          ‰‰‰‰|‰‰¦  «         dS )z7Closure to parse the string-set string value all again.N)r¥   rÆ   r»   Úcompute_string_set)rð   râ   r)   rÐ   rA   r1   Ústring_namer@   s     €€€€€€r   rÒ   z'compute_string_set.<locals>.parse_againT  sf   ø€ ð $Ð+ØˆNˆNà5×:Ò:Ñ<Ô<ˆNØ×Ò˜cÔ7Ñ8Ô8Ð8ÝØ�S˜+ |°^Ø˜mñ	-ô 	-ð 	-ð 	-ð 	-r   zstring-set::©r1   Ú c              3   óX   K  — | ]%}t          |t          j        ¦  «        ¯|j        V — Œ&d S r7   ©rV   r   rd   rc   ©r   r)   s     r   r°   z%compute_string_set.<locals>.<genexpr>f  sR   è è € ð Lð LØ­J°s½E¼MÑ,JÔ,JðLØŒHðLð Lð Lð Lð Lð Lr   r   r7   )rì   r¿   Ú
string_setÚremover\   )r1   r)   rö   rÐ   rp   r@   rA   rÒ   rÑ   rC   r¨   Ústring_set_tuples   ```` ``     r   rõ   rõ   Q  s"  øøøøøø€ ð-ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -˜{Ð,Ð,€IÝ#Ø�c˜>¨9°kØ˜-°ð:ñ :ô :€Hð ÐØ—’ð Lð LØ (ðLñ Lô Lñ Lô Lˆð !$¤ð 	ð 	ÐØ Ô" kÒ1Ð1Ø”×%Ò%Ð&6Ñ7Ô7Ð7Ø�ð 2ð 	Œ×Ò˜{¨FÐ3Ñ4Ô4Ð4Ð4Ð4ð Ðr   c           
      ó¦   ‡ ‡‡‡‡— dˆˆˆˆ ˆfd„	}d}t          ‰‰|||‰‰‰ ¬¦  «        }|r&d                     d„ |D ¦   «         ¦  «        ‰_        dS dS )z5Parses the content-list value for ``bookmark-label``.Nc                 ó–   •— | €i }n|                       ¦   «         }|                     ‰j        ¦  «         t          ‰‰‰|‰‰¦  «         dS )z.Closure to parse the bookmark-label all again.N)r¥   rÆ   r»   r‚   )rð   râ   r)   rÐ   rA   r1   r@   s     €€€€€r   rÒ   z+compute_bookmark_label.<locals>.parse_againt  se   ø€ ð $Ð+ØˆNˆNà5×:Ò:Ñ<Ô<ˆNØ×Ò˜cÔ7Ñ8Ô8Ð8ÝØ�S˜,¨Ð8HØñ	ô 	ð 	ð 	ð 	r   zbookmark-labelr÷   rø   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r7   )Úbox_textrû   s     r   r°   z)compute_bookmark_label.<locals>.<genexpr>†  s(   è è € Ð$GÐ$G°s¥X¨c¡]¤]Ð$GÐ$GÐ$GÐ$GÐ$GÐ$Gr   r7   )rì   r¿   r�   )	r1   r)   rÐ   rp   r@   rA   rÒ   rÑ   rC   s	   ``` ``   r   r‚   r‚   q  s¦   øøøøø€ ðð ð ð ð ð ð ð ð ð ð !€IÝ#Ø�c˜>¨9°kØ˜-°ð:ñ :ô :€Hð ð HØŸWšWÐ$GÐ$G¸hÐ$GÑ$GÔ$GÑGÔGˆÔÐÐðHð Hr   c           
      óÂ   — g |_         |d         dk    r#|d         D ]\  }}t          | ||||||¦  «         Œ|d         dk    rt          | ||d         |||¦  «         dS dS )zˆSet the content-lists values.

    These content-lists are used in GCPM properties like ``string-set`` and
    ``bookmark-label``.

    rü   r/   r€   r�   N)rü   rõ   r‚   )r1   r)   r3   rp   r@   rA   rö   Ústring_valuess           r   rj   rj   ‰  s¦   € ð €C„NØˆ\Ô˜fÒ$Ð$Ø*/°Ô*=ð 	1ð 	1Ñ&ˆK˜ÝØ˜˜k¨=¸.Ø  -ñ1ô 1ð 1ð 1ð ÐÔ &Ò(Ð(ÝØ�S˜%Ð 0Ô1°>Ø˜mñ	-ô 	-ð 	-ð 	-ð 	-ð )Ð(r   c                 ó¬  — | \  }}}}|d         }|d         D ]b\  }}||v r||                               ¦   «          n|                     |¦  «         |                     |g ¦  «                             |¦  «         Œc|d         D ]R\  }}|                     |g ¦  «        }	|	s0||vsJ ‚|                     |¦  «         |	                     d¦  «         ||	d<   ŒS|d         }
|
dk    rd|d         v rd	g}
ng }
|
D ]]\  }}|                     |g ¦  «        }	|	s0||vsJ ‚|                     |¦  «         |	                     d¦  «         |	dxx         |z  cc<   Œ^d
S )z$Handle the ``counter-*`` properties.rR   Úcounter_resetÚcounter_setr   Úcounter_incrementrµ   rO   r-   )rO   r
   N)ri   rŸ   rÄ   r\   )rn   r3   r„   rp   rq   rr   Úsibling_scopesry   r§   Úvaluesr  s              r   r[   r[   �  sÍ  € àAFÑ>€L�. .°,Ø# BÔ'€Nà˜_Ô-ð :ð :‰ˆˆeØ�>Ð!Ð!Ø˜4Ô ×$Ò$Ñ&Ô&Ð&Ð&à×Ò˜tÑ$Ô$Ð$Ø×!Ò! $¨Ñ+Ô+×2Ò2°5Ñ9Ô9Ð9Ð9à˜]Ô+ð ð ‰ˆˆeØ×*Ò*¨4°Ñ4Ô4ˆØð 	Ø˜~Ð-Ð-Ð-Ð-Ø×Ò˜tÑ$Ô$Ð$Ø�MŠM˜!ÑÔÐØˆˆr‰
ˆ
àÐ1Ô2ÐØ˜FÒ"Ð"ð
 ˜% 	Ô*Ð*Ð*Ø!1Ð 2ÐÐà "ÐØ(ð ð ‰ˆˆeØ×*Ò*¨4°Ñ4Ô4ˆØð 	Ø˜~Ð-Ð-Ð-Ð-Ø×Ò˜tÑ$Ô$Ð$Ø�MŠM˜!ÑÔÐØˆrˆ
ˆ
Œ
�eÑˆ
ˆ
‰
ˆ
ðð r   z\Sc                 óX   — t          | t          j        ¦  «        o || j        ¦  «         S )z9Return True if ``box`` is a TextBox with only whitespace.rú   )r)   Ú_has_non_whitespaces     r   Úis_whitespacer  Ä  s*   € å�c�5œ=Ñ)Ô)ÐOÐ2EÐ2EÀcÄhÑ2OÔ2OÐ.OÐOr   c              #   ó&  ‡K  — |€ˆfd„}g }|D ]T} ||¦  «        r2|r+‰                      | g ¬¦  «        }t          ||¦  «        V — g }|V — Œ?|                     |¦  «         ŒU|r+‰                      | g ¬¦  «        }t          ||¦  «        V — dS dS )z£Wrap consecutive children that do not pass ``test`` in a ``wrapper_type`` box.

    ``test`` defaults to children being of the same type as ``wrapper_type``.

    Nc                 ó$   •— t          | ‰¦  «        S r7   )rV   )rê   Úwrapper_types    €r   Útestzwrap_improper.<locals>.testÐ  s   ø€ Ý˜e \Ñ2Ô2Ð2r   )rg   )re   Útable_boxes_childrenr\   )r)   rg   r  r  Úimproperrê   Úwrappers     `    r   Úwrap_improperr  É  sì   øè è € ð €|ð	3ð 	3ð 	3ð 	3ð 	3à€HØð 	#ð 	#ˆØˆ4�‰;Œ;ð 	#Øð Ø&×5Ò5°cÀBÐ5ÑGÔG�å*¨7°HÑ=Ô=Ð=Ð=Ð=Ø�ØˆKˆKˆKˆKà�OŠO˜EÑ"Ô"Ð"Ð"Øð 6Ø×-Ò-¨c¸BÐ-Ñ?Ô?ˆå" 7¨HÑ5Ô5Ð5Ð5Ð5Ð5Ð5ð6ð 6r   c                 ó¤   — t          | t          j        ¦  «        r|                      ¦   «         r| S d„ | j        D ¦   «         }t          | |¦  «        S )z Remove and add boxes according to the table model.

    Take and return a ``Box`` object.

    See https://www.w3.org/TR/CSS21/tables.html#anonymous-boxes

    c                 ó,   — g | ]}t          |¦  «        ‘ŒS r0   )r#   ©r   rê   s     r   ú
<listcomp>z)anonymous_table_boxes.<locals>.<listcomp>ï  s!   € ÐGÐGÐG°Õ% eÑ,Ô,ÐGÐGÐGr   )rV   r   rÌ   Ú
is_runningrg   r  ©r)   rg   s     r   r#   r#   ã  sV   € õ �c�5œ?Ñ+Ô+ð ¨s¯~ª~Ñ/?Ô/?ð Øˆ
ð HÐG¸#¼,ÐGÑGÔG€HÝ  XÑ.Ô.Ð.r   c           	      óf  ‡ ‡— t          ‰ t          j        ¦  «        rg }n_t          ‰ t          j        ¦  «        rEd„ |D ¦   «         }|s7‰ j        �‰ j        dk     rd}n‰ j        }ˆ fd„t          |¦  «        D ¦   «         }‰ j        r•t          |¦  «        dk    r‚|dd…         \  }}|j        r#t          |¦  «        r| 
                    ¦   «          t          |¦  «        dk    r8|dd…         \  }}|j        r$t          |¦  «        r| 
                    d¦  «         d„ t          dg|dd	…         ¢|g |dd…         ¢d‘¦  «        D ¦   «         }t          ‰ t          j        ¦  «        rt          ‰ |t          j        d
„ ¦  «        }n5t          ‰ t          j        ¦  «        rt          ‰ |t          j        ¦  «        }t          ‰ t          j        ¦  «        rt          ‰ |t          j        ¦  «        }nt          ‰ |t          j        d„ ¦  «        }t          ‰ t          j        ¦  «        rt          ‰ |t          j        d„ ¦  «        }n.t'          ‰ ¦  «        Št          ‰ |t          j        ˆfd„¦  «        }t          ‰ t          j        ¦  «        rt)          ‰ |¦  «        S t+          |¦  «        ‰ _        ‰ S )z3Internal implementation of anonymous_table_boxes().c                 óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r0   )rV   r   ÚTableColumnBoxr  s     r   r  z(table_boxes_children.<locals>.<listcomp>ú  s;   € ð 
ð 
ð 
ØÝ˜%¥Ô!5Ñ6Ô6ð
Øð
ð 
ð 
r   Nr
   c                 óP   •— g | ]"}t           j                             ‰g ¦  «        ‘Œ#S r0   )r   r  re   )r   Ú_r)   s     €r   r  z(table_boxes_children.<locals>.<listcomp>  s<   ø€ ð .ð .ð .Øõ Ô,×;Ò;¸CÀÑDÔDð .ð .ð .r   r   éþÿÿÿr   c                 ó\   — g | ])\  }}}|r|j         r|r|j         rt          |¦  «        °'|‘Œ*S r0   )Úinternal_table_or_captionr  )r   Ú
prev_childrê   Ú
next_childs       r   r  z(table_boxes_children.<locals>.<listcomp>  sl   € ð ð ð á)ˆJ˜˜zð ðð &Ô?ðð ðð &Ô?ðõ ˜%Ñ Ô ðØðð ð r   rR   c                 ó   — | j         S r7   ©Úproper_table_child©rê   s    r   ú<lambda>z&table_boxes_children.<locals>.<lambda>0  s	   € ˜%Ô2€ r   c                 ó8   — t          | t          j        ¦  «         S r7   )rV   r   ÚTableCellBoxr)  s    r   r*  z&table_boxes_children.<locals>.<lambda><  s   € �j¨µÔ0BÑCÔCÐC€ r   c                 ó   — | j          S r7   r'  r)  s    r   r*  z&table_boxes_children.<locals>.<lambda>B  s   € ˜eÔ6Ð6€ r   c                 ó&   •— | j          p‰| j        v S r7   )r(  Úproper_parents)rê   Úparent_types    €r   r*  z&table_boxes_children.<locals>.<lambda>G  s    ø€ ˜uÔ7Ð7ð ?Ø&¨%Ô*>Ð>ð r   )rV   r   r  ÚTableColumnGroupBoxÚspanÚrangeÚtabular_containerrk   r#  r  ri   ÚzipÚTableBoxr  ÚTableRowBoxÚTableRowGroupBoxr,  r•   ÚInlineTableBoxÚtypeÚ
wrap_tabler^   rg   )r)   rg   r2  Úinternalrc   r0  s   `    @r   r  r  ó  s  øø€ å�#•uÔ+Ñ,Ô,ð .àˆˆÝ	�C�Ô2Ñ	3Ô	3ð .ð
ð 
Ø'ð
ñ 
ô 
ˆð ð 	.ØŒxÐ 3¤8¨a¢< <Ø��à”x�ð.ð .ð .ð .Ý!& t¡¤ð.ñ .ô .ˆHð Ôð  ¥ X¡¤°!Ò!3Ð!3ð " " # #œ‰ˆ�$ØÔ.ð 	µ=ÀÑ3FÔ3Fð 	Ø�LŠL‰NŒNˆNõ ˆx‰=Œ=˜AÒÐØ% b q bœ\‰NˆD�(ØÔ2ð  µ}ÀTÑ7JÔ7Jð  Ø—’˜Q‘”�ð
ð å-0ØÐ"�H˜S˜b˜S”MÐ"ØØ!ˆh�q�r�rŒlÐ!˜DÐ!ñ.
ô .
ðñ ô €Hõ �#•u”~Ñ&Ô&ð Cå Ø��5Ô,Ø2Ð2ñ4ô 4ˆˆõ 
�C�Ô/Ñ	0Ô	0ð Cå   hµÔ0AÑBÔBˆå�#•uÔ(Ñ)Ô)ð Eå   hµÔ0BÑCÔCˆˆõ !Ø��5Ô,ØCÐCñEô Eˆõ
 �#•u”Ñ'Ô'ð 	AÝ Ø��5Ô/Ø6Ð6ñ8ô 8ˆˆõ ˜3‘i”iˆÝ Ø��5œ>ð@ð @ð @ð @ñAô Aˆõ
 �#•u”~Ñ&Ô&ð Ý˜#˜xÑ(Ô(Ð(å˜H‘~”~ˆŒØˆ
r   c           
      ó†  — g }g }g }t           j        |t           j        |t           j        |t           j        |t           j        |i}|D ]*}|t          |¦  «                                      |¦  «         Œ+g g dœ}|D ](}||j        d                                       |¦  «         Œ)t          t          | |t           j        ¦  «        ¦  «        }	d}
|	D ]1}|
|_        |j        r|j        D ]}|
|_        |
dz  }
ŒŒ'|
|j        z  }
Œ2|
}t          | |t           j        ¦  «        }g }d}d}|D ]H}|j        d         }|dk    r|€
d|_        |}Œ!|d	k    r|€
d|_        |}Œ3|                     |¦  «         ŒI|�|gng |z   |�|gng z   }d}|D �]}d
„ |j        D ¦   «         }|j        D ]Û}|                     d¦  «        }d}
|j        D ]º}|
|v r	|
dz  }
|
|v °	|
|_        |
|j        z   }|j        dk    r}t'          |¦  «        dz   }|j        dk    r
|}||_        n,t)          |j        |¦  «        |_        |d|j        dz
  …         }t+          |
|¦  «        }|D ]}|                     |¦  «         Œ|}
t/          ||
¦  «        }Œ»ŒÜ|t'          |j        ¦  «        z  }�Œ|                      |¦  «        }|j                             ¦   «         |_        t5          |	¦  «        |_        |j        d         dk    rt9          |||¦  «        |_        t=          | t           j        ¦  «        rt           j         }nt           j!        }| "                    | |d         |gz   |d         z   ¦  «        }|j                             ¦   «         |_        d|_#        tH          j%        D ]1} |j        |          |j        | <   tH          j&        |          |j        | <   Œ2|S )a•  Take a table box and return it in its table wrapper box.

    Also re-order children and assign grid positions to each column and cell.

    Because of colspan/rowspan works, grid_y is implicitly the index of a row,
    but grid_x is an explicit attribute on cells, columns and column group.

    https://www.w3.org/TR/CSS21/tables.html#model
    https://www.w3.org/TR/CSS21/tables.html#table-layout

    )ÚtopÚbottomÚcaption_sider   r
   Nr-   r   Tr   c                 ó*   — g | ]}t          ¦   «         ‘ŒS r0   )r]   )r   Úrows     r   r  zwrap_table.<locals>.<listcomp>ž  s   € Ð AÐ AÐ A¨3¥¡¤Ð AÐ AÐ Ar   Úborder_collapseÚcollapser>  r?  )'r   r  r1  r7  r8  ÚTableCaptionBoxr:  r\   r3   r^   r  Úgrid_xrg   r2  Ú	is_headerÚ	is_footerri   ÚcolspanÚrowspanrk   rÉ   r3  rÆ   rÈ   Úcopy_with_childrenr¥   ÚtupleÚcolumn_groupsr   Úcollapsed_border_gridrV   r9  ÚInlineBlockBoxr“   re   Úis_table_wrapperr   ÚTABLE_WRAPPER_BOX_PROPERTIESÚINITIAL_VALUES)!r)   rg   ÚcolumnsÚrowsÚall_captionsÚby_typerê   ÚcaptionsÚcaptionrM  rF  ÚgroupÚcolumnÚ
grid_widthÚ
row_groupsÚbody_row_groupsÚheaderÚfooterr-   Úgrid_heightÚoccupied_cells_by_rowrB  Úoccupied_cells_in_this_rowÚcellÚ
new_grid_xÚmax_rowspanÚspanned_rowsÚspanned_columnsÚoccupied_cellsr   r  r  ry   s!                                    r   r;  r;  Q  sŠ  € ð €GØ€DØ€LåÔ˜gÝÔ! 7ÝÔ˜4ÝÔ ÝÔ˜|ð€Gð ð +ð +ˆØ•�U‘”Ô×#Ò# EÑ*Ô*Ð*Ð*ð  RÐ(Ð(€HØð @ð @ˆØ�”˜~Ô.Ô/×6Ò6°wÑ?Ô?Ð?Ð?õ �ØˆW•eÔ/ñ1ô 1ñ 2ô 2€Mà€FØð 	!ð 	!ˆØˆŒØŒ>ð 	!Øœ.ð ð �ð !'�”Ø˜!‘��ð	ð �e”jÑ ˆFˆFØ€Jå˜s D­%Ô*@ÑAÔA€Jà€OØ€FØ€FØð 	*ð 	*ˆØ”+˜iÔ(ˆØÐ-Ò-Ð-°&°.Ø"ˆEŒOØˆFˆFØÐ/Ò/Ð/°F°NØ"ˆEŒOØˆFˆFà×"Ò" 5Ñ)Ô)Ð)Ð)àÐ'ˆ&ˆˆ¨RØñ	àÐ'ˆ&ˆˆ¨Rñ	1ð ð €KØð +ñ +ˆð !BÐ A°%´.Ð AÑ AÔ AÐØ”>ð 	5ð 	5ˆCØ)>×)BÒ)BÀ1Ñ)EÔ)EÐ&àˆFØœð 5ð 5�àÐ :Ð:Ð:Ø˜a‘K�Fð Ð :Ð:Ð:à$�”Ø# d¤lÑ2�
à”< 1Ò$Ð$Ý"%Ð&;Ñ"<Ô"<¸qÑ"@�KØ”| qÒ(Ð(à'<˜Ø'2˜œ˜å'*¨4¬<¸Ñ'EÔ'E˜œØ'<Ð=N¸d¼lÈQÑ>NÐ=NÔ'O˜Ý&+¨F°JÑ&?Ô&?�OØ*6ð ?ð ?˜Ø&×-Ò-¨oÑ>Ô>Ð>Ð>Ø#�Ý  ¨VÑ4Ô4�
�
ð)5ð* 	•s˜5œ>Ñ*Ô*Ñ*ˆ‰à×"Ò" :Ñ.Ô.€EØ”+×"Ò"Ñ$Ô$€E„KÝ Ñ.Ô.€EÔØ„{Ð$Ô%¨Ò3Ð3Ý&<Ø�:˜{ñ',ô ',ˆÔ#õ �#•uÔ+Ñ,Ô,ð &ÝÔ+ˆˆå”~ˆà×)Ò)ØˆX�eŒ_ ˜wÑ&¨°(Ô);Ñ;ñ=ô =€Gà”M×&Ò&Ñ(Ô(€G„MØ#€GÔõ Ô7ð <ð <ˆØ#œk¨$Ô/ˆŒ�dÑÝ&Ô5°dÔ;ˆŒ�DÑÐà€Nr   c                 óò  — t          | t          j        ¦  «        r&t          j                             | | j        ¦  «        }n•t          | t          j        ¦  «        r(| j        }t          j                             | |¦  «        }nSt          | t          j	        ¦  «        r7t          j                             | | g¦  «        }t          | d|› d�d¦  «         n| S | j        |_        t          |d|› d�d¦  «         |S )z$Turn an inline box into a block box.Úis_Ú_itemFT)rV   r   rO  r“   re   rg   r�   ÚreplacementÚBlockReplacedBoxÚInlineLevelBoxÚsetattrr3   )r)   ÚlayoutÚ	anonymousrl  s       r   Úblockifyrr  Ô  së   € õ �#•uÔ+Ñ,Ô,ð 	Ý”N×1Ò1°#°s´|ÑDÔDˆ	ˆ	Ý	�C�Ô0Ñ	1Ô	1ð Ø”oˆÝÔ*×9Ò9¸#¸{ÑKÔKˆ	ˆ	Ý	�C�Ô-Ñ	.Ô	.ð Ý”N×1Ò1°#¸°uÑ=Ô=ˆ	Ý�Ð(˜6Ð(Ð(Ð(¨%Ñ0Ô0Ð0Ð0àˆ
Ø”i€I„OÝˆIÐ*˜VÐ*Ð*Ð*¨DÑ1Ô1Ð1ØÐr   c                 ó²   — t          | t          j        ¦  «        r|                      ¦   «         r| S d„ | j        D ¦   «         }t          | |¦  «        | _        | S )z—Remove and add boxes according to the flex model.

    Take and return a ``Box`` object.

    See https://www.w3.org/TR/css-flexbox-1/#flex-items

    c                 ó,   — g | ]}t          |¦  «        ‘ŒS r0   )r$   r  s     r   r  zflex_boxes.<locals>.<listcomp>ò  ó    € Ð<Ð<Ð< e•
˜5Ñ!Ô!Ð<Ð<Ð<r   )rV   r   rÌ   r  rg   Úflex_childrenr  s     r   r$   r$   æ  ó[   € õ �c�5œ?Ñ+Ô+ð ¨s¯~ª~Ñ/?Ô/?ð Øˆ
ð =Ð<¨s¬|Ð<Ñ<Ô<€HÝ   hÑ/Ô/€C„LØ€Jr   c                 óB  — t          | t          j        ¦  «        r„g }|D ]}}d„ |_        |                     ¦   «         rd|_        t          |t          j        ¦  «        r|j                             d¦  «        sŒZ| 	                    t          |d¦  «        ¦  «         Œ~|S |S )Nc                  ó   — dS )NFr0   r0   r   r   r*  zflex_children.<locals>.<lambda>û  s   €  u€ r   Trª   r   )rV   r   ÚFlexContainerBoxÚ
is_floatedÚis_in_normal_flowÚis_flex_itemrd   rc   Ústripr\   rr  )r)   rg   rv  rê   s       r   rv  rv  ÷  s­   € Ý�#•uÔ-Ñ.Ô.ð ØˆØð 		:ð 		:ˆEØ,˜}ˆEÔØ×&Ò&Ñ(Ô(ð *Ø%)�Ô"Ý˜%¥¤Ñ/Ô/ð ¸¼
×8HÒ8HÈÑ8MÔ8Mð ð Ø× Ò ¥¨%°Ñ!8Ô!8Ñ9Ô9Ð9Ð9ØÐàˆr   c                 ó²   — t          | t          j        ¦  «        r|                      ¦   «         r| S d„ | j        D ¦   «         }t          | |¦  «        | _        | S )z–Remove and add boxes according to the grid model.

    Take and return a ``Box`` object.

    See https://drafts.csswg.org/css-grid-2/#grid-item

    c                 ó,   — g | ]}t          |¦  «        ‘ŒS r0   )r%   r  s     r   r  zgrid_boxes.<locals>.<listcomp>  ru  r   )rV   r   rÌ   r  rg   Úgrid_childrenr  s     r   r%   r%   	  rw  r   c                 ó2  — t          | t          j        ¦  «        r|g }|D ]u}|                     ¦   «         rd|_        t          |t          j        ¦  «        r|j                             d¦  «        sŒR|                     t          |d¦  «        ¦  «         Œv|S |S )NTrª   r   )
rV   r   ÚGridContainerBoxr|  Úis_grid_itemrd   rc   r~  r\   rr  )r)   rg   r�  rê   s       r   r�  r�    s£   € Ý�#•uÔ-Ñ.Ô.ð ØˆØð 	:ð 	:ˆEØ×&Ò&Ñ(Ô(ð *Ø%)�Ô"Ý˜%¥¤Ñ/Ô/ð ¸¼
×8HÒ8HÈÑ8MÔ8Mð ð Ø× Ò ¥¨%°Ñ!8Ô!8Ñ9Ô9Ð9Ð9ØÐàˆr   Fc                 ó¬  — t          | t          j        ¦  «        rà| j        }|s|S t                               d|¦  «        }| j        d         dv }| j        d         dv }|rt                               d|¦  «        }|r|                     dd¦  «        }|r[t                               d|¦  «        x}}|r&| 
                    d¦  «        r|dd…         }d| _        |                     d¦  «        }nd	}|| _        nY| j        D ]Q}t          ||¦  «        }t          |t          j        t          j        f¦  «        r|}Œ;|                     ¦   «         rd	}ŒR|S )
zµFirst part of "The 'white-space' processing model".

    See https://www.w3.org/TR/CSS21/text.html#white-space-model
    https://drafts.csswg.org/css-text-3/#white-space-rules

    ú
r�   )r}   Únowrap©r}   r‡  zpre-linerª   r
   NTF)rV   r   rd   rc   ÚLINE_FEED_REÚsubr3   ÚTAB_REÚreplaceÚSPACE_RErÇ   Úleading_collapsible_spaceÚendswithrg   r:   r•   r|  )r)   Úfollowing_collapsible_spacerc   Únew_line_collapseÚspace_collapseÚprevious_textrê   Úchild_collapsible_spaces           r   r:   r:   +  s‹  € õ �#•u”}Ñ%Ô%ð )4ØŒxˆØð 	/Ø.Ð.õ ×Ò  dÑ+Ô+ˆàœI mÔ4Ð8LÐLÐØœ =Ô1ð 6,ð ,ˆð ð 	*å—:’:˜d DÑ)Ô)ˆDàð 	+ð
 —<’<  cÑ*Ô*ˆDàð 	0Ý#+§<¢<°°TÑ#:Ô#:Ð:ˆM˜DØ*ð 5¨t¯ª¸sÑ/CÔ/Cð 5Ø˜A˜B˜B”x�Ø04�Ô-Ø*7×*@Ò*@ÀÑ*EÔ*EÐ'Ð'à*/Ð'àˆŒˆð ”\ð 	4ð 	4ˆEÝ&8ØÐ2ñ'4ô '4Ð#å˜%¥%¤-µ´Ð!AÑBÔBð 4Ø.EÐ+Ð+Ø×(Ò(Ñ*Ô*ð 4Ø.3Ð+øà&Ð&r   c                 óþ  — t          | t          j        ¦  «        r³| j        d         }| j        d         pd                     d¦  «        d                              ¦   «         }|dk    r1	 t          t          t          d„ dœ|         | j	        |¦  «        | _	        | j        d	         dk    r"| j	         
                    d
d¦  «        | _	        d S d S |                      ¦   «         s| j        D ]}t          |¦  «         Œd S d S )NÚtext_transformrÔ   rø   ú-r   r/   c                 ó6   — |                       t          ¦  «        S r7   )Ú	translateÚASCII_TO_WIDE)rc   Ú	lang_codes     r   r*  z(process_text_transform.<locals>.<lambda>p  s   € °d·n²nÅ]Ñ6SÔ6S€ r   )Ú	uppercaseÚ	lowercaseÚ
capitalizez
full-widthÚhyphensõ   Â­)rV   r   rd   r3   ÚsplitÚlowerrœ  r�  rž  rc   rŒ  r  rg   r;   )r)   r–  r›  rê   s       r   r;   r;   `  s"  € õ �#•u”}Ñ%Ô%ð *ØœÐ#3Ô4ˆØ”Y˜vÔ&Ð,¨"×3Ò3°CÑ8Ô8¸Ô;×AÒAÑCÔCˆ	Ø˜VÒ#Ð#ðÝ&Ý&Ý(ØSÐSð	ð ð
 ôð
 "œh¨	ñ3ô 3ˆCŒHð Œ9�YÔ 6Ò)Ð)Ø”x×'Ò'¨°"Ñ5Ô5ˆCŒHˆHˆHð *Ð)ð �^Š^ÑÔð *Ø”\ð 	*ð 	*ˆEÝ" 5Ñ)Ô)Ð)Ð)ð*ð *ð	*ð 	*r   c                 óR  — i }|dk    r	ddddddœ}n|dv rd	d
i}|                      ¦   «         D ]\  }}|                      ||¦  «        } Œ|dk    rEt          j        d| ¦  «        } dD ]}|                      |d¦  «        } Œt          j        d| ¦  «        } |                      ¦   «         S )NÚelu   Î‘Îªu   Î‘Î«u   ÎŸÎªu   ÎŸÎ«u   Î—Î«)u   Î¬Î¹u   Î¬Ï…u   ÏŒÎ¹u   ÏŒÏ…u   Î­Ï…©ÚtrÚazr   õ   Ä°ÚNFDu   Ì“Ì”Ì�Ì€Ì†Í‚Ì„Í…rø   ÚNFC)r¼   rŒ  ÚunicodedataÚ	normalizeÚupper)rc   r›  Úmapperr¦   r§   Úchars         r   rœ  rœ  y  sá   € Ø€Fà�DÒÐð
 ØØØØð
ð 
ˆˆð 
�lÐ	"Ð	"ð �ð
ˆð —l’l‘n”nð (ð (‰
ˆˆUØ�|Š|˜C Ñ'Ô'ˆˆà�DÒÐõ Ô$ U¨DÑ1Ô1ˆØFð 	*ð 	*ˆDØ—<’<  bÑ)Ô)ˆDˆDÝÔ$ U¨DÑ1Ô1ˆà�:Š:‰<Œ<Ðr   c                 óº   — i }|dv rdddœ}n|dk    rdddd	œ}|                      ¦   «         D ]\  }}|                      ||¦  «        } Œ|                      ¦   «         S )
Nr¥  u   Ä±r   )ÚIr¨  Últu   iÌ‡Ì€u   iÌ‡Ì�u   iÌ‡Ìƒ)õ   ÃŒõ   Ã�u   Ä¨)r¼   rŒ  r¢  )rc   r›  r®  r¦   r§   s        r   r�  r�  ž  sŒ   € Ø€Fà�LÐ Ð ð Øð
ð 
ˆˆð 
�dÒ	Ð	ð ØØð
ð 
ˆð —l’l‘n”nð (ð (‰
ˆˆUØ�|Š|˜C Ñ'Ô'ˆˆà�:Š:‰<Œ<Ðr   c                 ó0  — d}d}d}t          | ¦  «        D ]\  }}|rd}Œ
t          j        |¦  «        d         }|sL|dv rHd}|dk    r| ||dz   …         dk    rd}d	}n2|d
v rt          ||¦  «        }n|                     ¦   «         }n|dk    rd}||z  }Œ€|S )uC   Capitalize words according to CSSâ€™s "text-transform: capitalize".Frø   r   )ÚLÚNTÚnlr   ÚijÚIJr¥  ÚZ)Ú	enumerater«  Úcategoryrœ  r­  )rc   r›  Úletter_foundÚskip_next_letterÚoutputr   Úletterr½  s           r   rž  rž  µ  sà   € à€LØÐØ€FÝ˜t‘_”_ð ð ‰	ˆˆ6Øð 	Ø$ÐØÝÔ'¨Ñ/Ô/°Ô2ˆØð 
	! ¨JÐ 6Ð 6ØˆLØ˜DÒ Ð  T¨!¨A¨a©C¨%¤[°DÒ%8Ð%8Ø#'Ð Ø��Ø˜lÐ*Ð*Ý" 6¨9Ñ5Ô5��àŸš™œ��Ø˜Š_ˆ_Ø ˆLØ�&ÑˆˆØ€Mr   c                 ó0  — | j         r|                      ¦   «         r| S t          | j         ¦  «        }|r| j        du r|d         j        | _        g }d}|D ]X}|rd|_        t	          |t
          j        ¦  «        r|j        s|j        }Œ4d}|                     t          |¦  «        ¦  «         ŒY| j
        du r|| _
        t	          | t
          j        ¦  «        s	|| _         | S g }g }|D �]6}t	          |t
          j        ¦  «        rJ ‚|r*|                     ¦   «         r|                     |¦  «         ŒKt	          |t
          j        ¦  «        s|r`|                     ¦   «         sL|s4t	          |t
          j        ¦  «        r|j        dk    r|j        d         dv s|                     |¦  «         ŒÇ|rXt
          j                             | |¦  «        }t
          j                             | |g¦  «        }	|                     |	¦  «         g }|                     |¦  «         �Œ8|rnt
          j                             | |¦  «        }|r7t
          j                             | |g¦  «        }	|                     |	¦  «         n|                     |¦  «         || _         | S )a†  Build the structure of lines inside blocks and return a new box tree.

    Consecutive inline-level boxes in a block container box are wrapped into a
    line box, itself wrapped into an anonymous block box.

    This line box will be broken into multiple lines later.

    This is the first case in
    https://www.w3.org/TR/CSS21/visuren.html#anonymous-block-level

    Eg.::

        BlockBox[
            TextBox['Some '],
            InlineBox[TextBox['text']],
            BlockBox[
                TextBox['More text'],
            ]
        ]

    is turned into::

        BlockBox[
            AnonymousBlockBox[
                LineBox[
                    TextBox['Some '],
                    InlineBox[TextBox['text']],
                ]
            ]
            BlockBox[
                LineBox[
                    TextBox['More text'],
                ]
            ]
        ]

    Fr   Trª   r�   rˆ  )rg   r  r^   rŽ  rV   r   rd   rc   r\   r&   Útrailing_collapsible_spaceÚBlockContainerBoxrï   Úis_absolutely_positionedrn  r|  r3   re   r“   )
r)   Úbox_childrenrg   rÃ  rê   Únew_line_childrenÚnew_childrenÚ	child_boxÚline_boxrq  s
             r   r&   r&   Î  sâ  € ðL Œ<ð ˜3Ÿ>š>Ñ+Ô+ð Øˆ
å˜œÑ%Ô%€Làð 7˜Ô5¸Ð>Ð>à˜ŒOÔ5ð 	Ô%ð €HØ!&ÐØð 4ð 4ˆð
 &ð 	3Ø.2ˆEÔ+å�e�Uœ]Ñ+Ô+ð 	4°E´Jð 	4Ø).Ô)HÐ&Ð&à).Ð&Ø�OŠO�O¨EÑ2Ô2Ñ3Ô3Ð3Ð3à
Ô%¨Ð.Ð.Ø)CˆÔ&å�c�5Ô2Ñ3Ô3ð ØˆŒØˆ
àÐØ€Làð +ñ +ˆ	Ý˜i­¬Ñ7Ô7Ð7Ð7Ð7Øð 	+ ×!CÒ!CÑ!EÔ!Eð 	+Ø×$Ò$ YÑ/Ô/Ð/Ð/Ý˜	¥5Ô#7Ñ8Ô8ð 	+Ø!ð	+Ø*3×*EÒ*EÑ*GÔ*Gð	+ð !ð 4Ý˜y­%¬-Ñ8Ô8ð4ð ”N cÒ)Ð)Ø”O MÔ2ð 78ð 8ð 8à!×(Ò(¨Ñ3Ô3Ð3øà ð 'õ !œ=×7Ò7¸Ð=NÑOÔO�Ý!œN×9Ò9¸#À¸zÑJÔJ�	Ø×#Ò# IÑ.Ô.Ð.Ø$&Ð!Ø×Ò 	Ñ*Ô*Ð*Ñ*Øð *å”=×/Ò/°Ð5FÑGÔGˆØð 	*Ýœ×5Ò5°c¸H¸:ÑFÔFˆIØ×Ò 	Ñ*Ô*Ð*Ð*ð ×Ò Ñ)Ô)Ð)à€C„LØ€Jr   c                 ó„  — | j         r|                      ¦   «         r| S g }d}| j         D �]}t          |t          j        ¦  «        rÅt          | j         ¦  «        dk    sJ d| j         z  ¦   «         ‚d}	 t          ||¬¦  «        \  }}}|€nYt          j                             | |g¦  «        }| 	                    |¦  «         | 	                    t          |¦  «        ¦  «         Œq|r"t          j                             | |g¦  «        }n|}nt          |¦  «        }||urd}| 	                    |¦  «         �Œ|r|| _         | S )aµ  Build the structure of blocks inside lines.

    Inline boxes containing block-level boxes will be broken in two
    boxes on each side on consecutive block-level boxes, each side wrapped
    in an anonymous block-level box.

    This is the second case in
    https://www.w3.org/TR/CSS21/visuren.html#anonymous-block-level

    Eg. if this is given::

        BlockBox[
            LineBox[
                InlineBox[
                    TextBox['Hello.'],
                ],
                InlineBox[
                    TextBox['Some '],
                    InlineBox[
                        TextBox['text']
                        BlockBox[LineBox[TextBox['More text']]],
                        BlockBox[LineBox[TextBox['More text again']]],
                    ],
                    BlockBox[LineBox[TextBox['And again.']]],
                ]
            ]
        ]

    this is returned::

        BlockBox[
            AnonymousBlockBox[
                LineBox[
                    InlineBox[
                        TextBox['Hello.'],
                    ],
                    InlineBox[
                        TextBox['Some '],
                        InlineBox[TextBox['text']],
                    ]
                ]
            ],
            BlockBox[LineBox[TextBox['More text']]],
            BlockBox[LineBox[TextBox['More text again']]],
            AnonymousBlockBox[
                LineBox[
                    InlineBox[
                    ]
                ]
            ],
            BlockBox[LineBox[TextBox['And again.']]],
            AnonymousBlockBox[
                LineBox[
                    InlineBox[
                    ]
                ]
            ],
        ]

    Fr
   z9Line boxes should have no siblings at this stage, got %r.NT)Ú
skip_stack)rg   r  rV   r   rï   rk   Ú_inner_block_in_inliner“   re   r\   r'   )	r)   rÈ  Úchangedrê   ÚstackÚnew_liner   ÚanonÚ	new_childs	            r   r'   r'   >  sƒ  € ðz Œ<ð ˜3Ÿ>š>Ñ+Ô+ð Øˆ
à€LØ€Gà”ð 'ñ 'ˆÝ�e�Uœ]Ñ+Ô+ð 	/Ý�s”|Ñ$Ô$¨Ò)Ð)Ð)ð2Ø47´LñAñ *Ô)Ð)ð ˆEð<Ý)?Ø eð*-ñ *-ô *-Ñ&�˜% à�=ØÝ”~×4Ò4°S¸8¸*ÑEÔE�Ø×#Ò# DÑ)Ô)Ð)Ø×#Ò#¥O°EÑ$:Ô$:Ñ;Ô;Ð;ð<ð ð %õ "œN×9Ò9¸#À¸zÑJÔJ�	�	ð %�	�	õ (¨Ñ.Ô.ˆIà˜EÐ!Ð!ØˆGØ×Ò˜IÑ&Ô&Ð&Ñ&àð $Ø#ˆŒØ€Jr   c                 óP  — g }d}d}d}|du }|rd}n|                      ¦   «         \  \  }}t          | j        |d…         ¦  «        D ]Â\  }}	||z   }
t          |	t          j        ¦  «        r |	                     ¦   «         r|�J ‚|	}|
dz  }
nat          |	t          j        ¦  «        rt          |	|¦  «        }d}|\  }}}n|�J ‚t          |	¦  «        }||	urd}| 
                    |¦  «         |�|
|i}|                      |¦  «        }  nŒÃ|s|r|                      |¦  «        } | ||fS )aÑ  Find a block-level box in an inline formatting context.

    If one is found, return ``(new_box, block_level_box, resume_at)``.
    ``new_box`` contains all of ``box`` content before the block-level box.
    ``resume_at`` can be passed as ``skip_stack`` in a new call to
    this function to resume the search just after the block-level box.

    If no block-level box is found after the position marked by
    ``skip_stack``, return ``(new_box, None, None)``

    NFr   r
   T)r¼   r¼  rg   rV   r   ÚBlockLevelBoxr|  r•   rÍ  r'   r\   rK  )r)   rÌ  rÈ  Úblock_level_boxÚ	resume_atrÎ  Úis_startÚskipr   rê   ÚindexÚ	recursionrÒ  s                r   rÍ  rÍ  ¤  s�  € ð €LØ€OØ€IØ€Gà˜TÐ!€HØð 1Øˆˆà(×.Ò.Ñ0Ô0ÑÑˆˆzå˜cœl¨4¨5¨5Ô1Ñ2Ô2ð 7ð 7‰ˆˆ5Ø�D‘ˆÝ�u�eÔ1Ñ2Ô2ð 	+Ø×'Ò'Ñ)Ô)ð	+àÐ%Ð%Ð%Ø#ˆOØ�Q‰JˆEˆEå˜%¥¤Ñ1Ô1ð 3Ý2°5¸*ÑEÔE�	Ø!�
Ø8AÑ5�	˜?¨I¨Ià!Ð)Ð)Ð)Ý+¨EÑ2Ô2�	à Ð%Ð%Ø�Ø×Ò 	Ñ*Ô*Ð*ØÐ&Ø 	Ð*ˆIØ×(Ò(¨Ñ6Ô6ˆCØˆEð 'ð
 ð 	7�dð 	7Ø×(Ò(¨Ñ6Ô6ˆCà� Ð*Ð*r   c                 óô   — | }| j                              ¦   «         dk    r<| j        d         dk    r+| j        D ]#}|j                              ¦   «         dk    r|} nŒ$|j        d         | _        d|j        d<   | S )zê
    Set a ``viewport_overflow`` attribute on the box for the root element.

    Like backgrounds, ``overflow`` on the root element must be propagated
    to the viewport.

    See https://www.w3.org/TR/CSS21/visufx.html#overflow
    r   ÚoverflowÚvisibleÚbody)rG   r¢  r3   rg   Úviewport_overflow)Úroot_boxÚ
chosen_boxrê   s      r   r=   r=   Ù  s”   € ð €JØÔ×"Ò"Ñ$Ô$¨Ò.Ð.ØŒN˜:Ô&¨)Ò3Ð3ØÔ&ð 	ð 	ˆEØÔ ×&Ò&Ñ(Ô(¨FÒ2Ð2Ø"�
Ø�ð 3ð ",Ô!1°*Ô!=€HÔØ#,€JÔ�ZÑ Ø€Or   c                 ól  — |                       ¦   «         } t          | ¦  «         t          | t          j        ¦  «        r| j                             ¦   «         S t          | t          j        ¦  «        rCd                     d„ |  	                    ¦   «         D ¦   «         ¦  «                             ¦   «         S dS )Nrø   c              3   óô   K  — | ]s}|j                              d ¦  «        °|j                              d¦  «        °6|j                              d¦  «        °Pt          |t          j        ¦  «        ¯j|j        V — ŒtdS )z::beforez::afterr†   N)rG   r�  rV   r   rd   rc   r  s     r   r°   zbox_text.<locals>.<genexpr>ø  s›   è è € ð .ð .Ø ØÔ$×-Ò-¨jÑ9Ô9ð.ð Ô!×*Ò*¨9Ñ5Ô5ð.ð Ô!×*Ò*¨:Ñ6Ô6ð	.õ
 �u�eœmÑ,Ô,ð.ØŒJð.ð .ð .ð .ð .ð .r   )
rË   r:   rV   r   rd   rc   r~  rÌ   r¿   rÍ   r(   s    r   r  r  ï  s§   € ð �,Š,‰.Œ.€CÝ�sÑÔÐÝ�#•u”}Ñ%Ô%ð 6ØŒx�~Š~ÑÔÐÝ	�C�œÑ	)Ô	)ð 6Ø�wŠwð .ð .Ø$'§O¢OÑ$5Ô$5ð.ñ .ô .ñ .ô .÷
 /4ªe©g¬gð	6ð ˆ2r   c                 óZ  ‡ — ‰ dv rt          |¦  «        S ‰ dv rOt          |t          j        ¦  «        r3d                     ˆ fd„|                     ¦   «         D ¦   «         ¦  «        S dS ‰ dk    r=d}d}t          |¦  «        }|D ]%}t          j        |¦  «        }|dvr|r nd}||z  }Œ&|S d S )	N)rc   rH   )rP   rS   rø   c              3   ó¤   •K  — | ]J}|j                              d ‰› �¦  «        ¯t          |t          j        ¦  «        °9t          |¦  «        V — ŒKdS )r   N)rG   r�  rV   r   rÌ   r  )r   rê   Ú	text_parts     €r   r°   zextract_text.<locals>.<genexpr>  ss   øè è € ð 8ð 8Ø$)ØÔ$×-Ò-Ð.>°9Ð.>Ð.>Ñ?Ô?ð8õ ˜u¥e¤oÑ6Ô6ð8Ý˜‘”ð8ð 8ð 8ð 8ð 8ð 8r   rN   F)ÚPsÚPeÚPiÚPfÚPoT)r  rV   r   rÌ   r¿   rÍ   r«  r½  )ræ  r)   Úcharacter_foundÚfirst_letterrc   rÁ  r½  s   `      r   r½   r½     sÿ   ø€ ØÐ'Ð'Ð'Ý˜‰}Œ}ÐØ	Ð)Ð	)Ð	)Ý�c�5œ?Ñ+Ô+ð 	8Ø—7’7ð 8ð 8ð 8ð 8Ø-0¯_ª_Ñ->Ô->ð8ñ 8ô 8ñ 8ô 8ð 8ð ˆrØ	�nÒ	$Ð	$àˆØˆÝ˜‰}Œ}ˆØð 	#ð 	#ˆFÝ"Ô+¨FÑ3Ô3ˆHØÐ=Ð=Ð=Ø"ð Ø�EØ"&�Ø˜FÑ"ˆLˆLØÐð 
%Ð	$r   r7   )NNNNNNN)NN)F)HÚ__doc__Úrer«  rø   r   Úcssr   r   Úlayout.tabler   Úloggerr   Útext.constantsr	   r   r“   r•   rO  r6  r9  ÚFlexBoxÚInlineFlexBoxÚGridBoxÚInlineGridBoxr7  r8  r  r1  r,  rE  rF   r3  rš  rÆ   Úcompiler‰  r‹  r�  r*   rD   rI   r8   ra   r_   rì   rf   rõ   r‚   rj   r[   Úsearchr  r  r#   r  r;  rr  r$   rv  r%   r�  r:   r;   rœ  r�  rž  r&   r'   rÍ  r=   r  r½   r0   r   r   ú<module>rú     s‘  ððð ð 
€	€	€	Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð ðØ�u”~ðà˜œðð ˜EœNð	ð
 ˜UÔ1ðð ˜œðð ˜Ô-ðð �u”}ðð ˜Ô+ðð �u”}ðð ˜Ô+ðð  �EÔ%ð!ð" ˜%Ô0ð#ð$ ˜UÔ3ð%ð& ˜UÔ3ð'ð( �uÔ+ð)ð* ˜UÔ6ð+ð, �UÔ'ð-ð. ˜Ô-ð/ð Ð ð6 @Ð?¨U¨U°4¸Ñ->Ô->Ð?Ñ?Ô?€Ø × Ò ˜H¨HÐ5Ð5Ñ 6Ô 6Ð 6àˆrŒz˜'Ñ"Ô"€Ø	ˆŒÐ$Ñ	%Ô	%€Øˆ2Œ:�hÑÔ€ðð ð ðð ð ðD.ð .ð .ð FJð]Kð ]Kð ]Kð ]Kð@+ð +ð +ð\8ð 8ð 8ðz ?CØIMØ!%ð	uð uð uð uðt )-ð'ð 'ð 'ð 'ðT5ð 5ð 5ð@Hð Hð Hð0-ð -ð -ð($ð $ð $ðN ,6¨2¬:°eÑ+<Ô+<Ô+Cð Pð Pð Pð Pð
6ð 6ð 6ð 6ð4/ð /ð /ð [ð [ð [ð|@ð @ð @ðFð ð ð$ð ð ð"ð ð ð$ð ð ð"ð ð ð"2'ð 2'ð 2'ð 2'ðj*ð *ð *ð2"ð "ð "ðJð ð ð.ð ð ð2mð mð mð`cð cð cðL2+ð 2+ð 2+ð 2+ðjð ð ð,ð ð ð$ð ð ð ð r   