3
(h*                 @   s   d dl Z e j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|j d p|j dnd }d}xtj| D ]}|\}}|r|d dkrd|kr|r|jdd\}}	y"|snt|d|| |	f fV  W q tk
r   td| Y qX n$|r| r|d||f fV  n|V  d}q,|V  |d	k}q,W 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_namespaceZparsing_attributetokenZttypetagprefixuri r   3/tmp/pip-install-q3hcpn_q/lxml/lxml/_elementpath.pyxpath_tokenizerI   s&    
r   c                s   |d   fdd}|S )Nr   c             3   s"   x| D ]}|j  E d H  qW 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"   x| D ]}|j dE d H  qW d S )N*)r   )r   r   r   r   r   r   j   s    
zprepare_star.<locals>.selectr   )r   r   r   r   r   r   prepare_stari   s    r   c             C   s   dd }|S )Nc             S   s   | S )Nr   )r   r   r   r   r   p   s    zprepare_self.<locals>.selectr   )r   r   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"   x| D ]}|j  E d H  qW d S )N)Ziterdescendants)r   r   )r   r   r   r   |   s    
z"prepare_descendant.<locals>.select)r   )r   r   r   r   )r   r   prepare_descendantt   s    
r!   c             C   s   dd }|S )Nc             s   s(   x"| D ]}|j  }|d k	r|V  qW d S )N)	getparent)r   r   parentr   r   r   r      s    
zprepare_parent.<locals>.selectr   )r   r   r   r   r   r   prepare_parent   s    r$   c                s*  d}g }xp|  }|d dkrP |dkr(q
|d rX|d d d dkrXd|d dd f}||d pdd7 }|j |d  q
W |dkr|d fd	d
}|S |dkr|d |d fdd
}|S |dkrtjd|d  r|d fdd
}|S |dks|dkrTtjd|d  rT|d |d  rDfdd
}nfdd
}|S |dksr|dksr|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
y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   z'"'-z@-c             3   s&   x | D ]}|j  d k	r|V  qW d S )N)r   )r   r   )keyr   r   r      s    
z!prepare_predicate.<locals>.selectz@-='c             3   s&   x | D ]}|j  kr|V  qW d S )N)r   )r   r   )r(   valuer   r   r      s    
z-?\d+$c             3   s.   x(| D ] }x|j  D ]}|V  P qW qW d S )N)r   )r   r   _)r   r   r   r      s    
z.='z-='c             3   s@   x:| D ]2}x,|j  D ]}dj|j kr|V  P qW qW d S )Nr   )r   joinitertext)r   r   e)r   r)   r   r   r      s
    
c             3   s*   x$| D ]}dj |j  kr|V  qW d S )Nr   )r+   r,   )r   r   )r)   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`   xZ| D ]R}|j  }|d krqy&t|j|j}|  |kr@|V  W q tk
rV   Y qX qW d S )N)r"   listr   r   
IndexError)r   r   r#   elems)indexr   r   r      s    

zinvalid predicate)r   r   r4   r4   r4   r4   )appendrematchintr   
ValueError)r   r   	signature	predicater   r   )r3   r(   r   r)   r   prepare_predicate   sf    (




r<   )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 |j D  7 }n|tt|j 7 }yt| S  tk
r   Y nX ttd	krtj  | dd dkrtd
t	t
| ||d}y
|j}W n tk
r   |j}Y nX y
| }W n tk
rD   tdY nX g }xzy|jt|d  || W n tk
r   tdY nX y| }|d dkr| }W n tk
r   P Y nX qLW |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   z#cannot use absolute path on element)r   zempty path expressionr   zinvalid pathr4   )r9   tuplesorteditems_cacher   lenclearr   iterr   r   AttributeError__next__StopIterationr5   ops)pathr   r   	cache_keystream_nextr   selectorr   r   r   _build_path_iterator   sT    


rT   c             C   s2   t |||d}t| f}x|D ]}||}qW |S )N)r   )rT   rJ   )r   rO   r   r   rS   r   r   r   r   r   iterfind3  s
    

rU   c             C   s2   t | |||d}yt|S  tk
r,   d S X d S )N)r   )rU   r   rM   )r   rO   r   r   itr   r   r   find>  s
    rW   c             C   s   t t| ||S )N)r0   rU   )r   rO   r   r   r   r   r   r	   I  s    r	   c             C   s*   t | |||d}|d kr|S |jp$dS d S )N)r   r   )rW   text)r   rO   defaultr   r   elr   r   r   findtextP  s    r[   )NT)T)NT)NT)NT)NNT)r6   compiler   r   r   r   r    r!   r$   r<   rN   rG   rT   rU   rW   r	   r[   r   r   r   r   <module>;   s*   
c
9


