U Dx`& @sdZddlmZddlmZz ddlZWnek rDedYnXejZej Z ej Z ddd d gZ Gd d d ej Z Gd dde ejZddZedZde_eed<Gdd d ejZdS)zCSS 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/SelectorSyntaxErrorExpressionError SelectorError CSSSelectorc@seZdZdZddZdS)LxmlTranslatorzR A custom CSS selector to XPath translator with lxml-specific extensions. cCsF|dgdgfkr"td|j|jdj}|d||S)NSTRINGZIDENTz9Expected a single string or ident for :contains(), got %rrz7contains(__lxml_internal_css:lower-case(string(.)), %s))Zargument_typesr argumentsvalueZ add_conditionZ xpath_literallower)selfZxpathfunctionr r5/tmp/pip-target-zr53vnty/lib/python/lxml/cssselect.pyxpath_contains_function!s  z&LxmlTranslator.xpath_contains_functionN)__name__ __module__ __qualname____doc__rrrrrr sr c@seZdZdZdS)LxmlHTMLTranslatorz) lxml extensions + HTML support. N)rrrrrrrrr.srcCs|S)N)r )contextsrrr_make_lower_case4srzhttp://codespeak.net/lxml/css/Z__lxml_internal_cssz lower-casec@s"eZdZdZdddZddZdS) raA CSS selector. Usage:: >>> from lxml import etree, cssselect >>> select = cssselect.CSSSelector("a tag > child") >>> root = etree.XML("TEXT") >>> [ 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(( ... '' ... 'blah' ... '') % rdfns) >>> [(el.tag, el.text) for el in select_ns(rdf)] [('{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description', 'blah')] NxmlcCsX|dkrt}n"|dkr t}n|dkr2tdd}||}tjj|||d||_dS)NrhtmlxhtmlT)r) namespaces)r rZ css_to_xpathrXPath__init__css)rr!rZ translatorpathrrrr Ws  zCSSSelector.__init__cCs(d|jjttt|dd|jfS)Nz<%s %s for %r>) __class__rhexabsidr!)rrrr__repr__bs zCSSSelector.__repr__)Nr)rrrrr r(rrrrr<s )r __future__rrZ cssselectZexternal_cssselect ImportErrorrrr__all__ZGenericTranslatorr ZHTMLTranslatorrrZFunctionNamespacensprefixrrrrrrs*