Ë
    £ëiÁ  ã                   óT   — 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y
)záCSS4 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                   ó2   — e Zd ZdZd„ Zd„ Zd„ Zed„ «       Zy)ÚMatcherz=A CSS selectors storage that can match against HTML elements.c                 óf   — i | _         i | _        i | _        i | _        g | _        g | _        d| _        y )Nr   )Úid_selectorsÚclass_selectorsÚlower_local_name_selectorsÚnamespace_selectorsÚlang_attr_selectorsÚother_selectorsÚorder)Úselfs    úS/var/www/html/chat/reports/venv/lib/python3.12/site-packages/cssselect2/__init__.pyÚ__init__zMatcher.__init__   s9   € ØˆÔØ!ˆÔØ*,ˆÔ'Ø#%ˆÔ Ø#%ˆÔ Ø!ˆÔØˆ�
ó    c                 ó<  — | xj                   dz  c_         |j                  ry|j                  |j                  | j                   |j                  |f}|j
                  �6| j                  j                  |j
                  g «      j                  |«       y|j                  �6| j                  j                  |j                  g «      j                  |«       y|j                  �6| j                  j                  |j                  g «      j                  |«       y|j                  �6| j                  j                  |j                  g «      j                  |«       y|j                   r| j"                  j                  |«       y| j$                  j                  |«       y)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   sB  € ð 	�
Š
�a‰�
à×!Ò!Øð �M‰M˜8×/Ñ/°·±¸X×=TÑ=TØðˆð �;‰;Ð"Ø×Ñ×(Ñ(¨¯©°bÓ9×@Ñ@ÀÕGØ× Ñ Ð,Ø× Ñ ×+Ñ+¨H×,?Ñ,?ÀÓD×KÑKÈEÕRØ× Ñ Ð,Ø×+Ñ+×6Ñ6Ø×)Ñ)¨2ó/ß/5©v°e­}Ø×ÑÐ+Ø×$Ñ$×/Ñ/°×0BÑ0BÀBÓG×NÑNÈuÕUØ×(Ò(Ø×$Ñ$×+Ñ+¨EÕ2à× Ñ ×'Ñ'¨Õ.r   c                 óô  — g }|j                   �B|j                   | j                  v r*| j                  || j                  |j                      |«       |j                  D ]1  }|| j                  v sŒ| j                  || j                  |   |«       Œ3 t        |j                  «      }|| j                  v r | j                  || j                  |   |«       |j                  | j                  v r*| j                  || j                  |j                     |«       d|j                  j                  v r| j                  || j                  |«       | j                  || 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.

        Ú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   sp  € ð  Ðà�:‰:Ð! g§j¡j°D×4EÑ4EÑ&EØ×'Ñ'Ø˜×*Ñ*¨7¯:©:Ñ6Ð8JôLð "Ÿ/™/ò 	SˆJØ˜T×1Ñ1Ò1Ø×+Ñ+Ø˜T×1Ñ1°*Ñ=Ð?QõSð	Sô
 ! ×!3Ñ!3Ó4ˆ
Ø˜×8Ñ8Ñ8Ø×'Ñ'Ø˜×8Ñ8¸ÑDØ"ô$ð × Ñ  D×$<Ñ$<Ñ<Ø×'Ñ'Ø˜×1Ñ1°'×2GÑ2GÑHØ"ô$ð �W×*Ñ*×1Ñ1Ñ1Ø×'Ñ'Ø˜×1Ñ1Ð3EôGð 	×#Ñ# G¨T×-AÑ-AÐCUÔVà×ÑÔ!Ø!Ð!r   c                 óZ   — |D ]&  \  }}}}} || «      sŒ|j                  ||||f«       Œ( y )N)r   )r/   Ú	selectorsr0   r   r   r   Úpseudor$   s           r   r)   zMatcher.add_relevant_selectorsm   s<   € à9Bò 	QÑ5ˆD�+˜u f¨gÙ�G�}Ø"×)Ñ)¨;¸¸vÀwÐ*OÕPñ	Qr   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r&   r2   Ústaticmethodr)   © r   r   r	   r	      s,   „ ÙGòò"/òH)"ðV ñQó ñQr   r	   N)r9   Úwebencodingsr   Úcompilerr   Úparserr   Útreer   ÚVERSIONÚ__version__r	   r;   r   r   ú<module>rB      s2   ðñõ %õ ,Ý !Ý  àÐ €ˆ+÷^Qò ^Qr   