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 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 infosetFilterrvserializeElementrrrKEs|                       z(testSerializer..serializeElement )r)r InfosetFilterjoinr!rrHrtestSerializerAs  F rPcs$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).0rrFrrr sz6tostring..serializeElement..z<%s %s>zr*)r,r.r/doctyper0r-rr'r6r7r+rNr>r*)r!rBattrrGrJrKrrrKs,        z"tostring..serializeElement)rNrOrrUrtostrings rWcszeZdZeZeZdZdZeZ 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)rkeyrrIrr _coerceKeys  z3TreeBuilder.__init__..Attributes._coerceKeycSs0|jjj||}ts,t|tr,|d}|S)Nascii)r r+r_r r1rdecoderr]rFrrr __getitem__s z4TreeBuilder.__init__..Attributes.__getitem__cSs||jjj||<dSrr r+r_rbrrr __setitem__sz4TreeBuilder.__init__..Attributes.__setitem__cSs|jjj||=dSrrd)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+clearrrrrrksz.TreeBuilder.__init__..Attributes.clearN) rrrrr_rcrerfrhrjrkrr^rr Attributess rlcspeZdZfddZfddZfddZeeeZddZd d Z eee Z dfd d Z ddZ d S)z%TreeBuilder.__init__..Elementcs*|}jj|||d||_dS)N) namespace) coerceElementElementr _attributes)rrrmrlbuilderrIrrrs z.TreeBuilder.__init__..Element.__init__cs$||_||j|j|j_dSr)rn_nameZ _getETreeTagZ _namespacer r')rrr^rr_setNames z.TreeBuilder.__init__..Element._setNamecs |jSr)r=rsrr^rr_getNamesz.TreeBuilder.__init__..Element._getNamecSs|jSr)rprrrr_getAttributessz4TreeBuilder.__init__..Element._getAttributescSs|j}|||dSr)rErkupdate)rrFrErrr_setAttributessz4TreeBuilder.__init__..Element._setAttributesNcs|}j|||dSr)ZcoerceCharactersro insertText)rdataZ insertBeforerrrIrrrys z0TreeBuilder.__init__..Element.insertTextcSs0t||j|j}|jjr,|jj|jj|Sr)typerrmr r+rwrZrrr cloneNodesz/TreeBuilder.__init__..Element.cloneNode)N) rrrrrtrur%rrvrxrEryr}rrqrrros    rocs8eZdZfddZfddZddZeeeZdS)z%TreeBuilder.__init__..Commentcs|}j||dSr) coerceCommentCommentrrrzr{rrr s z.TreeBuilder.__init__..Comment.__init__cs|}||j_dSr)r~r r7rr^rr_setDatas z.TreeBuilder.__init__..Comment._setDatacSs|jjSr)r r7rrrr_getDatasz.TreeBuilder.__init__..Comment._getDataN)rrrrrrr%rzrr{rrr s r)r8ZgetETreeModuler r rMrInamespaceHTMLElementsrror elementClass commentClassrrXr)rrrYrorrrqrrs $zTreeBuilder.__init__cCs$tj||j|_g|_d|_dSr)rrXresetinsertCommentInitial insertCommentinitial_commentsrSrrrrrs zTreeBuilder.resetcCst|Sr)rPrZrrrrP#szTreeBuilder.testSerializercCstr |jjS|jjSdSr)rYdocumentrrrrrr getDocument&szTreeBuilder.getDocumentcCsFg}|jdj}|jr"||j|t||jrB||j|S)Nr) openElementsr r7r-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 rSrIrn doctypeClass)rtokenrrrZ coercedNamerSrrr insertDoctype6s   zTreeBuilder.insertDoctypecCs6|dus||jusJ|jjdus&J|j|dSr)rrrr-rrzparentrrrrFsz TreeBuilder.insertCommentInitialcsB||jkr,|jjdjtkr,tdttt | ||dS)Nz@lxml cannot represent adjacent comments beyond the root elements) rrrr'r6rrr superrXrr __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)NrVz rzGlxml cannot represent doctype with a different name to the root elementz$rzrmr[)rSrrrrIZ coercePubidfindrrr replacer Z fromstringrrZ addpreviousr documentClassrZ getroottreergetZdefaultNamespacer'rrr-rrr) rrZdocStrZsysidroot comment_tokenZcommentrrmZ etree_tagZ root_elementrrr insertRootQsP              zTreeBuilder.insertRoot)F)N)N)rrrrrrrrrZ fragmentClassr implementationrrrPrrrrrr __classcell__rrrrrXs \  rX)#__doc__Z __future__rrrrrer4collections.abcr ImportError collectionsrVrr r r r8r Z lxml.etreeZpip._vendor.sixr rrYcompiler9rr'r6objectrrrPrWrXrrrrs.          O)