§
     Mºf½  ã                   ó´  — d Z dZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZmZmZmZmZmZmZ ddlmZmZmZ eZ	 ddlmZ dZn# e$ r d	ZY nw xY w	 ddlZdZn# e$ r d	ZY nw xY w	 ddlZdZ ej!        j"        Z"n# e$ r d	Z d
Z"Y nw xY w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)dS )zHelper classes for tests.ÚMITé    N)ÚBeautifulSoup)	ÚCharsetMetaAttributeValueÚCommentÚContentMetaAttributeValueÚDoctypeÚPYTHON_SPECIFIC_ENCODINGSÚSoupStrainerÚScriptÚ
StylesheetÚTag)ÚDetectsXMLParsedAsHTMLÚHTMLParserTreeBuilderÚXMLParsedAsHTMLWarning)ÚSelectorSyntaxErrorTF)r   u-
  A bare string
<!DOCTYPE xsl:stylesheet SYSTEM "htmlent.dtd">
<!DOCTYPE xsl:stylesheet PUBLIC "htmlent.dtd">
<div><![CDATA[A CDATA section where it doesn't belong]]></div>
<div><svg><![CDATA[HTML5 does allow CDATA sections in SVG]]></svg></div>
<div>A <meta> tag</div>
<div>A <br> tag that supposedly has contents.</br></div>
<div>AT&T</div>
<div><textarea>Within a textarea, markup like <b> tags and <&<&amp; should be treated as literal</textarea></div>
<div><script>if (i < 2) { alert("<b>Markup within script tags should be treated as literal.</b>"); }</script></div>
<div>This numeric entity is missing the final semicolon: <x t="pi&#241ata"></div>
<div><a href="http://example.com/</a> that attribute value never got closed</div>
<div><a href="foo</a>, </a><a href="bar">that attribute value was closed by the subsequent tag</a></div>
<! This document starts with a bogus declaration ><div>a</div>
<div>This document contains <!an incomplete declaration <div>(do you see it?)</div>
<div>This document ends with <!an incomplete declaration
<div><a style={height:21px;}>That attribute value was bogus</a></div>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">The doctype is invalid because it contains extra whitespace
<div><table><td nowrap>That boolean attribute had no value</td></table></div>
<div>Here's a nonexistent entity: &#foo; (do you see it?)</div>
<div>This document ends before the entity finishes: &gt
<div><p>Paragraphs shouldn't contain block display elements, but this one does: <dl><dt>you see?</dt></p>
<b b="20" a="1" b="10" a="2" a="3" a="4">Multiple values for the same attribute.</b>
<div><table><tr><td>Here's a table</td></tr></table></div>
<div><table id="1"><tr><td>Here's a nested table:<table id="2"><tr><td>foo</td></tr></table></td></div>
<div>This tag contains nothing but whitespace: <b>    </b></div>
<div><blockquote><p><b>This p tag is cut off by</blockquote></p>the end of the blockquote tag</div>
<div><table><div>This table contains bare markup</div></table></div>
<div><div id="1">
 <a href="link1">This link is never closed.
</div>
<div id="2">
 <div id="3">
   <a href="link2">This link is closed.</a>
  </div>
</div></div>
<div>This document contains a <!DOCTYPE surprise>surprise doctype</div>
<div><a><B><Cd><EFG>Mixed case tags are folded to lowercase</efg></CD></b></A></div>
<div><ourâ˜ƒ>Tag name contains Unicode characters</ourâ˜ƒ></div>
<div><a â˜ƒ="snowman">Attribute name contains Unicode characters</a></div>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
c                   óV   — e Zd Zed„ ¦   «         Zd„ Zd„ Zdd„ZeZd„ Z	dd„Z
d	„ Zd
„ ZdS )ÚSoupTestc                 ó   — t           S ©N)Údefault_builder©Úselfs    úQ/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/bs4/tests/__init__.pyr   zSoupTest.default_builder^   s   € åÐó    c                 óV   — |                      d| j        ¦  «        }t          |fd|i|¤ŽS )z*Build a Beautiful Soup object from markup.Úbuilder)Úpopr   r   )r   ÚmarkupÚkwargsr   s       r   ÚsoupzSoupTest.soupb   s3   € à—*’*˜Y¨Ô(<Ñ=Ô=ˆÝ˜VÐ?Ð?¨WÐ?¸Ð?Ð?Ð?r   c                 óB   —  | j         di |¤Ž                     |¦  «        S )z[Turn an HTML fragment into a document.

        The details depend on the builder.
        © )r   Útest_fragment_to_document)r   r   r   s      r   Údocument_forzSoupTest.document_forg   s+   € ð
 $ˆtÔ#Ð-Ð- fÐ-Ð-×GÒGÈÑOÔOÐOr   Nc                 óP  — | j         }t          ||¬¦  «        }|€|}|                     ¦   «         |                      |¦  «        k    sJ ‚t	          d„ t          |j                             ¦   «         ¦  «        D ¦   «         ¦  «        sJ ‚|j        gd„ |j	        D ¦   «         k    sJ ‚dS )ziParse some markup using Beautiful Soup and verify that
        the output markup is as expected.
        )r   Nc              3   ó"   K  — | ]
}|d k    V — ŒdS )r   Nr"   )Ú.0Úvs     r   ú	<genexpr>z'SoupTest.assert_soup.<locals>.<genexpr>   s&   è è € ÐEÐE˜A�1�a’4ÐEÐEÐEÐEÐEÐEr   c                 ó   — g | ]	}|j         ‘Œ
S r"   )Úname)r'   Úxs     r   ú
<listcomp>z(SoupTest.assert_soup.<locals>.<listcomp>ƒ   s   € Ð&DÐ&DÐ&D°! q¤vÐ&DÐ&DÐ&Dr   )
r   r   Údecoder$   ÚallÚlistÚopen_tag_counterÚvaluesÚROOT_TAG_NAMEÚtagStack)r   Úto_parseÚcompare_parsed_tor   Úobjs        r   Úassert_soupzSoupTest.assert_soupn   sÀ   € ð Ô&ˆÝ˜H¨gÐ6Ñ6Ô6ˆØÐ$Ø (Ðð �zŠz‰|Œ|˜t×0Ò0Ð1BÑCÔCÒCÐCÐCÐCõ ÐEÐE¥ cÔ&:×&AÒ&AÑ&CÔ&CÑ!DÔ!DÐEÑEÔEÑEÔEÐEÐEÐEð Ô!Ð"Ð&DÐ&D°s´|Ð&DÑ&DÔ&DÒDÐDÐDÐDÐDÐDr   c                 óZ   — d}|j         D ] }|r||j        k    sJ ‚||j        k    sJ ‚|}Œ!dS )zyEnsure that next_element and previous_element are properly
        set for all descendants of the given element.
        N)ÚdescendantsÚnext_elementÚprevious_element)r   ÚelementÚearlierÚes       r   ÚassertConnectednesszSoupTest.assertConnectedness‡   s\   € ð ˆØÔ$ð 	ð 	ˆAØð 5Ø˜GÔ0Ò0Ð0Ð0Ð0Ø !Ô"4Ò4Ð4Ð4Ð4ØˆGˆGð		ð 	r   Fc           	      óê  — d}|j         €�|j        �$J d                     ||j        d¦  «        ¦   «         ‚|j        �$J d                     ||j        d¦  «        ¦   «         ‚|j        �$J d                     ||j        d¦  «        ¦   «         ‚d}d}d}t          |j        ¦  «        dz
  }|j        D �]:}d}|dk    rŽ|j         �…|j        |u s$J d                     ||j        |¦  «        ¦   «         ‚|j        |u s$J d                     ||j        |¦  «        ¦   «         ‚|j        �$J d                     ||j        d¦  «        ¦   «         ‚�n|j        |j        |dz
           u s2J d	                     ||j        |j        |dz
           ¦  «        ¦   «         ‚|j        |dz
           j        |u s@J d
                     |j        |dz
           |j        |dz
           j        |¦  «        ¦   «         ‚|�e|j        |u s/J d                     ||j        ||j         j        ¦  «        ¦   «         ‚|j        |u s$J d                     ||j        |¦  «        ¦   «         ‚t          |t          ¦  «        rH|j        rA|  
                    |d¦  «        }|j        �$J d
                     ||j        d¦  «        ¦   «         ‚|�|}n|}||k    r+|j        �$J d
                     ||j        d¦  «        ¦   «         ‚|dz  }�Œ<|�|n|}|€|}|s||�z|}	 |€,|j        �$J d                     ||j        d¦  «        ¦   «         ‚nG|j        �8|j        |j        u s)J d                     ||j        |j        ¦  «        ¦   «         ‚n|j         }ŒudS |S )z.Ensure proper linkage throughout the document.Nz3Bad previous_element
NODE: {}
PREV: {}
EXPECTED: {}z3Bad previous_sibling
NODE: {}
PREV: {}
EXPECTED: {}z/Bad next_sibling
NODE: {}
NEXT: {}
EXPECTED: {}r   é   z/Bad next_element
NODE: {}
NEXT: {}
EXPECTED: {}z2Bad previous_sibling
NODE: {}
PREV {}
EXPECTED: {}z1Bad previous_sibling
NODE: {}
PREV {}
EXPECTED {}z-Bad next_sibling
NODE: {}
NEXT {}
EXPECTED {}z=Bad previous_element
NODE: {}
PREV {}
EXPECTED {}
CONTENTS {}z-Bad next_element
NODE: {}
NEXT {}
EXPECTED {}T)Úparentr<   ÚformatÚprevious_siblingÚnext_siblingÚlenÚcontentsr;   Ú
isinstancer   Úlinkage_validator)	r   ÚelÚ_recursive_callÚ
descendantÚidxÚchildÚ
last_childÚlast_idxÚtargets	            r   rJ   zSoupTest.linkage_validator’   su  € àˆ
ð Œ9ÐØÔ&Ð.Ð.ØH×OÒOØ˜Ô+¨Tñô ñ /Ô.Ð.ð Ô&Ð.Ð.ØH×OÒOØ˜Ô+¨Tñô ñ /Ô.Ð.ð ”?Ð*Ð*ØD×KÒKØ˜œ¨ñô ñ +Ô*Ð*ð
 ˆØˆØˆ
Ý�r”{Ñ#Ô# aÑ'ˆØ”[ð >	ñ >	ˆEØˆJð �aŠxˆxØ”9Ð(Øœ?¨eÐ3Ð3Ð3ØK×RÒRØ ¤°ñô ñ 4Ô3Ð3ð !Ô1°RÐ7Ð7Ð7ØO×VÒVØ! 5Ô#9¸2ñô ñ 8Ô7Ð7ð !Ô1Ð9Ð9ØN×UÒUØ! 5Ô#9¸4ñô ñ :Ô9Ð9ùð Ô-°´¸SÀ1¹WÔ1EÐEÐEÐEØJ×QÒQØ˜uÔ5°r´{À3ÈÁ7Ô7Kñô ñ FÔEÐEð ”{ 3¨¡7Ô+Ô8¸EÐAÐAÐAØF×MÒMØœ C¨!¡GÔ,¨b¬k¸#À¹'Ô.BÔ.OÐQVñô ñ BÔAÐAð
 Ð)Ø Ô1°ZÐ?Ð?Ð?Ø[×bÒbØ! 5Ô#9¸:ÀuÄ|ÔG\ñô ñ @Ô?Ð?ð &Ô2°eÐ;Ð;Ð;ØJ×QÒQØ&¨
Ô(?Àñô ñ <Ô;Ð;õ
 ˜%¥Ñ%Ô%ð ¨%¬.ð Ø!×3Ò3°E¸4Ñ@Ô@�
à!Ô.Ð6Ð6ØF×MÒMØ" JÔ$;¸Tñô ñ 7Ô6Ð6ð Ð%Ø'�
�
à"�
ð �hŠˆØÔ)Ð1Ð1ØF×MÒMØ˜uÔ1°4ñô ñ 2Ô1Ð1ð �1‰HˆC‰Cà(Ð4�
�
¸%ˆØˆ=ØˆEàð 	 5Ð#4ØˆFð'Ø�>Ø Ô-Ð5Ð5ØJ×QÒQØ! 5Ô#5°tñô ñ 6Ô5Ð5ð ØÔ(Ð4Ø Ô-°Ô1DÐDÐDÐDØJ×QÒQØ! 5Ô#5°vÔ7Jñô ñ EÔDÐDð Øœ�ð'ð  �4ð ˆLr   c                 ó*   — d„ |D ¦   «         |k    sJ ‚dS )zÝMake sure that the given tags have the correct text.

        This is used in tests that define a bunch of tags, each
        containing a single string, and then select certain strings by
        some mechanism.
        c                 ó   — g | ]	}|j         ‘Œ
S r"   ©Ústring©r'   Útags     r   r-   z+SoupTest.assert_selects.<locals>.<listcomp>  s   € Ð+Ð+Ð+˜s�”
Ð+Ð+Ð+r   Nr"   ©r   ÚtagsÚshould_matchs      r   Úassert_selectszSoupTest.assert_selects  s)   € ð ,Ð+ dÐ+Ñ+Ô+¨|Ò;Ð;Ð;Ð;Ð;Ð;r   c                 ó*   — d„ |D ¦   «         |k    sJ ‚dS )zÜMake sure that the given tags have the correct IDs.

        This is used in tests that define a bunch of tags, each
        containing a single string, and then select certain strings by
        some mechanism.
        c                 ó   — g | ]
}|d          ‘ŒS ©Úidr"   rW   s     r   r-   z/SoupTest.assert_selects_ids.<locals>.<listcomp>  s   € Ð*Ð*Ð*˜c��D”	Ð*Ð*Ð*r   Nr"   rY   s      r   Úassert_selects_idszSoupTest.assert_selects_ids  s)   € ð +Ð* TÐ*Ñ*Ô*¨lÒ:Ð:Ð:Ð:Ð:Ð:r   r   )F)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r    r$   r8   ÚassertSoupEqualsr@   rJ   r\   ra   r"   r   r   r   r   \   s·   € € € € € àðð ñ „Xðð@ð @ð @ð
Pð Pð PðEð Eð Eð Eð. #Ðð	ð 	ð 	ðpð pð pð pðd<ð <ð <ð;ð ;ð ;ð ;ð ;r   r   c                   óè   — e Zd Zej                             ddi  edg¬¦  «        ddgig¦  «        d„ ¦   «         Zej                             d edg¬¦  «        ddgig¦  «        d	„ ¦   «         Zd
„ Z	dS )ÚTreeBuilderSmokeTestÚmulti_valued_attributesNÚclass)ÚbÚ*Únotclassc                 ó^   — d}|                       ||¬¦  «        }|j        d         dk    sJ ‚d S )NzC<html xmlns="http://www.w3.org/1999/xhtml"><a class="a b c"></html>©ri   rj   za b c©r    Úa©r   ri   r   r    s       r   Útest_attribute_not_multi_valuedz4TreeBuilderSmokeTest.test_attribute_not_multi_valued  s=   € ð
 WˆØ�yŠy˜Ð9PˆyÑQÔQˆØŒv�gŒ 'Ò)Ð)Ð)Ð)Ð)Ð)r   )rq   c                 ób   — d}|                       ||¬¦  «        }|j        d         g d¢k    sJ ‚d S )Nz<a class="a b c">ro   rj   )rq   rk   Úcrp   rr   s       r   Útest_attribute_multi_valuedz0TreeBuilderSmokeTest.test_attribute_multi_valued#  sJ   € ð %ˆØ�yŠyØÐ,Cð ñ 
ô 
ˆð Œv�gŒ / / /Ò1Ð1Ð1Ð1Ð1Ð1r   c                 ó8   — d}d}|                       |¦  «        }d S )Nz<![if word]>content<![endif]>z<!DOCTYPE html]ff>)r    ©r   r   r    s      r   Útest_invalid_doctypez)TreeBuilderSmokeTest.test_invalid_doctype-  s!   € Ø0ˆØ%ˆØ�yŠy˜Ñ Ô ˆˆˆr   )
rb   rc   rd   ÚpytestÚmarkÚparametrizeÚdictrs   rv   ry   r"   r   r   rh   rh     sÈ   € € € € € ð „[×ÒØ!Ø	ˆr�4�4˜7˜)Ð$Ñ$Ô$ s¨Z¨LÐ&9Ð:ñô ð*ð *ñ	ô ð*ð
 „[×ÒØ! D D¨G¨9Ð$5Ñ$5Ô$5¸¸g¸YÐ7GÐ#Hñô ð2ð 2ñô ð2ð!ð !ð !ð !ð !r   rh   c                   ó”  — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdDd„Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d „ Z!d!„ Z"d"„ Z#d#„ Z$d$„ Z%d%„ Z&d&„ Z'd'„ Z(d(„ Z)d)„ Z*d*„ Zd+„ Z+d,„ Z,d-„ Z-d.„ Z.d/„ Z/d0„ Z0d1„ Z1d2„ Z2d3„ Z3d4„ Z4d5„ Z5d6„ Z6d7„ Z7d8„ Z8d9„ Z9d:„ Z:d;„ Z;d<„ Z<d=„ Z=d>„ Z>d?„ Z?d@„ Z@dA„ ZAdB„ ZBdCS )EÚHTMLTreeBuilderSmokeTestaC  A basic test of a treebuilder's competence.

    Any HTML treebuilder, present or future, should be able to pass
    these tests. With invalid markup, there's room for interpretation,
    and different parsers can handle it differently. But with the
    markup in these tests, there's not much room for interpretation.
    c                 ó~   — dD ]9}|                       d¦  «        }|                     |¦  «        }|j        dk    sJ ‚Œ:dS )zmVerify that all HTML4 and HTML5 empty element (aka void element) tags
        are handled correctly.
        )ÚareaÚbaseÚbrÚcolÚembedÚhrÚimgÚinputÚkeygenÚlinkÚmenuitemÚmetaÚparamÚsourceÚtrackÚwbrÚspacerÚframeÚ TN)r    Únew_tagÚis_empty_element)r   r+   r    r”   s       r   Útest_empty_element_tagsz0HTMLTreeBuilderSmokeTest.test_empty_element_tags<  sV   € ð
ð 	4ð 	4ˆDð —9’9˜R‘=”=ˆDØ—l’l 4Ñ(Ô(ˆGØÔ+¨tÒ3Ð3Ð3Ð3Ð3ð	4ð 	4r   c                 ó†  — |                       d¦  «        }t          |j        j        t          ¦  «        sJ ‚t          |j        j        t          ¦  «        sJ ‚|                       d¦  «        }t          |j        j        t          ¦  «        sJ ‚|j        j        dk    sJ ‚t          |j        j        t          ¦  «        sJ ‚d S )Nz7<style>Some CSS</style><script>Some Javascript</script>z<style><!--Some CSS--></style>z<!--Some CSS-->)r    rI   ÚstylerV   r   Úscriptr   ©r   r    s     r   Útest_special_string_containersz7HTMLTreeBuilderSmokeTest.test_special_string_containersH  s½   € Ø�yŠyØEñ
ô 
ˆõ ˜$œ*Ô+­ZÑ8Ô8Ð8Ð8Ð8Ý˜$œ+Ô,­fÑ5Ô5Ð5Ð5Ð5à�yŠyØ,ñ
ô 
ˆõ ˜$œ*Ô+­ZÑ8Ô8Ð8Ð8Ð8ð ŒzÔ Ð$5Ò5Ð5Ð5Ð5Ý˜$œ*Ô+­ZÑ8Ô8Ð8Ð8Ð8Ð8Ð8r   c                 óþ   — |                       d¦  «        }t          j        |d¦  «        }t          j        |¦  «        }|j        t
          k    sJ ‚|                     ¦   «         |                     ¦   «         k    sJ ‚d S ©Nz<a><b>foo</a>é   ©r    ÚpickleÚdumpsÚloadsÚ	__class__r   r.   ©r   ÚtreeÚdumpedÚloadeds       r   Ú!test_pickle_and_unpickle_identityz:HTMLTreeBuilderSmokeTest.test_pickle_and_unpickle_identityX  óp   € ð �yŠy˜Ñ)Ô)ˆÝ”˜d AÑ&Ô&ˆÝ”˜fÑ%Ô%ˆØÔ¥=Ò0Ð0Ð0Ð0Ø�}Š}‰Œ $§+¢+¡-¤-Ò/Ð/Ð/Ð/Ð/Ð/r   c                 ó  — |                       |¦  «        \  }}|j        d         }|j        t          k    sJ ‚||k    sJ ‚|                     d¦  «        dt          |¦  «        …         |k    sJ ‚|j        j        d         dk    sJ ‚dS )z8Assert that a given doctype string is handled correctly.r   Úutf8NÚfoo©Ú_document_with_doctyperH   r£   r   ÚencoderG   Úp©r   Údoctype_fragmentÚdoctype_strr    Údoctypes        r   ÚassertDoctypeHandledz-HTMLTreeBuilderSmokeTest.assertDoctypeHandleda  s¡   € à ×7Ò7Ð8HÑIÔIÑˆ�Tð ”- Ô"ˆØÔ ¥GÒ+Ð+Ð+Ð+ØÐ*Ò*Ð*Ð*Ð*Ø�{Š{˜6Ñ"Ô"Ð#4¥C¨Ñ$4Ô$4Ð#4Ô5¸ÒDÐDÐDÐDð ŒvŒ˜qÔ! UÒ*Ð*Ð*Ð*Ð*Ð*r   ÚDOCTYPEc                 óv   — d|›d|›d�}|dz   }|                       |¦  «        }|                     d¦  «        |fS )z5Generate and parse a document with the given doctype.z<!ú ú>z
<p>foo</p>r«   ©r    r¯   )r   r²   Údoctype_stringr´   r   r    s         r   r®   z/HTMLTreeBuilderSmokeTest._document_with_doctypeo  sK   € € à .  Ð0@Ð0@Ð0@ÐAˆØ˜>Ñ)ˆØ�yŠy˜Ñ Ô ˆØ�~Š~˜fÑ%Ô% tÐ+Ð+r   c                 óZ   — |                       d¦  «         |                       d¦  «         dS )z?Make sure normal, everyday HTML doctypes are handled correctly.Úhtmlz4html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"N©rµ   r   s    r   Útest_normal_doctypesz-HTMLTreeBuilderSmokeTest.test_normal_doctypesv  s@   € à×!Ò! &Ñ)Ô)Ð)Ø×!Ò!ØBñ	Dô 	Dð 	Dð 	Dð 	Dr   c                 ó~   — |                       d¦  «        }|j        d         }d|                     ¦   «         k    sJ ‚d S )Nz
<!DOCTYPE>r   r“   )r    rH   Ústrip)r   r    r´   s      r   Útest_empty_doctypez+HTMLTreeBuilderSmokeTest.test_empty_doctype|  s>   € Ø�yŠy˜Ñ&Ô&ˆØ”- Ô"ˆØ�W—]’]‘_”_Ò$Ð$Ð$Ð$Ð$Ð$r   c                 ó   — dD ]Š}|                       d|¦  «        \  }}|j        d         }|j        t          k    sJ ‚|dk    sJ ‚|                     d¦  «        d t          |¦  «        …         dk    sJ ‚|j        j        d         dk    sJ ‚Œ‹d S )N)r´   ÚDocTyper½   r   r«   s   <!DOCTYPE html>r¬   r­   r±   s        r   Útest_mixed_case_doctypez0HTMLTreeBuilderSmokeTest.test_mixed_case_doctype�  s¿   € à 6ð 	/ð 	/ÐØ $× ;Ò ;ØÐ(ñ!ô !ÑˆK˜ð ”m AÔ&ˆGØÔ$­Ò/Ð/Ð/Ð/Ø˜fÒ$Ð$Ð$Ð$Ø—;’;˜vÑ&Ô&Ð'8­¨KÑ(8Ô(8Ð'8Ô9Ð=OÒOÐOÐOÐOð ”6”? 1Ô%¨Ò.Ð.Ð.Ð.Ð.ð	/ð 	/r   c                 ó4   — d}|                       |¦  «         d S )Nznhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"r¾   )r   r´   s     r   Útest_public_doctype_with_urlz5HTMLTreeBuilderSmokeTest.test_public_doctype_with_url“  s$   € ð CˆØ×!Ò! 'Ñ*Ô*Ð*Ð*Ð*r   c                 ó0   — |                       d¦  «         d S )Nz$foo SYSTEM "http://www.example.com/"r¾   r   s    r   Útest_system_doctypez,HTMLTreeBuilderSmokeTest.test_system_doctype—  s   € Ø×!Ò!Ð"HÑIÔIÐIÐIÐIr   c                 ó0   — |                       d¦  «         d S )Nz#xsl:stylesheet SYSTEM "htmlent.dtd"r¾   r   s    r   Útest_namespaced_system_doctypez7HTMLTreeBuilderSmokeTest.test_namespaced_system_doctypeš  ó   € à×!Ò!Ð"GÑHÔHÐHÐHÐHr   c                 ó0   — |                       d¦  «         d S )Nz#xsl:stylesheet PUBLIC "htmlent.dtd"r¾   r   s    r   Útest_namespaced_public_doctypez7HTMLTreeBuilderSmokeTest.test_namespaced_public_doctypež  rÌ   r   c                 ó$  — d}t          j        d¬¦  «        5 }|                      |¦  «        }ddd¦  «         n# 1 swxY w Y   |                     d¦  «                             dd¦  «        |                     dd¦  «        k    sJ ‚|g k    sJ ‚dS )zJA real XHTML document should come out more or less the same as it went in.óÓ   <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Hello.</title></head>
<body>Goodbye.</body>
</html>T©ÚrecordNúutf-8ó   
r   )ÚwarningsÚcatch_warningsr    r¯   Úreplace©r   r   Úwr    s       r   Útest_real_xhtml_documentz1HTMLTreeBuilderSmokeTest.test_real_xhtml_document¢  sÑ   € ðˆõ Ô$¨DÐ1Ñ1Ô1ð 	%°QØ—9’9˜VÑ$Ô$ˆDð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%à�{Š{˜7Ñ#Ô#×+Ò+¨E°3Ñ7Ô7¸6¿>º>È%ÐQTÑ;UÔ;UÒUÐUÐUÐUð �BŠwˆwˆwˆwˆwˆwó   ˜:º>Á>c                 óî   — d}t          j        d¬¦  «        5 }|                      |¦  «        }d d d ¦  «         n# 1 swxY w Y   dt          |                     d¦  «        ¦  «        k    sJ ‚g |k    sJ ‚d S )Ns.   <ns1:foo>content</ns1:foo><ns1:foo/><ns2:foo/>TrÑ   rž   zns1:foo)rÕ   rÖ   r    rG   Úfind_allrØ   s       r   Útest_namespaced_htmlz-HTMLTreeBuilderSmokeTest.test_namespaced_html³  s»   € ð GˆÝÔ$¨DÐ1Ñ1Ô1ð 	%°QØ—9’9˜VÑ$Ô$ˆDð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð •C˜Ÿš iÑ0Ô0Ñ1Ô1Ò1Ð1Ð1Ð1ð �QŠwˆwˆwˆwˆwˆwrÛ   c                 ó<  — d}t          j        d¬¦  «        5 }|                      |¦  «        }|j        j        dk    sJ ‚	 d d d ¦  «         n# 1 swxY w Y   |\  }t          |j        t          ¦  «        sJ ‚t          |j        ¦  «        t          j	        k    sJ ‚d S )Ns7   <?xml version="1.0" encoding="utf-8"?><tag>string</tag>TrÑ   rV   )
rÕ   rÖ   r    rX   rV   rI   Úmessager   ÚstrÚMESSAGE)r   r   rÙ   r    Úwarnings        r   Útest_detect_xml_parsed_as_htmlz7HTMLTreeBuilderSmokeTest.test_detect_xml_parsed_as_htmlÀ  sà   € ð PˆÝÔ$¨DÐ1Ñ1Ô1ð 	/°QØ—9’9˜VÑ$Ô$ˆDØ”8”? hÒ.Ð.Ð.Ð.Ð.ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð ‰	ˆÝ˜'œ/Õ+AÑBÔBÐBÐBÐBÝ�7”?Ñ#Ô#Õ'=Ô'EÒEÐEÐEÐEÐEÐEs   ˜(AÁAÁAc                 óÌ   — d}|                       |¦  «        }||                     ¦   «         k    sJ ‚d}|                       |¦  «        }||                     d¦  «        k    sJ ‚d S )Nz<?PITarget PIContent?>s   <?PITarget PIContent?>r«   )r    r.   r¯   rx   s      r   Útest_processing_instructionz4HTMLTreeBuilderSmokeTest.test_processing_instructionÐ  sl   € ð
 .ˆØ�yŠy˜Ñ Ô ˆØ˜Ÿš™œÒ&Ð&Ð&Ð&à.ˆØ�yŠy˜Ñ Ô ˆØ˜Ÿš VÑ,Ô,Ò,Ð,Ð,Ð,Ð,Ð,r   c                 ó8   — t          j        | j        ¦  «         dS )z°Make sure you can copy the tree builder.

        This is important because the builder is part of a
        BeautifulSoup object, and we want to be able to copy that.
        N)ÚcopyÚdeepcopyr   r   s    r   Útest_deepcopyz&HTMLTreeBuilderSmokeTest.test_deepcopyÝ  s   € õ 	Œ�dÔ*Ñ+Ô+Ð+Ð+Ð+r   c                 ó€   — |                       d¦  «        }|j        j        rJ ‚t          |j        ¦  «        dk    sJ ‚dS )z©A <p> tag is never designated as an empty-element tag.

        Even if the markup shows it as an empty-element tag, it
        shouldn't be presented that way.
        ú<p/>ú<p></p>N)r    r°   r•   rá   rš   s     r   Ú!test_p_tag_is_never_empty_elementz:HTMLTreeBuilderSmokeTest.test_p_tag_is_never_empty_elementå  sE   € ð �yŠy˜Ñ Ô ˆØ”6Ô*Ð*Ð*Ð*Ý�4”6‰{Œ{˜iÒ'Ð'Ð'Ð'Ð'Ð'r   c                 óŠ   — |                       dd¦  «         |                       dd¦  «         |                       dd¦  «         dS )zŠA tag that's not closed by the end of the document should be closed.

        This applies to all tags except empty-element tags.
        ú<p>rí   z<b>z<b></b>z<br>ú<br/>N©r8   r   s    r   Útest_unclosed_tags_get_closedz6HTMLTreeBuilderSmokeTest.test_unclosed_tags_get_closedï  sL   € ð
 	×Ò˜ 	Ñ*Ô*Ð*Ø×Ò˜ 	Ñ*Ô*Ð*à×Ò˜ Ñ)Ô)Ð)Ð)Ð)r   c                 ó€   — |                       d¦  «        }|j        j        sJ ‚t          |j        ¦  «        dk    sJ ‚dS )zÂA <br> tag is designated as an empty-element tag.

        Some parsers treat <br></br> as one <br/> tag, some parsers as
        two tags, but it should always be an empty-element tag.
        z	<br></br>rñ   N)r    rƒ   r•   rá   rš   s     r   Ú#test_br_is_always_empty_element_tagz<HTMLTreeBuilderSmokeTest.test_br_is_always_empty_element_tagù  sE   € ð �yŠy˜Ñ%Ô%ˆØŒwÔ'Ð'Ð'Ð'Ý�4”7‰|Œ|˜wÒ&Ð&Ð&Ð&Ð&Ð&r   c                 ó0   — |                       d¦  «         d S )Nz<em><em></em></em>rò   r   s    r   Útest_nested_formatting_elementsz8HTMLTreeBuilderSmokeTest.test_nested_formatting_elements  s   € Ø×ÒÐ-Ñ.Ô.Ð.Ð.Ð.r   c                 óv   — d}|                       |¦  «        }d|                     d¦  «        d         k    sJ ‚d S )Nz¯<!DOCTYPE html>
<html>
<head>
<title>Ordinary HEAD element test</title>
</head>
<script type="text/javascript">
alert("Help!");
</script>
<body>
Hello, world!
</body>
</html>
ztext/javascriptr™   Útype)r    Úfind)r   r½   r    s      r   Útest_double_headz)HTMLTreeBuilderSmokeTest.test_double_head  sB   € ðˆð �yŠy˜‰ŒˆØ  D§I¢I¨hÑ$7Ô$7¸Ô$?Ò?Ð?Ð?Ð?Ð?Ð?r   c                 ó:  — d}|                       |¦  «         |                      |¦  «        }|                     d¬¦  «        }|j        t          k    sJ ‚|                     d¬¦  «        }||j        k    sJ ‚|                     d¬¦  «        }||j        k    sJ ‚d S )Nz<p>foo<!--foobar-->baz</p>ÚfoobarrU   r¬   Úbaz)r8   r    rú   r£   r   r;   r<   )r   r   r    Úcommentr¬   rþ   s         r   Útest_commentz%HTMLTreeBuilderSmokeTest.test_comment  s©   € à-ˆØ×Ò˜Ñ Ô Ð à�yŠy˜Ñ Ô ˆØ—)’) 8�)Ñ,Ô,ˆØÔ ¥GÒ+Ð+Ð+Ð+ð �iŠi˜uˆiÑ%Ô%ˆØ˜#Ô*Ò*Ð*Ð*Ð*Ø�iŠi˜uˆiÑ%Ô%ˆØ˜#Ô.Ò.Ð.Ð.Ð.Ð.Ð.r   c                 óš  — d}d}|                       |¦  «         |                       |¦  «         |                      |¦  «        }|j                             ¦   «         |k    sJ ‚|                      |¦  «        }|j                             ¦   «         |k    sJ ‚|                      d¦  «        }|j                             ¦   «         dk    sJ ‚dS )zWhitespace must be preserved in <pre> and <textarea> tags,
        even if that would mean not prettifying the markup.
        z<pre>a   z</pre>
z <textarea> woo
woo  </textarea>
z<textarea></textarea>z<textarea></textarea>
N)r8   r    ÚpreÚprettifyÚtextarea)r   Ú
pre_markupÚtextarea_markupr    s       r   Ú-test_preserved_whitespace_in_pre_and_textareazFHTMLTreeBuilderSmokeTest.test_preserved_whitespace_in_pre_and_textarea&  sÎ   € ð *ˆ
Ø>ˆØ×Ò˜Ñ$Ô$Ð$Ø×Ò˜Ñ)Ô)Ð)à�yŠy˜Ñ$Ô$ˆØŒx× Ò Ñ"Ô" jÒ0Ð0Ð0Ð0à�yŠy˜Ñ)Ô)ˆØŒ}×%Ò%Ñ'Ô'¨?Ò:Ð:Ð:Ð:à�yŠyÐ0Ñ1Ô1ˆØŒ}×%Ò%Ñ'Ô'Ð+DÒDÐDÐDÐDÐDÐDr   c                 ó�   — d}|                       |¦  «         d}|                       |¦  «         d}|                       |¦  «         dS )z+Inline elements can be nested indefinitely.z<b>Inside a B tag</b>z!<p>A <i>nested <b>tag</b></i></p>z/<p>A <a>doubly <i>nested <b>tag</b></i></a></p>Nrò   )r   Úb_tagÚnested_b_tagÚdouble_nested_b_tags       r   Útest_nested_inline_elementsz4HTMLTreeBuilderSmokeTest.test_nested_inline_elements8  sT   € à'ˆØ×Ò˜ÑÔÐà:ˆØ×Ò˜Ñ&Ô&Ð&àOÐØ×Ò˜Ñ&Ô&Ð&Ð&Ð&r   c                 ó�   — |                       d¦  «        }|j        }|j        j        j        dk    sJ ‚|j        j        dk    sJ ‚dS )zBlock elements can be nested.z*<blockquote><p><b>Foo</b></p></blockquote>ÚFooN)r    Ú
blockquoter°   rk   rV   )r   r    r  s      r   Ú test_nested_block_level_elementsz9HTMLTreeBuilderSmokeTest.test_nested_block_level_elementsC  sO   € à�yŠyÐEÑFÔFˆØ”_ˆ
ØŒ|Œ~Ô$¨Ò-Ð-Ð-Ð-ØŒ|Ô" eÒ+Ð+Ð+Ð+Ð+Ð+r   c                 ó`   — d}|                       |d¦  «         |                       d¦  «         dS )z$One table can go inside another one.z[<table id="1"><tr><td>Here's another table:<table id="2"><tr><td>foo</td></tr></table></td>zh<table id="1"><tr><td>Here's another table:<table id="2"><tr><td>foo</td></tr></table></td></tr></table>z{<table><thead><tr><td>Foo</td></tr></thead><tbody><tr><td>Bar</td></tr></tbody><tfoot><tr><td>Baz</td></tr></tfoot></table>Nrò   )r   r   s     r   Útest_correctly_nested_tablesz5HTMLTreeBuilderSmokeTest.test_correctly_nested_tablesJ  sT   € ð"ˆð 	×ÒØð!ñ	"ô 	"ð 	"ð 	×Òð;ñ	<ô 	<ð 	<ð 	<ð 	<r   c                 ó¢   — d}|                       |¦  «        }ddg|j        d         k    sJ ‚|j        |                     dd¬¦  «        k    sJ ‚d S )Nz<div class=" foo bar	 "></a>r¬   Úbarrj   Údivzfoo bar)Úclass_)r    r  rú   rx   s      r   Ú*test_multivalued_attribute_with_whitespacezCHTMLTreeBuilderSmokeTest.test_multivalued_attribute_with_whitespace^  sa   € ð 0ˆØ�yŠy˜Ñ Ô ˆØ�uˆ~ ¤¨'Ô!2Ò2Ð2Ð2Ð2ð Œx˜4Ÿ9š9 U°9˜9Ñ=Ô=Ò=Ð=Ð=Ð=Ð=Ð=r   c                 óf   — d}|                       |¦  «        }dg|j        j        d         k    sJ ‚d S )Nz1<table><div><div class="css"></div></div></table>Úcssrj   )r    r  rx   s      r   Ú(test_deeply_nested_multivalued_attributezAHTMLTreeBuilderSmokeTest.test_deeply_nested_multivalued_attributej  s=   € ð EˆØ�yŠy˜Ñ Ô ˆØˆw˜$œ(œ, wÔ/Ò/Ð/Ð/Ð/Ð/Ð/r   c                 ó^   — d}|                       |¦  «        }ddg|j        d         k    sJ ‚d S )Nz<html class="a b"></html>rq   rk   rj   )r    r½   rx   s      r   Ú"test_multivalued_attribute_on_htmlz;HTMLTreeBuilderSmokeTest.test_multivalued_attribute_on_htmlr  s<   € ð -ˆØ�yŠy˜Ñ Ô ˆØ�Sˆz˜TœY wÔ/Ò/Ð/Ð/Ð/Ð/Ð/r   c                 ó2   — |                       dd¦  «         d S )Nz<a b="<a>"></a>z<a b="&lt;a&gt;"></a>rò   r   s    r   Ú3test_angle_brackets_in_attribute_values_are_escapedzLHTMLTreeBuilderSmokeTest.test_angle_brackets_in_attribute_values_are_escapedz  s    € Ø×ÒÐ*Ð,CÑDÔDÐDÐDÐDr   c                 ó2   — |                       dd¦  «         d S )Nz$<p>&bull; AT&T is in the s&p 500</p>u)   <p>â€¢ AT&amp;T is in the s&amp;p 500</p>rò   r   s    r   Ú3test_strings_resembling_character_entity_referenceszLHTMLTreeBuilderSmokeTest.test_strings_resembling_character_entity_references}  s,   € ð 	×ÒØ2Ø:ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó2   — |                       dd¦  «         d S )Nz<p>Bob&apos;s Bar</p>z<p>Bob's Bar</p>rò   r   s    r   Útest_apos_entityz)HTMLTreeBuilderSmokeTest.test_apos_entity…  s*   € Ø×ÒØ#Øñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óX   — d}|                       |¦  «        }d|j        j        k    sJ ‚d S )Nz%<p>&#147;Hello&#148; &#45;&#9731;</p>u   â€œHelloâ€� -â˜ƒ©r    r°   rV   rx   s      r   Ú*test_entities_in_foreign_document_encodingzCHTMLTreeBuilderSmokeTest.test_entities_in_foreign_document_encoding‹  s5   € ð 9ˆØ�yŠy˜Ñ Ô ˆØ! T¤V¤]Ò2Ð2Ð2Ð2Ð2Ð2r   c                 óº   — d}|                       d|¦  «         |                       d|¦  «         |                       d|¦  «         |                       d|¦  «         d S )Nu   <p id="piÃ±ata"></p>z<p id="pi&#241;ata"></p>z<p id="pi&#xf1;ata"></p>z<p id="pi&#Xf1;ata"></p>z<p id="pi&ntilde;ata"></p>rò   ©r   Úexpects     r   Ú0test_entities_in_attributes_converted_to_unicodezIHTMLTreeBuilderSmokeTest.test_entities_in_attributes_converted_to_unicode—  si   € ØHˆØ×ÒÐ3°VÑ<Ô<Ð<Ø×ÒÐ3°VÑ<Ô<Ð<Ø×ÒÐ3°VÑ<Ô<Ð<Ø×ÒÐ5°vÑ>Ô>Ð>Ð>Ð>r   c                 óº   — d}|                       d|¦  «         |                       d|¦  «         |                       d|¦  «         |                       d|¦  «         d S )Nu   <p>piÃ±ata</p>z<p>pi&#241;ata</p>z<p>pi&#xf1;ata</p>z<p>pi&#Xf1;ata</p>z<p>pi&ntilde;ata</p>rò   r'  s     r   Ú*test_entities_in_text_converted_to_unicodezCHTMLTreeBuilderSmokeTest.test_entities_in_text_converted_to_unicodež  si   € ØBˆØ×ÒÐ-¨vÑ6Ô6Ð6Ø×ÒÐ-¨vÑ6Ô6Ð6Ø×ÒÐ-¨vÑ6Ô6Ð6Ø×ÒÐ/°Ñ8Ô8Ð8Ð8Ð8r   c                 ó2   — |                       dd¦  «         d S )Nz#<p>I said &quot;good day!&quot;</p>z<p>I said "good day!"</p>rò   r   s    r   Ú,test_quot_entity_converted_to_quotation_markzEHTMLTreeBuilderSmokeTest.test_quot_entity_converted_to_quotation_mark¥  s*   € Ø×ÒÐ>Ø9ñ	;ô 	;ð 	;ð 	;ð 	;r   c                 óŽ   — d}|                       d|¦  «         |                       d|¦  «         |                       d|¦  «         d S )Nu   ï¿½z&#10000000000000;z&#x10000000000000;z&#1000000000;rò   r'  s     r   Útest_out_of_range_entityz1HTMLTreeBuilderSmokeTest.test_out_of_range_entity©  sQ   € Ø,ˆØ×ÒÐ,¨fÑ5Ô5Ð5Ø×ÒÐ-¨vÑ6Ô6Ð6Ø×Ò˜¨&Ñ1Ô1Ð1Ð1Ð1r   c                 ó¶   — |                       d¦  «        }d|j        j        j        j        k    sJ ‚d|j        j        k    sJ ‚|                      |¦  «         dS )zDMostly to prevent a recurrence of a bug in the html5lib treebuilder.z!<html><h2>
foo</h2><p></p></html>r°   N)r    Úh2rV   r;   r+   r°   r@   rš   s     r   Útest_multipart_stringsz/HTMLTreeBuilderSmokeTest.test_multipart_strings¯  s^   € à�yŠyÐ=Ñ>Ô>ˆØ�d”g”nÔ1Ô6Ò6Ð6Ð6Ð6Ø�d”f”kÒ!Ð!Ð!Ð!Ø× Ò  Ñ&Ô&Ð&Ð&Ð&r   c                 ó^   — |                       dd¦  «         |                       dd¦  «         dS )zqVerify consistent handling of empty-element tags,
        no matter how they come in through the markup.
        z<br/><br/><br/>z<br /><br /><br />Nrò   r   s    r   r–   z0HTMLTreeBuilderSmokeTest.test_empty_element_tags¶  s:   € ð 	×ÒÐ*Ð,=Ñ>Ô>Ð>Ø×ÒÐ-Ð/@ÑAÔAÐAÐAÐAr   c                 óz   — d}|                       |¦  «        }|j        j        €J ‚|                      |¦  «         dS )ú8Prevent recurrence of a bug in the html5lib treebuilder.z?<html><head></head>
  <link></link>
  <body>foo</body>
</html>
N)r    r½   Úbodyr@   ©r   Úcontentr    s      r   Ú#test_head_tag_between_head_and_bodyz<HTMLTreeBuilderSmokeTest.test_head_tag_between_head_and_body½  sF   € ðˆð
 �yŠy˜Ñ!Ô!ˆØŒyŒ~Ð)Ð)Ð)Ø× Ò  Ñ&Ô&Ð&Ð&Ð&r   c                 óh   — d}|                       |¦  «        }|                      |j        ¦  «         dS )r5  z�<!DOCTYPE html>
<html>
 <body>
   <article id="a" >
   <div><a href="1"></div>
   <footer>
     <a href="2"></a>
   </footer>
  </article>
  </body>
</html>
N)r    r@   Úarticler7  s      r   Útest_multiple_copies_of_a_tagz6HTMLTreeBuilderSmokeTest.test_multiple_copies_of_a_tagÈ  s8   € ðˆð �yŠy˜Ñ!Ô!ˆØ× Ò  ¤Ñ.Ô.Ð.Ð.Ð.r   c                 óè   — d}|                       |¦  «        }||                     ¦   «         k    sJ ‚|j        }d|j        d         k    sJ ‚d|j        d         k    sJ ‚d|j        d         k    sJ ‚dS )	z†Parsers don't need to *understand* namespaces, but at the
        very least they should not choke on namespaces or lose
        data.sÙ   <html xmlns="http://www.w3.org/1999/xhtml" xmlns:mathml="http://www.w3.org/1998/Math/MathML" xmlns:svg="http://www.w3.org/2000/svg"><head></head><body><mathml:msqrt>4</mathml:msqrt><b svg:fill="red"></b></body></html>úhttp://www.w3.org/1999/xhtmlÚxmlnsú"http://www.w3.org/1998/Math/MathMLzxmlns:mathmlúhttp://www.w3.org/2000/svgz	xmlns:svgN)r    r¯   r½   )r   r   r    r½   s       r   Útest_basic_namespacesz.HTMLTreeBuilderSmokeTest.test_basic_namespacesÙ  s‰   € ð
 nˆØ�yŠy˜Ñ Ô ˆØ˜Ÿš™œÒ&Ð&Ð&Ð&ØŒyˆØ-°´¸7Ô1CÒCÐCÐCÐCØ3°t´yÀÔ7PÒPÐPÐPÐPØ+¨t¬y¸Ô/EÒEÐEÐEÐEÐEÐEr   c                 ó^   — d}|                       |¦  «        }ddg|j        d         k    sJ ‚d S )Ns   <a class="foo bar">r¬   r  rj   rp   rx   s      r   Ú-test_multivalued_attribute_value_becomes_listzFHTMLTreeBuilderSmokeTest.test_multivalued_attribute_value_becomes_listæ  s9   € Ø'ˆØ�yŠy˜Ñ Ô ˆØ�uˆ~ ¤¨¤Ò0Ð0Ð0Ð0Ð0Ð0r   c                 óX   — d}|                       |¦  «        }d|j        j        k    sJ ‚d S )NuD   <html><head><meta encoding="euc-jp"></head><body>SacrÃ© bleu!</body>õ   SacrÃ© bleu!)r    r6  rV   rx   s      r   Útest_can_parse_unicode_documentz8HTMLTreeBuilderSmokeTest.test_can_parse_unicode_documentò  s7   € ð yˆØ�yŠy˜Ñ Ô ˆØ 4¤9Ô#3Ò3Ð3Ð3Ð3Ð3Ð3r   c                 ó†   — t          d¦  «        }|                      d|¬¦  «        }|                     ¦   «         dk    sJ ‚dS )z2Parsers should be able to work with SoupStrainers.rk   z&A <b>bold</b> <meta/> <i>statement</i>)Ú
parse_onlyz<b>bold</b>N)r
   r    r.   )r   Ústrainerr    s      r   Útest_soupstrainerz*HTMLTreeBuilderSmokeTest.test_soupstrainerú  sL   € å Ñ$Ô$ˆØ�yŠyÐAØ$,ð ñ .ô .ˆà�{Š{‰}Œ} Ò-Ð-Ð-Ð-Ð-Ð-r   c                 ó2   — |                       dd¦  «         d S )Nz<foo attr='bar'></foo>z<foo attr="bar"></foo>rò   r   s    r   Ú7test_single_quote_attribute_values_become_double_quoteszPHTMLTreeBuilderSmokeTest.test_single_quote_attribute_values_become_double_quotes  s*   € Ø×ÒÐ1Ø6ñ	8ô 	8ð 	8ð 	8ð 	8r   c                 ó4   — d}|                       |¦  «         d S )Nú'<foo attr='bar "brawls" happen'>a</foo>rò   )r   Útexts     r   Ú7test_attribute_values_with_nested_quotes_are_left_alonezPHTMLTreeBuilderSmokeTest.test_attribute_values_with_nested_quotes_are_left_alone  s!   € Ø<ˆØ×Ò˜ÑÔÐÐÐr   c                 ó¢   — d}|                       |¦  «        }d|j        d<   |                      |j                             ¦   «         d¦  «         d S )NrO  zBrawls happen at "Bob's Bar"Úattrz:<foo attr="Brawls happen at &quot;Bob's Bar&quot;">a</foo>)r    r¬   r8   r.   )r   rP  r    s      r   Ú:test_attribute_values_with_double_nested_quotes_get_quotedzSHTMLTreeBuilderSmokeTest.test_attribute_values_with_double_nested_quotes_get_quoted	  s[   € Ø<ˆØ�yŠy˜‰ŒˆØ:ˆŒ�ÑØ×ÒØŒH�OŠOÑÔØMñ	Oô 	Oð 	Oð 	Oð 	Or   c                 ó^   — |                       dd¦  «         |                       dd¦  «         d S )Nz+<this is="really messed up & stuff"></this>z/<this is="really messed up &amp; stuff"></this>z.<a href="http://example.org?a=1&b=2;3">foo</a>z2<a href="http://example.org?a=1&amp;b=2;3">foo</a>rò   r   s    r   Ú.test_ampersand_in_attribute_value_gets_escapedzGHTMLTreeBuilderSmokeTest.test_ampersand_in_attribute_value_gets_escaped  sR   € Ø×ÒÐFØOñ	Qô 	Qð 	Qð 	×ÒØ<Ø@ñ	Bô 	Bð 	Bð 	Bð 	Br   c                 ó0   — |                       d¦  «         d S )Nz/<a href="http://example.org?a=1&amp;b=2;3"></a>rò   r   s    r   Ú7test_escaped_ampersand_in_attribute_value_is_left_alonezPHTMLTreeBuilderSmokeTest.test_escaped_ampersand_in_attribute_value_is_left_alone  s   € Ø×ÒÐJÑKÔKÐKÐKÐKr   c                 ó:   — d}d}|                       ||¦  «         d S )Nú-<p>&lt;&lt;sacr&eacute;&#32;bleu!&gt;&gt;</p>õ#   <p>&lt;&lt;sacrÃ© bleu!&gt;&gt;</p>rò   )r   rP  Úexpecteds      r   Ú1test_entities_in_strings_converted_during_parsingzJHTMLTreeBuilderSmokeTest.test_entities_in_strings_converted_during_parsing  s*   € ð ?ˆØYˆØ×Ò˜˜xÑ(Ô(Ð(Ð(Ð(r   c                 óX   — d}|                       |¦  «        }|j        j        dk    sJ ‚d S )Ns   <p>‘Foo’</p>u	   â€˜Fooâ€™r$  )r   Úquoter    s      r   Ú)test_smart_quotes_converted_on_the_way_inzBHTMLTreeBuilderSmokeTest.test_smart_quotes_converted_on_the_way_in#  s6   € ð &ˆØ�yŠy˜ÑÔˆØŒvŒ}Ð bÒbÐbÐbÐbÐbÐbr   c                 óT   — |                       d¦  «        }|j        j        dk    sJ ‚d S )Nz<a>&nbsp;&nbsp;</a>u   Â Â )r    rq   rV   rš   s     r   Ú0test_non_breaking_spaces_converted_on_the_way_inzIHTMLTreeBuilderSmokeTest.test_non_breaking_spaces_converted_on_the_way_in*  s0   € Ø�yŠyÐ.Ñ/Ô/ˆØŒvŒ}Ð 8Ò8Ð8Ð8Ð8Ð8Ð8r   c                 óž   — d}d                      d¦  «        }|                      |¦  «        }|j                              d¦  «        |k    sJ ‚d S )NrZ  r[  rÓ   )r¯   r    r°   )r   rP  r\  r    s       r   Ú&test_entities_converted_on_the_way_outz?HTMLTreeBuilderSmokeTest.test_entities_converted_on_the_way_out.  sO   € Ø>ˆØY×`Ò`ÐahÑiÔiˆØ�yŠy˜‰ŒˆØŒv�}Š}˜WÑ%Ô%¨Ò1Ð1Ð1Ð1Ð1Ð1r   c                 óî   — d}|                      d¦  «        }|                      |¦  «        }|                      d¦  «        }|                     dd¦  «        }|                      d¦  «        }||k    sJ ‚d S )Nuƒ   <html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-type"/></head><body><p>SacrÃ© bleu!</p></body></html>z
iso-8859-1rÓ   z
ISO-8859-1)r¯   r    r×   )r   Úunicode_htmlÚiso_latin_htmlr    Úresultr\  s         r   Útest_real_iso_8859_documentz4HTMLTreeBuilderSmokeTest.test_real_iso_8859_document4  sˆ   € ð
 ~ˆð &×,Ò,¨\Ñ:Ô:ˆð �yŠy˜Ñ(Ô(ˆð —’˜WÑ%Ô%ˆð
  ×'Ò'¨°gÑ>Ô>ˆð —?’? 7Ñ+Ô+ˆð ˜Ò!Ð!Ð!Ð!Ð!Ð!r   c                 ó  — d}|                      d¦  «        }|                      |¦  «        }|                     d¦  «        |                     d¦  «        k    sJ ‚|                     d¦  «        |                     d¦  «        k    sJ ‚d S )Nsk   <html><head></head><body><pre>‚±‚ê‚ÍShift-JIS‚ÅƒR�[ƒfƒBƒ“ƒO‚³‚ê‚½“ú–{Œê‚Ìƒtƒ@ƒCƒ‹‚Å‚·�B</pre></body></html>z	shift-jisrÓ   Úeuc_jp)r.   r    r¯   )r   Úshift_jis_htmlrf  r    s       r   Útest_real_shift_jis_documentz5HTMLTreeBuilderSmokeTest.test_real_shift_jis_documentP  s�   € ð$ð 	ð &×,Ò,¨[Ñ9Ô9ˆØ�yŠy˜Ñ&Ô&ˆð �{Š{˜7Ñ#Ô# |×':Ò':¸7Ñ'CÔ'CÒCÐCÐCÐCØ�{Š{˜8Ñ$Ô$¨×(;Ò(;¸HÑ(EÔ(EÒEÐEÐEÐEÐEÐEr   c                 óÐ   — d}|                       |d¬¦  «        }|j        dv sJ ‚|                     d¦  «        |                     d¦  «                             d¦  «        k    sJ ‚d S )Ns›   <html><head><title>Hebrew (ISO 8859-8) in Visual Directionality</title></head><body><h1>Hebrew (ISO 8859-8) in Visual Directionality</h1>íåìù</body></html>ú	iso8859-8)Úfrom_encoding)ro  z
iso-8859-8rÓ   )r    Úoriginal_encodingr¯   r.   )r   Úhebrew_documentr    s      r   Útest_real_hebrew_documentz2HTMLTreeBuilderSmokeTest.test_real_hebrew_documenta  sŠ   € ð EˆØ�yŠyØ¨;ð ñ 8ô 8ˆð Ô%Ð)DÐDÐDÐDÐDØ�{Š{˜7Ñ#Ô#Ø×"Ò" ;Ñ/Ô/×6Ò6°wÑ?Ô?ò
ð 
ð 
ð 
ð 
ð 
r   c                 óò   — d}d|z  }|                       |¦  «        }|                     dddi¦  «        }|d         }d|k    sJ ‚t          |t          ¦  «        sJ ‚d|                     d	¦  «        k    sJ ‚d S )
NzE<meta content="text/html; charset=x-sjis" http-equiv="Content-type"/>új<html><head>
%s
<meta http-equiv="Content-language" content="ja"/></head><body>Shift-JIS markup goes here.rŒ   z
http-equivzContent-typer8  ztext/html; charset=x-sjisztext/html; charset=utf8r«   )r    rú   rI   r   r¯   )r   Úmeta_tagrl  r    Úparsed_metar8  s         r   Ú'test_meta_tag_reflects_current_encodingz@HTMLTreeBuilderSmokeTest.test_meta_tag_reflects_current_encodingn  sŸ   € ð2ˆð
7à:BñCˆð �yŠy˜Ñ(Ô(ˆð —i’i ¨°~Ð(FÑGÔGˆØ˜iÔ(ˆØ*¨gÒ5Ð5Ð5Ð5õ ˜'Õ#<Ñ=Ô=Ð=Ð=Ð=ð )¨G¯NªN¸6Ñ,BÔ,BÒBÐBÐBÐBÐBÐBr   c                 óð   — d}d|z  }|                       |¦  «        }|                     dd¬¦  «        }|d         }d|k    sJ ‚t          |t          ¦  «        sJ ‚d|                     d¦  «        k    sJ ‚d S )	Nz'<meta id="encoding" charset="x-sjis" />ru  rŒ   Úencodingr_   Úcharsetzx-sjisr«   )r    rú   rI   r   r¯   )r   rv  rl  r    rw  r{  s         r   Ú3test_html5_style_meta_tag_reflects_current_encodingzLHTMLTreeBuilderSmokeTest.test_html5_style_meta_tag_reflects_current_encodingŠ  sœ   € ð >ˆð7à:BñCˆð �yŠy˜Ñ(Ô(ˆð —i’i ¨:�iÑ6Ô6ˆØ˜iÔ(ˆØ˜7Ò"Ð"Ð"Ð"õ ˜'Õ#<Ñ=Ô=Ð=Ð=Ð=ð ˜Ÿš¨Ñ/Ô/Ò/Ð/Ð/Ð/Ð/Ð/r   c                 óÀ   — dD ]Z}|                       |¦  «        }t          D ];}|dv rŒ|                     |¦  «        }d|v sJ ‚|                     d¦  «        |vsJ ‚Œ<Œ[d S )N)sB   <meta charset="utf8"></head><meta id="encoding" charset="utf-8" />©ÚidnaÚmbcsÚoemÚ	undefinedÚstring_escapezstring-escapes   meta charset=""Úascii©r    r	   r¯   ©r   r   r    rz  Úencodeds        r   Ú2test_python_specific_encodings_not_used_in_charsetzKHTMLTreeBuilderSmokeTest.test_python_specific_encodings_not_used_in_charset¢  s�   € ð

ð 	?ð 	?ˆFð —9’9˜VÑ$Ô$ˆDÝ5ð ?ð ?�Øð  ð ð ð ØŸ+š+ hÑ/Ô/�Ø)¨WÐ4Ð4Ð4Ð4Ø—’ wÑ/Ô/°wÐ>Ð>Ð>Ð>Ð>ð?ð	?ð 	?r   c                 ó‚   — |                       d¦  «        }d|j        d<   d|j                             ¦   «         k    sJ ‚d S )Nz<a>text</a>r  r¬   z<a foo="bar">text</a>)r    rq   r.   )r   Údatas     r   Ú5test_tag_with_no_attributes_can_have_attributes_addedzNHTMLTreeBuilderSmokeTest.test_tag_with_no_attributes_can_have_attributes_added¹  s?   € Ø�yŠy˜Ñ'Ô'ˆØˆŒˆu‰Ø&¨$¬&¯-ª-©/¬/Ò9Ð9Ð9Ð9Ð9Ð9r   c                 ón   — |                       d¦  «        }d|j                             ¦   «         k    sJ ‚d S )Nz0<body><div><p>text1</p></span>text2</div></body>z)<body><div><p>text1</p>text2</div></body>)r    r6  r.   rš   s     r   Ú$test_closing_tag_with_no_opening_tagz=HTMLTreeBuilderSmokeTest.test_closing_tag_with_no_opening_tag¾  s;   € ð
 �yŠyÐKÑLÔLˆØ:¸d¼i×>NÒ>NÑ>PÔ>PÒPÐPÐPÐPÐPÐPr   c                 ód   — |                       t          ¦  «        }|                      |¦  «         dS ©z3Test the worst case (currently) for linking issues.N©r    ÚBAD_DOCUMENTrJ   rš   s     r   Útest_worst_casez(HTMLTreeBuilderSmokeTest.test_worst_caseÆ  ó/   € ð �yŠy�Ñ&Ô&ˆØ×Ò˜tÑ$Ô$Ð$Ð$Ð$r   N)r¶   )Crb   rc   rd   Ú__doc__r–   r›   r¨   rµ   r®   r¿   rÂ   rÅ   rÇ   rÉ   rË   rÎ   rÚ   rÞ   rä   ræ   rê   rî   ró   rõ   r÷   rû   r   r  r  r  r  r  r  r  r  r   r"  r%  r)  r+  r-  r/  r2  r9  r<  rB  rD  rG  rK  rM  rQ  rT  rV  rX  r]  r`  rb  rd  ri  rm  rs  rx  r|  rˆ  r‹  r�  r’  r"   r   r   r   r   2  s  € € € € € ðð ð
4ð 
4ð 
4ð9ð 9ð 9ð 0ð 0ð 0ð+ð +ð +ð,ð ,ð ,ð ,ðDð Dð Dð%ð %ð %ð
/ð /ð /ð$+ð +ð +ðJð Jð JðIð Ið IðIð Ið Iðð ð ð"ð ð ð	Fð 	Fð 	Fð -ð -ð -ð,ð ,ð ,ð(ð (ð (ð*ð *ð *ð'ð 'ð 'ð/ð /ð /ð@ð @ð @ð"/ð /ð /ðEð Eð Eð$	'ð 	'ð 	'ð,ð ,ð ,ð<ð <ð <ð(
>ð 
>ð 
>ð0ð 0ð 0ð0ð 0ð 0ðEð Eð Eð
ð 
ð 
ð
ð 
ð 
ð
3ð 
3ð 
3ð?ð ?ð ?ð9ð 9ð 9ð;ð ;ð ;ð2ð 2ð 2ð'ð 'ð 'ðBð Bð Bð	'ð 	'ð 	'ð/ð /ð /ð"Fð Fð Fð1ð 1ð 1ð4ð 4ð 4ð.ð .ð .ð8ð 8ð 8ðð ð ðOð Oð OðBð Bð BðLð Lð Lð)ð )ð )ðcð cð cð9ð 9ð 9ð2ð 2ð 2ð"ð "ð "ð8Fð Fð Fð"
ð 
ð 
ðCð Cð Cð80ð 0ð 0ð0?ð ?ð ?ð.:ð :ð :ð
Qð Qð Qð%ð %ð %ð %ð %r   r   c                   óŒ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚXMLTreeBuilderSmokeTestc                 óþ   — |                       d¦  «        }t          j        |d¦  «        }t          j        |¦  «        }|j        t
          k    sJ ‚|                     ¦   «         |                     ¦   «         k    sJ ‚d S r�   rŸ   r¤   s       r   r¨   z9XMLTreeBuilderSmokeTest.test_pickle_and_unpickle_identityÏ  r©   r   c                 ód   — |                       d¦  «        }|                     ¦   «         dk    sJ ‚d S )Nú<root/>s.   <?xml version="1.0" encoding="utf-8"?>
<root/>rº   rš   s     r   Útest_docstring_generatedz0XMLTreeBuilderSmokeTest.test_docstring_generatedØ  s3   € Ø�yŠy˜Ñ#Ô#ˆØ�{Š{‰}Œ}Ð RÒRÐRÐRÐRÐRÐRr   c                 ój   — d}|                       |¦  «        }||                     d¦  «        k    sJ ‚d S )Ns,   <?xml version="1.0" encoding="utf8"?>
<foo/>r«   rº   rx   s      r   Útest_xml_declarationz,XMLTreeBuilderSmokeTest.test_xml_declarationÜ  s;   € ØEˆØ�yŠy˜Ñ Ô ˆØ˜Ÿš VÑ,Ô,Ò,Ð,Ð,Ð,Ð,Ð,r   c                 óº   — d}|                       |¦  «        }t          D ];}|dv rŒ|                     |¦  «        }d|v sJ ‚|                     d¦  «        |vsJ ‚Œ<d S )Ns   <?xml version="1.0"?>
<foo/>r~  s   <?xml version="1.0"?>r„  r…  r†  s        r   Ú:test_python_specific_encodings_not_used_in_xml_declarationzRXMLTreeBuilderSmokeTest.test_python_specific_encodings_not_used_in_xml_declarationá  sŒ   € ð 6ˆØ�yŠy˜Ñ Ô ˆÝ1ð 	;ð 	;ˆHØð ð ð ð Ø—k’k (Ñ+Ô+ˆGØ+¨wÐ6Ð6Ð6Ð6Ø—?’? 7Ñ+Ô+°7Ð:Ð:Ð:Ð:Ð:ð	;ð 	;r   c                 ój   — d}|                       |¦  «        }||                     d¦  «        k    sJ ‚d S )Ns<   <?xml version="1.0" encoding="utf8"?>
<?PITarget PIContent?>r«   rº   rx   s      r   ræ   z3XMLTreeBuilderSmokeTest.test_processing_instructionô  s;   € ØUˆØ�yŠy˜Ñ Ô ˆØ˜Ÿš VÑ,Ô,Ò,Ð,Ð,Ð,Ð,Ð,r   c                 ój   — d}|                       |¦  «        }|                     d¦  «        |k    sJ ‚dS )zGA real XHTML document should come out *exactly* the same as it went in.rÐ   rÓ   Nrº   rx   s      r   rÚ   z0XMLTreeBuilderSmokeTest.test_real_xhtml_documentù  s?   € ðˆð �yŠy˜Ñ Ô ˆØ�{Š{˜7Ñ#Ô# vÒ-Ð-Ð-Ð-Ð-Ð-r   c                 óh   — d}|                       |¦  «        }||                     ¦   «         k    sJ ‚d S )Ns  <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<parent xmlns="http://ns1/">
<child xmlns="http://ns2/" xmlns:ns3="http://ns3/">
<grandchild ns3:attr="value" xmlns="http://ns4/"/>
</child>
</parent>rº   ©r   Údocr    s      r   Útest_nested_namespacesz.XMLTreeBuilderSmokeTest.test_nested_namespaces  s9   € ðˆð �yŠy˜‰~Œ~ˆØ�d—k’k‘m”mÒ#Ð#Ð#Ð#Ð#Ð#r   c                 óv   — d}t          |d¦  «        }d|j        _        |                     ¦   «         }d|v sJ ‚d S )Nz/
  <script type="text/javascript">
  </script>
zlxml-xmlzconsole.log("< < hey > > ");s   &lt; &lt; hey &gt; &gt;)r   r™   rV   r¯   )r   r£  r    r‡  s       r   Ú5test_formatter_processes_script_tag_for_xml_documentszMXMLTreeBuilderSmokeTest.test_formatter_processes_script_tag_for_xml_documents  sJ   € ðˆõ ˜S *Ñ-Ô-ˆð <ˆŒÔØ—+’+‘-”-ˆØ)¨WÐ4Ð4Ð4Ð4Ð4Ð4r   c                 óX   — d}|                       |¦  «        }d|j        j        k    sJ ‚d S )Nu?   <?xml version="1.0" encoding="euc-jp"><root>SacrÃ© bleu!</root>rF  ©r    ÚrootrV   rx   s      r   rG  z7XMLTreeBuilderSmokeTest.test_can_parse_unicode_document  s4   € ØsˆØ�yŠy˜Ñ Ô ˆØ 4¤9Ô#3Ò3Ð3Ð3Ð3Ð3Ð3r   c                 óX   — d}|                       |¦  «        }d|j        j        k    sJ ‚d S )NuB   ï»¿<?xml version="1.0" encoding="euc-jp"><root>SacrÃ© bleu!</root>rF  r¨  rx   s      r   Ú1test_can_parse_unicode_document_begining_with_bomzIXMLTreeBuilderSmokeTest.test_can_parse_unicode_document_begining_with_bom   s7   € ð GˆØ�yŠy˜Ñ Ô ˆØ 4¤9Ô#3Ò3Ð3Ð3Ð3Ð3Ð3r   c                 óh   — d}|                       |¦  «        }t          |j        ¦  «        |k    sJ ‚d S )Nzƒ<rss xmlns:dc="foo"><dc:creator>b</dc:creator><dc:date>2012-07-02T20:33:42Z</dc:date><dc:rights>c</dc:rights><image>d</image></rss>)r    rá   Úrssrx   s      r   Útest_popping_namespaced_tagz3XMLTreeBuilderSmokeTest.test_popping_namespaced_tag%  s:   € ð WˆØ�yŠy˜Ñ Ô ˆÝ�4”8‰}Œ} Ò&Ð&Ð&Ð&Ð&Ð&r   c                 óf   — |                       d¦  «        }|                     d¦  «        dk    sJ ‚d S )Nr™  Úlatin1s/   <?xml version="1.0" encoding="latin1"?>
<root/>rº   rš   s     r   Ú(test_docstring_includes_correct_encodingz@XMLTreeBuilderSmokeTest.test_docstring_includes_correct_encoding*  s7   € Ø�yŠy˜Ñ#Ô#ˆØ�{Š{˜8Ñ$Ô$Ð([Ò[Ð[Ð[Ð[Ð[Ð[r   c                 ój   — d}|                       |¦  «        }|                     d¦  «        |k    sJ ‚dS )z<A large XML document should come out the same as it went in.s4  <?xml version="1.0" encoding="utf-8"?>
<root>0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</root>rÓ   Nrº   rx   s      r   Útest_large_xml_documentz/XMLTreeBuilderSmokeTest.test_large_xml_document.  s?   € ðˆð �yŠy˜Ñ Ô ˆØ�{Š{˜7Ñ#Ô# vÒ-Ð-Ð-Ð-Ð-Ð-r   c                 ó\   — |                       dd¦  «         |                       d¦  «         d S )Nrð   rì   z
<p>foo</p>rò   r   s    r   Ú9test_tags_are_empty_element_if_and_only_if_they_are_emptyzQXMLTreeBuilderSmokeTest.test_tags_are_empty_element_if_and_only_if_they_are_empty6  s2   € Ø×Ò˜ Ñ'Ô'Ð'Ø×Ò˜Ñ&Ô&Ð&Ð&Ð&r   c                 óz   — d}|                       |¦  «        }|j        }d|d         k    sJ ‚d|d         k    sJ ‚d S )Nz£<root xmlns:a="http://example.com/" xmlns:b="http://example.net/"><a:foo>This tag is in the a namespace</a:foo><b:foo>This tag is in the b namespace</b:foo></root>zhttp://example.com/zxmlns:azhttp://example.net/zxmlns:b)r    r©  )r   r   r    r©  s       r   Útest_namespaces_are_preservedz5XMLTreeBuilderSmokeTest.test_namespaces_are_preserved:  sR   € ð wˆØ�yŠy˜Ñ Ô ˆØŒyˆØ$¨¨Y¬Ò7Ð7Ð7Ð7Ø$¨¨Y¬Ò7Ð7Ð7Ð7Ð7Ð7r   c                 óh   — d}|                       |¦  «        }t          |j        ¦  «        |k    sJ ‚d S )NzN<p xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>20010504</dc:date></p>)r    rá   r°   rx   s      r   Útest_closing_namespaced_tagz3XMLTreeBuilderSmokeTest.test_closing_namespaced_tagA  s7   € ØaˆØ�yŠy˜Ñ Ô ˆÝ�4”6‰{Œ{˜fÒ$Ð$Ð$Ð$Ð$Ð$r   c                 óh   — d}|                       |¦  «        }t          |j        ¦  «        |k    sJ ‚d S )Nzs<foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><bar xsi:schemaLocation="http://www.example.com"/></foo>©r    rá   r¬   rx   s      r   Útest_namespaced_attributesz2XMLTreeBuilderSmokeTest.test_namespaced_attributesF  s:   € ð GˆØ�yŠy˜Ñ Ô ˆÝ�4”8‰}Œ} Ò&Ð&Ð&Ð&Ð&Ð&r   c                 óh   — d}|                       |¦  «        }t          |j        ¦  «        |k    sJ ‚d S )Nz<foo xml:lang="fr">bar</foo>r»  rx   s      r   Ú(test_namespaced_attributes_xml_namespacez@XMLTreeBuilderSmokeTest.test_namespaced_attributes_xml_namespaceK  s7   € Ø/ˆØ�yŠy˜Ñ Ô ˆÝ�4”8‰}Œ} Ò&Ð&Ð&Ð&Ð&Ð&r   c                 ó&  — d}|                       |¦  «        }dt          |                     d¦  «        ¦  «        k    sJ ‚dt          |                     d¦  «        ¦  «        k    sJ ‚dt          |                     d¦  «        ¦  «        k    sJ ‚	 d S )Na  <?xml version="1.0" encoding="utf-8"?>
<Document xmlns="http://example.com/ns0"
    xmlns:ns1="http://example.com/ns1"
    xmlns:ns2="http://example.com/ns2">
    <ns1:tag>foo</ns1:tag>
    <ns1:tag>bar</ns1:tag>
    <ns2:tag key="value">baz</ns2:tag>
</Document>
é   rX   rž   zns1:tagrB   zns2:tag)r    rG   rÝ   r¢  s      r   Útest_find_by_prefixed_namez2XMLTreeBuilderSmokeTest.test_find_by_prefixed_nameP  s–   € ðˆð �yŠy˜‰~Œ~ˆð •C˜Ÿš eÑ,Ô,Ñ-Ô-Ò-Ð-Ð-Ð-ð •C˜Ÿš iÑ0Ô0Ñ1Ô1Ò1Ð1Ð1Ð1Ø•C˜Ÿš iÑ0Ô0Ñ1Ô1Ò1Ð1Ð1Ð1à<Ø<Ð<r   c                 óŽ   — d}|                       |¦  «        }|j        }t          j        |¦  «        }|j        |j        k    sJ ‚d S )Nzf<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://example.com/ns0"/>)r    Údocumentrè   Úprefix)r   Úxmlr    rX   Ú	duplicates        r   Ú!test_copy_tag_preserves_namespacez9XMLTreeBuilderSmokeTest.test_copy_tag_preserves_namespacef  sL   € ð2ˆð �yŠy˜‰~Œ~ˆØŒmˆÝ”I˜c‘N”Nˆ	ð Œz˜YÔ-Ò-Ð-Ð-Ð-Ð-Ð-r   c                 ód   — |                       t          ¦  «        }|                      |¦  «         dS r�  r�  rš   s     r   r’  z'XMLTreeBuilderSmokeTest.test_worst_caseq  r“  r   N)rb   rc   rd   r¨   rš  rœ  rž  ræ   rÚ   r¤  r¦  rG  r«  r®  r±  r³  rµ  r·  r¹  r¼  r¾  rÁ  rÇ  r’  r"   r   r   r–  r–  Í  sU  € € € € € ð0ð 0ð 0ðSð Sð Sð-ð -ð -ð
;ð ;ð ;ð&-ð -ð -ð
	.ð 	.ð 	.ð	$ð 	$ð 	$ð
5ð 
5ð 
5ð4ð 4ð 4ð
4ð 4ð 4ð
'ð 'ð 'ð
\ð \ð \ð.ð .ð .ð'ð 'ð 'ð8ð 8ð 8ð%ð %ð %ð
'ð 'ð 'ð
'ð 'ð 'ð
=ð =ð =ð,	.ð 	.ð 	.ð%ð %ð %ð %ð %r   r–  c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚHTML5TreeBuilderSmokeTestz2Smoke test for a tree builder that supports HTML5.c                 ó   — d S r   r"   r   s    r   rÚ   z2HTML5TreeBuilderSmokeTest.test_real_xhtml_document{  s	   € ð 	ˆr   c                 óX   — d}|                       |¦  «        }d|j        j        k    sJ ‚d S )Nz<a>r>  )r    rq   Ú	namespacerx   s      r   Útest_html_tags_have_namespacez7HTML5TreeBuilderSmokeTest.test_html_tags_have_namespace€  s4   € ØˆØ�yŠy˜Ñ Ô ˆØ-°´Ô1AÒAÐAÐAÐAÐAÐAr   c                 ó€   — d}|                       |¦  «        }d}||j        j        k    sJ ‚||j        j        k    sJ ‚d S )Nz<svg><circle/></svg>rA  )r    ÚsvgrÍ  Úcircle©r   r   r    rÍ  s       r   Útest_svg_tags_have_namespacez6HTML5TreeBuilderSmokeTest.test_svg_tags_have_namespace…  sO   € Ø'ˆØ�yŠy˜Ñ Ô ˆØ0ˆ	Ø˜DœHÔ.Ò.Ð.Ð.Ð.Ø˜DœKÔ1Ò1Ð1Ð1Ð1Ð1Ð1r   c                 ó€   — d}|                       |¦  «        }d}||j        j        k    sJ ‚||j        j        k    sJ ‚d S )Nz<math><msqrt>5</msqrt></math>r@  )r    ÚmathrÍ  ÚmsqrtrÒ  s       r   Útest_mathml_tags_have_namespacez9HTML5TreeBuilderSmokeTest.test_mathml_tags_have_namespace�  sO   € Ø0ˆØ�yŠy˜Ñ Ô ˆØ8ˆ	Ø˜DœIÔ/Ò/Ð/Ð/Ð/Ø˜DœJÔ0Ò0Ð0Ð0Ð0Ð0Ð0r   c                 óØ   — d}|                       |¦  «        }t          |j        d         t          ¦  «        sJ ‚|j        d         dk    sJ ‚d|j        d         j        j        k    sJ ‚d S )Nz3<?xml version="1.0" encoding="utf-8"?><html></html>r   z$?xml version="1.0" encoding="utf-8"?r½   )r    rI   rH   r   r;   r+   rx   s      r   Ú$test_xml_declaration_becomes_commentz>HTML5TreeBuilderSmokeTest.test_xml_declaration_becomes_comment”  sr   € ØFˆØ�yŠy˜Ñ Ô ˆÝ˜$œ-¨Ô*­GÑ4Ô4Ð4Ð4Ð4ØŒ}˜QÔÐ#IÒIÐIÐIÐIØ˜œ qÔ)Ô6Ô;Ò;Ð;Ð;Ð;Ð;Ð;r   N)	rb   rc   rd   r”  rÚ   rÎ  rÓ  r×  rÙ  r"   r   r   rÊ  rÊ  x  sh   € € € € € Ø<Ð<ðð ð ð
Bð Bð Bð
2ð 2ð 2ð1ð 1ð 1ð<ð <ð <ð <ð <r   rÊ  )*r”  Ú__license__r    rè   Ú	functoolsrÕ   rz   Úbs4r   Úbs4.elementr   r   r   r   r	   r
   r   r   r   Úbs4.builderr   r   r   r   Ú	soupsiever   ÚSOUP_SIEVE_PRESENTÚImportErrorÚhtml5libÚHTML5LIB_PRESENTÚ
lxml.etreeÚlxmlÚLXML_PRESENTÚetreeÚLXML_VERSIONr‘  Úobjectr   rh   r   r–  rÊ  r"   r   r   ú<module>rê     sÍ  ðà Ð ð €à €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð ð ð ð ð
 (€ð
Ø-Ð-Ð-Ð-Ð-Ð-ØÐÐøØð ð ð ØÐÐÐðøøøðØ€O€O€OØÐÐøØð ð ð ØÐÐÐðøøøðØÐÐÐØ€LØ”:Ô*€L€LøØð ð ð Ø€LØ€L€L€Lðøøøð"€ðJx;ð x;ð x;ð x;ð x;ˆvñ x;ô x;ð x;ðv!ð !ð !ð !ð !˜6ñ !ô !ð !ð6X
%ð X
%ð X
%ð X
%ð X
%Ð3ñ X
%ô X
%ð X
%ðvh%ð h%ð h%ð h%ð h%Ð2ñ h%ô h%ð h%ðV!<ð !<ð !<ð !<ð !<Ð 8ñ !<ô !<ð !<ð !<ð !<s6   ÁA ÁAÁAÁA  Á A*Á)A*Á.B Â	BÂB