a lj9@sdZddlmZmZmZddlZddlZddlZzddlm Z Wne y^ddl m Z Yn0ddl m Z ddlmZdd l mZdd l mZdd l mZddlmZdd lmZmZd ZedZedjZGdddeZGdddeZddZ ddZ!Gddde j"Z"dS)aModule for supporting the lxml.etree library. The idea here is to use as much of the native library as possible, without using fragile hacks like custom element names that break between releases. The downside of this is that we cannot represent all possible trees; specifically the following are known to cause problems: Text or comments as siblings of the root element Docypes with no name When any of these things occur, we emit a DataLossWarning )absolute_importdivisionunicode_literalsN)MutableMapping)base)DataLossWarning) constants)etree) _ihatexml)PY3 binary_typeTz {([^}]*)}(.*)Zasdc@seZdZddZdS) DocumentTypecCs||_||_||_dSN)namepublicIdsystemId)selfrrrrP/usr/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py__init__)szDocumentType.__init__N)__name__ __module__ __qualname__rrrrrr(src@s,eZdZddZddZddZeeZdS)DocumentcCsd|_g|_dSr) _elementTree _childNodesrrrrr0szDocument.__init__cCs.|j}|jD]}q||jdSr)rgetrootZ itersiblingsZaddnext_element)relementlastrrr appendChild4s zDocument.appendChildcCs|jSr)rrrrr_getChildNodes;szDocument._getChildNodesN)rrrrr#r$propertyZ childNodesrrrrr/srcs6gtjdddfdd |ddS)NTZpreventDoubleDashCommentsrc st|ds t|drd|jjrz|jjsF|jjsFd|jj}nd|jj|jj|jjf}dd|d|f|}|dur|}q|dur||d| }qnNt |t st |t rd d||fn"d |D]}||dqn|j tkr`d d||jft|d r|jrd d||jfntj|j }|dur|d }|d}tj|}dd|||fndd||j ft|drg}|jD]d\} } t| }|dur8|\}} | } tj|}d|| f} n | } || | fqt|D]&\} } dd|d| | fq\|jrd d|d|jf|d7}|D]} | |qt|d r|jrd d|d|jfdS)Ntagrz #document zz|%s%s rz|%s"%s"z#document-fragmentz|%stailrz |%s<%s %s>z|%s<%s>attribz%s %sz |%s%s="%s")hasattrappenddocinfo internalDTDZ public_idZ system_url root_namerZ getpreviousZgetnext isinstancestrbytesr' comment_typetextr*etree_builders tag_regexpmatchgroupr prefixes fromXmlNamer+itemsgroupssorted) r!indentdtd_strZ next_elementZnsmatchnsr'prefix attributesrvalueZ attr_stringchild infosetFilterrvserializeElementrrrIEsx                       z(testSerializer..serializeElement )r)r InfosetFilterjoinr!rrFrtestSerializerAs  F rNcs$gfdd|dS)z4Serialize an element and its child nodes to a stringcst|dsH|jjr:|jjr$|jj}n d|jj}||n|jtkrfd|j fn~|j sd|jfn.d dd|j D}d|j|f|j r|j |D] }|qĈd |jft|d r|j r|j dS) Nr'r(z z<%s>r)cSsg|]\}}d||fqS)z%s="%s"r).0rrDrrr sz6tostring..serializeElement..z<%s %s>zr*)r,r.r/doctyper0r-rr'r4r5r+rLr<r*)r!r@attrrErHrIrrrIs,        z"tostring..serializeElement)rLrMrrSrtostrings rUcszeZdZeZeZdZdZeZ e Z dddZ ddZ ddZd d Zd d Zd dZdddZdfdd ZddZZS) TreeBuilderNFcstjt|dtjdd|_||_GfdddtGfdddj}Gfdd d j }||_ ||_ t j ||dS) N)fullTreeTr&csPeZdZddZfddZddZddZd d Zd d Zd dZ ddZ dS)z(TreeBuilder.__init__..AttributescSs ||_dSr)r rr!rrrrsz1TreeBuilder.__init__..Attributes.__init__cs4t|tr&d|d|df}n |}|S)N{%s}%srr)r1tupleZcoerceAttribute)rkeyrrGrr _coerceKeys  z3TreeBuilder.__init__..Attributes._coerceKeycSs0|jjj||}ts,t|tr,|d}|S)Nascii)r r+r]r r1rdecoderr[rDrrr __getitem__s z4TreeBuilder.__init__..Attributes.__getitem__cSs||jjj||<dSrr r+r]r`rrr __setitem__sz4TreeBuilder.__init__..Attributes.__setitem__cSs|jjj||=dSrrb)rr[rrr __delitem__sz4TreeBuilder.__init__..Attributes.__delitem__cSst|jjjSr)iterr r+rrrr__iter__sz1TreeBuilder.__init__..Attributes.__iter__cSst|jjjSr)lenr r+rrrr__len__sz0TreeBuilder.__init__..Attributes.__len__cSs|jjjSr)r r+clearrrrrrisz.TreeBuilder.__init__..Attributes.clearN) rrrrr]rarcrdrfrhrirr\rr Attributess rjcspeZdZfddZfddZfddZeeeZddZd d Z eee Z dfd d Z ddZ d S)z%TreeBuilder.__init__..Elementcs*|}jj|||d||_dS)N) namespace) coerceElementElementr _attributes)rrrkrjbuilderrGrrrs z.TreeBuilder.__init__..Element.__init__cs$||_||j|j|j_dSr)rl_nameZ _getETreeTagZ _namespacer r')rrr\rr_setNames z.TreeBuilder.__init__..Element._setNamecs |jSr)r;rqrr\rr_getNamesz.TreeBuilder.__init__..Element._getNamecSs|jSr)rnrrrr_getAttributessz4TreeBuilder.__init__..Element._getAttributescSs|j}|||dSr)rCriupdate)rrDrCrrr_setAttributessz4TreeBuilder.__init__..Element._setAttributesNcs|}j|||dSr)ZcoerceCharactersrm insertText)rdataZ insertBeforerprGrrrws z0TreeBuilder.__init__..Element.insertTextcSs0t||j|j}|jjr,|jj|jj|Sr)typerrkr r+rurXrrr cloneNodesz/TreeBuilder.__init__..Element.cloneNode)N) rrrrrrrsr%rrtrvrCrwr{rrorrrms    rmcs8eZdZfddZfddZddZeeeZdS)z%TreeBuilder.__init__..Commentcs|}j||dSr) coerceCommentCommentrrrxryrrr s z.TreeBuilder.__init__..Comment.__init__cs|}||j_dSr)r|r r5r~r\rr_setDatas z.TreeBuilder.__init__..Comment._setDatacSs|jjSr)r r5rrrr_getDatasz.TreeBuilder.__init__..Comment._getDataN)rrrrrrr%rxrryrrr} s r})r6ZgetETreeModuler r rKrGnamespaceHTMLElementsrrmr} elementClass commentClassrrVr)rrrWrmr}rrorrs $zTreeBuilder.__init__cCs$tj||j|_g|_d|_dSr)rrVresetinsertCommentInitial insertCommentinitial_commentsrQrrrrrs zTreeBuilder.resetcCst|Sr)rNrXrrrrN#szTreeBuilder.testSerializercCstr |jjS|jjSdSr)rWdocumentrrrrrr getDocument&szTreeBuilder.getDocumentcCsFg}|jdj}|jr"||j|t||jrB||j|S)Nr) openElementsr r5r-extendlistr*)rfragmentr!rrr getFragment,s   zTreeBuilder.getFragmentcCsh|d}|d}|d}|s0tdtd|_n4|j|}||krPtdt||||}||_dS)Nrrrz#lxml cannot represent empty doctypez%lxml cannot represent non-xml doctype)warningswarnr rQrGrl doctypeClass)rtokenrrrZ coercedNamerQrrr insertDoctype6s   zTreeBuilder.insertDoctypecCs|j|dSr)rr-rrxparentrrrrFsz TreeBuilder.insertCommentInitialcsB||jkr,|jjdjtkr,tdttt | ||dS)Nz@lxml cannot represent adjacent comments beyond the root elements) rrrr'r4rrr superrVrr __class__rrinsertCommentMainKs   zTreeBuilder.insertCommentMainc Csd}|jr|d|jj7}|jjdus2|jjdur|d|j|jjpFd7}|jjr|jj}|ddkr|ddkrtdt | dd}|ddkr|d |7}q|d |7}n|d 7}|d 7}|jj|d krtdt |d7}t |}|j D] }||d}||jq||_||j_|d }|d|j}|dur^|} n d||f} | |_|||} || _|jj| |j| |j|_dS)NrTz rzGlxml cannot represent doctype with a different name to the root elementz$rxrkrY)rQrrrrGZ coercePubidfindrrr replacer Z fromstringrrZ addpreviousr documentClassrZ getroottreergetZdefaultNamespacer'rrr-rrr) rrZdocStrZsysidroot comment_tokenZcommentrrkZ etree_tagZ root_elementrrr insertRootQsN             zTreeBuilder.insertRoot)F)N)N)rrrrrrrrrZ fragmentClassr implementationrrrNrrrrrr __classcell__rrrrrVs \  rV)#__doc__Z __future__rrrrresyscollections.abcr ImportError collectionsrTrr r r r6r Z lxml.etreeZpip._vendor.sixr rrWcompiler7r}r'r4objectrrrNrUrVrrrrs.          O)