HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberPanel/lib64/python3.10/site-packages/django/test/__pycache__/html.cpython-310.pyc
o

�h�#�@s�dZddlZddlmZddlmZed�Zhd�Zdd�Zd	d
�Z	Gdd�d�Z
Gd
d�de
�ZGdd�de�Z
Gdd�de�Zdd�ZdS)zCompare 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�allowfullscreencCst�d|�S)N� )�ASCII_WHITESPACE�sub)�string�r!�F/usr/local/CyberPanel/lib/python3.10/site-packages/django/test/html.py�normalize_whitespace+sr#cCstg}|D]3\}}|dkr|rd�tdd�t�|�D���}|tvr*|r'||kr)d}n|dur0d}|�||f�q|S)N�classrcss�|]}|r|VqdS�Nr!)�.0�valuer!r!r"�	<genexpr>6s�z'normalize_attributes.<locals>.<genexpr>�)�join�sortedr�split�BOOLEAN_ATTRIBUTES�append)�
attributes�
normalized�namer'r!r!r"�normalize_attributes/s��r2c@sfeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zddd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�ElementcCs||_t|�|_g|_dSr%)r1r+r/�children)�selfr1r/r!r!r"�__init__Es

zElement.__init__cCs�t|t�r*t|�}|jr)t|jdt�r)|jd|7<t|jd�|jd<dSn|jrAt|jdt�rA|jd��rA|j��|rK|j�|�dSdS�N���)�
isinstance�strr#r4�isspace�popr.�r5�elementr!r!r"r.Js
�
�zElement.appendcsZ�fdd���|j�t|j�D]\}}t|t�r!|��|j|<qt|d�r*|��qdS)Ncs>|rt|dt�r|d��|d<|ds|���|�}|Sr7)r9r:�rstripr<�r4��rstrip_last_elementr!r"rB[sz-Element.finalize.<locals>.rstrip_last_element�finalize)r4�	enumerater9r:�strip�hasattrrC)r5�i�childr!rAr"rCZs


��zElement.finalizecCs6t|d�r|j|jkr
dS|j|jkrdS|j|jkS)Nr1F)rFr1r/r4r=r!r!r"�__eq__js
zElement.__eq__cCst|jg|j�R�Sr%)�hashr1r/�r5r!r!r"�__hash__qszElement.__hash__TcCs�t|t�s||krdSt|t�r|j|jkrdSd}d}|jD]T}t|t�r=t|t�r<|r5||�|�7}q||vr<dSq||j||d�7}|sN|rN|St|t�rs|jrs|j|}||krq|d7}|t|j�krp|d7}d}qd}q|S)N�r��count)r9r:�RootElementr4rO�_count�len)r5r>rOrG�elem_child_idxrH�
elem_childr!r!r"rQts8


�
��zElement._countcCs|j|dd�dkS)NFrNr�rQr=r!r!r"�__contains__��zElement.__contains__cCs|j|dd�S)NTrNrUr=r!r!r"rO��z
Element.countcCs
|j|Sr%r@)r5�keyr!r!r"�__getitem__�s
zElement.__getitem__cCs�d|j}|jD]\}}|dur|d||f7}q|d|7}q|jr=|d7}|d�dd�|jD��7}|d|j7}|S|d	7}|S)
Nz<%sz %s="%s"z %sz>
r)cS�(g|]}t|t�rt�|�nt|��qSr!�r9r:�html�escape�r&�cr!r!r"�
<listcomp>�s��z#Element.__str__.<locals>.<listcomp>z
</%s>�>)r1r/r4r*)r5�outputrYr'r!r!r"�__str__�s 
���zElement.__str__cCst|�Sr%)r:rKr!r!r"�__repr__�szElement.__repr__N)T)�__name__�
__module__�__qualname__r6r.rCrIrLrQrVrOrZrdrer!r!r!r"r3Ds
'r3cs$eZdZ�fdd�Zdd�Z�ZS)rPcst��dd�dS)Nr!)�superr6rK��	__class__r!r"r6�rWzRootElement.__init__cCsd�dd�|jD��S)Nr)cSr[r!r\r_r!r!r"ra�s(z'RootElement.__str__.<locals>.<listcomp>)r*r4rKr!r!r"rd�s�zRootElement.__str__)rfrgrhr6rd�
__classcell__r!r!rjr"rP�srPc@seZdZdS)�HTMLParseErrorN)rfrgrhr!r!r!r"rm�srmcsbeZdZhd�Z�fdd�Zdd�Zddd�Zed	d
��Zdd�Z	d
d�Z
dd�Zdd�Z�Z
S)�Parser>�br�hr�col�img�wbr�area�base�link�meta�embed�frame�input�param�track�source�spacercs"t���t�|_g|_i|_dSr%)rir6rP�root�	open_tags�element_positionsrKrjr!r"r6�s

zParser.__init__cCst||����r%)rm�getpos)r5�msgr!r!r"�error�rXzParser.errorNcCs@|s	|r	|j|}|dur|��}t|d�r|j|jf}d|S)N�linenozLine %d, Column %d)r�r�rFr��offset)r5�positionr>r!r!r"�format_position�s

zParser.format_positioncCs|jr|jdS|jSr7)r�rrKr!r!r"�current�s
zParser.currentcCs(|�||�||jvr|�|�dSdSr%)�handle_starttag�SELF_CLOSING_TAGS�
handle_endtag)r5�tag�attrsr!r!r"�handle_startendtag�s
�zParser.handle_startendtagcCsFt|�}t||�}|j�|�||jvr|j�|�|��|j|<dSr%)r2r3r�r.r�r�r�r�)r5r�r�r>r!r!r"r��s

zParser.handle_starttagcCsh|js|�d||��f�|j��}|j|kr2|js&|�d||��f�|j��}|j|ksdSdS)NzUnexpected end tag `%s` (%s))r�r�r�r<r1)r5r�r>r!r!r"r�s

�
�zParser.handle_endtagcCs|j�|�dSr%)r�r.)r5�datar!r!r"�handle_dataszParser.handle_data)NN)rfrgrhr�r6r�r��propertyr�r�r�r�r�rlr!r!rjr"rn�s
	
rncCsRt�}|�|�|��|j}|��t|j�dkr't|jdt�s'|jd}|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.
    rMr)	rn�feed�closerrCrRr4r9r:)r]�parser�documentr!r!r"�
parse_htmls

r�)�__doc__r]�html.parserr�django.utils.regex_helperrrr-r#r2r3rP�	Exceptionrmrnr�r!r!r!r"�<module>sx
K