a
    &b                     @   s^   d dl Z d dlmZ d dlmZ d dlmZ deZe 	ej
Zdd Zdd	 Zd
d ZdS )    N)etree)string_types)HTML5_WHITESPACEz[{}]+c                 C   s&   t d}|dur||| < n|| = dS )a  Register a custom extension function to use in XPath expressions.

    The function ``func`` registered under ``fname`` identifier will be called
    for every matching node, being passed a ``context`` parameter as well as
    any parameters passed from the corresponding XPath expression.

    If ``func`` is ``None``, the extension function will be removed.

    See more `in lxml documentation`_.

    .. _`in lxml documentation`: http://lxml.de/extensions.html#xpath-extension-functions

    N)r   ZFunctionNamespace)fnamefuncZns_fns r   0lib/python3.9/site-packages/parsel/xpathfuncs.pyset_xpathfunc   s    

r	   c                   C   s   t dt d S )Nz	has-class)r	   	has_classr   r   r   r   setup!   s    r   c                 G   s   | j ds>|std|D ]}t|tstdqd| j d< | jd}|du rVdS d| d }td|}|D ]}d| d |vrp dS qpdS )	zbhas-class function.

    Return True if all ``classes`` are present in element's class attr.

    Zargs_checkedz4XPath error: has-class must have at least 1 argumentz0XPath error: has-class arguments must be stringsTclassNF )Zeval_contextget
ValueError
isinstancer   Zcontext_nodereplace_html5_whitespaces)contextclassescZnode_clsclsr   r   r   r
   %   s(    


r
   )reZlxmlr   Zsixr   Z
w3lib.htmlr   formatZregexcompilesubr   r	   r   r
   r   r   r   r   <module>   s   
