Ë
    á]jå8  ã            	       ó>  — d dl mZmZmZ d dlmZ ddlmZmZm	Z	 dZ
 ee«      df eee	d   dfhz  «      df eee	d   d	fe	d   d
fhz  «      df ee	d   dfe	d   dfg«      df ee	d   dfe	d   dfg«      dfdœZ G d„ de«      Z G d„ de«      Z G d„ de«      Zy)é    )Úabsolute_importÚdivisionÚunicode_literals)Ú	text_typeé   )ÚscopingElementsÚtableInsertModeElementsÚ
namespacesNFÚhtmlÚbuttonÚolÚulÚtableÚoptgroupÚoptionT)Nr   Úlistr   Úselectc                   óN   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zdd„Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zy)ÚNodezRepresents an item in the treec                 óX   — || _         d| _        d| _        i | _        g | _        g | _        y)zRCreates a Node

        :arg name: The tag name associated with the node

        N)ÚnameÚparentÚvalueÚ
attributesÚ
childNodesÚ_flags)Úselfr   s     ú`/var/www/zogu/zoguvenv/lib/python3.12/site-packages/bleach/_vendor/html5lib/treebuilders/base.pyÚ__init__zNode.__init__   s0   € ð ˆŒ	àˆŒàˆŒ
àˆŒð ˆŒàˆ�ó    c           
      óÚ   — dj                  | j                  j                  «       D ��cg c]  \  }}|›d|›d�‘Œ c}}«      }|rd| j                  ›d|›d�S d| j                  z  S c c}}w )Nú z="ú"ú<ú>ú<%s>)Újoinr   Úitemsr   )r   r   r   ÚattributesStrs       r   Ú__str__zNode.__str__-   sd   € ØŸ™à"&§/¡/×"7Ñ"7Ó"9÷";Ù&1 d¨Eò 26²uÒ"=ó ";ó <ˆò Ø $§	£	ª=Ð9Ð9à˜TŸY™YÑ'Ð'ùó";s   ©A'
c                 ó    — d| j                   z  S )Nr&   )r   ©r   s    r   Ú__repr__zNode.__repr__6   s   € Ø˜Ÿ™Ñ#Ð#r    c                 ó   — t         ‚)z[Insert node as a child of the current node

        :arg node: the node to insert

        ©ÚNotImplementedError©r   Únodes     r   ÚappendChildzNode.appendChild9   ó
   € ô "Ð!r    Nc                 ó   — t         ‚)aB  Insert data as text in the current node, positioned before the
        start of node insertBefore or to the end of the node's text.

        :arg data: the data to insert

        :arg insertBefore: True if you want to insert the text before the node
            and False if you want to insert it after the node

        r/   )r   ÚdataÚinsertBefores      r   Ú
insertTextzNode.insertTextA   ó
   € ô "Ð!r    c                 ó   — t         ‚)a  Insert node as a child of the current node, before refNode in the
        list of child nodes. Raises ValueError if refNode is not a child of
        the current node

        :arg node: the node to insert

        :arg refNode: the child node to insert the node before

        r/   )r   r2   ÚrefNodes      r   r7   zNode.insertBeforeM   r9   r    c                 ó   — t         ‚)zhRemove node from the children of the current node

        :arg node: the child node to remove

        r/   r1   s     r   ÚremoveChildzNode.removeChildY   r4   r    c                 óV   — | j                   D ]  }|j                  |«       Œ g | _         y)zôMove all the children of the current node to newParent.
        This is needed so that trees that don't store text as nodes move the
        text in the correct way

        :arg newParent: the node to move all this node's children to

        N)r   r3   )r   Ú	newParentÚchilds      r   ÚreparentChildrenzNode.reparentChildrena   s,   € ð —_‘_ò 	)ˆEØ×!Ñ! %Õ(ð	)àˆ�r    c                 ó   — t         ‚)zŠReturn a shallow copy of the current node i.e. a node with the same
        name and attributes but with no parent or child nodes
        r/   r,   s    r   Ú	cloneNodezNode.cloneNoden   s
   € ô "Ð!r    c                 ó   — t         ‚)zFReturn true if the node has children or text, false otherwise
        r/   r,   s    r   Ú
hasContentzNode.hasContentt   s
   € ô "Ð!r    ©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r*   r-   r3   r8   r7   r=   rA   rC   rE   © r    r   r   r      s7   „ Ù(òò((ò$ò"ó
"ò
"ò"òò"ó"r    r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚActiveFormattingElementsc                 óÔ   — d}|t         k7  rG| d d d…   D ]<  }|t         k(  r n1| j                  ||«      r|dz  }|dk(  sŒ+| j                  |«        n t        j	                  | |«       y )Nr   éÿÿÿÿé   é   )ÚMarkerÚ
nodesEqualÚremover   Úappend)r   r2   Ú
equalCountÚelements       r   rU   zActiveFormattingElements.append{   sm   € Øˆ
Ø”6Š>Ø¡ " ™:ò �ØœfÒ$ÙØ—?‘? 7¨DÔ1Ø !‘O�JØ “?Ø—K‘K Ô(Ùðô 	�‰�D˜$Õr    c                 ól   — |j                   |j                   k(  sy|j                  |j                  k(  syy)NFT)Ú	nameTupler   )r   Únode1Únode2s      r   rS   z#ActiveFormattingElements.nodesEqualˆ   s/   € Ø�‰ %§/¡/Ò1Øà×Ñ 5×#3Ñ#3Ò3Øàr    N)rG   rH   rI   rU   rS   rK   r    r   rM   rM   z   s   „ ò ór    rM   c                   ó¶   — e Zd ZdZdZdZdZdZdZd„ Z	d„ Z
dd„Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd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„ Zd„ Zd„ Zy)ÚTreeBuildera  Base treebuilder implementation

    * documentClass - the class to use for the bottommost node of a document
    * elementClass - the class to use for HTML Elements
    * commentClass - the class to use for comments
    * doctypeClass - the class to use for doctypes

    Nc                 óF   — |rd| _         nd| _         | j                  «        y)zmCreate a TreeBuilder

        :arg namespaceHTMLElements: whether or not to namespace HTML elements

        zhttp://www.w3.org/1999/xhtmlN)ÚdefaultNamespaceÚreset)r   ÚnamespaceHTMLElementss     r   r   zTreeBuilder.__init__¬   s    € ñ !Ø$BˆDÕ!à$(ˆDÔ!Ø�
‰
�r    c                 ó„   — g | _         t        «       | _        d | _        d | _        d| _        | j                  «       | _        y )NF)ÚopenElementsrM   ÚactiveFormattingElementsÚheadPointerÚformPointerÚinsertFromTableÚdocumentClassÚdocumentr,   s    r   r`   zTreeBuilder.reset¸   s?   € ØˆÔÜ(@Ó(BˆÔ%ð  ˆÔØˆÔà$ˆÔà×*Ñ*Ó,ˆ�r    c                 ó&  — t        |d«      }|s-t        |t        «      rt        d   |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 J ‚)NrY   r   TF)	ÚhasattrÚ
isinstancer   r
   ÚtupleÚlistElementsMapÚreversedrc   rY   )r   ÚtargetÚvariantÚ	exactNodeÚlistElementsÚinvertr2   s          r   ÚelementInScopezTreeBuilder.elementInScopeÄ   s�   € ô ˜F KÓ0ˆ	ÙÜ˜&¤)Ô,Ü$ VÑ,¨fÐ5�Ü˜f¤eÔ,Ð,Ð,ä.¨wÑ7Ñˆ�fä˜T×.Ñ.Ó/ò 	ˆDÙ˜T Vš^ÙÙ 4§>¡>°VÒ#;ÙØ˜DŸN™N¨lÐ:Ó;Ùð	ð 	ˆur    c                 ó(  — | j                   sy t        | j                   «      dz
  }| j                   |   }|t        k(  s|| j                  v ry |t        k7  rB|| j                  vr4|dk(  rd}n,|dz  }| j                   |   }|t        k7  r|| j                  vrŒ4	 |dz  }| j                   |   }|j	                  «       }| j                  d|j                  |j                  |j                  dœ«      }|| j                   |<   || j                   d   k(  ry Œ{)NrP   r   rO   ÚStartTag)Útyper   Ú	namespacer6   )	rd   ÚlenrR   rc   rC   ÚinsertElementr   ry   r   )r   ÚiÚentryÚclonerW   s        r   Ú#reconstructActiveFormattingElementsz/TreeBuilder.reconstructActiveFormattingElementsÚ   s/  € ð ×,Ò,Øô �×-Ñ-Ó.°Ñ2ˆØ×-Ñ-¨aÑ0ˆØ”FŠ?˜e t×'8Ñ'8Ñ8Øð ”vŠo %¨t×/@Ñ/@Ñ"@Ø�AŠvà�ØØ�‰FˆAà×1Ñ1°!Ñ4ˆEð ”vŠo %¨t×/@Ñ/@Ò"@ð à�‰FˆAð ×1Ñ1°!Ñ4ˆEØ—O‘OÓ%ˆEð ×(Ñ(°*Ø27·*±*Ø7<·±Ø27×2BÑ2Bñ*Dó EˆGð 07ˆD×)Ñ)¨!Ñ,ð ˜$×7Ñ7¸Ñ;Ò;Øð' r    c                 óÈ   — | j                   j                  «       }| j                   r<|t        k7  r2| j                   j                  «       }| j                   r|t        k7  rŒ0y y y y rF   )rd   ÚpoprR   )r   r}   s     r   ÚclearActiveFormattingElementsz)TreeBuilder.clearActiveFormattingElements  sR   € Ø×-Ñ-×1Ñ1Ó3ˆØ×+Ò+°¼²Ø×1Ñ1×5Ñ5Ó7ˆEð ×+Ò+°¼´Ð+°Ð+r    c                 ón   — | j                   ddd…   D ]   }|t        k(  r y|j                  |k(  sŒ|c S  y)zšCheck if an element exists between the end of the active
        formatting elements and the last marker. If it does, return it, else
        return falseNrO   F)rd   rR   r   )r   r   Úitems      r   Ú!elementInActiveFormattingElementsz-TreeBuilder.elementInActiveFormattingElements  sK   € ð
 ×1Ñ1±$°B°$Ñ7ò 	ˆDð ”vŠ~Øð ð —‘˜dÓ"Ø’ð	ð r    c                 ó’   — | j                  |«      }| j                  j                  |«       | j                  j	                  |«       y rF   )ÚcreateElementrc   rU   ri   r3   )r   ÚtokenrW   s      r   Ú
insertRootzTreeBuilder.insertRoot  s8   € Ø×$Ñ$ UÓ+ˆØ×Ñ× Ñ  Ô)Ø�‰×!Ñ! 'Õ*r    c                 ó~   — |d   }|d   }|d   }| j                  |||«      }| j                  j                  |«       y )Nr   ÚpublicIdÚsystemId)ÚdoctypeClassri   r3   )r   rˆ   r   r‹   rŒ   Údoctypes         r   ÚinsertDoctypezTreeBuilder.insertDoctype   sE   € Ø�V‰}ˆØ˜Ñ$ˆØ˜Ñ$ˆà×#Ñ# D¨(°HÓ=ˆØ�‰×!Ñ! 'Õ*r    c                 ól   — |€| j                   d   }|j                  | j                  |d   «      «       y )NrO   r6   )rc   r3   ÚcommentClass)r   rˆ   r   s      r   ÚinsertCommentzTreeBuilder.insertComment(  s4   € Øˆ>Ø×&Ñ& rÑ*ˆFØ×Ñ˜4×,Ñ,¨U°6©]Ó;Õ<r    c                 ó€   — |d   }|j                  d| j                  «      }| j                  ||«      }|d   |_        |S )z.Create an element but don't insert it anywherer   ry   r6   )Úgetr_   ÚelementClassr   ©r   rˆ   r   ry   rW   s        r   r‡   zTreeBuilder.createElement-  sD   € à�V‰}ˆØ—I‘I˜k¨4×+@Ñ+@ÓAˆ	Ø×#Ñ# D¨)Ó4ˆØ" 6™]ˆÔØˆr    c                 ó   — | j                   S rF   )Ú_insertFromTabler,   s    r   Ú_getInsertFromTablezTreeBuilder._getInsertFromTable5  s   € Ø×$Ñ$Ð$r    c                 ó\   — || _         |r| j                  | _        y| j                  | _        y)zsSwitch the function used to insert an element from the
        normal one to the misnested table one and back againN)r˜   ÚinsertElementTabler{   ÚinsertElementNormal)r   r   s     r   Ú_setInsertFromTablezTreeBuilder._setInsertFromTable8  s+   € ð !&ˆÔÙØ!%×!8Ñ!8ˆDÕà!%×!9Ñ!9ˆDÕr    c                 ó&  — |d   }t        |t        «      s
J d|z  «       ‚|j                  d| j                  «      }| j	                  ||«      }|d   |_        | j                  d   j                  |«       | j                  j                  |«       |S )Nr   zElement %s not unicodery   r6   rO   )	rl   r   r”   r_   r•   r   rc   r3   rU   r–   s        r   rœ   zTreeBuilder.insertElementNormalC  sŒ   € Ø�V‰}ˆÜ˜$¤	Ô*ÐKÐ,DÀtÑ,KÓKÐ*Ø—I‘I˜k¨4×+@Ñ+@ÓAˆ	Ø×#Ñ# D¨)Ó4ˆØ" 6™]ˆÔØ×Ñ˜"Ñ×)Ñ)¨'Ô2Ø×Ñ× Ñ  Ô)Øˆ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 treerO   )	r‡   rc   r   r	   rœ   ÚgetTableMisnestedNodePositionr3   r7   rU   )r   rˆ   rW   r   r7   s        r   r›   zTreeBuilder.insertElementTableM  s�   € à×$Ñ$ UÓ+ˆØ×Ñ˜RÑ ×%Ñ%Ô-DÑDØ×+Ñ+¨EÓ2Ð2ð $(×#EÑ#EÓ#GÑ ˆF�LØÐ#Ø×"Ñ" 7Õ+à×#Ñ# G¨\Ô:Ø×Ñ×$Ñ$ WÔ-Øˆr    c                 ó  — |€| j                   d   }| j                  r+| j                  r1| j                   d   j                  t        vr|j	                  |«       y| j                  «       \  }}|j	                  ||«       y)zInsert text data.NrO   )rc   rg   r   r	   r8   r    )r   r6   r   r7   s       r   r8   zTreeBuilder.insertText]  sx   € àˆ>Ø×&Ñ& rÑ*ˆFà×$Ò$¨×)=Ò)=Ø)-×):Ñ):¸2Ñ)>×)CÑ)CÜ0Gñ*Hà×Ñ˜dÕ#ð $(×#EÑ#EÓ#GÑ ˆF�LØ×Ñ˜d LÕ1r    c                 ó&  — d}d}d}| j                   ddd…   D ]  }|j                  dk(  sŒ|} n |rM|j                  r|j                  }|}||fS | j                   | j                   j                  |«      dz
     }||fS | j                   d   }||fS )zsGet the foster parent element, and sibling to insert before
        (or None) when inserting a misnested table nodeNrO   r   rP   r   )rc   r   r   Úindex)r   Ú	lastTableÚfosterParentr7   Úelms        r   r    z)TreeBuilder.getTableMisnestedNodePositionl  sÇ   € ð ˆ	ØˆØˆØ×$Ñ$¡T r TÑ*ò 	ˆCØ�x‰x˜7Ó"Ø�	Ùð	ñ ð ×ÒØ(×/Ñ/�Ø(�ð ˜\Ð)Ð)ð	  $×0Ñ0Ø×%Ñ%×+Ñ+¨IÓ6¸Ñ:ñ <�ð ˜\Ð)Ð)ð  ×,Ñ,¨QÑ/ˆLØ˜\Ð)Ð)r    c                 ó´   — | j                   d   j                  }|t        d«      v r2||k7  r,| j                   j                  «        | j	                  |«       y y y )NrO   )ÚddÚdtÚlir   r   ÚpÚrpÚrt)rc   r   Ú	frozensetr�   ÚgenerateImpliedEndTags)r   Úexcluder   s      r   r¯   z"TreeBuilder.generateImpliedEndTags†  sZ   € Ø× Ñ  Ñ$×)Ñ)ˆà”IÐWÓXÑXØ˜’Ø×Ñ×!Ñ!Ô#ð ×'Ñ'¨Õ0ð	  ð Yr    c                 ó   — | j                   S )zReturn the final tree)ri   r,   s    r   ÚgetDocumentzTreeBuilder.getDocument�  s   € à�}‰}Ðr    c                 ób   — | j                  «       }| j                  d   j                  |«       |S )zReturn the final fragmentr   )ÚfragmentClassrc   rA   )r   Úfragments     r   ÚgetFragmentzTreeBuilder.getFragment”  s0   € ð ×%Ñ%Ó'ˆØ×Ñ˜!Ñ×-Ñ-¨hÔ7Øˆr    c                 ó   — t         ‚)z‰Serialize the subtree of node in the format required by unit tests

        :arg node: the node from which to start serializing

        r/   r1   s     r   ÚtestSerializerzTreeBuilder.testSerializer›  r4   r    rF   )rG   rH   rI   rJ   rh   r•   r‘   r�   r´   r   r`   ru   r   r‚   r…   r‰   r�   r’   r‡   r™   r�   Úpropertyrg   rœ   r›   r8   r    r¯   r²   r¶   r¸   rK   r    r   r]   r]   ’   sŸ   „ ñð €Mð €Lð €Lð €Lð €Mò
ò
-óò,,ò\8ò
ò+ò
+ó=ò
ò%ò:ñ Ð2Ð4GÓH€Oòòó 2ò*ó41òòó"r    r]   )Ú
__future__r   r   r   Úbleach.six_shimr   Ú	constantsr   r	   r
   rR   r®   rn   Úobjectr   r   rM   r]   rK   r    r   ú<module>r¾      s  ðß BÑ BÝ %ç LÑ Lð
 
€ñ �_Ó% uÐ
-Ù˜¨Z¸Ñ-?ÀÐ,JÐ+KÑKÓLÈeÐTÙ�¨:°fÑ+=¸tÐ*DØ+5°fÑ+=¸tÐ*Dð*Fñ Fó GØHMðOá˜* VÑ,¨fÐ5Ø$ VÑ,¨gÐ6ð8ó 9Ø:?ðAá˜: fÑ-¨zÐ:Ø% fÑ-¨xÐ8ð:ó ;Ø<@ðBñ	€ô`"ˆ6ô `"ôF˜tô ô0O"�&õ O"r    