
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
Uñ*W&  ã               @   sÀ   d Z ddlmZ ddlmZ yddlZW n ek
rD   edƒ‚Y nX ejZej	Z	ej
Z
ddd	d
gZG dd„ dejƒZG dd„ deejƒZdd„ Zej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.
é    )Úabsolute_importé   )ÚetreeNzRcssselect does not seem to be installed. See http://packages.python.org/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   |j ƒ dgdgfkr"td|j ƒ‚|jd j}|jd| j|jƒ ƒ ƒS )NÚSTRINGZIDENTz9Expected a single string or ident for :contains(), got %rr   z7contains(__lxml_internal_css:lower-case(string(.)), %s))Zargument_typesr   Z	argumentsÚvalueZadd_conditionZxpath_literalÚlower)ÚselfZxpathZfunctionr   © r   ú!/usr/lib64/python3.6/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   |j ƒ S )N)r   )ÚcontextÚsr   r   r   Ú_make_lower_case4   s    r   zhttp://codespeak.net/lxml/css/Z__lxml_internal_cssz
lower-casec               @   s"   e Zd ZdZddd„Zdd„ Zd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             C   sX   |dkrt ƒ }n"|dkr tƒ }n|dkr2tdd�}|j|ƒ}tjj| ||d� || _d S )Nr   ZhtmlÚxhtmlT)r   )Ú
namespaces)r	   r   Zcss_to_xpathr   ÚXPathÚ__init__Úcss)r   r   r   Z
translatorÚpathr   r   r   r   W   s    

zCSSSelector.__init__c             C   s(   d| j jttt| ƒƒƒdd … | jf S )Nz<%s %s for %r>é   )Ú	__class__r   ÚhexÚabsÚidr   )r   r   r   r   Ú__repr__b   s    zCSSSelector.__repr__)Nr   )r   r   r   r   r   r%   r   r   r   r   r   <   s   
)r   Z
__future__r   Ú r   Z	cssselectZexternal_cssselectÚImportErrorr   r   r   Ú__all__ZGenericTranslatorr	   ZHTMLTranslatorr   r   ZFunctionNamespaceÚnsÚprefixr   r   r   r   r   r   Ú<module>   s&   
