B
    |/\'                 @   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 nd }xt| D ]}|d }|r|d dkrd|kr|dd\}}y&|s\t|d d|| |f fV  W q tk
r   td| Y qX q|r|d d||f fV  q|V  q|V  qW d S )N   r   {:z{%s}%sz!prefix %r not found in prefix map)getxpath_tokenizer_refindallsplitKeyErrorSyntaxError)pattern
namespacesZdefault_namespacetokentagprefixZuri r   0lib/python3.7/site-packages/lxml/_elementpath.pyxpath_tokenizerJ   s     r   c                s   |d   fdd}|S )Nr   c             3   s,   x&| D ]}x|  D ]
}|V  qW qW d S )N)iterchildren)resulteleme)r   r   r   selecta   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 ]}x| dD ]
}|V  qW qW d S )N*)r   )r   r   r   r   r   r   r   h   s    
zprepare_star.<locals>.selectr   )r   r   r   r   r   r   prepare_starg   s    r   c             C   s   dd }|S )Nc             S   s   | S )Nr   )r   r   r   r   r   o   s    zprepare_self.<locals>.selectr   )r   r   r   r   r   r   prepare_selfn   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 ]}x|  D ]
}|V  qW qW d S )N)Ziterdescendants)r   r   r   )r   r   r   r   {   s    
z"prepare_descendant.<locals>.select)r   )r   r   r   r   )r   r   prepare_descendants   s    
r   c             C   s   dd }|S )Nc             s   s(   x"| D ]}|  }|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 }| |d  q
W |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rPtd|d sP|d |d r@fdd}nfdd}|S |d	ksn|dksn|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 )N r   ])r"   r"   r   z'"'-z@-c             3   s&   x | D ]}|  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 ]}|  kr|V  qW d S )N)r   )r   r   )r'   valuer   r   r      s    
z-?\d+$c             3   s.   x(| D ] }x|  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,|  D ]}d| kr|V  P qW qW d S )Nr"   )r   joinitertext)r   r   r   )r   r(   r   r   r      s
    
c             3   s*   x$| D ]}d |  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 expectedZlastzunsupported function   zunsupported expressionc          	   3   s`   xZ| D ]R}|  }|d krqy&t||j}|  |kr@|V  W q tk
rV   Y qX qW d S )N)r   listr   r   
IndexError)r   r   r    Zelems)indexr   r   r      s    

zinvalid predicate)appendrematchintr   
ValueError)r   r   Z	signatureZ	predicater   r   )r/   r'   r   r(   r   prepare_predicate   sf    &




r5   )r"   r   .z..z//[c             C   s  | dd dkr| d7 } | f}|rxd|kr2t dd|krd||d fttdd | D  7 }n|tt| 7 }yt| S  tk
r   Y nX ttd	krt  | dd
 dkrtdt	t
| |}y
|j}W n tk
r   |j}Y nX y
| }W n tk
r   tdY nX g }xzy|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 q&W |t|< |S )zcompile selector patternr%   N/r   r"   zCempty namespace prefix must be passed as None, not the empty stringc             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)r4   tuplesorteditems_cacher
   lenclearr   iterr   r   AttributeError__next__StopIterationr0   ops)pathr   Z	cache_keystreamZ_nextr   selectorr   r   r   _build_path_iterator   sR    


rK   c             C   s.   t ||}t| f}x|D ]}||}qW |S )N)rK   rC   )r   rH   r   rJ   r   r   r   r   r   iterfind/  s
    


rL   c             C   s.   t | ||}yt|S  tk
r(   d S X d S )N)rL   r   rF   )r   rH   r   itr   r   r   find:  s
    rN   c             C   s   t t| ||S )N)r-   rL   )r   rH   r   r   r   r   r   E  s    r   c             C   s&   t | ||}|d kr|S |jp dS d S )Nr"   )rN   text)r   rH   defaultr   Zelr   r   r   findtextL  s    rQ   )N)N)N)N)NN)Z
__future__r   r1   compiler   r   r   r   r   r   r!   r5   rG   r@   rK   rL   rN   r   rQ   r   r   r   r   <module>:   s,   
c5


