o
    üÞhê  ã                   @   sª   d Z ddlmZ zddlZW n ey   edƒ‚w ejZejZejZg d¢Z	G dd„ dej
ƒZG d	d
„ d
eejƒZdd„ Ze d¡Zde_eed< G dd„ dejƒZdS )zÄCSS Selectors based on XPath.

This module supports selecting XML/HTML tags based on CSS selectors.
See the `CSSSelector` class for details.

This is a thin wrapper around cssselect 0.7 or later.
é   )Úetreeé    NzPcssselect does not seem to be installed. See https://pypi.org/project/cssselect/)ÚSelectorSyntaxErrorÚExpressionErrorÚSelectorErrorÚCSSSelectorc                   @   s   e Zd ZdZdd„ ZdS )ÚLxmlTranslatorzR
    A custom CSS selector to XPath translator with lxml-specific extensions.
    c                 C   sF   |  ¡ dgdgfvrtd|j ƒ‚|jd j}| d|  | ¡ ¡ ¡S )NÚSTRINGÚIDENTz9Expected a single string or ident for :contains(), got %rr   z7contains(__lxml_internal_css:lower-case(string(.)), %s))Úargument_typesr   Ú	argumentsÚvalueÚadd_conditionÚxpath_literalÚlower)ÚselfÚxpathÚfunctionr   © r   úN/var/www/html/premium_crap/venv/lib/python3.10/site-packages/lxml/cssselect.pyÚxpath_contains_function    s   ÿÿÿÿz&LxmlTranslator.xpath_contains_functionN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r      s    r   c                   @   s   e Zd ZdZdS )ÚLxmlHTMLTranslatorz)
    lxml extensions + HTML support.
    N)r   r   r   r   r   r   r   r   r   -   s    r   c                 C   s   |  ¡ S )N)r   )ÚcontextÚsr   r   r   Ú_make_lower_case3   s   r   zhttp://codespeak.net/lxml/css/Ú__lxml_internal_cssz
lower-casec                       s*   e Zd ZdZd‡ fdd„	Zdd„ Z‡  ZS )	r   a–  A CSS selector.

    Usage::

        >>> from lxml import etree, cssselect
        >>> select = cssselect.CSSSelector("a tag > child")

        >>> root = etree.XML("<a><b><c/><tag><child>TEXT</child></tag></b></a>")
        >>> [ el.tag for el in select(root) ]
        ['child']

    To use CSS namespaces, you need to pass a prefix-to-namespace
    mapping as ``namespaces`` keyword argument::

        >>> rdfns = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
        >>> select_ns = cssselect.CSSSelector('root > rdf|Description',
        ...                                   namespaces={'rdf': rdfns})

        >>> rdf = etree.XML((
        ...     '<root xmlns:rdf="%s">'
        ...       '<rdf:Description>blah</rdf:Description>'
        ...     '</root>') % rdfns)
        >>> [(el.tag, el.text) for el in select_ns(rdf)]
        [('{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description', 'blah')]

    NÚxmlc                    sV   |dkrt ƒ }n|dkrtƒ }n	|dkrtdd�}| |¡}tƒ j||d� || _d S )Nr    ÚhtmlÚxhtmlT)r"   )Ú
namespaces)r   r   Úcss_to_xpathÚsuperÚ__init__Úcss)r   r'   r#   Ú
translatorÚpath©Ú	__class__r   r   r&   V   s   


zCSSSelector.__init__c                 C   s   d| j jtt| ƒƒ| jf S )Nz<%s %x for %r>)r+   r   ÚabsÚidr'   )r   r   r   r   Ú__repr__a   s
   
ýzCSSSelector.__repr__)Nr    )r   r   r   r   r&   r.   Ú__classcell__r   r   r*   r   r   ;   s    r   )r   Ú r   Ú	cssselectÚexternal_cssselectÚImportErrorr   r   r   Ú__all__ÚGenericTranslatorr   ÚHTMLTranslatorr   r   ÚFunctionNamespaceÚnsÚprefixÚXPathr   r   r   r   r   Ú<module>   s(    	ÿÿ
