a Ra9@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)selfrrrr]/opt/alt/python39/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)relementZlastrrr appendChild4s zDocument.appendChildcCs|jSr)rrrrr_getChildNodes;szDocument._getChildNodesN)rrrrr"r#propertyZ childNodesrrrrr/srcs6gtjdddfdd |ddS)NTZpreventDoubleDashCommentsrc s,t|ds,t|drd|jjrz|jjsF|jjsFd|jj}nd|jj|jj|jjf}dd|d|f|}|dur|}q|dur||d| }qnnt |t st |t rt |t st jd dksJd d||fn$d |D]}||dqn|jtkrd d||jft|d r(|jr(d d||jfnt |tjsJtj|j}|dur|d}|d}tj|}dd|||fndd||jft|drg}|jD]d\} } t| }|durj|\}} | } tj|}d|| f} n | } || | fq t|D]&\} } dd|d| | fq|jrڈd d|d|jf|d7}|D]} | |qt|d r(|jr(d d|d|jfdS)Ntagrz #document zz|%s%s rrz|%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 isinstancestrbytessys version_infor& comment_typetextr)r Z_Elementetree_builders tag_regexpmatchgroupr prefixes fromXmlNamer*itemsgroupssorted) r!indentdtd_strZ next_elementZnsmatchnsr&prefix attributesrvalueZ attr_stringchild infosetFilterrvserializeElementrrrJEs|                       z(testSerializer..serializeElement )r)r InfosetFilterjoinr!rrGrtestSerializerAs  F rOcs$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).0rrErrr sz6tostring..serializeElement..z<%s %s>zr))r+r-r.doctyper/r,rr&r5r6r*rMr=r))r!rAattrrFrIrJrrrJs,        z"tostring..serializeElement)rMrNrrTrtostrings rVcszeZdZeZeZdZdZeZ 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)r0tupleZcoerceAttribute)rkeyrrHrr _coerceKeys  z3TreeBuilder.__init__..Attributes._coerceKeycSs0|jjj||}ts,t|tr,|d}|S)Nascii)r r*r^r r0rdecoderr\rErrr __getitem__s z4TreeBuilder.__init__..Attributes.__getitem__cSs||jjj||<dSrr r*r^rarrr __setitem__sz4TreeBuilder.__init__..Attributes.__setitem__cSs|jjj||=dSrrc)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*clearrrrrrjsz.TreeBuilder.__init__..Attributes.clearN) rrrrr^rbrdrergrirjrr]rr Attributess rkcspeZdZfddZfddZfddZeeeZddZd d Z eee Z dfd d Z ddZ d S)z%TreeBuilder.__init__..Elementcs*|}jj|||d||_dS)N) namespace) coerceElementElementr _attributes)rrrlrkbuilderrHrrrs z.TreeBuilder.__init__..Element.__init__cs$||_||j|j|j_dSr)rm_nameZ _getETreeTagZ _namespacer r&)rrr]rr_setNames z.TreeBuilder.__init__..Element._setNamecs |jSr)r<rrrr]rr_getNamesz.TreeBuilder.__init__..Element._getNamecSs|jSr)rorrrr_getAttributessz4TreeBuilder.__init__..Element._getAttributescSs|j}|||dSr)rDrjupdate)rrErDrrr_setAttributessz4TreeBuilder.__init__..Element._setAttributesNcs|}j|||dSr)ZcoerceCharactersrn insertText)rdataZ insertBeforerqrHrrrxs z0TreeBuilder.__init__..Element.insertTextcSs0t||j|j}|jjr,|jj|jj|Sr)typerrlr r*rvrYrrr cloneNodesz/TreeBuilder.__init__..Element.cloneNode)N) rrrrrsrtr$rrurwrDrxr|rrprrrns    rncs8eZdZfddZfddZddZeeeZdS)z%TreeBuilder.__init__..Commentcs|}j||dSr) coerceCommentCommentrrryrzrrr s z.TreeBuilder.__init__..Comment.__init__cs|}||j_dSr)r}r r6rr]rr_setDatas z.TreeBuilder.__init__..Comment._setDatacSs|jjSr)r r6rrrr_getDatasz.TreeBuilder.__init__..Comment._getDataN)rrrrrrr$ryrrzrrr~ s r~)r7ZgetETreeModuler r rLrHnamespaceHTMLElementsrrnr~ elementClass commentClassrrWr)rrrXrnr~rrprrs $zTreeBuilder.__init__cCs$tj||j|_g|_d|_dSr)rrWresetinsertCommentInitial insertCommentinitial_commentsrRrrrrrs zTreeBuilder.resetcCst|Sr)rOrYrrrrO#szTreeBuilder.testSerializercCstr |jjS|jjSdSr)rXdocumentrrrrrr getDocument&szTreeBuilder.getDocumentcCsFg}|jdj}|jr"||j|t||jrB||j|S)Nr) openElementsr r6r,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 rRrHrm doctypeClass)rtokenrrrZ coercedNamerRrrr insertDoctype6s   zTreeBuilder.insertDoctypecCs6|dus||jusJ|jjdus&J|j|dSr)rrrr,rryparentrrrrFsz TreeBuilder.insertCommentInitialcsB||jkr,|jjdjtkr,tdttt | ||dS)Nz@lxml cannot represent adjacent comments beyond the root elements) rrrr&r5rrr superrWrr __class__rrinsertCommentMainKs   zTreeBuilder.insertCommentMainc Csd}|jr|jjsJ|d|jj7}|jjdus>|jjdur|d|j|jjpRd7}|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}|durj|} n d||f} | |_|||} || _|jj| |j| |j|_dS)NrUz rzGlxml cannot represent doctype with a different name to the root elementz$ryrlrZ)rRrrrrHZ coercePubidfindrrr replacer Z fromstringrrZ addpreviousr documentClassrZ getroottreergetZdefaultNamespacer&rrr,rrr) rrZdocStrZsysidroot comment_tokenZcommentrrlZ etree_tagZ root_elementrrr insertRootQsP              zTreeBuilder.insertRoot)F)N)N)rrrrrrrrrZ fragmentClassr implementationrrrOrrrrrr __classcell__rrrrrWs \  rW)#__doc__Z __future__rrrrrer3collections.abcr ImportError collectionsrUrr r r r7r Z lxml.etreeZpip._vendor.sixr rrXcompiler8r~r&r5objectrrrOrVrWrrrrs.          O)