403Webshell
Server IP : 209.209.40.120  /  Your IP : 216.73.217.112
Web Server : Microsoft-IIS/10.0
System : Windows NT NEWWWW 10.0 build 17763 (Windows Server 2019) i586
User : NEWWWW$ ( 0)
PHP Version : 8.3.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /Python312/Lib/site-packages/soupsieve/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /Python312/Lib/site-packages/soupsieve/__pycache__/css_parser.cpython-312.pyc
�

	�g����dZddlmZddlZddlmZddlmZddlmZ	ddlm
Zdd	lmZddl
Z
dd
lmZmZmZmZdZhd�Zhd
�Zhd�Zhd�Zhd�ZeezezezezZdZde�d�ZdZde�de�d�Zde�d�Zde�de�d�Zde�de�d�Z de�de�d �Z!d!e�d"e�d#e �d$�Z"de�d%e�d&e"�d'e�d(e�d)�Z#d*e ��Z$d+e ��Z%d,e �d-e �d.�Z&d/e�d0e �d1e �de#��Z'd2e �d3e�d4�Z(d2e �d3e�d5�Z)d6e �d�Z*d7Z+e�d8�Z,d9e(��Z-d:e ��Z.d;e)�d<e!�d=e�d>e�d?e�e�d@e�d?e�e�dA�Z/dBe)�dCe!�dDe�dE�Z0e)�dFe"�de�dGe�d?e"�dHe�d8�Z1e)�dIe�d8�Z2e�dJe�dKe�d?�Z3e)�dFe"�de�dGe�d?e"�dHe�d8�Z4ejjdLe�dM�ejl�Z7ejjdLe�dNe�d�ejl�Z8ejjdOe�dPe�dQ�ejl�Z9ejjdRe"�dSe�dGe�dT�ejt�Z;ejje�Z<ejjdUe�d?��Z=ejje�dV��Z>ejjdUe*�dW�ejt�Z?dXZ@dYZAdZBdZZCd[ZDd\ZEd]ZFd^ZGd_ZHd`ZIdaZJdbZKdcZLddZMeeM�e�										d�df��ZNd�dg�ZOd�dh�ZPd�d�di�ZQd�dj�ZRGdk�dl�ZSGdm�dneS�ZTGdo�dp�ZUGdq�dr�ZVeVds�j�eBeFz�t�ZXeVdu�j�eBeFz�t�ZYeVdv�j�eBeFzeEz�t�ZZeVdw�j�eBeFzeGz�t�Z[eVdx�j�eBeFz�t�Z\eVdy�j�eBeFz�t�Z]eVdz�j�eBeFz�t�Z^eVd{�j�eBeFz�t�Z_eVd|�j�eBeFzeKz�t�Z`eVd}�j�eB�t�ZaeVd~�j�eBeFz�t�ZbeVd�j�eBeFz�t�ZceVd��j�eBeIzeFz�t�ZdeVd��j�eBeJzeFz�t�Zey)�zCSS selector parser.�)�annotationsN)�	lru_cache�)�util)�	css_match)�	css_types)�SelectorSyntaxError)�Match�Any�Iterator�casti��>�:link�:root�:empty�:scope�:checked�:default�:defined�:enabled�	:any-link�	:disabled�	:in-range�	:optional�	:required�
:read-only�:last-child�:only-child�:read-write�:first-child�
:last-of-type�
:only-of-type�
:out-of-range�:first-of-type�:indeterminate�:placeholder-shown>�:past�:focus�:hover�:active�:future�:paused�:target�:playing�:visited�:local-link�
:focus-within�
:user-invalid�:focus-visible�:target-within�:host�:current>�:matches�:is�:has�:not�:where�	:contains�:-soup-contains�:-soup-contains-own>�
:host-contextr4r5>�:dir�:lang�
:nth-child�:nth-of-type�:nth-last-child�:nth-last-of-typez(?:\r\n|(?!\r\n)[\n\f\r])z	(?:[ \t]|�)z"(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)z(?:�|z(?:\\(?:[a-f0-9]{1,6}z?|[^\r\n\f]|$))z?|[^\r\n\f]|$|z))z8
(?:(?:-?(?:[^\x00-\x2f\x30-\x40\x5B-\x5E\x60\x7B-\x9f]|z>)+|--)
(?:[^\x00-\x2c\x2e\x2f\x3A-\x40\x5B-\x5E\x60\x7B-\x9f]|z)*)
z (?:[-+])?(?:[0-9]+n?|n)(?:(?<=n)z	*(?:[-+])z
*(?:[0-9]+))?z(?:"(?:\\(?:.|z)|[^\\"\r\n\f]+)*?"|'(?:\\(?:.|z)|[^\\'\r\n\f]+)*?'|z+)z*(?P<cmp>[!~^|*$]?=)z*(?P<value>z)(?:z*(?P<case>[is]))?)?z*\]z\#z\.z(?P<tag_ns>(?:z|\*)?\|)?(?P<tag_name>z|\*)z\[z*(?P<attr_ns>(?:z|\*)?\|)?(?P<attr_name>z
(?P<name>:z)(?P<open>\(z*)?z*)z(?P<name>:(?=--)�&z*\)�:z@Pz
(?P<pseudo_nth_child>z
(?P<nth_child>z|even|odd))(?:z*\)|(?P<of>�*z*ofz*))
z
(?P<pseudo_nth_type>z
(?P<nth_type>z|even|odd))z*\)
z(?P<values>z*,z)*)z(?P<dir>ltr|rtl)z*?(?P<relation>[,+>~]|z(?![,+>~]))z(?:(\\[a-f0-9]{1,6}z?)|(\\[^\r\n\f])|(\\$))z?)|(\\[^\r\n\f])|(\\$)|(\\z'(?P<s1>[-+])?(?P<a>[0-9]+n?|n)(?:(?<=n)z
*(?P<s2>[-+])z*(?P<b>[0-9]+))?z
(?:(?P<value>z)|(?P<split>z*))�^z*$�$�,� ����� �@��iii�)�maxsizec�~�t|�}tj|t|||��j	�|||�S)zCached CSS compile.��custom�flags)�process_custom�cm�	SoupSieve�	CSSParser�process_selectors)�pattern�
namespacesrYrZ�custom_selectorss     �6C:\Python312\Lib\site-packages\soupsieve/css_parser.py�_cached_css_compilerd�sH��&�f�-��
�<�<����#��	
��
�
���
�
�
�c�,�tj�y)zPurge the cache.N)rd�cache_clear�rerc�_purge_cacheri�s���#�#�%rec���i}|�r|j�D]_\}}tj|�}tj	|��td|�d���||vrt
d|�d���||t|�<�a|S)zProcess custom.z
The name 'z)' is not a valid custom pseudo-class namezThe custom selector 'z' has already been registered)�itemsr�lower�	RE_CUSTOM�matchr	�KeyError�css_unescape)rYrb�key�value�names     rcr[r[�s�����
�� �,�,�.�	9�J�C���:�:�c�?�D����t�$�,�)�J�t�f�<e�*f�g�g��'�'��!6�t�f�<Y�Z�[�[�38��\�$�/�0�
	9��rec�F�dd�}|stntj||�S)zs
    Unescape CSS value.

    Strings allow for spanning the value on multiple strings by escaping a new line.
    c��|jd�r6t|jd�ddd�}|dk(rt}t|�}|S|jd�r|jd�dd}|S|jd�rd}|Sd}|S)	z(Replace with the appropriate substitute.rNrQrrN����)�group�int�UNICODE_REPLACEMENT_CHAR�chr)�m�	codepointrrs   rc�replacezcss_unescape.<locals>.replace�s���
�7�7�1�:��A�G�G�A�J�q�r�N�B�/�I��A�~�4�	��	�N�E����W�W�Q�Z��G�G�A�J�q�r�N�E����W�W�Q�Z��E����E��re)r}�
Match[str]�return�str)�
RE_CSS_ESC�RE_CSS_STR_ESC�sub)�content�stringrs   rcrprp�s ���"%�J�.�=�=�g�w�O�Orec�z�g}t|�}|dkDxr|ddk(}|dk(r|r|jd|���n�t|�D]�\}}t|�}|dk(r|jd��(d|cxkrdksn|dk(r|jd|d�d	���Q|dk(s|r*|dk(r%d
|cxkrdkrnn|jd|d�d	����|dvs:|d
k\s5d
|cxkrdks*nd
|cxkrdksnd|cxkrdksnd|cxkrdkrnn|j|���|jd|�����dj	|�S)zEscape identifier.r�-r�\rw���xrM�0�9)�-�_rT�A�Z�a�zrx)�len�append�	enumerate�ord�join)�identr��length�
start_dash�index�cr~s       rc�escaper�	sG���F�
��Z�F��!��/��a��C��J�
��{�z��
�
��5�'�l�#�!�%�(�	(�H�E�1��A��I��D� ��
�
�h�'��)�+�t�+�	�T�0A��
�
��9�Q�-�q�1�2��1�*����
�$�)�B[�W[�B[��
�
��9�Q�-�q�1�2��\�)�Y�$�->�4�9�C\�X\�C\���*�d�*��	�0I�T�0I�t�W`�Oh�dh�Oh��
�
�a� ��
�
��1�#�h�'�	(��7�7�6�?�rec�(�eZdZdZdd�Zdd�Zdd�Zy)	�SelectorPattern�Selector pattern.c��||_tj|tjtjztj
z�|_y)�Initialize.N)rs�re�compile�I�X�U�
re_pattern)�selfrsr`s   rc�__init__zSelectorPattern.__init__(s2����	��*�*�W�b�d�d�R�T�T�k�B�D�D�.@�A��rec��|jS)�	Get name.)rs�r�s rc�get_namezSelectorPattern.get_name.s���y�y�rec�:�|jj||�S)�Match the selector.)r�rn)r��selectorr�rZs    rcrnzSelectorPattern.match3s�����$�$�X�u�5�5reN)rsr�r`r�r��None�r�r��r�r�r�rzrZrzr�zMatch[str] | None��__name__�
__module__�__qualname__�__doc__r�r�rnrhrercr�r�%s���B��
6rer�c�(�eZdZdZdd�Zdd�Zdd�Zy)	�SpecialPseudoPatternr�c�&�i|_|D]/}|d}|d||d�}|dD]}||j|<��1d|_tjttj
tjztjz�|_y)r�rrvrNrN)	�patterns�matched_namer�r��PAT_PSEUDO_CLASS_SPECIALr�r�r��re_pseudo_name)r�r��prsr`�pseudos      rcr�zSpecialPseudoPattern.__init__<s�����
��	0�A��Q�4�D��a��d�4��1��&�G��A�$�
0��(/��
�
�f�%�
0�	0�!��� �j�j�)A�2�4�4�"�$�$�;�QS�QU�QU�CU�V��rec�R�|j�dS|jj�S)r�rx)r�r�r�s rcr�zSpecialPseudoPattern.get_nameIs)���&�&�.�r�P�D�4E�4E�4N�4N�4P�Prec��d}|jj||�}|rftjt	|jd���}|jj|�}|r|j|||�}|r||_|S)r�Nrs)	r�rnrrlrpryr��getr�)r�r�r�rZr�r}rsr`s        rcrnzSpecialPseudoPattern.matchNsx�������%�%�h��6����:�:�l�1�7�7�6�?�;�<�D��m�m�'�'��-�G�� ���x���>���(/�D�%��
reN)r�zCtuple[tuple[str, tuple[str, ...], str, type[SelectorPattern]], ...]r�r�r�r�r�rhrercr�r�9s���W�Q�

rer�c�4�eZdZdZdd�Zdd�Zd	d�Zd
d�ZeZy)�	_Selectorz�
    Intermediate selector class.

    This stores selector data for a compound selector as we are acquiring them.
    Once we are done collecting the data for a compound selector, we freeze
    the data in an object that can be pickled and hashed.
    c�,�|jdd�|_|jdg�|_|jdg�|_|jdg�|_|jdg�|_|jdg�|_|jdg�|_|jd	d�|_|jd
g�|_	|jdg�|_
|jdd
�|_|jdd�|_y)r��tagN�ids�classes�
attributes�nth�	selectors�	relations�rel_type�contains�langrZr�no_matchF)
r�r�r�r�r�r�r�r�r�r�r�rZr�)r��kwargss  rcr�z_Selector.__init__gs����:�:�e�T�*����:�:�e�R�(����z�z�)�R�0��� �*�*�\�2�6����:�:�e�R�(������K��4������K��4����
�
�:�t�4��
��
�
�:�r�2��
��J�J�v�r�*��	��Z�Z���+��
��
�
�:�u�5��
rec��|rG|d}|jj|dd�tj|j	�g�Stj�S)zFreeze relation.rrN)r��extend�ct�SelectorList�freeze)r�r��sels   rc�_freeze_relationsz_Selector._freeze_relationswsL����A�,�C��M�M� � ��1�2��/��?�?�C�J�J�L�>�2�2��?�?�$�$rec��|jrtj�Stj|jt|j�t|j�t|j�t|j�t|j�|j|j�|jt|j�t|j�|j �S)zFreeze self.)r�r��SelectorNull�Selectorr��tupler�r�r�r�r�r�r�r�r�r�rZr�s rcr�z_Selector.freeze�s����=�=��?�?�$�$��;�;�����d�h�h���d�l�l�#��d�o�o�&��d�h�h���d�n�n�%��&�&�t�~�~�6��
�
��d�m�m�$��d�i�i� ��
�
��
rec�@�d|j�d|j�d|j�d|j�d|j�d|j
�d|j�d|j�d	|j�d
|j�d|j�d|j�d
�S)zString representation.z_Selector(tag=z, ids=z
, classes=z
, attributes=z, nth=z, selectors=z, relations=z, rel_type=z, contains=z, lang=z, flags=z, no_match=rE)r�r�r�r�r�r�r�r�r�r�rZr�r�s rc�__str__z_Selector.__str__�s����T�X�X�L��t�x�x�l�*�T�\�\�DT�Ta�bf�bq�bq�at�u��8�8�,�l�4�>�>�*<�L����HZ�[��
�
�(��D�M�M�3D�G�D�I�I�=�X`�ae�ak�ak�`n�o��
�
�(��
+�	
reN)r�rr�r�)r��list[_Selector]r��ct.SelectorList)r�zct.Selector | ct.SelectorNullr�)	r�r�r�r�r�r�r�r��__repr__rhrercr�r�^s"���6� %��(
��Hrer�c�2�eZdZdZede�eddeefddeefdde	efd	d
e
efddeeff�ed
e�ede
�ede�ede�ede�ede�ede�ede�ede�ede�fZ		d(							d)d�Zd*d�Zd*d�Zd*d�Z												d+d�Z										d,d�Z												d-d�Z														d.d�Z																		d/d �Zd*d!�Z d*d"�Z!d*d#�Z"d*d$�Z#		d0							d1d%�Z$d2d&�Z%d0d3d'�Z&y)4r^zParse CSS selectors.�pseudo_close�pseudo_contains)r;r<r=�pseudo_nth_child)rArC�pseudo_nth_type)rBrD�pseudo_lang)r@�
pseudo_dir)r?�pseudo_class_custom�pseudo_class�pseudo_element�amp�at_rule�id�classr��	attribute�combineNc��|jdd�|_||_|jtjz|_|�i|_y||_y)r��rwN)rr`rZr�DEBUG�debugrY)r�r�rYrZs    rcr�zCSSParser.__init__�sD�� �'�'���9�����
��Z�Z�$�*�*�,��
�"�N�b�����rec��d}|jd�}|jd�r$tj|jd��nd}|jd�rt|jd�dd�nd}t|jd��}d}	d}
d}|r)|d	k(rtj
nd
tjz}nLtj|�dk(r$tj
tjz}d}	ntj}|rY|jd
�jd�rt|jd
�ddd�}nt|jd
��}|sd}
�n�|jd�r.t	jdt	j|�z|�}
�nS|jd�r.t	jdt	j|�z|�}
�n|jd�r-t	jdt	j|�z|�}
n�|jd�rH|rtj|�rdnt	j|�}t	jd|z|�}
n}|jd�r-t	jdt	j|�z|�}
n?t	jdt	j|�z|�}
|jd�rd}|	r!|
rt	j|
j�}
tj|||
|
�}|rjt�}|j j#|�tj$|j'�gdd�}|j(j#|�d}|S|j j#|�d}|S)z8Create attribute selector from the returned regex match.F�cmp�caseN�attr_ns���rx�	attr_name�ir�typeTrr��"�'rrJz^%s.*rKz.*?%s$rIz.*?%s.*�~z[^\s\S]z7.*?(?:(?<=^)|(?<=[ \t\r\n\f]))%s(?=(?:[ \t\r\n\f]|$)).*rFz^%s(?:-.*)?$z^%s$�!)ryrrlrpr�r��DOTALL�
startswithr�r��RE_WS�searchr`r��SelectorAttributer�r�r�r�r�r�)r�r�r}�has_selector�inverse�opr��ns�attr�is_type�pattern2rrrZr`�sel_attr�sub_sel�not_lists                 rc�parse_attribute_selectorz"CSSParser.parse_attribute_selector�s�����
�W�W�U�^��./�g�g�f�o�t�z�z�!�'�'�&�/�*�4��67�g�g�i�6H�\�!�'�'�)�,�S�b�1�
2�b���A�G�G�K�0�1���������!�S�[�R�T�T�a�2�9�9�<�E�
�Z�Z��
��
'��D�D�2�9�9�$�E��G��I�I�E�
��w�w�w��*�*�:�6�$�Q�W�W�W�%5�a��%;�T�B��$�Q�W�W�W�%5�6����G�
�]�]�3�
��j�j��B�I�I�e�,<�!<�e�D�G�
�]�]�3�
��j�j��R�Y�Y�u�-=�!=�u�E�G�
�]�]�3�
��j�j��b�i�i��.>�!>��F�G�
�]�]�3�
�',�u�|�|�E�/B�J��	�	�RW�HX�E��j�j�![�^c�!c�ej�k�G�
�]�]�3�
��j�j��2�9�9�U�3C�!C�U�K�G��j�j��2�9�9�U�+;�!;�U�C�G��}�}�S�!����w��z�z�'�/�/�2�H��'�'��b�'�8�D����k�G����%�%�h�/�������(8�'9�4��G�H��M�M� � ��*�����
�N�N�!�!�(�+����rec���|jd�rt|jd�dd�nd}t|jd��}tj||�|_d}|S)z#Parse tag pattern from regex match.�tag_nsNr�tag_nameT)ryrpr��SelectorTagr�)r�r�r}r�prefixr�s      rc�parse_tag_patternzCSSParser.parse_tag_patterns\��:;����9J��a�g�g�h�/���4�5�PT���1�7�7�:�.�/���.�.��f�-������rec�"�tjt|jd���}|jj|�}|�;t
d|�d|jd���|j|jd���t|tj�sR|j|=t||j|j��jt��}||j|<|j j#|�d}|S)z�
        Parse custom pseudo class alias.

        Compile custom selectors as we need them. When compiling a custom selector,
        set it to `None` in the dictionary so we can avoid an infinite loop.
        rszUndefined custom selector 'z' found at position rrX�rZT)rrlrpryrYr�r	�endr`�
isinstancer�r�r^rZr_�
FLG_PSEUDOr�r�)r�r�r}rr�r�s      rc�parse_pseudo_class_customz#CSSParser.parse_pseudo_class_customs������L������9�:���;�;�?�?�6�*����%�-�f�X�5I�!�%�%�PQ�(��T�������a���
��(�B�O�O�4����F�#� �����D�J�J����j��1�
�#+�D�K�K����
�
���X�&����rec���d}tjt|jd���}|jd�rd}|r0|tvr(|j|||||j
d��}||fS|�s�|tv�r�|dk(r%|xjtjzc_�n�|dk(r'|xjtjzc_d}�n]|dk(r%|xjtjzc_�n3|d	k(r%|xjtjzc_�n	|d
vr!|jjt ��n�|dk(r!|jjt"��n�|dk(r!|jjt$��n�|d
k(r!|jjt&��nr|dk(r!|jjt(��nL|dk(r!|jjt*��n&|dk(r!|jjt,��n|dk(r!|jjt.��n�|dk(r!|jjt0��n�|dk(r!|jjt2��n�|dk(r!|jjt4��nh|dk(r!|jjt6��nB|dk(r!|jjt8��n|dk(rG|j:jtj<dddddtj>����n�|dk(rG|j:jtj<dddddtj>����n�|dk(rG|j:jtj<dddddtj>����n8|dk(rF|j:jtj<dddddtj>���n�|dk(rr|j:jAtj<dddddtj>��tj<dddddtj>��g�nv|dk(rq|j:jAtj<dddddtj>��tj<dddddtj>��g�d}||fS|rB|tBvr:|jE||j
d�tFtHz�d|_%d}||fS|s|tLvr
d|_%d}||fS|tNvr*tQd|�d�|jR|jUd���tQd|�d �|jR|jUd���)!zParse pseudo class.Frs�openTrrrrr)rrrrr$rrrrrrrr"r%rrrr#r rr!z!Invalid syntax for pseudo class 'rz�' was detected as a pseudo-class and is either unsupported or invalid. If the syntax was not intended to be recognized as a pseudo-class, please escape the colon.)+rrlrpry�PSEUDO_COMPLEX�parse_pseudo_openr!�
PSEUDO_SIMPLErZr��SEL_ROOT�SEL_DEFINED�	SEL_SCOPE�	SEL_EMPTYr�r��CSS_LINK�CSS_CHECKED�CSS_DEFAULT�CSS_INDETERMINATE�CSS_DISABLED�CSS_ENABLED�CSS_REQUIRED�CSS_OPTIONAL�
CSS_READ_ONLY�CSS_READ_WRITE�CSS_IN_RANGE�CSS_OUT_OF_RANGE�CSS_PLACEHOLDER_SHOWNr��SelectorNthr�r��PSEUDO_COMPLEX_NO_MATCH�parse_selectorsr#�FLG_OPENr��PSEUDO_SIMPLE_NO_MATCH�PSEUDO_SUPPORTEDr	r`�start)r�r�r}r�	iselector�is_html�complex_pseudor�s        rc�parse_pseudo_classzCSSParser.parse_pseudo_class9s��������L������9�:���7�7�6�?�!�N��f��6��1�1�#�v�|�Y�XY�X]�X]�^_�X`�a�L�b�W�$�$�a �F�m�$;��� ��	�	�R�[�[�(�	��:�%��	�	�R�^�^�+�	����8�#��	�	�R�\�\�)�	��8�#��	�	�R�\�\�)�	��1�1��
�
�$�$�X�.��:�%��
�
�$�$�[�1��:�%��
�
�$�$�[�1��+�+��
�
�$�$�%6�7��;�&��
�
�$�$�\�2��:�%��
�
�$�$�[�1��;�&��
�
�$�$�\�2��;�&��
�
�$�$�\�2��<�'��
�
�$�$�]�3��=�(��
�
�$�$�^�4��;�&��
�
�$�$�\�2��?�*��
�
�$�$�%5�6��/�/��
�
�$�$�%:�;��>�)������r�~�~�a���5�%����IZ�[�\��=�(������r�~�~�a���5�$����HY�Z�[��+�+������r�~�~�a���4�����HY�Z�[��?�*������r�~�~�a���4��r���GX�Y�Z��=�(���������q�%��E�5�"�/�/�BS�T����q�%��E�4����AR�S����?�*���������q�%��D�%����AR�S����q�%��D�$����@Q�R��� �L�,�W�$�$�+��*A� A�� � ��A�E�E�!�H�j�8�6K�L��C�L��L�$�W�$�$�# �F�.D�$D��C�L��L��W�$�$��'�
'�%�3�F�8�1�=��������
��
�&��F�8�n�n��������
�	�
rec���|j�}|jd�rd}nd}tjt	|d��|d<tj|jd|z��}|dk(rd}d}	d	}
�n|d
k(rd}d}	d	}
�nttttj|��}|jd�r|jd�d
k(rd
nd}|jd�}
|
jd�}
|
jd�r|dz
}n|
r	||
ddz
}n||
z
}|jd�r|jd�d
k(rd
nd}|jd�r||jd�z
}nd}t|d�}t|d�}	|d}|dk(r�|jd�r.|j||jd�t t"z�}nt$}|dk(r7|j&j)t+j,||
|	dd|��d	}|S|dk(r3|j&j)t+j,||
|	dd	|��d	}|S|dk(rI|j&j)t+j,||
|	d	dt+j.���d	}|S|dk(rE|j&j)t+j,||
|	d	d	t+j.���d	}|S)zParse `nth` pseudo.r��_child�_typersr��evenrNrT�oddr�s1r�rx�a�n�1Nr�s2�b�0�
�ofrAFrCrBrD)�	groupdictr�rrlrpr
r
r��RE_NTHrnry�endswithr
rzr=r!r#r>�CSS_NTH_OF_S_DEFAULTr�r�r�r;r�)r�r�r}rrB�mdict�postfixr�rKrO�var�	nth_parts�_s1rL�_s2�
pseudo_sel�nth_sels                 rc�parse_pseudo_nthzCSSParser.parse_pseudo_nth�s������
���9�9�'�(��G��G��
�
�<��f�
�#>�?��f�
��*�*�U�Y�Y�u�w��7�8���f���B��B��C�
��
��B��B��C��U�3�Z����g�)>�?�I�"����.�9�?�?�4�3H�C�3O�#�UW�C�����$�A��*�*�S�/�C��|�|�C� ��s�
����q��"�v�
���q���"����.�9�?�?�4�3H�C�3O�#�UW�C����s�#��y���s�+�+�����S�"��B��S�"��B��6�]�
��h���w�w�t�}��.�.�y�!�%�%��(�J�QY�DY�Z��/���\�)������r�~�~�b�#�r�5�%��Q�R������0�0������r�~�~�b�#�r�5�$��P�Q������^�+������r�~�~�b�#�r�4�����HY�Z�[������2�2������r�~�~�b�#�r�4��r���GX�Y�Z����rec���ttz}|dk(r
|tz}n|dk(r
|tz}n
|dvr	|tz}|j
j
|j|||��d}|S)z"Parse pseudo with opening bracket.r9r8)r:r7T)r#r>�FLG_NOT�FLG_RELATIVE�FLG_FORGIVEr�r�r=)r�r�rsrrBr�rZs       rcr(zCSSParser.parse_pseudo_open�so���X�%���6�>��W��E�
�V�^��\�!�E�
�&�
&��[� �E��
�
���T�1�1�)�U�E�J�K����rec��|jd�j�}|st}|tk(rH||_|dj
j
|�dtz}|j
t��nS|r&||_|dj
j
|�n&|ddtk7rtd|��|j|��d|z}t�}d}|||fS)�Parse combinator tokens.�relationrrHrNz%The multiple combinators at position F)
ry�strip�
WS_COMBINATOR�COMMA_COMBINATORr�r�r�r�r	r`)r�r�r}rr�r�r��
combinators        rc�parse_has_combinatorzCSSParser.parse_has_combinator�s����W�W�Z�(�.�.�0�
��&�J��)�)�#�C�L��b�M�#�#�*�*�3�/��]�*�H����Y�[�)��'����"�
�'�'�.�.�s�3��!�"���.�*�;�E�7�C��L�L�����Z�'�H��k�����S�(�*�*rec	�L�|jd�j�}	|	st}	|sP|r	|	tk7rt	d|	�d|�d�|j
|��|	tk(r�d|_|dd�=|j|�n�|	tk(r[|js|stjdd�|_|jj|�|j|�|dd�=n8|jj|�|	|_
|dd�=|j|�t�}d}||fS)	rfrgzThe combinator 'z' at position z , must have a selector before itTNrIF)ryrhrirjr	r`r�r�r�r�rr�r�r�r�)
r�r�r}rr�r��	is_pseudo�
is_forgiver�rks
          rc�parse_combinatorzCSSParser.parse_combinators���W�W�Z�(�.�.�0�
��&�J����/?�!?�)�&�z�l�.���Gg�h��L�L�����-�-�#����a�L�� � ��%��-�-��w�w�y� �n�n�S�$�7�C�G��
�
�$�$�Y�/�� � ��%��a�L��
�
�$�$�Y�/�)����a�L�� � ��%��k�����S� � rec���|jd�}|jd�r+|jjt	|dd��d}|S|j
jt	|dd��d}|S)zParse HTML classes and ids.r�.rNT)ryr
r�r�rpr�)r�r�r}rr�s     rc�parse_class_idzCSSParser.parse_class_idNsq���7�7�1�:�����s�#��K�K���|�H�Q�R�L�9�:�����
�G�G�N�N�<�����5�6����rec�6�tjt|jd���}|dk(rt	j
dt�|dk(}t|jd��}g}tj|�D]b}|jd�r�|jd�}	|	jd�rt|	d	d
d�}	nt|	�}	|j|	��d|jjtj||��d}|S)zParse contains.rsr;z\The pseudo class ':contains' is deprecated, ':-soup-contains' should be used moving forward.r=�values�splitrr)rrrrT)rrlrpry�warnings�warn�
FutureWarning�	RE_VALUES�finditerr
r�r�r��SelectorContains)
r�r�r}rr��contains_ownrur��tokenrrs
          rc�parse_pseudo_containszCSSParser.parse_pseudo_containsYs������L������9�:���[� ��M�M�n��
��!6�6���a�g�g�h�/�0�����'�'��/�	#�E��{�{�7�#���K�K��(�E����
�+�$�U�1�R�[�$�7��$�U�+���O�O�E�"�	#�	�����B�/�/��,�G�H����rec��|jd�}g}tj|�D]b}|jd�r�|jd�}|jd�rt	|ddd�}nt	|�}|j|��d|jjtj|��d}|S)zParse pseudo language.rurvrrrrrT)	ryrzr{r
rpr�r�r��SelectorLang)r�r�r}rrur�r~rrs        rc�parse_pseudo_langzCSSParser.parse_pseudo_langrs�������"�����'�'��/�		#�E��{�{�7�#���K�K��(�E����
�+�$�U�1�R�[�$�7��$�U�+���O�O�E�"�		#�	���������1�2����rec���tj|jd��dk(rtjntj
}|xj|zc_d}|S)zParse pseudo direction.�dir�ltrT)rrlryr��SEL_DIR_LTR�SEL_DIR_RTLrZ)r�r�r}rrrs     rc�parse_pseudo_dirzCSSParser.parse_pseudo_dir�sD��#'�*�*�Q�W�W�U�^�"<��"E����2�>�>���	�	�U��	����rec
��t�}g}d}d}g}dtz}	t|tz�}
t|tz�}t|t
z�}t|tz�}
t|tz�}t|tz�}t|tz�}t|tz�}t|tz�}t|tz�}t|tz�}|jr�|rtd�|
rtd�|rtd�|
rtd�|rtd�|rtd�|rtd	�|rtd
�|rtd�|rtd�|rtd
�|r|j!t��		t#|�\}}|dk(rt%d|j'd�����|dk(r'|xj(t*j,zc_d}�n
|dk(r|j/|||�}�n�|dk(r|j1|||||�\}}�n�|dk(rt%d|j'd�����|dk(r|j3|||�}�n�|dvr|j5||||�}�n~|dk(r|j7|||�}�nd|dk(r|j9|||�}d}�nH|dk(r�|sA|s8t;d|j'd���|j<|j'd���d|_|
rd}�n
t;d|j'd���|j<|j'd���|dk(r9|r|jA|||||	|�\}}}	n�|jC||||||||�\}}n�|dk(r|jE|||�}nk|d k(rO|r9t;d!|j'd��d"�|j<|j'd���|jG|||�}n|d#vr|jI|||�}|jKd�}��|	|
r|st;d$|��|j<|��|r�|jNs|st+jPd%d&�|_'|r&|	|_)|d'jTj!|�nW|jTjW|�|d&d&�=|j!|�n%|r#|r|sd|_|d&d&�=|j!|�d}|st;d|��|j<|��|rt*jX|d'_|rt*jZ|d'_|rt*j\|d'_|rt*j^|d'_|rt*j`|d'_t+jb|D�cgc]}|je���c}|
|�S#tL$rY���wxYwcc}w)(zParse selectors.FrHz    is_pseudo: Truez    is_open: Truez    is_relative: Truez    is_not: Truez    is_html: Truez    is_default: Truez    is_indeterminate: Truez    is_in_range: Truez    is_out_of_range: Truez    is_placeholder_shown: Truez    is_forgive: TrueTr�zAt-rules found at position rr�r�r�r�z!Pseudo-element found at position r�)r�r�r�r�r�z Expected a selector at position z)Unmatched pseudo-class close at position r�r�r�zTag name found at position z instead of at the start)r�r�z"Unclosed pseudo-class at position rINr)3r�ri�boolr>r#rcrb�FLG_HTML�FLG_DEFAULT�FLG_INDETERMINATE�FLG_IN_RANGE�FLG_OUT_OF_RANGE�FLG_PLACEHOLDER_SHOWNrdr��printr��next�NotImplementedErrorrArZr�r,r$rErr`r�r�r	r`r�rlrprrrsr!�
StopIterationr�rr�r�r��SEL_DEFAULT�SEL_INDETERMINATE�SEL_IN_RANGE�SEL_OUT_OF_RANGE�SEL_PLACEHOLDER_SHOWNr�r�)r�rBr�rZr�r�r�closedr�r��is_openrn�is_relative�is_notrC�
is_default�is_indeterminate�is_in_range�is_out_of_range�is_placeholder_shownrorqr}�ss                        rcr=zCSSParser.parse_selectors�s����k���	������	���&���u�x�'�(�����+�,�	��5�<�/�0���e�g�o�&���u�x�'�(���%�+�-�.�
���(9� 9�:���5�<�/�0���u�'7�7�8��#�E�,A�$A�B���%�+�-�.�
��:�:���+�,���)�*���-�.���(�)���)�*���,�-���2�3���-�.���1�2�#��6�7���,�-�����Y�[�)�D	���i����Q��)�#�-�0K�A�G�G�TU�J�<�.X�Y�Y��E�\��I�I����-�I�#'�L��1�1�#'�#A�#A�#�q�,�#W�L��N�*�,0�,C�,C�C��L�Zc�el�,m�)�L�'��,�,�-�0Q�RS�RY�RY�Z[�R\�Q]�.^�_�_��-�-�#'�#=�#=�c�1�l�#S�L��C�C�#'�#8�#8��a��y�#Y�L��M�)�#'�#9�#9�#�q�,�#O�L��L�(�#'�#8�#8��a��#N�L�"�G��N�*�'�)�"5�"B�1�7�7�1�:�,� O� $��� !����
�#��
(,����!%���1�G����PQ�
�|�T� �L�L��G�G�A�J���
�I�%�"�6:�6O�6O���L�)�X�u�7�3��c�8�-1�,A�,A���L�)�Y�	�S]�_d�-�)��c��K�'�#'�#@�#@��a��#V�L��E�\�#�1�9�!�'�'�!�*��E]�^� �L�L��G�G�A�J���
$(�#9�#9�#�q�,�#O�L��O�+�#'�#6�#6�s�A�|�#L�L����a���C�H�D�6�%�4�U�G�<������
���7�7�9��.�.��d�3����'����"�
�'�'�.�.�s�3��
�
�$�$�Y�/��a�L�� � ��%���)��C�L��!�����S�!��L��&�2�5�'�:������
��"$�.�.�I�b�M���"$�"6�"6�I�b�M���"$�/�/�I�b�M���"$�"5�"5�I�b�M���"$�":�":�I�b�M�����I�>�q����
�>���P�P��q�	��	��p ?s�I=V0�W�0	V=�<V=c#�"K�tj|�}|r|jd�nd}tj|�}|r|j	d�dz
n
t|�dz
}|jrtd|���||kr�d}|jD]�}|j|||j�}|s�#|j�}|jr2td|�d|jd��d|j	d����|jd�}||f��n|�P||}|dk(rd	|��}n)|d
k(rd|��}n|dk(rd
|��}n|dk(rd|��}nd|�d|��}t||j|��||kr��|jrtd�yy�w)zIterate selector tokens.rrz## PARSING: NzTOKEN: 'z' --> z
 at position �[z)Malformed attribute selector at position rrz%Malformed class selector at position �#z"Malformed id selector at position rHz,Malformed pseudo-class selector at position zInvalid character z
 position z## END PARSING)�RE_WS_BEGINrr!�	RE_WS_ENDrAr�r�r��
css_tokensrnrZr�ryr	r`)	r�r`r}r�r!�vrsr��msgs	         rc�
selector_iterzCSSParser.selector_iterFs�����
���w�'������a��1�����W�%��"#�q�w�w�q�z�A�~�#�g�,��*:���:�:��L���,�-��s�l��A��_�_�
���G�G�G�U�D�J�J�7����:�:�<�D��z�z�����f�Q�W�W�Q�Z�N�-�PQ�PW�PW�XY�PZ�|�\�]��E�E�!�H�E���'�M��
��y��E�N����8�E�e�W�M�C��#�X�A�%��I�C��#�X�>�u�g�F�C��#�X�H���P�C�.�q�e�:�e�W�E�C�)�#�t�|�|�U�C�C�5�s�l�6�:�:��"�#��s�B3F�6B?F�6Fc�Z�|j|j|j�||�S)zProcess selectors.)r=r�r`)r�r�rZs   rcr_zCSSParser.process_selectorsos(���#�#�D�$6�$6�t�|�|�$D�e�U�S�Sre)Nr)r�r�rYz'dict[str, str | ct.SelectorList] | NonerZrzr�r�)r�r�r}r�rr�r�r�)r�r�r}r�rr�rB� Iterator[tuple[str, Match[str]]]rCr�r�ztuple[bool, bool])
r�r�r}r�rr�rBr�r�r�)r�r�rsr�rr�rBr�r�rzr�r�)r�r�r}r�rr�r�r�r�r�r�rzr�ztuple[bool, _Selector, str])r�r�r}r�rr�r�r�r�r�rnr�ror�r�rzr�ztuple[bool, _Selector])rr)rBr�r�rzrZrzr�r�)r`r�r�r�)r�rzrZrzr�r�)'r�r�r�r�r��PAT_PSEUDO_CLOSEr��PAT_PSEUDO_CONTAINS�PAT_PSEUDO_NTH_CHILD�PAT_PSEUDO_NTH_TYPE�PAT_PSEUDO_LANG�PAT_PSEUDO_DIR�PAT_PSEUDO_CLASS_CUSTOM�PAT_PSEUDO_CLASS�PAT_PSEUDO_ELEMENT�PAT_AMP�PAT_AT_RULE�PAT_ID�	PAT_CLASS�PAT_TAG�PAT_ATTR�PAT_COMBINEr�r�rrr$rEr`r(rlrprsrr�r�r=r�r_rhrercr^r^�s����	��(8�9��&�K�'�#�	�$�%F�H\�^m�n�"�$I�K^�`o�p��
�O�_�M��y�.�/�J�
�
	
�	�-�/F�G���(8�9��(�*<�=���w�'��	�;�/���f�%����+���w�'���X�.��	�;�/�3�J�>;?��	7��7�8�7��	7�

�7�D�L��8`%�
�`%��`%��	`%�
4�`%��
`%�
�`%�D?�
�?��?��	?�
4�?�
�
?�B�
�����	�
4���
�
��.)+�
�)+��)+��	)+�
#�)+��
)+��)+�
%�)+�V.!�
�.!��.!��	.!�
#�.!�#�
.!��.!��.!��.!�
 �.!�`	��2�*���	uQ�3�uQ��uQ��	uQ�

�uQ�n'$�RTrer^zhtml|*:is(a, area)[href]r z\
    html|*:is(input[type=checkbox], input[type=radio])[checked], html|option[selected]
    z�
    :checked,

    /*
    This pattern must be at the end.
    Special logic is applied to the last selector.
    */
    html|form html|*:is(button, input)[type="submit"]
    aF
    html|input[type="checkbox"][indeterminate],
    html|input[type="radio"]:is(:not([name]), [name=""]):not([checked]),
    html|progress:not([value]),

    /*
    This pattern must be at the end.
    Special logic is applied to the last selector.
    */
    html|input[type="radio"][name]:not([name='']):not([checked])
    a�
    html|*:is(input:not([type=hidden]), button, select, textarea, fieldset, optgroup, option, fieldset)[disabled],
    html|optgroup[disabled] > html|option,
    html|fieldset[disabled] > html|*:is(input:not([type=hidden]), button, select, textarea, fieldset),
    html|fieldset[disabled] >
        html|*:not(legend:nth-of-type(1)) html|*:is(input:not([type=hidden]), button, select, textarea, fieldset)
    z|
    html|*:is(input:not([type=hidden]), button, select, textarea, fieldset, optgroup, option, fieldset):not(:disabled)
    z,html|*:is(input, textarea, select)[required]z2html|*:is(input, textarea, select):not([required])aW
    html|input:is(
        :not([type]),
        [type=""],
        [type=text],
        [type=search],
        [type=url],
        [type=tel],
        [type=email],
        [type=password],
        [type=number]
    )[placeholder]:not([placeholder='']):is(:not([value]), [value=""]),
    html|textarea[placeholder]:not([placeholder=''])
    z*|*a
    html|*:is(
        textarea,
        input:is(
            :not([type]),
            [type=""],
            [type=text],
            [type=search],
            [type=url],
            [type=tel],
            [type=email],
            [type=number],
            [type=password],
            [type=date],
            [type=datetime-local],
            [type=month],
            [type=time],
            [type=week]
        )
    ):not([readonly], :disabled),
    html|*:is([contenteditable=""], [contenteditable="true" i])
    z!
    html|*:not(:read-write)
    z�
    html|input:is(
        [type="date"],
        [type="month"],
        [type="week"],
        [type="time"],
        [type="datetime-local"],
        [type="number"],
        [type="range"]
    ):is(
        [min],
        [max]
    )
    )
r`r�razct.Namespaces | NonerY�ct.CustomSelectors | NonerZrzr�zcm.SoupSieve)r�r�)rYr�r�z dict[str, str | ct.SelectorList])F)r�r�r�r�r�r�)r�r�r�r�)fr��
__future__rr��	functoolsrrxrrr\rr�r	rw�typingr
rrr
r{r)r?r'r<�PSEUDO_SPECIALr@�NEWLINE�WS�COMMENTS�WSC�CSS_ESCAPES�CSS_STRING_ESCAPES�
IDENTIFIER�NTH�VALUE�ATTRr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rUr�rzrr�r�rmrjrir#rbrcr�r�r�r>r�r�r�rd�	_MAXCACHErdrir[rpr�r�r�r�r^r_r.r/r0r1r2r3r4r5r:rWr7r6r8r9rhrerc�<module>r�s.���"�	�����%��-�-�!���
�8��(	������!�#9�9�N�J�Md�d�gu�u��'���'��!���0��	�R�D��(��1���(���O�<��/��t�>�'��"�M��8�8C�}�E8�8C�}�E��
�

*�#��i��u�M�J��
�G�9�$C�G�9�L`�ak�`l�ln�q��

�c�U�&�s�e�;�u�g�T�#��FY�Z]�Y^�^a�b��
�z�l�	���*���	�
�J�<�'=�j�\��
N�����%�j�\�1H���TU�VZ�U[�\�� ���L���S�A��(���L���R�H��-�j�\��;��
���e�3�<���*�+�,���J�<� ���.�/�0��e�>�#��k�(��1�R�D���S��
�RS�TV�SW�X[�W\�]���
�-�.�/��U�+�c�U�#���
/�/�{�5�'��S�E��C�5�PQ�RW�QX�X[�\_�[`�`c�d��-�.�.>�s�e�3�G����,�R�D��C�5��B��2�3�;�u�g�S���R�PS�u�TU�V[�U\�\_�`c�_d�dg�h���R�Z�Z�0���5L�M�r�t�t�
T�
�����4�R�D�8R�SZ�R[�[]�^�`b�`d�`d�e��	����>�s�e�=�QT�PU�Ue�f�hj�hl�hl�	m���B�J�J�-��w�l�3�%�r�#��c�J�B�D�D�Q�	���
�
�2����b�j�j�A�c�U�!��%���B�J�J�3�%�r�{�#�	��B�J�J�!�3�4�A�6����=�	����
��
�
��������������������
�	��9���
��$��
&���	�
����,&��P�6�86�6�("�?�"�JA�A�HPT�PT�n�����*�x�/��0�	������*�x�/��0�	���
���*�x�/�+�=��>���
����*�x�/�2C�C��D�������*�x�/��0�
������*�x�/��0�	��2����*�x�/��0�
��8����*�x�/��0�
�"�
����*�x�/�2G�G��H��"!�	����*��%�����.��*�x�/��0�/�2�����*�x�/��0�	��
����*�|�3�h�>��?�
�"�
����*�'7�7�(�B��C�re

Youez - 2016 - github.com/yon3zu
LinuXploit