U
    +}f)                     @   s   d dl mZ d dlZedZdddZdd Zdd	 Zd
d Zdd Z	dd Z
dd Zeeee
e	edZi Zdd ZdddZdddZd ddZd!ddZdS )"    )absolute_importNzY('[^']*'|"[^"]*"|::|//?|\.\.|\(\)|[/.*:\[\]\(\)@=])|((?:\{[^}]+\})?[^/\[\]\(\)@=\s]+)|\s+c           	   	   c   s   |r| d p| dnd }d}t| D ]}|\}}|r|d dkrd|kr|dd\}}z"|sht|d|| |f fV  W q tk
r   td| Y qX n"|r|s|d||f fV  n|V  d}q*|V  |d	k}q*d S )
N Fr   {:   z{%s}%sz!prefix %r not found in prefix map@)getxpath_tokenizer_refindallsplitKeyErrorSyntaxError)	pattern
namespacesdefault_namespaceparsing_attributetokenttypetagprefixuri r   5/tmp/pip-unpacked-wheel-d1taxcn3/lxml/_elementpath.pyxpath_tokenizerJ   s&    r   c                    s   |d   fdd}|S )Nr   c                 3   s$   | D ]}|  D ]
}|V  qqd S Niterchildrenresultelemer   r   r   selecte   s    zprepare_child.<locals>.selectr   nextr   r"   r   r!   r   prepare_childc   s    r%   c                 C   s   dd }|S )Nc                 s   s$   | D ]}| dD ]
}|V  qqd S )N*r   r   r   r   r   r"   l   s    zprepare_star.<locals>.selectr   r#   r   r   r   prepare_stark   s    r'   c                 C   s   dd }|S )Nc                 S   s   | S r   r   )r   r   r   r   r"   s   s    zprepare_self.<locals>.selectr   r#   r   r   r   prepare_selfr   s    r(   c                    sB   |  }|d dkrd n|d s*|d  nt d fdd}|S )Nr   r&   r   zinvalid descendantc                 3   s$   | D ]}|  D ]
}|V  qqd S r   )Ziterdescendantsr   r!   r   r   r"      s    z"prepare_descendant.<locals>.select)r   r#   r   r!   r   prepare_descendantw   s    
r)   c                 C   s   dd }|S )Nc                 s   s$   | D ]}|  }|d k	r|V  qd S r   )	getparent)r   r   parentr   r   r   r"      s    zprepare_parent.<locals>.selectr   r#   r   r   r   prepare_parent   s    r,   c                    s"  d}g }|  }|d dkrqv|dkr&q|d rV|d d d dkrVd|d dd f}||d pbd	7 }| |d  q|d
kr|d fdd}|S |dkr|d |d fdd}|S |d	krtd|d s|d fdd}|S |dks|dkrLtd|d sL|d |d r<fdd}nfdd}|S |d	ksj|dksj|dkr|d	krt|d d   dk r dkrtdntdnZ|d dkrtd|dkrzt|d d  W n tk
r   tdY nX nd  fdd}|S tdd S )Nr   r   ])r   r   r   z'"'-z@-c                 3   s"   | D ]}|  d k	r|V  qd S r   r   r   r   )keyr   r   r"      s    z!prepare_predicate.<locals>.selectz@-='c                 3   s"   | D ]}|  kr|V  qd S r   r1   r2   )r3   valuer   r   r"      s    z-?\d+$c                 3   s(   | D ]}|  D ]}|V   qqqd S r   r   )r   r   _r!   r   r   r"      s    z.='z-='c                 3   s:   | D ]0}|  D ] }d| kr|V   qqqd S Nr   )r   joinitertextr   )r   r4   r   r   r"      s
    c                 3   s&   | D ]}d |  kr|V  qd S r6   )r7   r8   r2   )r4   r   r   r"      s    z-()z-()-z3indices in path predicates are 1-based, not 0-basedzpath index >= 1 expectedlastzunsupported function   zunsupported expressionc              	   3   s\   | D ]R}|  }|d krqz&t||j}|  |kr>|V  W q tk
rT   Y qX qd S r   )r*   listr   r   
IndexError)r   r   r+   elems)indexr   r   r"      s    
zinvalid predicate)appendrematchintr   
ValueError)r$   r   	signature	predicater"   r   )r>   r3   r   r4   r   prepare_predicate   sf    &




rF   )r   r&   .z..z//[c                 C   s  | dd dkr| d7 } | f}|rd|krd|krZ|d |d krZt d|d |d f ||d fttdd | D  7 }n|tt| 7 }z
t| W S  tk
r   Y nX ttd	krt  | dd
 dkrtdt	t
| |}z
|j}W n tk
r   |j}Y nX z
| }W n tk
rB   tdY nX g }z|t|d  || W n tk
r   tdY nX z| }|d dkr| }W n tk
r   Y qY nX qH|t|< |S )zcompile selector patternr/   N/r&   r   z2Ambiguous default namespace provided: %r versus %rc                 s   s   | ]}|d  dk	r|V  qdS )r   Nr   ).0itemr   r   r   	<genexpr>  s     z'_build_path_iterator.<locals>.<genexpr>d   r   z#cannot use absolute path on elementzempty path expressionr   zinvalid path)rC   tuplesorteditems_cacher   lenclearr   iterr   r$   AttributeError__next__StopIterationr?   ops)pathr   	cache_keystream_nextr   selectorr   r   r   _build_path_iterator   sX     



r^   c                 C   s*   t ||}t| f}|D ]}||}q|S r   )r^   rT   )r   rY   r   r]   r   r"   r   r   r   iterfind7  s
    


r_   c                 C   s2   t | ||}z
t|W S  tk
r,   Y d S X d S r   )r_   r$   rW   )r   rY   r   itr   r   r   findB  s
    
ra   c                 C   s   t t| ||S r   )r;   r_   )r   rY   r   r   r   r   r
   M  s    r
   c                 C   s&   t | ||}|d kr|S |jp dS d S r6   )ra   text)r   rY   defaultr   elr   r   r   findtextT  s    re   )N)N)N)N)NN)
__future__r   r@   compiler	   r   r%   r'   r(   r)   r,   rF   rX   rQ   r^   r_   ra   r
   re   r   r   r   r   <module>:   s0   
c9


