
    j                     \    d Z ddlmZ ddlmZ ddlmZ ddlmZ dxZ	Z
 G d d	          Zd
S )zCSS4 selectors for Python.

cssselect2 is a straightforward implementation of CSS4 Selectors for markup
documents (HTML, XML, etc.) that can be read by ElementTree-like parsers
(including cElementTree, lxml, html5lib, etc.)

    )ascii_lower   )compile_selector_list)SelectorError)ElementWrapperz0.9.0c                   :    e Zd ZdZd Zd Zd Zed             ZdS )Matcherz=A CSS selectors storage that can match against HTML elements.c                 h    i | _         i | _        i | _        i | _        g | _        g | _        d| _        d S )Nr   )id_selectorsclass_selectorslower_local_name_selectorsnamespace_selectorslang_attr_selectorsother_selectorsorder)selfs    Z/home/ubuntu/budget-transfer-bot/.venv/lib/python3.11/site-packages/cssselect2/__init__.py__init__zMatcher.__init__   s=    !*,'#% #% !


    c                    | xj         dz  c_         |j        rdS |j        |j        | j         |j        |f}|j        5| j                            |j        g                               |           dS |j	        5| j
                            |j	        g                               |           dS |j        5| j                            |j        g                               |           dS |j        5| j                            |j        g                               |           dS |j        r| j                            |           dS | j                            |           dS )a  Add a selector and its payload to the matcher.

        :param selector:
            A :class:`compiler.CompiledSelector` object.
        :param payload:
            Some data associated to the selector,
            such as :class:`declarations <tinycss2.ast.Declaration>`
            parsed from the :attr:`tinycss2.ast.QualifiedRule.content`
            of a style rule.
            It can be any Python object,
            and will be returned as-is by :meth:`match`.

        r   N)r   never_matchestestspecificitypseudo_elementidr   
setdefaultappend
class_namer   
local_namer   lower_local_name	namespacer   requires_lang_attrr   r   )r   selectorpayloadentrys       r   add_selectorzMatcher.add_selector   sj    	

a

! 	F M8/X=T ;"((b99@@GGGGG , ++H,?DDKKERRRRR ,+66)2/ //5ve}}}}}+$//0BBGGNNuUUUUU( 	/$++E22222 ''.....r   c                    g }|j         5|j         | j        v r'|                     || j        |j                  |           |j        D ]-}|| j        v r"|                     || j        |         |           .t          |j                  }|| j        v r"|                     || j        |         |           |j        | j	        v r'|                     || j	        |j                 |           d|j
        j        v r|                     || j        |           |                     || j        |           |                                 |S )a  Match selectors against the given element.

        :param element:
            An :class:`ElementWrapper`.
        :returns:
            A list of the payload objects associated to selectors that match
            element, in order of lowest to highest
            :attr:`compiler.CompiledSelector` specificity and in order of
            addition with :meth:`add_selector` among selectors of equal
            specificity.

        Nlang)r   r   add_relevant_selectorsclassesr   r   r   r   namespace_urlr   etree_elementattribr   r   sort)r   elementrelevant_selectorsr   
lower_names        r   matchzMatcher.matchB   s     :!gjD4E&E&E''*7:68JL L L "/ 	S 	SJT111++T1*=?QS S S !!344
888''8D"$ $ $  D$<<<''1'2GH"$ $ $ W*111''13EG G G 	##GT-ACUVVV!!!!!r   c                 d    |D ],\  }}}}} ||           r|                     ||||f           -d S )N)r   )r/   	selectorsr0   r   r   r   pseudor$   s           r   r)   zMatcher.add_relevant_selectorsm   sY    9B 	Q 	Q5D+ufgtG}} Q"));vw*OPPP	Q 	Qr   N)	__name__
__module____qualname____doc__r   r&   r2   staticmethodr)    r   r   r	   r	      si        GG  "/ "/ "/H)" )" )"V Q Q \Q Q Qr   r	   N)r9   webencodingsr   compilerr   parserr   treer   VERSION__version__r	   r;   r   r   <module>rB      s     % $ $ $ $ $ , + + + + + ! ! ! ! ! !             +^Q ^Q ^Q ^Q ^Q ^Q ^Q ^Q ^Q ^Qr   