
    }fi                        d dl mZ d dlZd dlmZ d dlmZ d dlmZ ddl	m
Z
 ddlmZ  G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Zy)    )annotationsN)Mapping)contextmanager)Any   )Node)is_listc                       e Zd Z fdZ xZS )NodeWalkerMetac                :    t         |   | |||      }i |_        |S N)super__new___walker_cache)mcsnamebasesdctclass_	__class__s        L/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/tatsu/walkers.pyr   zNodeWalkerMeta.__new__   s$    dE37!    )__name__
__module____qualname__r   __classcell__r   s   @r   r   r      s     r   r   c                  <     e Zd Z fdZddZddZeZdddZ xZS )
NodeWalkerc                V    t         |           t        |       j                  | _        y r   )r   __init__typer   )selfr   s    r   r!   zNodeWalker.__init__   s&    !

- 	r   c           
     t   t        |t        t        z        r$|D cg c]  } | j                  |g|i | c}S t        |t              r8|j                         D ci c]  \  }}| | j                  |g|i | c}}S | j                  |      }t        |      r || |g|i |S |S c c}w c c}}w r   )
isinstancelisttuplewalkr   items_find_walkercallable)r#   nodeargskwargsnr   valuewalkers           r   r(   zNodeWalker.walk   s    dD5L);?@aIDIIa1$1&1@@dG$ $(::<D% idii7777 
 ""4(F$6t6v66K As   B/!B4c                    t        |t              sg S |j                         D cg c]  } | j                  |g|i | c}S c c}w r   )r%   r   childrenr(   )r#   r,   r-   r.   childs        r   walk_childrenzNodeWalker.walk_children+   sN    $%I 
 DIIe-d-f-
 	
 
s   Ac                   d }| j                   }|j                   }|j                  }| j                  j                  |      x}r|S |j                   g}|r|j	                  d      }|j
                  }	t        |||	z   d       }t        |      rnt        j                  d||j
                        }
|
|	k7  rt        |||
z   d       }t        |      rn|
j                  d      }
|
|	k7  rt        |||
z   d       }t        |      rnS|j                  D ]  }||vs|j                  |        |rt        |dd       }|t        |dd       }t        |      sd }|| j                  |<   |S )Nc                D    d| j                         j                         z   S )N_)grouplower)ms    r   pythonize_matchz0NodeWalker._find_walker.<locals>.pythonize_match8   s    ***r   r   z[A-Z]+r8   _walk_defaultwalk_default)r   r   r   getpopr   getattrr+   resublstrip	__bases__append)r#   r,   prefixr<   clsnode_clsnode_cls_qualnamer1   node_classescammelcase_namepythonic_namebs               r   r*   zNodeWalker._find_walker7   s   	+ nn>>$11''++,=>>6>M'#''*H&//OS&?":DAF FF/8+<+<M / f}&<dCF# *005M/ f}&<dCF#'' +L( ''*+1 8 S/48F~  F#06,-r   )r,   zNode | list[Node]returnr   )r,   r   )walk_)	r   r   r   r!   r(   r5   _walk_childrenr*   r   r   s   @r   r   r      s#     
 #N1 1r   r   )	metaclassc                       e Zd Z fdZ xZS )PreOrderWalkerc                ^    t        |   |g|i |}| | j                  |g|i | |S r   )r   r(   r5   )r#   r,   r-   r.   resultr   s        r   r(   zPreOrderWalker.walkl   s@    d4T4V4Dt5d5f5r   r   r   r   r(   r   r   s   @r   rT   rT   k   s     r   rT   c                       e Zd Z fdZ xZS )DepthFirstWalkerc           
        t        |t              rE|j                         D cg c]  } | j                  |g|i | }}t	        |   ||g|i |S t        |t
              r8|j                         D ci c]  \  }}| | j                  |g|i | c}}S t        |      r-t        |      D cg c]  } | j                  |g|i | c}S t	        |   |g g|i |S c c}w c c}}w c c}w r   )	r%   r   r3   r(   r   r   r)   r	   iter)	r#   r,   r-   r.   cr3   r/   er   s	           r   r(   zDepthFirstWalker.walkt   s    dD!?C}}O!			!5d5f5OHO7<h@@@@g&AENAAytyy4T4V44NNT];?:FaIDIIa1$1&1FF7<b:4:6:: P OFs   C+:!C07C6rW   r   s   @r   rY   rY   s   s    	; 	;r   rY   c                  l     e Zd Z fdZd Zd Zd Zd Zd Ze	d        Z
e	d        Zed	        Z xZS )
ContextWalkerc                @    t         |           || _        |g| _        y r   )r   r!   _initial_context_context_stack)r#   initial_contextr   s     r   r!   zContextWalker.__init__   s!     /./r   c                    |S r    )r#   r,   r-   r.   s       r   get_node_contextzContextWalker.get_node_context   s    r   c                     y r   re   r#   ctxs     r   enter_contextzContextWalker.enter_context       r   c                     y r   re   rh   s     r   leave_contextzContextWalker.leave_context   rk   r   c                :    | j                   j                  |       y r   )rb   rF   rh   s     r   push_contextzContextWalker.push_context   s    ""3'r   c                8    | j                   j                          y r   )rb   r@   r#   s    r   pop_contextzContextWalker.pop_context   s    !r   c                    | j                   S r   )ra   rq   s    r   rc   zContextWalker.initial_context   s    $$$r   c                     | j                   d   S )N)rb   rq   s    r   contextzContextWalker.context   s    ""2&&r   c              /  J  K    | j                   |g|i |}|| j                  k(  r| y | j                  |       	 | j                  |       	 | | j	                          	 | j                  |       y # | j	                          w xY w# | j                  |       w xY wwr   )rf   rv   rj   ro   rr   rm   )r#   r,   r-   r.   ri   s        r   new_contextzContextWalker.new_context   s     #d##D:4:6:$,,Is#(!!#&'I$$&""3' $$&""3's4   <B#B A8 B &B#8B

B B  B#)r   r   r   r!   rf   rj   rm   ro   rr   propertyrc   rv   r   rx   r   r   s   @r   r_   r_      s]    0(" % % ' ' ( (r   r_   )
__future__r   rB   collections.abcr   
contextlibr   typingr   objectmodelr   utilr	   r"   r   r   rT   rY   r_   re   r   r   <module>r      sY    " 	 # %   T U> UpZ 
;z 
;.(J .(r   