Ë
    oj£‘  ã            
      ó¦  — d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	m
Z
 ddlmZ ddlmZ ddlmZmZ d	j%                   e
 e	d
ddd«      «      «      Z ej(                  eed¬«       d„ Zd„ Zd„ ZdZ ee«      Zej9                  «        edz   Z ee«      Zej9                  «        efd„Zef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#e&«      Z( G d$„ d%e&«      Z)d&„ Z* e*«       Z+ G d'„ d(e&«      Z, G d)„ d*e#«      Z-d+„ Z.d,„ Z/ G d-„ d.e«      Z0d/„ Z1d0„ Z2d1„ Z3d2„ Z4 G d3„ d4«      Z5y)5aÂ  
Micro Document Object Model: a partial DOM implementation with SUX.

This is an implementation of what we consider to be the useful subset of the
DOM.  The chief advantage of this library is that, not being burdened with
standards compliance, it can remain very stable between versions.  We can also
implement utility 'pythonic' ways to access and mutate the XML tree.

Since this has not subjected to a serious trial by fire, it is not recommended
to use this outside of Twisted applications.  However, it seems to work just
fine for the documentation generator, which parses a fairly representative
sample of XML.

Microdom mainly focuses on working with HTML and XHTML.

This module is now deprecated.
é    )ÚannotationsN)ÚBytesIOÚStringIO)ÚVersionÚgetVersionString)ÚioType)ÚInsensitiveDict)Ú
ParseErrorÚ	XMLParserz)twisted.web.microdom was deprecated at {}ÚTwistedé   é
   é   )Ú
stacklevelc                óÐ   — g }|j                   }| g}t        |«      dkD  rF|j                  d«      }|j                  |k(  r ||«       |j                  |dd t        |«      dkD  rŒF|S )a3  
    Return a list of all child elements of C{iNode} with a name matching
    C{name}.

    Note that this implementation does not conform to the DOM Level 1 Core
    specification because it may return C{iNode}.

    @param iNode: An element at which to begin searching.  If C{iNode} has a
        name matching C{name}, it will be included in the result.

    @param name: A C{str} giving the name of the elements to return.

    @return: A C{list} of direct or indirect child elements of C{iNode} with
        the name C{name}.  This may include C{iNode}.
    r   N)ÚappendÚlenÚpopÚnodeNameÚ
childNodes©ÚiNodeÚnameÚmatchesÚmatches_appendÚsliceÚcs         ú6/usr/lib/python3/dist-packages/twisted/web/microdom.pyÚgetElementsByTagNamer   )   sh   € ð  €GØ—^‘^€NØˆG€EÜ
ˆe‹*�qŠ.Ø�I‰I�a‹LˆØ�:‰:˜ÒÙ˜1ÔØ—L‘Lˆˆbˆqˆ	ô	 ˆe‹*�q‹.ð
 €Nó    c                ó  — |j                  «       }g }|j                  }| g}t        |«      dkD  rT|j                  d«      }|j                  j                  «       |k(  r ||«       |j
                  |d d t        |«      dkD  rŒT|S ©Nr   )Úlowerr   r   r   r   r   r   s         r   ÚgetElementsByTagNameNoCaser$   D   sz   € Ø�:‰:‹<€DØ€GØ—^‘^€NØˆG€EÜ
ˆe‹*�qŠ.Ø�I‰I�a‹LˆØ�:‰:×ÑÓ Ò%Ù˜1ÔØ—L‘Lˆˆbˆqˆ	ô	 ˆe‹*�q‹.ð
 €Nr    c                óD   ‡ — t        ‰ «      t        k(  rˆ fd„}|S ˆ fd„}|S )Nc                ój   •— t        | t        «      r| j                  d«      } ‰j                  | «       y ©Nzutf-8)Ú
isinstanceÚstrÚencodeÚwrite©ÚsÚstreams    €r   Úwz_streamWriteWrapper.<locals>.wT   s&   ø€ Ü˜!œSÔ!Ø—H‘H˜WÓ%�Ø�L‰L˜�Or    c                ój   •— t        | t        «      r| j                  d«      } ‰j                  | «       y r'   )r(   ÚbytesÚdecoder+   r,   s    €r   r/   z_streamWriteWrapper.<locals>.w[   s&   ø€ Ü˜!œUÔ#Ø—H‘H˜WÓ%�Ø�L‰L˜�Or    )r   r1   )r.   r/   s   ` r   Ú_streamWriteWrapperr3   Q   s'   ø€ Üˆfƒ~œÒô	ð €Hô	ð
 €Hr    ))ú&z&amp;)ú<z&lt;)ú>z&gt;)ú"z&quot;))ú'z&apos;c                ó>   — |D ]  \  }}| j                  ||«      } Œ | S )z1
    Perform the exact opposite of 'escape'.
    ©Úreplace©ÚtextÚcharsr-   Úhs       r   Úunescaper@   r   ó,   € ð ò "‰ˆˆ1Ø�|‰|˜A˜qÓ!‰ð"à€Kr    c                ó>   — |D ]  \  }}| j                  ||«      } Œ | S )z;
    Escape a few XML special chars with XML entities.
    r:   r<   s       r   ÚescaperC   {   rA   r    c                  ó   — e Zd Zd„ Zdd„Zy)ÚMismatchedTagsc                ól   — |||||||f\  | _         | _        | _        | _        | _        | _        | _        y ©N)ÚfilenameÚexpectÚgotÚbegLineÚbegColÚendLineÚendCol)ÚselfrH   rI   rJ   rM   rN   rK   rL   s           r   Ú__init__zMismatchedTags.__init__…   s>   € ð �v˜s G¨V°W¸fÐEñ	
ØŒMØŒKØŒHØŒLØŒKØŒLØ�Kr    c                ó¢   — d| j                   ›d| j                  ›d| j                  ›d| j                  ›d| j                  ›d| j
                  ›�S )Nzexpected </z	>, got </z> line: z col: z, began line: )rI   rJ   rM   rN   rK   rL   ©rO   s    r   Ú__str__zMismatchedTags.__str__�   s8   � ð
 —“Ø—“Ø—“Ø—“Ø—“Ø—’ð	ð	
r    N©Úreturnr)   )Ú__name__Ú
__module__Ú__qualname__rP   rS   © r    r   rE   rE   „   s   „ ò	Fô
r    rE   c                  óˆ   — e Zd Zd Zdd„Zd„ Zddddi dfd„Zddddi dfd„Zdd„Zdd	„Z	dd
„Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚNodeNc                ó    — || _         g | _        y rG   )Ú
parentNoder   )rO   r]   s     r   rP   zNode.__init__¢   s   € Ø$ˆŒØˆ�r    c                óÒ   — t        | j                  «      t        |j                  «      k7  ryt        | j                  |j                  «      D ]  \  }}|j                  |«      rŒ y y)a  
        Compare this node to C{other}.  If the nodes have the same number of
        children and corresponding children are equal to each other, return
        C{True}, otherwise return C{False}.

        @type other: L{Node}
        @rtype: C{bool}
        FT)r   r   ÚzipÚisEqualToNode)rO   ÚotherÚaÚbs       r   r`   zNode.isEqualToNode¦   s[   € ô ˆt�‰Ó¤3 u×'7Ñ'7Ó#8Ò8ØÜ˜Ÿ™¨×)9Ñ)9Ó:ò 	‰DˆAˆqØ—?‘? 1Õ%Ùð	ð r    Ú r   c                ó   — t        «       ‚rG   ©ÚNotImplementedError)rO   r.   ÚindentÚ	addindentÚnewlÚstripÚ
nsprefixesÚ	namespaces           r   ÚwritexmlzNode.writexml¶   s   € ô "Ó#Ð#r    c           	     óh   — t        «       }| j                  |||||||«       |j                  «       }|S rG   )r   rn   Úgetvalue)	rO   rh   ri   rj   rk   rl   rm   r-   Úrvs	            r   Útoxmlz
Node.toxmlÂ   s3   € ô ‹JˆØ�‰�a˜ ¨D°%¸ÀYÔOØ�Z‰Z‹\ˆØˆ	r    c                ó,   — | j                  |||||«      S rG   )rn   )rO   r.   rh   ri   rj   rk   s         r   ÚwriteprettyxmlzNode.writeprettyxmlÊ   s   € Ø�}‰}˜V V¨Y¸¸eÓDÐDr    c                ó*   — | j                  ||||«      S rG   )rr   )rO   rh   ri   rj   rk   s        r   ÚtoprettyxmlzNode.toprettyxmlÍ   s   € Ø�z‰z˜& )¨T°5Ó9Ð9r    c                ó   — t        «       ‚rG   rf   ©rO   ÚdeepÚparents      r   Ú	cloneNodezNode.cloneNodeÐ   s   € Ü!Ó#Ð#r    c                ó   — | j                   ryy)Né   r   ©r   rR   s    r   ÚhasChildNodeszNode.hasChildNodesÓ   s   € Ø�?Š?Øàr    c                ó~   — t        |t        «      st        d«      ‚| j                  j	                  |«       | |_        y)zÒ
        Make the given L{Node} the last child of this node.

        @param child: The L{Node} which will become a child of this node.

        @raise TypeError: If C{child} is not a C{Node} instance.
        úexpected Node instanceN)r(   r[   Ú	TypeErrorr   r   r]   ©rO   Úchilds     r   ÚappendChildzNode.appendChildÙ   s4   € ô ˜%¤Ô&ÜÐ4Ó5Ð5Ø�‰×Ñ˜uÔ%ØˆÕr    c                óØ   — t        |t        «      rt        |t        «      st        d«      ‚| j                  j	                  |«      }| |_        | j                  j                  ||«       |S )a”  
        Make the given L{Node} C{new} a child of this node which comes before
        the L{Node} C{ref}.

        @param new: A L{Node} which will become a child of this node.

        @param ref: A L{Node} which is already a child of this node which
            C{new} will be inserted before.

        @raise TypeError: If C{new} or C{ref} is not a C{Node} instance.

        @return: C{new}
        r�   )r(   r[   r‚   r   Úindexr]   Úinsert)rO   ÚnewÚrefÚis       r   ÚinsertBeforezNode.insertBeforeæ   sW   € ô ˜#œtÔ$¬J°s¼DÔ,AÜÐ4Ó5Ð5Ø�O‰O×!Ñ! #Ó&ˆØˆŒØ�‰×Ñ˜q #Ô&Øˆ
r    c                óœ   — t        |t        «      st        d«      ‚|| j                  v r"| j                  j	                  |«       d|_        |S )a7  
        Remove the given L{Node} from this node's children.

        @param child: A L{Node} which is a child of this node which will no
            longer be a child of this node after this method is called.

        @raise TypeError: If C{child} is not a C{Node} instance.

        @return: C{child}
        r�   N)r(   r[   r‚   r   Úremover]   rƒ   s     r   ÚremoveChildzNode.removeChildû   sE   € ô ˜%¤Ô&ÜÐ4Ó5Ð5Ø�D—O‘OÑ#Ø�O‰O×"Ñ" 5Ô)Ø#ˆEÔØˆr    c                óø   — t        |t        «      rt        |t        «      st        d«      ‚|j                  | urt	        d«      ‚|| j
                  | j
                  j                  |«      <   d|_        | |_        y)aÞ  
        Replace a L{Node} which is already a child of this node with a
        different node.

        @param newChild: A L{Node} which will be made a child of this node.

        @param oldChild: A L{Node} which is a child of this node which will
            give up its position to C{newChild}.

        @raise TypeError: If C{newChild} or C{oldChild} is not a C{Node}
            instance.

        @raise ValueError: If C{oldChild} is not a child of this C{Node}.
        r�   z$oldChild is not a child of this nodeN)r(   r[   r‚   r]   Ú
ValueErrorr   r‡   )rO   ÚnewChildÚoldChilds      r   ÚreplaceChildzNode.replaceChild  sj   € ô ˜(¤DÔ)´¸HÄdÔ1KÜÐ4Ó5Ð5Ø×Ñ dÑ*ÜÐCÓDÐDØ;Cˆ�‰˜Ÿ™×-Ñ-¨hÓ7Ñ8Ø"ˆÔØ"ˆÕr    c                ó    — | j                   d   S ©Néÿÿÿÿr~   rR   s    r   Ú	lastChildzNode.lastChild$  s   € Ø�‰˜rÑ"Ð"r    c                óL   — t        | j                  «      r| j                  d   S y r"   )r   r   rR   s    r   Ú
firstChildzNode.firstChild'  s    € Üˆt�‰ÔØ—?‘? 1Ñ%Ð%Ør    rG   )rd   ú ú
r   ©r   N)rV   rW   rX   r   rP   r`   rn   rr   rt   rv   r{   r   r…   rŒ   r�   r”   r˜   rš   rY   r    r   r[   r[   Ÿ   sr   „ Ø€Hóòð& ØØØØØó
$ð  2¨B°aÀBÐRTóóEó:ó$òò òò*ò$#ò.#ór    r[   c                  ó~   — e Zd ZU dd„Zdd„ZdZded<   d„ ZeZe	d„ «       Z
d	„ Zd
d
d
di d
fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚDocumentNc                óV   — t         j                  | «       |r| j                  |«       y y rG   )r[   rP   r…   )rO   ÚdocumentElements     r   rP   zDocument.__init__:  s$   € Ü�‰�dÔÙØ×Ñ˜_Õ-ð r    r   c                ó´   — t        «       }| j                  |_        |r| j                  j                  d| «      }n| j                  }|j	                  |«       |S ©Nr}   )rŸ   Údoctyper¡   r{   r…   )rO   ry   rz   ÚdÚnewEls        r   r{   zDocument.cloneNode?  sK   € Ü‹JˆØ—L‘LˆŒ	ÙØ×(Ñ(×2Ñ2°1°dÓ;‰Eà×(Ñ(ˆEØ	�‰�eÔØˆr    z
None | strr¤   c                ód   — | j                   |j                   k(  xr t        j                  | |«      S rG   )r¤   r[   r`   ©rO   Úns     r   ÚisEqualToDocumentzDocument.isEqualToDocumentK  s'   € Ø—‘ §	¡	Ñ)ÒJ¬t×/AÑ/AÀ$ÈÓ/JÐJr    c                ó    — | j                   d   S r"   r~   rR   s    r   r¡   zDocument.documentElementP  s   € à�‰˜qÑ!Ð!r    c                ó^   — | j                   rt        d«      ‚t        j                  | |«       y)a  
        Make the given L{Node} the I{document element} of this L{Document}.

        @param child: The L{Node} to make into this L{Document}'s document
            element.

        @raise ValueError: If this document already has a document element.
        zOnly one element per document.N)r   r‘   r[   r…   rƒ   s     r   r…   zDocument.appendChildT  s'   € ð �?Š?ÜÐ=Ó>Ð>Ü×Ñ˜˜uÕ%r    rd   c           	     óº   — t        |«      } |d|z   «       | j                  r |d| j                  › d|› �«       | j                  j                  |||||||«       y )Nz<?xml version="1.0"?>z
<!DOCTYPE r6   )r3   r¤   r¡   rn   ©	rO   r.   rh   ri   rj   rk   rl   rm   r/   s	            r   rn   zDocument.writexmla  s_   € ô   Ó'ˆá	Ð
! DÑ
(Ô)Ø�<Š<Ù�
˜4Ÿ<™<˜.¨¨$¨Ð0Ô1Ø×Ñ×%Ñ%Ø�F˜I t¨U°JÀ	õ	
r    c                ó   — t        |fi |¤ŽS rG   )ÚElement)rO   r   Úkws      r   ÚcreateElementzDocument.createElementu  s   € Ü�tÑ"˜rÑ"Ð"r    c                ó   — t        |«      S rG   )ÚText©rO   r=   s     r   ÚcreateTextNodezDocument.createTextNodex  s   € Ü�D‹zÐr    c                ó   — t        |«      S rG   )ÚCommentrµ   s     r   ÚcreateCommentzDocument.createComment{  s   € Ü�t‹}Ðr    c                ó^   — | j                   j                  rt        | |«      S t        | |«      S rG   )r¡   ÚcaseInsensitiver$   r   ©rO   r   s     r   r   zDocument.getElementsByTagName~  s+   € Ø×Ñ×/Ò/Ü-¨d°DÓ9Ð9Ü# D¨$Ó/Ð/r    c                óâ   — | j                   d d  }|r^|j                  d«      }|j                   r|j                  |j                   «       t        |d«      r|j	                  d«      |k(  r|S |rŒ]y y )Nr   ÚgetAttributeÚid)r   r   ÚextendÚhasattrr¾   )rO   r¿   r   Únodes       r   ÚgetElementByIdzDocument.getElementByIdƒ  s`   € Ø—_‘_¡QÐ'ˆ
ÙØ—>‘> !Ó$ˆDØ�ŠØ×!Ñ! $§/¡/Ô2Ü�t˜^Ô,°×1BÑ1BÀ4Ó1HÈBÒ1NØ�ô r    rG   r�   )rV   rW   rX   rP   r{   r¤   Ú__annotations__rª   r`   Úpropertyr¡   r…   rn   r²   r¶   r¹   r   rÃ   rY   r    r   rŸ   rŸ   9  sn   … ó.ó
ð €GˆZÓòKð &€Màñ"ó ð"ò&ð  ØØØØØó
ò(#òòò0ó
r    rŸ   c                  ó:   — e Zd Zdd„Zd„ ZeZddddi dfd„Zd	d„Zy)
ÚEntityReferenceNc                óf   — t         j                  | |«       || _        d|z   dz   x| _        | _        y )Nr4   ú;)r[   rP   ÚerefÚ	nodeValueÚdata)rO   rÊ   r]   s      r   rP   zEntityReference.__init__Ž  s.   € Ü�‰�d˜JÔ'ØˆŒ	Ø%(¨4¡Z°#Ñ%5Ð5ˆŒ˜�r    c                óŒ   — t        |t        «      sy| j                  |j                  k(  xr | j                  |j                  k(  S r"   )r(   rÇ   rÊ   rË   r¨   s     r   ÚisEqualToEntityReferencez(EntityReference.isEqualToEntityReference“  s4   € Ü˜!œ_Ô-ØØ—	‘	˜QŸV™VÑ#ÒH¨$¯.©.¸A¿K¹KÑ*GÐHr    rd   r   c                óD   — t        |«      } |d| j                  z   «       y )Nrd   ©r3   rË   r®   s	            r   rn   zEntityReference.writexmlš  s   € ô   Ó'ˆÙ	ˆ"ˆt�~‰~Ñ
Õr    c                ó.   — t        | j                  |«      S rG   )rÇ   rÊ   rx   s      r   r{   zEntityReference.cloneNode§  s   € Ü˜tŸy™y¨&Ó1Ð1r    rG   r�   )rV   rW   rX   rP   rÎ   r`   rn   r{   rY   r    r   rÇ   rÇ   �  s2   „ ó6ò
Ið
 -€Mð
 ØØØØØóô2r    rÇ   c                  ó   — e Zd Zdd„Zd„ ZeZy)ÚCharacterDataNc                óZ   — t         j                  | |«       |x| _        x| _        | _        y rG   )r[   rP   ÚvaluerÌ   rË   )rO   rÌ   r]   s      r   rP   zCharacterData.__init__¬  s%   € Ü�‰�d˜JÔ'Ø26Ð6ˆŒ
Ð6�T”Y ¥r    c                ó4   — | j                   |j                   k(  S rG   )rÕ   r¨   s     r   ÚisEqualToCharacterDataz$CharacterData.isEqualToCharacterData°  s   € Ø�z‰z˜QŸW™WÑ$Ð$r    rG   )rV   rW   rX   rP   r×   r`   rY   r    r   rÓ   rÓ   «  s   „ ó7ò%ð +�Mr    rÓ   c                  ó,   — e Zd ZdZddddi dfd„Zdd„Zy)r¸   z
    A comment node.
    rd   r   c                óJ   — t        |«      }| j                  }	 |d|	› d�«       y )Nz<!--z-->)r3   rÌ   )
rO   r.   rh   ri   rj   rk   rl   rm   r/   Úvals
             r   rn   zComment.writexml»  s'   € ô   Ó'ˆØ�i‰iˆÙ	ˆD���Sˆ/Õr    Nc                ó.   — t        | j                  |«      S rG   )r¸   rË   rx   s      r   r{   zComment.cloneNodeÉ  s   € Ü�t—~‘~ vÓ.Ð.r    r�   )rV   rW   rX   Ú__doc__rn   r{   rY   r    r   r¸   r¸   ¶  s%   „ ñð ØØØØØóô/r    r¸   c                  ó>   — e Zd Zd	d„Zd„ Zd
d„Zddddi dfd„Zdd„Zy)r´   Nr   c                ó@   — t         j                  | ||«       || _        y rG   )rÓ   rP   Úraw)rO   rÌ   r]   rß   s       r   rP   zText.__init__Î  s   € Ü×Ñ˜t T¨:Ô6Øˆ�r    c                ód   — t         j                  | |«      xr | j                  |j                  k(  S )zž
        Compare this text to C{text}.  If the underlying values and the C{raw}
        flag are the same, return C{True}, otherwise return C{False}.
        )rÓ   r`   rß   ©rO   ra   s     r   r`   zText.isEqualToNodeÒ  s)   € ô
 ×*Ñ*¨4°Ó7ÒQ¸D¿H¹HÈÏ	É	Ñ<QÐQr    c                óD   — t        | j                  || j                  «      S rG   )r´   rË   rß   rx   s      r   r{   zText.cloneNodeÙ  s   € Ü�D—N‘N F¨D¯H©HÓ5Ð5r    rd   c                óL  — t        |«      }| j                  r2| j                  }	t        |	t        «      sit	        | j                  «      }	nS| j                  }
t        |
t        «      st	        |
«      }
|rdj                  |
j                  «       «      }
t        |
«      }	 ||	«       y )Nr›   )r3   rß   rË   r(   r)   ÚjoinÚsplitrC   )rO   r.   rh   ri   rj   rk   rl   rm   r/   rÚ   Úvs              r   rn   zText.writexmlÜ  sy   € ô   Ó'ˆØ�8Š8Ø—.‘.ˆCÜ˜c¤3Ô'Ü˜$Ÿ.™.Ó)‘à—‘ˆAÜ˜a¤Ô%Ü˜“F�ÙØ—H‘H˜QŸW™W›YÓ'�Ü˜“)ˆCÙ	ˆ#�r    c                ó8   — dt        | j                  «      z  dz   S )NzText(%sú))ÚreprrË   rR   s    r   Ú__repr__zText.__repr__ô  s   € Øœ4 §¡Ó/Ñ/°#Ñ5Ð5r    r"   r�   rT   )rV   rW   rX   rP   r`   r{   rn   rê   rY   r    r   r´   r´   Í  s0   „ óòRó6ð ØØØØØóô06r    r´   c                  ó(   — e Zd Zdd„Zddddi dfd„Zy)ÚCDATASectionr   Nc                ó.   — t        | j                  |«      S rG   )rì   rË   rx   s      r   r{   zCDATASection.cloneNodeù  s   € Ü˜DŸN™N¨FÓ3Ð3r    rd   c                ód   — t        |«      } |d«        |d| j                  z   «        |d«       y )Nz	<![CDATA[rd   z]]>rÐ   r®   s	            r   rn   zCDATASection.writexmlü  s-   € ô   Ó'ˆÙ	ˆ+ŒÙ	ˆ"ˆt�~‰~Ñ
ÔÙ	ˆ%�r    r�   )rV   rW   rX   r{   rn   rY   r    r   rì   rì   ø  s    „ ó4ð ØØØØØôr    rì   c               #  ó<   K  — d} 	 dt        | «      z   –— | dz   } Œ­w)Nr   Úpr}   )r)   )r‹   s    r   Ú
_genprefixrñ     s*   è ø€ Ø	€AØ
Ø”C˜“F‰lÒØ�‰Eˆð ùs   ‚c                  ó   — e Zd ZdZy)Ú_Attrz#Support class for getAttributeNode.N)rV   rW   rX   rÜ   rY   r    r   ró   ró     s   „ Ú)r    ró   c                  ó¦   — e Zd ZdZdZdZ	 	 	 	 	 	 	 dd„Zd„ Zd„ Zd„ Z	d„ Z
dd	„Zd
„ Zd„ Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zddddi dfd„Zdd„Zdd„Zy)r°   r   r}   Nc	                ó   — t         j                  | |«       |xs | | _        || _        |s|j	                  «       }|€i | _        nA|| _        | j
                  j                  «       D ]  \  }	}
t        |
«      | j
                  |	<   Œ |rt        | j
                  |¬«      | _        |x| _	        x| _
        | _        || _        || _        || _        y )N)Úpreserve)r[   rP   ÚpreserveCaser»   r#   Ú
attributesÚitemsr@   r	   Ú
endTagNamer   ÚtagNameÚ	_filenameÚ_markposrm   )rO   rû   rø   r]   rH   Úmarkposr»   r÷   rm   Úkræ   s              r   rP   zElement.__init__  s¿   € ô 	�‰�d˜JÔ'Ø(Ò?°Ð,?ˆÔØ.ˆÔÙØ—m‘m“oˆGØÐØ ˆD�Oà(ˆDŒOØŸ™×-Ñ-Ó/ò 1‘��1Ü%-¨a£[�—‘ Ò"ð1ñ Ü-¨d¯o©oÈÔUˆDŒOà9@Ð@ˆŒÐ@˜$œ-¨$¬,Ø!ˆŒØˆŒØ"ˆ�r    c                ób   — | j                   €|| _         y | j                   j                  |«       y rG   )rl   Úupdate)rO   Úpfxss     r   ÚaddPrefixeszElement.addPrefixes>  s%   € Ø�?‰?Ð"Ø"ˆD�Oà�O‰O×"Ñ" 4Õ(r    c                óJ   — | j                   s|j                  «       }|| _        y rG   )r÷   r#   rú   )rO   rú   s     r   ÚendTagzElement.endTagD  s    € Ø× Ò Ø#×)Ñ)Ó+ˆJØ$ˆ�r    c                ó"  — | j                   rP| j                  |j                  k(  xr5 | j                  j                  «       |j                  j                  «       k(  S | j                  |j                  k(  xr | j                  |j                  k(  S rG   )r»   rø   r   r#   r¨   s     r   ÚisEqualToElementzElement.isEqualToElementI  sn   € Ø×ÒØ—O‘O q§|¡|Ñ3ò Ø—‘×#Ñ#Ó%¨¯©×)9Ñ)9Ó);Ñ;ðð —‘ 1§<¡<Ñ/ÒR°d·m±mÀqÇzÁzÑ6QÐRr    c                ó  — | j                   j                  «       |j                   j                  «       k(  xrL | j                  |j                  k(  xr1 | j                  |j                  k(  xr t        j                  | |«      S )zÄ
        Compare this element to C{other}.  If the C{nodeName}, C{namespace},
        C{attributes}, and C{childNodes} are all the same, return C{True},
        otherwise return C{False}.
        )r   r#   rm   rø   r[   r`   rá   s     r   r`   zElement.isEqualToNodeP  sn   € ð �M‰M×ÑÓ! U§^¡^×%9Ñ%9Ó%;Ñ;ò 0Ø—‘ %§/¡/Ñ1ò0à—‘ 5×#3Ñ#3Ñ3ò0ô ×"Ñ" 4¨Ó/ð		
r    c                ó>  — t        | j                  || j                  | j                  | j                  ¬«      }|j
                  j                  | j
                  «       |r1| j                  D �cg c]  }|j                  d|«      ‘Œ c}|_        |S g |_        |S c c}w )N)r]   rm   r÷   r»   r}   )	r°   rû   rm   r÷   r»   rø   r  r   r{   )rO   ry   rz   Úcloner„   s        r   r{   zElement.cloneNode]  sŠ   € ÜØ�L‰LØØ—n‘nØ×*Ñ*Ø ×0Ñ0ô
ˆð 	×Ñ×Ñ §¡Ô0ÙØGKÇÁÖW¸e §¡°°5Õ 9ÒWˆEÔð ˆð  "ˆEÔØˆùò  Xs   Á.Bc                óJ   — | j                   rt        | |«      S t        | |«      S rG   )r»   r$   r   r¼   s     r   r   zElement.getElementsByTagNamel  s%   € Ø×ÒÜ-¨d°DÓ9Ð9Ü# D¨$Ó/Ð/r    c                 ó   — yr£   rY   rR   s    r   ÚhasAttributeszElement.hasAttributesq  s   € Ør    c                ó:   — | j                   j                  ||«      S rG   )rø   Úget)rO   r   Údefaults      r   r¾   zElement.getAttributet  s   € Ø�‰×"Ñ" 4¨Ó1Ð1r    c                óž   — ||f}|| j                   v r| j                   |   S || j                  k(  r| j                   j                  ||«      S |S rG   )rø   rm   r  )rO   Únsr   r  Únsks        r   ÚgetAttributeNSzElement.getAttributeNSw  sN   € Ø�4ˆjˆØ�$—/‘/Ñ!Ø—?‘? 3Ñ'Ð'Ø�—‘ÒØ—?‘?×&Ñ& t¨WÓ5Ð5Øˆr    c                ó8   — t        | j                  |«      | «      S rG   )ró   r¾   r¼   s     r   ÚgetAttributeNodezElement.getAttributeNode  s   € Ü�T×&Ñ& tÓ,¨dÓ3Ð3r    c                ó"   — || j                   |<   y rG   ©rø   )rO   r   Úattrs      r   ÚsetAttributezElement.setAttribute‚  s   € Ø $ˆ�‰˜Òr    c                ó<   — || j                   v r| j                   |= y y rG   r  r¼   s     r   ÚremoveAttributezElement.removeAttribute…  s   € Ø�4—?‘?Ñ"Ø—‘ Ñ%ð #r    c                ó   — || j                   v S rG   r  r¼   s     r   ÚhasAttributezElement.hasAttribute‰  s   € Ø�t—‘Ð&Ð&r    rd   c           
     óü  ‡— d}d}	d}
| j                   s| j                  | _        t        |«      }| j                  r8| j                  j                  «       }|j                  «       D ]
  }||v sŒ||= Œ ni }dg}| j                  |	v r||g|z   }|j                  Šˆfd„}| j                  }|| j                  k7  r†| j                  �z| j                  |v r:|| j                     } ‰|dz   | j                  z   «       |dz   | j                  z   }nD ‰| j                  «        |d| j                  «       | j                  }n ‰| j                  «       d	j                  }t        | j                  j                  «       «      D ]Y  \  }}t        |t        «      r7|\  }}||v r||   }nt        t         «      }|||<   |€J ‚ ||dz   |z   |«       ŒM|€J ‚ |||«       Œ[ |r;|j                  «       D ]  \  }}|sŒ	 |d
|z   |«       Œ |j#                  |«       |}n|} | ||«      «       | j$                  r‘ |d«       ||z   }| j$                  D ]E  }| j                  |	v r| j                  |
v r | |||f«      «       |j'                  |||||||«       ŒG | j                  |	v r | |||f«      «        | |d|df«      «       y| j                  j)                  «       |vr | |d|df«      «       y |d«       y)a*  
        Serialize this L{Element} to the given stream.

        @param stream: A file-like object to which this L{Element} will be
            written.

        @param nsprefixes: A C{dict} mapping namespace URIs as C{str} to
            prefixes as C{str}.  This defines the prefixes which are already in
            scope in the document at the point at which this L{Element} exists.
            This is essentially an implementation detail for namespace support.
            Applications should not try to use it.

        @param namespace: The namespace URI as a C{str} which is the default at
            the point in the document at which this L{Element} exists.  This is
            essentially an implementation detail for namespace support.
            Applications should not try to use it.
        )ÚimgÚbrÚhrÚbaseÚmetaÚlinkÚparamÚareaÚinputÚcolÚbasefontÚisindexÚframe)ÚhtmlÚheadÚbodyÚnoscriptÚinsÚdelÚh1Úh2Úh3Úh4Úh5Úh6ÚscriptÚulÚolÚdlÚprer"  Ú
blockquoteÚaddressrð   ÚdivÚfieldsetÚtableÚtrÚformÚobjectrA  ÚappletÚmap)rC  r:  r;  r.  r5   c                ó0   •—  ‰d| dt        |«      df«      S )Nr›   z="r7   )rC   )Ú_atrÚ_valÚbexts     €r   ú<lambda>z"Element.writexml.<locals>.<lambda>ë  s   ø€ ¡t¨S°$¸¼fÀT»lÈCÐ,PÓ'Q€ r    Nú:Úxmlnsrd   zxmlns:r6   z</z></ú />)r÷   rû   rú   r3   rl   ÚcopyÚkeysrÀ   rm   rä   Úsortedrø   rù   r(   ÚtupleÚnextÚ	genprefixr  r   rn   r#   )rO   r.   rh   ri   rj   rk   rl   rm   ÚALLOWSINGLETONÚBLOCKELEMENTSÚFORMATNICELYr/   Únewprefixesr  ÚbeginÚ	writeattrrú   ÚprefixÚjr  rÚ   ÚkeyÚdownprefixesÚ	newindentr„   rK  s                            @r   rn   zElement.writexmlŒ  s  ø€ ð8
ˆð
ˆð@ 2ˆð × Ò Ø"Ÿl™lˆDŒOä Ó'ˆØ�?Š?ØŸ/™/×.Ñ.Ó0ˆKØ —o‘oÓ'ò (�Ø˜Ò$Ø# B™ñ(ð ˆKà�ˆØ�<‰<˜=Ñ(Ø˜6�N UÑ*ˆEØ�|‰|ˆÛQˆ	ð
 —_‘_ˆ
à˜Ÿ™Ò&¨4¯>©>Ð+Eð �~‰~ Ñ+ð $ D§N¡NÑ3�Ù�V˜c‘\ D§L¡LÑ0Ô1à# c™\¨D¯O©OÑ;‘
ñ �T—\‘\Ô"Ù˜' 4§>¡>Ô2ð !ŸN™N‘	ñ �—‘Ôà�G‰GˆÜ §¡× 5Ñ 5Ó 7Ó8ò 	%‰IˆD�#Ü˜$¤Ô&Ø‘��CØ˜Ñ#Ø'¨™^‘Fä!¤)›_�FØ&,�K ‘OØ�Ð&�Ù˜& 3™,¨Ñ,¨cÕ2à�Ð&�Ù˜$ Õ$ð	%ñ Ø)×/Ñ/Ó1ò 5‘
��FÚÙ˜h¨Ñ/°Õ4ð5ð ×Ñ˜zÔ*Ø&‰Là%ˆLÙ	‰!ˆE‹(ŒØ�?Š?ÙˆcŒFØ Ñ*ˆIØŸ™ò �Ø—<‘< =Ñ0°T·\±\À\Ñ5QÙ‘a˜˜yÐ)Ó*Ô+Ø—‘Ø˜I y°$¸¸|ÈYõðð �|‰|˜}Ñ,Ù‘!�T˜6�NÓ#Ô$Ù‰a��z 3Ð'Ó(Õ)Ø�\‰\×ÑÓ!¨Ñ7Ù‰a�˜
 CÐ(Ó)Õ*áˆe�Hr    c                óð   — dt        | j                  «      z  }| j                  r|d| j                  ›�z  }| j                  r|d| j                  ›�z  }| j                  r|d| j                  ›�z  }|dz   S )Nz
Element(%sz, attributes=z, filename=z
, markpos=rè   )ré   r   rø   rü   rý   )rO   Úreps     r   rê   zElement.__repr__5  sv   € ØœT $§-¡-Ó0Ñ0ˆØ�?Š?Ø�] 4§?¡?Ð"5Ð6Ñ6ˆCØ�>Š>Ø�[ §¡Ð 2Ð3Ñ3ˆCØ�=Š=Ø�Z §¡Ð0Ð1Ñ1ˆCØ�S‰yÐr    c                ó¼  — d| j                   z   }| j                  s| j                  r|dz  }| j                  r|t        | j                  «      z  }| j                  r|d| j                  z  z  }| j                  s| j                  r|dz  }| j                  j                  «       D ]
  }|d|z  z  }Œ | j                  «       r|d| j                   z  z  }|S |dz  }|S )Nr5   z (z line %s column %srè   z %s=%rz
 >...</%s>rO  )r   rü   rý   ré   rø   rù   r   )rO   rb  Úitems      r   rS   zElement.__str__?  sÑ   € Ø�D—M‘MÑ!ˆØ�>Š>˜TŸ]š]Ø�4‰KˆCØ�>Š>Ø”4˜Ÿ™Ó'Ñ'ˆCØ�=Š=ØÐ'¨$¯-©-Ñ7Ñ7ˆCØ�>Š>˜TŸ]š]Ø�3‰JˆCØ—O‘O×)Ñ)Ó+ò 	#ˆDØ�8˜d‘?Ñ"‰Cð	#à×ÑÔØ�< $§-¡-Ñ/Ñ/ˆCð ˆ
ð �5‰LˆCØˆ
r    )NNNNr}   r   Nr�   rG   rT   )rV   rW   rX   r÷   r»   rl   rP   r  r  r  r`   r{   r   r  r¾   r  r  r  r  r  rn   rê   rS   rY   r    r   r°   r°     s”   „ Ø€LØ€OØ€Jð
 ØØØØØØó#ò>)ò%ò
Sò
óò0ò
ó2óò4ò%ò&ò'ð ØØØØØógóRôr    r°   c                óV   — i }| j                  «       D ]  \  }}t        |«      ||<   Œ |S rG   )rù   r@   ©r¥   Úddrÿ   ræ   s       r   Ú_unescapeDictrh  R  s2   € Ø	€BØ—‘“	ò ‰ˆˆ1Ü˜“ˆˆ1Šðà€Ir    c                óD   — i }| j                  «       D ]
  \  }}|||<   Œ |S rG   )rù   rf  s       r   Ú_reverseDictrj  Y  s.   € Ø	€BØ—‘“	ò ‰ˆˆ1Øˆˆ1Šðà€Ir    c                  óú   — e Zd Zdj                  «       Zddgddgddgdgg d¢g d¢g d¢dgdgd	gd
gdgdgddgdgdœZdddeefd„Zd„ Zd„ Z e	j                  d«      Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy )!ÚMicroDOMParserz#area link br img hr input base metarð   Údtrg  Úli)ÚtheadÚtfootÚtbodyÚcolgroupr)  rC  ÚtdÚthr/  r.  Úoption)rð   rm  rg  rn  rq  ro  rp  rr  r)  rC  rs  rt  r.  Útitleru  r   r}   c                ó´   — g | _         dd dœ}t        |«      }|d |fg| _        g | _        d | _        || _        || _        |xs | | _        || _        || _	        y )NrN  )rN  rd   )
Úelementstackrj  ÚnsstackÚ	documentsÚ
_mddoctypeÚbeExtremelyLenientr»   r÷   ÚsoonClosersÚlaterClosers)rO   r|  r»   r÷   r}  r~  r¥   Údrs           r   rP   zMicroDOMParser.__init__x  sl   € ð ˆÔØ 4Ñ(ˆÜ˜!‹_ˆØ˜D "˜�ˆŒØˆŒØˆŒØ"4ˆÔØ.ˆÔØ(Ò?°Ð,?ˆÔØ&ˆÔØ(ˆÕr    c                ó¶   — t        t        | j                  «      «      D ]8  }| j                  |    }|j                  dk(  s|j	                  dd«      dk(  sŒ8 y y)Nr=  z	xml:spacerd   rö   r}   r   )Úranger   rx  rû   r¾   )rO   ÚedxÚels      r   ÚshouldPreserveSpacez"MicroDOMParser.shouldPreserveSpace�  sY   € Üœ˜T×.Ñ.Ó/Ó0ò 	ˆCØ×"Ñ" C 4Ñ(ˆBØ�z‰z˜UÒ" b§o¡o°kÀ2Ó&FÈ*Ó&TÙð	ð r    c                ó:   — | j                   r| j                   d   S y r–   )rx  rR   s    r   Ú
_getparentzMicroDOMParser._getparent”  s   € Ø×ÒØ×$Ñ$ RÑ(Ð(àr    z\s*/[/*]\s*c                ó”  — | j                   rt        |j                  «      dk(  sy |j                  «       }t	        |t
        «      rîd}|j                  }| j                  j                  |«      }|r|j                  «       }|t        |«      d  }	 t        d|z  «      j                  d   }t        |j                  «      dk7  ry |j                  «       }t	        |t        t        f«      rIg |_        |r$|j                  j                  t        |«      «       |j                  j                  |«       y y y # t        t        f$ r Y y w xY w)Nr}   rd   z	<a>%s</a>r   )r|  r   r   rš   r(   r´   rÕ   ÚCOMMENTÚmatchÚgroupÚparseStringr
   rE   rì   r¸   r   )rO   rƒ  r   r\  Úoldvaluer‰  Úes          r   Ú_fixScriptElementz MicroDOMParser._fixScriptElementœ  s  € ð ×&Ò&¬c°"·-±-Ó.@ÀAÒ.EØØ�M‰M‹OˆÜ�aœÔð ˆFØ—w‘wˆHØ—L‘L×&Ñ& xÓ0ˆEÙØŸ™›�Ø#¤C¨£K MÐ2�ðÜ ¨hÑ 6Ó7×BÑBÀ1ÑE�ô �1—<‘<Ó  AÒ%ØØ—‘“ˆAÜ˜!œl¬GÐ4Ô5Ø "�”ÙØ—M‘M×(Ñ(¬¨f«Ô6Ø—‘×$Ñ$ QÕ'ð	 6ð+ øô  ¤Ð/ò Ùðús   ÂD5 Ä5EÅEc                ó   — || _         y rG   )r{  )rO   r¤   s     r   Ú
gotDoctypezMicroDOMParser.gotDoctype½  s	   € Ø!ˆ�r    c                óð  — | j                  «       }| j                  r“t        |t        «      rƒ|j                  }|}| j
                  r |j                  «       }|j                  «       }|| j                  j                  |g «      v r+| j                  |j                  «       | j                  «       }t        |«      }| j                  d   d   }i }g }|j                  «       D ]V  \  }	}
|	j                  d«      sŒ|	j                  dd«      }t        |«      dk(  r	|
||d   <   n|
|d<   |j!                  |	«       ŒX |D ]  }	||	= Œ |r!|j#                  «       }|j%                  |«       g }|j                  «       D ]Q  \  }	}
|	j                  dd«      }t        |«      dk(  sŒ'|\  }}|dk7  sŒ2||v sŒ7|
|||   |f<   |j!                  |	«       ŒS |D ]  }	||	= Œ t        |||| j&                  | j)                  «       | j
                  | j*                  |j                  d«      ¬	«      }t-        |«      }|j/                  |«       |rO| j                  d   d   j#                  «       }|j%                  |«       | j                  j!                  |||f«       | j0                  j!                  |«       |r|j3                  |«       | j                  r+|j                  | j4                  v r| j                  |«       y y y )
Nr—   r   rN  rM  r}   é   rd   Úxml)r»   r÷   rm   )r†  r|  r(   r°   rû   r»   r#   r~  r  Ú	gotTagEndrh  ry  rù   Ú
startswithrå   r   r   rP  r  rH   ÚsaveMarkr÷   rj  r  rx  r…   r}  )rO   r   rø   rz   Ú
parentNameÚmyNameÚ
namespacesÚ	newspacesÚkeysToDeleterÿ   ræ   Ú
spacenamesÚksplitÚpfxÚtvrƒ  Ú	revspacesÚrscopys                     r   ÚgotTagStartzMicroDOMParser.gotTagStartÀ  sÊ  € ð —‘Ó"ˆØ×"Ò"¤z°&¼'Ô'BØŸ™ˆJØˆFØ×#Ò#Ø'×-Ñ-Ó/�
ØŸ™›�Ø˜×*Ñ*×.Ñ.¨z¸2Ó>Ñ>Ø—‘˜vŸ~™~Ô.ØŸ™Ó*�Ü" :Ó.ˆ
Ø—\‘\ "Ñ% aÑ(ˆ
Øˆ	ØˆØ×$Ñ$Ó&ò 	'‰DˆAˆqØ�|‰|˜GÕ$ØŸW™W S¨!›_�
Ü�z“? aÒ'Ø/0�I˜j¨™mÒ,à$%�I˜b‘MØ×#Ñ# AÕ&ð	'ð ò 	ˆAØ˜1‘ð	áØ#Ÿ™Ó*ˆJØ×Ñ˜iÔ(ØˆØ×$Ñ$Ó&ò 	+‰DˆAˆqØ—W‘W˜S !“_ˆFÜ�6‹{˜aÓØ ‘��RØ˜%“< C¨:Ò$5Ø67�J˜z¨#™°Ð2Ñ3Ø ×'Ñ'¨Õ*ð	+ð ò 	ˆAØ˜1‘ð	äØØØØ�M‰MØ�M‰M‹OØ ×0Ñ0Ø×*Ñ*Ø —n‘n RÓ(ô	
ˆô ! Ó+ˆ	Ø
�‰�yÔ!áØ—\‘\ "Ñ% aÑ(×-Ñ-Ó/ˆFØ�M‰M˜)Ô$Ø�L‰L×Ñ ¨R°Ð 8Ô9Ø×Ñ× Ñ  Ô$ÙØ×Ñ˜rÔ"Ø×"Ò" r§z¡z°T×5EÑ5EÑ'EØ�N‰N˜4Õ ð (FÐ"r    c                ó®   — | j                  «       } |||«      }|r|j                  |«       y | j                  r| j                  j	                  |«       y y rG   )r†  r…   r|  rz  r   )rO   ÚfactoryrÌ   rz   Útes        r   Ú_gotStandalonezMicroDOMParser._gotStandaloneÿ  sK   € Ø—‘Ó"ˆÙ�T˜6Ó"ˆÙØ×Ñ˜rÕ"Ø×$Ò$Ø�N‰N×!Ñ! "Õ%ð %r    c                ór   — |j                  «       s| j                  «       r| j                  t        |«       y y rG   )rk   r„  r¦  r´   ©rO   rÌ   s     r   ÚgotTextzMicroDOMParser.gotText  s+   € Ø�:‰:Œ<˜4×3Ñ3Ô5Ø×Ñ¤ dÕ+ð 6r    c                ó0   — | j                  t        |«       y rG   )r¦  r¸   r¨  s     r   Ú
gotCommentzMicroDOMParser.gotComment  s   € Ø×ÑœG TÕ*r    c                ó0   — | j                  t        |«       y rG   )r¦  rÇ   )rO   Ú	entityRefs     r   ÚgotEntityReferencez!MicroDOMParser.gotEntityReference  s   € Ø×ÑœO¨YÕ7r    c                ó0   — | j                  t        |«       y rG   )r¦  rì   )rO   Úcdatas     r   ÚgotCDatazMicroDOMParser.gotCData  s   € Ø×ÑœL¨%Õ0r    c                óF  — | j                   s6| j                  ry t        | j                  d|f| j	                  «       z   dz   Ž ‚| j                   j                  «       }| j                  d   d   }| j                  d   d   |u r| j                  j                  «       }nd }| j                  r+|j                  j                  «       }|j                  «       }n|j                  }|}|j                  dd«      }t        |«      dk(  rq|\  }}	|j                  |d «      }
|
�X|j                  |
k7  rI| j                  s=t        | j                  |j                  |f| j	                  «       z   |j                  z   Ž ‚||k(  �s@| j                  r÷| j                   �r'| j                   d   }t        t        | j                   «      «      D ]F  }| j                   |dz       j                  |k(  sŒ$| j                   |dz       j!                  |«        n: | j                   j#                  |«       |�| j                  j#                  |«       y | j                   |dz    d …= | j                   sY| j$                  j#                  |«       y t        | j                  |j                  |f| j	                  «       z   |j                  z   Ž ‚|j!                  |«       | j                   s| j$                  j#                  |«       | j                  r"|j                  dk(  r| j'                  |«       y y y )	NÚNOTHING)r   r   r—   r’  r}   rM  r   r9  )rx  r|  rE   rH   r–  r   ry  r»   rû   r#   rå   r   r  rm   rý   r�  r  r   rz  rŽ  )rO   r   rƒ  ÚpfxdixÚnstupleÚtnÚcnameÚnsplitrž  Únewnamer  ÚlastElÚidxs                r   r”  zMicroDOMParser.gotTagEnd  sË  € ð × Ò Ø×&Ò&ØÜ Ø—=‘= )¨TÐ2°T·]±]³_ÑDÀvÑMðð ð ×Ñ×"Ñ"Ó$ˆØ—‘˜bÑ! !Ñ$ˆØ�<‰<˜Ñ˜AÑ "Ñ$Ø—l‘l×&Ñ&Ó(‰GàˆGØ×ÒØ—‘×!Ñ!Ó#ˆBØ—J‘J“L‰Eà—‘ˆBØˆEà—‘˜C Ó#ˆÜˆv‹;˜!ÒØ!‰LˆC�Ø—‘˜C Ó&ˆBØˆ~Ø—<‘< 2Ò%Ø×2Ò2Ü,à!%§¡°·
±
¸DÐ AØ"&§-¡-£/ñ!2à"$§+¡+ñ!.ðð ð �e“Ø×&Ò&Ø×$Ó$Ø!×.Ñ.¨qÑ1�FÜ$¤S¨×):Ñ):Ó%;Ó<ò 	˜Ø×,Ñ,¨s°Q©w¨ZÑ8×@Ñ@ÀEÓIØ ×-Ñ-°°a±¨jÑ9×@Ñ@ÀÔFÙ!ð	ð ×)Ñ)×0Ñ0°Ô4Ø"Ð.Ø ŸL™L×/Ñ/°Ô8ØØ×)Ñ)¨C°!©G¨*©,Ð7Ø×,Ò,ØŸ™×-Ñ-¨fÔ5Øä$Ø—}‘} b§j¡j°$Ð7¸$¿-¹-»/ÑIÈBÏKÉKÑWðð ð 	�	‰	�$ŒØ× Ò Ø�N‰N×!Ñ! "Ô%Ø×"Ò" r§z¡z°XÒ'=Ø×"Ñ" 2Õ&ð (>Ð"r    c                óL  — t        j                  | |«       | j                  r‚| j                  r)| j                  j                  | j                  d   «       y t        | j                  | j                  d   df| j                  «       z   | j                  d   j                  z   Ž ‚y )Nr   r—   ÚEND_OF_FILE)
r   ÚconnectionLostrx  r|  rz  r   rE   rH   r–  rý   )rO   Úreasons     r   r¾  zMicroDOMParser.connectionLostT  s“   € Ü× Ñ   vÔ.Ø×ÒØ×&Ò&Ø—‘×%Ñ% d×&7Ñ&7¸Ñ&:Õ;ä$àŸ™¨×(9Ñ(9¸"Ñ(=¸}ÐMØŸ-™-›/ñ*à×+Ñ+¨BÑ/×8Ñ8ñ9ðð ð	 r    N)rV   rW   rX   rå   r}  r~  rP   r„  r†  ÚreÚcompilerˆ  rŽ  r�  r¢  r¦  r©  r«  r®  r±  r”  r¾  rY   r    r   rl  rl  `  sÎ   „ ð
 8×=Ñ=Ó?€Kà�4ˆ[Ø�TˆlØ�TˆlØˆfÚ,Ú,Ú,Ø�LØˆwØˆfØˆfØˆfØ�Ø˜&Ð!Ø�*ñ€Lð( ØØØØ!ó)ò*òð ˆb�j‰j˜Ó(€Gò(òB"ò=!ò~&ò,ò+ò8ò1ò>'ó@r    rl  c                ó:  — t        | d«      st        | d«      } t        |i |¤Ž}t        | dd«      |_        |j                  d«       t        | d«      r |j                  | j                  «       «       n8| j                  d«      }|r%|j                  |«       | j                  d«      }|rŒ%|j                  d«       |j                  st        |j                  ddd	«      ‚|j                  r„t        |j                  «      d
k(  r>|j                  d   }t        |t        «      s\t        d«      }|j!                  |«       |}n=t        d«      }|j                  D ]  }|j!                  |«       Œ n|j                  d   }t#        |«      }|j$                  |_        |S )z%
    Parse HTML or XML readable.
    ÚreadÚrbr   z<xmlfile />Nrp   i   r   zNo top-level Nodes in documentr}   r-  )rÁ   Úopenrl  ÚgetattrrH   ÚmakeConnectionÚdataReceivedrp   rÃ  r¾  rz  r
   r|  r   r(   r°   r…   rŸ   r{  r¤   )	ÚreadableÚargsÚkwargsÚmdpÚrr¥   rƒ  r„   Údocs	            r   ÚparserÏ  c  sd  € ô �8˜VÔ$Ü˜ $Ó'ˆÜ
˜$Ð
) &Ñ
)€CÜ˜8 V¨]Ó;€C„LØ×Ñ�tÔÜˆx˜Ô$Ø×Ñ˜×*Ñ*Ó,Õ-à�M‰M˜$ÓˆÙØ×Ñ˜QÔØ—‘˜dÓ#ˆAò ð ×Ñ�tÔà�=Š=Ü˜Ÿ™ q¨!Ð-MÓNÐNà
×ÒÜˆs�}‰}Ó Ò"Ø—‘˜aÑ ˆAÜ˜a¤Ô)Ü˜V“_�Ø—‘˜qÔ!Ø‘ä˜“ˆAØŸ™ò %�Ø—‘˜eÕ$ñ%ð �M‰M˜!ÑˆÜ
�1‹+€CØ—.‘.€C„KØ€Jr    c                ó    — t        | t        «      r't        t        | j	                  d«      «      g|¢­i |¤ŽS t        t        | «      g|¢­i |¤ŽS )NzUTF-16)r(   r)   rÏ  r   r*   )ÚstrÊ  r±   s      r   r‹  r‹  Š  sH   € Ü�"”cÔä”W˜RŸY™Y xÓ0Ó1Ð?°DÒ?¸BÑ?Ð?Ü”˜“Ð*˜tÒ* rÑ*Ð*r    c                ó   — t        | dd¬«      S ©z'
    Parse an XML readable object.
    r   r}   ©r»   r÷   )rÏ  )rÉ  s    r   ÚparseXMLrÕ  ‘  s   € ô �¨1¸1Ô=Ð=r    c                ó   — t        | dd¬«      S rÓ  )r‹  )rÑ  s    r   ÚparseXMLStringr×  ˜  s   € ô �r¨1¸1Ô=Ð=r    c                  ó8   — e Zd ZdZd	d„Zd„ Zd„ Zd„ Zd
d„Zd„ Z	y)Úlmxz
    Easy creation of XML.
    c                óH   — t        |t        «      rt        |«      }|| _        y rG   )r(   r)   r°   rÂ   )rO   rÂ   s     r   rP   zlmx.__init__¤  s   € Ü�dœCÔ Ü˜4“=ˆDØˆ�	r    c                ó8   ‡ ‡— ‰d   dk(  rt        d«      ‚ˆˆ fd„S )Nr   Ú_zno private attrsc                 ó*   •—  ‰j                   ‰fi | ¤ŽS rG   )Úadd)r±   r   rO   s    €€r   rL  z!lmx.__getattr__.<locals>.<lambda>¬  s   ø€ ˜H˜DŸH™H TÑ0¨RÑ0€ r    )ÚAttributeErrorr¼   s   ``r   Ú__getattr__zlmx.__getattr__©  s    ù€ Ø�‰7�cŠ>Ü Ð!3Ó4Ð4Ü0Ð0r    c                ó<   — | j                   j                  ||«       y rG   )rÂ   r  )rO   r^  rÚ   s      r   Ú__setitem__zlmx.__setitem__®  s   € Ø�	‰	×Ñ˜s CÕ(r    c                ó8   — | j                   j                  |«      S rG   )rÂ   r¾   )rO   r^  s     r   Ú__getitem__zlmx.__getitem__±  s   € Ø�y‰y×%Ñ% cÓ*Ð*r    c                óV   — t        ||¬«      }| j                  j                  |«       | S )N)rß   )r´   rÂ   r…   )rO   Útxtrß   Únns       r   r=   zlmx.text´  s%   € Ü�#˜3ÔˆØ�	‰	×Ñ˜bÔ!Øˆr    c                óÂ   — t        |dd¬«      }| j                  j                  |«       t        |«      }|j	                  «       D ]  \  }}|d   dk(  r|dd  }|||<   Œ |S )Nr   rÔ  rÜ  r}   )r°   rÂ   r…   rÙ  rù   )rO   rû   r±   ÚnewNodeÚxfrÿ   ræ   s          r   rÞ  zlmx.add¹  sj   € Ü˜'°1À1ÔEˆØ�	‰	×Ñ˜gÔ&Ü�‹\ˆØ—H‘H“Jò 	‰DˆAˆqØ�‰t�sŠ{Ø�a�b�E�ØˆBˆqŠEð	ð ˆ	r    N)r@  )r   )
rV   rW   rX   rÜ   rP   rà  râ  rä  r=   rÞ  rY   r    r   rÙ  rÙ  Ÿ  s%   „ ñóò
1ò
)ò+óó
r    rÙ  )6rÜ   Ú
__future__r   rÀ  ÚwarningsÚior   r   Úincrementalr   r   Útwisted.python.compatr   Útwisted.python.utilr	   Útwisted.web.suxr
   r   ÚformatÚwarningStringÚwarnÚDeprecationWarningr   r$   r3   ÚHTML_ESCAPE_CHARSÚlistÚREV_HTML_ESCAPE_CHARSÚreverseÚXML_ESCAPE_CHARSÚREV_XML_ESCAPE_CHARSr@   rC   Ú	ExceptionrE   r[   rŸ   rÇ   rÓ   r¸   r´   rì   rñ   rU  ró   r°   rh  rj  rl  rÏ  r‹  rÕ  r×  rÙ  rY   r    r   ú<module>rý     s�  ðñõ" #ó 
Û ß  ç 1õ )Ý /ß 1à;×BÑBÙ‘W˜Y¨¨B°Ó2Ó3ó€ð €‡�ˆmÐ/¸AÕ >òò6
òð&Ð ñ Ð.Ó/Ð Ø × Ñ Ô à$Ð'9Ñ9Ð ÙÐ,Ó-Ð Ø × Ñ Ô ð /ó ð )ó ô
�Yô 
÷6Kñ KôtQˆtô Qôh2�dô 2ô<+�Dô +ô/ˆmô /ô.(6ˆ=ô (6ôV�=ô ò(ñ ‹L€	ô*ˆMô *ôuˆdô uòp	òô@�Yô @òF$òN+ò>ò>÷"ò "r    