PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  ]c@sdZddlmZddlZddlmZddlmZmZddl m Z m Z ej dZ dZed efd YZed efd YZd e fdYZdZdS(u Comparing two html documents. i(tunicode_literalsN(tsix(t force_texttpython_2_unicode_compatible(tHTMLParseErrort HTMLParseru\s+cCstjd|S(Nu (t WHITESPACEtsub(tstring((s4/usr/lib/python2.7/site-packages/django/test/html.pytnormalize_whitespacestElementcBsweZdZdZdZdZdZdZedZ dZ dZ d Z d Z d ZRS( cCs%||_t||_g|_dS(N(tnametsortedt attributestchildren(tselfR R ((s4/usr/lib/python2.7/site-packages/django/test/html.pyt__init__s cCst|tjrt|}t|}|jrt|jdtjr|jdc|7Xs(thashR ttupleR (R((s4/usr/lib/python2.7/site-packages/django/test/html.pyt__hash__WscCs|j| S(N(R((RR((s4/usr/lib/python2.7/site-packages/django/test/html.pyt__ne__ZscCst|tjs%||kr%dSnt|trM|j|jkrMdSnd}x|jD]}t|tjrt|tjr|r||j|7}q||krdSqq]||j|d|7}| r]|r]|Sq]W|S(Niitcount(RRRt RootElementRR/t_count(RRR/RR((s4/usr/lib/python2.7/site-packages/django/test/html.pyR1]s$    cCs|j|dtdkS(NR/i(R1R(RR((s4/usr/lib/python2.7/site-packages/django/test/html.pyt __contains__tscCs|j|dtS(NR/(R1R#(RR((s4/usr/lib/python2.7/site-packages/django/test/html.pyR/wscCs |j|S(N(R(Rtkey((s4/usr/lib/python2.7/site-packages/django/test/html.pyt __getitem__zscCsd|j}xB|jD]7\}}|r@|d||f7}q|d|7}qW|jr|d7}|djd|jD7}|d|j7}n |d7}|S( Nu<%su %s="%s"u %su> ucss|]}tj|VqdS(N(Rt text_type(R)tc((s4/usr/lib/python2.7/site-packages/django/test/html.pys su u />(R R Rtjoin(RtoutputR3R%((s4/usr/lib/python2.7/site-packages/django/test/html.pyt__str__}s     cCs tj|S(N(RR5(R((s4/usr/lib/python2.7/site-packages/django/test/html.pyt__repr__s(t__name__t __module__RRRR(R-R.R#R1R2R/R4R9R:(((s4/usr/lib/python2.7/site-packages/django/test/html.pyR s           R0cBseZdZdZRS(cCstt|jdddS(N((tsuperR0RR"(R((s4/usr/lib/python2.7/site-packages/django/test/html.pyRscCsdjd|jDS(Nucss|]}tj|VqdS(N(RR5(R)R6((s4/usr/lib/python2.7/site-packages/django/test/html.pys s(R7R(R((s4/usr/lib/python2.7/site-packages/django/test/html.pyR9s(R;R<RR9(((s4/usr/lib/python2.7/site-packages/django/test/html.pyR0s tParserc BsteZdZd Zd Zddd Zed ZdZ dZ dZ dZ dZ dZRS(ubruhruinputuimgumetauspacerulinkuframeubaseucolcCs/tj|t|_g|_i|_dS(N(RRR0troott open_tagstelement_positions(R((s4/usr/lib/python2.7/site-packages/django/test/html.pyRs   cCst||jdS(N(Rtgetpos(Rtmsg((s4/usr/lib/python2.7/site-packages/django/test/html.pyterrorscCsd| r|r|j|}n|dkr8|j}nt|dr\|j|jf}nd|S(NulinenouLine %d, Column %d(RAR"RBRtlinenotoffset(RtpositionR((s4/usr/lib/python2.7/site-packages/django/test/html.pytformat_positions  cCs|jr|jdS|jSdS(Ni(R@R?(R((s4/usr/lib/python2.7/site-packages/django/test/html.pytcurrents  cCs3|j||||jkr/|j|ndS(N(thandle_starttagtSELF_CLOSING_TAGSt handle_endtag(Rttagtattrs((s4/usr/lib/python2.7/site-packages/django/test/html.pythandle_startendtagscCsg|D]H\}}|dkrC|djt|jdfn ||f^q}t||}|jj|||jkr|jj|n|j|j |s       cCsxt}|j||j|j}|jt|jdkrtt|jdtj st|jd}qtn|S(u Takes a string that contains *valid* HTML and turns it into a Python object structure that can be easily compared against other HTML on semantic equivalence. Syntactical differences like which quotation is used on arguments will be ignored. ii( R>tfeedtcloseR?RR RRRR(thtmltparsertdocument((s4/usr/lib/python2.7/site-packages/django/test/html.pyt parse_htmls     (t__doc__t __future__Rtret django.utilsRtdjango.utils.encodingRRtdjango.utils.html_parserRRtcompileRR tobjectR R0R>R[(((s4/usr/lib/python2.7/site-packages/django/test/html.pyts  {H