PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` 3 aG\ @s4dZddlmZGdddeZGdddeZdS)z jinja2.visitor ~~~~~~~~~~~~~~ This module implements a visitor for the nodes. :copyright: (c) 2017 by the Jinja Team. :license: BSD. )Nodec@s(eZdZdZddZddZddZdS) NodeVisitoraWalks the abstract syntax tree and call visitor functions for every node found. The visitor functions may return values which will be forwarded by the `visit` method. Per default the visitor functions for the nodes are ``'visit_'`` + class name of the node. So a `TryFinally` node visit function would be `visit_TryFinally`. This behavior can be changed by overriding the `get_visitor` function. If no visitor function exists for a node (return value `None`) the `generic_visit` visitor is used instead. cCsd|jj}t||dS)zReturn the visitor function for this node or `None` if no visitor exists for this node. In that case the generic visit function is used instead. Zvisit_N) __class____name__getattr)selfnodemethodr /usr/lib/python3.6/visitor.py get_visitors zNodeVisitor.get_visitorcOs4|j|}|dk r"||f||S|j|f||S)z Visit a node.N)r generic_visit)rrargskwargsfr r r visit"s zNodeVisitor.visitcOs(x"|jD]}|j|f||q WdS)z9Called if no explicit visitor function exists for a node.N)Ziter_child_nodesr)rrrrr r r r )szNodeVisitor.generic_visitN)r __module__ __qualname____doc__r rr r r r r rs rc@s eZdZdZddZddZdS)NodeTransformeraWalks the abstract syntax tree and allows modifications of nodes. The `NodeTransformer` will walk the AST and use the return value of the visitor functions to replace or remove the old node. If the return value of the visitor function is `None` the node will be removed from the previous location otherwise it's replaced with the return value. The return value may be the original node in which case no replacement takes place. c Osx|jD]\}}t|trg}xT|D]L}t|trh|j|f||}|dkrRq&nt|tsh|j|q&|j|q&W||dd<q t|tr |j|f||}|dkrt||q t|||q W|S)N) Z iter_fields isinstancelistrrextendappenddelattrsetattr) rrrrZfieldZ old_valueZ new_valuesvalueZnew_noder r r r :s&       zNodeTransformer.generic_visitcOs&|j|f||}t|ts"|g}|S)z{As transformers may return lists in some places this method can be used to enforce a list as return value. )rrr)rrrrrvr r r visit_listPs zNodeTransformer.visit_listN)rrrrr rr r r r r/s rN)rZ jinja2.nodesrobjectrrr r r r  s !