Ë
    ¦2Úiù#  ã                   ó¨   — d Z ddlZddlmZ ddlmZ  ed«      Zh d£Zd„ Zd„ Z	 G d	„ d
«      Z
 G d„ de
«      Z G d„ de«      Z G d„ de«      Zd„ Zy)zCompare two HTML documents.é    N)Ú
HTMLParser)Ú_lazy_re_compilez[\t\n\f\r ]+>   údefer ÚloopÚopenÚasyncÚismapÚmutedÚhiddenÚcheckedÚdefaultÚautoplayÚcontrolsÚdisabledÚmultipleÚnomoduleÚreadonlyÚrequiredÚreversedÚselectedÚ	autofocusÚ	itemscopeÚ	truespeedÚ
novalidateÚplaysinlineÚformnovalidateÚallowfullscreenc                 ó.   — t         j                  d| «      S )Nú )ÚASCII_WHITESPACEÚsub)Ústrings    úG/var/www/html/acx/venv/lib/python3.12/site-packages/django/test/html.pyÚnormalize_whitespacer$   +   s   € Ü×Ñ  VÓ,Ð,ó    c           	      óæ   — g }| D ]i  \  }}|dk(  r6|r4dj                  t        d„ t        j                  |«      D «       «      «      }|t        v r
|r||k(  rd }n|€d}|j                  ||f«       Œk |S )NÚclassr   c              3   ó&   K  — | ]	  }|sŒ|–— Œ y ­w©N© )Ú.0Úvalues     r#   ú	<genexpr>z'normalize_attributes.<locals>.<genexpr>6   s   è ø€ ÒQ Ê5”uÑQùs   ‚ŠÚ )ÚjoinÚsortedr    ÚsplitÚBOOLEAN_ATTRIBUTESÚappend)Ú
attributesÚ
normalizedÚnamer,   s       r#   Únormalize_attributesr7   /   sŠ   € Ø€JØ!ò )‰ˆˆeØ�7Š?™uð —H‘HÜÑQÔ*:×*@Ñ*@ÀÓ*GÔQÓQóˆEð Ô%Ñ%Ù˜E TšMØ‘Øˆ]ØˆEØ×Ñ˜4 ˜-Õ(ð)ð  Ðr%   c                   óP   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)ÚElementc                 ó@   — || _         t        |«      | _        g | _        y r)   )r6   r0   r4   Úchildren)Úselfr6   r4   s      r#   Ú__init__zElement.__init__E   s   € ØˆŒ	Ü  Ó,ˆŒØˆ�r%   c                 ó  — t        |t        «      rqt        |«      }| j                  rºt        | j                  d   t        «      r�| j                  dxx   |z  cc<   t        | j                  d   «      | j                  d<   y | j                  rTt        | j                  d   t        «      r7| j                  d   j	                  «       r| j                  j                  «        |r| j                  j                  |«       y y ©Néÿÿÿÿ)Ú
isinstanceÚstrr$   r;   ÚisspaceÚpopr3   ©r<   Úelements     r#   r3   zElement.appendJ   s¼   € Ü�gœsÔ#Ü*¨7Ó3ˆGØ�}Š}¤¨D¯M©M¸"Ñ,=¼sÔ!CØ—‘˜bÓ! WÑ,Ó!Ü$8¸¿¹ÀrÑ9JÓ$K�—‘˜bÑ!ØØ�]Š]ô ˜$Ÿ-™-¨Ñ+¬SÔ1°d·m±mÀBÑ6G×6OÑ6OÔ6QØ—‘×!Ñ!Ô#ÙØ�M‰M× Ñ  Õ)ð r%   c                 ó  ‡— ˆfd„Š ‰| j                   «       t        | j                   «      D ]P  \  }}t        |t        «      r|j	                  «       | j                   |<   Œ4t        |d«      sŒA|j                  «        ŒR y )Nc                 ó˜   •— | rFt        | d   t        «      r3| d   j                  «       | d<   | d   s| j                  «         ‰| «      } | S r?   )rA   rB   ÚrstriprD   )r;   Úrstrip_last_elements    €r#   rJ   z-Element.finalize.<locals>.rstrip_last_element[   sH   ø€ ÙœJ x°¡|´SÔ9Ø'¨™|×2Ñ2Ó4�˜‘Ø ’|Ø—L‘L”NÙ2°8Ó<�HØˆOr%   Úfinalize)r;   Ú	enumeraterA   rB   ÚstripÚhasattrrK   )r<   ÚiÚchildrJ   s      @r#   rK   zElement.finalizeZ   sd   ø€ ô	ñ 	˜DŸM™MÔ*Ü! $§-¡-Ó0ò 	!‰HˆAˆuÜ˜%¤Ô%Ø#(§;¡;£=�—‘˜aÒ Ü˜ 
Õ+Ø—‘Õ ñ		!r%   c                 ó´   — t        |d«      r| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k(  S )Nr6   F)rN   r6   r4   r;   rE   s     r#   Ú__eq__zElement.__eq__j   sH   € Ü�w Ô'¨4¯9©9¸¿¹Ò+DØØ�?‰?˜g×0Ñ0Ò0ØØ�}‰} × 0Ñ 0Ñ0Ð0r%   c                 óH   — t        | j                  g| j                  ¢­«      S r)   )Úhashr6   r4   ©r<   s    r#   Ú__hash__zElement.__hash__q   s   € Ü�T—Y‘YÐ1 §¡Ñ1Ó2Ð2r%   c                 ó  — t        |t        «      s| |k(  ryt        |t        «      r| j                  |j                  k(  ryd}d}| j                  D ]¹  }t        |t        «      r/t        |t        «      sŒ$|r||j	                  |«      z  }Œ;||v sŒ@ y||j                  ||¬«      z  }|s|r|c S t        |t        «      sŒq|j                  sŒ~|j                  |   }||k(  r&|dz  }|t        |j                  «      k(  sŒ°|dz  }d}Œ¸d}Œ» |S )Né   r   ©Úcount)rA   rB   ÚRootElementr;   rZ   Ú_countÚlen)r<   rF   rZ   rO   Úelem_child_idxrP   Ú
elem_childs          r#   r\   zElement._countt   s  € Ü˜'¤3Ô'¨D°GªOØÜ�gœ{Ô+°·±À×AQÑAQÒ0QØØˆØˆØ—]‘]ò 	+ˆEô ˜%¤Ô%Ü˜g¤sÕ+ÙØ˜UŸ[™[¨Ó1Ñ1™Ø  EÒ)Ù ð �U—\‘\ '°�\Ó7Ñ7�Ù¡Ø’Hô
 ˜g¤{Õ3¸×8HÓ8HØ!(×!1Ñ!1°.Ñ!A�Jà! UÒ*Ø&¨!Ñ+˜à)¬S°×1AÑ1AÓ-BÓBØ ™F˜AØ-.™Nð *+™ð;	+ð< ˆr%   c                 ó.   — | j                  |d¬«      dkD  S )NFrY   r   ©r\   rE   s     r#   Ú__contains__zElement.__contains__›   s   € Ø�{‰{˜7¨%ˆ{Ó0°1Ñ4Ð4r%   c                 ó(   — | j                  |d¬«      S )NTrY   ra   rE   s     r#   rZ   zElement.countž   s   € Ø�{‰{˜7¨$ˆ{Ó/Ð/r%   c                 ó    — | j                   |   S r)   )r;   )r<   Úkeys     r#   Ú__getitem__zElement.__getitem__¡   s   € Ø�}‰}˜SÑ!Ð!r%   c           
      óŒ  — d| j                   z  }| j                  D ]  \  }}|�|d|›d|›d�z  }Œ|d|z  z  }Œ | j                  rs|dz  }|dj                  | j                  D �cg c]2  }t	        |t
        «      rt        j                  |«      n
t        |«      ‘Œ4 c}«      z  }|d| j                   z  z  }|S |d	z  }|S c c}w )
Nz<%sr   z="ú"z %sz>
r.   z
</%s>ú>)r6   r4   r;   r/   rA   rB   ÚhtmlÚescape)r<   Úoutputre   r,   Úcs        r#   Ú__str__zElement.__str__¤   sØ   € Ø˜Ÿ™Ñ"ˆØŸ/™/ò 	&‰JˆC�ØÐ ÙªªUÐ3Ñ3‘à˜% #™+Ñ%‘ð		&ð
 �=Š=Ø�e‰OˆFØ�b—g‘gð "Ÿ]™]öàô '1°´CÔ&8”D—K‘K ”N¼cÀ!»fÑDòóñ ˆFð �i $§)¡)Ñ+Ñ+ˆFð ˆð �c‰MˆFØˆùòs   Á&7C
c                 ó   — t        | «      S r)   )rB   rU   s    r#   Ú__repr__zElement.__repr__¸   s   € Ü�4‹yÐr%   N)T)Ú__name__Ú
__module__Ú__qualname__r=   r3   rK   rR   rV   r\   rb   rZ   rf   rn   rp   r*   r%   r#   r9   r9   D   s:   „ òò
*ò !ò 1ò3ó%òN5ò0ò"òó(r%   r9   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )r[   c                 ó&   •— t         ‰| �  d d«       y )Nr*   )Úsuperr=   ©r<   Ú	__class__s    €r#   r=   zRootElement.__init__½   s   ø€ Ü‰Ñ˜˜rÕ"r%   c           	      óº   — dj                  | j                  D �cg c]2  }t        |t        «      rt	        j
                  |«      n
t        |«      ‘Œ4 c}«      S c c}w )Nr.   )r/   r;   rA   rB   rj   rk   )r<   rm   s     r#   rn   zRootElement.__str__À   sB   € Ø�w‰wØGKÇ}Á}ÖUÀ!œz¨!¬SÔ1ŒT�[‰[˜Œ^´s¸1³vÑ=ÒUó
ð 	
ùÚUs   š7A)rq   rr   rs   r=   rn   Ú__classcell__©rx   s   @r#   r[   r[   ¼   s   ø„ ô#ö
r%   r[   c                   ó   — e Zd Zy)ÚHTMLParseErrorN)rq   rr   rs   r*   r%   r#   r}   r}   Æ   s   „ Ør%   r}   c                   ó\   ‡ — e Zd Zh d£Zˆ fd„Zd„ Zd
d„Zed„ «       Zd„ Z	d„ Z
d„ Zd	„ Zˆ xZS )ÚParser>   ÚbrÚhrÚcolÚimgÚwbrÚareaÚbaseÚlinkÚmetaÚembedÚframeÚinputÚparamÚtrackÚsourceÚspacerc                 ó\   •— t         ‰| �  «        t        «       | _        g | _        i | _        y r)   )rv   r=   r[   ÚrootÚ	open_tagsÚelement_positionsrw   s    €r#   r=   zParser.__init__à   s&   ø€ Ü‰ÑÔÜ“MˆŒ	ØˆŒØ!#ˆÕr%   c                 ó6   — t        || j                  «       «      ‚r)   )r}   Úgetpos)r<   Úmsgs     r#   ÚerrorzParser.erroræ   s   € Ü˜S $§+¡+£-Ó0Ð0r%   c                 óž   — |s|r| j                   |   }|€| j                  «       }t        |d«      r|j                  |j                  f}d|z  S )NÚlinenozLine %d, Column %d)r“   r•   rN   r™   Úoffset)r<   ÚpositionrF   s      r#   Úformat_positionzParser.format_positioné   sO   € Ù™GØ×-Ñ-¨gÑ6ˆHØÐØ—{‘{“}ˆHÜ�8˜XÔ&Ø—‘¨¯©Ð7ˆHØ# hÑ.Ð.r%   c                 óP   — | j                   r| j                   d   S | j                  S r?   )r’   r‘   rU   s    r#   ÚcurrentzParser.currentò   s"   € à�>Š>Ø—>‘> "Ñ%Ð%à—9‘9Ðr%   c                 óh   — | j                  ||«       || j                  vr| j                  |«       y y r)   )Úhandle_starttagÚSELF_CLOSING_TAGSÚhandle_endtag)r<   ÚtagÚattrss      r#   Úhandle_startendtagzParser.handle_startendtagù   s3   € Ø×Ñ˜S %Ô(Ø�d×,Ñ,Ñ,Ø×Ñ˜sÕ#ð -r%   c                 óô   — t        |«      }t        ||«      }| j                  j                  |«       || j                  vr| j
                  j                  |«       | j                  «       | j                  |<   y r)   )r7   r9   rž   r3   r¡   r’   r•   r“   )r<   r£   r¤   rF   s       r#   r    zParser.handle_starttagþ   s`   € Ü$ UÓ+ˆÜ˜#˜uÓ%ˆØ�‰×Ñ˜GÔ$Ø�d×,Ñ,Ñ,Ø�N‰N×!Ñ! 'Ô*Ø*.¯+©+«-ˆ×Ñ˜wÒ'r%   c                 ót  — | j                   s&| j                  d|›d| j                  «       ›d�«       | j                   j                  «       }|j                  |k7  r]| j                   s&| j                  d|›d| j                  «       ›d�«       | j                   j                  «       }|j                  |k7  rŒ\y y )NzUnexpected end tag `z` (ú))r’   r—   rœ   rD   r6   )r<   r£   rF   s      r#   r¢   zParser.handle_endtag  s‡   € Ø�~Š~Ø�JŠJº¸d×>RÑ>RÕ>TÐUÔVØ—.‘.×$Ñ$Ó&ˆØ�l‰l˜cÒ!Ø—>’>Ø—
’
Ú69¸4×;OÑ;OÕ;QÐRôð —n‘n×(Ñ(Ó*ˆGð �l‰l˜cÕ!r%   c                 ó:   — | j                   j                  |«       y r)   )rž   r3   )r<   Údatas     r#   Úhandle_datazParser.handle_data  s   € Ø�‰×Ñ˜DÕ!r%   )NN)rq   rr   rs   r¡   r=   r—   rœ   Úpropertyrž   r¥   r    r¢   r«   rz   r{   s   @r#   r   r   Ê   sB   ø„ òÐô($ò1ó/ð ñó ðò$ò
8ò	+ö"r%   r   c                 ó  — t        «       }|j                  | «       |j                  «        |j                  }|j	                  «        t        |j                  «      dk(  r,t        |j                  d   t        «      s|j                  d   }|S )zü
    Take a string that contains HTML and turn 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.
    rX   r   )	r   ÚfeedÚcloser‘   rK   r]   r;   rA   rB   )rj   ÚparserÚdocuments      r#   Ú
parse_htmlr²     sq   € ô ‹X€FØ
‡K�K�ÔØ
‡L�L„NØ�{‰{€HØ×ÑÔä
ˆ8×ÑÓ Ò"¬:°h×6GÑ6GÈÑ6JÌCÔ+PØ×$Ñ$ QÑ'ˆØ€Or%   )Ú__doc__rj   Úhtml.parserr   Údjango.utils.regex_helperr   r    r2   r$   r7   r9   r[   Ú	Exceptionr}   r   r²   r*   r%   r#   ú<module>r·      si   ðÙ !Û Ý "å 6ñ
 $ OÓ4Ð òÐ ò<-ò÷*uñ uôp
�'ô 
ô	�Yô 	ôH"ˆZô H"óVr%   