Ë
    –2Úi,>  ã            	       ó~  — d Z ddlmZ ddlmZ ddlmZmZmZ dZed   Z	 e
e«      df e
ee	d	fhz  «      df e
ee	d
fe	dfhz  «      df e
e	dfe	dfg«      df e
e	dfe	dfg«      dfdœZ e
d«      Z G d„ de«      Z G d„ d«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d«      Zy) úTree builder.é    )Úcopy)ÚElementTreeé   )Ú
namespacesÚscoping_elementsÚtable_insert_mode_elementsNÚhtmlFÚbuttonÚolÚulÚtableÚoptgroupÚoptionT)Nr   Úlistr   Úselect)ÚddÚdtÚlir   r   ÚpÚrpÚrtc                   ó   — e Zd Zd„ Zy)ÚActiveFormattingElementsc                 ó  — d}|t         urj| ddd…   D ]_  }|t         u r nU|j                  |j                  k(  xr |j                  |j                  k(  }|r|dz  }|dk(  sŒN| j                  |«        n t        j                  | |«       y)z#Append node to the end of the list.r   Néÿÿÿÿr   é   )ÚMarkerÚ
name_tupleÚ
attributesÚremover   Úappend)ÚselfÚnodeÚequal_countÚelementÚnodes_equals        úL/var/www/html/acx/venv/lib/python3.12/site-packages/tinyhtml5/treebuilder.pyr"   zActiveFormattingElements.append   s•   € àˆØ”vÑØ¡ " ™:ò 
�ØœfÑ$Ùà×&Ñ&¨$¯/©/Ñ9ò :Ø×&Ñ&¨$¯/©/Ñ9ð ñ Ø 1Ñ$�KØ !Ó#Ø—K‘K Ô(Ùð
ô 	�‰�D˜$Õó    N)Ú__name__Ú
__module__Ú__qualname__r"   © r)   r(   r   r      s   „ ó r)   r   c                   ó‚   — e Zd Zdd„Zd„ Zd„ Zd„ Z eee«      Zd„ Z	d„ Z
 ee	e
«      Zd„ Zd	„ Zd
„ Zd„ Zdd„Zd„ Zd„ Zy)ÚElementNc                 óþ   — || _         || _        t        j                  | j	                  ||«      «      | _        |€t        | j                   f| _        n| j                  | j                   f| _        g | _        d | _	        y ©N)
ÚnameÚ	namespacer   r/   Ú_get_etree_tagÚ_elementÚ_htmlr   Ú	_childrenÚparent©r#   r2   r3   s      r(   Ú__init__zElement.__init__-   si   € ØˆŒ	Ø"ˆŒÜ#×+Ñ+¨D×,?Ñ,?ÀÀiÓ,PÓQˆŒØÐÜ# T§Y¡YÐ.ˆD�Oà"Ÿn™n¨d¯i©iÐ7ˆDŒOØˆŒð ˆ�r)   c                 ó   — |€|S d|› d|› �S )Nú{ú}r-   r9   s      r(   r4   zElement._get_etree_tag:   s   € Ø Ð(ˆtÐF°°9°+¸RÀ¸vÐ.FÐFr)   c                 ó.   — | j                   j                  S r1   )r5   Úattrib©r#   s    r(   Ú_get_attributeszElement._get_attributes=   s   € Ø�}‰}×#Ñ#Ð#r)   c                 óÐ   — | j                   j                  }|j                  «        |r>|j                  «       D ]*  \  }}t	        |t
        «      rd|d   › d|d   › �n|}|||<   Œ, y y )Nr<   é   r=   r   )r5   r?   ÚclearÚitemsÚ
isinstanceÚtuple)r#   r    Úelement_attributesÚkeyÚvaluer2   s         r(   Ú_set_attributeszElement._set_attributes@   st   € Ø!Ÿ]™]×1Ñ1ÐØ× Ñ Ô"Ùð )×.Ñ.Ó0ò 1‘
��UÜ2<¸SÄ%Ô2H˜˜C ™F˜8 2 c¨!¡f XÑ.Èc�Ø+0Ð" 4Ò(ñ1ð r)   c                 ó   — | j                   S r1   )r7   r@   s    r(   Ú_get_childrenzElement._get_childrenM   s   € Ø�~‰~Ðr)   c                 ó`   — | j                   d d …= g | _        |D ]  }| j                  |«       Œ y r1   )r5   r7   Úinsert_child)r#   rJ   r&   s      r(   Ú_set_childrenzElement._set_childrenP   s2   € Ø�M‰Mš!ÐØˆŒØò 	'ˆGØ×Ñ˜gÕ&ñ	'r)   c                 ón   — t        | j                  j                  xs t        | j                  «      «      S )z>Return True if the node has children or text, False otherwise.)Úboolr5   ÚtextÚlenr@   s    r(   Úhas_contentzElement.has_contentZ   s%   € ä�D—M‘M×&Ñ&Ò<¬#¨d¯m©mÓ*<Ó=Ð=r)   c                 ó’   — | j                   j                  |«       | j                  j                  |j                  «       | |_        y)z+Insert node as a child of the current node.N)r7   r"   r5   r8   ©r#   r$   s     r(   Úappend_childzElement.append_child^   ó1   € à�‰×Ñ˜dÔ#Ø�‰×Ñ˜TŸ]™]Ô+Øˆ�r)   c                 óº   — t        | j                  «      j                  |j                  «      }| j                  j                  ||j                  «       | |_        y)z’Insert node as a child of the current node, before reference.

        Raise ValueError if reference is not a child of the current node.

        N)r   r5   ÚindexÚinsertr8   )r#   r$   Ú	referencer[   s       r(   Úinsert_beforezElement.insert_befored   sB   € ô �T—]‘]Ó#×)Ñ)¨)×*<Ñ*<Ó=ˆØ�‰×Ñ˜U D§M¡MÔ2Øˆ�r)   c                 ó’   — | j                   j                  |«       | j                  j                  |j                  «       d|_        y)z2Remove node from the children of the current node.N)r7   r!   r5   r8   rW   s     r(   Úremove_childzElement.remove_childn   rY   r)   c                 ó  — t        | j                  «      sG| j                  j                  sd| j                  _        | j                  xj                  |z  c_        y|€P| j                  d   j                  sd| j                  d   _        | j                  d   xj                  |z  c_        yt	        | j                  «      }|j                  |j                  «      }|dkD  rY| j                  |dz
     j                  sd| j                  |dz
     _        | j                  |dz
     xj                  |z  c_        y| j                  j                  sd| j                  _        | j                  xj                  |z  c_        y)zæInsert data as text in the current node.

        Text is positioned before the start of node insert_before or to the end
        of the node's text.

        If insert_before is a node, insert the text before this node.

        Ú Nr   r   r   )rT   r5   rS   Útailr   r[   )r#   rS   r^   Úchildrenr[   s        r(   Úinsert_textzElement.insert_textt   s#  € ô �4—=‘=Ô!Ø—=‘=×%Ò%Ø%'�—‘Ô"Ø�M‰M×Ò $Ñ&ÖØÐ"à—=‘= Ñ$×)Ò)Ø)+�—‘˜bÑ!Ô&Ø�M‰M˜"Ñ×"Ò" dÑ*Ö"ô ˜DŸM™MÓ*ˆHØ—N‘N =×#9Ñ#9Ó:ˆEØ�qŠyØ—}‘} U¨Q¡YÑ/×4Ò4Ø46�D—M‘M %¨!¡)Ñ,Ô1Ø—‘˜e a™iÑ(×-Ò-°Ñ5Ö-à—}‘}×)Ò)Ø)+�D—M‘MÔ&Ø—‘×"Ò" dÑ*Ö"r)   c                 óÚ   —  t        | «      | j                  | j                  «      }| j                  j                  r.t        | j                  j                  «      |j                  _        |S )zƒReturn a shallow copy of the current node.

        The node has the same name and attributes, but no parent or children.

        )Útyper2   r3   r5   r?   r   )r#   r&   s     r(   ÚclonezElement.clone“   sM   € ð ”$�t“*˜TŸY™Y¨¯©Ó7ˆØ�=‰=×ÒÜ&*¨4¯=©=×+?Ñ+?Ó&@ˆG×ÑÔ#Øˆr)   c                 óò  — |j                   rA|j                   d   j                  xj                  | j                  j                  z  c_        np|j                  j                  sd|j                  _        | j                  j                  �3|j                  xj                  | j                  j                  z  c_        d| j                  _        | j                   D ]  }|j	                  |«       Œ g | _         y)z­Move all the children of the current node to parent.

        This is needed so that trees that don't store text as nodes move the
        text in the correct way.

        r   rb   N)rd   r5   rc   rS   rX   )r#   r8   Úchilds      r(   Úreparent_childrenzElement.reparent_childrenž   s±   € ð �?Š?Ø�O‰O˜BÑ×(Ñ(×-Ò-°·±×1CÑ1CÑCÖ-à—?‘?×'Ò'Ø')�—‘Ô$Ø�}‰}×!Ñ!Ð-Ø—‘×$Ò$¨¯©×(:Ñ(:Ñ:Õ$Øˆ�‰ÔØ—]‘]ò 	'ˆEØ×Ñ Õ&ð	'àˆ�r)   r1   )r*   r+   r,   r:   r4   rA   rK   Úpropertyr    rM   rP   rd   rU   rX   r^   r`   re   rh   rk   r-   r)   r(   r/   r/   ,   s`   „ óòGò$ò1ñ ˜/¨?Ó;€Jòò'ñ ˜ }Ó5€Hò>òòòó+ò>	ór)   r/   c                   ó   — e Zd Zd„ Zy)ÚCommentc                 óT   — t        j                  |«      | _        d | _        g | _        y r1   )r   rn   r5   r8   r7   )r#   Údatas     r(   r:   zComment.__init__³   s$   € ô $×+Ñ+¨DÓ1ˆŒØˆŒØˆ�r)   N©r*   r+   r,   r:   r-   r)   r(   rn   rn   ²   s   „ ór)   rn   c                   ó   — e Zd Zd„ Zy)ÚDocumentTypec                 óÞ   — t         j                  | d«       || j                  _        | j                  j	                  d|«       | j                  j	                  d|«       || _        || _        y )Nz
<!DOCTYPE>ÚpublicIdÚsystemId)r/   r:   r5   rS   ÚsetÚ	public_idÚ	system_id)r#   r2   rx   ry   s       r(   r:   zDocumentType.__init__¼   sT   € Ü×Ñ˜˜|Ô,Ø!ˆ�‰ÔØ�‰×Ñ˜* iÔ0Ø�‰×Ñ˜* iÔ0Ø"ˆŒØ"ˆ�r)   Nrq   r-   r)   r(   rs   rs   »   s   „ ó#r)   rs   c                   ó   — e Zd Zd„ Zy)ÚDocumentc                 ó0   — t         j                  | d«       y )NÚDOCUMENT_ROOT©r/   r:   r@   s    r(   r:   zDocument.__init__Æ   s   € Ü×Ñ˜˜Õ/r)   Nrq   r-   r)   r(   r{   r{   Å   s   „ ó0r)   r{   c                   ó   — e Zd Zd„ Zy)ÚDocumentFragmentc                 ó0   — t         j                  | d«       y )NÚDOCUMENT_FRAGMENTr~   r@   s    r(   r:   zDocumentFragment.__init__Ë   s   € Ü×Ñ˜Ð2Õ3r)   Nrq   r-   r)   r(   r€   r€   Ê   s   „ ó4r)   r€   c                   óœ   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Z eee«      Zd„ Zd„ Zdd„Zd„ Zdd„Zdd„Zd„ Zy)ÚTreeBuilderr   c                 óF   — |rd| _         nd| _         | j                  «        y)zeCreate a TreeBuilder.

        If namespace_html_elements is True, namespace HTML elements.

        zhttp://www.w3.org/1999/xhtmlN)Údefault_namespaceÚreset)r#   Únamespace_html_elementss     r(   r:   zTreeBuilder.__init__Ò   s    € ñ #Ø%CˆDÕ"à%)ˆDÔ"Ø�
‰
�r)   c                 óx   — g | _         t        «       | _        d | _        d | _        d| _        t        «       | _        y )NF)Úopen_elementsr   Úactive_formatting_elementsÚhead_elementÚform_elementÚinsert_from_tabler{   Údocumentr@   s    r(   r‡   zTreeBuilder.resetÞ   s6   € ØˆÔÜ*BÓ*DˆÔ'à ˆÔØ ˆÔà!&ˆÔä ›
ˆ�r)   Nc                 ó(  — t        |d«      }|s*t        |t        «      rt        |f}t        |t        «      sJ ‚t
        |   \  }}t        | j                  «      D ]1  }|r||k(  r y|s|j                  |k(  r y||j                  |v z  sŒ1 y t        ‚)Nr   TF)
ÚhasattrrF   Ústrr6   rG   Ú_list_elementsÚreversedrŠ   r   Ú
ValueError)r#   ÚtargetÚvariantÚ
exact_nodeÚlist_elementsÚinvertr$   s          r(   Úelement_in_scopezTreeBuilder.element_in_scopeé   s˜   € ô ˜V \Ó2ˆ
ÙÜ˜&¤#Ô&Ü ˜�Ü˜f¤eÔ,Ð,Ð,ä .¨wÑ 7Ñˆ�vä˜T×/Ñ/Ó0ò 	ˆDÙ˜d fšnÙÙ D§O¡O°vÒ$=ÙØ˜DŸO™O¨}Ð<Ó=Ùð	ô Ðr)   c                 ó"  — | j                   sy t        | j                   «      dz
  }| j                   |   }|t        u s|| j                  v ry |t        urA|| j                  vr3|dk(  rd}n+|dz  }| j                   |   }|t        ur|| j                  vrŒ3	 |dz  }| j                   |   }|j	                  «       }| j                  d|j                  |j                  |j                  dœ«      }|| j                   |<   || j                   d   k(  ry Œ{)Nr   r   r   ÚStartTag)rg   r2   r3   rp   )	r‹   rT   r   rŠ   rh   Úinsert_elementr2   r3   r    )r#   ÚiÚentryrh   r&   s        r(   Ú&reconstruct_active_formatting_elementsz2TreeBuilder.reconstruct_active_formatting_elementsÿ   s/  € ð ×.Ò.Øô �×/Ñ/Ó0°1Ñ4ˆØ×/Ñ/°Ñ2ˆØ”F‰?˜e t×'9Ñ'9Ñ9Øð œ6Ñ! e°4×3EÑ3EÑ&EØ�AŠvà�ØØ�‰FˆAà×3Ñ3°AÑ6ˆEð œ6Ñ! e°4×3EÑ3EÒ&Eð à�‰FˆAð ×3Ñ3°AÑ6ˆEØ—K‘K“MˆEð ×)Ñ)Ø"ØŸ
™
Ø"Ÿ_™_Ø×(Ñ(ñ	+ó ˆGð 29ˆD×+Ñ+¨AÑ.ð ˜$×9Ñ9¸"Ñ=Ò=Øð+ r)   c                 óÄ   — | j                   j                  «       }| j                   r:|t        ur1| j                   j                  «       }| j                   r
|t        urŒ/y y y y r1   )r‹   Úpopr   )r#   r    s     r(   Ú clear_active_formatting_elementsz,TreeBuilder.clear_active_formatting_elements/  sU   € Ø×/Ñ/×3Ñ3Ó5ˆØ×-Ò-°%¼vÑ2EØ×3Ñ3×7Ñ7Ó9ˆEð ×-Ò-°%¼vÓ2EÐ-Ð2EÐ-r)   c                 ól   — | j                   ddd…   D ]  }|t        u r y|j                  |k(  sŒ|c S  y)zšFind name between end of active formatting elements and last marker.

        If an element with this name exists, return it. Else return False.

        Nr   F)r‹   r   r2   )r#   r2   Úitems      r(   Ú%element_in_active_formatting_elementsz1TreeBuilder.element_in_active_formatting_elements4  sK   € ð ×3Ñ3±D°b°DÑ9ò 	ˆDð ”v‰~Øð ð —‘˜dÓ"Ø’ð	ð r)   c                 ó’   — | j                  |«      }| j                  j                  |«       | j                  j	                  |«       y r1   )Úcreate_elementrŠ   r"   r�   rX   )r#   Útokenr&   s      r(   Úinsert_rootzTreeBuilder.insert_rootC  s8   € Ø×%Ñ% eÓ,ˆØ×Ñ×!Ñ! 'Ô*Ø�‰×"Ñ" 7Õ+r)   c                 ór   — |d   }|d   }|d   }t        |||«      }| j                  j                  |«       y )Nr2   ru   rv   )rs   r�   rX   )r#   rª   r2   rx   ry   Údoctypes         r(   Úinsert_doctypezTreeBuilder.insert_doctypeH  s?   € Ø�V‰}ˆØ˜*Ñ%ˆ	Ø˜*Ñ%ˆ	ä˜t Y°	Ó:ˆØ�‰×"Ñ" 7Õ+r)   c                 ó>   — |j                  t        |d   «      «       y )Nrp   )rX   rn   )r#   rª   r8   s      r(   Úinsert_commentzTreeBuilder.insert_commentP  s   € Ø×ÑœG E¨&¡MÓ2Õ3r)   c                 ót   — |d   }|j                  d| j                  «      }t        ||«      }|d   |_        |S )z/Create an element but don't insert it anywhere.r2   r3   rp   )Úgetr†   r/   r    ©r#   rª   r2   r3   r&   s        r(   r©   zTreeBuilder.create_elementS  s>   € à�V‰}ˆØ—I‘I˜k¨4×+AÑ+AÓBˆ	Ü˜$ 	Ó*ˆØ" 6™]ˆÔØˆr)   c                 ó   — | j                   S r1   )Ú_insert_from_tabler@   s    r(   Ú_get_insert_from_tablez"TreeBuilder._get_insert_from_table[  s   € Ø×&Ñ&Ð&r)   c                 ó\   — || _         |r| j                  | _        y| j                  | _        y)z.Switch the function used to insert an element.N)rµ   Úinsert_element_tablerž   Úinsert_element_normal)r#   rJ   s     r(   Ú_set_insert_from_tablez"TreeBuilder._set_insert_from_table^  s)   € à"'ˆÔÙØ"&×";Ñ";ˆDÕà"&×"<Ñ"<ˆDÕr)   c                 ó  — |d   }t        |t        «      sJ d|› d�«       ‚|j                  d| j                  «      }t	        ||«      }|d   |_        | j                  d   j                  |«       | j                  j                  |«       |S )Nr2   zElement z not unicoder3   rp   r   )	rF   r’   r²   r†   r/   r    rŠ   rX   r"   r³   s        r(   r¹   z!TreeBuilder.insert_element_normalh  s‰   € Ø�V‰}ˆÜ˜$¤Ô$ÐC¨°°°lÐ&CÓCÐ$Ø—I‘I˜k¨4×+AÑ+AÓBˆ	Ü˜$ 	Ó*ˆØ" 6™]ˆÔØ×Ñ˜2Ñ×+Ñ+¨GÔ4Ø×Ñ×!Ñ! 'Ô*Øˆr)   c                 ó0  — | j                  |«      }| j                  d   j                  t        vr| j	                  |«      S | j                  «       \  }}|€|j                  |«       n|j                  ||«       | j                  j                  |«       |S )z.Create an element and insert it into the tree.r   )	r©   rŠ   r2   r	   r¹   Ú!get_table_misnested_node_positionrX   r^   r"   )r#   rª   r&   r8   r^   s        r(   r¸   z TreeBuilder.insert_element_tabler  s�   € à×%Ñ% eÓ,ˆØ×Ñ˜bÑ!×&Ñ&Ô.HÑHØ×-Ñ-¨eÓ4Ð4ð %)×$JÑ$JÓ$LÑ!ˆF�MØÐ$Ø×#Ñ# GÕ,à×$Ñ$ W¨mÔ<Ø×Ñ×%Ñ% gÔ.Øˆr)   c                 óò   — |€| j                   d   }| j                  xr | j                   d   j                  t        v }|r&| j	                  «       \  }}|j                  ||«       y|j                  |«       y)zInsert text data.Nr   )rŠ   rŽ   r2   r	   r½   re   )r#   rp   r8   Úin_tabler^   s        r(   re   zTreeBuilder.insert_text‚  s   € àˆ>Ø×'Ñ'¨Ñ+ˆFð ×"Ñ"ò FØ×Ñ˜rÑ"×'Ñ'Ô+EÐEð 	ñ ð %)×$JÑ$JÓ$LÑ!ˆF�MØ×Ñ˜t ]Õ3à×Ñ˜tÕ$r)   c                 ó*  — d}d}d}| j                   ddd…   D ]  }|j                  dk(  sŒ|} n |rO|j                  r|j                  }|}||fS | j                   j                  |«      dz
  }| j                   |   }||fS | j                   d   }||fS )zAGet foster parent element and sibling (or None) to insert before.Nr   r   r   r   )rŠ   r2   r8   r[   )r#   Ú
last_tableÚfoster_parentr^   r&   r[   s         r(   r½   z-TreeBuilder.get_table_misnested_node_position’  sÉ   € ð ˆ
ØˆØˆØ×)Ñ)©$¨B¨$Ñ/ò 	ˆGØ�|‰|˜wÓ&Ø$�
Ùð	ñ ð × Ò Ø *× 1Ñ 1�Ø *�ð ˜mÐ+Ð+ð	 ×*Ñ*×0Ñ0°Ó<¸qÑ@�Ø $× 2Ñ 2°5Ñ 9�ð ˜mÐ+Ð+ð !×.Ñ.¨qÑ1ˆMØ˜mÐ+Ð+r)   c                 óª   — | j                   d   j                  }|t        v r2||k7  r,| j                   j                  «        | j	                  |«       y y y )Nr   )rŠ   r2   Ú_implied_end_tagsr£   Úgenerate_implied_end_tags)r#   Úexcluder2   s      r(   rÅ   z%TreeBuilder.generate_implied_end_tags­  sQ   € Ø×!Ñ! "Ñ%×*Ñ*ˆØÔ$Ñ$¨°ªØ×Ñ×"Ñ"Ô$ð ×*Ñ*¨7Õ3ð	 *9Ð$r)   c                 ó¼   — |r| j                   j                  S | j                   j                  j                  | j                  €d«      S d| j                  › d�«      S )zReturn the final tree.r
   r<   z}html)r�   r5   Úfindr†   )r#   Ú	full_trees     r(   Úget_documentzTreeBuilder.get_documentµ  s]   € áØ—=‘=×)Ñ)Ð)Ø�}‰}×%Ñ%×*Ñ*Ø×,Ñ,Ð4ˆFó1ð 	1à�×'Ñ'Ð(¨Ð/ó1ð 	1r)   c                 ój   — t        «       }| j                  d   j                  |«       |j                  S )zReturn the final fragment.r   )r€   rŠ   rk   r5   )r#   Úfragments     r(   Úget_fragmentzTreeBuilder.get_fragment½  s/   € ä#Ó%ˆØ×Ñ˜1Ñ×/Ñ/°Ô9Ø× Ñ Ð r)   r1   )F)r*   r+   r,   Ú__doc__r:   r‡   r›   r¡   r¤   r§   r«   r®   r°   r©   r¶   rº   rl   rŽ   r¹   r¸   re   r½   rÅ   rÊ   rÍ   r-   r)   r(   r„   r„   Ï   sv   „ Ùò
ò	#óò,.ò`:ò
ò,ò
,ò4òò'ò=ñ !Ð!7Ð9OÓPÐòòó %ò ,ó64ó1ó!r)   r„   )rÎ   r   Ú	xml.etreer   Ú	constantsr   r   r	   r   r6   Ú	frozensetr“   rÄ   r   r   r/   rn   rs   r{   r€   r„   r-   r)   r(   ú<module>rÒ      s  ðÙ å Ý !ç OÑ Oð
 
€à�6Ñ€áÐ%Ó&¨Ð
.ÙÐ)¨e°XÐ->Ð,?Ñ?Ó@À%ÐHÙÐ'¨E°4¨=¸5À$¸-Ð*HÑHÓIÈ5ÐQÙ˜% ˜¨5°'Ð*:Ð;Ó<¸eÐDÙ˜5 *Ð-°°xÐ/@ÐAÓBÀDÐIñ€ñ ÐWÓXÐ ô ˜tô  ÷&Cñ CôLˆgô ô#�7ô #ô0ˆwô 0ô
4�wô 4÷
r!ò r!r)   