Ë
    £ëi{ä  ã                   ó2  — 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j0                  “dej2                  “dej2                  “dej2                  “dej4                  “dej6                  “dej8                  “dej:                  i¥Z edd«      D � ci c]  } |  e | dz   «      “Œ c} Z!e!jE                  d d!d"œ«        ejF                  d#«      Z$ ejF                  d$«      Z% ejF                  d%«      Z&d&„ Z'd'„ Z(d(„ Z)	 dHd)„Z*d*„ Z+d+„ Z,	 	 	 dId,„Z-	 dJd-„Z.d.„ Z/d/„ Z0d0„ Z1d1„ Z2 ejF                  d2«      jf                  fd3„Z4dHd4„Z5d5„ Z6d6„ Z7d7„ Z8d8„ Z9d9„ Z:d:„ Z;d;„ Z<d<„ Z=dKd=„Z>d>„ Z?d?„ Z@d@„ ZAdA„ ZBdB„ ZCdC„ ZDdHdD„ZEdE„ ZFdF„ ZGdG„ ZHyc c} w )Lz’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-captioné!   é   iàþ  u   ã€€u   âˆ’)é    é-   z
?z[	 ]*
[	 ]*z[	 ]+c                 ót   — 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    úe/var/www/html/chat/reports/venv/lib/python3.12/site-packages/weasyprint/formatting_structure/build.pyÚcreate_anonymous_boxesr$   5   s7   € ä
 Ó
$€CÜ
�S‹/€CÜ
�S‹/€CÜ
˜#Ó
€CÜ
˜#Ó
€CØ€Jó    c           	      óô   ‡ ‡— t        ‰ ‰|||||«      }|r|\  }ndˆ ˆfd„	}	t        ‰ |	|||||«      \  }|j                  «        t        |«       t        |«       d|_        t        |«      }t        |«      }|S )z=Build a formatting structure (box tree) from an element tree.c                 ó@   •—  ‰| |«      }|�| ‰k(  rd|d<   |S d|d<   |S )Nr   Údisplay©Únone© )ÚelementÚpseudo_typeÚstyleÚelement_treeÚ	style_fors      €€r#   Úroot_style_forz2build_formatting_structure.<locals>.root_style_forJ   s?   ø€ Ù˜g {Ó3ˆEØÐ Ø˜lÒ*Ø'8�E˜)Ñ$ð ˆLð (1�E˜)Ñ$ØˆLr%   T©N)Úelement_to_boxÚcheck_pending_targetsÚprocess_whitespaceÚprocess_text_transformÚis_for_root_elementr$   Úset_viewport_overflow)
r/   r0   Úget_image_from_uriÚbase_urlÚtarget_collectorÚcounter_styleÚ	footnotesÚbox_listr"   r1   s
   ``        r#   Úbuild_formatting_structurer?   ?   s�   ù€ ô Ø�iÐ!3°XØ˜-¨ó4€Hñ Ø‰‰ö	ô Ø˜.Ð*<¸hØ˜m¨Yó8‰ˆð ×*Ñ*Ô,Ü�sÔÜ˜3Ôà"€CÔä
  Ó
%€CÜ
 Ó
$€CØ€Jr%   c                 ó0   — t        |d   d d    | |||«      S )Nr(   r   )ÚBOX_TYPE_FROM_DISPLAY)Úelement_tagr.   Úcontentr,   s       r#   Úmake_boxrD   a   s)   € Ü   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 }|j                  t        «       «       g }d|d   v r+t        t        | ||||||«      «      }|j                  |«       |j                  t        | d|||||«      «       |d   r|j                  |d   ||
«       | j                  }|r/|j                  t        j                   j#                  |
|«      «       | D �]G  }t%        ||||||||«      }|rœ|d   j&                  d   dk(  r‡|d   }d|j&                  d<   |j                  |«        ||j(                  d«      }t        |j(                  j                  › d�|g |j(                  «      }t+        |||||||«      |_        ||_        |g}|j                  |«       |j0                  }|sŒÔt        j                   j#                  |
|«      }|rAt        |d   t        j                   «      r$|d   xj                  |j                  z  c_        �Œ7|j                  |«       �ŒJ |j                  t        | d|||||«      «       |j3                  «       D ],  }||   j3                  «        ||   rŒ|j3                  |«       Œ. ||
_        t5        | |
||||«       |rYt7        |
j,                  «      dk(  rA|d   dk(  r9|
j,                  j                  t        j                   j#                  |
d«      «       |d   dk(  rf|d   dxx   dz  cc<    || d«      }t        | j                  › d�|g | «      }t+        |||||||«      |_        |
j,                  j9                  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-liner   ú	list-itemÚbeforeÚanchorr*   zfootnote-callz::footnote-calléÿÿÿÿÚafterr
   Úlist_style_positionÚoutsideu   â€‹zfootnote-markerz::footnote-marker)Ú
isinstanceÚtagÚstrrD   Úfirst_letter_styleÚfirst_line_styleÚupdate_countersÚappendÚsetÚlistÚmarker_to_boxÚextendÚbefore_after_to_boxÚstore_targetÚtextr   ÚTextBoxÚanonymous_fromr3   r.   r,   Úcontent_to_boxesÚchildrenrG   ÚtailÚpopÚset_content_listsÚlenÚinsertr   Úhandle_element)r,   r0   r9   r:   r;   r<   r=   Ústater.   r(   r"   Úquote_depthÚcounter_valuesÚcounter_scopesÚ_page_groupsrb   Úmarker_boxesr^   Úchild_elementÚchild_boxesrG   Ú
call_styleÚfootnote_callÚtext_boxÚnameÚmarker_styleÚmarkers                              r#   r3   r3   f   sW  € ô2 �g—k‘k¤3Ô'àˆ	á�gÓ€Eð �IÑ€GØ�)ÒØˆ	àˆW�~˜Ò#ØÐ#Ñ$¨Ò/Ø0ˆE�)Òð  2ˆE�)Ñä
�7—;‘;  r¨7Ó
3€CÙ& w°Ó?€CÔÙ$ W¨lÓ;€CÔà€}ð ˆCà˜!˜ÐØˆ\ˆNØð
ˆð AFÑ=€K� °ä�E˜5Ô!à€Hð ×Ñœ#›%Ô à€LØ�e˜IÑ&Ñ&ÜœMØ�U˜E 9Ð.@Ø˜mó-ó .ˆð 	�‰˜Ô%à‡O�OÔ'Ø�˜5 )Ð-?Ø˜-ó)ô *ð ˆX‚Ø×%Ñ% e¨H¡o°~ÀsÔKà�<‰<€DÙØ�‰œŸ™×4Ñ4°S¸$Ó?Ô@à ó *ˆÜ$Ø˜9Ð&8¸(Ø˜m¨Y¸ó?ˆñ ˜; q™>×/Ñ/°Ñ8¸JÒFØ" 1‘~ˆHØ&,ˆH�N‰N˜7Ñ#Ø×Ñ˜XÔ&Ù" 8×#3Ñ#3°_ÓEˆJÜ$Ø×#Ñ#×'Ñ'Ð(¨Ð8¸*ÀbØ× Ñ ó"ˆMô &6Ø˜M¨;¸Ø"Ð$4°mó&EˆMÔ"ð &.ˆMÔ"Ø(˜/ˆKà�‰˜Ô$Ø×!Ñ!ˆÚÜ—}‘}×3Ñ3°C¸Ó>ˆHÙœJ x°¡|´U·]±]ÔCØ˜‘×!Ò! X§]¡]Ñ2×!à—‘ Ö)ð5*ð8 ‡O�OÔ'Ø�˜% Ð,>Ø˜-ó)ô *ð
 ×"Ñ"Ó$ò %ˆØ�tÑ× Ñ Ô"Ø˜dÓ#Ø×Ñ˜tÕ$ð%ð
 €C„LÜØ��e˜^Ð-=¸}ôNñ œ˜CŸL™LÓ)¨QÒ.ð Ð&Ñ'¨9Ò4Ø�L‰L×Ñ¤§¡× <Ñ <¸SÀ%Ó HÔIàˆW�~˜Ò#Ø�zÑ" 2Ó&¨!Ñ+Ó&Ù  Ð*;Ó<ˆÜØ�{‰{ˆmÐ,Ð-¨|¸RÀóJˆä*Ø˜& +¨~Ð?QØ˜mó-ˆŒð 	�‰×Ñ˜A˜vÔ&ô ×Ñ˜w¨Ð-?ÀÓ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 r+t        t	        | ||||||«      «      }|j                  |«       |j                  t        ||
|||||«      «       ||
_        |d   dk7  r|\  }}}}t        | |
|d	   |||«       |
gS )
z8Return the boxes for ::before or ::after pseudo-element.r(   r)   rC   )ÚnormalÚinhibitr*   ú::rJ   Úbookmark_levelr*   Úbookmark_label)	rD   rR   rV   rY   rZ   r[   ra   rb   Úcompute_bookmark_label)r,   r-   ri   r0   r9   r;   r<   r.   r(   rC   r"   rj   rk   Ú_counter_scopesrm   rb   rn   Ú_quote_depths                     r#   r\   r\     s4  € ñ �g˜{Ó+€EÙ�u�}ð ˆ	ð
 �IÑ€GØ�)ÒØˆ	Ø�IÑ€GØÐ/Ñ/Øˆ	Ü
�g—k‘k�] " [ MÐ2°E¸2¸wÓ
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y|d   \  }}|d   dvr!|j                  t        |||	|
|||«      «       n¾|d	k(  r@ |||d
   ¬«      }|�1t        j
                  j                  ||«      }|j                  |«       |sw|d   dk7  ro|
j                  ddg«      d   }|d   }|j                  ||«      x}r@t        j                  j                  ||«      }d|j                  d<   |j                  |«       |sy|d   dk(  r7t        j                  j                  ||«      }d|j                  d<   d|_        n t        j                  j                  ||«      }|–— y­w)zyYield the box for ::marker pseudo-element if there is one.

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

    rv   ú::markerr(   r)   NÚlist_style_imagerC   )rx   ry   ÚurlÚimage_orientation©rƒ   ÚorientationÚlist_style_typer*   rJ   r   rM   zpre-wrapÚwhite_spacerO   rP   ÚabsoluteÚpositionT)rD   rR   r[   ra   r   ÚInlineReplacedBoxr`   rW   ÚgetÚrender_markerr_   r.   ÚBlockBoxÚis_outside_markerÚ	InlineBox)r,   ri   Úparent_styler0   r9   r;   r<   r.   rb   rj   rk   r~   rm   r"   Ú
image_typeÚimageÚcounter_valueÚcounter_typeÚmarker_textÚ
marker_boxs                       r#   rZ   rZ   4  s¿  è ø€ ñ �g˜xÓ(€Eà€Hð
 BGÑ>€K� °,ä
�g—k‘k�] (Ð+¨U°H¸gÓ
F€CàˆYÑ˜9Ò$ØàÐ0Ñ1Ñ€J�àˆYÑÐ4Ñ4Ø�‰Ô(Ø�3˜ ^Ð5GØ˜mó-õ 	.ð
 ˜Òá&Ø uÐ-@Ñ'AôCˆEàÐ Ü×-Ñ-×<Ñ<¸SÀ%ÓH�Ø—‘ Ô$á˜EÐ"3Ñ4¸Ò>Ø*×.Ñ.¨{¸Q¸CÓ@ÀÑDˆMØ Ð!2Ñ3ˆLØ+×9Ñ9¸,ÈÓVÐVˆ{ÐVÜ—m‘m×2Ñ2°3¸ÓD�Ø+5�—	‘	˜-Ñ(Ø—‘ Ô$áØàÐ)Ñ*¨iÒ7Ü—^‘^×2Ñ2°3¸ÓAˆ
ð (2ˆ
×Ñ˜Ñ$Ø'+ˆ
Õ$ä—_‘_×3Ñ3°C¸ÓBˆ
Ø
Óùs   ‚FFc                 ó:  ‡‡‡/‡0‡1— g Š/t        «       Š1ˆ/ˆ1ˆfd„}g }i }|duxr |du}|j                  xr | }‰j                  €7|j                  «       D ��ci c]  \  }}||j	                  «       “Œ c}}‰_        | D �]ú  \  }}|dk(  r	 ||«       Œ|dk(  rW|�U|\  }}|dk7  rŒ' ||‰j
                  d   ¬«      }|€ŒA‰/j                  t        j                  j                  ‰|«      «       Œq|dk(  rt        |‰«      } ||«       Œ‹|d	k(  rB|s&t        j                  d
dj                  |«      «       Œ¸ | |j                  |g|¢­Ž «       ŒÒ|dv r�|d   |d   c}Š0‰0dk(  rŒç|r!|t        |«      |z   vr|j                  |«       |dk(  r)|j!                  |dg«      d   }‰j#                  |‰0«      }n1|d   }|j                  ˆˆ0fd„|j!                  |dg«      D «       «      } ||«       �Œs|dv �r7|dd |d   c\  }}Š0‰0dk(  r�Œ�|j%                  |‰||«      }|j&                  dk7  r �nK|j(                  j                  } |r@|| vr<t+        j,                  |«      }!|j/                  |!g «      }||vr|j                  |«       |j0                  j	                  «       }"|"j3                  | «       |dk(  r)|"j!                  |dg«      d   }‰j#                  |‰0«      }nA|d   }|d   dk7  r �nŠ|d   }#|#j                  ˆˆ0fd„|"j!                  |dg«      D «       «      } ||«       �Œ¯|dk(  rM|\  }}$|j%                  |‰||«      }|j&                  dk(  r"|j(                  }%t        |$|%«      } ||«       �Œþ �ný|dk(  r’d||	fvrŒd|v }&|j5                  d«       xr |	dk7  }'|&st7        d|d   dz
  «      |d<   |'rC|	dk(  rt9        |
«      \  }(})n|	\  }(})|&r|(n|)}* ||*t;        |d   t=        |*«      dz
  «         «       |&s�Œ‰|dxx   dz  cc<   �Œ˜|dk(  rÖ|s't        j                  ddj                  |«      «       �ŒÆ |j>                  |g|¢­Ž }+|+€�ŒÝ|+jA                  «       }+d|+j
                  d <   tC        |+t        jD                  «      rJ|+jG                  «       D ]7  },|,j
                  d!   d"v rŒtI        |,j
                  |,||||‰||¬#«	      |,_%        Œ9 ‰/j                  |+«       �Œs|d$k(  s�Œz|d   s�Œ�t        jL                  j                  ‰|d   «      }-t        jN                  j                  ‰|-f«      }.d%|.j
                  d&<   d%|-j
                  d&<   d'|._(        ‰/j                  |.«       �Œý ‰1s‰/r|jS                  ‰||||«       ‰/S yc c}}w )(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                 óü   •— ‰j                  d«       | rh‰r6t        ‰d   t        j                  «      r‰d   xj                  | z  c_        y ‰j                  t        j                  j                  ‰| «      «       y y )NTrM   )ÚaddrQ   r   r_   r^   rW   r`   )r^   Úcontent_boxesÚhas_textÚ
parent_boxs    €€€r#   Úadd_textz&compute_content_list.<locals>.add_text†  se   ø€ Ø�‰�TÔÙÙ¤¨M¸"Ñ,=¼u¿}¹}Ô!MØ˜bÑ!×&Ò&¨$Ñ.Ö&à×$Ñ$Ü—M‘M×0Ñ0°¸TÓBõDð	 r%   NÚstringrƒ   Úexternalr„   r…   z	content()zstring()z,"string(%s)" is only allowed in page marginsú )ú	counter()z
counters()r   rM   r*   r¢   r
   c              3   óB   •K  — | ]  }‰j                  |‰«      –— Œ y ­wr2   ©Úrender_value©Ú.0r”   r<   r•   s     €€r#   ú	<genexpr>z'compute_content_list.<locals>.<genexpr>Á  s(   øè ø€ ò &Pà%ð "×.Ñ.¨}¸l×Kñ&Pùó   ƒ)útarget-counter()ztarget-counters()r   z
up-to-daterª   c              3   óB   •K  — | ]  }‰j                  |‰«      –— Œ y ­wr2   r¤   r¦   s     €€r#   r¨   z'compute_content_list.<locals>.<genexpr>à  s(   øè ø€ ò -Pà%ð "×.Ñ.¨}¸l×Kñ-Pùr©   ztarget-text()ÚquoteÚopenzno-Úautoz	element()z-"element(%s)" is only allowed in page marginsÚstaticrŠ   rC   )rx   r*   )ÚcontextÚpagezleader()Úprerˆ   T)*rX   Ú
collectingÚcached_counter_valuesÚitemsÚcopyr.   rW   r   r‹   r`   Úextract_textr   ÚwarningÚjoinÚget_string_set_forrY   rŒ   r¥   Úlookup_targetri   Ú
target_boxr   Úanchor_name_from_tokenÚ
setdefaultÚcached_page_counter_valuesÚupdateÚ
startswithÚmaxr	   Úminrf   Úget_running_element_forÚdeepcopyrQ   Ú	ParentBoxÚdescendantsra   rb   r_   r�   Ú	is_leaderÚcollect_missing_counters)2Úcontent_listr�   rk   Ú	css_tokenÚparse_againr;   r<   r9   rj   Úquote_styleÚlangr°   r±   r,   rž   Úmissing_countersÚmissing_target_countersÚin_page_contextÚneed_collect_missingÚkeyÚvalueÚtype_ÚoriginÚurir“   Ú
added_textÚcounter_namer”   r^   Ú	separatorÚanchor_tokenr»   Útarget_valuesÚanchor_nameÚlocal_countersÚseparator_stringÚ
text_styler¼   Úis_openrg   Úopen_quotesÚclose_quotesÚquotesÚnew_boxÚchildrs   Ú
leader_boxr›   r•   rœ   s2    `    `                                        @@@r#   Úcompute_content_listrè   o  s<  ü€ ð( €MÜ‹u€HöDð ÐØ ÐØ TÐ)Ò>¨d¸$Ð.>€Oð ,×6Ñ6ÒN¸Ð;NÐà×'Ñ'Ð/ð 1?×0DÑ0DÓ0F÷,HÙ", # uˆC�—‘“Ñó,Hˆ
Ô(à$ó A-‰ˆˆuØ�HÒÙ�U�OØ�eŠ^Ð 2Ð >Ø‰KˆF�CØ˜Ò#àÙ&Ø Z×%5Ñ%5Ð6IÑ%JôLˆEàÑ Ø×$Ñ$Ü×+Ñ+×:Ñ:¸:ÀuÓMõOà�kÒ!Ü% e¨ZÓ8ˆJÙ�ZÕ Ø�jÒ Ù"ô —‘ØBØ—H‘H˜U“Oô%ð ÙÐ/�W×/Ñ/°Ð=°uÒ=Õ>ØÐ1Ñ1Ø).¨q©°5¸±9Ð&ˆL˜,Ø˜vÒ%ØÙ#Ø¤t¨NÓ';Ð>NÑ'NÑNØ$×+Ñ+¨LÔ9Ø˜Ò#Ø .× 2Ñ 2°<À!ÀÓ EÀbÑ I�Ø$×1Ñ1°-ÀÓN‘à! !™H�	Ø —~‘~ô &Pà)7×);Ñ);¸LÈ1È#Ó)Nô&Pó P�ñ �TŽNØÐ?Ò?Ø9>¸rÀ¸ÀEÈ"ÁIÐ6Ñ(ˆ\˜<¨,Ø˜vÒ%ÙØ,×:Ñ:Ø˜j¨)°[óBˆMà×"Ñ" lÒ2ÚØ)×4Ñ4×JÑJˆMÙ#¨¸MÑ(IÜ%×<Ñ<¸\ÓJ�Ø#:×#EÑ#EØ ó$%Ð àÐ'7Ñ7Ø$×+Ñ+¨LÔ9ð +×EÑE×JÑJÓLˆNØ×!Ñ! -Ô0ØÐ*Ò*Ø .× 2Ñ 2°<À!ÀÓ EÀbÑ I�Ø$×1Ñ1°-ÀÓN‘à! !™H�	Ø˜Q‘< 8Ò+ÚØ#,¨Q¡<Ð Ø'×,Ñ,ô -Pà)7×);Ñ);¸LÈ1È#Ó)Nô-Pó P�ñ �TŽNØ�oÒ%Ø',Ñ$ˆL˜*Ø,×:Ñ:Ø˜j¨)°[óBˆMà×"Ñ" lÒ2Ø*×5Ñ5�
ô $ J°
Ó;�Ù˜–âØ�gÒ $¨{¸KÐ.HÑ"HØ �oˆGØ×)Ñ)¨%Ó0Ð0ÒJ°[ÀFÑ5JˆFÙÜ!$ Q¨°A©¸Ñ(:Ó!;�˜A‘ÙØ &Ò(Ü0?ÀÓ0EÑ-�K¡à0;Ñ-�K Ù(/™°\�Ù˜¤ K°¡N´C¸³KÀ!±OÓ DÑEÔFÛØ˜A“ !Ñ#•Ø�kÒ!Ù"Ü—‘ØCØ—H‘H˜U“Oô%ñ Ø5�g×5Ñ5°dÐC¸UÒCˆGØˆÙØ×&Ñ&Ó(ˆGØ(0ˆG�M‰M˜*Ñ%Ü˜'¤5§?¡?Ô3Ø$×0Ñ0Ó2ò 4�EØ—{‘{ 9Ñ-Ð1CÑCØ Ü%5ØŸ™ U¨K¸Ø*Ð,<¸mØ '¨dô&4�E•Nð4ð × Ñ  Ö)Ø�jÔ Ø˜’8ÙÜ—}‘}×3Ñ3°JÀÀaÁÓIˆHÜŸ™×7Ñ7Ø˜X˜Kó)ˆJð /4ˆJ×Ñ˜]Ñ+à,1ˆH�N‰N˜=Ñ)Ø#'ˆJÔ Ø× Ñ  Ö,ðCA-ñF ‘=à×1Ñ1Ø˜	 ;Ð0@Ø#ô	%ð Ðð !ùóK,Hs   ÁVc	                 ó’   ‡ ‡‡‡‡‡— dˆˆˆˆˆ ˆfd„	}	‰ d   dk(  rg S |dd Šd}
t        ‰ d   ‰||
|	‰‰‰|‰ d   ‰ d   ||«      }|xs g S )z:Take the value of a ``content`` property and return boxes.Nc                 ó`  •— | €i }n| j                  «       }|j                  ‰j                  «       g }|j                  t	        ‰‰‰|‰‰‰«      «       t        ‰j                  «      dk(  r<t        ‰j                  d   t        j                  «      r|‰j                  d   _        y|‰_        y)z9Closure to parse the ``parent_boxes`` children all again.Nr
   r   )
r¶   rÀ   r´   r[   ra   rf   rb   rQ   r   ÚLineBox)	Úmixin_pagebased_countersrÞ   Úlocal_childrenr<   r9   Úorig_quote_depthr�   r.   r;   s	      €€€€€€r#   rÌ   z%content_to_boxes.<locals>.parse_again+  sª   ø€ ð
 $Ð+Ø‰Nà5×:Ñ:Ó<ˆNØ×Ñ˜j×>Ñ>Ô?àˆØ×ÑÔ.Ø�:Ð/°ØÐ 0°-óAô 	Bô �
×#Ñ#Ó$¨Ò)Ü˜:×.Ñ.¨qÑ1´5·=±=ÔAØ.<ˆJ×Ñ Ñ"Õ+à"0ˆJÕr%   rC   ry   rä   rÎ   r2   )rè   )r.   r�   rj   rk   r9   r;   r<   r°   r±   rÌ   rË   r>   rî   s   ``  ```     @r#   ra   ra   '  sq   ý€ ÷1ò 1ð4 ˆYÑ˜9Ò$Øˆ	à"¡1�~ÐØ€IÜ#ØˆiÑ˜* n°iÀØ˜-Ð);¸[Øˆh‰˜˜v™¨°ó7€Hð Š>�rÐr%   c           
      ó2  ‡ ‡‡‡‡‡— dˆˆˆˆ ˆˆfd„	}d‰› �}t        ‰‰|||‰‰‰ ¬«      }	|	�ldj                  d„ |	D «       «      }
‰j                  D ]'  }|d   ‰k(  sŒ‰j                  j                  |«        n ‰j                  j	                  ‰|
f«       yy)	zCParse the content-list value of ``string_name`` for ``string-set``.Nc           	      óˆ   •— | €i }n| j                  «       }|j                  ‰j                  «       t        ‰‰‰‰|‰‰«       y)z7Closure to parse the string-set string value all again.N)r¶   rÀ   r´   Úcompute_string_set)rì   rÞ   r"   rÊ   r<   r,   Ústring_namer;   s     €€€€€€r#   rÌ   z'compute_string_set.<locals>.parse_againT  sJ   ø€ ð $Ð+Ø‰Nà5×:Ñ:Ó<ˆNØ×Ñ˜c×7Ñ7Ô8ÜØ�S˜+ |°^Ø˜mõ	-r%   zstring-set::©r,   Ú c              3   ój   K  — | ]+  }t        |t        j                  «      sŒ|j                  –— Œ- y ­wr2   ©rQ   r   r_   r^   ©r§   r"   s     r#   r¨   z%compute_string_set.<locals>.<genexpr>f  s(   è ø€ ò LØ¬J°s¼E¿M¹MÕ,JˆC�H�HñLùs   ‚3¢3r   r2   )rè   r¹   Ú
string_setÚremoverW   )r,   r"   rò   rÊ   rk   r;   r<   rÌ   rË   r>   rŸ   Ústring_set_tuples   ```` ``     r#   rñ   rñ   Q  s´   ý€ ÷-ò -ð ˜{˜mÐ,€IÜ#Ø�c˜>¨9°kØ˜-°ô:€Hð ÐØ—‘ñ LØ (ôLó Lˆð !$§¡ò 	ÐØ Ñ" kÓ1Ø—‘×%Ñ%Ð&6Ô7Ùð	ð 	�‰×Ñ˜{¨FÐ3Õ4ð r%   c           
      óŒ   ‡ ‡‡‡‡— dˆˆˆˆ ˆfd„	}d}t        ‰‰|||‰‰‰ ¬«      }|rdj                  d„ |D «       «      ‰_        yy)z5Parses the content-list value for ``bookmark-label``.Nc                 ó†   •— | €i }n| j                  «       }|j                  ‰j                  «       t        ‰‰‰|‰‰«       y)z.Closure to parse the bookmark-label all again.N)r¶   rÀ   r´   r}   )rì   rÞ   r"   rÊ   r<   r,   r;   s     €€€€€r#   rÌ   z+compute_bookmark_label.<locals>.parse_againt  sI   ø€ ð $Ð+Ø‰Nà5×:Ñ:Ó<ˆNØ×Ñ˜c×7Ñ7Ô8ÜØ�S˜,¨Ð8HØõ	r%   zbookmark-labelró   rô   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr2   )Úbox_textr÷   s     r#   r¨   z)compute_bookmark_label.<locals>.<genexpr>†  s   è ø€ Ò$G°s¤X¨c§]Ñ$Gùs   ‚r2   )rè   r¹   r|   )	r,   r"   rÊ   rk   r;   r<   rÌ   rË   r>   s	   ``` ``   r#   r}   r}   q  sQ   ü€ ÷ñ ð !€IÜ#Ø�c˜>¨9°kØ˜-°ô:€Hñ ØŸW™WÑ$G¸hÔ$GÓGˆÕð r%   c           
      ó–   — g |_         |d   dk7  r|d   D ]  \  }}t        | ||||||«       Œ |d   dk7  rt        | ||d   |||«       yy)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}   )r,   r"   r.   rk   r;   r<   rò   Ústring_valuess           r#   re   re   ‰  sz   € ð €C„NØˆ\Ñ˜fÒ$Ø*/°Ñ*=ò 	1Ñ&ˆK˜ÜØ˜˜k¨=¸.Ø  -õ1ð	1ð ÐÑ &Ò(ÜØ�S˜%Ð 0Ñ1°>Ø˜mõ	-ð )r%   c                 ó:  — | \  }}}}|d   }|d   D ]O  \  }}||v r||   j                  «        n|j                  |«       |j                  |g «      j                  |«       ŒQ |d   D ]F  \  }}|j                  |g «      }	|	s(||vsJ ‚|j                  |«       |	j                  d«       ||	d<   ŒH |d   }
|
dk(  rd|d   v rd	g}
ng }
|
D ]N  \  }}|j                  |g «      }	|	s(||vsJ ‚|j                  |«       |	j                  d«       |	dxx   |z  cc<   ŒP y
)z$Handle the ``counter-*`` properties.rM   Úcounter_resetÚcounter_setr   Úcounter_incrementr®   rJ   r(   )rJ   r
   N)rd   rš   r¾   rW   )ri   r.   r   rk   rl   rm   Úsibling_scopesrt   rÔ   Úvaluesr  s              r#   rV   rV   �  sf  € àAFÑ>€L�. .°,Ø# BÑ'€Nà˜_Ñ-ò :‰ˆˆeØ�>Ñ!Ø˜4Ñ ×$Ñ$Õ&à×Ñ˜tÔ$Ø×!Ñ! $¨Ó+×2Ñ2°5Õ9ð:ð ˜]Ñ+ò ‰ˆˆeØ×*Ñ*¨4°Ó4ˆÙØ˜~Ñ-Ð-Ð-Ø×Ñ˜tÔ$Ø�M‰M˜!ÔØˆˆrŠ
ðð Ð1Ñ2ÐØ˜FÒ"ð
 ˜% 	Ñ*Ñ*Ø!1Ð 2Ñà "ÐØ(ò ‰ˆˆeØ×*Ñ*¨4°Ó4ˆÙØ˜~Ñ-Ð-Ð-Ø×Ñ˜tÔ$Ø�M‰M˜!ÔØˆr‹
�eÑŒ
ñr%   z\Sc                 ó`   — t        | t        j                  «      xr  || 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ÀcÇhÁhÓ2OÐ.OÐOr%   c              #   óü   ‡K  — |€ˆfd„}g }|D ]E  } ||«      r*|r#‰j                  | g ¬«      }t        ||«      –— g }|–— Œ5|j                  |«       ŒG |r"‰j                  | g ¬«      }t        ||«      –— yy­w)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 r2   )rQ   )ræ   Úwrapper_types    €r#   Útestzwrap_improper.<locals>.testÐ  s   ø€ Ü˜e \Ó2Ð2r%   )rb   )r`   Útable_boxes_childrenrW   )r"   rb   r  r  Úimproperræ   Úwrappers     `    r#   Úwrap_improperr  É  s•   øè ø€ ð €|ô	3à€HØò 	#ˆÙ�Œ;ÙØ&×5Ñ5°cÀBÐ5ÓG�ä*¨7°HÓ=Ò=Ø�Ø‹Kà�O‰O˜EÕ"ð	#ñ Ø×-Ñ-¨c¸BÐ-Ó?ˆä" 7¨HÓ5Ó5ð ùs   ƒA9A<c                 óÀ   — t        | t        j                  «      r| j                  «       r| S | j                  D �cg c]  }t        |«      ‘Œ }}t        | |«      S c c}w )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

    )rQ   r   rÆ   Ú
is_runningrb   r   r  ©r"   ræ   rb   s      r#   r   r   ã  sR   € ô �cœ5Ÿ?™?Ô+¨s¯~©~Ô/?Øˆ
ð ;>¿,¹,ÖG°Ô% eÕ,ÐG€HÐGÜ  XÓ.Ð.ùò Hs   »Ac                 ó  ‡	— t        | t        j                  «      rg }n¥t        | t        j                  «      r‹|D �cg c]  }t        |t        j                  «      r|‘Œ  }}|s`| j                  �| j                  dk  rd}n| j                  }t        |«      D �cg c]"  }t        j                  j                  | g «      ‘Œ$ }}| j                  r{t        |«      dk\  rm|dd \  }}|j                  rt        |«      r|j                  «        t        |«      dk\  r0|dd \  }}|j                  rt        |«      r|j                  d«       t        dg|dd ¢|g |dd ¢d‘«      D ���cg c]/  \  }}}|r%|j                  r|r|j                  rt        |«      s|‘Œ1 }}}}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 c c}w c c}w c c}}}w )z3Internal implementation of anonymous_table_boxes().Nr
   r   éþÿÿÿr   rM   c                 ó   — | j                   S r2   ©Úproper_table_child©ræ   s    r#   ú<lambda>z&table_boxes_children.<locals>.<lambda>0  s   € ˜%×2Ñ2€ r%   c                 ó8   — t        | t        j                  «       S r2   )rQ   r   ÚTableCellBoxr  s    r#   r  z&table_boxes_children.<locals>.<lambda><  s   € œj¨´×0BÑ0BÓCÐC€ r%   c                 ó   — | j                    S r2   r  r  s    r#   r  z&table_boxes_children.<locals>.<lambda>B  s   € ˜e×6Ñ6Ð6€ r%   c                 ó>   •— | j                    xs ‰| j                  v S r2   )r  Úproper_parents)ræ   Úparent_types    €r#   r  z&table_boxes_children.<locals>.<lambda>G  s&   ø€ ˜u×7Ñ7Ð7ò ?Ø&¨%×*>Ñ*>Ð>ð r%   )rQ   r   ÚTableColumnBoxÚTableColumnGroupBoxÚspanÚranger`   Útabular_containerrf   Úinternal_table_or_captionr	  rd   ÚzipÚTableBoxr  ÚTableRowBoxÚTableRowGroupBoxr  r�   ÚInlineTableBoxÚtypeÚ
wrap_tablerY   rb   )
r"   rb   ræ   r$  Ú_Úinternalr^   Ú
prev_childÚ
next_childr!  s
            @r#   r  r  ó  s¿  ø€ ä�#”u×+Ñ+Ô,à‰Ü	�Cœ×2Ñ2Ô	3ð  (ö
ØÜ˜%¤×!5Ñ!5Ô6ò ð
ˆð 
ñ Ø�x‰xÐ 3§8¡8¨a¢<Ø‘à—x‘x�ä!& t£ö.Øô ×,Ñ,×;Ñ;¸CÀÕDð .ˆHð .ð ×Ò¤ X£°!Ò!3ð " " #˜‰ˆ�$Ø×.Ò.´=ÀÔ3FØ�L‰LŒNô ˆx‹=˜AÒØ% b q˜\‰NˆD�(Ø×2Ò2´}ÀTÔ7JØ—‘˜Q”ô .1ØÐ"�H˜S˜b�MÐ"ØØ!ˆh�q�rˆlÐ!˜DÐ!ó.
÷ð á)ˆJ˜˜zñ ˜:×?Ò?Ù˜:×?Ò?Ü˜%Ô ò 	ð€Hò ô �#”u—~‘~Ô&ä Ø�œ5×,Ñ,Ù2ó4‰ô 
�Cœ×/Ñ/Ô	0ä   h´×0AÑ0AÓBˆä�#”u×(Ñ(Ô)ä   h´×0BÑ0BÓC‰ô !Ø�œ5×,Ñ,ÙCóEˆô
 �#”u—‘Ô'Ü Ø�œ5×/Ñ/Ù6ó8‰ô ˜3“iˆÜ Ø�œ5Ÿ>™>ó@óAˆô
 �#”u—~‘~Ô&Ü˜#˜xÓ(Ð(ä˜H“~ˆŒØˆ
ùòi
ùò.ùô0s   ½#K;Â'L Å)4Lc           
      ó  — g }g }g }t         j                  |t         j                  |t         j                  |t         j                  |t         j
                  |i}|D ]  }|t        |«         j                  |«       Œ! g g dœ}|D ]#  }||j                  d      j                  |«       Œ% t        t        | |t         j                  «      «      }	d}
|	D ]B  }|
|_        |j                  r|j                  D ]  }|
|_        |
dz  }
Œ Œ4|
|j                  z  }
ŒD |
}t        | |t         j                  «      }g }d}d}|D ]D  }|j                  d   }|dk(  r|€
d|_        |}Œ#|d	k(  r|€
d|_        |}Œ4|j                  |«       ŒF |�|gng |z   |�|gng z   }d}|D �]*  }|j                  D �cg c]  }t!        «       ‘Œ }}|j                  D ]ß  }|j#                  d«      }d}
|j                  D ]»  }|
|v r
|
dz  }
|
|v rŒ
|
|_        |
|j$                  z   }|j&                  dk7  rxt)        |«      dz   }|j&                  dk(  r
|}||_        n-t+        |j&                  |«      |_        |d|j&                  dz
   }t-        |
|«      }|D ]  }|j/                  |«       Œ |}
t1        ||
«      }Œ½ Œá |t)        |j                  «      z  }�Œ- | j3                  |«      }|j                  j5                  «       |_        t7        |	«      |_        |j                  d
   dk(  rt;        |||«      |_        t?        | t         j@                  «      rt         jB                  }nt         jD                  }|jG                  | |d   |gz   |d   z   «      }|j                  j5                  «       |_        d|_$        tJ        jL                  D ]>  } |j                  |    |j                  | <   tJ        jN                  |    |j                  | <   Œ@ |S c c}w )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   Úborder_collapseÚcollapser4  r5  )(r   r"  r#  r*  r+  ÚTableCaptionBoxr-  rW   r.   rY   r  Úgrid_xrb   r$  Ú	is_headerÚ	is_footerrX   rd   ÚcolspanÚrowspanrf   rÃ   r%  rÀ   rÂ   Úcopy_with_childrenr¶   ÚtupleÚcolumn_groupsr   Úcollapsed_border_gridrQ   r,  ÚInlineBlockBoxrŽ   r`   Úis_table_wrapperr   ÚTABLE_WRAPPER_BOX_PROPERTIESÚINITIAL_VALUES)!r"   rb   ÚcolumnsÚrowsÚall_captionsÚby_typeræ   ÚcaptionsÚcaptionrA  r:  ÚgroupÚcolumnÚ
grid_widthÚ
row_groupsÚbody_row_groupsÚheaderÚfooterr(   Úgrid_heightÚrowÚoccupied_cells_by_rowÚoccupied_cells_in_this_rowÚcellÚ
new_grid_xÚmax_rowspanÚspanned_rowsÚspanned_columnsÚoccupied_cellsr   r  r  rt   s!                                    r#   r.  r.  Q  sA  € ð €GØ€DØ€Lä×Ñ˜gÜ×!Ñ! 7Ü×Ñ˜4Ü×Ñ Ü×Ñ˜|ð€Gð ò +ˆØ”�U“Ñ×#Ñ# EÕ*ð+ð  RÑ(€HØò @ˆØ�—‘˜~Ñ.Ñ/×6Ñ6°wÕ?ð@ô œØˆW”e×/Ñ/ó1ó 2€Mà€FØò 	!ˆØˆŒØ�>Š>ØŸ.™.ò �ð !'�”Ø˜!‘‘ñ	ð �e—j‘jÑ ‰Fð	!ð €Jä˜s D¬%×*@Ñ*@ÓA€Jà€OØ€FØ€FØò 	*ˆØ—+‘+˜iÑ(ˆØÐ-Ò-°&°.Ø"ˆEŒOØ‰FØÐ/Ò/°F°NØ"ˆEŒOØ‰Fà×"Ñ" 5Õ)ð	*ð Ð'ˆ&‰¨RØñ	àÐ'ˆ&‰¨Rñ	1ð ð €KØó +ˆð 38·.±.Ö A¨3¤¥Ð AÐÐ AØ—>‘>ò 	5ˆCØ)>×)BÑ)BÀ1Ó)EÐ&àˆFØŸ™ò 5�àÐ :Ñ:Ø˜a‘K�Fð Ð :Ò:à$�”Ø# d§l¡lÑ2�
à—<‘< 1Ò$Ü"%Ð&;Ó"<¸qÑ"@�KØ—|‘| qÒ(à'<˜Ø'2˜�ä'*¨4¯<©<¸Ó'E˜œØ'<Ð=N¸d¿l¹lÈQÑ>NÐ'O˜Ü&+¨F°JÓ&?�OØ*6ò ?˜Ø&×-Ñ-¨oÕ>ð?à#�Ü  ¨VÓ4‘
ñ)5ð		5ð2 	”s˜5Ÿ>™>Ó*Ñ*Šð;+ð> ×"Ñ" :Ó.€EØ—+‘+×"Ñ"Ó$€E„KÜ Ó.€EÔØ‡{�{Ð$Ñ%¨Ò3Ü&<Ø�:˜{ó',ˆÔ#ô �#”u×+Ñ+Ô,Ü×+Ñ+‰ä—~‘~ˆà×)Ñ)ØˆX�e‰_ ˜wÑ&¨°(Ñ);Ñ;ó=€Gà—M‘M×&Ñ&Ó(€G„MØ#€GÔô ×7Ñ7ò <ˆØ#Ÿk™k¨$Ñ/ˆ�‰�dÑÜ&×5Ñ5°dÑ;ˆ�‰�DÒð<ð €Nùòg !Bs   Æ+O>c                 ó   — t        | t        j                  «      r+t        j                  j	                  | | j
                  «      }n–t        | t        j                  «      r-| j                  }t        j                  j	                  | |«      }nOt        | t        j                  «      r3t        j                  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)rQ   r   rC  rŽ   r`   rb   r‹   ÚreplacementÚBlockReplacedBoxÚInlineLevelBoxÚsetattrr.   )r"   ÚlayoutÚ	anonymousra  s       r#   Úblockifyrg  Ô  sÇ   € ô �#”u×+Ñ+Ô,Ü—N‘N×1Ñ1°#°s·|±|ÓD‰	Ü	�Cœ×0Ñ0Ô	1Ø—o‘oˆÜ×*Ñ*×9Ñ9¸#¸{ÓK‰	Ü	�Cœ×-Ñ-Ô	.Ü—N‘N×1Ñ1°#¸°uÓ=ˆ	Ü��s˜6˜( %Ð(¨%Õ0àˆ
Ø—i‘i€I„OÜˆI˜˜V˜H EÐ*¨DÔ1ØÐr%   c                 óÎ   — t        | t        j                  «      r| j                  «       r| S | j                  D �cg c]  }t        |«      ‘Œ }}t        | |«      | _        | S c c}w )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

    )rQ   r   rÆ   r  rb   r   Úflex_childrenr  s      r#   r   r   æ  óV   € ô �cœ5Ÿ?™?Ô+¨s¯~©~Ô/?Øˆ
ð 03¯|©|Ö< e”
˜5Õ!Ð<€HÐ<Ü   hÓ/€C„LØ€Jùò =ó   »A"c                 ó0  — t        | t        j                  «      r{g }|D ]r  }d„ |_        |j	                  «       rd|_        t        |t        j                  «      r|j                  j                  d«      sŒX|j                  t        |d«      «       Œt |S |S )Nc                   ó   — y)NFr+   r+   r%   r#   r  zflex_children.<locals>.<lambda>û  s   � r%   Tr¡   r   )rQ   r   ÚFlexContainerBoxÚ
is_floatedÚis_in_normal_flowÚis_flex_itemr_   r^   ÚstriprW   rg  )r"   rb   ri  ræ   s       r#   ri  ri  ÷  sˆ   € Ü�#”u×-Ñ-Ô.ØˆØò 		:ˆEÙ,ˆEÔØ×&Ñ&Ô(Ø%)�Ô"Ü˜%¤§¡Ô/¸¿
¹
×8HÑ8HÈÔ8Mð Ø× Ñ ¤¨%°Ó!8Õ9ð		:ð Ðàˆr%   c                 óÎ   — t        | t        j                  «      r| j                  «       r| S | j                  D �cg c]  }t        |«      ‘Œ }}t        | |«      | _        | S c c}w )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

    )rQ   r   rÆ   r  rb   r   Úgrid_childrenr  s      r#   r   r   	  rj  rk  c                 ó   — t        | t        j                  «      rsg }|D ]j  }|j                  «       rd|_        t        |t        j
                  «      r|j                  j                  d«      sŒP|j                  t        |d«      «       Œl |S |S )NTr¡   r   )
rQ   r   ÚGridContainerBoxrp  Úis_grid_itemr_   r^   rr  rW   rg  )r"   rb   rt  ræ   s       r#   rt  rt    s€   € Ü�#”u×-Ñ-Ô.ØˆØò 	:ˆEØ×&Ñ&Ô(Ø%)�Ô"Ü˜%¤§¡Ô/¸¿
¹
×8HÑ8HÈÔ8Mð Ø× Ñ ¤¨%°Ó!8Õ9ð	:ð Ðàˆr%   c                 óˆ  — t        | t        j                  «      rÊ| j                  }|s|S t        j                  d|«      }| j                  d   dv }| j                  d   dv }|rt        j                  d|«      }|r|j                  dd«      }|rIt        j                  d|«      x}}|r|j                  d«      r|dd }d| _        |j                  d«      }nd	}|| _        |S | j                  D ]N  }t        ||«      }t        |t        j                  t        j                  f«      r|}Œ<|j!                  «       sŒMd	}ŒP |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ˆ   )rx   Únowrap©rx   rz  zpre-liner¡   r
   NTF)rQ   r   r_   r^   ÚLINE_FEED_REÚsubr.   ÚTAB_REÚreplaceÚSPACE_RErÁ   Úleading_collapsible_spaceÚendswithrb   r5   r�   rp  )r"   Úfollowing_collapsible_spacer^   Únew_line_collapseÚspace_collapseÚprevious_textræ   Úchild_collapsible_spaces           r#   r5   r5   +  sK  € ô �#”u—}‘}Ô%Ø�x‰xˆÙØ.Ð.ô ×Ñ  dÓ+ˆàŸI™I mÑ4Ð8LÐLÐØŸ™ =Ñ1ð 6,ð ,ˆñ ä—:‘:˜d DÓ)ˆDáð
 —<‘<  cÓ*ˆDáÜ#+§<¡<°°TÓ#:Ð:ˆM˜DÙ*¨t¯©¸sÔ/CØ˜A˜B�x�Ø04�Ô-Ø*7×*@Ñ*@ÀÓ*EÑ'à*/Ð'àˆŒð 'Ð&ð —\‘\ò 	4ˆEÜ&8ØÐ2ó'4Ð#ä˜%¤%§-¡-´·±Ð!AÔBØ.EÑ+Ø×(Ñ(Õ*Ø.3Ñ+ð	4ð 'Ð&r%   c                 óä  — t        | t        j                  «      r©| j                  d   }| j                  d   xs dj	                  d«      d   j                  «       }|dk7  r-	 t        t        t        d„ dœ|   | j                  |«      | _	        | j                  d	   dk(  r"| j                  j                  d
d«      | _	        y y | j                  «       s| j                  D ]  }t        |«       Œ y y )NÚtext_transformrÎ   rô   ú-r   r*   c                 ó,   — | j                  t        «      S r2   )Ú	translateÚASCII_TO_WIDE)r^   Ú	lang_codes     r#   r  z(process_text_transform.<locals>.<lambda>p  s   € °d·n±nÄ]Ó6S€ r%   )Ú	uppercaseÚ	lowercaseÚ
capitalizez
full-widthÚhyphensõ   Â­)rQ   r   r_   r.   ÚsplitÚlowerr�  r�  r‘  r^   r  r  rb   r6   )r"   r‰  rŽ  ræ   s       r#   r6   r6   `  så   € ô �#”u—}‘}Ô%ØŸ™Ð#3Ñ4ˆØ—Y‘Y˜vÑ&Ò,¨"×3Ñ3°CÓ8¸Ñ;×AÑAÓCˆ	Ø˜VÒ#ðÜ&Ü&Ü(ÙSñ	ð
 ñð
 "Ÿh™h¨	ó3ˆCŒHð �9‰9�YÑ 6Ò)Ø—x‘x×'Ñ'¨°"Ó5ˆC�Hð *ð �^‰^ÔØ—\‘\ò 	*ˆEÜ" 5Õ)ñ	*ð r%   c                 ó:  — i }|dk(  r	ddddddœ}n|dv rd	d
i}|j                  «       D ]  \  }}| j                  ||«      } Œ |dk(  rEt        j                  d| «      } dD ]  }| j                  |d«      } Œ t        j                  d| «      } | j	                  «       S )NÚelu   Î‘Îªu   Î‘Î«u   ÎŸÎªu   ÎŸÎ«u   Î—Î«)u   Î¬Î¹u   Î¬Ï…u   ÏŒÎ¹u   ÏŒÏ…u   Î­Ï…©ÚtrÚazÚiõ   Ä°ÚNFDu   Ì“Ì”Ì�Ì€Ì†Í‚Ì„Í…rô   ÚNFC)rµ   r  ÚunicodedataÚ	normalizeÚupper)r^   rŽ  ÚmapperrÓ   rÔ   Úchars         r#   r�  r�  y  sÅ   € Ø€Fà�DÒð
 ØØØØñ
‰ð 
�lÑ	"ð �ð
ˆð —l‘l“nò (‰
ˆˆUØ�|‰|˜C Ó'‰ð(ð �DÒô ×$Ñ$ U¨DÓ1ˆØFò 	*ˆDØ—<‘<  bÓ)‰Dð	*ä×$Ñ$ U¨DÓ1ˆà�:‰:‹<Ðr%   c                 ó¤   — i }|dv rdddœ}n|dk(  rdddd	œ}|j                  «       D ]  \  }}| j                  ||«      } Œ | j                  «       S )
Nr˜  u   Ä±r›  )ÚIrœ  Últu   iÌ‡Ì€u   iÌ‡Ì�u   iÌ‡Ìƒ)õ   ÃŒõ   Ã�u   Ä¨)rµ   r  r•  )r^   rŽ  r¢  rÓ   rÔ   s        r#   r�  r�  ž  ss   € Ø€Fà�LÑ ð Øñ
‰ð 
�dÒ	ð ØØñ
ˆð —l‘l“nò (‰
ˆˆUØ�|‰|˜C Ó'‰ð(ð �:‰:‹<Ðr%   c                 ó  — d}d}d}t        | «      D ]m  \  }}|rd}Œt        j                  |«      d   }|s=|dv r9d}|dk(  r| ||dz    dk(  rd}d	}n)|d
v rt        ||«      }n|j	                  «       }n|dk(  rd}||z  }Œo |S )uC   Capitalize words according to CSSâ€™s "text-transform: capitalize".Frô   r   )ÚLÚNTÚnlr   ÚijÚIJr˜  ÚZ)Ú	enumeraterŸ  Úcategoryr�  r¡  )r^   rŽ  Úletter_foundÚskip_next_letterÚoutputr›  Úletterr±  s           r#   r‘  r‘  µ  s¹   € à€LØÐØ€FÜ˜t“_ò ‰	ˆˆ6ÙØ$ÐØÜ×'Ñ'¨Ó/°Ñ2ˆÙ ¨JÑ 6ØˆLØ˜DÒ  T¨!¨A¨a©C [°DÒ%8Ø#'Ð Ø‘Ø˜lÑ*Ü" 6¨9Ó5‘àŸ™›‘Ø˜Š_Ø ˆLØ�&Ñ‰ð!ð" €Mr%   c                 ó&  — | j                   r| j                  «       r| S t        | j                   «      }|r"| j                  du r|d   j                  | _        g }d}|D ]Z  }|rd|_        t	        |t
        j                  «      r|j                  s|j                  }Œ?d}|j                  t        |«      «       Œ\ | j                  du r|| _
        t	        | t
        j                  «      s	|| _         | S g }g }|D �]%  }t	        |t
        j                  «      rJ ‚|r"|j                  «       r|j                  |«       ŒDt	        |t
        j                  «      s|r_|j                  «       sO|s;t	        |t
        j                  «      r!|j                  dk(  r|j                   d   dv rŒ­|j                  |«       Œ¿|rTt
        j                  j#                  | |«      }t
        j$                  j#                  | |g«      }	|j                  |	«       g }|j                  |«       �Œ( |rft
        j                  j#                  | |«      }|r3t
        j$                  j#                  | |g«      }	|j                  |	«       n|j                  |«       || _         | 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{  )rb   r  rY   r�  rQ   r   r_   r^   rW   r   Útrailing_collapsible_spaceÚBlockContainerBoxrë   Úis_absolutely_positionedrc  rp  r.   r`   rŽ   )
r"   Úbox_childrenrb   r·  ræ   Únew_line_childrenÚnew_childrenÚ	child_boxÚline_boxrf  s
             r#   r   r   Î  sE  € ðL �<Š<˜3Ÿ>™>Ô+Øˆ
ä˜Ÿ™Ó%€Lá˜×5Ñ5¸Ñ>à˜‰O×5Ñ5ð 	Ô%ð €HØ!&ÐØò 4ˆñ
 &Ø.2ˆEÔ+ä�eœUŸ]™]Ô+°E·J²JØ).×)HÑ)HÑ&à).Ð&Ø�O‰OœO¨EÓ2Õ3ð4ð ×%Ñ%¨Ñ.Ø)CˆÔ&ä�cœ5×2Ñ2Ô3ØˆŒØˆ
àÐØ€Làó +ˆ	Ü˜i¬¯©Ô7Ð7Ð7Ù ×!CÑ!CÔ!EØ×$Ñ$ YÕ/Ü˜	¤5×#7Ñ#7Ô8Ù!¨)×*EÑ*EÔ*Gñ !Ü˜y¬%¯-©-Ô8ð —N‘N cÒ)Ø—O‘O MÑ2ð 78ò 8à!×(Ñ(¨Õ3á ô !Ÿ=™=×7Ñ7¸Ð=NÓO�Ü!ŸN™N×9Ñ9¸#À¸zÓJ�	Ø×#Ñ# IÔ.Ø$&Ð!Ø×Ñ 	Ö*ð1+ñ2 ä—=‘=×/Ñ/°Ð5FÓGˆÙÜŸ™×5Ñ5°c¸H¸:ÓFˆIØ×Ñ 	Õ*ð ×Ñ Ô)à€C„LØ€Jr%   c                 ód  — | j                   r| j                  «       r| S g }d}| j                   D ]õ  }t        |t        j                  «      r·t        | j                   «      dk(  sJ d| j                   z  «       ‚d}	 t        ||¬«      \  }}}|€nMt        j                  j                  | |g«      }|j                  |«       |j                  t        |«      «       Œa|r"t        j                  j                  | |g«      }n|}nt        |«      }||urd}|j                  |«       Œ÷ |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)rb   r  rQ   r   rë   rf   Ú_inner_block_in_inlinerŽ   r`   rW   r    )	r"   r¼  Úchangedræ   ÚstackÚnew_liner   ÚanonÚ	new_childs	            r#   r    r    >  s;  € ðz �<Š<˜3Ÿ>™>Ô+Øˆ
à€LØ€Gà—‘ò 'ˆÜ�eœUŸ]™]Ô+Ü�s—|‘|Ó$¨Ò)ð Bð2Ø47·L±LñAóBÐ)ð ˆEØÜ)?Ø eô*-Ñ&�˜% à�=ØÜ—~‘~×4Ñ4°S¸8¸*ÓE�Ø×#Ñ# DÔ)Ø×#Ñ#¤O°EÓ$:Ô;ð ñ ô "ŸN™N×9Ñ9¸#À¸zÓJ‘	ð %‘	ô (¨Ó.ˆIà˜EÑ!ØˆGØ×Ñ˜IÕ&ð9'ñ< Ø#ˆŒØ€Jr%   c                 ó  — g }d}d}d}|du }|rd}n|j                  «       \  \  }}t        | j                  |d «      D ]®  \  }}	||z   }
t        |	t        j
                  «      r|	j                  «       r|�J ‚|	}|
dz  }
nUt        |	t        j                  «      rt        |	|«      }d}|\  }}}n|�J ‚t        |	«      }||	urd}|j                  |«       |€Œ™|
|i}| j                  |«      }  n |s|r| j                  |«      } | ||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°  rb   rQ   r   ÚBlockLevelBoxrp  r�   rÁ  r    rW   r?  )r"   rÀ  r¼  Úblock_level_boxÚ	resume_atrÂ  Úis_startÚskipr›  ræ   ÚindexÚ	recursionrÆ  s                r#   rÁ  rÁ  ¤  sE  € ð €LØ€OØ€IØ€Gà˜TÐ!€HÙØ‰à(×.Ñ.Ó0ÑÑˆˆzä˜cŸl™l¨4¨5Ð1Ó2ò 7‰ˆˆ5Ø�D‘ˆÜ�uœe×1Ñ1Ô2Ø×'Ñ'Ô)ØÐ%Ð%Ð%Ø#ˆOØ�Q‰J‰Eä˜%¤§¡Ô1Ü2°5¸*ÓE�	Ø!�
Ø8AÑ5�	˜?©Ià!Ð)Ð)Ð)Ü+¨EÓ2�	à Ñ%Ø�Ø×Ñ 	Ô*ØÑ&Ø 	Ð*ˆIØ×(Ñ(¨Ó6ˆCÙð-7ñ0 ‘dØ×(Ñ(¨Ó6ˆCà� Ð*Ð*r%   c                 ó  — | }| j                   j                  «       dk(  rD| j                  d   dk(  r2| j                  D ]#  }|j                   j                  «       dk(  sŒ!|} 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)rB   r•  r.   rb   Úviewport_overflow)Úroot_boxÚ
chosen_boxræ   s      r#   r8   r8   Ù  s�   € ð €JØ×Ñ×"Ñ"Ó$¨Ò.Ø�N‰N˜:Ñ&¨)Ò3Ø×&Ñ&ò 	ˆEØ× Ñ ×&Ñ&Ó(¨FÓ2Ø"�
Ùð	ð
 ",×!1Ñ!1°*Ñ!=€HÔØ#,€J×Ñ�ZÑ Ø€Or%   c                 ó>  — | j                  «       } t        | «       t        | t        j                  «      r| j
                  j                  «       S t        | t        j                  «      r4dj                  d„ | j                  «       D «       «      j                  «       S y)Nrô   c              3   ó
  K  — | ]{  }|j                   j                  d «      s^|j                   j                  d«      sC|j                   j                  d«      s(t        |t        j                  «      r|j
                  –— Œ} y­w)z::beforez::afterr�   N)rB   r‚  rQ   r   r_   r^   )r§   ræ   s     r#   r¨   zbox_text.<locals>.<genexpr>ø  sf   è ø€ ò .Ø Ø×$Ñ$×-Ñ-¨jÔ9Ø×!Ñ!×*Ñ*¨9Ô5Ø×!Ñ!×*Ñ*¨:Ô6Ü�uœeŸm™mÔ,ð	 �J�Jñ.ùs   ‚BB)
rÅ   r5   rQ   r   r_   r^   rr  rÆ   r¹   rÇ   r!   s    r#   rþ   rþ   ï  sw   € ð �,‰,‹.€CÜ�sÔÜ�#”u—}‘}Ô%Ø�x‰x�~‰~ÓÐÜ	�CœŸ™Ô	)Ø�w‰wñ .Ø$'§O¡OÓ$5ô.ó .÷
 /4©e«gð	6ð r%   c                 ó6  ‡ — ‰ dv rt        |«      S ‰ dv rCt        |t        j                  «      r(dj	                  ˆ fd„|j                  «       D «       «      S y‰ dk(  r=d}d}t        |«      }|D ]'  }t        j                  |«      }|dvr|r |S d}||z  }Œ) |S y )	N)r^   rC   )rK   rN   rô   c              3   ó¤   •K  — | ]G  }|j                   j                  d ‰› �«      r't        |t        j                  «      st        |«      –— ŒI y­w)rz   N)rB   r‚  rQ   r   rÆ   rþ   )r§   ræ   Ú	text_parts     €r#   r¨   zextract_text.<locals>.<genexpr>  sF   øè ø€ ò 8Ø$)Ø×$Ñ$×-Ñ-°°9°+Ð.>Ô?Ü˜u¤e§o¡oÔ6ô ˜—ñ8ùs   ƒAArI   F)ÚPsÚPeÚPiÚPfÚPoT)rþ   rQ   r   rÆ   r¹   rÇ   rŸ  r±  )rÚ  r"   Úcharacter_foundÚfirst_letterr^   rµ  r±  s   `      r#   r·   r·     sÆ   ø€ ØÐ'Ñ'Ü˜‹}ÐØ	Ð)Ñ	)Ü�cœ5Ÿ?™?Ô+Ø—7‘7ó 8Ø-0¯_©_Ó->ô8ó 8ð 8ð Ø	�nÒ	$àˆØˆÜ˜‹}ˆØò 	#ˆFÜ"×+Ñ+¨FÓ3ˆHØÐ=Ñ=Ù"Øð Ðð #'�Ø˜FÑ"‰Lð	#ð Ðð 
%r%   r2   )NNNNNNN)NN)F)IÚ__doc__ÚrerŸ  rô   r   Úcssr   r   Úlayout.tabler   Úloggerr   Útext.constantsr	   r   rŽ   r�   rC  r)  r,  ÚFlexBoxÚInlineFlexBoxÚGridBoxÚInlineGridBoxr*  r+  r"  r#  r  r9  rA   r%  Úchrr�  rÀ   Úcompiler|  r~  r€  r$   r?   rD   r3   r\   rZ   rè   ra   rñ   r}   re   rV   Úsearchr	  r  r   r  r.  rg  r   ri  r   rt  r5   r6   r�  r�  r‘  r   r    rÁ  r8   rþ   r·   )r›  s   0r#   ú<module>rï     s¼  ðñó 
Û å ß %Ý 1Ý Ý ,Ý ðØ�u—~‘~ðà˜Ÿ™ðð ˜EŸN™Nð	ð
 ˜U×1Ñ1ðð ˜Ÿ™ðð ˜×-Ñ-ðð �u—}‘}ðð ˜×+Ñ+ðð �u—}‘}ðð ˜×+Ñ+ðð  �E×%Ñ%ð!ð" ˜%×0Ñ0ð#ð$ ˜U×3Ñ3ð%ð& ˜U×3Ñ3ð'ð( �u×+Ñ+ð)ð* ˜U×6Ñ6ð+ð, �U×'Ñ'ð-ð. ˜×-Ñ-ñ/Ð ñ6 .3°4¸Ó->Ö?¨�‘C˜˜F™
“OÑ#Ò?€Ø × Ñ ˜H¨HÑ5Ô 6àˆr�z‰z˜'Ó"€Ø	ˆ�‰Ð$Ó	%€Øˆ2�:‰:�hÓ€òòòD.ð FJó]Kò@+ò\8ðz ?CØIMØ!%ó	uðt )-ó'òT5ò@Hò0-ò($ðN ,6¨2¯:©:°eÓ+<×+CÑ+Có Pó
6ò4/ò [ò|@òFò$ò"ò$ò"ó"2'òj*ò2"òJò.ò2mò`cóL2+òjò,ó$ùòi. @s   Ä)H