U .e@sddlmZmZmZddlmZddlmZddlm Z ddl m Z ddl m Z d d Z Gd d d eZGd ddeZGdddeZGdddeZGddde jZdS))absolute_importdivisionunicode_literals) text_type)etree) tag_regexp)base) _ihatexmlcCs*|dkr dSt|tr|S|ddSdS)Nasciistrict) isinstancerdecode)srO/usr/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py ensure_str s  rc@s,eZdZddZddZddZddZd S) RootcCs||_g|_z:|jjrD|jt|t|jjt|jjt|jj Wnt k rZYnXz | }Wnt k r|}YnX| dk r| }q|dk r|j|| }qd|_d|_dSN)Z elementtreechildrenZdocinfoZ internalDTDappendDoctyperZ root_name public_idZ system_urlAttributeErrorZgetrootZ getpreviousgetnexttexttail)selfZetnoderrr__init__s,          z Root.__init__cCs |j|Sr)rrkeyrrr __getitem__1szRoot.__getitem__cCsdSrrrrrrr4sz Root.getnextcCsdSNr rr$rrr__len__7sz Root.__len__N)__name__ __module__ __qualname__r r#rr&rrrrrsrc@seZdZddZddZdS)rcCs(||_||_||_||_d|_d|_dSr) root_nodenamer system_idrr)rr*r+rr,rrrr <s zDoctype.__init__cCs |jjdSr%)r*rr$rrrrEszDoctype.getnextNr'r(r)r rrrrrr;s rc@seZdZddZddZdS) FragmentRootcs$fdd|D_d__dS)Ncsg|]}t|qSr)FragmentWrapper).0Zchildr$rr Ksz)FragmentRoot.__init__..)rrr)rrrr$rr JszFragmentRoot.__init__cCsdSrrr$rrrrNszFragmentRoot.getnextNr-rrrrr.Isr.c@sTeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)r/cCsT||_||_t|jdr(t|jj|_nd|_t|jdrJt|jj|_nd|_dS)Nrr)r*objhasattrrrr)rZ fragment_rootr2rrrr Ss  zFragmentWrapper.__init__cCs t|j|Sr)getattrr2)rr+rrr __getattr___szFragmentWrapper.__getattr__cCs6|jj}||}|t|dkr.||dSdSdSr%)r*rindexlen)rZsiblingsidxrrrrbs   zFragmentWrapper.getnextcCs |j|Sr)r2r!rrrr#jszFragmentWrapper.__getitem__cCs t|jSr)boolr2r$rrr__bool__mszFragmentWrapper.__bool__cCsdSrrr$rrr getparentpszFragmentWrapper.getparentcCs t|jSrstrr2r$rrr__str__sszFragmentWrapper.__str__cCs t|jSrr<r$rrr __unicode__vszFragmentWrapper.__unicode__cCs t|jSr)r7r2r$rrrr&yszFragmentWrapper.__len__N) r'r(r)r r5rr#r:r;r>r?r&rrrrr/Rs r/c@s4eZdZddZddZddZddZd d Zd S) TreeWalkercCsJt|trt||_t|}nt|_t|}tj||t |_ dSr) rlistsetfragmentChildrenr.rr NonRecursiveTreeWalkerr r Z InfosetFilterfilter)rZtreerrrr ~s   zTreeWalker.__init__c Cst|tr:|\}}|dks&td|tjtt||fSt|trLtjfSt|t rjtj |j |j |j fSt|trt|dstjt|jfS|jtjkrtjt|jfS|jtjkrtjt|jddfStt|j}|r|\}}nd}t|j}i}t|jD]P\}}t|}t|}t|}|rT|||d|df<n ||d|f<qtj||j !||t"|dkp|jfSdS)Nrr%Text nodes are text or tail, found %stagr rr)#rtupleAssertionErrorr ZTEXTrr4rZDOCUMENTrZDOCTYPEr+rr,r/r3r2rHrCommentCOMMENTrZEntityZENTITYrmatchgroupsrAZattribitemsgroupZELEMENTrEZ fromXmlNamer7) rrr"rN namespacerHZattrsr+valuerrrgetNodeDetailss>       zTreeWalker.getNodeDetailscCsBt|trtdt|s(|js(td|jr6|dfS|dSdS)NzText nodes have no childrenzNode has no childrenrr)rrJrKr7r)rrrrr getFirstChilds zTreeWalker.getFirstChildcCsbt|trL|\}}|dks&td||dkrDt|r>|dSdSn|S|jrZ|dfS|S)NrFrGrrr)rrJrKr7rrrrr"rrrgetNextSiblings zTreeWalker.getNextSiblingcCsJt|tr4|\}}|dks&td||dkrB|Sn||jkrBdS|S)NrFrGr)rrJrKrCr;rVrrr getParentNodes  zTreeWalker.getParentNodeN)r'r(r)r rTrUrWrXrrrrr@}s  ) r@N)Z __future__rrrZpip._vendor.sixrZlxmlrZtreebuilders.etreerr r robjectrrr.r/rDr@rrrrs      & +