U
    :g*                     @   s   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dZdddZd ddZd!ddZd"ddZdS )#    NzY('[^']*'|"[^"]*"|::|//?|\.\.|\(\)|[/.*:\[\]\(\)@=])|((?:\{[^}]+\})?[^/\[\]\(\)@=\s]+)|\s+Tc           
   	   c   s   |r| d p| dnd }d}t| D ]}|\}}|r|d dkrd|kr|r|dd\}}	z"|slt|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with_prefixesdefault_namespaceparsing_attributetokenttypetagprefixuri r   5/tmp/pip-unpacked-wheel-m1sofc2u/lxml/_elementpath.pyxpath_tokenizerI   s&    r   c                    s   |d   fdd}|S )Nr   c                 3   s   | D ]}|  E d H  qd S Niterchildrenresultelemr   r   r   selectd   s    zprepare_child.<locals>.selectr   nextr   r!   r   r    r   prepare_childb   s    r$   c                 C   s   dd }|S )Nc                 s   s   | D ]}| dE d H  qd S )N*r   r   r   r   r   r!   j   s    zprepare_star.<locals>.selectr   r"   r   r   r   prepare_stari   s    r&   c                 C   s   dd }|S )Nc                 S   s   | S r   r   )r   r   r   r   r!   p   s    zprepare_self.<locals>.selectr   r"   r   r   r   prepare_selfo   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 ]}|  E d H  qd S r   )Ziterdescendantsr   r    r   r   r!   |   s    z"prepare_descendant.<locals>.select)r   r"   r   r    r   prepare_descendantt   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   )keyr   r   r!      s    z!prepare_predicate.<locals>.selectz@-='c                 3   s"   | D ]}|  kr|V  qd S r   r0   r   )r1   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itertext)r   r   e)r   r2   r   r   r!      s
    c                 3   s&   | D ]}d |  kr|V  qd S r4   )r5   r6   r   )r2   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=   r1   r   r2   r   prepare_predicate   sf    &




rE   )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
| ||d}z
|j}W n tk
r   |j}Y nX z
| }W n tk
rF   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 qL|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 elementr   zempty path expressionr   zinvalid path)rB   tuplesorteditems_cacher   lenclearr   iterr   r#   AttributeError__next__StopIterationr>   ops)pathr   r   	cache_keystream_nextr   selectorr   r   r   _build_path_iterator   sX     



r^   c                 C   s.   t |||d}t| f}|D ]}||}q|S NrM   )r^   rT   )r   rY   r   r   r]   r   r!   r   r   r   iterfind3  s
    

r`   c                 C   s6   t | |||d}z
t|W S  tk
r0   Y d S X d S r_   )r`   r#   rW   )r   rY   r   r   itr   r   r   find>  s
    
rb   c                 C   s   t t| ||S r   )r:   r`   )r   rY   r   r   r   r   r   r	   I  s    r	   c                 C   s*   t | |||d}|d kr|S |jp$dS d S )NrM   r   )rb   text)r   rY   defaultr   r   elr   r   r   findtextP  s    rf   )NT)T)NT)NT)NT)NNT)r?   compiler   r   r$   r&   r'   r(   r+   rE   rX   rQ   r^   r`   rb   r	   rf   r   r   r   r   <module>;   s.   
c
9


