
    Xh                         d Z ddlmZmZmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZ ddlmZmZmZ ddlmZmZmZ dd	lmZmZ dd
lmZ d Z G d de      Z G d de      Zy)zbThis is an experimental tool for reconstructing text from a shaped tree, based on a Lark grammar.
    )DictCallableIterableOptional   )Lark)Tree	ParseTree)Transformer_InPlace)Token
PatternStrTerminalDef)TerminalNonTerminalSymbol)TreeMatcheris_discarded_terminal)is_id_continuec                 :    	 t        |       }y# t        $ r Y yw xY w)NFT)nextStopIteration)i_s     D/var/www/html/myenv/lib/python3.12/site-packages/lark/reconstruct.pyis_iter_emptyr      s%    G s    	c                       e Zd ZU dZeeef   ed<   eeee	gef   f   ed<   deeef   deeee	gef   f   ddfdZ
d Zy)WriteTokensTransformerzTInserts discarded tokens into their correct place, according to the rules of grammartokens	term_subsreturnNc                      || _         || _        y N)r   r   )selfr   r   s      r   __init__zWriteTokensTransformer.__init__   s    "    c                    t        |dd      st        ||      S t        |      }g }|j                  D ]  }t	        |      r2	  | j
                  |j                     |      }|j                  |       @t        |      }	t        |	t               r||	z  }at        |	t"              rt%        |	j&                        |k(  s(J |	       t)        |	j*                        |k(  s	J ||	f       |j                  |	        t-        |      sJ |S # t        $ r[ | j                  |j                     }t        |j                  t              st        d|z        |j                  j                  }Y w xY w)N
match_treeFz,Reconstructing regexps not supported yet: %s)getattrr	   iterorig_expansionr   r   nameKeyErrorr   
isinstancepatternr   NotImplementedErrorvalueappendr   listr   r   typer   datar   )
r#   r4   childrenmeta	iter_argsto_writesymvtxs
             r   __default__z"WriteTokensTransformer.__default__!   sE   t\51h''N	&& 	'C$S)(0sxx05A "Oa&MH!!U+'/36996*1662c9CC8C9OOA&)	', Y''''   (CHH-A%aii<12`cd2dee		A(s   DA E*)E*)__name__
__module____qualname____doc__r   strr   __annotations__r   r   r$   r=    r%   r   r   r      ss    Zk!""C6(C-0011#tC$45 #$sHV\U]_bUbLcGcBd #im #r%   r   c            
           e Zd ZU dZeed<   ddedeee	e
ege	f   f      ddfdZd Zdd	ed
ee
ee	   gee	   f      dede	fdZy)Reconstructora  
    A Reconstructor that will, given a full parse Tree, generate source code.

    Note:
        The reconstructor cannot generate values from regexps. If you need to produce discarded
        regexes, such as newlines, use `term_subs` and provide default values for them.

    Parameters:
        parser: a Lark instance
        term_subs: a dictionary of [Terminal name as str] to [output text as str]
    write_tokensNparserr   r    c                     t        j                  | |       t        | j                  D ci c]  }|j                  | c}|xs i       | _        y c c}w r"   )r   r$   r   r   r+   rG   )r#   rH   r   r;   s       r   r$   zReconstructor.__init__P   sB    T6*2dkk3RAFF1H3RT]Tcacd3Rs   Ac              #      K   | j                  ||j                        }| j                  j                  |      }|D ]0  }t	        |t
              r| j                  |      E d {    -| 2 y 7 wr"   )r'   r4   rG   	transformr-   r	   _reconstruct)r#   treeunreduced_treeresitems        r   rL   zReconstructor._reconstructU   sg     tyy9)).9 	D$%,,T222
	 3s   A!A2#A0$A2rM   postprocinsert_spacesc                     | j                  |      }|r ||      }g }d}|D ]H  }|r1|r/|r-t        |d         rt        |d         r|j                  d       |j                  |       |}J dj                  |      S )N r    )rL   r   r1   join)r#   rM   rQ   rR   r<   y	prev_itemrP   s           r   reconstructzReconstructor.reconstruct`   s    d#A	 	DtyQS}8UZhimnoipZqHHTNI		
 wwqzr%   r"   )NT)r>   r?   r@   rA   r   rC   r   r   r   rB   r   r   r$   rL   r
   r   boolrZ   rD   r%   r   rF   rF   A   s    
 )(et ec8VHVYMCZ>Z9[0\ efj e
		 XhQTX`adXeGe>f5g   ~B   LO r%   rF   N)rA   typingr   r   r   r   larkr   rM   r	   r
   visitorsr   lexerr   r   r   grammarr   r   r   tree_matcherr   r   utilsr   r   r   rF   rD   r%   r   <module>rc      sL    6 5  ! ) 1 1 2 2 < !'0 'T*K *r%   