o
    lf#                     @   s   d Z ddlZddlmZ ddlmZ edZh dZdd Zd	d
 Z	G dd dZ
G dd de
ZG dd deZG dd deZdd ZdS )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                 C   s   t d| S )N )ASCII_WHITESPACEsub)string r!   T/var/www/ticemtrilhas/avaliacao_env/lib/python3.10/site-packages/django/test/html.pynormalize_whitespace+   s   r#   c                 C   st   g }| D ]3\}}|dkr|rd tdd t|D }|tv r*|r'||kr)d }n|d u r0d}|||f q|S )Nclassr   c                 s   s    | ]}|r|V  qd S Nr!   ).0valuer!   r!   r"   	<genexpr>6   s    z'normalize_attributes.<locals>.<genexpr> )joinsortedr   splitBOOLEAN_ATTRIBUTESappend)
attributes
normalizednamer'   r!   r!   r"   normalize_attributes/   s   r2   c                   @   sf   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdddZdd Z	dd Z
dd Zdd Zdd ZdS )Elementc                 C   s   || _ t|| _g | _d S r%   )r1   r+   r/   children)selfr1   r/   r!   r!   r"   __init__E   s   

zElement.__init__c                 C   s   t |tr*t|}| jr)t | jd tr)| jd  |7  < t| jd | jd< d S n| jrAt | jd trA| jd  rA| j  |rK| j| d S d S N)
isinstancestrr#   r4   isspacepopr.   r5   elementr!   r!   r"   r.   J   s   

zElement.appendc                    sZ    fdd  | j  t| j D ]\}}t|tr!| | j |< qt|dr*|  qd S )Nc                    s>   | rt | d tr| d  | d< | d s|    | } | S r7   )r9   r:   rstripr<   r4   rstrip_last_elementr!   r"   rB   [   s   z-Element.finalize.<locals>.rstrip_last_elementfinalize)r4   	enumerater9   r:   striphasattrrC   )r5   ichildr!   rA   r"   rC   Z   s   


zElement.finalizec                 C   s6   t |dr| j|jkrdS | j|jkrdS | j|jkS )Nr1   F)rF   r1   r/   r4   r=   r!   r!   r"   __eq__j   s
   zElement.__eq__c                 C   s   t | jg| jR S r%   )hashr1   r/   r5   r!   r!   r"   __hash__q   s   zElement.__hash__Tc                 C   s   t |ts| |krdS t |tr| j|jkrdS d}d}| jD ]T}t |tr=t |tr<|r5|||7 }q||v r< dS q||j||d7 }|sN|rN|  S t |trs|jrs|j| }||krq|d7 }|t|jkrp|d7 }d}qd}q|S )N   r   count)r9   r:   RootElementr4   rO   _countlen)r5   r>   rO   rG   elem_child_idxrH   
elem_childr!   r!   r"   rQ   t   s8   



zElement._countc                 C   s   | j |dddkS )NFrN   r   rQ   r=   r!   r!   r"   __contains__      zElement.__contains__c                 C   s   | j |ddS )NTrN   rU   r=   r!   r!   r"   rO         zElement.countc                 C   s
   | j | S r%   r@   )r5   keyr!   r!   r"   __getitem__   s   
zElement.__getitem__c                 C   s   d| j  }| jD ]\}}|d ur|d||f 7 }q|d| 7 }q| jr=|d7 }|ddd | jD 7 }|d| j  7 }|S |d	7 }|S )
Nz<%sz %s="%s"z %sz>
r)   c                 S   (   g | ]}t |trt|nt|qS r!   r9   r:   htmlescaper&   cr!   r!   r"   
<listcomp>   s    z#Element.__str__.<locals>.<listcomp>z
</%s>>)r1   r/   r4   r*   )r5   outputrY   r'   r!   r!   r"   __str__   s    
zElement.__str__c                 C   s   t | S r%   )r:   rK   r!   r!   r"   __repr__   s   zElement.__repr__N)T)__name__
__module____qualname__r6   r.   rC   rI   rL   rQ   rV   rO   rZ   rd   re   r!   r!   r!   r"   r3   D   s    
'r3   c                       s$   e Zd Z fddZdd Z  ZS )rP   c                    s   t  d d d S )Nr!   )superr6   rK   	__class__r!   r"   r6      rW   zRootElement.__init__c                 C   s   d dd | jD S )Nr)   c                 S   r[   r!   r\   r_   r!   r!   r"   ra      s   ( z'RootElement.__str__.<locals>.<listcomp>)r*   r4   rK   r!   r!   r"   rd      s   zRootElement.__str__)rf   rg   rh   r6   rd   __classcell__r!   r!   rj   r"   rP      s    rP   c                   @   s   e Zd ZdS )HTMLParseErrorN)rf   rg   rh   r!   r!   r!   r"   rm      s    rm   c                       sb   e Zd Zh dZ fddZdd ZdddZed	d
 Zdd Z	dd Z
dd Zdd Z  ZS )Parser>   brhrcolimgwbrareabaselinkmetaembedframeinputparamtracksourcespacerc                    s"   t    t | _g | _i | _d S r%   )ri   r6   rP   root	open_tagselement_positionsrK   rj   r!   r"   r6      s   

zParser.__init__c                 C   s   t ||  r%   )rm   getpos)r5   msgr!   r!   r"   error   rX   zParser.errorNc                 C   s@   |s	|r	| j | }|d u r|  }t|dr|j|jf}d| S )NlinenozLine %d, Column %d)r   r   rF   r   offset)r5   positionr>   r!   r!   r"   format_position   s   

zParser.format_positionc                 C   s   | j r| j d S | jS r7   )r   r   rK   r!   r!   r"   current   s   
zParser.currentc                 C   s(   |  || || jvr| | d S d S r%   )handle_starttagSELF_CLOSING_TAGShandle_endtag)r5   tagattrsr!   r!   r"   handle_startendtag   s   
zParser.handle_startendtagc                 C   sF   t |}t||}| j| || jvr| j| |  | j|< d S r%   )r2   r3   r   r.   r   r   r   r   )r5   r   r   r>   r!   r!   r"   r      s   

zParser.handle_starttagc                 C   sh   | j s| d||  f  | j  }|j|kr2| j s&| d||  f  | j  }|j|ksd S d S )NzUnexpected end tag `%s` (%s))r   r   r   r<   r1   )r5   r   r>   r!   r!   r"   r     s   


zParser.handle_endtagc                 C   s   | j | d S r%   )r   r.   )r5   datar!   r!   r"   handle_data  s   zParser.handle_data)NN)rf   rg   rh   r   r6   r   r   propertyr   r   r   r   r   rl   r!   r!   rj   r"   rn      s    
	
rn   c                 C   sR   t  }||  |  |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.
    rM   r   )	rn   feedcloser   rC   rR   r4   r9   r:   )r]   parserdocumentr!   r!   r"   
parse_html  s   

r   )__doc__r]   html.parserr   django.utils.regex_helperr   r   r-   r#   r2   r3   rP   	Exceptionrm   rn   r   r!   r!   r!   r"   <module>   s    x
K