
    -Ph                         d Z ddlZddlZ ej        d          j        Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZeeeeeedZde
iZ G d d          Zd Zd Zd Zd ZdS )z
A simple XPath-like language for tree traversal.

This works by creating a filter chain of generator functions.  Each
function selects a part of the expression, e.g. a child node, a
specific descendant or a node that holds an attribute.
    NzH(b?'[^']*'|b?\"[^\"]*\"|//?|\(\)|==?|[/.*\[\]()@])|([^/\[\]()@=\s]+)|\s+c                 `    t          | |          }|t          |          t          u r|S |gS dS )N )getattrtypelist)node	attr_namechilds      X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/Cython/Compiler/TreePath.pyiterchildrenr      s9    D)$$E;;$L7Nr    c                 D    	 t          |           S # t          $ r Y d S w xY wN)nextStopIteration)its    r   _get_first_or_noner   #   s4    Bxx   tts    
c                 L    | j         j                            d          d         S )N.)	__class____name__split)r   s    r   	type_namer   )   s     >"((--b11r   c                     |d         } |             }|d         dk    rt          d|z            t          | |          }||fS )N   r   (z%Expected '(' after function name '%s')
ValueErrorhandle_predicate)r   tokenname	predicates       r   
parse_funcr#   ,   sP    8DDFFEQx3@4GHHH u--I?r   c                 8    t          | |          \  }fd}|S )z
    not(...)
    c              3   P   K   | D ]}t           |g                    |V   d S r   )r   )resultr   r"   s     r   selectzhandle_func_not.<locals>.select:   sD       	 	D!))TF"3"344<


	 	r   )r#   )r   r    r!   r'   r"   s       @r   handle_func_notr(   4   s8     !u--OD)     Mr   c                 `    |d         t           v rt                   | |          S fd}|S )z)
    /NodeName/
    or
    func(...)
    r   c              3   ~   K   | D ]6}|j         D ],}t          ||          D ]}t          |          k    r|V  -7d S r   child_attrsr   r   )r&   r   r	   r
   r!   s       r   r'   zhandle_name.<locals>.selectI   sr       	$ 	$D!- $ $	)$	:: $ $E ''4//#$$	$ 	$r   )	functions)r   r    r'   r!   s      @r   handle_namer.   @   sM     8DytU+++$ $ $ $ $ Mr   c                     d }|S )z
    /*/
    c              3   T   K   | D ]"}|j         D ]}t          ||          E d {V  #d S r   r,   r   )r&   r   r!   s      r   r'   zhandle_star.<locals>.selectU   s[       	4 	4D( 4 4'd33333333334	4 	4r   r   r   r    r'   s      r   handle_starr3   Q   s    4 4 4 Mr   c                     d }|S )z
    /./
    c                     | S r   r   )r&   s    r   r'   zhandle_dot.<locals>.select_   s    r   r   r2   s      r   
handle_dotr6   [   s      Mr   c                      |             }|d         dk    rfdn&|d         s|d         fdnt          d          fd}|S )z
    //...
    r   *c              3   p   K   | j         D ]*}t          | |          D ]}|V   |          E d {V  +d S r   r1   )r   r!   r
   iter_recursives      r   r:   z*handle_descendants.<locals>.iter_recursivei   so      ( 5 5)$55 5 5EKKK-~e444444444455 5r   r   c              3      K   | j         D ]=}t          | |          D ]*}t          |          k    r|V   |          E d {V  +>d S r   r+   )r   r!   r
   r:   	node_names      r   r:   z*handle_descendants.<locals>.iter_recursivep   s      ( 5 5)$55 5 5E ''944#-~e444444444455 5r   zExpected node name after '//'c              3   8   K   | D ]} |          E d {V  d S r   r   )r&   r   r:   s     r   r'   z"handle_descendants.<locals>.selecty   sE       	, 	,D%~d++++++++++	, 	,r   )r   )r   r    r'   r:   r<   s      @@r   handle_descendantsr>   c   s     DFFEQx3	5 	5 	5 	5 	5 	5
 1X 	:!H		5 	5 	5 	5 	5 	5 	5 8999, , , , , Mr   c                     |             }|d         rt          d          |d         }d |                                 }|d         dk    r |              t          |           t          j        |          fd}nfd}|S )Nr   zExpected attribute namer   =c              3   \   K   | D ]%}	  |          }n# t           $ r Y w xY w||V  &d S r   )AttributeError)r&   r   
attr_valuereadattrs      r   r'   z handle_attribute.<locals>.select   sg       % %!)$JJ%   H)$$$$% %   
""c              3      K   | D ]p}	  |          }n# t           $ r Y w xY w|k    r|V  *t          |t                    r1t          t                    r|                                k    r|V  qd S r   )rB   
isinstancebytesstrencode)r&   r   rC   rD   values      r   r'   z handle_attribute.<locals>.select   s       
% 
%!)$JJ%   H&&$$$$$ U33 %
5#8N8N %"ellnn44$$$$
% 
%rE   )r   peekparse_path_valueoperator
attrgetter)r   r    r!   r'   rD   rK   s       @@r   handle_attributerP      s    DFFEQx 423338DEIIKKEQx3 &&"4((H}	% 	% 	% 	% 	% 	%	% 	% 	% 	% 	% 	% Mr   c                 P    |             }|d         }|r|d d         dk    s|d d         dk    r|d         |d         k    sJ |dd         S |d d         dk    s|d d         dk    r1|d         |d         k    sJ |dd                              d	          S 	 t          |          S # t          $ r Y n]w xY w|d                                         rt          |d                   S |d                                         }|d
k    rdS |dk    rdS t          d| d          )Nr   r   '"r      zb'zb"zUTF-8trueTfalseFzInvalid attribute predicate: ')rJ   intr   isdigitlower)r   r    rK   r!   s       r   rM   rM      sf   DFFE!HE !9uRaRyC//9a((((2;!9bqb	T 1 19a((((2;%%g...	u:: 	 	 	D		q				 58}}Qx~~6>>4W__5
>e>>>
?
??s   B, ,
B98B9c                     |             }g g}|g|d         dvr|d                              t          |d                  | |                     	  |             }|d         dk    r
 |             }n# t          $ r Y npw xY w|d         sZ|d         dk    r |                     g             |             }n.|d         dk    r"g g}                     |            |             }|d         dv|d         st          d          fd	}|S )
Nr   )])r   /r   andorzIncomplete predicatec              3      K   | D ]G}|f}D ]?}|D ]4}t          |          }|D ]} ||          }t          |          }| n5|V   n@Hd S r   )iterr   )	r&   r   	node_baseand_conditions	condition	subresultr'   predicate_resultor_conditionss	           r   r'   z handle_predicate.<locals>.select   s       	 	DI"/  !/  I $YI"+ 6 6$*F9$5$5		'9)'D'D$'/ 0
 JJJE	 	 	r   )append
operationsr   r   )r   r    rc   r'   rg   s       @r   r   r      sg   DFFETN#$M
(*
$
$r!!:eAh#7e#D#DFFF	DFFE Qx3	  	 	 	E	 Qx 	Qx5  %%b)))qT!!"$$$^444# (*
$
$& " 1/000    " Ms   
A3 3
B ?B )@ r8   r   z//[notc                   "    e Zd Zd ZddZd ZdS )_LookAheadTokenizerc                 t    d t          |          D             | _        | j                                         d S )Nc                 $    g | ]\  }}|s|	||fS r   r   ).0specialtexts      r   
<listcomp>z0_LookAheadTokenizer.__init__.<locals>.<listcomp>   s@     
 
 
$
 
dO
 
 
r   )path_tokenizer_tokensreverse)selfpaths     r   __init__z_LookAheadTokenizer.__init__   sF    
 
#1$#7#7
 
 

 	r   NNc                 .    | j         r| j         d         n|S )Nr   )rw   )ry   defaults     r   rL   z_LookAheadTokenizer.peek  s    #'<<t|BW<r   c                 b    	 | j                                         S # t          $ r	 t          d w xY wr   )rw   pop
IndexErrorr   )ry   s    r   __call__z_LookAheadTokenizer.__call__	  s>    	*<##%%% 	* 	* 	*T)	*s    .N)r|   )r   
__module____qualname__r{   rL   r   r   r   r   ro   ro      sF          = = = =* * * * *r   ro   c                 @   t          |           } |            }g }	 	 |                    t          |d                  ||                     n# t          $ r t	          d          w xY w	  |            }|d         dk    r
 |            }n# t          $ r Y nw xY w|S )Nr   r   zinvalid pathr]   )ro   rh   ri   r   r   )rz   _nextr    selectors       r   _build_path_iteratorr     s    %%EEGGEH
	-OOJuQx0>>???? 	- 	- 	-^,,,	-	EGGEQx3 	 	 	E	
 Os   /A A(, B 
BBc                 d    t          |          }t          | f          }|D ]} ||          }|S r   )r   ra   )r   rz   selector_chainr&   r'   s        r   iterfindr   $  s?    )$//N4']]F     Mr   c                 <    t          t          | |                    S r   )r   r   r   rz   s     r   
find_firstr   +  s    htT22333r   c                 <    t          t          | |                    S r   )r   r   r   s     r   find_allr   .  s    t$$%%%r   )__doc__rerN   compilefindallrv   r   r   r   r#   r(   r.   r3   r6   r>   rP   rM   r   ri   r-   ro   r   r   r   r   r   r   r   <module>r      s    
			 	 	  	 	 	  2 2 2  
 
 
  "      :# # #L@ @ @2- - -b 




 
 
O	
* * * * * * * *&  (  4 4 4& & & & &r   