MpjdZddlmZmZmZmZddlmZddlm Z m Z ddl m Z ddl mZmZmZddlmZmZmZdd lmZmZdd lmZd ZGd d e ZGddeZy)zbThis is an experimental tool for reconstructing text from a shaped tree, based on a Lark grammar. )DictCallableIterableOptional)Lark)Tree ParseTree)Transformer_InPlace)Token PatternStr TerminalDef)Terminal NonTerminalSymbol) TreeMatcheris_discarded_terminal)is_id_continuec: t|}y#t$rYywxYw)NFT)next StopIteration)i_s ^/mnt/ssd/data/Dropbox/adrian/scripts/msg_venv/lib/python3.12/site-packages/lark/reconstruct.py is_iter_emptyrs% G s  ceZdZUdZeeefed<eeee geffed<deeefdeeee geffddfdZ dZ y)WriteTokensTransformerzTInserts discarded tokens into their correct place, according to the rules of grammartokens term_subsreturnNc ||_||_yN)rr)selfrrs r__init__zWriteTokensTransformer.__init__s "ct|dds t||St|}g}|jD]}t |r2 |j |j |}|j|@t|} t| t r|| z }at| t"rt%| j&|k(s(J| t)| j*|k(s J|| f|j| t-|sJ|S#t$r[|j|j }t|jtstd|z|jj}YwxYw)N match_treeFz,Reconstructing regexps not supported yet: %s)getattrr iterorig_expansionrrnameKeyErrorr isinstancepatternr NotImplementedErrorvalueappendrlistr rtyperdatar) r#r4childrenmeta iter_argsto_writesymvtxs r __default__z"WriteTokensTransformer.__default__!sEt\51h' 'N && 'C$S)(0sxx05A"Oa&MH!!U+'/36996*1662c9CC8C9OOA&) ',Y'''' ( CHH-A%aii<12`cd2dee A (sDA E*)E*) __name__ __module__ __qualname____doc__rstrr__annotations__rrr$r=r%rrrssZ k! ""C6(C-0011#tC$45#$sHV\U]_bUbLcGcBd#im#r%rc eZdZUdZeed<d dedeee e e ge ffddfdZ dZ dd ed ee ee gee fd ede fd Zy) 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_tokensNparserrr ctj||t|jDcic]}|j|c}|xsi|_ycc}wr")rr$rrr+rG)r#rHrr;s rr$zReconstructor.__init__PsBT6*2dkk3RAFF1H3RT]Tcacd3RsAc#K|j||j}|jj|}|D]0}t |t r|j |Ed{-|2y7 wr")r'r4rG transformr-r _reconstruct)r#treeunreduced_treeresitems rrLzReconstructor._reconstructUsgtyy9)).9 D$%,,T222  3sA!A2#A0$ A2rMpostproc insert_spacesc|j|}|r||}g}d}|D]H}|r1|r/|r-t|drt|dr|jd|j||}Jdj|S)Nr )rLrr1join)r#rMrQrRr<y prev_itemrPs r reconstructzReconstructor.reconstruct`s   d #  A   DtyQS}8UZhimnoipZq HHTNI   wwqzr%r")NT)r>r?r@rArrCrrrrBrrr$rLr rboolrZrDr%rrFrFAs )(etec8VHVYMCZ>Z9[0\efje   XhQT X`adXeGe>f5g ~B LO r%rFN)rAtypingrrrrlarkrrMr r visitorsr lexerr r rgrammarrrr tree_matcherrrutilsrrrrFrDr%rrcsL65!)1122<!'0'T*K*r%