3
_&                 @   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	dd Z
eeee	ee
dZi ZG dd dZdddZd ddZd!ddZd"ddZdS )#    Nz\('[^']*'|\"[^\"]*\"|::|//?|\.\.|\(\)|[/.*:\[\]\(\)@=])|((?:\{[^}]+\})?[^/\[\]\(\)@=\s]+)|\s+c             c   s   xt j| D ]}|d }|r|d dkrd|kry6|jdd\}}|sJt|d d|| |f fV  W q tk
r   td| Y qX q|V  qW d S )N   r   {:z{%s}%sz!prefix %r not found in prefix map)xpath_tokenizer_refindallsplitKeyErrorSyntaxError)pattern
namespacestokentagprefixZuri r   +/usr/lib/python3.6/xml/etree/ElementPath.pyxpath_tokenizerI   s    r   c             C   sF   | j }|d krBi  | _ }x(| jj D ]}x|D ]}|||< q.W q$W |S )N)
parent_maprootiter)contextr   per   r   r   get_parent_mapW   s    

r   c                s   |d   fdd}|S )Nr   c             3   s0   x*|D ]"}x|D ]}|j  kr|V  qW qW d S )N)r   )r   resultelemr   )r   r   r   selectb   s    


zprepare_child.<locals>.selectr   )nextr   r   r   )r   r   prepare_child`   s    r   c             C   s   dd }|S )Nc             s   s   x|D ]}|E d H  qW d S )Nr   )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   |E d H  d S )Nr   )r   r   r   r   r   r   p   s    zprepare_self.<locals>.selectr   )r   r   r   r   r   r   prepare_selfo   s    r   c                s\   y
|  }W n t k
r   d S X |d dkr2d n|d sD|d  ntd fdd}|S )Nr   *r   zinvalid descendantc             3   s4   x.|D ]&}x |j  D ]}||k	r|V  qW qW d S )N)r   )r   r   r   r   )r   r   r   r      s    
z"prepare_descendant.<locals>.select)StopIterationr	   )r   r   r   r   )r   r   prepare_descendantt   s    

r"   c             C   s   dd }|S )Nc             s   sD   t | }i }x2|D ]*}||kr|| }||krd ||< |V  qW d S )N)r   )r   r   r   Z
result_mapr   parentr   r   r   r      s    
zprepare_parent.<locals>.selectr   )r   r   r   r   r   r   prepare_parent   s    
r$   c                s*  g }g }xy
|  }W n t k
r(   d S X |d dkr8P |d rh|d d d dkrhd|d dd f}|j|d pvd |j|d  q
W dj|}|dkr|d fd	d
}|S |dkr|d |d fdd
}|S |dkrtjd|d  r|d fdd
}|S |dkrVtjd|d  rV|d |d fdd
}|S |dkst|dkst|dkr|dkrt|d d   dk rtdnl|d dkrtd|dkr
yt|d d  W n tk
r   tdY nX  dkrtdnd  fdd
}|S tdd S ) Nr   ]r   z'"'- z@-c             3   s&   x |D ]}|j  d k	r|V  qW d S )N)get)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   )r*   valuer   r   r      s    
z\-?\d+$c             3   s&   x |D ]}|j  d k	r|V  qW d S )N)find)r   r   r   )r   r   r   r      s    
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   joinZitertext)r   r   r   r   )r   r+   r   r   r      s
    
z-()z-()-zXPath position >= 1 expectedZlastzunsupported function   zunsupported expressionz)XPath offset from last() must be negativec             3   sb   t | }xT|D ]L}y.|| }t|j|j}|  |kr>|V  W q ttfk
rX   Y qX qW d S )N)r   listr   r   
IndexErrorr   )r   r   r   r   r#   Zelems)indexr   r   r      s    

zinvalid predicater2   r2   r2   )r!   appendr-   rematchintr	   
ValueError)r   r   Z	signatureZ	predicater   r   )r1   r*   r   r+   r   prepare_predicate   sd    







r9   )r(   r    .z..z//[c               @   s   e Zd ZdZdd ZdS )_SelectorContextNc             C   s
   || _ d S )N)r   )selfr   r   r   r   __init__   s    z_SelectorContext.__init__)__name__
__module____qualname__r   r>   r   r   r   r   r<      s   r<   c       
   !   C   sh  ||d krd nt t|j f}|dd  dkr8|d }yt| }W n tk
r:   ttdkrjtj  |d d dkrtdtt	||j
}y
| }W n tk
r   d S X g }xvy|jt|d  || W n tk
r   tdY nX y| }|d dkr| }W q tk
r(   P Y qX qW |t|< Y nX | g}t| }x|D ]}	|	||}qPW |S )	Nr   /r    d   z#cannot use absolute path on elementr   zinvalid pathr2   )tuplesorteditems_cacher   lenclearr	   r   r   __next__r!   r4   opsr<   )
r   pathr   Z	cache_keyZselectorr   r   r   r   r   r   r   r   iterfind   sD    


rM   c             C   s   t t| ||d S )N)r   rM   )r   rL   r   r   r   r   r,   )  s    r,   c             C   s   t t| ||S )N)r/   rM   )r   rL   r   r   r   r   r   /  s    r   c             C   s4   yt t| ||} | jpdS  tk
r.   |S X d S )Nr(   )r   rM   textr!   )r   rL   defaultr   r   r   r   findtext5  s
    
rP   )N)N)N)N)NN)r5   compiler   r   r   r   r   r   r"   r$   r9   rK   rG   r<   rM   r,   r   rP   r   r   r   r   <module>;   s,   
		Y

)

