3 PfL@sddlmZmZmZyddlmZWn>ek rbyddlmZWnek r\eZYnXYnXddl Z ddl m Z ddl m Z ddlmZe jd Zd d ZeeZdS) )absolute_importdivisionunicode_literals) OrderedDictN) string_types)base)moduleFactoryFactoryz {([^}]*)}(.*)cs,|}|jdjGfdddtj}tS)NZasdcs4eZdZdZfddZddZddZdd Zd S) z#getETreeBuilder..TreeWalkeraGiven the particular ElementTree representation, this implementation, to avoid using recursion, returns "nodes" as tuples with the following content: 1. The current element 2. The index of the element relative to its parent 3. A stack of ancestor elements 4. A flag "text", "tail" or None to indicate if the current node is a text node; either the text or tail of the current element (1) c sLt|tr2|\}}}}|d kr.tjt||fS|}t|dsD|j}|jd krVtjfS|jdkr|tj |j |j d|j dfS|jkrtj |j fSt|jt stt|jtj|j}|r|j\}}n d}|j}t}xPt|jjD]>\} } tj| }|r| ||jd |jd f<q| |d| f<qWtj|||t|pD|j fSdS) Ntexttailtag DOCUMENT_ROOTDOCUMENT_FRAGMENTz ZpublicIdZsystemIdrr )r r )rr) isinstancetuplerZTEXTgetattrhasattrZgetrootr ZDOCUMENTZDOCTYPEr getCOMMENTrAssertionErrortype tag_regexpmatchgroupsrlistZattribitemsgroupZELEMENTlen) selfnodeZelt_flagr namespacer Zattrsnamevalue)ElementTreeCommentType/usr/lib/python3.6/etree.pygetNodeDetails's8         z2getETreeBuilder..TreeWalker.getNodeDetailscSstt|tr|\}}}}n|dgdf\}}}}|dkr8dS|jrJ|||dfSt|rl|j||dd|dfSdSdS)Nr r r)r r )rrr rappend)rr elementkeyparentsr"r'r'r( getFirstChildOs   z1getETreeBuilder..TreeWalker.getFirstChildcSst|tr|\}}}}ndS|dkrLt|rF|j||dd|dfSdSnN|jrf|dkrf|||dfS|t|ddkr|d|d|d|dfSdSdS)Nr rr rr/)rrrr*r )rr r+r,r-r"r'r'r(getNextSibling`s   z2getETreeBuilder..TreeWalker.getNextSiblingcSst|tr|\}}}}ndS|dkr:|s,|S|||dfSnD|j}|sJ|St|dj|dksdt|t|dj||dfSdS)Nr rr/r/)rrpoprcountrindex)rr r+r,r-r"parentr'r'r( getParentNodets z1getETreeBuilder..TreeWalker.getParentNodeN)__name__ __module__ __qualname____doc__r)r.r0r5r')r&r'r( TreeWalkers   (r:)Commentr rZNonRecursiveTreeWalkerlocals)ZElementTreeImplementationZ ElementTreer:r')r&r(getETreeBuilders nr=)Z __future__rrr collectionsr ImportErrorZ ordereddictdictreZpip._vendor.sixrrZ_utilsr compilerr=ZgetETreeModuler'r'r'r(s    t