§
    ¤”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dS )é    )Úabsolute_importÚdivisionÚunicode_literals)Ú	text_typeé   )ÚscopingElementsÚtableInsertModeElementsÚ
namespacesNFÚhtmlÚbuttonÚolÚulÚtableÚoptgroupÚoptionT)Nr   Úlistr   Úselectc                   óP   — 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dS )ÚNodezRepresents an item in the treec                 óZ   — || _         d| _        d| _        i | _        g | _        g | _        dS )zRCreates a Node

        :arg name: The tag name associated with the node

        N)ÚnameÚparentÚvalueÚ
attributesÚ
childNodesÚ_flags)Úselfr   s     úi/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/html5lib/treebuilders/base.pyÚ__init__zNode.__init__   s4   € ð ˆŒ	àˆŒàˆŒ
àˆŒð ˆŒàˆŒˆˆó    c                 ó¢   — d                      d„ | j                             ¦   «         D ¦   «         ¦  «        }|rd| j        ›d|›d�S d| j        z  S )Nú c                 ó$   — g | ]\  }}|›d |›d�‘ŒS )z="ú"© )Ú.0r   r   s      r   ú
<listcomp>z Node.__str__.<locals>.<listcomp>.   s9   € ð ";ð ";ð ";Ù&1 d¨Eð 26°°°u°u°uÐ"=ð ";ð ";ð ";r    ú<ú>ú<%s>)Újoinr   Úitemsr   )r   ÚattributesStrs     r   Ú__str__zNode.__str__-   sp   € ØŸšð ";ð ";à"&¤/×"7Ò"7Ñ"9Ô"9ð";ñ ";ô ";ñ <ô <ˆð ð 	(ð 	(Ø $¤	 	 	¨=¨=¨=Ð9Ð9à˜TœYÑ'Ð'r    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

        r3   )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

        r3   )r   r6   ÚrefNodes      r   r;   zNode.insertBeforeM   r=   r    c                 ó   — t           ‚)zhRemove node from the children of the current node

        :arg node: the child node to remove

        r3   r5   s     r   ÚremoveChildzNode.removeChildY   r8   r    c                 óR   — | j         D ]}|                     |¦  «         Œg | _         dS )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   r7   )r   Ú	newParentÚchilds      r   ÚreparentChildrenzNode.reparentChildrena   s7   € ð ”_ð 	)ð 	)ˆ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
        r3   r0   s    r   Ú	cloneNodezNode.cloneNoden   s
   € õ "Ð!r    c                 ó   — t           ‚)zFReturn true if the node has children or text, false otherwise
        r3   r0   s    r   Ú
hasContentzNode.hasContentt   s
   € õ "Ð!r    ©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r.   r1   r7   r<   r;   rA   rE   rG   rI   r%   r    r   r   r      sµ   € € € € € Ø(Ð(ðð ð ð((ð (ð (ð$ð $ð $ð"ð "ð "ð
"ð 
"ð 
"ð 
"ð
"ð 
"ð 
"ð"ð "ð "ðð ð ð"ð "ð "ð"ð "ð "ð "ð "r    r   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚActiveFormattingElementsc                 óü   — d}|t           k    rS| d d d…         D ]G}|t           k    r n9|                      ||¦  «        r|dz  }|dk    r|                      |¦  «          nŒHt                               | |¦  «         d S )Nr   éÿÿÿÿé   é   )ÚMarkerÚ
nodesEqualÚremover   Úappend)r   r6   Ú
equalCountÚelements       r   rX   zActiveFormattingElements.append{   s™   € Øˆ
Ø•6Š>ˆ>Ø   " œ:ð ð �Ø�fÒ$Ð$Ø�EØ—?’? 7¨DÑ1Ô1ð $Ø !‘O�JØ ’?�?Ø—K’K Ñ(Ô(Ð(Ø�Eð #õ 	�Š�D˜$ÑÔÐÐÐr    c                 óN   — |j         |j         k    sdS |j        |j        k    sdS dS )NFT)Ú	nameTupler   )r   Únode1Únode2s      r   rV   z#ActiveFormattingElements.nodesEqualˆ   s1   € ØŒ %¤/Ò1Ð1Ø�5àÔ 5Ô#3Ò3Ð3Ø�5àˆtr    N)rK   rL   rM   rX   rV   r%   r    r   rP   rP   z   s2   € € € € € ð ð  ð  ðð ð ð ð r    rP   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dS )Ú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                 óP   — |rd| _         nd| _         |                      ¦   «          dS )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__¬   s0   € ð !ð 	)Ø$BˆDÔ!Ð!à$(ˆDÔ!Ø�
Š
‰Œˆˆˆr    c                 ó–   — g | _         t          ¦   «         | _        d | _        d | _        d| _        |                      ¦   «         | _        d S )NF)ÚopenElementsrP   ÚactiveFormattingElementsÚheadPointerÚformPointerÚinsertFromTableÚdocumentClassÚdocumentr0   s    r   rc   zTreeBuilder.reset¸   sI   € ØˆÔÝ(@Ñ(BÔ(BˆÔ%ð  ˆÔØˆÔà$ˆÔà×*Ò*Ñ,Ô,ˆŒˆˆr    c                 óB  — t          |d¦  «        }|s;t          |t          ¦  «        rt          d         |f}t          |t          ¦  «        sJ ‚t
          |         \  }}t          | j        ¦  «        D ],}|r	||k    r dS |s|j        |k    r dS ||j        |v z  r dS Œ-J ‚)Nr\   r   TF)	ÚhasattrÚ
isinstancer   r
   ÚtupleÚlistElementsMapÚreversedrf   r\   )r   ÚtargetÚvariantÚ	exactNodeÚlistElementsÚinvertr6   s          r   ÚelementInScopezTreeBuilder.elementInScopeÄ   sÔ   € õ ˜F KÑ0Ô0ˆ	Øð 	-Ý˜&¥)Ñ,Ô,ð 6Ý$ VÔ,¨fÐ5�Ý˜f¥eÑ,Ô,Ð,Ð,Ð,å.¨wÔ7Ñˆ�få˜TÔ.Ñ/Ô/ð 	ð 	ˆDØð ˜T Vš^˜^Ø�t�tØð  4¤>°VÒ#;Ð#;Ø�t�tØ˜DœN¨lÐ:Ñ;ð Ø�u�uðð 	ˆr    c                 óê  — | j         sd S t          | j         ¦  «        dz
  }| j         |         }|t          k    s	|| j        v rd S |t          k    r8|| j        vr/|dk    rd}n&|dz  }| j         |         }|t          k    r	|| j        v°/	 |dz  }| j         |         }|                     ¦   «         }|                      d|j        |j        |j        dœ¦  «        }|| j         |<   || j         d         k    rd S Œm)NrS   r   rR   TÚStartTag)Útyper   Ú	namespacer:   )	rg   ÚlenrU   rf   rG   ÚinsertElementr   r|   r   )r   ÚiÚentryÚclonerZ   s        r   Ú#reconstructActiveFormattingElementsz/TreeBuilder.reconstructActiveFormattingElementsÚ   s;  € ð Ô,ð 	ØˆFõ �Ô-Ñ.Ô.°Ñ2ˆØÔ-¨aÔ0ˆØ•FŠ?ˆ?˜e tÔ'8Ð8Ð8ØˆFð •vŠoˆo %¨tÔ/@Ð"@Ð"@Ø�AŠvˆvà�ØØ�‰FˆAàÔ1°!Ô4ˆEð •vŠoˆo %¨tÔ/@Ð"@Ð"@ð	à�‰FˆAð Ô1°!Ô4ˆEØ—O’OÑ%Ô%ˆEð ×(Ò(°*Ø27´*Ø7<´Ø27Ô2Bð*Dð *Dñ Eô EˆGð 07ˆDÔ)¨!Ñ,ð ˜$Ô7¸Ô;Ò;Ð;Ø�ð'	r    c                 ó¾   — | j                              ¦   «         }| j         r8|t          k    r1| j                              ¦   «         }| j         r|t          k    °+d S d S d S d S rJ   )rg   ÚpoprU   )r   r€   s     r   ÚclearActiveFormattingElementsz)TreeBuilder.clearActiveFormattingElements  sn   € ØÔ-×1Ò1Ñ3Ô3ˆØÔ+ð 	8°½²°ØÔ1×5Ò5Ñ7Ô7ˆEð Ô+ð 	8°½²°°°ð 	8ð 	8ð 	8ð 	8°°r    c                 ód   — | j         ddd…         D ]}|t          k    r n|j        |k    r|c S ŒdS )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 falseNrR   F)rg   rU   r   )r   r   Úitems      r   Ú!elementInActiveFormattingElementsz-TreeBuilder.elementInActiveFormattingElements  sQ   € ð
 Ô1°$°$°B°$Ô7ð 	ð 	ˆDð •vŠ~ˆ~Ø�Ø”˜dÒ"Ð"Ø���ð #àˆur    c                 ó˜   — |                       |¦  «        }| j                             |¦  «         | j                             |¦  «         d S rJ   )ÚcreateElementrf   rX   rl   r7   )r   ÚtokenrZ   s      r   Ú
insertRootzTreeBuilder.insertRoot  sH   € Ø×$Ò$ UÑ+Ô+ˆØÔ× Ò  Ñ)Ô)Ð)ØŒ×!Ò! 'Ñ*Ô*Ð*Ð*Ð*r    c                 ó˜   — |d         }|d         }|d         }|                       |||¦  «        }| j                             |¦  «         d S )Nr   ÚpublicIdÚsystemId)ÚdoctypeClassrl   r7   )r   r‹   r   rŽ   r�   Údoctypes         r   ÚinsertDoctypezTreeBuilder.insertDoctype   sR   € Ø�VŒ}ˆØ˜Ô$ˆØ˜Ô$ˆà×#Ò# D¨(°HÑ=Ô=ˆØŒ×!Ò! 'Ñ*Ô*Ð*Ð*Ð*r    c                 ó€   — |€| j         d         }|                     |                      |d         ¦  «        ¦  «         d S )NrR   r:   )rf   r7   ÚcommentClass)r   r‹   r   s      r   ÚinsertCommentzTreeBuilder.insertComment(  s@   € Øˆ>ØÔ& rÔ*ˆFØ×Ò˜4×,Ò,¨U°6¬]Ñ;Ô;Ñ<Ô<Ð<Ð<Ð<r    c                 ó’   — |d         }|                      d| j        ¦  «        }|                      ||¦  «        }|d         |_        |S )z.Create an element but don't insert it anywherer   r|   r:   )Úgetrb   ÚelementClassr   ©r   r‹   r   r|   rZ   s        r   rŠ   zTreeBuilder.createElement-  sG   € à�VŒ}ˆØ—I’I˜k¨4Ô+@ÑAÔAˆ	Ø×#Ò# D¨)Ñ4Ô4ˆØ" 6œ]ˆÔØˆr    c                 ó   — | j         S rJ   )Ú_insertFromTabler0   s    r   Ú_getInsertFromTablezTreeBuilder._getInsertFromTable5  s   € ØÔ$Ð$r    c                 óL   — || _         |r| j        | _        dS | j        | _        dS )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  s6   € ð !&ˆÔØð 	:Ø!%Ô!8ˆDÔÐÐà!%Ô!9ˆDÔÐÐr    c                 óJ  — |d         }t          |t          ¦  «        sJ d|z  ¦   «         ‚|                     d| j        ¦  «        }|                      ||¦  «        }|d         |_        | j        d                              |¦  «         | j                             |¦  «         |S )Nr   zElement %s not unicoder|   r:   rR   )	ro   r   r—   rb   r˜   r   rf   r7   rX   r™   s        r   rŸ   zTreeBuilder.insertElementNormalC  sž   € Ø�VŒ}ˆÝ˜$¥	Ñ*Ô*ÐKÐKÐ,DÀtÑ,KÑKÔKÐKØ—I’I˜k¨4Ô+@ÑAÔAˆ	Ø×#Ò# D¨)Ñ4Ô4ˆØ" 6œ]ˆÔØÔ˜"Ô×)Ò)¨'Ñ2Ô2Ð2ØÔ× Ò  Ñ)Ô)Ð)Øˆr    c                 óJ  — |                       |¦  «        }| j        d         j        t          vr|                      |¦  «        S |                      ¦   «         \  }}|€|                     |¦  «         n|                     ||¦  «         | j                             |¦  «         |S )z-Create an element and insert it into the treerR   )	rŠ   rf   r   r	   rŸ   ÚgetTableMisnestedNodePositionr7   r;   rX   )r   r‹   rZ   r   r;   s        r   rž   zTreeBuilder.insertElementTableM  s§   € à×$Ò$ UÑ+Ô+ˆØÔ˜RÔ Ô%Õ-DÐDÐDØ×+Ò+¨EÑ2Ô2Ð2ð $(×#EÒ#EÑ#GÔ#GÑ ˆF�LØÐ#Ø×"Ò" 7Ñ+Ô+Ð+Ð+à×#Ò# G¨\Ñ:Ô:Ð:ØÔ×$Ò$ WÑ-Ô-Ð-Øˆr    c                 óú   — |€| j         d         }| j        r | j        r0| j         d         j        t          vr|                     |¦  «         dS |                      ¦   «         \  }}|                     ||¦  «         dS )zInsert text data.NrR   )rf   rj   r   r	   r<   r£   )r   r:   r   r;   s       r   r<   zTreeBuilder.insertText]  s”   € àˆ>ØÔ& rÔ*ˆFàÔ$ð 	2¨Ô)=ð 	2Ø)-Ô):¸2Ô)>Ô)CÝ0Gð*Hð *Hà×Ò˜dÑ#Ô#Ð#Ð#Ð#ð $(×#EÒ#EÑ#GÔ#GÑ ˆF�LØ×Ò˜d LÑ1Ô1Ð1Ð1Ð1r    c                 óì   — d}d}d}| j         ddd…         D ]}|j        dk    r|} nŒ|r:|j        r
|j        }|}n6| j         | j                              |¦  «        dz
           }n| j         d         }||fS )zsGet the foster parent element, and sibling to insert before
        (or None) when inserting a misnested table nodeNrR   r   rS   r   )rf   r   r   Úindex)r   Ú	lastTableÚfosterParentr;   Úelms        r   r£   z)TreeBuilder.getTableMisnestedNodePositionl  s´   € ð ˆ	ØˆØˆØÔ$ T T r TÔ*ð 	ð 	ˆCØŒx˜7Ò"Ð"Ø�	Ø�ð #ð ð 
	0ð Ôð <Ø(Ô/�Ø(��à#Ô0ØÔ%×+Ò+¨IÑ6Ô6¸Ñ:ô <��ð  Ô,¨QÔ/ˆLØ˜\Ð)Ð)r    c                 ó¼   — | j         d         j        }|t          d¦  «        v r6||k    r2| j                              ¦   «          |                      |¦  «         d S d S d S )NrR   )ÚddÚdtÚlir   r   ÚpÚrpÚrt)rf   r   Ú	frozensetr„   ÚgenerateImpliedEndTags)r   Úexcluder   s      r   r²   z"TreeBuilder.generateImpliedEndTags†  sn   € ØÔ  Ô$Ô)ˆà•IÐWÑXÔXÐXÐXØ˜’�ØÔ×!Ò!Ñ#Ô#Ð#ð ×'Ò'¨Ñ0Ô0Ð0Ð0Ð0ð YÐXØ�r    c                 ó   — | j         S )zReturn the final tree)rl   r0   s    r   ÚgetDocumentzTreeBuilder.getDocument�  s
   € àŒ}Ðr    c                 ón   — |                       ¦   «         }| j        d                              |¦  «         |S )zReturn the final fragmentr   )ÚfragmentClassrf   rE   )r   Úfragments     r   ÚgetFragmentzTreeBuilder.getFragment”  s6   € ð ×%Ò%Ñ'Ô'ˆØÔ˜!Ô×-Ò-¨hÑ7Ô7Ð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

        r3   r5   s     r   ÚtestSerializerzTreeBuilder.testSerializer›  r8   r    rJ   )rK   rL   rM   rN   rk   r˜   r”   r�   r·   r   rc   rx   r‚   r…   rˆ   rŒ   r’   r•   rŠ   rœ   r    Úpropertyrj   rŸ   rž   r<   r£   r²   rµ   r¹   r»   r%   r    r   r`   r`   ’   s—  € € € € € ðð ð €Mð €Lð €Lð €Lð €Mð
ð 
ð 
ð
-ð 
-ð 
-ðð ð ð ð,,ð ,ð ,ð\8ð 8ð 8ð
ð ð ð+ð +ð +ð
+ð +ð +ð=ð =ð =ð =ð
ð ð ð%ð %ð %ð:ð :ð :ð �hÐ2Ð4GÑHÔH€Oðð ð ðð ð ð 2ð 2ð 2ð 2ð*ð *ð *ð41ð 1ð 1ð 1ðð ð ðð ð ð"ð "ð "ð "ð "r    r`   )Ú
__future__r   r   r   Úsixr   Ú	constantsr   r	   r
   rU   r±   rq   Úobjectr   r   rP   r`   r%   r    r   ú<module>rÁ      sæ  ðØ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ Ð Ð Ð Ð Ð à LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ Lð
 
€ð ˆ9�_Ñ%Ô% uÐ
-Øˆy˜¨Z¸Ô-?ÀÐ,JÐ+KÑKÑLÔLÈeÐTØˆY�¨:°fÔ+=¸tÐ*DØ+5°fÔ+=¸tÐ*Dð*Fñ Fñ Gô GØHMðOàˆi˜* VÔ,¨fÐ5Ø$ VÔ,¨gÐ6ð8ñ 9ô 9Ø:?ðAàˆy˜: fÔ-¨zÐ:Ø% fÔ-¨xÐ8ð:ñ ;ô ;Ø<@ðBð	ð 	€ð`"ð `"ð `"ð `"ð `"ˆ6ñ `"ô `"ð `"ðFð ð ð ð ˜tñ ô ð ð0O"ð O"ð O"ð O"ð O"�&ñ O"ô O"ð O"ð O"ð O"r    