+
    Tj"                         R t ^ RIt^ RIHt ^ RIHt ^ RIHt ]! R4      t0 Rmt	R t
R t ! R R	4      t ! R
 R]4      t ! R R]4      t ! R R]4      tR tR# )zCompare two HTML documents.N)
HTMLParser)VOID_ELEMENTS)_lazy_re_compilez[\t\n\f\r ]+c                 .    \         P                  R V 4      # ) )ASCII_WHITESPACEsub)strings   &E/var/www/idalgo/venv/lib/python3.14/site-packages/django/test/html.pynormalize_whitespacer   -   s    V,,    c           	         . pV  F|  w  r#VR 8X  d=   V'       d5   RP                  \        R \        P                  V4       4       4      4      pV\        9   d   V'       d   W28X  d   RpMVf   RpVP                  W#34       K~  	  V# )classr   c              3   8   "   T F  q'       g   K  Vx  K  	  R # 5iN ).0values   & r
   	<genexpr>'normalize_attributes.<locals>.<genexpr>8   s     Q*G5uu*Gs   	
N )joinsortedr   splitBOOLEAN_ATTRIBUTESappend)
attributes
normalizednamer   s   &   r
   normalize_attributesr   1   s    J!7?u HHQ*:*@*@*GQQE %%EM]E4-( "  r   c                   f   a  ] tR t^Ft o R tR tR tR tR tRR lt	R t
R tR	 tR
 tR tRtV tR# )Elementc                @    Wn         \        V4      V n        . V n        R # r   )r   r   r   children)selfr   r   s   &&&r
   __init__Element.__init__G   s    	 ,r   c                   \        V\        4      '       d   \        V4      pV P                  '       dr   \        V P                  R,          \        4      '       dK   V P                  R;;,          V,          uu&   \        V P                  R,          4      V P                  R&   R# MzV P                  '       di   \        V P                  R,          \        4      '       dB   V P                  R,          P	                  4       '       d   V P                  P                  4        V'       d   V P                  P                  V4       R# R# )   N)
isinstancestrr   r#   isspacepopr   r$   elements   &&r
   r   Element.appendL   s    gs##*73G}}}DMM",=s!C!Cb!W,!$8r9J$Kb!]]] $--+S11dmmB6G6O6O6Q6Q!!#MM  ) r   c                &  a V3R  loS! V P                   4       \        V P                   4       F^  w  r\        V\        4      '       d    VP	                  4       V P                   V&   K:  \        VR4      '       g   KN  VP                  4        K`  	  R# )c                    < V '       d_   \        V R,          \        4      '       dB   V R,          P                  4       V R&   V R,          '       g   V P                  4        S! V 4      p V # r(   r)   )r*   r+   rstripr-   )r#   rstrip_last_elements   &r
   r5   -Element.finalize.<locals>.rstrip_last_element]   sM    Jx|S99'|224||LLN28<HOr   finalizeN)r#   	enumerater*   r+   striphasattrr7   )r$   ichildr5   s   &  @r
   r7   Element.finalize\   sc    	 	DMM*!$--0HA%%%#(;;=a 
++ 	 1r   c                    \        VR 4      '       d   V P                  VP                  8w  d   R# V P                  VP                  8w  d   R# V P                  VP                  8H  # )r   F)r:   r   r   r#   r.   s   &&r
   __eq__Element.__eq__l   sK    w''499+D??g000}} 0 000r   c                H    \        V P                  .V P                  O54      # r   )hashr   r   r$   s   &r
   __hash__Element.__hash__s   s    TYY1122r   c                   \        V\        4      '       g	   W8X  d   ^# \        V\        4      '       d   V P                  VP                  8X  d   ^# ^ p^ pV P                   EF  p\        V\        4      '       dE   \        V\        4      '       d-   V'       d   W5P	                  V4      ,          pKQ  W9   d    ^# K\  K^  W5P                  WR7      ,          pV'       g   V'       d   Vu # \        V\        4      '       g   K  VP                  '       g   K  VP                  V,          pWe8X  d4   V^,          pV\        VP                  4      8X  d   V^,          p^ pK  EK  ^ pEK  	  V# )r(   count)r*   r+   RootElementr#   rH   _countlen)r$   r/   rH   r;   elem_child_idxr<   
elem_childs   &&&    r
   rJ   Element._countv   s    '3''DOg{++AQAQ0Q]]E %%%gs++[[11 )  * , \\'\77H
 g{338H8H8H!(!1!1.!AJ!*&!+)S1A1A-BBFA-.N C
 *+; #< r   c                .    V P                  VR R7      ^ 8  # )FrG   rJ   r.   s   &&r
   __contains__Element.__contains__   s    {{7%{0144r   c                (    V P                  VR R7      # )TrG   rP   r.   s   &&r
   rH   Element.count   s    {{7${//r   c                (    V P                   V,          # r   )r#   )r$   keys   &&r
   __getitem__Element.__getitem__   s    }}S!!r   c           
        R V P                   ,          pV P                   F-  w  r#Ve   VRV: RV: R2,          pK  VRV,          ,          pK/  	  V P                  '       d   VR,          pTRP                  V P                   Uu. uF:  p\	        V\
        4      '       d   \        P                  ! V4      M
\        V4      NK<  	  up4      ,          pVRV P                   ,          ,          pV# VR,          pV# u upi )	z<%sr   z=""z %sz>
r   z
</%s>>)r   r   r#   r   r*   r+   htmlescape)r$   outputrV   r   cs   &    r
   __str__Element.__str__   s    "//JC U33%#+%	 *
 ===eOFbgg "]]* '1C&8&8DKKNc!fD* F i$))++F  cMFs   A C:
c                    \        V 4      # r   )r+   rC   s   &r
   __repr__Element.__repr__   s    4yr   )r   r#   r   N)T)__name__
__module____qualname____firstlineno__r%   r   r7   r?   rD   rJ   rQ   rH   rW   r`   rc   __static_attributes____classdictcell__)__classdict__s   @r
   r!   r!   F   sB     
* ! 13%N50"( r   r!   c                   8   a a ] tR t^t oV 3R ltR tRtVtV ;t# )rI   c                (   < \         SV `  R R4       R # )Nr   )superr%   r$   	__class__s   &r
   r%   RootElement.__init__   s    r"r   c           	         R P                  V P                   Uu. uF:  p\        V\        4      '       d   \        P
                  ! V4      M
\        V4      NK<  	  up4      # u upi )r   )r   r#   r*   r+   r\   r]   )r$   r_   s   & r
   r`   RootElement.__str__   sI    wwGK}}U}!z!S11T[[^s1v=}U
 	
Us   A A!r   )	re   rf   rg   rh   r%   r`   ri   rj   __classcell__rp   rk   s   @@r
   rI   rI      s     #
 
r   rI   c                       ] tR t^tRtR# )HTMLParseErrorr   N)re   rf   rg   rh   ri   r   r   r
   rw   rw      s    r   rw   c                   j   a a ] tR t^t oV 3R ltR tR
R lt]R 4       tR t	R t
R tR tR	tVtV ;t# )Parserc                ^   < \         SV `  4        \        4       V n        . V n        / V n        R # r   )rn   r%   rI   root	open_tagselement_positionsro   s   &r
   r%   Parser.__init__   s&    M	!#r   c                4    \        WP                  4       4      hr   )rw   getpos)r$   msgs   &&r
   errorParser.error   s    S++-00r   c                    V'       g   V'       d   V P                   V,          pVf   V P                  4       p\        VR4      '       d   VP                  VP                  3pRV,          # )NlinenozLine %d, Column %d)r}   r   r:   r   offset)r$   positionr/   s   &&&r
   format_positionParser.format_position   sR    G--g6H{{}H8X&&7H#h..r   c                d    V P                   '       d   V P                   R,          # V P                  # r3   )r|   r{   rC   s   &r
   currentParser.current   s$    >>>>>"%%99r   c                d    V P                  W4       V\        9  d   V P                  V4       R # R # r   )handle_starttagr   handle_endtag)r$   tagattrss   &&&r
   handle_startendtagParser.handle_startendtag   s+    S(m#s# $r   c                    \        V4      p\        W4      pV P                  P                  V4       V\        9  d   V P
                  P                  V4       V P                  4       V P                  V&   R # r   )r   r!   r   r   r   r|   r   r}   )r$   r   r   r/   s   &&& r
   r   Parser.handle_starttag   sX    $U+#%G$m#NN!!'**.++-w'r   c                |   V P                   '       g)   V P                  R V: RV P                  4       : R24       V P                   P                  4       pVP                  V8w  dW   V P                   '       g)   V P                  R V: RV P                  4       : R24       V P                   P                  4       pKg  R# )zUnexpected end tag `z` ()N)r|   r   r   r-   r   )r$   r   r/   s   && r
   r   Parser.handle_endtag   s    ~~~JJd>R>R>TUV..$$&llc!>>>

694;O;O;QR nn((*G "r   c                <    V P                   P                  V4       R # r   )r   r   )r$   datas   &&r
   handle_dataParser.handle_data   s    D!r   )r}   r|   r{   )NN)re   rf   rg   rh   r%   r   r   propertyr   r   r   r   r   ri   rj   rt   ru   s   @@r
   ry   ry      sA     $1/  $
8	+" "r   ry   c                <   \        4       pVP                  V 4       VP                  4        VP                  pVP	                  4        \        VP                  4      ^8X  d;   \        VP                  ^ ,          \        4      '       g   VP                  ^ ,          pV# )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.
)	ry   feedcloser{   r7   rK   r#   r*   r+   )r\   parserdocuments   &  r
   
parse_htmlr     st     XF
KK
LLN{{H
8":h6G6G6JC+P+P$$Q'Or   >   loopopenasyncismapmutedhiddencheckeddefaultautoplaycontrolsdisabledmultiplenomodulereadonlyrequiredreversedselected	autofocus	itemscope	truespeed
novalidateplaysinlineformnovalidateallowfullscreendefer )__doc__r\   html.parserr   django.utils.htmlr   django.utils.regex_helperr   r   r   r   r   r!   rI   	Exceptionrw   ry   r   r   r   r
   <module>r      sj    !  " + 6
 $O4  <-*u up
' 
	Y 	3"Z 3"lr   